mirror of
ssh://git.janware.com/janware/proj/jw-pkg
synced 2026-04-24 17:23:36 +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.App import App as Base
|
||||||
from .lib.log import *
|
from .lib.log import *
|
||||||
from .lib.Distro import Distro
|
from .lib.Distro import Distro
|
||||||
from .lib.ExecContext import InputMode
|
from .lib.base import InputMode
|
||||||
|
|
||||||
# Meaning of pkg.requires.xxx variables
|
# Meaning of pkg.requires.xxx variables
|
||||||
# build: needs to be built and installed before this can be built
|
# 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 argparse import Namespace, ArgumentParser
|
||||||
|
|
||||||
from ...lib.log import *
|
from ...lib.log import *
|
||||||
from ...lib.ExecContext import InputMode
|
from ...lib.base import InputMode
|
||||||
from ..Cmd import Cmd
|
from ..Cmd import Cmd
|
||||||
from ..CmdProjects import CmdProjects
|
from ..CmdProjects import CmdProjects
|
||||||
from ...App import Scope
|
from ...App import Scope
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ...lib.ExecContext import Result
|
from ...lib.base import Result
|
||||||
|
|
||||||
class CmdCanonicalizeRemotes(Cmd): # export
|
class CmdCanonicalizeRemotes(Cmd): # export
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ class CmdListRepos(Cmd): # export
|
||||||
if ssh is not None:
|
if ssh is not None:
|
||||||
ssh.close()
|
ssh.close()
|
||||||
case 'https':
|
case 'https':
|
||||||
from jw.pkg.lib.ExecContext import InputMode
|
from jw.pkg.lib.base import InputMode
|
||||||
cmd_input = InputMode.NonInteractive
|
cmd_input = InputMode.NonInteractive
|
||||||
if re.match(r'https://github.com', args.base_url):
|
if re.match(r'https://github.com', args.base_url):
|
||||||
curl_args = [
|
curl_args = [
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ if TYPE_CHECKING:
|
||||||
|
|
||||||
import abc, importlib
|
import abc, importlib
|
||||||
|
|
||||||
from .ExecContext import ExecContext, Result
|
from .ExecContext import ExecContext
|
||||||
|
from .base import Result
|
||||||
from .Package import Package
|
from .Package import Package
|
||||||
from .log import *
|
from .log import *
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,34 +4,14 @@ from __future__ import annotations
|
||||||
|
|
||||||
import abc, re, sys
|
import abc, re, sys
|
||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from typing import NamedTuple, TypeAlias, TYPE_CHECKING
|
from typing import NamedTuple, TYPE_CHECKING
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Self, Type
|
from typing import Self, Type
|
||||||
from types import TracebackType
|
from types import TracebackType
|
||||||
|
|
||||||
from .log import *
|
from .log import *
|
||||||
|
from .base import Input, InputMode, Result
|
||||||
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
|
|
||||||
)
|
|
||||||
|
|
||||||
class ExecContext(abc.ABC):
|
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:
|
if TYPE_CHECKING:
|
||||||
from typing import Iterable
|
from typing import Iterable
|
||||||
from ...ExecContext import Result
|
from ...base import Result
|
||||||
from ...Package import Package
|
from ...Package import Package
|
||||||
|
|
||||||
class Distro(Base):
|
class Distro(Base):
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ from ...pm.dpkg import run_dpkg, run_dpkg_query, query_packages, list_files
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Iterable
|
from typing import Iterable
|
||||||
from ...ExecContext import Result
|
from ...base import Result
|
||||||
from ...Package import Package
|
from ...Package import Package
|
||||||
|
|
||||||
class Distro(Base):
|
class Distro(Base):
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ from ...pm.rpm import run_rpm, query_packages, list_files
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import Iterable
|
from typing import Iterable
|
||||||
from ...ExecContext import Result
|
from ...base import Result
|
||||||
from ...Package import Package
|
from ...Package import Package
|
||||||
|
|
||||||
class Distro(Base):
|
class Distro(Base):
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
import os, sys, subprocess, asyncio
|
import os, sys, subprocess, asyncio
|
||||||
|
|
||||||
from ..ExecContext import ExecContext as Base
|
from ..ExecContext import ExecContext as Base
|
||||||
from ..ExecContext import Result
|
from ..base import Result
|
||||||
|
|
||||||
from ..log import *
|
from ..log import *
|
||||||
from ..util import pretty_cmd
|
from ..util import pretty_cmd
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,8 @@ from enum import Flag, auto
|
||||||
|
|
||||||
from ..util import pretty_cmd
|
from ..util import pretty_cmd
|
||||||
from ..log import *
|
from ..log import *
|
||||||
from ..ExecContext import ExecContext, Result
|
from ..base import Result
|
||||||
|
from ..ExecContext import ExecContext
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
class SSHClient(ExecContext):
|
class SSHClient(ExecContext):
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
import os, sys, shlex, asyncio, asyncssh, shutil, signal
|
import os, sys, shlex, asyncio, asyncssh, shutil, signal
|
||||||
|
|
||||||
from ...log import *
|
from ...log import *
|
||||||
from ...ExecContext import Result
|
from ...base import Result
|
||||||
from ..SSHClient import SSHClient as Base
|
from ..SSHClient import SSHClient as Base
|
||||||
|
|
||||||
from .util import join_cmd
|
from .util import join_cmd
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ from ..SSHClient import SSHClient as Base
|
||||||
from .util import join_cmd
|
from .util import join_cmd
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ...ExecContext import Result
|
from ...base import Result
|
||||||
|
|
||||||
class Exec(Base):
|
class Exec(Base):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from typing import TYPE_CHECKING
|
||||||
import paramiko # type: ignore # error: Library stubs not installed for "paramiko"
|
import paramiko # type: ignore # error: Library stubs not installed for "paramiko"
|
||||||
|
|
||||||
from ...log import *
|
from ...log import *
|
||||||
from ...ExecContext import Result
|
from ...base import Result
|
||||||
from ..SSHClient import SSHClient as Base
|
from ..SSHClient import SSHClient as Base
|
||||||
|
|
||||||
from .util import join_cmd
|
from .util import join_cmd
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ from typing import Iterable, TYPE_CHECKING
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ..ExecContext import ExecContext
|
from ..ExecContext import ExecContext
|
||||||
|
|
||||||
from ..ExecContext import InputMode
|
from ..base import InputMode
|
||||||
from ..util import run_cmd, run_sudo
|
from ..util import run_cmd, run_sudo
|
||||||
from ..Package import Package, meta_tags
|
from ..Package import Package, meta_tags
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ if TYPE_CHECKING:
|
||||||
from ..ExecContext import ExecContext
|
from ..ExecContext import ExecContext
|
||||||
|
|
||||||
from ..util import run_cmd, run_sudo
|
from ..util import run_cmd, run_sudo
|
||||||
from ..ExecContext import InputMode
|
from ..base import InputMode
|
||||||
from ..Package import Package, meta_tags
|
from ..Package import Package, meta_tags
|
||||||
|
|
||||||
_meta_map: dict[str, str]|None = None
|
_meta_map: dict[str, str]|None = None
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ from urllib.parse import urlparse
|
||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
|
|
||||||
from .log import *
|
from .log import *
|
||||||
from .ExecContext import InputMode
|
from .base import InputMode
|
||||||
|
|
||||||
class AskpassKey(Enum):
|
class AskpassKey(Enum):
|
||||||
Username = auto()
|
Username = auto()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue