mirror of
ssh://git.janware.com/janware/proj/jw-pkg
synced 2026-04-24 09:13:37 +02:00
lib.base: Add module
Add lib.base to provide basic definitions. For now, move the definiions of Result, Input and InputMode from ExecContext into lib.base. Having to import them from the ExecContect module is too heavy-handed for those simple types. Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
04fef1e67a
commit
888c0495ec
17 changed files with 50 additions and 38 deletions
|
|
@ -18,7 +18,7 @@ from enum import Enum, auto
|
|||
from .lib.App import App as Base
|
||||
from .lib.log import *
|
||||
from .lib.Distro import Distro
|
||||
from .lib.ExecContext import InputMode
|
||||
from .lib.base import InputMode
|
||||
|
||||
# Meaning of pkg.requires.xxx variables
|
||||
# build: needs to be built and installed before this can be built
|
||||
|
|
|
|||
|
|
@ -6,13 +6,13 @@ from typing import TYPE_CHECKING
|
|||
from argparse import Namespace, ArgumentParser
|
||||
|
||||
from ...lib.log import *
|
||||
from ...lib.ExecContext import InputMode
|
||||
from ...lib.base import InputMode
|
||||
from ..Cmd import Cmd
|
||||
from ..CmdProjects import CmdProjects
|
||||
from ...App import Scope
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ...lib.ExecContext import Result
|
||||
from ...lib.base import Result
|
||||
|
||||
class CmdCanonicalizeRemotes(Cmd): # export
|
||||
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ class CmdListRepos(Cmd): # export
|
|||
if ssh is not None:
|
||||
ssh.close()
|
||||
case 'https':
|
||||
from jw.pkg.lib.ExecContext import InputMode
|
||||
from jw.pkg.lib.base import InputMode
|
||||
cmd_input = InputMode.NonInteractive
|
||||
if re.match(r'https://github.com', args.base_url):
|
||||
curl_args = [
|
||||
|
|
|
|||
|
|
@ -9,7 +9,8 @@ if TYPE_CHECKING:
|
|||
|
||||
import abc, importlib
|
||||
|
||||
from .ExecContext import ExecContext, Result
|
||||
from .ExecContext import ExecContext
|
||||
from .base import Result
|
||||
from .Package import Package
|
||||
from .log import *
|
||||
|
||||
|
|
|
|||
|
|
@ -4,34 +4,14 @@ from __future__ import annotations
|
|||
|
||||
import abc, re, sys
|
||||
from enum import Enum, auto
|
||||
from typing import NamedTuple, TypeAlias, TYPE_CHECKING
|
||||
from typing import NamedTuple, TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Self, Type
|
||||
from types import TracebackType
|
||||
|
||||
from .log import *
|
||||
|
||||
class InputMode(Enum):
|
||||
Interactive = auto()
|
||||
NonInteractive = auto()
|
||||
OptInteractive = auto()
|
||||
Auto = auto()
|
||||
|
||||
Input: TypeAlias = InputMode | bytes | str
|
||||
|
||||
class Result(NamedTuple):
|
||||
|
||||
stdout: str|None
|
||||
stderr: str|None
|
||||
status: int|None
|
||||
|
||||
def decode(self, encoding='UTF-8', errors='replace') -> Result:
|
||||
return Result(
|
||||
self.stdout.decode(encoding, errors=errors) if self.stdout is not None else None,
|
||||
self.stderr.decode(encoding, errors=errors) if self.stderr is not None else None,
|
||||
self.status
|
||||
)
|
||||
from .base import Input, InputMode, Result
|
||||
|
||||
class ExecContext(abc.ABC):
|
||||
|
||||
|
|
|
|||
30
src/python/jw/pkg/lib/base.py
Normal file
30
src/python/jw/pkg/lib/base.py
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from enum import Enum, auto
|
||||
from typing import NamedTuple, TypeAlias, TYPE_CHECKING
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Type
|
||||
|
||||
class InputMode(Enum):
|
||||
Interactive = auto()
|
||||
NonInteractive = auto()
|
||||
OptInteractive = auto()
|
||||
Auto = auto()
|
||||
|
||||
Input: TypeAlias = InputMode | bytes | str
|
||||
|
||||
class Result(NamedTuple):
|
||||
|
||||
stdout: str|None
|
||||
stderr: str|None
|
||||
status: int|None
|
||||
|
||||
def decode(self, encoding='UTF-8', errors='replace') -> Result:
|
||||
return Result(
|
||||
self.stdout.decode(encoding, errors=errors) if self.stdout is not None else None,
|
||||
self.stderr.decode(encoding, errors=errors) if self.stderr is not None else None,
|
||||
self.status
|
||||
)
|
||||
|
|
@ -7,7 +7,7 @@ from ...Distro import Distro as Base
|
|||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Iterable
|
||||
from ...ExecContext import Result
|
||||
from ...base import Result
|
||||
from ...Package import Package
|
||||
|
||||
class Distro(Base):
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ from ...pm.dpkg import run_dpkg, run_dpkg_query, query_packages, list_files
|
|||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Iterable
|
||||
from ...ExecContext import Result
|
||||
from ...base import Result
|
||||
from ...Package import Package
|
||||
|
||||
class Distro(Base):
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from ...pm.rpm import run_rpm, query_packages, list_files
|
|||
|
||||
if TYPE_CHECKING:
|
||||
from typing import Iterable
|
||||
from ...ExecContext import Result
|
||||
from ...base import Result
|
||||
from ...Package import Package
|
||||
|
||||
class Distro(Base):
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
import os, sys, subprocess, asyncio
|
||||
|
||||
from ..ExecContext import ExecContext as Base
|
||||
from ..ExecContext import Result
|
||||
from ..base import Result
|
||||
|
||||
from ..log import *
|
||||
from ..util import pretty_cmd
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@ from enum import Flag, auto
|
|||
|
||||
from ..util import pretty_cmd
|
||||
from ..log import *
|
||||
from ..ExecContext import ExecContext, Result
|
||||
from ..base import Result
|
||||
from ..ExecContext import ExecContext
|
||||
from urllib.parse import urlparse
|
||||
|
||||
class SSHClient(ExecContext):
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
import os, sys, shlex, asyncio, asyncssh, shutil, signal
|
||||
|
||||
from ...log import *
|
||||
from ...ExecContext import Result
|
||||
from ...base import Result
|
||||
from ..SSHClient import SSHClient as Base
|
||||
|
||||
from .util import join_cmd
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from ..SSHClient import SSHClient as Base
|
|||
from .util import join_cmd
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ...ExecContext import Result
|
||||
from ...base import Result
|
||||
|
||||
class Exec(Base):
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ from typing import TYPE_CHECKING
|
|||
import paramiko # type: ignore # error: Library stubs not installed for "paramiko"
|
||||
|
||||
from ...log import *
|
||||
from ...ExecContext import Result
|
||||
from ...base import Result
|
||||
from ..SSHClient import SSHClient as Base
|
||||
|
||||
from .util import join_cmd
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ from typing import Iterable, TYPE_CHECKING
|
|||
if TYPE_CHECKING:
|
||||
from ..ExecContext import ExecContext
|
||||
|
||||
from ..ExecContext import InputMode
|
||||
from ..base import InputMode
|
||||
from ..util import run_cmd, run_sudo
|
||||
from ..Package import Package, meta_tags
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ if TYPE_CHECKING:
|
|||
from ..ExecContext import ExecContext
|
||||
|
||||
from ..util import run_cmd, run_sudo
|
||||
from ..ExecContext import InputMode
|
||||
from ..base import InputMode
|
||||
from ..Package import Package, meta_tags
|
||||
|
||||
_meta_map: dict[str, str]|None = None
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ from urllib.parse import urlparse
|
|||
from enum import Enum, auto
|
||||
|
||||
from .log import *
|
||||
from .ExecContext import InputMode
|
||||
from .base import InputMode
|
||||
|
||||
class AskpassKey(Enum):
|
||||
Username = auto()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue