]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
Replace percent formatting with f-strings. (#1168)
authorBrian Wellington <bwelling@xbill.org>
Fri, 29 Nov 2024 20:28:00 +0000 (12:28 -0800)
committerGitHub <noreply@github.com>
Fri, 29 Nov 2024 20:28:00 +0000 (12:28 -0800)
* Replace percent formatting with f-strings.

* Fix pyright ignores.

39 files changed:
dns/edns.py
dns/ipv4.py
dns/message.py
dns/name.py
dns/query.py
dns/rdata.py
dns/rdataset.py
dns/rdtypes/ANY/AMTRELAY.py
dns/rdtypes/ANY/CAA.py
dns/rdtypes/ANY/CERT.py
dns/rdtypes/ANY/CSYNC.py
dns/rdtypes/ANY/HIP.py
dns/rdtypes/ANY/LOC.py
dns/rdtypes/ANY/LP.py
dns/rdtypes/ANY/NSEC3.py
dns/rdtypes/ANY/NSEC3PARAM.py
dns/rdtypes/ANY/RRSIG.py
dns/rdtypes/ANY/SOA.py
dns/rdtypes/ANY/SSHFP.py
dns/rdtypes/ANY/TKEY.py
dns/rdtypes/ANY/URI.py
dns/rdtypes/ANY/ZONEMD.py
dns/rdtypes/IN/APL.py
dns/rdtypes/IN/IPSECKEY.py
dns/rdtypes/IN/NAPTR.py
dns/rdtypes/IN/PX.py
dns/rdtypes/IN/SRV.py
dns/rdtypes/IN/WKS.py
dns/rdtypes/dnskeybase.py
dns/rdtypes/dsbase.py
dns/rdtypes/mxbase.py
dns/rdtypes/svcbbase.py
dns/rdtypes/tlsabase.py
dns/reversename.py
dns/tokenizer.py
dns/tsig.py
dns/version.py
dns/zonefile.py
pyproject.toml

index 8db1d2e0f83755a9d053798623a58dfd87264f48..ef57fbe93dfbceb8c430e9de5aed198bfc36dc32 100644 (file)
@@ -176,7 +176,7 @@ class GenericOption(Option):  # lgtm[py/missing-equals]
             return self.data
 
     def to_text(self) -> str:
-        return "Generic %d" % self.otype
+        return f"Generic {self.otype}"
 
     def to_generic(self) -> "GenericOption":
         return self
index 21f529614fe90922e5bfcd0acf428834ae7ddd5b..78052bfdb95f73542b013cb883ab5165321d9e2b 100644 (file)
@@ -33,7 +33,7 @@ def inet_ntoa(address: bytes) -> str:
 
     if len(address) != 4:
         raise dns.exception.SyntaxError
-    return "%u.%u.%u.%u" % (address[0], address[1], address[2], address[3])
+    return f"{address[0]}.{address[1]}.{address[2]}.{address[3]}"
 
 
 def inet_aton(text: Union[str, bytes]) -> bytes:
index fc2a0e72102881d7bc33e295c9a916567d51a2cc..c655b02c8ead9ad7c12ecced2325365d9fc6c650 100644 (file)
@@ -223,7 +223,7 @@ class Message:
         """
 
         s = io.StringIO()
-        s.write("id %d\n" % self.id)
+        s.write(f"id {self.id}\n")
         s.write(f"opcode {dns.opcode.to_text(self.opcode())}\n")
         s.write(f"rcode {dns.rcode.to_text(self.rcode())}\n")
         s.write(f"flags {dns.flags.to_text(self.flags)}\n")
@@ -231,7 +231,7 @@ class Message:
             s.write(f"edns {self.edns}\n")
             if self.ednsflags != 0:
                 s.write(f"eflags {dns.flags.edns_to_text(self.ednsflags)}\n")
-            s.write("payload %d\n" % self.payload)
+            s.write(f"payload {self.payload}\n")
         for opt in self.options:
             s.write(f"option {opt.to_text()}\n")
         for name, which in self._section_enum.__members__.items():
index 4861e11cf413671b9687083f96844d719d1aa629..7bf905081f31253bb785d4a583737182032e34fb 100644 (file)
@@ -158,7 +158,7 @@ def _escapify(label: Union[bytes, str]) -> str:
             elif c > 0x20 and c < 0x7F:
                 text += chr(c)
             else:
-                text += "\\%03d" % c
+                text += f"\\{c:03d}"
         return text
 
     # Unicode label mode.  Escape only special characters and values < 0x20
@@ -167,7 +167,7 @@ def _escapify(label: Union[bytes, str]) -> str:
         if uc in _escaped_text:
             text += "\\" + uc
         elif uc <= "\x20":
-            text += "\\%03d" % ord(uc)
+            text += f"\\{ord(uc):03d}"
         else:
             text += uc
     return text
index 068729db3c0bb8357c1b3d4dde101af775ad1678..9a9a4457c1667a905da6d469dc169b5e2bc6fb1d 100644 (file)
@@ -1601,7 +1601,7 @@ def xfr(
         rrset = q.find_rrset(
             q.authority, zone, dns.rdataclass.IN, dns.rdatatype.SOA, create=True
         )
-        soa = dns.rdata.from_text("IN", "SOA", ". . %u 0 0 0 0" % serial)
+        soa = dns.rdata.from_text("IN", "SOA", f". . {serial} 0 0 0 0")
         rrset.add(soa, 0)
     if keyring is not None:
         q.use_tsig(keyring, keyname, algorithm=keyalgorithm)
index 1913dd6ca575c3c3436dce7270a4ece83e7baeca..a305b8fadb444799f1a962a2c886277fb9938f0a 100644 (file)
@@ -107,7 +107,7 @@ def _escapify(qstring):
         elif c >= 0x20 and c < 0x7F:
             text += chr(c)
         else:
-            text += "\\%03d" % c
+            text += f"\\{c:03d}"
     return text
 
 
@@ -619,7 +619,7 @@ class GenericRdata(Rdata):
         relativize: bool = True,
         **kw: Dict[str, Any],
     ) -> str:
-        return r"\# %d " % len(self.data) + _hexify(self.data, **kw)  # pyright: ignore
+        return rf"\# {len(self.data)} " + _hexify(self.data, **kw)  # pyright: ignore
 
     @classmethod
     def from_text(
index 4b4bd757603474d0ee743574b3e6d62ae6b68504..006bedbbb1cdb676006c2769882136a6e9649ab8 100644 (file)
@@ -259,16 +259,11 @@ class Rdataset(dns.set.Set):
                     if rd.rdcomment:
                         extra = f" ;{rd.rdcomment}"
                 s.write(
-                    "%s%s%d %s %s %s%s\n"
-                    % (
-                        ntext,
-                        pad,
-                        self.ttl,
-                        dns.rdataclass.to_text(rdclass),
-                        dns.rdatatype.to_text(self.rdtype),
-                        rd.to_text(origin=origin, relativize=relativize, **kw),
-                        extra,
-                    )
+                    f"{ntext}{pad}{self.ttl} "
+                    f"{dns.rdataclass.to_text(rdclass)} "
+                    f"{dns.rdatatype.to_text(self.rdtype)} "
+                    f"{rd.to_text(origin=origin, relativize=relativize, **kw)}"
+                    f"{extra}\n"
                 )
         #
         # We strip off the final \n for the caller's convenience in printing
index 9c866da6a9e266f80d1cf58fdd56614ee17d7f23..dc9fa87708f53ddc292bc6fe819306e5b3e21341 100644 (file)
@@ -51,11 +51,8 @@ class AMTRELAY(dns.rdata.Rdata):
 
     def to_text(self, origin=None, relativize=True, **kw):
         relay = Relay(self.relay_type, self.relay).to_text(origin, relativize)
-        return "%d %d %d %s" % (
-            self.precedence,
-            self.discovery_optional,
-            self.relay_type,
-            relay,
+        return (
+            f"{self.precedence} {self.discovery_optional:d} {self.relay_type} {relay}"
         )
 
     @classmethod
index 2e6a7e7e528aeb9f0c5c0f3b421559abbf9727ac..8c62e6267355a1bb6348422f8d36448d8f31d59f 100644 (file)
@@ -40,11 +40,7 @@ class CAA(dns.rdata.Rdata):
         self.value = self._as_bytes(value)
 
     def to_text(self, origin=None, relativize=True, **kw):
-        return '%u %s "%s"' % (
-            self.flags,
-            dns.rdata._escapify(self.tag),
-            dns.rdata._escapify(self.value),
-        )
+        return f'{self.flags} {dns.rdata._escapify(self.tag)} "{dns.rdata._escapify(self.value)}"'
 
     @classmethod
     def from_text(
index d37c5cb0c34e3d686a6f3d0fffea25df6679e321..4d5e5bda192c55cdb7e3e6095e29dd2de4176780 100644 (file)
@@ -84,12 +84,9 @@ class CERT(dns.rdata.Rdata):
 
     def to_text(self, origin=None, relativize=True, **kw):
         certificate_type = _ctype_to_text(self.certificate_type)
-        return "%s %d %s %s" % (
-            certificate_type,
-            self.key_tag,
-            dns.dnssectypes.Algorithm.to_text(self.algorithm),
-            dns.rdata._base64ify(self.certificate, **kw),  # pyright: ignore
-        )
+        algorithm = dns.dnssectypes.Algorithm.to_text(self.algorithm)
+        certificate = dns.rdata._base64ify(self.certificate, **kw)  # pyright: ignore
+        return f"{certificate_type} {self.key_tag} {algorithm} {certificate}"
 
     @classmethod
     def from_text(
index 2f972f6e7645ff4f4f0ab85d5e5c705b0da6ddc6..103486d8341ce21e2b98c4f0da88cc9b74b39758 100644 (file)
@@ -46,7 +46,7 @@ class CSYNC(dns.rdata.Rdata):
 
     def to_text(self, origin=None, relativize=True, **kw):
         text = Bitmap(self.windows).to_text()
-        return "%d %d%s" % (self.serial, self.flags, text)
+        return f"{self.serial} {self.flags}{text}"
 
     @classmethod
     def from_text(
index f3157da743234f9c42e87b931a0345f860156147..dc7948a1f5c7e180a9b6ca1715cbb1c2fc3bcba2 100644 (file)
@@ -49,7 +49,7 @@ class HIP(dns.rdata.Rdata):
             servers.append(server.choose_relativity(origin, relativize))
         if len(servers) > 0:
             text += " " + " ".join(x.to_unicode() for x in servers)
-        return "%u %s %s%s" % (self.algorithm, hit, key, text)
+        return f"{self.algorithm} {hit} {key}{text}"
 
     @classmethod
     def from_text(
index fab3a99b6c7de411df77db18adfdbb646eef0c9f..6c7fe5e792d1889dec6cb1dcb325f5a19fc4e4d3 100644 (file)
@@ -164,18 +164,12 @@ class LOC(dns.rdata.Rdata):
             long_hemisphere = "E"
         else:
             long_hemisphere = "W"
-        text = "%d %d %d.%03d %s %d %d %d.%03d %s %0.2fm" % (
-            self.latitude[0],
-            self.latitude[1],
-            self.latitude[2],
-            self.latitude[3],
-            lat_hemisphere,
-            self.longitude[0],
-            self.longitude[1],
-            self.longitude[2],
-            self.longitude[3],
-            long_hemisphere,
-            self.altitude / 100.0,
+        text = (
+            f"{self.latitude[0]} {self.latitude[1]} "
+            f"{self.latitude[2]}.{self.latitude[3]:03d} {lat_hemisphere} "
+            f"{self.longitude[0]} {self.longitude[1]} "
+            f"{self.longitude[2]}.{self.longitude[3]:03d} {long_hemisphere} "
+            f"{(self.altitude / 100.0):0.2f}m"
         )
 
         # do not print default values
index 312663f1dfd6ff2c933d489e2bdd5e7e99fd3241..379c8627a062853e8631a2d17dd507903cf781b5 100644 (file)
@@ -21,7 +21,7 @@ class LP(dns.rdata.Rdata):
 
     def to_text(self, origin=None, relativize=True, **kw):
         fqdn = self.fqdn.choose_relativity(origin, relativize)
-        return "%d %s" % (self.preference, fqdn)
+        return f"{self.preference} {fqdn}"
 
     @classmethod
     def from_text(
index d9af11156a6f443a3fe4db90d895f988c82c1435..6899418760bf561c2a1217535c751378f9f87eb2 100644 (file)
@@ -76,14 +76,7 @@ class NSEC3(dns.rdata.Rdata):
         else:
             salt = binascii.hexlify(self.salt).decode()
         text = Bitmap(self.windows).to_text()
-        return "%u %u %u %s %s%s" % (
-            self.algorithm,
-            self.flags,
-            self.iterations,
-            salt,
-            next,
-            text,
-        )
+        return f"{self.algorithm} {self.flags} {self.iterations} {salt} {next}{text}"
 
     @classmethod
     def from_text(
index d1e62ebcf1b8b87c5c79171377a914d033ffcfdb..e8678722c992ecc23670e11eb14d20c0a49274d6 100644 (file)
@@ -41,7 +41,7 @@ class NSEC3PARAM(dns.rdata.Rdata):
             salt = "-"
         else:
             salt = binascii.hexlify(self.salt).decode()
-        return "%u %u %u %s" % (self.algorithm, self.flags, self.iterations, salt)
+        return f"{self.algorithm} {self.flags} {self.iterations} {salt}"
 
     @classmethod
     def from_text(
index dc486f065bbe693d818030fc78c213c4b115ba57..5556cbaccc1df74d3898d2376b8bd5660a22043a 100644 (file)
@@ -94,16 +94,14 @@ class RRSIG(dns.rdata.Rdata):
         return self.type_covered
 
     def to_text(self, origin=None, relativize=True, **kw):
-        return "%s %d %d %d %s %s %d %s %s" % (
-            dns.rdatatype.to_text(self.type_covered),
-            self.algorithm,
-            self.labels,
-            self.original_ttl,
-            posixtime_to_sigtime(self.expiration),
-            posixtime_to_sigtime(self.inception),
-            self.key_tag,
-            self.signer.choose_relativity(origin, relativize),
-            dns.rdata._base64ify(self.signature, **kw),  # pyright: ignore
+        return (
+            f"{dns.rdatatype.to_text(self.type_covered)} "
+            f"{self.algorithm} {self.labels} {self.original_ttl} "
+            f"{posixtime_to_sigtime(self.expiration)} "
+            f"{posixtime_to_sigtime(self.inception)} "
+            f"{self.key_tag} "
+            f"{self.signer.choose_relativity(origin, relativize)} "
+            f"{dns.rdata._base64ify(self.signature, **kw)}"  # pyright: ignore
         )
 
     @classmethod
index 09aa8321c7d7d2ddf4d44ff127d27295456d62f5..3c7cd8c92ea21ad6a9d185bb25286348e538a742 100644 (file)
@@ -46,15 +46,7 @@ class SOA(dns.rdata.Rdata):
     def to_text(self, origin=None, relativize=True, **kw):
         mname = self.mname.choose_relativity(origin, relativize)
         rname = self.rname.choose_relativity(origin, relativize)
-        return "%s %s %d %d %d %d %d" % (
-            mname,
-            rname,
-            self.serial,
-            self.refresh,
-            self.retry,
-            self.expire,
-            self.minimum,
-        )
+        return f"{mname} {rname} {self.serial} {self.refresh} {self.retry} {self.expire} {self.minimum}"
 
     @classmethod
     def from_text(
index 904a1b9e88fd32e4240db6098c7f66d07ec1b8a3..3f08f3a594c2b594276ec1fcb9e296e4adce5acb 100644 (file)
@@ -40,13 +40,10 @@ class SSHFP(dns.rdata.Rdata):
     def to_text(self, origin=None, relativize=True, **kw):
         kw = kw.copy()
         chunksize = kw.pop("chunksize", 128)
-        return "%d %d %s" % (
-            self.algorithm,
-            self.fp_type,
-            dns.rdata._hexify(
-                self.fingerprint, chunksize=chunksize, **kw  # pyright: ignore
-            ),
+        fingerprint = dns.rdata._hexify(
+            self.fingerprint, chunksize=chunksize, **kw  # pyright: ignore
         )
+        return f"{self.algorithm} {self.fp_type} {fingerprint}"
 
     @classmethod
     def from_text(
index 75f62249e1daf7961370349752215fd367ed8b29..f9189b16c1ddda48d2184dad20a2fa1335576b8e 100644 (file)
@@ -60,18 +60,11 @@ class TKEY(dns.rdata.Rdata):
 
     def to_text(self, origin=None, relativize=True, **kw):
         _algorithm = self.algorithm.choose_relativity(origin, relativize)
-        text = "%s %u %u %u %u %s" % (
-            str(_algorithm),
-            self.inception,
-            self.expiration,
-            self.mode,
-            self.error,
-            dns.rdata._base64ify(self.key, 0),
-        )
+        key = dns.rdata._base64ify(self.key, 0)
+        other = ""
         if len(self.other) > 0:
-            text += f" {dns.rdata._base64ify(self.other, 0)}"
-
-        return text
+            other = " " + dns.rdata._base64ify(self.other, 0)
+        return f"{_algorithm} {self.inception} {self.expiration} {self.mode} {self.error} {key}{other}"
 
     @classmethod
     def from_text(
index 2efbb305a9b2fc75fcd52f42486f28d33d92020a..021391d68d9808178af0440e8f38762d04c5ea8b 100644 (file)
@@ -42,7 +42,7 @@ class URI(dns.rdata.Rdata):
             raise dns.exception.SyntaxError("URI target cannot be empty")
 
     def to_text(self, origin=None, relativize=True, **kw):
-        return '%d %d "%s"' % (self.priority, self.weight, self.target.decode())
+        return f'{self.priority} {self.weight} "{self.target.decode()}"'
 
     @classmethod
     def from_text(
index 63469e4c82b5b2fd8065872e726dd850649b7086..acef4f277eaaf86ecf9fb56d87a62a007da35aab 100644 (file)
@@ -36,14 +36,10 @@ class ZONEMD(dns.rdata.Rdata):
     def to_text(self, origin=None, relativize=True, **kw):
         kw = kw.copy()
         chunksize = kw.pop("chunksize", 128)
-        return "%d %d %d %s" % (
-            self.serial,
-            self.scheme,
-            self.hash_algorithm,
-            dns.rdata._hexify(
-                self.digest, chunksize=chunksize, **kw  # pyright: ignore
-            ),
+        digest = dns.rdata._hexify(
+            self.digest, chunksize=chunksize, **kw  # pyright: ignore
         )
+        return f"{self.serial} {self.scheme} {self.hash_algorithm} {digest}"
 
     @classmethod
     def from_text(
index 44cb3fefa26291151b465d4babd06e2d2032ef9a..c4ce6e4588e0c02c6e074dbd20f5418af60daf66 100644 (file)
@@ -48,9 +48,9 @@ class APLItem:
 
     def __str__(self):
         if self.negation:
-            return "!%d:%s/%s" % (self.family, self.address, self.prefix)
+            return f"!{self.family}:{self.address}/{self.prefix}"
         else:
-            return "%d:%s/%s" % (self.family, self.address, self.prefix)
+            return f"{self.family}:{self.address}/{self.prefix}"
 
     def to_wire(self, file):
         if self.family == 1:
index ce37cb7fef08fd94dfb17249f54717f7764e7cc5..aef93ae140df8a17150b2aa996d023250f866662 100644 (file)
@@ -49,13 +49,8 @@ class IPSECKEY(dns.rdata.Rdata):
 
     def to_text(self, origin=None, relativize=True, **kw):
         gateway = Gateway(self.gateway_type, self.gateway).to_text(origin, relativize)
-        return "%d %d %d %s %s" % (
-            self.precedence,
-            self.gateway_type,
-            self.algorithm,
-            gateway,
-            dns.rdata._base64ify(self.key, **kw),  # pyright: ignore
-        )
+        key = dns.rdata._base64ify(self.key, **kw)  # pyright: ignore
+        return f"{self.precedence} {self.gateway_type} {self.algorithm} {gateway} {key}"
 
     @classmethod
     def from_text(
index 195d1cbac5ac381403bbe834ee1ffbdce7d16e56..98bbf4abac2da37e8788b3d0c87bbef29eaec54a 100644 (file)
@@ -52,13 +52,12 @@ class NAPTR(dns.rdata.Rdata):
 
     def to_text(self, origin=None, relativize=True, **kw):
         replacement = self.replacement.choose_relativity(origin, relativize)
-        return '%d %d "%s" "%s" "%s" %s' % (
-            self.order,
-            self.preference,
-            dns.rdata._escapify(self.flags),
-            dns.rdata._escapify(self.service),
-            dns.rdata._escapify(self.regexp),
-            replacement,
+        return (
+            f"{self.order} {self.preference} "
+            f'"{dns.rdata._escapify(self.flags)}" '
+            f'"{dns.rdata._escapify(self.service)}" '
+            f'"{dns.rdata._escapify(self.regexp)}" '
+            f"{replacement}"
         )
 
     @classmethod
index cdca1532234d5dc0130945cc82092fdacfee39c4..20143bf6cb388d00d2b082df1a86f9d360b465a5 100644 (file)
@@ -41,7 +41,7 @@ class PX(dns.rdata.Rdata):
     def to_text(self, origin=None, relativize=True, **kw):
         map822 = self.map822.choose_relativity(origin, relativize)
         mapx400 = self.mapx400.choose_relativity(origin, relativize)
-        return "%d %s %s" % (self.preference, map822, mapx400)
+        return f"{self.preference} {map822} {mapx400}"
 
     @classmethod
     def from_text(
index 5adef98f9de85b8f63f9db4066c79a880bc4c783..044c10e3a4b3150d217f1ac89f4c0af77edd69e8 100644 (file)
@@ -41,7 +41,7 @@ class SRV(dns.rdata.Rdata):
 
     def to_text(self, origin=None, relativize=True, **kw):
         target = self.target.choose_relativity(origin, relativize)
-        return "%d %d %d %s" % (self.priority, self.weight, self.port, target)
+        return f"{self.priority} {self.weight} {self.port} {target}"
 
     @classmethod
     def from_text(
index 881a7849a13cf8dc9a82bc6a874b6cbf2144e26e..cc6c3733b7e42544decc38c915a3c1d7bb094419 100644 (file)
@@ -52,7 +52,7 @@ class WKS(dns.rdata.Rdata):
                 if byte & (0x80 >> j):
                     bits.append(str(i * 8 + j))
         text = " ".join(bits)
-        return "%s %d %s" % (self.address, self.protocol, text)
+        return f"{self.address} {self.protocol} {text}"
 
     @classmethod
     def from_text(
index 381fe770dd5c260088fd4232c743c554665a0216..fb49f9220d6d1ccaca34707ec2e3a8198f6b2470 100644 (file)
@@ -48,12 +48,8 @@ class DNSKEYBase(dns.rdata.Rdata):
         self.key = self._as_bytes(key)
 
     def to_text(self, origin=None, relativize=True, **kw):
-        return "%d %d %d %s" % (
-            self.flags,
-            self.protocol,
-            self.algorithm,
-            dns.rdata._base64ify(self.key, **kw),  # pyright: ignore
-        )
+        key = dns.rdata._base64ify(self.key, **kw)  # pyright: ignore
+        return f"{self.flags} {self.protocol} {self.algorithm} {key}"
 
     @classmethod
     def from_text(
index a9269d22cf6356efe20e4946eda2345c74c433ed..8e05c2a75240a5f8aa9c630b50b7698eff3331ac 100644 (file)
@@ -55,14 +55,10 @@ class DSBase(dns.rdata.Rdata):
     def to_text(self, origin=None, relativize=True, **kw):
         kw = kw.copy()
         chunksize = kw.pop("chunksize", 128)
-        return "%d %d %d %s" % (
-            self.key_tag,
-            self.algorithm,
-            self.digest_type,
-            dns.rdata._hexify(
-                self.digest, chunksize=chunksize, **kw  # pyright: ignore
-            ),
+        digest = dns.rdata._hexify(
+            self.digest, chunksize=chunksize, **kw  # pyright: ignore
         )
+        return f"{self.key_tag} {self.algorithm} {self.digest_type} {digest}"
 
     @classmethod
     def from_text(
index 6d5e3d87e7508301f181d526f9497abd905c590c..5d33e61f62358845d307b81ffad47324177512d1 100644 (file)
@@ -39,7 +39,7 @@ class MXBase(dns.rdata.Rdata):
 
     def to_text(self, origin=None, relativize=True, **kw):
         exchange = self.exchange.choose_relativity(origin, relativize)
-        return "%d %s" % (self.preference, exchange)
+        return f"{self.preference} {exchange}"
 
     @classmethod
     def from_text(
index bcde5cbbb94849cf155dd46cdf75aa966f907146..7338b664dad1028bb05f32cdf41dbda167498e01 100644 (file)
@@ -94,7 +94,7 @@ def _escapify(qstring):
         elif c >= 0x20 and c < 0x7F:
             text += chr(c)
         else:
-            text += "\\%03d" % c
+            text += f"\\{c:03d}"
     return text
 
 
@@ -503,7 +503,7 @@ class SVCBBase(dns.rdata.Rdata):
             space = " "
         else:
             space = ""
-        return "%d %s%s%s" % (self.priority, target, space, " ".join(params))
+        return f"{self.priority} {target}{space}{' '.join(params)}"
 
     @classmethod
     def from_text(
index 44d8cc24acbcbad449eca0f6b31708a5c1fecad2..ddc196f1f6fca3a5ff238c729f8b5da54a20fa39 100644 (file)
@@ -41,12 +41,10 @@ class TLSABase(dns.rdata.Rdata):
     def to_text(self, origin=None, relativize=True, **kw):
         kw = kw.copy()
         chunksize = kw.pop("chunksize", 128)
-        return "%d %d %d %s" % (
-            self.usage,
-            self.selector,
-            self.mtype,
-            dns.rdata._hexify(self.cert, chunksize=chunksize, **kw),  # pyright: ignore
+        cert = dns.rdata._hexify(
+            self.cert, chunksize=chunksize, **kw  # pyright: ignore
         )
+        return f"{self.usage} {self.selector} {self.mtype} {cert}"
 
     @classmethod
     def from_text(
index dc5f33e354bc72427434961ca8f335f84107540e..60a4e839a08f053fdb194f31dcd1e953c473ed58 100644 (file)
@@ -55,13 +55,13 @@ def from_address(
     try:
         v6 = dns.ipv6.inet_aton(text)
         if dns.ipv6.is_mapped(v6):
-            parts = ["%d" % byte for byte in v6[12:]]
+            parts = [str(byte) for byte in v6[12:]]
             origin = v4_origin
         else:
             parts = [x for x in str(binascii.hexlify(v6).decode())]
             origin = v6_origin
     except Exception:
-        parts = ["%d" % byte for byte in dns.ipv4.inet_aton(text)]
+        parts = [str(byte) for byte in dns.ipv4.inet_aton(text)]
         origin = v4_origin
     return dns.name.from_text(".".join(reversed(parts)), origin=origin)
 
index ab205bc39af26fba21255dc0e5cb124ddba0b10b..c958e3537a3f14eea036121bfc17ccc1abd7e2f4 100644 (file)
@@ -98,7 +98,7 @@ class Token:
         return self.ttype != other.ttype or self.value != other.value
 
     def __str__(self):
-        return '%d "%s"' % (self.ttype, self.value)
+        return f'{self.ttype} "{self.value}"'
 
     def unescape(self) -> "Token":
         if not self.has_escape:
@@ -510,9 +510,7 @@ class Tokenizer:
 
         value = self.get_int()
         if value < 0 or value > 255:
-            raise dns.exception.SyntaxError(
-                "%d is not an unsigned 8-bit integer" % value
-            )
+            raise dns.exception.SyntaxError(f"{value} is not an unsigned 8-bit integer")
         return value
 
     def get_uint16(self, base: int = 10) -> int:
@@ -532,7 +530,7 @@ class Tokenizer:
                 )
             else:
                 raise dns.exception.SyntaxError(
-                    "%d is not an unsigned 16-bit integer" % value
+                    f"{value} is not an unsigned 16-bit integer"
                 )
         return value
 
@@ -548,7 +546,7 @@ class Tokenizer:
         value = self.get_int(base=base)
         if value < 0 or value > 4294967295:
             raise dns.exception.SyntaxError(
-                "%d is not an unsigned 32-bit integer" % value
+                f"{value} is not an unsigned 32-bit integer"
             )
         return value
 
@@ -564,7 +562,7 @@ class Tokenizer:
         value = self.get_int(base=base)
         if value < 0 or value > 281474976710655:
             raise dns.exception.SyntaxError(
-                "%d is not an unsigned 48-bit integer" % value
+                f"{value} is not an unsigned 48-bit integer"
             )
         return value
 
@@ -686,7 +684,7 @@ class Tokenizer:
         token = self.get()
         if not token.is_eol_or_eof():
             raise dns.exception.SyntaxError(
-                'expected EOL or EOF, got %d "%s"' % (token.ttype, token.value)
+                f'expected EOL or EOF, got {token.ttype} "{token.value}"'
             )
         return token
 
index 18640a8171ee3edfa48f820f0249d6cbf2eb8de0..7070b0a05c4e1e9d526b2647a8dd9077bf765fd6 100644 (file)
@@ -302,7 +302,7 @@ def validate(
         elif rdata.error == dns.rcode.BADTRUNC:
             raise PeerBadTruncation
         else:
-            raise PeerError("unknown TSIG error code %d" % rdata.error)
+            raise PeerError(f"unknown TSIG error code {rdata.error}")
     if abs(rdata.time_signed - now) > rdata.fudge:
         raise BadTime
     if key.name != owner:
index 2b7e7460396b235f5106a1e1cfdd0983e27756d1..77ea39c53acd921ab3a80a40849cb70ba016f25d 100644 (file)
@@ -30,29 +30,13 @@ SERIAL = 0
 
 if RELEASELEVEL == 0x0F:  # pragma: no cover  lgtm[py/unreachable-statement]
     #: version
-    version = "%d.%d.%d" % (MAJOR, MINOR, MICRO)  # lgtm[py/unreachable-statement]
+    version = f"{MAJOR}.{MINOR}.{MICRO}"  # lgtm[py/unreachable-statement]
 elif RELEASELEVEL == 0x00:  # pragma: no cover  lgtm[py/unreachable-statement]
-    version = "%d.%d.%ddev%d" % (
-        MAJOR,
-        MINOR,
-        MICRO,
-        SERIAL,
-    )  # lgtm[py/unreachable-statement]
+    version = f"{MAJOR}.{MINOR}.{MICRO}dev{SERIAL}"  # lgtm[py/unreachable-statement]
 elif RELEASELEVEL == 0x0C:  # pragma: no cover  lgtm[py/unreachable-statement]
-    version = "%d.%d.%drc%d" % (
-        MAJOR,
-        MINOR,
-        MICRO,
-        SERIAL,
-    )  # lgtm[py/unreachable-statement]
+    version = f"{MAJOR}.{MINOR}.{MICRO}rc{SERIAL}"  # lgtm[py/unreachable-statement]
 else:  # pragma: no cover  lgtm[py/unreachable-statement]
-    version = "%d.%d.%d%x%d" % (
-        MAJOR,
-        MINOR,
-        MICRO,
-        RELEASELEVEL,
-        SERIAL,
-    )  # lgtm[py/unreachable-statement]
+    version = f"{MAJOR}.{MINOR}.{MICRO}{RELEASELEVEL:x}{SERIAL}"  # lgtm[py/unreachable-statement]
 
 #: hexversion
 hexversion = MAJOR << 24 | MINOR << 16 | MICRO << 8 | RELEASELEVEL << 4 | SERIAL
index af4778512a849b19efe893796e933c4704392a53..d6047cce713361fb789d19ffaa791c4b598a8a25 100644 (file)
@@ -553,9 +553,7 @@ class Reader:
             (filename, line_number) = self.tok.where()
             if detail is None:
                 detail = "syntax error"
-            ex = dns.exception.SyntaxError(
-                "%s:%d: %s" % (filename, line_number, detail)
-            )
+            ex = dns.exception.SyntaxError(f"{filename}:{line_number}: {detail}")
             tb = sys.exc_info()[2]
             raise ex.with_traceback(tb) from None
 
index 1b2d5064d3357e131870773990f8042d0006c793..2d4911227e208b73ccb1da84cea87045dd3171f7 100644 (file)
@@ -111,7 +111,6 @@ lint.ignore = [
     "B904",
     "B011",
     "UP006",
-    "UP031",
     "UP035",
 ]
 lint.exclude = ["tests/*"]