diff --git a/conf/topdir/pyproject.toml b/conf/topdir/pyproject.toml index cea8145c..88acff3d 100644 --- a/conf/topdir/pyproject.toml +++ b/conf/topdir/pyproject.toml @@ -38,10 +38,14 @@ [tool.ruff.lint] + future-annotations = true + select = [ "F", # Pyflakes, includes F401 "E", # pycodestyle errors "W", # pycodestyle warnings + "TC", # type-checking import placement rules + "FA", # future annotations rules ] ignore = [ diff --git a/src/python/jw/pkg/App.py b/src/python/jw/pkg/App.py index 70a5689c..61643bb2 100644 --- a/src/python/jw/pkg/App.py +++ b/src/python/jw/pkg/App.py @@ -4,7 +4,6 @@ from __future__ import annotations -import argparse import os import pwd import re @@ -19,10 +18,7 @@ from .lib.Distro import Distro from .lib.log import DEBUG, ERR, log if TYPE_CHECKING: - import os - import pwd - import re - import sys + import argparse from typing import TypeAlias diff --git a/src/python/jw/pkg/cmds/Cmd.py b/src/python/jw/pkg/cmds/Cmd.py index 4f333dc3..ecd90de8 100644 --- a/src/python/jw/pkg/cmds/Cmd.py +++ b/src/python/jw/pkg/cmds/Cmd.py @@ -2,15 +2,15 @@ from __future__ import annotations from typing import TYPE_CHECKING -from ..CmdBase import CmdBase +from ..App import App as Parent +from ..CmdBase import CmdBase as Base if TYPE_CHECKING: - from ..App import App from ..lib.Distro import Distro -class Cmd(CmdBase): # export +class Cmd(Base): # export - def __init__(self, parent: App | CmdBase, name: str, help: str) -> None: + def __init__(self, parent: Parent, name: str, help: str) -> None: super().__init__(parent, name, help) async def _run(self, args): @@ -20,3 +20,5 @@ class Cmd(CmdBase): # export @property def distro(self) -> Distro: return self.app.distro + +__all__ = ['Parent', 'Cmd'] diff --git a/src/python/jw/pkg/cmds/CmdPkg.py b/src/python/jw/pkg/cmds/CmdPkg.py index 5d4c07b7..8de1e7cb 100644 --- a/src/python/jw/pkg/cmds/CmdPkg.py +++ b/src/python/jw/pkg/cmds/CmdPkg.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser +from __future__ import annotations -from ..App import App -from .Cmd import Cmd as CmdBase +from typing import TYPE_CHECKING -class CmdPkg(CmdBase): # export +from .Cmd import Cmd, Parent - def __init__(self, parent: App) -> None: +if TYPE_CHECKING: + from argparse import ArgumentParser + +class CmdPkg(Cmd): # export + + def __init__(self, parent: Parent) -> None: super().__init__(parent, 'pkg', help = 'System package manager wrapper') self.load_subcommands() diff --git a/src/python/jw/pkg/cmds/CmdPlatform.py b/src/python/jw/pkg/cmds/CmdPlatform.py index 7e804dde..ecb5035d 100644 --- a/src/python/jw/pkg/cmds/CmdPlatform.py +++ b/src/python/jw/pkg/cmds/CmdPlatform.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser +from __future__ import annotations -from ..App import App -from .Cmd import Cmd as CmdBase +from typing import TYPE_CHECKING -class CmdPlatform(CmdBase): # export +from .Cmd import Cmd, Parent - def __init__(self, parent: App) -> None: +if TYPE_CHECKING: + from argparse import ArgumentParser + +class CmdPlatform(Cmd): # export + + def __init__(self, parent: Parent) -> None: super().__init__( parent, 'platform', help = 'Miscellaneous platform-related comamnds' ) diff --git a/src/python/jw/pkg/cmds/CmdPosix.py b/src/python/jw/pkg/cmds/CmdPosix.py index 2d5e19ec..84e5f5b7 100644 --- a/src/python/jw/pkg/cmds/CmdPosix.py +++ b/src/python/jw/pkg/cmds/CmdPosix.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser +from __future__ import annotations -from ..App import App -from .Cmd import Cmd as CmdBase +from typing import TYPE_CHECKING -class CmdPosix(CmdBase): # export +from .Cmd import Cmd, Parent - def __init__(self, parent: App) -> None: +if TYPE_CHECKING: + from argparse import ArgumentParser + +class CmdPosix(Cmd): # export + + def __init__(self, parent: Parent) -> None: super().__init__( parent, 'posix', diff --git a/src/python/jw/pkg/cmds/CmdProjects.py b/src/python/jw/pkg/cmds/CmdProjects.py index 5021f19c..3cc62c23 100644 --- a/src/python/jw/pkg/cmds/CmdProjects.py +++ b/src/python/jw/pkg/cmds/CmdProjects.py @@ -1,13 +1,17 @@ +from __future__ import annotations + import sys -from argparse import ArgumentParser +from typing import TYPE_CHECKING -from ..App import App -from .Cmd import Cmd as CmdBase +from .Cmd import Cmd, Parent -class CmdProjects(CmdBase): # export +if TYPE_CHECKING: + from argparse import ArgumentParser - def __init__(self, parent: App) -> None: +class CmdProjects(Cmd): # export + + def __init__(self, parent: Parent) -> None: super().__init__( parent, 'projects', diff --git a/src/python/jw/pkg/cmds/CmdSecrets.py b/src/python/jw/pkg/cmds/CmdSecrets.py index 0bee4d45..14176ed6 100644 --- a/src/python/jw/pkg/cmds/CmdSecrets.py +++ b/src/python/jw/pkg/cmds/CmdSecrets.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser +from __future__ import annotations -from ..App import App -from .Cmd import Cmd as CmdBase +from typing import TYPE_CHECKING -class CmdSecrets(CmdBase): # export +from .Cmd import Cmd, Parent - def __init__(self, parent: App) -> None: +if TYPE_CHECKING: + from argparse import ArgumentParser + +class CmdSecrets(Cmd): # export + + def __init__(self, parent: Parent) -> None: super().__init__(parent, 'secrets', help = 'Manage package secrets') self.load_subcommands() diff --git a/src/python/jw/pkg/cmds/pkg/Cmd.py b/src/python/jw/pkg/cmds/pkg/Cmd.py index 3da8c7d3..f0777ab1 100644 --- a/src/python/jw/pkg/cmds/pkg/Cmd.py +++ b/src/python/jw/pkg/cmds/pkg/Cmd.py @@ -2,12 +2,19 @@ from __future__ import annotations from typing import TYPE_CHECKING -if TYPE_CHECKING: - from ..CmdPkg import CmdPkg +from ...CmdBase import CmdBase as Base +from ..CmdPkg import CmdPkg as Parent -from ..Cmd import Cmd as Base +if TYPE_CHECKING: + from ...lib.Distro import Distro class Cmd(Base): # export - def __init__(self, parent: CmdPkg, name: str, help: str) -> None: + def __init__(self, parent: Parent, name: str, help: str) -> None: super().__init__(parent, name, help) + + @property + def distro(self) -> Distro: + return self.app.distro + +__all__ = ['Parent', 'Cmd'] diff --git a/src/python/jw/pkg/cmds/pkg/CmdDelete.py b/src/python/jw/pkg/cmds/pkg/CmdDelete.py index e4bced49..8a75fafc 100644 --- a/src/python/jw/pkg/cmds/pkg/CmdDelete.py +++ b/src/python/jw/pkg/cmds/pkg/CmdDelete.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations -from ..CmdPkg import CmdPkg -from .Cmd import Cmd +from typing import TYPE_CHECKING + +from .Cmd import Cmd, Parent + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdDelete(Cmd): # export - def __init__(self, parent: CmdPkg) -> None: + def __init__(self, parent: Parent) -> None: super().__init__(parent, 'delete', help = 'Delete packages by name') def add_arguments(self, parser: ArgumentParser) -> None: diff --git a/src/python/jw/pkg/cmds/pkg/CmdDup.py b/src/python/jw/pkg/cmds/pkg/CmdDup.py index 7d442098..378a8804 100644 --- a/src/python/jw/pkg/cmds/pkg/CmdDup.py +++ b/src/python/jw/pkg/cmds/pkg/CmdDup.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations -from ..CmdPkg import CmdPkg -from .Cmd import Cmd +from typing import TYPE_CHECKING + +from .Cmd import Cmd, Parent + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdDup(Cmd): # export - def __init__(self, parent: CmdPkg) -> None: + def __init__(self, parent: Parent) -> None: super().__init__(parent, 'dup', help = 'Upgrade distribution') def add_arguments(self, parser: ArgumentParser) -> None: diff --git a/src/python/jw/pkg/cmds/pkg/CmdInstall.py b/src/python/jw/pkg/cmds/pkg/CmdInstall.py index ad77aa11..916c5d7b 100644 --- a/src/python/jw/pkg/cmds/pkg/CmdInstall.py +++ b/src/python/jw/pkg/cmds/pkg/CmdInstall.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations -from ..CmdPkg import CmdPkg -from .Cmd import Cmd +from typing import TYPE_CHECKING + +from .Cmd import Cmd, Parent + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdInstall(Cmd): # export - def __init__(self, parent: CmdPkg) -> None: + def __init__(self, parent: Parent) -> None: super().__init__( parent, 'install', diff --git a/src/python/jw/pkg/cmds/pkg/CmdLs.py b/src/python/jw/pkg/cmds/pkg/CmdLs.py index 806ac324..a47216e3 100644 --- a/src/python/jw/pkg/cmds/pkg/CmdLs.py +++ b/src/python/jw/pkg/cmds/pkg/CmdLs.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations -from ..CmdPkg import CmdPkg -from .NamedPkgsCmd import NamedPkgsCmd as Base +from typing import TYPE_CHECKING -class CmdLs(Base): # export +from .Cmd import Cmd, Parent - def __init__(self, parent: CmdPkg) -> None: +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace + +class CmdLs(Cmd): # export + + def __init__(self, parent: Parent) -> None: super().__init__(parent, 'ls', help = 'List package contents') def add_arguments(self, parser: ArgumentParser) -> None: diff --git a/src/python/jw/pkg/cmds/pkg/CmdMeta.py b/src/python/jw/pkg/cmds/pkg/CmdMeta.py index e44a77de..aa70f644 100644 --- a/src/python/jw/pkg/cmds/pkg/CmdMeta.py +++ b/src/python/jw/pkg/cmds/pkg/CmdMeta.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations -from ..CmdPkg import CmdPkg -from .NamedPkgsCmd import NamedPkgsCmd as Base +from typing import TYPE_CHECKING -class CmdMeta(Base): # export +from .NamedPkgsCmd import NamedPkgsCmd, Parent - def __init__(self, parent: CmdPkg) -> None: +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace + +class CmdMeta(NamedPkgsCmd): # export + + def __init__(self, parent: Parent) -> None: super().__init__(parent, 'meta', help = 'List package metadata') def add_arguments(self, parser: ArgumentParser) -> None: diff --git a/src/python/jw/pkg/cmds/pkg/CmdRebootRequired.py b/src/python/jw/pkg/cmds/pkg/CmdRebootRequired.py index 411ee761..13097ea8 100644 --- a/src/python/jw/pkg/cmds/pkg/CmdRebootRequired.py +++ b/src/python/jw/pkg/cmds/pkg/CmdRebootRequired.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations -from ..CmdPkg import CmdPkg -from .Cmd import Cmd +from typing import TYPE_CHECKING + +from .Cmd import Cmd, Parent + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdRebootRequired(Cmd): # export - def __init__(self, parent: CmdPkg) -> None: + def __init__(self, parent: Parent) -> None: super().__init__( parent, 'reboot-required', diff --git a/src/python/jw/pkg/cmds/pkg/CmdRefresh.py b/src/python/jw/pkg/cmds/pkg/CmdRefresh.py index 1ee060ee..32a79284 100644 --- a/src/python/jw/pkg/cmds/pkg/CmdRefresh.py +++ b/src/python/jw/pkg/cmds/pkg/CmdRefresh.py @@ -1,11 +1,15 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations -from ..CmdPkg import CmdPkg -from .Cmd import Cmd +from typing import TYPE_CHECKING + +from .Cmd import Cmd, Parent + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdRefresh(Cmd): # export - def __init__(self, parent: CmdPkg) -> None: + def __init__(self, parent: Parent) -> None: super().__init__( parent, 'refresh', diff --git a/src/python/jw/pkg/cmds/pkg/CmdSelect.py b/src/python/jw/pkg/cmds/pkg/CmdSelect.py index 387877d1..3a51e13a 100644 --- a/src/python/jw/pkg/cmds/pkg/CmdSelect.py +++ b/src/python/jw/pkg/cmds/pkg/CmdSelect.py @@ -1,12 +1,16 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations + +from typing import TYPE_CHECKING from ...lib.PackageFilter import PackageFilterString -from ..CmdPkg import CmdPkg -from .Cmd import Cmd +from .Cmd import Cmd, Parent + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdSelect(Cmd): # export - def __init__(self, parent: CmdPkg) -> None: + def __init__(self, parent: Parent) -> None: super().__init__(parent, 'select', help = 'Select packages by filter') def add_arguments(self, parser: ArgumentParser) -> None: diff --git a/src/python/jw/pkg/cmds/pkg/NamedPkgsCmd.py b/src/python/jw/pkg/cmds/pkg/NamedPkgsCmd.py index bc5875a6..ba0c8217 100644 --- a/src/python/jw/pkg/cmds/pkg/NamedPkgsCmd.py +++ b/src/python/jw/pkg/cmds/pkg/NamedPkgsCmd.py @@ -1,9 +1,13 @@ -from argparse import ArgumentParser +from __future__ import annotations -from ..CmdPkg import CmdPkg as Parent -from .Cmd import Cmd as Base +from typing import TYPE_CHECKING -class NamedPkgsCmd(Base): # export +from .Cmd import Cmd, Parent + +if TYPE_CHECKING: + from argparse import ArgumentParser + +class NamedPkgsCmd(Cmd): # export def __init__(self, parent: Parent, name: str, help: str) -> None: super().__init__(parent, name, help) @@ -11,3 +15,5 @@ class NamedPkgsCmd(Base): # export def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) parser.add_argument('names', nargs = '*', help = 'Package names') + +__all__ = ['NamedPkgsCmd', 'Parent'] diff --git a/src/python/jw/pkg/cmds/platform/Cmd.py b/src/python/jw/pkg/cmds/platform/Cmd.py index 35f9031b..69cbb8b2 100644 --- a/src/python/jw/pkg/cmds/platform/Cmd.py +++ b/src/python/jw/pkg/cmds/platform/Cmd.py @@ -1,13 +1,11 @@ from __future__ import annotations -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from ..CmdPlatform import CmdPlatform - -from ..Cmd import Cmd as Base +from ...CmdBase import CmdBase as Base +from ..CmdPlatform import CmdPlatform as Parent class Cmd(Base): # export - def __init__(self, parent: CmdPlatform, name: str, help: str) -> None: + def __init__(self, parent: Parent, name: str, help: str) -> None: super().__init__(parent, name, help) + +__all__ = ['Parent', 'Cmd'] diff --git a/src/python/jw/pkg/cmds/platform/CmdInfo.py b/src/python/jw/pkg/cmds/platform/CmdInfo.py index 9d649423..ddacfd56 100644 --- a/src/python/jw/pkg/cmds/platform/CmdInfo.py +++ b/src/python/jw/pkg/cmds/platform/CmdInfo.py @@ -1,12 +1,16 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations + +from typing import TYPE_CHECKING from ...lib.Distro import Distro -from ..Cmd import Cmd -from ..CmdPlatform import CmdPlatform +from .Cmd import Cmd, Parent + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdInfo(Cmd): # export - def __init__(self, parent: CmdPlatform) -> None: + def __init__(self, parent: Parent) -> None: super().__init__( parent, 'info', help = 'Retrieve information about target platform' ) diff --git a/src/python/jw/pkg/cmds/posix/Cmd.py b/src/python/jw/pkg/cmds/posix/Cmd.py index 4f11c3df..d43b29f1 100644 --- a/src/python/jw/pkg/cmds/posix/Cmd.py +++ b/src/python/jw/pkg/cmds/posix/Cmd.py @@ -1,17 +1,19 @@ from __future__ import annotations -from argparse import ArgumentParser from typing import TYPE_CHECKING -from ...CmdBase import CmdBase +from ...CmdBase import CmdBase as Base +from ..CmdPosix import CmdPosix as Parent if TYPE_CHECKING: - from ..CmdPosix import CmdPosix as Parent + from argparse import ArgumentParser -class Cmd(CmdBase): # export +class Cmd(Base): # export def __init__(self, parent: Parent, name: str, help: str) -> None: super().__init__(parent, name, help) def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) + +__all__ = ['Parent', 'Cmd'] diff --git a/src/python/jw/pkg/cmds/posix/CmdCopy.py b/src/python/jw/pkg/cmds/posix/CmdCopy.py index 89831019..d52a1fc7 100644 --- a/src/python/jw/pkg/cmds/posix/CmdCopy.py +++ b/src/python/jw/pkg/cmds/posix/CmdCopy.py @@ -3,16 +3,14 @@ from __future__ import annotations from typing import TYPE_CHECKING from ...lib.util import copy -from .Cmd import Cmd +from .Cmd import Cmd, Parent if TYPE_CHECKING: from argparse import ArgumentParser, Namespace - from ..CmdPosix import CmdPosix - class CmdCopy(Cmd): # export - def __init__(self, parent: CmdPosix) -> None: + def __init__(self, parent: Parent) -> None: super().__init__(parent, 'copy', help = 'Copy files') def add_arguments(self, parser: ArgumentParser) -> None: diff --git a/src/python/jw/pkg/cmds/posix/CmdTar.py b/src/python/jw/pkg/cmds/posix/CmdTar.py index 88236530..05a6adbe 100644 --- a/src/python/jw/pkg/cmds/posix/CmdTar.py +++ b/src/python/jw/pkg/cmds/posix/CmdTar.py @@ -1,9 +1,13 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations -from ..CmdPosix import CmdPosix as Parent -from .Cmd import Cmd as Base +from typing import TYPE_CHECKING -class CmdTar(Base): # export +from .Cmd import Cmd, Parent + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace + +class CmdTar(Cmd): # export def __init__(self, parent: Parent) -> None: super().__init__(parent, 'tar', help = 'Handle tar archives') diff --git a/src/python/jw/pkg/cmds/posix/tar/Cmd.py b/src/python/jw/pkg/cmds/posix/tar/Cmd.py index 2ecbdb98..c08cacee 100644 --- a/src/python/jw/pkg/cmds/posix/tar/Cmd.py +++ b/src/python/jw/pkg/cmds/posix/tar/Cmd.py @@ -1,14 +1,19 @@ -from argparse import ArgumentParser -from collections.abc import AsyncIterator -from contextlib import asynccontextmanager +from __future__ import annotations -from ....CmdBase import CmdBase +from contextlib import asynccontextmanager +from typing import TYPE_CHECKING + +from ....CmdBase import CmdBase as Base from ....lib.FileContext import FileContext from ....lib.ProcFilterGpg import ProcFilterGpg from ....lib.TarIo import TarIo from ..CmdTar import CmdTar as Parent -class Cmd(CmdBase): # export +if TYPE_CHECKING: + from argparse import ArgumentParser + from collections.abc import AsyncIterator + +class Cmd(Base): # export def __init__(self, parent: Parent, name: str, help: str) -> None: super().__init__(parent, name, help) @@ -27,3 +32,5 @@ class Cmd(CmdBase): # export parser.add_argument( '-f', '--archive-path', required = True, help = 'Archive path' ) + +__all__ = ['Parent', 'Cmd'] diff --git a/src/python/jw/pkg/cmds/posix/tar/CmdExtract.py b/src/python/jw/pkg/cmds/posix/tar/CmdExtract.py index 53f9aa02..c9b2f191 100644 --- a/src/python/jw/pkg/cmds/posix/tar/CmdExtract.py +++ b/src/python/jw/pkg/cmds/posix/tar/CmdExtract.py @@ -1,9 +1,11 @@ from __future__ import annotations -from argparse import ArgumentParser, Namespace - from ....lib.log import DEBUG, log from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdExtract(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/BaseCmdPkgRelations.py b/src/python/jw/pkg/cmds/projects/BaseCmdPkgRelations.py index fbc4ce50..433f76d1 100644 --- a/src/python/jw/pkg/cmds/projects/BaseCmdPkgRelations.py +++ b/src/python/jw/pkg/cmds/projects/BaseCmdPkgRelations.py @@ -1,9 +1,14 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations + +from typing import TYPE_CHECKING from .Cmd import Cmd, Parent from .lib.pkg_relations import VersionSyntax from .lib.pkg_relations import pkg_relations as pkg_relations_list +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace + class BaseCmdPkgRelations(Cmd): def pkg_relations(self, rel_type: str, args: Namespace) -> str: @@ -130,3 +135,5 @@ class BaseCmdPkgRelations(Cmd): async def _run(self, args: Namespace) -> None: return self.print_pkg_relations(self.relation, args) + +__all__ = ['Parent', 'BaseCmdPkgRelations'] diff --git a/src/python/jw/pkg/cmds/projects/Cmd.py b/src/python/jw/pkg/cmds/projects/Cmd.py index 2b3799ba..299733a7 100644 --- a/src/python/jw/pkg/cmds/projects/Cmd.py +++ b/src/python/jw/pkg/cmds/projects/Cmd.py @@ -1,14 +1,19 @@ from __future__ import annotations -from argparse import ArgumentParser +from typing import TYPE_CHECKING -from ...CmdBase import CmdBase +from ...CmdBase import CmdBase as Base from ..CmdProjects import CmdProjects as Parent -class Cmd(CmdBase): # export +if TYPE_CHECKING: + from argparse import ArgumentParser + +class Cmd(Base): # export def __init__(self, parent: Parent, name: str, help: str) -> None: super().__init__(parent, name, help) def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) + +__all__ = ['Parent', 'Cmd'] diff --git a/src/python/jw/pkg/cmds/projects/CmdBuild.py b/src/python/jw/pkg/cmds/projects/CmdBuild.py index d1c49da0..45032128 100644 --- a/src/python/jw/pkg/cmds/projects/CmdBuild.py +++ b/src/python/jw/pkg/cmds/projects/CmdBuild.py @@ -1,14 +1,18 @@ +from __future__ import annotations import datetime import os import re -from argparse import ArgumentParser, Namespace from functools import lru_cache from ...App import Scope from ...lib.log import DEBUG, ERR, NOTICE, log from ...lib.util import get_profile_env, pretty_cmd from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdBuild(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdCanonicalizeRemotes.py b/src/python/jw/pkg/cmds/projects/CmdCanonicalizeRemotes.py index 03ea8ea2..a852cf67 100644 --- a/src/python/jw/pkg/cmds/projects/CmdCanonicalizeRemotes.py +++ b/src/python/jw/pkg/cmds/projects/CmdCanonicalizeRemotes.py @@ -1,14 +1,14 @@ from __future__ import annotations -from argparse import ArgumentParser, Namespace from typing import TYPE_CHECKING from ...lib.base import InputMode from ...lib.log import NOTICE, log from .Cmd import Cmd, Parent +from ...lib.base import Result if TYPE_CHECKING: - from ...lib.base import Result + from argparse import ArgumentParser, Namespace class CmdCanonicalizeRemotes(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdCflags.py b/src/python/jw/pkg/cmds/projects/CmdCflags.py index 9434d922..23553fd8 100644 --- a/src/python/jw/pkg/cmds/projects/CmdCflags.py +++ b/src/python/jw/pkg/cmds/projects/CmdCflags.py @@ -1,7 +1,11 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from ...App import Scope from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdCflags(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdCheck.py b/src/python/jw/pkg/cmds/projects/CmdCheck.py index 695254cf..4512d52e 100644 --- a/src/python/jw/pkg/cmds/projects/CmdCheck.py +++ b/src/python/jw/pkg/cmds/projects/CmdCheck.py @@ -1,8 +1,11 @@ +from __future__ import annotations import sys -from argparse import ArgumentParser - from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser class CmdCheck(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdCommands.py b/src/python/jw/pkg/cmds/projects/CmdCommands.py index a0694d46..8fb580e3 100644 --- a/src/python/jw/pkg/cmds/projects/CmdCommands.py +++ b/src/python/jw/pkg/cmds/projects/CmdCommands.py @@ -1,6 +1,10 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdCommands(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdCreatePkgConfig.py b/src/python/jw/pkg/cmds/projects/CmdCreatePkgConfig.py index 3f7f4397..372fabd4 100644 --- a/src/python/jw/pkg/cmds/projects/CmdCreatePkgConfig.py +++ b/src/python/jw/pkg/cmds/projects/CmdCreatePkgConfig.py @@ -1,7 +1,11 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from .Cmd import Cmd, Parent from .lib.templates import tmpl_render +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdCreatePkgConfig(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdExepath.py b/src/python/jw/pkg/cmds/projects/CmdExepath.py index 5537e099..399f3340 100644 --- a/src/python/jw/pkg/cmds/projects/CmdExepath.py +++ b/src/python/jw/pkg/cmds/projects/CmdExepath.py @@ -1,7 +1,11 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from ...App import Scope from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdExepath(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdGetAuthInfo.py b/src/python/jw/pkg/cmds/projects/CmdGetAuthInfo.py index 2c0167c4..bcb5dfe6 100644 --- a/src/python/jw/pkg/cmds/projects/CmdGetAuthInfo.py +++ b/src/python/jw/pkg/cmds/projects/CmdGetAuthInfo.py @@ -1,11 +1,14 @@ +from __future__ import annotations import os import re -from argparse import ArgumentParser, Namespace - from ...lib.log import DEBUG, log from ...lib.Uri import Uri from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdGetAuthInfo(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdGetval.py b/src/python/jw/pkg/cmds/projects/CmdGetval.py index 58cc5d50..a8ddd5c3 100644 --- a/src/python/jw/pkg/cmds/projects/CmdGetval.py +++ b/src/python/jw/pkg/cmds/projects/CmdGetval.py @@ -1,6 +1,10 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdGetval(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdHtdocsDir.py b/src/python/jw/pkg/cmds/projects/CmdHtdocsDir.py index abff33e6..65fbc2bf 100644 --- a/src/python/jw/pkg/cmds/projects/CmdHtdocsDir.py +++ b/src/python/jw/pkg/cmds/projects/CmdHtdocsDir.py @@ -1,6 +1,10 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdHtdocsDir(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdLdflags.py b/src/python/jw/pkg/cmds/projects/CmdLdflags.py index e19dcfb4..7d44ffac 100644 --- a/src/python/jw/pkg/cmds/projects/CmdLdflags.py +++ b/src/python/jw/pkg/cmds/projects/CmdLdflags.py @@ -1,7 +1,11 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from ...App import Scope from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdLdflags(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdLdlibpath.py b/src/python/jw/pkg/cmds/projects/CmdLdlibpath.py index e4fa0028..3c2bf3fb 100644 --- a/src/python/jw/pkg/cmds/projects/CmdLdlibpath.py +++ b/src/python/jw/pkg/cmds/projects/CmdLdlibpath.py @@ -1,7 +1,11 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from ...App import Scope from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdLdlibpath(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdLibname.py b/src/python/jw/pkg/cmds/projects/CmdLibname.py index 2f76022f..7ec2f1cb 100644 --- a/src/python/jw/pkg/cmds/projects/CmdLibname.py +++ b/src/python/jw/pkg/cmds/projects/CmdLibname.py @@ -1,6 +1,10 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdLibname(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdListRepos.py b/src/python/jw/pkg/cmds/projects/CmdListRepos.py index 4f98db4f..ea84c8e4 100644 --- a/src/python/jw/pkg/cmds/projects/CmdListRepos.py +++ b/src/python/jw/pkg/cmds/projects/CmdListRepos.py @@ -1,12 +1,15 @@ +from __future__ import annotations import os import re -from argparse import ArgumentParser, Namespace - from ...lib.log import DEBUG, log from ...lib.Uri import Uri from ...lib.util import get_password, get_username, run_curl_into from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdListRepos(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdModules.py b/src/python/jw/pkg/cmds/projects/CmdModules.py index 9b3b4c6e..01b6b761 100644 --- a/src/python/jw/pkg/cmds/projects/CmdModules.py +++ b/src/python/jw/pkg/cmds/projects/CmdModules.py @@ -1,9 +1,12 @@ +from __future__ import annotations import re -from argparse import ArgumentParser, Namespace - from ...lib.log import DEBUG, log from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdModules(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdPath.py b/src/python/jw/pkg/cmds/projects/CmdPath.py index 95b91f29..658d0010 100644 --- a/src/python/jw/pkg/cmds/projects/CmdPath.py +++ b/src/python/jw/pkg/cmds/projects/CmdPath.py @@ -1,7 +1,11 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from ...App import Scope from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdPath(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdPkgConflicts.py b/src/python/jw/pkg/cmds/projects/CmdPkgConflicts.py index 232aabc1..e1854bfb 100644 --- a/src/python/jw/pkg/cmds/projects/CmdPkgConflicts.py +++ b/src/python/jw/pkg/cmds/projects/CmdPkgConflicts.py @@ -1,5 +1,4 @@ -from .BaseCmdPkgRelations import BaseCmdPkgRelations as Base -from .Cmd import Parent +from .BaseCmdPkgRelations import BaseCmdPkgRelations as Base, Parent class CmdPkgConflicts(Base): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdPkgProvides.py b/src/python/jw/pkg/cmds/projects/CmdPkgProvides.py index 7f77e7da..ae5337f9 100644 --- a/src/python/jw/pkg/cmds/projects/CmdPkgProvides.py +++ b/src/python/jw/pkg/cmds/projects/CmdPkgProvides.py @@ -1,5 +1,4 @@ -from .BaseCmdPkgRelations import BaseCmdPkgRelations as Base -from .Cmd import Parent +from .BaseCmdPkgRelations import BaseCmdPkgRelations as Base, Parent class CmdPkgProvides(Base): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdPkgRequires.py b/src/python/jw/pkg/cmds/projects/CmdPkgRequires.py index caae655c..53364580 100644 --- a/src/python/jw/pkg/cmds/projects/CmdPkgRequires.py +++ b/src/python/jw/pkg/cmds/projects/CmdPkgRequires.py @@ -1,5 +1,4 @@ -from .BaseCmdPkgRelations import BaseCmdPkgRelations as Base -from .Cmd import Parent +from .BaseCmdPkgRelations import BaseCmdPkgRelations as Base, Parent class CmdPkgRequires(Base): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdProjDir.py b/src/python/jw/pkg/cmds/projects/CmdProjDir.py index 2893b282..5d6068fe 100644 --- a/src/python/jw/pkg/cmds/projects/CmdProjDir.py +++ b/src/python/jw/pkg/cmds/projects/CmdProjDir.py @@ -1,7 +1,11 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from ...lib.log import WARNING, log from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdProjDir(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdPythonpath.py b/src/python/jw/pkg/cmds/projects/CmdPythonpath.py index 3ef5b26d..9ddd6463 100644 --- a/src/python/jw/pkg/cmds/projects/CmdPythonpath.py +++ b/src/python/jw/pkg/cmds/projects/CmdPythonpath.py @@ -1,7 +1,11 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from ...App import Scope from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdPythonpath(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdPythonpathOrig.py b/src/python/jw/pkg/cmds/projects/CmdPythonpathOrig.py index 1c6d6ee9..8a7bb2c8 100644 --- a/src/python/jw/pkg/cmds/projects/CmdPythonpathOrig.py +++ b/src/python/jw/pkg/cmds/projects/CmdPythonpathOrig.py @@ -1,9 +1,12 @@ +from __future__ import annotations import os -from argparse import ArgumentParser, Namespace - from ...App import Scope from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdPythonpathOrig(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py b/src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py index 89d93fad..af472492 100644 --- a/src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py +++ b/src/python/jw/pkg/cmds/projects/CmdRequiredOsPkg.py @@ -1,8 +1,12 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from ...App import Scope from ...lib.log import DEBUG, log from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace # TODO: seems at least partly redundant to CmdPkgRequires / print_pkg_relations class CmdRequiredOsPkg(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdSummary.py b/src/python/jw/pkg/cmds/projects/CmdSummary.py index ec340d1e..dc76edcf 100644 --- a/src/python/jw/pkg/cmds/projects/CmdSummary.py +++ b/src/python/jw/pkg/cmds/projects/CmdSummary.py @@ -1,6 +1,10 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdSummary(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdTest.py b/src/python/jw/pkg/cmds/projects/CmdTest.py index 7c7e03d7..31ccaff1 100644 --- a/src/python/jw/pkg/cmds/projects/CmdTest.py +++ b/src/python/jw/pkg/cmds/projects/CmdTest.py @@ -1,6 +1,10 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdTest(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/CmdTmplDir.py b/src/python/jw/pkg/cmds/projects/CmdTmplDir.py index 22def81d..ed6d4790 100644 --- a/src/python/jw/pkg/cmds/projects/CmdTmplDir.py +++ b/src/python/jw/pkg/cmds/projects/CmdTmplDir.py @@ -1,6 +1,10 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdTmplDir(Cmd): # export diff --git a/src/python/jw/pkg/cmds/projects/check/Cmd.py b/src/python/jw/pkg/cmds/projects/check/Cmd.py index 1d2d4842..1e8132ef 100644 --- a/src/python/jw/pkg/cmds/projects/check/Cmd.py +++ b/src/python/jw/pkg/cmds/projects/check/Cmd.py @@ -1,14 +1,19 @@ from __future__ import annotations -from argparse import ArgumentParser +from typing import TYPE_CHECKING -from ....CmdBase import CmdBase +from ....CmdBase import CmdBase as Base from ..CmdCheck import CmdCheck as Parent -class Cmd(CmdBase): # export +if TYPE_CHECKING: + from argparse import ArgumentParser + +class Cmd(Base): # export def __init__(self, parent: Parent, name: str, help: str) -> None: super().__init__(parent, name, help) def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) + +__all__ = ['Parent', 'Cmd'] diff --git a/src/python/jw/pkg/cmds/projects/check/CmdDep.py b/src/python/jw/pkg/cmds/projects/check/CmdDep.py index 3a322840..e6469b90 100644 --- a/src/python/jw/pkg/cmds/projects/check/CmdDep.py +++ b/src/python/jw/pkg/cmds/projects/check/CmdDep.py @@ -1,7 +1,11 @@ -from argparse import ArgumentParser, Namespace +from __future__ import annotations from ....lib.log import NOTICE, log from .Cmd import Cmd, Parent +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from argparse import ArgumentParser, Namespace class CmdDep(Cmd): # export diff --git a/src/python/jw/pkg/cmds/secrets/Cmd.py b/src/python/jw/pkg/cmds/secrets/Cmd.py index c7d1412e..83c52af3 100644 --- a/src/python/jw/pkg/cmds/secrets/Cmd.py +++ b/src/python/jw/pkg/cmds/secrets/Cmd.py @@ -1,19 +1,19 @@ from __future__ import annotations -from argparse import ArgumentParser from functools import cached_property from typing import TYPE_CHECKING -from ...CmdBase import CmdBase +from ...CmdBase import CmdBase as Base from ..CmdSecrets import CmdSecrets as Parent - -if TYPE_CHECKING: - from typing import Iterable - from .lib.base import Attrs - from .lib.DistroContext import DistroContext -class Cmd(CmdBase): # export +if TYPE_CHECKING: + from argparse import ArgumentParser + from typing import Iterable + + from .lib.base import Attrs + +class Cmd(Base): # export @cached_property def ctx(self) -> DistroContext: @@ -49,3 +49,5 @@ class Cmd(CmdBase): # export def add_arguments(self, parser: ArgumentParser) -> None: super().add_arguments(parser) parser.add_argument('packages', nargs = '*', help = 'Package names') + +__all__ = ['Parent', 'Cmd'] diff --git a/src/python/jw/pkg/cmds/secrets/CmdCompileTemplates.py b/src/python/jw/pkg/cmds/secrets/CmdCompileTemplates.py index 9f821da1..dfaad815 100644 --- a/src/python/jw/pkg/cmds/secrets/CmdCompileTemplates.py +++ b/src/python/jw/pkg/cmds/secrets/CmdCompileTemplates.py @@ -2,17 +2,15 @@ from __future__ import annotations from typing import TYPE_CHECKING -from .Cmd import Cmd +from .Cmd import Cmd, Parent from .lib.base import Attrs if TYPE_CHECKING: from argparse import ArgumentParser, Namespace - from ..CmdSecrets import CmdSecrets - class CmdCompileTemplates(Cmd): # export - def __init__(self, parent: CmdSecrets) -> None: + def __init__(self, parent: Parent) -> None: super().__init__( parent, 'compile-templates', help = 'Compile package template files' ) diff --git a/src/python/jw/pkg/cmds/secrets/CmdInstall.py b/src/python/jw/pkg/cmds/secrets/CmdInstall.py index c1dbc5ed..dadbd4f0 100644 --- a/src/python/jw/pkg/cmds/secrets/CmdInstall.py +++ b/src/python/jw/pkg/cmds/secrets/CmdInstall.py @@ -2,16 +2,14 @@ from __future__ import annotations from typing import TYPE_CHECKING -from .Cmd import Cmd +from .Cmd import Cmd, Parent if TYPE_CHECKING: from argparse import ArgumentParser, Namespace - from ..CmdSecrets import CmdSecrets - class CmdInstall(Cmd): # export - def __init__(self, parent: CmdSecrets) -> None: + def __init__(self, parent: Parent) -> None: super().__init__( parent, 'install', diff --git a/src/python/jw/pkg/cmds/secrets/CmdListCompilationOutput.py b/src/python/jw/pkg/cmds/secrets/CmdListCompilationOutput.py index 7b4c621a..3b9d3e3c 100644 --- a/src/python/jw/pkg/cmds/secrets/CmdListCompilationOutput.py +++ b/src/python/jw/pkg/cmds/secrets/CmdListCompilationOutput.py @@ -2,16 +2,14 @@ from __future__ import annotations from typing import TYPE_CHECKING -from .Cmd import Cmd +from .Cmd import Cmd, Parent if TYPE_CHECKING: from argparse import ArgumentParser, Namespace - from ..CmdSecrets import CmdSecrets - class CmdListCompilationOutput(Cmd): # export - def __init__(self, parent: CmdSecrets) -> None: + def __init__(self, parent: Parent) -> None: super().__init__( parent, 'list-compilation-output', diff --git a/src/python/jw/pkg/cmds/secrets/CmdListSecrets.py b/src/python/jw/pkg/cmds/secrets/CmdListSecrets.py index 8ff8a608..1950a187 100644 --- a/src/python/jw/pkg/cmds/secrets/CmdListSecrets.py +++ b/src/python/jw/pkg/cmds/secrets/CmdListSecrets.py @@ -2,16 +2,14 @@ from __future__ import annotations from typing import TYPE_CHECKING -from .Cmd import Cmd +from .Cmd import Cmd, Parent if TYPE_CHECKING: from argparse import ArgumentParser, Namespace - from ..CmdSecrets import CmdSecrets - class CmdListSecrets(Cmd): # export - def __init__(self, parent: CmdSecrets) -> None: + def __init__(self, parent: Parent) -> None: super().__init__(parent, 'list-secrets', help = 'List package secret files') def add_arguments(self, parser: ArgumentParser) -> None: diff --git a/src/python/jw/pkg/cmds/secrets/CmdListTemplates.py b/src/python/jw/pkg/cmds/secrets/CmdListTemplates.py index 1750f663..150faa5c 100644 --- a/src/python/jw/pkg/cmds/secrets/CmdListTemplates.py +++ b/src/python/jw/pkg/cmds/secrets/CmdListTemplates.py @@ -2,16 +2,14 @@ from __future__ import annotations from typing import TYPE_CHECKING -from .Cmd import Cmd +from .Cmd import Cmd, Parent if TYPE_CHECKING: from argparse import Namespace - from ..CmdSecrets import CmdSecrets - class CmdListTemplates(Cmd): # export - def __init__(self, parent: CmdSecrets) -> None: + def __init__(self, parent: Parent) -> None: super().__init__(parent, 'list-templates', help = 'List package template files') async def _run(self, args: Namespace) -> None: diff --git a/src/python/jw/pkg/cmds/secrets/lib/DistroContext.py b/src/python/jw/pkg/cmds/secrets/lib/DistroContext.py index 1ff00fd5..f1958d93 100644 --- a/src/python/jw/pkg/cmds/secrets/lib/DistroContext.py +++ b/src/python/jw/pkg/cmds/secrets/lib/DistroContext.py @@ -8,10 +8,10 @@ from typing import TYPE_CHECKING from ....lib.log import DEBUG, NOTICE, WARNING, log from ....lib.ProcFilterGpg import ProcFilterGpg -from .base import Attrs from .FilesContext import FilesContext if TYPE_CHECKING: + from .base import Attrs from typing import Iterable from ....lib.Distro import Distro diff --git a/src/python/jw/pkg/cmds/secrets/lib/tar.py b/src/python/jw/pkg/cmds/secrets/lib/tar.py index 43e9312d..84cde315 100644 --- a/src/python/jw/pkg/cmds/secrets/lib/tar.py +++ b/src/python/jw/pkg/cmds/secrets/lib/tar.py @@ -7,11 +7,11 @@ from tarfile import TarFile from typing import TYPE_CHECKING, Callable from ....lib.log import DEBUG, log +from ....lib.ExecContext import ExecContext if TYPE_CHECKING: from typing import Iterable - from ....lib.ExecContext import ExecContext from ....lib.FileContext import FileContext def filter( diff --git a/src/python/jw/pkg/cmds/secrets/lib/util.py b/src/python/jw/pkg/cmds/secrets/lib/util.py index 5056ceab..fcc32244 100644 --- a/src/python/jw/pkg/cmds/secrets/lib/util.py +++ b/src/python/jw/pkg/cmds/secrets/lib/util.py @@ -3,10 +3,10 @@ from __future__ import annotations from typing import TYPE_CHECKING from ....lib.ec.Local import Local -from ....lib.FileContext import FileContext from .FilesContext import FilesContext if TYPE_CHECKING: + from ....lib.FileContext import FileContext from .base import Attrs async def compile_template_file( diff --git a/src/python/jw/pkg/lib/AsyncRunner.py b/src/python/jw/pkg/lib/AsyncRunner.py index 5d50309c..2384ea07 100644 --- a/src/python/jw/pkg/lib/AsyncRunner.py +++ b/src/python/jw/pkg/lib/AsyncRunner.py @@ -4,8 +4,10 @@ import asyncio import concurrent.futures import contextlib -from collections.abc import Awaitable, Generator -from typing import TypeVar +from typing import TypeVar, TYPE_CHECKING + +if TYPE_CHECKING: + from collections.abc import Awaitable, Generator T = TypeVar('T') diff --git a/src/python/jw/pkg/lib/Cmd.py b/src/python/jw/pkg/lib/Cmd.py index b63e7b2f..91beb310 100644 --- a/src/python/jw/pkg/lib/Cmd.py +++ b/src/python/jw/pkg/lib/Cmd.py @@ -3,13 +3,13 @@ from __future__ import annotations import abc import sys -from argparse import ArgumentParser from typing import TYPE_CHECKING from .log import ERR from .Types import LoadTypes, Types if TYPE_CHECKING: + from argparse import ArgumentParser from typing import Any from .App import App diff --git a/src/python/jw/pkg/lib/Distro.py b/src/python/jw/pkg/lib/Distro.py index b27896ea..816423c8 100644 --- a/src/python/jw/pkg/lib/Distro.py +++ b/src/python/jw/pkg/lib/Distro.py @@ -9,11 +9,12 @@ from functools import cached_property from typing import TYPE_CHECKING from .log import ERR, INFO, WARNING, log +from .base import InputMode if TYPE_CHECKING: from typing import Iterable - from .base import InputMode, Result + from .base import Result from .ExecContext import ExecContext from .Package import Package from .PackageFilter import PackageFilter diff --git a/src/python/jw/pkg/lib/FileContext.py b/src/python/jw/pkg/lib/FileContext.py index 4c06a17c..c158a016 100644 --- a/src/python/jw/pkg/lib/FileContext.py +++ b/src/python/jw/pkg/lib/FileContext.py @@ -8,10 +8,11 @@ from typing import TYPE_CHECKING from .log import DEBUG, ERR, log from .Uri import Uri +from .ProcFilter import ProcPipeline if TYPE_CHECKING: from .base import Result, StatResult - from .ProcFilter import ProcFilter, ProcPipeline + from .ProcFilter import ProcFilter class FileContext(abc.ABC): diff --git a/src/python/jw/pkg/lib/PackageFilter.py b/src/python/jw/pkg/lib/PackageFilter.py index 5d7e0e7b..2643102f 100644 --- a/src/python/jw/pkg/lib/PackageFilter.py +++ b/src/python/jw/pkg/lib/PackageFilter.py @@ -1,7 +1,11 @@ +from __future__ import annotations import abc import re -from .Package import Package +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from .Package import Package class PackageFilter(abc.ABC): diff --git a/src/python/jw/pkg/lib/ProcFilterGpg.py b/src/python/jw/pkg/lib/ProcFilterGpg.py index f111d967..8d9da943 100644 --- a/src/python/jw/pkg/lib/ProcFilterGpg.py +++ b/src/python/jw/pkg/lib/ProcFilterGpg.py @@ -2,10 +2,10 @@ from __future__ import annotations from typing import TYPE_CHECKING -from .base import Result from .ProcFilter import ProcFilter if TYPE_CHECKING: + from .base import Result from .ExecContext import ExecContext class ProcFilterGpg(ProcFilter): diff --git a/src/python/jw/pkg/lib/TarIo.py b/src/python/jw/pkg/lib/TarIo.py index 4e476f3d..a9288732 100644 --- a/src/python/jw/pkg/lib/TarIo.py +++ b/src/python/jw/pkg/lib/TarIo.py @@ -6,10 +6,13 @@ import tarfile from tarfile import TarFile, TarInfo -from .base import StatResult from .CopyContext import CopyContext from .ExecContext import ExecContext from .log import DEBUG, ERR, log +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from .base import StatResult class TarIo(CopyContext): diff --git a/src/python/jw/pkg/lib/Types.py b/src/python/jw/pkg/lib/Types.py index e00b4e1e..d828cad5 100644 --- a/src/python/jw/pkg/lib/Types.py +++ b/src/python/jw/pkg/lib/Types.py @@ -1,14 +1,15 @@ +from __future__ import annotations import abc import os import re import sys -from collections.abc import Iterator from typing import TYPE_CHECKING, Generic, Iterable, TypeVar from .log import OFF, log, parse_log_level if TYPE_CHECKING: + from collections.abc import Iterator from typing import Any T = TypeVar('T') diff --git a/src/python/jw/pkg/lib/base.py b/src/python/jw/pkg/lib/base.py index c2c732bd..8e417da2 100644 --- a/src/python/jw/pkg/lib/base.py +++ b/src/python/jw/pkg/lib/base.py @@ -1,9 +1,10 @@ from __future__ import annotations -import os - from enum import Enum, auto -from typing import NamedTuple, TypeAlias +from typing import NamedTuple, TypeAlias, TYPE_CHECKING + +if TYPE_CHECKING: + import os class InputMode(Enum): Interactive = auto() diff --git a/src/python/jw/pkg/lib/ec/Curl.py b/src/python/jw/pkg/lib/ec/Curl.py index 08984ecc..7ec2a480 100644 --- a/src/python/jw/pkg/lib/ec/Curl.py +++ b/src/python/jw/pkg/lib/ec/Curl.py @@ -2,10 +2,10 @@ from __future__ import annotations from typing import TYPE_CHECKING -from ..base import Result from ..FileContext import FileContext as Base if TYPE_CHECKING: + from ..base import Result from ..ExecContext import ExecContext from ..Uri import Uri from .Local import Local diff --git a/src/python/jw/pkg/lib/ec/SSHClient.py b/src/python/jw/pkg/lib/ec/SSHClient.py index c04cbd08..d6752074 100644 --- a/src/python/jw/pkg/lib/ec/SSHClient.py +++ b/src/python/jw/pkg/lib/ec/SSHClient.py @@ -8,13 +8,12 @@ import sys from enum import Flag, auto from typing import TYPE_CHECKING -from ..base import Result from ..ExecContext import ExecContext from ..log import DEBUG, ERR, INFO, NOTICE, WARNING, log from ..Uri import Uri if TYPE_CHECKING: - from ..Uri import Uri + from ..base import Result class SSHClient(ExecContext): diff --git a/src/python/jw/pkg/lib/ec/ssh/Paramiko.py b/src/python/jw/pkg/lib/ec/ssh/Paramiko.py index 93c8ec38..0ae7e67f 100644 --- a/src/python/jw/pkg/lib/ec/ssh/Paramiko.py +++ b/src/python/jw/pkg/lib/ec/ssh/Paramiko.py @@ -3,6 +3,8 @@ from __future__ import annotations from typing import TYPE_CHECKING import paramiko # type: ignore[import-untyped] # error: Library stubs not installed for "paramiko" +import paramiko.agent # type: ignore[import-untyped] +import paramiko.SCPClient # type: ignore[import-untyped] from ...base import Result from ...log import ERR, log @@ -12,9 +14,6 @@ from .util import join_cmd if TYPE_CHECKING: from typing import Any - import paramiko.agent # type: ignore[import-untyped] - import paramiko.SCPClient # type: ignore[import-untyped] - class Paramiko(Base): def __init__(self, uri, *args, **kwargs) -> None: diff --git a/src/python/jw/pkg/lib/util.py b/src/python/jw/pkg/lib/util.py index ac57121d..fa8d5683 100644 --- a/src/python/jw/pkg/lib/util.py +++ b/src/python/jw/pkg/lib/util.py @@ -4,7 +4,6 @@ import json import os import sys -from argparse import Namespace from enum import Enum, auto from typing import TYPE_CHECKING, Iterable, TypeVar, cast @@ -13,6 +12,7 @@ from .log import DEBUG, ERR, log from .Uri import Uri if TYPE_CHECKING: + from argparse import Namespace from .ExecContext import ExecContext from .FileContext import FileContext from .ProcFilter import ProcFilter, ProcPipeline @@ -93,7 +93,7 @@ async def run_curl_into( raise TypeError( f'Expected {expected_type.__name__}, got {type(ret).__name__} from Curl' ) - return cast(T, ret) + return cast('T', ret) async def run_askpass( askpass_env: list[str],