]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
initial support for "ty" type checker
authorBob Halley <halley@dnspython.org>
Sat, 6 Dec 2025 18:00:05 +0000 (10:00 -0800)
committerBob Halley <halley@dnspython.org>
Sat, 6 Dec 2025 18:00:05 +0000 (10:00 -0800)
Makefile
dns/_asyncio_backend.py
dns/_ddr.py
dns/_trio_backend.py
dns/message.py
dns/query.py
dns/rdataset.py
dns/resolver.py
dns/zone.py
dns/zonefile.py
pyproject.toml

index 98dc35b9fc72a6191225c204a8e9f00092ece2ac..f2b9a6f6e86f882baf6ec92b6524576d2397f734 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -35,12 +35,19 @@ test:
 
 check: test
 
-type:
+mypy:
        python -m mypy --disallow-incomplete-defs dns
 
 pyright:
        pyright dns
 
+ty:
+       ty check dns
+
+type:
+       pyright dns
+       ty check dns
+
 ruff:
        ruff check dns
 
index d7ce1467fed127104bd94c8a4844d72c0d4bdece..cc683985b5a238e67fb1db1951a5a80ab06873cf 100644 (file)
@@ -204,7 +204,7 @@ if dns._features.have("doh"):
 
                 resolver = dns.asyncresolver.Resolver()
             super().__init__(*args, **kwargs)
