Commit b0ea9f49 authored by Nick Mathewson's avatar Nick Mathewson 🦞
Browse files

Merge branch 'update-mypy' into 'main'

Update linters and fix newly identified type errors

See merge request tpo/core/chutney!89
parents ba976450 efa7a3a9
Loading
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -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.
+2 −2
Original line number Diff line number Diff line
@@ -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
+11 −19
Original line number Diff line number Diff line
@@ -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]]]:
@@ -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,
@@ -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]]]:
@@ -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.

@@ -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],