From 7b5f1f72f91de3b17688b2658a894e068a5a3529 Mon Sep 17 00:00:00 2001 From: correctmost <134317971+correctmost@users.noreply.github.com> Date: Wed, 28 Aug 2024 10:39:22 -0400 Subject: [PATCH] Expand mypy checks to include more files and more checks (#2651) This commit also centralizes the mypy configuration in one spot. --- .github/workflows/mypy.yaml | 4 +- .pre-commit-config.yaml | 1 - archinstall/lib/disk/device_handler.py | 2 +- archinstall/lib/disk/device_model.py | 4 +- archinstall/lib/installer.py | 2 +- archinstall/lib/interactions/general_conf.py | 2 +- archinstall/lib/menu/menu.py | 4 +- archinstall/lib/networking.py | 2 +- archinstall/tui/menu_item.py | 2 +- examples/interactive_installation.py | 4 +- examples/minimal_installation.py | 4 +- mypy.ini | 20 ------- pyproject.toml | 55 ++++++++++++++++++-- 13 files changed, 66 insertions(+), 40 deletions(-) delete mode 100644 mypy.ini diff --git a/.github/workflows/mypy.yaml b/.github/workflows/mypy.yaml index 25db92ff..d3ba0f46 100644 --- a/.github/workflows/mypy.yaml +++ b/.github/workflows/mypy.yaml @@ -20,6 +20,4 @@ jobs: - run: python --version - run: mypy --version - name: run mypy - run: mypy --config-file pyproject.toml - - name: run mypy strict - run: mypy --config-file mypy.ini + run: mypy diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5f5c91f2..7b63653a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -38,5 +38,4 @@ repos: rev: v1.11.2 hooks: - id: mypy - args: [--config=pyproject.toml] fail_fast: true diff --git a/archinstall/lib/disk/device_handler.py b/archinstall/lib/disk/device_handler.py index 3adf3671..7e869588 100644 --- a/archinstall/lib/disk/device_handler.py +++ b/archinstall/lib/disk/device_handler.py @@ -8,7 +8,7 @@ import uuid from pathlib import Path from typing import List, Dict, Any, Optional, TYPE_CHECKING, Literal, Iterable -from parted import ( # type: ignore +from parted import ( Disk, Geometry, FileSystem, PartitionException, DiskException, getDevice, getAllDevices, newDisk, freshDisk, Partition, Device diff --git a/archinstall/lib/disk/device_model.py b/archinstall/lib/disk/device_model.py index 4f7e7dfb..9992c867 100644 --- a/archinstall/lib/disk/device_model.py +++ b/archinstall/lib/disk/device_model.py @@ -11,7 +11,7 @@ from pathlib import Path from typing import Optional, List, Dict, TYPE_CHECKING, Any from typing import Union -import parted # type: ignore +import parted import _ped # type: ignore from parted import Disk, Geometry, Partition @@ -623,7 +623,7 @@ class FilesystemType(Enum): match self: case FilesystemType.Ntfs: return 'ntfs3' case FilesystemType.Fat32: return 'vfat' - case _: return self.value # type: ignore + case _: return self.value @property def installation_pkg(self) -> Optional[str]: diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index b29d27f0..563ff3be 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -665,7 +665,7 @@ class Installer: # This function will be called after minimal_installation() # as a hook for post-installs. This hook is only needed if # base is not installed yet. - def post_install_enable_iwd_service(*args: str, **kwargs: str): + def post_install_enable_iwd_service(*args: str, **kwargs: str) -> None: self.enable_service('iwd') self.post_base_install.append(post_install_enable_iwd_service) diff --git a/archinstall/lib/interactions/general_conf.py b/archinstall/lib/interactions/general_conf.py index aee54df0..94de6910 100644 --- a/archinstall/lib/interactions/general_conf.py +++ b/archinstall/lib/interactions/general_conf.py @@ -128,7 +128,7 @@ def ask_additional_packages_to_install(preset: List[str] = []) -> List[str]: print(_('Only packages such as base, base-devel, linux, linux-firmware, efibootmgr and optional profile packages are installed.')) print(_('If you desire a web browser, such as firefox or chromium, you may specify it in the following prompt.')) - def read_packages(p: List = []) -> list: + def read_packages(p: list[str] = []) -> list[str]: display = ' '.join(p) input_packages = TextInput(_('Write additional packages to install (space separated, leave blank to skip): '), display).run().strip() return input_packages.split() if input_packages else [] diff --git a/archinstall/lib/menu/menu.py b/archinstall/lib/menu/menu.py index 26c44f77..b523b96e 100644 --- a/archinstall/lib/menu/menu.py +++ b/archinstall/lib/menu/menu.py @@ -3,7 +3,7 @@ from enum import Enum, auto from os import system from typing import Dict, List, Union, Any, TYPE_CHECKING, Optional, Callable -from simple_term_menu import TerminalMenu # type: ignore +from simple_term_menu import TerminalMenu from ..exceptions import RequirementError from ..output import debug @@ -33,7 +33,7 @@ class MenuSelection: return self.value # type: ignore -class Menu(TerminalMenu): +class Menu(TerminalMenu): # type: ignore[misc] _menu_is_active: bool = False @staticmethod diff --git a/archinstall/lib/networking.py b/archinstall/lib/networking.py index 9d494e63..b4257794 100644 --- a/archinstall/lib/networking.py +++ b/archinstall/lib/networking.py @@ -150,7 +150,7 @@ def calc_checksum(icmp_packet) -> int: return checksum -def build_icmp(payload): +def build_icmp(payload: bytes) -> bytes: # Define the ICMP Echo Request packet icmp_packet = struct.pack('!BBHHH', 8, 0, 0, 0, 1) + payload diff --git a/archinstall/tui/menu_item.py b/archinstall/tui/menu_item.py index 6b1602b6..5ce6327b 100644 --- a/archinstall/tui/menu_item.py +++ b/archinstall/tui/menu_item.py @@ -80,7 +80,7 @@ class MenuItemGroup: raise ValueError('Selected item not in menu') @staticmethod - def default_confirm(): + def default_confirm() -> 'MenuItemGroup': return MenuItemGroup( [MenuItem.default_yes(), MenuItem.default_no()], sort_items=False diff --git a/examples/interactive_installation.py b/examples/interactive_installation.py index 10ea0edd..93636b1f 100644 --- a/examples/interactive_installation.py +++ b/examples/interactive_installation.py @@ -1,5 +1,5 @@ from pathlib import Path -from typing import TYPE_CHECKING, Any, Optional +from typing import TYPE_CHECKING, Callable, Optional import archinstall from archinstall import Installer @@ -12,7 +12,7 @@ from archinstall import locale from archinstall import info, debug if TYPE_CHECKING: - _: Any + _: Callable[[str], str] def ask_user_questions() -> None: diff --git a/examples/minimal_installation.py b/examples/minimal_installation.py index 7265dff6..c86b1e59 100644 --- a/examples/minimal_installation.py +++ b/examples/minimal_installation.py @@ -1,5 +1,5 @@ from pathlib import Path -from typing import TYPE_CHECKING, Any, List +from typing import TYPE_CHECKING, Callable, List import archinstall from archinstall import disk @@ -10,7 +10,7 @@ from archinstall import interactions from archinstall.default_profiles.minimal import MinimalProfile if TYPE_CHECKING: - _: Any + _: Callable[[str], str] def perform_installation(mountpoint: Path) -> None: diff --git a/mypy.ini b/mypy.ini deleted file mode 100644 index 9ba68248..00000000 --- a/mypy.ini +++ /dev/null @@ -1,20 +0,0 @@ -[mypy] -python_version = 3.11 -follow_imports = silent -check_untyped_defs = True -strict_equality = True -warn_unused_configs = True -disallow_any_generics = True -disallow_subclassing_any = True -disallow_untyped_calls = True -disallow_untyped_defs = True -disallow_incomplete_defs = True -disallow_untyped_decorators = True -warn_redundant_casts = True -warn_unused_ignores = True -warn_return_any = True -warn_unreachable = True -extra_checks = True -files = examples/ -exclude = (?x)( - ^archinstall) diff --git a/pyproject.toml b/pyproject.toml index bb75374f..adb0cdb2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,9 +62,58 @@ archinstall = "archinstall" [tool.mypy] python_version = "3.11" -files = "archinstall/" -exclude = "tests" -check_untyped_defs=true +files = "." +exclude = "^build/" +check_untyped_defs = true +disallow_any_explicit = false +disallow_any_expr = false +disallow_any_generics = false +disallow_any_unimported = false +disallow_incomplete_defs = false +disallow_subclassing_any = true +disallow_untyped_calls = true +disallow_untyped_decorators = true +disallow_untyped_defs = false +extra_checks = true +strict = false +strict_equality = true +warn_redundant_casts = true +warn_return_any = true +warn_unreachable = true +warn_unused_configs = true +warn_unused_ignores = true + +[[tool.mypy.overrides]] +module = "archinstall.examples.*" +disallow_any_explicit = true +disallow_any_generics = true +disallow_any_unimported = true +disallow_incomplete_defs = true +disallow_untyped_defs = true +follow_imports = "silent" + +[[tool.mypy.overrides]] +module = "archinstall.lib.*" +strict_equality = false +warn_return_any = false +warn_unreachable = false + +[[tool.mypy.overrides]] +module = "archinstall.scripts.*" +warn_unreachable = false + +[[tool.mypy.overrides]] +module = "archinstall.tui.*" +strict_equality = false +warn_return_any = false +warn_unreachable = false + +[[tool.mypy.overrides]] +module = [ + "parted", + "simple_term_menu", +] +ignore_missing_imports = true [tool.bandit] targets = ["archinstall"]