-            self._pool._network_backend = _NetworkBackend(
+            self._pool._network_backend = _NetworkBackend(  # type: ignore
                 resolver, local_port, bootstrap_address, family
             )
 
index bf5c11eb6d98168766c5df3b2201e298388fa49e..ad4249b1d1b8fb28e517d8a60907c6bd6086473c 100644 (file)
@@ -40,7 +40,7 @@ class _SVCBInfo:
     def make_tls_context(self):
         ssl = dns.query.ssl
         ctx = ssl.create_default_context()
-        ctx.minimum_version = ssl.TLSVersion.TLSv1_2
+        ctx.minimum_version = ssl.TLSVersion.TLSv1_2  # type: ignore
         return ctx
 
     def ddr_tls_check_sync(self, lifetime):
index bde7e8bab226942aa23681824579eef29d8bb069..e057068a6af83ea4a21ac2e1435b2f26b2cbc3a8 100644 (file)
@@ -181,7 +181,7 @@ if dns._features.have("doh"):
 
                 resolver = dns.asyncresolver.Resolver()
             super().__init__(*args, **kwargs)
-            self._pool._network_backend = _NetworkBackend(
+            self._pool._network_backend = _NetworkBackend(  # type: ignore
                 resolver, local_port, bootstrap_address, family
             )
 
index 82d4d2261d574cf79f2644b61350df08754c40e8..30a842335f102c03862858ed58fd34ec12cb2b70 100644 (file)
@@ -1430,7 +1430,7 @@ class _TextReader:
 
     def __init__(
         self,
-        text: str,
+        text: Any,
         idna_codec: dns.name.IDNACodec | None,
         one_rr_per_rrset: bool = False,
         origin: dns.name.Name | None = None,
@@ -1742,7 +1742,8 @@ def from_file(
     else:
         cm = contextlib.nullcontext(f)
     with cm as f:
-        return from_text(f, idna_codec, one_rr_per_rrset)
+        reader = _TextReader(f, idna_codec, one_rr_per_rrset)
+        return reader.read()
     assert False  # for mypy  lgtm[py/unreachable-statement]
 
 
index 34864d99ede0dffe7078863df933508f60598298..9baa0ad81719b2b2975b991e3c14fd409e7c56db 100644 (file)
@@ -143,7 +143,7 @@ if _have_httpx:
 
                 resolver = dns.resolver.Resolver()
             super().__init__(*args, **kwargs)
-            self._pool._network_backend = _NetworkBackend(
+            self._pool._network_backend = _NetworkBackend(  # type: ignore
                 resolver, local_port, bootstrap_address, family
             )
 
index 1673aad76842c02d32cfabc117b3c52fbd9347f7..19191fcc7114fbb92197310517b88972a5431c6a 100644 (file)
@@ -369,7 +369,7 @@ class ImmutableRdataset(Rdataset):  # lgtm[py/missing-equals]
     def update_ttl(self, ttl):
         raise TypeError("immutable")
 
-    def add(self, rd, ttl=None):
+    def add(self, rd, ttl=None):  # type: ignore
         raise TypeError("immutable")
 
     def union_update(self, other):
index f6d239ab72febb6e72e1dd59880cd0fcbe0e0ed5..2b908a45fcde3694650a92a33cf2a6246c95d3c9 100644 (file)
@@ -1005,6 +1005,7 @@ class BaseResolver:
         else:
             cm = contextlib.nullcontext(f)
         with cm as f:
+            assert f is not None
             for l in f:
                 if len(l) == 0 or l[0] == "#" or l[0] == ";":
                     continue
@@ -2047,12 +2048,12 @@ def override_system_resolver(resolver: Resolver | None = None) -> None:
         resolver = get_default_resolver()
     global _resolver
     _resolver = resolver
-    socket.getaddrinfo = _getaddrinfo
-    socket.getnameinfo = _getnameinfo
-    socket.getfqdn = _getfqdn
-    socket.gethostbyname = _gethostbyname
-    socket.gethostbyname_ex = _gethostbyname_ex
-    socket.gethostbyaddr = _gethostbyaddr
+    socket.getaddrinfo = _getaddrinfo  # type: ignore
+    socket.getnameinfo = _getnameinfo  # type: ignore
+    socket.getfqdn = _getfqdn  # type: ignore
+    socket.gethostbyname = _gethostbyname  # type: ignore
+    socket.gethostbyname_ex = _gethostbyname_ex  # type: ignore
+    socket.gethostbyaddr = _gethostbyaddr  # type: ignore
 
 
 def restore_system_resolver() -> None:
@@ -2060,9 +2061,9 @@ def restore_system_resolver() -> None:
 
     global _resolver
     _resolver = None
-    socket.getaddrinfo = _original_getaddrinfo
-    socket.getnameinfo = _original_getnameinfo
-    socket.getfqdn = _original_getfqdn
-    socket.gethostbyname = _original_gethostbyname
-    socket.gethostbyname_ex = _original_gethostbyname_ex
-    socket.gethostbyaddr = _original_gethostbyaddr
+    socket.getaddrinfo = _original_getaddrinfo  # type: ignore
+    socket.getnameinfo = _original_getnameinfo  # type: ignore
+    socket.getfqdn = _original_getfqdn  # type: ignore
+    socket.gethostbyname = _original_gethostbyname  # type: ignore
+    socket.gethostbyname_ex = _original_gethostbyname_ex  # type: ignore
+    socket.gethostbyaddr = _original_gethostbyaddr  # type: ignore
index 02e1f209364711d3c294816651622bfba0bfe264..f68e8e85b93a2e7db6bbbbe86c17b0a0a8814abe 100644 (file)
@@ -159,7 +159,7 @@ class Zone(dns.transaction.TransactionManager):
                 raise ValueError("origin parameter must be convertible to a DNS name")
             if not origin.is_absolute():
                 raise ValueError("origin parameter must be an absolute name")
-        self.origin = origin
+        self.origin: dns.name.Name | None = origin
         self.rdclass = rdclass
         self.nodes: MutableMapping[dns.name.Name, dns.node.Node] = self.map_factory()
         self.relativize = relativize
@@ -686,8 +686,8 @@ class Zone(dns.transaction.TransactionManager):
                     f.write(l_b)
                     f.write(nl_b)
                 except TypeError:  # textual mode
-                    f.write(l)
-                    f.write(nl)
+                    f.write(l)  # type: ignore
+                    f.write(nl)  # type: ignore
 
             if sorted:
                 names = list(self.keys())
@@ -707,8 +707,8 @@ class Zone(dns.transaction.TransactionManager):
                     f.write(l_b)
                     f.write(nl_b)
                 except TypeError:  # textual mode
-                    f.write(l)
-                    f.write(nl)
+                    f.write(l)  # type: ignore
+                    f.write(nl)  # type: ignore
 
     def to_text(
         self,
@@ -1104,15 +1104,21 @@ class ImmutableVersion(Version):
 
 
 class Transaction(dns.transaction.Transaction):
-    def __init__(self, zone, replacement, version=None, make_immutable=False):
+    def __init__(
+        self,
+        zone: Zone,
+        replacement: bool,
+        version: Version | None = None,
+        make_immutable: bool = False,
+    ):
         read_only = version is not None
         super().__init__(zone, replacement, read_only)
         self.version = version
         self.make_immutable = make_immutable
 
     @property
-    def zone(self):
-        return self.manager
+    def zone(self) -> Zone:
+        return cast(Zone, self.manager)
 
     def _setup_version(self):
         assert self.version is None
@@ -1128,17 +1134,20 @@ class Transaction(dns.transaction.Transaction):
     def _put_rdataset(self, name, rdataset):
         assert not self.read_only
         assert self.version is not None
-        self.version.put_rdataset(name, rdataset)
+        version = cast(WritableVersion, self.version)
+        version.put_rdataset(name, rdataset)
 
     def _delete_name(self, name):
         assert not self.read_only
         assert self.version is not None
-        self.version.delete_node(name)
+        version = cast(WritableVersion, self.version)
+        version.delete_node(name)
 
     def _delete_rdataset(self, name, rdtype, covers):
         assert not self.read_only
         assert self.version is not None
-        self.version.delete_rdataset(name, rdtype, covers)
+        version = cast(WritableVersion, self.version)
+        version.delete_rdataset(name, rdtype, covers)
 
     def _name_exists(self, name):
         assert self.version is not None
@@ -1149,14 +1158,15 @@ class Transaction(dns.transaction.Transaction):
             return False
         else:
             assert self.version is not None
-            return len(self.version.changed) > 0
+            version = cast(WritableVersion, self.version)
+            return len(version.changed) > 0
 
     def _end_transaction(self, commit):
         assert self.zone is not None
         assert self.version is not None
         if self.read_only:
             self.zone._end_read(self)  # type: ignore
-        elif commit and len(self.version.changed) > 0:
+        elif commit and len(cast(WritableVersion, self.version).changed) > 0:
             if self.make_immutable:
                 factory = self.manager.immutable_version_factory  # type: ignore
                 if factory is None:
@@ -1191,7 +1201,9 @@ class Transaction(dns.transaction.Transaction):
         assert self.version is not None
         return self.version.get_node(name)
 
-    def _origin_information(self):
+    def _origin_information(
+        self,
+    ) -> Tuple[dns.name.Name | None, bool, dns.name.Name | None]:
         assert self.version is not None
         (absolute, relativize, effective) = self.manager.origin_information()
         if absolute is None and self.version.origin is not None:
index 4654446cf0ba1cf7a682beed5f6b2720657d5b17..782a935e7b8078b9cb9aec244cce339dff6a246d 100644 (file)
@@ -150,9 +150,10 @@ class Reader:
             raise dns.exception.SyntaxError
         return token
 
-    def _rr_line(self):
+    def _rr_line(self) -> None:
         """Process one line from a DNS zone file."""
         token: dns.tokenizer.Token
+        name: dns.name.Name | None
         # Name
         if self.force_name is not None:
             name = self.force_name
index 34ccdcc332bed8e48bc6b2e5a50f115f75b13789..2ed8c3bb16d817331fe51b5d57ae46ffc0e5ac71 100644 (file)
@@ -46,6 +46,7 @@ dev = [
     "sphinx>=8.2.0 ; python_version >= '3.11'",
     "sphinx-rtd-theme>=3.0.0 ; python_full_version >= '3.11'",
     "twine>=6.1.0",
+    "ty>=0.0.1a32",
     "wheel>=0.45.0",
 ]
 dnssec = ["cryptography>=45"]