Loading .gitlab-ci.yml +6 −6 Original line number Diff line number Diff line Loading @@ -349,12 +349,12 @@ shellcheck: python-lint: <<: *debian-template variables: # Most recent as of 2024-10-24 BLACK_VERSION: 24.10.0 # Most recent as of 2024-10-3 MYPY_VERSION: 1.11.2 # Most recent as of 2024-10-28 FLAKE8_VERSION: 7.1.1 # Most recent as of 2025-09-11 BLACK_VERSION: 25.1.0 # Most recent as of 2025-09-11 MYPY_VERSION: 1.17.1 # Most recent as of 2025-09-11 FLAKE8_VERSION: 7.3.0 script: # We don't really need chutney itself installed, but we do need # its dependencies so that mypy can see their relevant types. Loading lib/chutney/TorNet.py +2 −2 Original line number Diff line number Diff line Loading @@ -53,10 +53,10 @@ from chutney.Util import ( from chutney.network_tests import NetworkTestFailure from collections.abc import Collection try: if sys.version_info >= (3, 11): # Added in Python 3.11 from importlib.resources.abc import Traversable except ImportError: else: # Deprecated since Python 3.12 from importlib.abc import Traversable from typeguard import check_type Loading lib/chutney/tor/controller.py +11 −19 Original line number Diff line number Diff line Loading @@ -451,9 +451,7 @@ class LocalNodeController(TorNet.NodeController): def combineDirInfoStatuses( self, dir_status_list: list[ Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]] ], dir_status_list: list[tuple[DirInfoStatusCode, Collection[DirFormat]]], best: bool = True, ignore_missing: bool = False, ) -> Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]]: Loading Loading @@ -485,7 +483,7 @@ class LocalNodeController(TorNet.NodeController): if new_status_code == old_status_code: # We want to know all the flavours that have an # equal status, not just the latest one combined_flav = old_flav.union(new_flav) combined_flav = set(old_flav).union(new_flav) dir_status = (old_status_code, combined_flav) elif old_status_code == DirInfoStatusCode.MISSING_FILE and ignore_missing: # use the new status, which can't be MISSING_FILE_CODE, Loading @@ -507,9 +505,7 @@ class LocalNodeController(TorNet.NodeController): def summariseCacheDirInfoStatus( self, dir_status: dict[ DirFormat, Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]] ], dir_status: dict[DirFormat, tuple[DirInfoStatusCode, Collection[DirFormat]]], to_dir_server: int, to_bridge_client: int, ) -> Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]]: Loading Loading @@ -637,7 +633,7 @@ class LocalNodeController(TorNet.NodeController): def getNodeDirInfoStatusList( self, ) -> Optional[dict[str, Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]]]]: ) -> Optional[dict[str, tuple[DirInfoStatusCode, Collection[DirFormat]]]]: """Look through the directories on each node, and work out if this node is in that directory. Loading @@ -660,35 +656,31 @@ class LocalNodeController(TorNet.NodeController): # Clients don't appear in any consensus return None dir_status_summaries: dict[ str, Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]] str, tuple[DirInfoStatusCode, Collection[DirFormat]] ] = dict() for node in self._network._nodes: if node._config.launch_phase > TorNet.CUR_LAUNCH_PHASE: continue dir_statuses: dict[ DirFormat, Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]], tuple[DirInfoStatusCode, Collection[DirFormat]], ] = dict() for dir_format in self._node.expected_in_dir_formats(node): status = node._controller.check_node_in_dirinfo(dir_format, self._node) if status == DirInfoStatusCode.NOT_YET_IMPLEMENTED: continue dir_statuses[dir_format] = (status, {dir_format}) dir_status_summaries[node.nick] = ( self.summariseCacheDirInfoStatus( summary = self.summariseCacheDirInfoStatus( dir_statuses, node._config.relay, node._config.bridgeclient ) if len(dir_statuses) else None ) if summary is not None: dir_status_summaries[node.nick] = summary assert len(dir_status_summaries) return dir_status_summaries def summariseNodeDirInfoStatus( self, dir_status: dict[ str, Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]] ], dir_status: dict[str, tuple[DirInfoStatusCode, Collection[DirFormat]]], ) -> Optional[ dict[ Union[DirInfoStatusCode, str], Loading Loading
.gitlab-ci.yml +6 −6 Original line number Diff line number Diff line Loading @@ -349,12 +349,12 @@ shellcheck: python-lint: <<: *debian-template variables: # Most recent as of 2024-10-24 BLACK_VERSION: 24.10.0 # Most recent as of 2024-10-3 MYPY_VERSION: 1.11.2 # Most recent as of 2024-10-28 FLAKE8_VERSION: 7.1.1 # Most recent as of 2025-09-11 BLACK_VERSION: 25.1.0 # Most recent as of 2025-09-11 MYPY_VERSION: 1.17.1 # Most recent as of 2025-09-11 FLAKE8_VERSION: 7.3.0 script: # We don't really need chutney itself installed, but we do need # its dependencies so that mypy can see their relevant types. Loading
lib/chutney/TorNet.py +2 −2 Original line number Diff line number Diff line Loading @@ -53,10 +53,10 @@ from chutney.Util import ( from chutney.network_tests import NetworkTestFailure from collections.abc import Collection try: if sys.version_info >= (3, 11): # Added in Python 3.11 from importlib.resources.abc import Traversable except ImportError: else: # Deprecated since Python 3.12 from importlib.abc import Traversable from typeguard import check_type Loading
lib/chutney/tor/controller.py +11 −19 Original line number Diff line number Diff line Loading @@ -451,9 +451,7 @@ class LocalNodeController(TorNet.NodeController): def combineDirInfoStatuses( self, dir_status_list: list[ Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]] ], dir_status_list: list[tuple[DirInfoStatusCode, Collection[DirFormat]]], best: bool = True, ignore_missing: bool = False, ) -> Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]]: Loading Loading @@ -485,7 +483,7 @@ class LocalNodeController(TorNet.NodeController): if new_status_code == old_status_code: # We want to know all the flavours that have an # equal status, not just the latest one combined_flav = old_flav.union(new_flav) combined_flav = set(old_flav).union(new_flav) dir_status = (old_status_code, combined_flav) elif old_status_code == DirInfoStatusCode.MISSING_FILE and ignore_missing: # use the new status, which can't be MISSING_FILE_CODE, Loading @@ -507,9 +505,7 @@ class LocalNodeController(TorNet.NodeController): def summariseCacheDirInfoStatus( self, dir_status: dict[ DirFormat, Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]] ], dir_status: dict[DirFormat, tuple[DirInfoStatusCode, Collection[DirFormat]]], to_dir_server: int, to_bridge_client: int, ) -> Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]]: Loading Loading @@ -637,7 +633,7 @@ class LocalNodeController(TorNet.NodeController): def getNodeDirInfoStatusList( self, ) -> Optional[dict[str, Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]]]]: ) -> Optional[dict[str, tuple[DirInfoStatusCode, Collection[DirFormat]]]]: """Look through the directories on each node, and work out if this node is in that directory. Loading @@ -660,35 +656,31 @@ class LocalNodeController(TorNet.NodeController): # Clients don't appear in any consensus return None dir_status_summaries: dict[ str, Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]] str, tuple[DirInfoStatusCode, Collection[DirFormat]] ] = dict() for node in self._network._nodes: if node._config.launch_phase > TorNet.CUR_LAUNCH_PHASE: continue dir_statuses: dict[ DirFormat, Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]], tuple[DirInfoStatusCode, Collection[DirFormat]], ] = dict() for dir_format in self._node.expected_in_dir_formats(node): status = node._controller.check_node_in_dirinfo(dir_format, self._node) if status == DirInfoStatusCode.NOT_YET_IMPLEMENTED: continue dir_statuses[dir_format] = (status, {dir_format}) dir_status_summaries[node.nick] = ( self.summariseCacheDirInfoStatus( summary = self.summariseCacheDirInfoStatus( dir_statuses, node._config.relay, node._config.bridgeclient ) if len(dir_statuses) else None ) if summary is not None: dir_status_summaries[node.nick] = summary assert len(dir_status_summaries) return dir_status_summaries def summariseNodeDirInfoStatus( self, dir_status: dict[ str, Optional[tuple[DirInfoStatusCode, Collection[DirFormat]]] ], dir_status: dict[str, tuple[DirInfoStatusCode, Collection[DirFormat]]], ) -> Optional[ dict[ Union[DirInfoStatusCode, str], Loading