App, lib, cmds: Fix mypy.explicit-override fallout
This commit adds @override decorators to approximately 300 methods across 76 files that inherit from base classes such as AbstractCmd, FileContext, ExecContext, Distro, SSHClient, and others. The decorator ensures the type checker can verify that overridden methods have compatible signatures and prevents accidental shadowing of inherited methods without intent. Files modified include command classes, library modules, distro implementations, and SSH client implementations. Assisted-by: unsloth/Qwen3.6-35B-A3B-GGUF:IQ4_NL with pi.dev v Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
30a00df5c7
commit
5fa008be5a
78 changed files with 263 additions and 81 deletions
|
|
@ -10,7 +10,7 @@ import sys
|
||||||
|
|
||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from functools import cache
|
from functools import cache
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from .lib.App import App as Base
|
from .lib.App import App as Base
|
||||||
from .lib.Distro import Distro
|
from .lib.Distro import Distro
|
||||||
|
|
@ -374,11 +374,13 @@ class App(Base):
|
||||||
default_pkg_filter = pkg_filter,
|
default_pkg_filter = pkg_filter,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def __aexit__(self, exc_type, exc, tb) -> None:
|
async def __aexit__(self, exc_type, exc, tb) -> None:
|
||||||
if self.__exec_context is not None:
|
if self.__exec_context is not None:
|
||||||
await self.__exec_context.close()
|
await self.__exec_context.close()
|
||||||
self.__exec_context = None
|
self.__exec_context = None
|
||||||
|
|
||||||
|
@override
|
||||||
def _add_arguments(self, parser) -> None:
|
def _add_arguments(self, parser) -> None:
|
||||||
super()._add_arguments(parser)
|
super()._add_arguments(parser)
|
||||||
parser.add_argument('-t', '--topdir', default = None, help = 'Project Path')
|
parser.add_argument('-t', '--topdir', default = None, help = 'Project Path')
|
||||||
|
|
@ -421,6 +423,7 @@ class App(Base):
|
||||||
help = 'Default filter for all distribution package-related operations',
|
help = 'Default filter for all distribution package-related operations',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: argparse.Namespace) -> None:
|
async def _run(self, args: argparse.Namespace) -> None:
|
||||||
self.___topdir = args.topdir
|
self.___topdir = args.topdir
|
||||||
self.___pretty_topdir = self.__format_topdir(self.___topdir, args.topdir_format)
|
self.___pretty_topdir = self.__format_topdir(self.___topdir, args.topdir_format)
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
|
from typing import override
|
||||||
from .App import App
|
from .App import App
|
||||||
from .lib.Cmd import Cmd as Base
|
from .lib.Cmd import Cmd as Base
|
||||||
|
|
||||||
class CmdBase(Base):
|
class CmdBase(Base):
|
||||||
|
|
||||||
|
@override # pyright: ignore[reportArgumentType]
|
||||||
@property
|
@property
|
||||||
def app(self) -> App:
|
def app(self) -> App:
|
||||||
ret = super().app
|
ret = super().app
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ..App import App as Parent
|
from ..App import App as Parent
|
||||||
from ..CmdBase import CmdBase as Base
|
from ..CmdBase import CmdBase as Base
|
||||||
|
|
@ -20,6 +20,7 @@ class Cmd(Base): # export
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(parent, name, help, aliases = aliases)
|
super().__init__(parent, name, help, aliases = aliases)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args):
|
async def _run(self, args):
|
||||||
# Missing subcommand
|
# Missing subcommand
|
||||||
self.print_help(1)
|
self.print_help(1)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -18,6 +18,7 @@ class CmdPkg(Cmd): # export
|
||||||
)
|
)
|
||||||
self.load_subcommands()
|
self.load_subcommands()
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args):
|
async def _run(self, args):
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
@ -25,5 +26,6 @@ class CmdPkg(Cmd): # export
|
||||||
self.parser.print_help()
|
self.parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -15,6 +15,7 @@ class CmdPlatform(Cmd): # export
|
||||||
)
|
)
|
||||||
self.load_subcommands()
|
self.load_subcommands()
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args):
|
async def _run(self, args):
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
@ -22,5 +23,6 @@ class CmdPlatform(Cmd): # export
|
||||||
self.parser.print_help()
|
self.parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -20,6 +20,7 @@ class CmdPosix(Cmd): # export
|
||||||
)
|
)
|
||||||
self.load_subcommands()
|
self.load_subcommands()
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args):
|
async def _run(self, args):
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
@ -27,5 +28,6 @@ class CmdPosix(Cmd): # export
|
||||||
self.parser.print_help()
|
self.parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -17,6 +17,7 @@ class CmdProjects(Cmd): # export
|
||||||
)
|
)
|
||||||
self.load_subcommands()
|
self.load_subcommands()
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args):
|
async def _run(self, args):
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
@ -24,5 +25,6 @@ class CmdProjects(Cmd): # export
|
||||||
self.parser.print_help()
|
self.parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -13,6 +13,7 @@ class CmdSecrets(Cmd): # export
|
||||||
super().__init__(parent, 'secrets', help = 'Manage package secrets')
|
super().__init__(parent, 'secrets', help = 'Manage package secrets')
|
||||||
self.load_subcommands()
|
self.load_subcommands()
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args):
|
async def _run(self, args):
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
@ -20,5 +21,6 @@ class CmdSecrets(Cmd): # export
|
||||||
self.parser.print_help()
|
self.parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -12,11 +12,13 @@ class CmdDelete(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'delete', help = 'Delete packages by name')
|
super().__init__(parent, 'delete', help = 'Delete packages by name')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'names', nargs = '*', help = 'Names of packages to be deleted'
|
'names', nargs = '*', help = 'Names of packages to be deleted'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
return await self.distro.delete(args.names)
|
return await self.distro.delete(args.names)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -12,6 +12,7 @@ class CmdDup(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'dup', help = 'Upgrade distribution')
|
super().__init__(parent, 'dup', help = 'Upgrade distribution')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -21,5 +22,6 @@ class CmdDup(Cmd): # export
|
||||||
help = "Only download packages from the repos, don't install them, yet",
|
help = "Only download packages from the repos, don't install them, yet",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
return await self.distro.dup(download_only = args.download_only)
|
return await self.distro.dup(download_only = args.download_only)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -16,6 +16,7 @@ class CmdInstall(Cmd): # export
|
||||||
help = "Install the distribution's notion of available packages",
|
help = "Install the distribution's notion of available packages",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('names', nargs = '*', help = 'Packages to be installed')
|
parser.add_argument('names', nargs = '*', help = 'Packages to be installed')
|
||||||
|
|
@ -32,6 +33,7 @@ class CmdInstall(Cmd): # export
|
||||||
help = "Don't expand macros in <names>",
|
help = "Don't expand macros in <names>",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
names = (
|
names = (
|
||||||
args.names if args.fixed_strings else self.distro.expand_macros(args.names)
|
args.names if args.fixed_strings else self.distro.expand_macros(args.names)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .NamedPkgsCmd import NamedPkgsCmd
|
from .NamedPkgsCmd import NamedPkgsCmd
|
||||||
|
|
||||||
|
|
@ -14,9 +14,11 @@ class CmdLs(NamedPkgsCmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'ls', help = 'List package contents')
|
super().__init__(parent, 'ls', help = 'List package contents')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
for name in args.names:
|
for name in args.names:
|
||||||
print('\n'.join(await self.distro.pkg_files(name)))
|
print('\n'.join(await self.distro.pkg_files(name)))
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .NamedPkgsCmd import NamedPkgsCmd, Parent
|
from .NamedPkgsCmd import NamedPkgsCmd, Parent
|
||||||
|
|
||||||
|
|
@ -12,9 +12,11 @@ class CmdMeta(NamedPkgsCmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'meta', help = 'List package metadata')
|
super().__init__(parent, 'meta', help = 'List package metadata')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
names = await self.distro.select(args.names)
|
names = await self.distro.select(args.names)
|
||||||
for name in names:
|
for name in names:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -16,8 +16,10 @@ class CmdRebootRequired(Cmd): # export
|
||||||
help = 'Check whether the machine needs rebooting'
|
help = 'Check whether the machine needs rebooting'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
await self.distro.reboot_required()
|
await self.distro.reboot_required()
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -16,8 +16,10 @@ class CmdRefresh(Cmd): # export
|
||||||
help = "Refresh the distribution's notion of available packages",
|
help = "Refresh the distribution's notion of available packages",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
return await self.distro.ref()
|
return await self.distro.ref()
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from ...lib.PackageFilter import PackageFilterString
|
from ...lib.PackageFilter import PackageFilterString
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
@ -13,10 +13,12 @@ class CmdSelect(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'select', help = 'Select packages by filter')
|
super().__init__(parent, 'select', help = 'Select packages by filter')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('filter', help = 'Package filter string')
|
parser.add_argument('filter', help = 'Package filter string')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
filter = PackageFilterString(args.filter) if args.filter else None
|
filter = PackageFilterString(args.filter) if args.filter else None
|
||||||
for p in await self.distro.select(filter = filter):
|
for p in await self.distro.select(filter = filter):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -12,6 +12,7 @@ class NamedPkgsCmd(Cmd): # export
|
||||||
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
||||||
super().__init__(parent, name, help)
|
super().__init__(parent, name, help)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('names', nargs = '*', help = 'Package names')
|
parser.add_argument('names', nargs = '*', help = 'Package names')
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from ...lib.Distro import Distro
|
from ...lib.Distro import Distro
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
@ -15,6 +15,7 @@ class CmdInfo(Cmd): # export
|
||||||
parent, 'info', help = 'Retrieve information about target platform'
|
parent, 'info', help = 'Retrieve information about target platform'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -23,5 +24,6 @@ class CmdInfo(Cmd): # export
|
||||||
help = f'Format string, expanding macros {", ".join(Distro.macros())}',
|
help = f'Format string, expanding macros {", ".join(Distro.macros())}',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
print(self.app.distro.expand_macros(args.format))
|
print(self.app.distro.expand_macros(args.format))
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ...CmdBase import CmdBase as Base
|
from ...CmdBase import CmdBase as Base
|
||||||
from ..CmdPosix import CmdPosix as Parent
|
from ..CmdPosix import CmdPosix as Parent
|
||||||
|
|
@ -13,6 +13,7 @@ class Cmd(Base): # export
|
||||||
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
||||||
super().__init__(parent, name, help)
|
super().__init__(parent, name, help)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from ...lib.util import copy
|
from ...lib.util import copy
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
@ -13,6 +13,7 @@ class CmdCopy(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'copy', help = 'Copy files')
|
super().__init__(parent, 'copy', help = 'Copy files')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('src', help = 'Source file URI')
|
parser.add_argument('src', help = 'Source file URI')
|
||||||
|
|
@ -33,6 +34,7 @@ class CmdCopy(Cmd): # export
|
||||||
help = "Don't expand macros in <src> and <dst>",
|
help = "Don't expand macros in <src> and <dst>",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
|
||||||
def __expand(url: str) -> str:
|
def __expand(url: str) -> str:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -13,6 +13,7 @@ class CmdTar(Cmd): # export
|
||||||
super().__init__(parent, 'tar', help = 'Handle tar archives')
|
super().__init__(parent, 'tar', help = 'Handle tar archives')
|
||||||
self.load_subcommands()
|
self.load_subcommands()
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args):
|
async def _run(self, args):
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
@ -20,5 +21,6 @@ class CmdTar(Cmd): # export
|
||||||
self.parser.print_help()
|
self.parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ....CmdBase import CmdBase as Base
|
from ....CmdBase import CmdBase as Base
|
||||||
from ....lib.FileContext import FileContext
|
from ....lib.FileContext import FileContext
|
||||||
|
|
@ -27,6 +27,7 @@ class Cmd(Base): # export
|
||||||
)
|
)
|
||||||
yield ret
|
yield ret
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from ....lib.log import DEBUG, log
|
from ....lib.log import DEBUG, log
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -12,10 +12,12 @@ class CmdExtract(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'x', help = 'Extract a tar archive')
|
super().__init__(parent, 'x', help = 'Extract a tar archive')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('dst', help = 'Destination root URI')
|
parser.add_argument('dst', help = 'Destination root URI')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
async with self.ctx(dst = args.dst) as ctx:
|
async with self.ctx(dst = args.dst) as ctx:
|
||||||
paths = await ctx.extract(ctx.dst.root)
|
paths = await ctx.extract(ctx.dst.root)
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from .lib.pkg_relations import VersionSyntax
|
from .lib.pkg_relations import VersionSyntax
|
||||||
|
|
@ -48,6 +48,7 @@ class BaseCmdPkgRelations(Cmd):
|
||||||
super().__init__(parent, 'pkg-' + relation, help = help)
|
super().__init__(parent, 'pkg-' + relation, help = help)
|
||||||
self.relation = relation
|
self.relation = relation
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -141,6 +142,7 @@ class BaseCmdPkgRelations(Cmd):
|
||||||
help = 'Put double quotes around each listed dependency',
|
help = 'Put double quotes around each listed dependency',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
return self.print_pkg_relations(self.relation, args)
|
return self.print_pkg_relations(self.relation, args)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ...CmdBase import CmdBase as Base
|
from ...CmdBase import CmdBase as Base
|
||||||
from ..CmdProjects import CmdProjects as Parent
|
from ..CmdProjects import CmdProjects as Parent
|
||||||
|
|
@ -13,6 +13,7 @@ class Cmd(Base): # export
|
||||||
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
||||||
super().__init__(parent, name, help)
|
super().__init__(parent, name, help)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
from ...lib.log import DEBUG, ERR, NOTICE, log
|
from ...lib.log import DEBUG, ERR, NOTICE, log
|
||||||
|
|
@ -22,6 +22,7 @@ class CmdBuild(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'build', help = 'janware software project build tool')
|
super().__init__(parent, 'build', help = 'janware software project build tool')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -90,6 +91,7 @@ class CmdBuild(Cmd): # export
|
||||||
help = 'Modules to be built',
|
help = 'Modules to be built',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
|
||||||
@lru_cache(maxsize = None)
|
@lru_cache(maxsize = None)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from ...lib.base import InputMode
|
from ...lib.base import InputMode
|
||||||
from ...lib.log import NOTICE, log
|
from ...lib.log import NOTICE, log
|
||||||
|
|
@ -20,6 +20,7 @@ class CmdCanonicalizeRemotes(Cmd): # export
|
||||||
parent, 'canonicalize-remotes', help = 'Streamline janware Git remotes'
|
parent, 'canonicalize-remotes', help = 'Streamline janware Git remotes'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -30,6 +31,7 @@ class CmdCanonicalizeRemotes(Cmd): # export
|
||||||
help = 'Only log what would be done',
|
help = 'Only log what would be done',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
|
||||||
async def git(cmd: list[str], ro = False, throw = True) -> Result:
|
async def git(cmd: list[str], ro = False, throw = True) -> Result:
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -12,10 +12,12 @@ class CmdCflags(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'cflags', help = 'cflags')
|
super().__init__(parent, 'cflags', help = 'cflags')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
deps = self.app.get_project_refs(
|
deps = self.app.get_project_refs(
|
||||||
args.module,
|
args.module,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
|
|
@ -16,6 +16,7 @@ class CmdCheck(Cmd): # export
|
||||||
)
|
)
|
||||||
self.load_subcommands()
|
self.load_subcommands()
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args):
|
async def _run(self, args):
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
@ -23,5 +24,6 @@ class CmdCheck(Cmd): # export
|
||||||
self.parser.print_help()
|
self.parser.print_help()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -11,9 +11,11 @@ class CmdCommands(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'commands', help = 'List available commands')
|
super().__init__(parent, 'commands', help = 'List available commands')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
from argparse import ArgumentParser, ArgumentTypeError, Namespace
|
from argparse import ArgumentParser, ArgumentTypeError, Namespace
|
||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
|
from typing import override
|
||||||
|
|
||||||
from ...lib.log import WARNING, log
|
from ...lib.log import WARNING, log
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
@ -93,6 +94,7 @@ class CmdCreateFile(Cmd): # export
|
||||||
parent, 'create-file', help = 'Generate a file from project metadata'
|
parent, 'create-file', help = 'Generate a file from project metadata'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -124,6 +126,7 @@ class CmdCreateFile(Cmd): # export
|
||||||
)
|
)
|
||||||
parser.add_argument('module', help = 'The module to generate the file for')
|
parser.add_argument('module', help = 'The module to generate the file for')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
method = getattr(self, 'render_' + args.format, None)
|
method = getattr(self, 'render_' + args.format, None)
|
||||||
if method is None: # Should be prevented by choices=[] but keeps linter happy
|
if method is None: # Should be prevented by choices=[] but keeps linter happy
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from .lib.templates import tmpl_render
|
from .lib.templates import tmpl_render
|
||||||
|
|
@ -32,6 +32,7 @@ class CmdCreatePkgConfig(Cmd): # export
|
||||||
string = re.sub(patt, replacement, string)
|
string = re.sub(patt, replacement, string)
|
||||||
return string
|
return string
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('-F', '--project-descr-file', default = None)
|
parser.add_argument('-F', '--project-descr-file', default = None)
|
||||||
|
|
@ -46,6 +47,7 @@ class CmdCreatePkgConfig(Cmd): # export
|
||||||
parser.add_argument('-R', '--requires-build', default = None)
|
parser.add_argument('-R', '--requires-build', default = None)
|
||||||
parser.add_argument('-V', '--variables', nargs = '*')
|
parser.add_argument('-V', '--variables', nargs = '*')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
project_conf_var_keys = [
|
project_conf_var_keys = [
|
||||||
'description',
|
'description',
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -12,6 +12,7 @@ class CmdExepath(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'exepath', help = 'exepath')
|
super().__init__(parent, 'exepath', help = 'exepath')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -23,6 +24,7 @@ class CmdExepath(Cmd): # export
|
||||||
)
|
)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
deps = self.app.get_project_refs(
|
deps = self.app.get_project_refs(
|
||||||
args.module,
|
args.module,
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import re
|
||||||
from ...lib.log import DEBUG, log
|
from ...lib.log import DEBUG, log
|
||||||
from ...lib.Uri import Uri
|
from ...lib.Uri import Uri
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -19,6 +19,7 @@ class CmdGetAuthInfo(Cmd): # export
|
||||||
help = 'Try to retrieve authentication information from the source tree',
|
help = 'Try to retrieve authentication information from the source tree',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -52,6 +53,7 @@ class CmdGetAuthInfo(Cmd): # export
|
||||||
help = 'Show remote base URL',
|
help = 'Show remote base URL',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
keys = ['username', 'password']
|
keys = ['username', 'password']
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -11,6 +11,7 @@ class CmdGetval(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'getval', help = 'Get value from project config')
|
super().__init__(parent, 'getval', help = 'Get value from project config')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -21,6 +22,7 @@ class CmdGetval(Cmd): # export
|
||||||
parser.add_argument('section', default = '', help = 'Config section')
|
parser.add_argument('section', default = '', help = 'Config section')
|
||||||
parser.add_argument('key', default = '', help = 'Config key')
|
parser.add_argument('key', default = '', help = 'Config key')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
project = args.project
|
project = args.project
|
||||||
if project is None:
|
if project is None:
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -15,10 +15,12 @@ class CmdHtdocsDir(Cmd): # export
|
||||||
help = 'Print source directory containing document root of a given module',
|
help = 'Print source directory containing document root of a given module',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
r = []
|
r = []
|
||||||
for m in args.module:
|
for m in args.module:
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -12,6 +12,7 @@ class CmdLdflags(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'ldflags', help = 'ldflags')
|
super().__init__(parent, 'ldflags', help = 'ldflags')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
|
|
@ -56,6 +57,7 @@ class CmdLdflags(Cmd): # export
|
||||||
return None
|
return None
|
||||||
return ' '.join(ret)
|
return ' '.join(ret)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
deps = self.app.get_project_refs(
|
deps = self.app.get_project_refs(
|
||||||
args.module,
|
args.module,
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -12,6 +12,7 @@ class CmdLdlibpath(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'ldlibpath', help = 'ldlibpath')
|
super().__init__(parent, 'ldlibpath', help = 'ldlibpath')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -23,6 +24,7 @@ class CmdLdlibpath(Cmd): # export
|
||||||
)
|
)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
deps = self.app.get_project_refs(
|
deps = self.app.get_project_refs(
|
||||||
args.module,
|
args.module,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -11,9 +11,11 @@ class CmdLibname(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'libname', help = 'libname')
|
super().__init__(parent, 'libname', help = 'libname')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
print(self.app.get_libname(args.module))
|
print(self.app.get_libname(args.module))
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ from ...lib.log import DEBUG, log
|
||||||
from ...lib.Uri import Uri
|
from ...lib.Uri import Uri
|
||||||
from ...lib.util import get_password, get_username, run_curl_into
|
from ...lib.util import get_password, get_username, run_curl_into
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -18,6 +18,7 @@ class CmdListRepos(Cmd): # export
|
||||||
parent, 'list-repos', help = 'Query a remote GIT server for repositories'
|
parent, 'list-repos', help = 'Query a remote GIT server for repositories'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -43,6 +44,7 @@ class CmdListRepos(Cmd): # export
|
||||||
'--from-owner', help = "List from-owner's projects", default = 'janware'
|
'--from-owner', help = "List from-owner's projects", default = 'janware'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
|
|
||||||
base_url = Uri(args.base_url)
|
base_url = Uri(args.base_url)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import re
|
||||||
|
|
||||||
from ...lib.log import DEBUG, log
|
from ...lib.log import DEBUG, log
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -13,6 +13,7 @@ class CmdModules(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'modules', help = 'Query existing janware packages')
|
super().__init__(parent, 'modules', help = 'Query existing janware packages')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -24,6 +25,7 @@ class CmdModules(Cmd): # export
|
||||||
'Key-value pairs, seperated by commas, to be searched for in project.conf',
|
'Key-value pairs, seperated by commas, to be searched for in project.conf',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
import pathlib
|
import pathlib
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -12,10 +12,12 @@ class CmdPath(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'path', help = 'path')
|
super().__init__(parent, 'path', help = 'path')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
deps = self.app.get_project_refs(
|
deps = self.app.get_project_refs(
|
||||||
args.module,
|
args.module,
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
from ...lib.log import WARNING, log
|
from ...lib.log import WARNING, log
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -14,10 +14,12 @@ class CmdProjDir(Cmd): # export
|
||||||
parent, 'proj-dir', help = 'Print directory of a given package'
|
parent, 'proj-dir', help = 'Print directory of a given package'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
out = []
|
out = []
|
||||||
for m in args.module:
|
for m in args.module:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
@ -15,6 +15,7 @@ class CmdPythonpath(Cmd): # export
|
||||||
parent, 'pythonpath', help = 'Generate PYTHONPATH for given modules'
|
parent, 'pythonpath', help = 'Generate PYTHONPATH for given modules'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -38,6 +39,7 @@ class CmdPythonpath(Cmd): # export
|
||||||
)
|
)
|
||||||
parser.add_argument('module', help = 'Modules', nargs = '*')
|
parser.add_argument('module', help = 'Modules', nargs = '*')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
deps = self.app.get_project_refs(
|
deps = self.app.get_project_refs(
|
||||||
args.module,
|
args.module,
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from __future__ import annotations
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
from ...lib.log import DEBUG, log
|
from ...lib.log import DEBUG, log
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -18,6 +18,7 @@ class CmdRequiredOsPkg(Cmd): # export
|
||||||
help = 'List distribution packages required for a package',
|
help = 'List distribution packages required for a package',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('flavours', help = 'Dependency flavours', default = 'build')
|
parser.add_argument('flavours', help = 'Dependency flavours', default = 'build')
|
||||||
|
|
@ -35,6 +36,7 @@ class CmdRequiredOsPkg(Cmd): # export
|
||||||
help = 'Put double quotes around each listed dependency',
|
help = 'Put double quotes around each listed dependency',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
modules = args.modules
|
modules = args.modules
|
||||||
flavours = set(args.flavours.split(','))
|
flavours = set(args.flavours.split(','))
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -13,10 +13,12 @@ class CmdSummary(Cmd): # export
|
||||||
parent, 'summary', help = 'Print summary description of given modules'
|
parent, 'summary', help = 'Print summary description of given modules'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
r = []
|
r = []
|
||||||
for m in args.module:
|
for m in args.module:
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -11,9 +11,11 @@ class CmdTest(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'test', help = 'Test')
|
super().__init__(parent, 'test', help = 'Test')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('blah', default = '', help = 'The blah argument')
|
parser.add_argument('blah', default = '', help = 'The blah argument')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
print('blah = ' + args.blah)
|
print('blah = ' + args.blah)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from argparse import ArgumentParser, Namespace
|
from argparse import ArgumentParser, Namespace
|
||||||
|
|
@ -15,10 +15,12 @@ class CmdTmplDir(Cmd): # export
|
||||||
help = 'Print directory containing templates of a given module',
|
help = 'Print directory containing templates of a given module',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
r = []
|
r = []
|
||||||
for m in args.module:
|
for m in args.module:
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ....CmdBase import CmdBase as Base
|
from ....CmdBase import CmdBase as Base
|
||||||
from ..CmdCheck import CmdCheck as Parent
|
from ..CmdCheck import CmdCheck as Parent
|
||||||
|
|
@ -13,6 +13,7 @@ class Cmd(Base): # export
|
||||||
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
||||||
super().__init__(parent, name, help)
|
super().__init__(parent, name, help)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from ....lib.log import NOTICE, log
|
from ....lib.log import NOTICE, log
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
@ -17,11 +17,13 @@ class CmdDep(Cmd): # export
|
||||||
help = 'Check for circular dependencies between given modules',
|
help = 'Check for circular dependencies between given modules',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('module', nargs = '*', help = 'Modules')
|
parser.add_argument('module', nargs = '*', help = 'Modules')
|
||||||
parser.add_argument('-f', '--flavour', nargs = '?', default = 'build')
|
parser.add_argument('-f', '--flavour', nargs = '?', default = 'build')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
cycle = self.app.find_circular_deps(args.module, args.flavour)
|
cycle = self.app.find_circular_deps(args.module, args.flavour)
|
||||||
if cycle:
|
if cycle:
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ...CmdBase import CmdBase as Base
|
from ...CmdBase import CmdBase as Base
|
||||||
from ..CmdSecrets import CmdSecrets as Parent
|
from ..CmdSecrets import CmdSecrets as Parent
|
||||||
|
|
@ -46,6 +46,7 @@ class Cmd(Base): # export
|
||||||
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
def __init__(self, parent: Parent, name: str, help: str) -> None:
|
||||||
super().__init__(parent, name, help)
|
super().__init__(parent, name, help)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument('packages', nargs = '*', help = 'Package names')
|
parser.add_argument('packages', nargs = '*', help = 'Package names')
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
from .lib.base import Attrs
|
from .lib.base import Attrs
|
||||||
|
|
@ -15,10 +15,12 @@ class CmdCompileTemplates(Cmd): # export
|
||||||
parent, 'compile-templates', help = 'Compile package template files'
|
parent, 'compile-templates', help = 'Compile package template files'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
attrs = Attrs(args.mode, args.owner, args.group, None)
|
attrs = Attrs(args.mode, args.owner, args.group, None)
|
||||||
await self._compile_template_files(args.packages, attrs)
|
await self._compile_template_files(args.packages, attrs)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -18,6 +18,7 @@ class CmdInstall(Cmd): # export
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
parser.add_argument('src', help = 'URI of secret source')
|
parser.add_argument('src', help = 'URI of secret source')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -28,6 +29,7 @@ class CmdInstall(Cmd): # export
|
||||||
)
|
)
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
packages = [] if args.packages == ['all'] else args.packages
|
packages = [] if args.packages == ['all'] else args.packages
|
||||||
await self.ctx.install(args.src, packages, args.only_missing)
|
await self.ctx.install(args.src, packages, args.only_missing)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -16,6 +16,7 @@ class CmdListCompilationOutput(Cmd): # export
|
||||||
help = 'List package compilation output files',
|
help = 'List package compilation output files',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -25,6 +26,7 @@ class CmdListCompilationOutput(Cmd): # export
|
||||||
help = 'Show all output targets, including non-existent files',
|
help = 'Show all output targets, including non-existent files',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
print(
|
print(
|
||||||
'\n'.join(
|
'\n'.join(
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -12,6 +12,7 @@ class CmdListSecrets(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'list-secrets', help = 'List package secret files')
|
super().__init__(parent, 'list-secrets', help = 'List package secret files')
|
||||||
|
|
||||||
|
@override
|
||||||
def add_arguments(self, parser: ArgumentParser) -> None:
|
def add_arguments(self, parser: ArgumentParser) -> None:
|
||||||
super().add_arguments(parser)
|
super().add_arguments(parser)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|
@ -21,6 +22,7 @@ class CmdListSecrets(Cmd): # export
|
||||||
help = 'Show all secret paths, including non-existent files',
|
help = 'Show all secret paths, including non-existent files',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
print(
|
print(
|
||||||
'\n'.join(
|
'\n'.join(
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -12,5 +12,6 @@ class CmdListTemplates(Cmd): # export
|
||||||
def __init__(self, parent: Parent) -> None:
|
def __init__(self, parent: Parent) -> None:
|
||||||
super().__init__(parent, 'list-templates', help = 'List package template files')
|
super().__init__(parent, 'list-templates', help = 'List package template files')
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
print('\n'.join(await self._list_template_files(args.packages)))
|
print('\n'.join(await self._list_template_files(args.packages)))
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .Cmd import Cmd, Parent
|
from .Cmd import Cmd, Parent
|
||||||
|
|
||||||
|
|
@ -16,5 +16,6 @@ class CmdRmCompilationOutput(Cmd): # export
|
||||||
help = 'Remove package compilation output files',
|
help = 'Remove package compilation output files',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, args: Namespace) -> None:
|
async def _run(self, args: Namespace) -> None:
|
||||||
await self._remove_compilation_targets(args.packages)
|
await self._remove_compilation_targets(args.packages)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser, Namespace
|
from argparse import ArgumentDefaultsHelpFormatter, ArgumentParser, Namespace
|
||||||
from typing import TYPE_CHECKING, Any
|
from typing import override, TYPE_CHECKING, Any
|
||||||
|
|
||||||
from .AsyncRunner import AsyncRunner
|
from .AsyncRunner import AsyncRunner
|
||||||
from .log import DEBUG, ERR, NOTICE, log, log_m, set_log_flags, set_log_level
|
from .log import DEBUG, ERR, NOTICE, log, log_m, set_log_flags, set_log_level
|
||||||
|
|
@ -192,6 +192,7 @@ class App: # export
|
||||||
|
|
||||||
class NoopCompleter(BaseCompleter):
|
class NoopCompleter(BaseCompleter):
|
||||||
|
|
||||||
|
@override
|
||||||
def __call__(self, *args, **kwargs):
|
def __call__(self, *args, **kwargs):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from __future__ import annotations
|
||||||
import abc
|
import abc
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .log import ERR
|
from .log import ERR
|
||||||
from .Types import LoadTypes, Types
|
from .Types import LoadTypes, Types
|
||||||
|
|
@ -173,14 +173,18 @@ class Cmd(AbstractCmd): # export
|
||||||
self.__description = description if description else help
|
self.__description = description if description else help
|
||||||
self.__aliases = aliases if aliases else []
|
self.__aliases = aliases if aliases else []
|
||||||
|
|
||||||
|
@override
|
||||||
def _name(self) -> str:
|
def _name(self) -> str:
|
||||||
return self.__name
|
return self.__name
|
||||||
|
|
||||||
|
@override
|
||||||
def _help(self) -> str:
|
def _help(self) -> str:
|
||||||
return self.__help
|
return self.__help
|
||||||
|
|
||||||
|
@override
|
||||||
def _description(self) -> str:
|
def _description(self) -> str:
|
||||||
return self.__description
|
return self.__description
|
||||||
|
|
||||||
|
@override
|
||||||
def _aliases(self) -> Iterable[str]:
|
def _aliases(self) -> Iterable[str]:
|
||||||
return self.__aliases
|
return self.__aliases
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import errno
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from decimal import ROUND_FLOOR, Decimal
|
from decimal import ROUND_FLOOR, Decimal
|
||||||
from typing import TYPE_CHECKING, NamedTuple
|
from typing import override, TYPE_CHECKING, NamedTuple
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Type
|
from typing import Type
|
||||||
|
|
@ -250,6 +250,7 @@ class ExecContext(Base):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@override
|
||||||
def create(cls, *args, **kwargs) -> ExecContext:
|
def create(cls, *args, **kwargs) -> ExecContext:
|
||||||
ret = super().create(*args, **kwargs)
|
ret = super().create(*args, **kwargs)
|
||||||
if not isinstance(ret, cls):
|
if not isinstance(ret, cls):
|
||||||
|
|
@ -451,6 +452,7 @@ class ExecContext(Base):
|
||||||
cc.check_exit_code(ret)
|
cc.check_exit_code(ret)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@override
|
||||||
async def _get(
|
async def _get(
|
||||||
self, path: str, wd: str | None, throw: bool, verbose: bool | None, title: str
|
self, path: str, wd: str | None, throw: bool, verbose: bool | None, title: str
|
||||||
) -> Result:
|
) -> Result:
|
||||||
|
|
@ -485,6 +487,7 @@ class ExecContext(Base):
|
||||||
cc.check_exit_code(ret)
|
cc.check_exit_code(ret)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@override
|
||||||
async def _put(
|
async def _put(
|
||||||
self,
|
self,
|
||||||
path: str,
|
path: str,
|
||||||
|
|
@ -565,22 +568,27 @@ class ExecContext(Base):
|
||||||
log(ERR, msg)
|
log(ERR, msg)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@override
|
||||||
async def _unlink(self, path: str) -> None:
|
async def _unlink(self, path: str) -> None:
|
||||||
cmd = ['rm', '-f', path]
|
cmd = ['rm', '-f', path]
|
||||||
await self.run(cmd, cmd_input = InputMode.NonInteractive)
|
await self.run(cmd, cmd_input = InputMode.NonInteractive)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _erase(self, path: str) -> None:
|
async def _erase(self, path: str) -> None:
|
||||||
cmd = ['rm', '-rf', path]
|
cmd = ['rm', '-rf', path]
|
||||||
await self.run(cmd, cmd_input = InputMode.NonInteractive)
|
await self.run(cmd, cmd_input = InputMode.NonInteractive)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _rename(self, src: str, dst: str) -> None:
|
async def _rename(self, src: str, dst: str) -> None:
|
||||||
cmd = ['mv', src, dst]
|
cmd = ['mv', src, dst]
|
||||||
await self.run(cmd, cmd_input = InputMode.NonInteractive)
|
await self.run(cmd, cmd_input = InputMode.NonInteractive)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _mkdir(self, path: str, mode: int) -> None:
|
async def _mkdir(self, path: str, mode: int) -> None:
|
||||||
cmd = ['mkdir', path, '-m', self.__mode_str(mode)]
|
cmd = ['mkdir', path, '-m', self.__mode_str(mode)]
|
||||||
await self.run(cmd, cmd_input = InputMode.NonInteractive)
|
await self.run(cmd, cmd_input = InputMode.NonInteractive)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _mktemp(self, tmpl: str, directory: bool) -> str:
|
async def _mktemp(self, tmpl: str, directory: bool) -> str:
|
||||||
cmd = ['mktemp']
|
cmd = ['mktemp']
|
||||||
if directory:
|
if directory:
|
||||||
|
|
@ -593,6 +601,7 @@ class ExecContext(Base):
|
||||||
)
|
)
|
||||||
return result.stdout_str.strip()
|
return result.stdout_str.strip()
|
||||||
|
|
||||||
|
@override
|
||||||
async def _stat(self, path: str, follow_symlinks: bool) -> StatResult:
|
async def _stat(self, path: str, follow_symlinks: bool) -> StatResult:
|
||||||
|
|
||||||
async def __stat(opts: list[str]) -> Result:
|
async def __stat(opts: list[str]) -> Result:
|
||||||
|
|
@ -662,6 +671,7 @@ class ExecContext(Base):
|
||||||
assert stdout is not None # Just there to pacify the linter
|
assert stdout is not None # Just there to pacify the linter
|
||||||
return _build_stat_result(stdout.rstrip('\n').split(_US), mode_base = 8)
|
return _build_stat_result(stdout.rstrip('\n').split(_US), mode_base = 8)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _chown(self, path: str, owner: str | None, group: str | None) -> None:
|
async def _chown(self, path: str, owner: str | None, group: str | None) -> None:
|
||||||
if owner is None and group is None:
|
if owner is None and group is None:
|
||||||
raise ValueError(f'Tried to chown("{path}") without owner and group')
|
raise ValueError(f'Tried to chown("{path}") without owner and group')
|
||||||
|
|
@ -674,6 +684,7 @@ class ExecContext(Base):
|
||||||
assert ownership is not None # Impossible, just there to calm the linter
|
assert ownership is not None # Impossible, just there to calm the linter
|
||||||
await self.run(['chown', ownership, path], cmd_input = InputMode.NonInteractive)
|
await self.run(['chown', ownership, path], cmd_input = InputMode.NonInteractive)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _chmod(self, path: str, mode: int) -> None:
|
async def _chmod(self, path: str, mode: int) -> None:
|
||||||
await self.run(
|
await self.run(
|
||||||
['chmod', self.__mode_str(mode), path],
|
['chmod', self.__mode_str(mode), path],
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ import abc
|
||||||
|
|
||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from .log import DEBUG, ERR, log
|
from .log import DEBUG, ERR, log
|
||||||
from .Uri import Uri
|
from .Uri import Uri
|
||||||
|
|
@ -50,6 +50,7 @@ class FileContext(abc.ABC):
|
||||||
async def __aexit__(self, exc_type, exc, tb):
|
async def __aexit__(self, exc_type, exc, tb):
|
||||||
await self.close()
|
await self.close()
|
||||||
|
|
||||||
|
@override
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return self.__uri.id
|
return self.__uri.id
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
from typing import Any
|
from typing import override, Any
|
||||||
|
|
||||||
meta_tags = [
|
meta_tags = [
|
||||||
'name',
|
'name',
|
||||||
|
|
@ -56,6 +56,7 @@ class Package:
|
||||||
self.url = url
|
self.url = url
|
||||||
self.maintainer = maintainer
|
self.maintainer = maintainer
|
||||||
|
|
||||||
|
@override
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
global meta_tags
|
global meta_tags
|
||||||
return '\n'.join([f'{key:<15}: {getattr(self, key)}' for key in meta_tags])
|
return '\n'.join([f'{key:<15}: {getattr(self, key)}' for key in meta_tags])
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
import abc
|
import abc
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .Package import Package
|
from .Package import Package
|
||||||
|
|
@ -25,6 +25,7 @@ class PackageFilterString(PackageFilter):
|
||||||
raise Exception(f'Unsupported filter string "{definition}"')
|
raise Exception(f'Unsupported filter string "{definition}"')
|
||||||
self.__definition = url_rx_str
|
self.__definition = url_rx_str
|
||||||
|
|
||||||
|
@override
|
||||||
def _match(self, package: Package) -> bool:
|
def _match(self, package: Package) -> bool:
|
||||||
url = package.url
|
url = package.url
|
||||||
if url is None:
|
if url is None:
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
import abc
|
import abc
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .base import Result
|
from .base import Result
|
||||||
|
|
||||||
|
|
@ -20,6 +20,7 @@ class ProcFilter(abc.ABC):
|
||||||
|
|
||||||
class ProcFilterIdentity(ProcFilter):
|
class ProcFilterIdentity(ProcFilter):
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, data: bytes | None) -> Result:
|
async def _run(self, data: bytes | None) -> Result:
|
||||||
return Result(data, None, 0)
|
return Result(data, None, 0)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from .ProcFilter import ProcFilter
|
from .ProcFilter import ProcFilter
|
||||||
|
|
||||||
|
|
@ -13,6 +13,7 @@ class ProcFilterGpg(ProcFilter):
|
||||||
def __init__(self, ec: ExecContext) -> None:
|
def __init__(self, ec: ExecContext) -> None:
|
||||||
self.__ec = ec
|
self.__ec = ec
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(self, data: bytes | None) -> Result:
|
async def _run(self, data: bytes | None) -> Result:
|
||||||
if data is None:
|
if data is None:
|
||||||
raise Exception('No data for GPG to decrypt')
|
raise Exception('No data for GPG to decrypt')
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import override
|
||||||
|
|
||||||
class Result:
|
class Result:
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
|
|
@ -113,6 +115,7 @@ class Result:
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@override
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return self.__summarize(verbose = False)
|
return self.__summarize(verbose = False)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ from tarfile import TarFile, TarInfo
|
||||||
from .CopyContext import CopyContext
|
from .CopyContext import CopyContext
|
||||||
from .ExecContext import ExecContext
|
from .ExecContext import ExecContext
|
||||||
from .log import DEBUG, ERR, log
|
from .log import DEBUG, ERR, log
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from .base import StatResult
|
from .base import StatResult
|
||||||
|
|
@ -89,6 +89,7 @@ class TarIo(CopyContext):
|
||||||
|
|
||||||
class TarIoTarFile(TarIo):
|
class TarIoTarFile(TarIo):
|
||||||
|
|
||||||
|
@override
|
||||||
async def _extract(self, blob: bytes, root: str | None = None) -> None:
|
async def _extract(self, blob: bytes, root: str | None = None) -> None:
|
||||||
tf = TarFile(fileobj = io.BytesIO(blob))
|
tf = TarFile(fileobj = io.BytesIO(blob))
|
||||||
for info in tf.getmembers():
|
for info in tf.getmembers():
|
||||||
|
|
@ -111,7 +112,16 @@ class TarIoTarFile(TarIo):
|
||||||
|
|
||||||
class TarIoTarExec(TarIo):
|
class TarIoTarExec(TarIo):
|
||||||
|
|
||||||
|
@override
|
||||||
|
async def _extract(self, blob: bytes, root: str | None = None) -> None:
|
||||||
|
cmd = ['tar']
|
||||||
|
if root is not None:
|
||||||
|
cmd += ['-C', root]
|
||||||
|
cmd += ['-x', '-f', '-']
|
||||||
|
await self.dst.run(cmd, cmd_input = blob)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@override
|
||||||
def dst(self) -> ExecContext:
|
def dst(self) -> ExecContext:
|
||||||
ret = super().dst
|
ret = super().dst
|
||||||
if not isinstance(ret, ExecContext):
|
if not isinstance(ret, ExecContext):
|
||||||
|
|
@ -120,10 +130,3 @@ class TarIoTarExec(TarIo):
|
||||||
'context, which only has a file context'
|
'context, which only has a file context'
|
||||||
)
|
)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
async def _extract(self, blob: bytes, root: str | None = None) -> None:
|
|
||||||
cmd = ['tar']
|
|
||||||
if root is not None:
|
|
||||||
cmd += ['-C', root]
|
|
||||||
cmd += ['-x', '-f', '-']
|
|
||||||
await self.dst.run(cmd, cmd_input = blob)
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import os
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from typing import TYPE_CHECKING, Generic, Iterable, TypeVar
|
from typing import override, TYPE_CHECKING, Generic, Iterable, TypeVar
|
||||||
|
|
||||||
from .log import ERR, OFF, log, parse_log_level
|
from .log import ERR, OFF, log, parse_log_level
|
||||||
|
|
||||||
|
|
@ -17,6 +17,7 @@ T = TypeVar('T')
|
||||||
|
|
||||||
class Types(abc.ABC, Iterable[type[T]], Generic[T]): # export
|
class Types(abc.ABC, Iterable[type[T]], Generic[T]): # export
|
||||||
|
|
||||||
|
@override
|
||||||
def __iter__(self) -> Iterator[type[T]]:
|
def __iter__(self) -> Iterator[type[T]]:
|
||||||
return iter(self._classes())
|
return iter(self._classes())
|
||||||
|
|
||||||
|
|
@ -64,6 +65,7 @@ class LoadTypes(Types[T]): # export
|
||||||
if self.__debug_level != OFF:
|
if self.__debug_level != OFF:
|
||||||
log(self.__debug_level, *args, **kwargs)
|
log(self.__debug_level, *args, **kwargs)
|
||||||
|
|
||||||
|
@override
|
||||||
def _stringify(self):
|
def _stringify(self):
|
||||||
tf = 'None' if self.__type_filter is None else (
|
tf = 'None' if self.__type_filter is None else (
|
||||||
', '.join([str(f) for f in self.__type_filter])
|
', '.join([str(f) for f in self.__type_filter])
|
||||||
|
|
@ -74,6 +76,7 @@ class LoadTypes(Types[T]): # export
|
||||||
'mod_names: ' + ', '.join(self.__mod_names),
|
'mod_names: ' + ', '.join(self.__mod_names),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@override
|
||||||
def _classes(self) -> Iterable[type[T]]:
|
def _classes(self) -> Iterable[type[T]]:
|
||||||
|
|
||||||
if self.__classes is None:
|
if self.__classes is None:
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ from __future__ import annotations
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
|
|
@ -39,9 +39,11 @@ class Uri:
|
||||||
self.__username: str | None = None
|
self.__username: str | None = None
|
||||||
self.__password: str | None = None
|
self.__password: str | None = None
|
||||||
|
|
||||||
|
@override
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
return self.full
|
return self.full
|
||||||
|
|
||||||
|
@override
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return self.safe_full_with_username
|
return self.safe_full_with_username
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ...Distro import Distro as Base
|
from ...Distro import Distro as Base
|
||||||
|
|
||||||
|
|
@ -26,27 +26,32 @@ class Distro(Base):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _ref(self) -> None:
|
async def _ref(self) -> None:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
'distro refresh is not yet implemented for Arch-like distributions'
|
'distro refresh is not yet implemented for Arch-like distributions'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _dup(self, download_only: bool) -> None:
|
async def _dup(self, download_only: bool) -> None:
|
||||||
args = ['-Su']
|
args = ['-Su']
|
||||||
if download_only:
|
if download_only:
|
||||||
args.append('-w')
|
args.append('-w')
|
||||||
await self.pacman(args)
|
await self.pacman(args)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _reboot_required(self, verbose: bool) -> bool:
|
async def _reboot_required(self, verbose: bool) -> bool:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
'distro reboot-required is not yet implemented for Arch-like distributions'
|
'distro reboot-required is not yet implemented for Arch-like distributions'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _select_by_name(self, names: Iterable[str]) -> Iterable[Package]:
|
async def _select_by_name(self, names: Iterable[str]) -> Iterable[Package]:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
'distro select is not yet implemented for Arch-like distributions'
|
'distro select is not yet implemented for Arch-like distributions'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _install(self, names: Iterable[str], only_update: bool) -> None:
|
async def _install(self, names: Iterable[str], only_update: bool) -> None:
|
||||||
if only_update:
|
if only_update:
|
||||||
raise NotImplementedError('--only-update is not yet implemented for pacman')
|
raise NotImplementedError('--only-update is not yet implemented for pacman')
|
||||||
|
|
@ -54,11 +59,13 @@ class Distro(Base):
|
||||||
args.extend(names)
|
args.extend(names)
|
||||||
await self.pacman(args)
|
await self.pacman(args)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _delete(self, names: Iterable[str]) -> None:
|
async def _delete(self, names: Iterable[str]) -> None:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
'distro delete not yet implemented for Arch-like distributions'
|
'distro delete not yet implemented for Arch-like distributions'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _pkg_files(self, name: str) -> Iterable[str]:
|
async def _pkg_files(self, name: str) -> Iterable[str]:
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
'distro pkg ls yet implemented for Arch-like distributions'
|
'distro pkg ls yet implemented for Arch-like distributions'
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ...Distro import Distro as Base
|
from ...Distro import Distro as Base
|
||||||
from ...log import NOTICE, log
|
from ...log import NOTICE, log
|
||||||
|
|
@ -38,9 +38,11 @@ class Distro(Base):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _ref(self) -> None:
|
async def _ref(self) -> None:
|
||||||
await self.apt_get(['update'])
|
await self.apt_get(['update'])
|
||||||
|
|
||||||
|
@override
|
||||||
async def _dup(self, download_only: bool) -> None:
|
async def _dup(self, download_only: bool) -> None:
|
||||||
args: list[str] = []
|
args: list[str] = []
|
||||||
if download_only:
|
if download_only:
|
||||||
|
|
@ -48,6 +50,7 @@ class Distro(Base):
|
||||||
args.append('upgrade')
|
args.append('upgrade')
|
||||||
await self.apt_get(args)
|
await self.apt_get(args)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _reboot_required(self, verbose: bool) -> bool:
|
async def _reboot_required(self, verbose: bool) -> bool:
|
||||||
reboot_required = '/run/reboot_required'
|
reboot_required = '/run/reboot_required'
|
||||||
if os.path.exists(reboot_required):
|
if os.path.exists(reboot_required):
|
||||||
|
|
@ -64,9 +67,11 @@ class Distro(Base):
|
||||||
log(NOTICE, f"No. {reboot_required} doesn't exist.")
|
log(NOTICE, f"No. {reboot_required} doesn't exist.")
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@override
|
||||||
async def _select_by_name(self, names: Iterable[str]) -> Iterable[Package]:
|
async def _select_by_name(self, names: Iterable[str]) -> Iterable[Package]:
|
||||||
return await query_packages(names, ec = self.ctx)
|
return await query_packages(names, ec = self.ctx)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _install(self, names: Iterable[str], only_update: bool) -> None:
|
async def _install(self, names: Iterable[str], only_update: bool) -> None:
|
||||||
args = ['install']
|
args = ['install']
|
||||||
if only_update:
|
if only_update:
|
||||||
|
|
@ -75,8 +80,10 @@ class Distro(Base):
|
||||||
args.extend(names)
|
args.extend(names)
|
||||||
await self.apt_get(args)
|
await self.apt_get(args)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _delete(self, names: Iterable[str]) -> None:
|
async def _delete(self, names: Iterable[str]) -> None:
|
||||||
await self.dpkg(['-P', *names], sudo = True)
|
await self.dpkg(['-P', *names], sudo = True)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _pkg_files(self, name: str) -> Iterable[str]:
|
async def _pkg_files(self, name: str) -> Iterable[str]:
|
||||||
return await list_files(name, ec = self.ctx)
|
return await list_files(name, ec = self.ctx)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ...Distro import Distro as Base
|
from ...Distro import Distro as Base
|
||||||
from ...pm.rpm import list_files, query_packages, run_rpm
|
from ...pm.rpm import list_files, query_packages, run_rpm
|
||||||
|
|
@ -43,9 +43,11 @@ class Distro(Base):
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _ref(self) -> None:
|
async def _ref(self) -> None:
|
||||||
await self.zypper(['refresh'])
|
await self.zypper(['refresh'])
|
||||||
|
|
||||||
|
@override
|
||||||
async def _dup(self, download_only: bool) -> None:
|
async def _dup(self, download_only: bool) -> None:
|
||||||
args = ['dup']
|
args = ['dup']
|
||||||
if download_only:
|
if download_only:
|
||||||
|
|
@ -53,6 +55,7 @@ class Distro(Base):
|
||||||
args += self.__update_extra_opts
|
args += self.__update_extra_opts
|
||||||
await self.zypper(args)
|
await self.zypper(args)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _reboot_required(self, verbose: bool) -> bool:
|
async def _reboot_required(self, verbose: bool) -> bool:
|
||||||
opts = []
|
opts = []
|
||||||
if not verbose:
|
if not verbose:
|
||||||
|
|
@ -64,22 +67,27 @@ class Distro(Base):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@override
|
||||||
async def _select_by_name(self, names: Iterable[str]) -> Iterable[Package]:
|
async def _select_by_name(self, names: Iterable[str]) -> Iterable[Package]:
|
||||||
return await query_packages(names, ec = self.ctx)
|
return await query_packages(names, ec = self.ctx)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _install(self, names: Iterable[str], only_update: bool) -> None:
|
async def _install(self, names: Iterable[str], only_update: bool) -> None:
|
||||||
cmd = ['update' if only_update else 'install']
|
cmd = ['update' if only_update else 'install']
|
||||||
cmd += self.__update_extra_opts
|
cmd += self.__update_extra_opts
|
||||||
cmd += names
|
cmd += names
|
||||||
await self.zypper(cmd)
|
await self.zypper(cmd)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _install_local_files(
|
async def _install_local_files(
|
||||||
self, paths: Iterable[str], only_update: bool
|
self, paths: Iterable[str], only_update: bool
|
||||||
) -> None:
|
) -> None:
|
||||||
await self.rpm(['-U', '--reinstall', *paths])
|
await self.rpm(['-U', '--reinstall', *paths])
|
||||||
|
|
||||||
|
@override
|
||||||
async def _delete(self, names: Iterable[str]) -> None:
|
async def _delete(self, names: Iterable[str]) -> None:
|
||||||
await self.rpm(['-e', *names], sudo = True)
|
await self.rpm(['-e', *names], sudo = True)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _pkg_files(self, name: str) -> Iterable[str]:
|
async def _pkg_files(self, name: str) -> Iterable[str]:
|
||||||
return await list_files(name, ec = self.ctx)
|
return await list_files(name, ec = self.ctx)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ..FileContext import FileContext as Base
|
from ..FileContext import FileContext as Base
|
||||||
|
|
||||||
|
|
@ -28,6 +28,7 @@ class Curl(Base):
|
||||||
|
|
||||||
self.__ec = ec if ec else __local()
|
self.__ec = ec if ec else __local()
|
||||||
|
|
||||||
|
@override
|
||||||
async def _get(
|
async def _get(
|
||||||
self, path: str, wd: str | None, throw: bool, verbose: bool | None, title: str
|
self, path: str, wd: str | None, throw: bool, verbose: bool | None, title: str
|
||||||
) -> Result:
|
) -> Result:
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import pwd
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from functools import cache
|
from functools import cache
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ..base import Result, StatResult
|
from ..base import Result, StatResult
|
||||||
from ..ExecContext import ExecContext as Base
|
from ..ExecContext import ExecContext as Base
|
||||||
|
|
@ -25,6 +25,7 @@ class Local(Base):
|
||||||
def _username(self) -> str:
|
def _username(self) -> str:
|
||||||
return pwd.getpwuid(os.getuid()).pw_name
|
return pwd.getpwuid(os.getuid()).pw_name
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(
|
async def _run(
|
||||||
self,
|
self,
|
||||||
cmd: list[str],
|
cmd: list[str],
|
||||||
|
|
@ -155,9 +156,11 @@ class Local(Base):
|
||||||
if cwd is not None:
|
if cwd is not None:
|
||||||
os.chdir(cwd)
|
os.chdir(cwd)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _unlink(self, path: str) -> None:
|
async def _unlink(self, path: str) -> None:
|
||||||
os.unlink(path)
|
os.unlink(path)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _erase(self, path: str) -> None:
|
async def _erase(self, path: str) -> None:
|
||||||
if os.path.isdir(path):
|
if os.path.isdir(path):
|
||||||
import shutil
|
import shutil
|
||||||
|
|
@ -165,26 +168,33 @@ class Local(Base):
|
||||||
return
|
return
|
||||||
os.unlink(path)
|
os.unlink(path)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _rename(self, src: str, dst: str) -> None:
|
async def _rename(self, src: str, dst: str) -> None:
|
||||||
os.rename(src, dst)
|
os.rename(src, dst)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _mkdir(self, path: str, mode: int) -> None:
|
async def _mkdir(self, path: str, mode: int) -> None:
|
||||||
os.mkdir(path, mode)
|
os.mkdir(path, mode)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _stat(self, path: str, follow_symlinks: bool) -> StatResult:
|
async def _stat(self, path: str, follow_symlinks: bool) -> StatResult:
|
||||||
return StatResult.from_os(os.stat(path, follow_symlinks = follow_symlinks))
|
return StatResult.from_os(os.stat(path, follow_symlinks = follow_symlinks))
|
||||||
|
|
||||||
|
@override
|
||||||
async def _file_exists(self, path: str) -> bool:
|
async def _file_exists(self, path: str) -> bool:
|
||||||
return os.path.exists(path)
|
return os.path.exists(path)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _chown(self, path: str, owner: str | None, group: str | None) -> None:
|
async def _chown(self, path: str, owner: str | None, group: str | None) -> None:
|
||||||
uid = pwd.getpwnam(owner).pw_uid if owner else -1
|
uid = pwd.getpwnam(owner).pw_uid if owner else -1
|
||||||
gid = grp.getgrnam(group).gr_gid if group else -1
|
gid = grp.getgrnam(group).gr_gid if group else -1
|
||||||
os.chown(path, uid, gid)
|
os.chown(path, uid, gid)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _chmod(self, path: str, mode: int) -> None:
|
async def _chmod(self, path: str, mode: int) -> None:
|
||||||
os.chmod(path, mode)
|
os.chmod(path, mode)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _is_dir(self, path: str, follow_symlinks: bool) -> bool:
|
async def _is_dir(self, path: str, follow_symlinks: bool) -> bool:
|
||||||
if (not follow_symlinks) and os.path.islink(path):
|
if (not follow_symlinks) and os.path.islink(path):
|
||||||
return False
|
return False
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import os
|
||||||
import pwd
|
import pwd
|
||||||
|
|
||||||
from enum import Flag, auto
|
from enum import Flag, auto
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING, override
|
||||||
|
|
||||||
from ..ExecContext import ExecContext
|
from ..ExecContext import ExecContext
|
||||||
from ..log import DEBUG, ERR, INFO, NOTICE, get_caller_pos, log, log_m
|
from ..log import DEBUG, ERR, INFO, NOTICE, get_caller_pos, log, log_m
|
||||||
|
|
@ -42,6 +42,7 @@ class SSHClient(ExecContext):
|
||||||
) -> Result:
|
) -> Result:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run(
|
async def _run(
|
||||||
self,
|
self,
|
||||||
cmd: list[str],
|
cmd: list[str],
|
||||||
|
|
@ -102,6 +103,7 @@ class SSHClient(ExecContext):
|
||||||
return self.uri.port
|
return self.uri.port
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@override
|
||||||
def username(self) -> str | None:
|
def username(self) -> str | None:
|
||||||
return self.uri.username
|
return self.uri.username
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
from typing import override
|
||||||
import asyncio
|
import asyncio
|
||||||
import os
|
import os
|
||||||
import shlex
|
import shlex
|
||||||
|
|
@ -42,10 +43,12 @@ class AsyncSSH(Base):
|
||||||
self.__connect_timeout = connect_timeout
|
self.__connect_timeout = connect_timeout
|
||||||
self.__conn: asyncssh.SSHClientConnection | None = None
|
self.__conn: asyncssh.SSHClientConnection | None = None
|
||||||
|
|
||||||
|
@override
|
||||||
async def _open(self) -> None:
|
async def _open(self) -> None:
|
||||||
await super()._open()
|
await super()._open()
|
||||||
await self._conn
|
await self._conn
|
||||||
|
|
||||||
|
@override
|
||||||
async def _close(self) -> None:
|
async def _close(self) -> None:
|
||||||
if self.__conn is not None:
|
if self.__conn is not None:
|
||||||
try:
|
try:
|
||||||
|
|
@ -355,6 +358,7 @@ class AsyncSSH(Base):
|
||||||
stdout = b''.join(stdout_parts) if stdout_parts else None
|
stdout = b''.join(stdout_parts) if stdout_parts else None
|
||||||
return Result(stdout, None, exit_code, cmd = cmd)
|
return Result(stdout, None, exit_code, cmd = cmd)
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run_ssh(
|
async def _run_ssh(
|
||||||
self,
|
self,
|
||||||
cmd: list[str],
|
cmd: list[str],
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ from __future__ import annotations
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
from ...base import InputMode
|
from ...base import InputMode
|
||||||
from ...util import run_cmd
|
from ...util import run_cmd
|
||||||
|
|
@ -48,6 +48,7 @@ class Exec(Base):
|
||||||
self.__askpass_orig[key] = os.getenv(key)
|
self.__askpass_orig[key] = os.getenv(key)
|
||||||
os.environ[key] = val
|
os.environ[key] = val
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run_ssh(
|
async def _run_ssh(
|
||||||
self,
|
self,
|
||||||
cmd: list[str],
|
cmd: list[str],
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import override, TYPE_CHECKING
|
||||||
|
|
||||||
# Tolerate missing paramiko imports. jw-pkg is designed to work with what it
|
# Tolerate missing paramiko imports. jw-pkg is designed to work with what it
|
||||||
# finds.
|
# finds.
|
||||||
|
|
@ -52,15 +52,18 @@ class Paramiko(Base):
|
||||||
def __scp(self) -> Any:
|
def __scp(self) -> Any:
|
||||||
return paramiko.SCPClient(self.__client.get_transport())
|
return paramiko.SCPClient(self.__client.get_transport())
|
||||||
|
|
||||||
|
@override
|
||||||
async def _open(self) -> None:
|
async def _open(self) -> None:
|
||||||
await super()._open()
|
await super()._open()
|
||||||
self.__client
|
self.__client
|
||||||
|
|
||||||
|
@override
|
||||||
async def _close(self) -> None:
|
async def _close(self) -> None:
|
||||||
if self.___client is not None:
|
if self.___client is not None:
|
||||||
self.___client.close()
|
self.___client.close()
|
||||||
self.___client = None
|
self.___client = None
|
||||||
|
|
||||||
|
@override
|
||||||
async def _run_ssh(
|
async def _run_ssh(
|
||||||
self,
|
self,
|
||||||
cmd: list[str],
|
cmd: list[str],
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue