diff --git a/src/python/jw/pkg/lib/ExecContext.py b/src/python/jw/pkg/lib/ExecContext.py index 1848588a..ec9f706c 100644 --- a/src/python/jw/pkg/lib/ExecContext.py +++ b/src/python/jw/pkg/lib/ExecContext.py @@ -11,7 +11,8 @@ class Result(NamedTuple): class ExecContext(abc.ABC): - def __init__(self, interactive: bool=True, verbose_default=False): + def __init__(self, uri: str, interactive: bool=True, verbose_default=False): + self.__uri = uri self.__interactive = interactive self.__verbose_default = verbose_default assert verbose_default is not None @@ -21,6 +22,10 @@ class ExecContext(abc.ABC): return verbose return self.__verbose_default + @property + def uri(self) -> str: + return self.__uri + @property def interactive(self) -> bool: return self.__interactive diff --git a/src/python/jw/pkg/lib/SSHClient.py b/src/python/jw/pkg/lib/SSHClient.py index fc215a4e..43514bf4 100644 --- a/src/python/jw/pkg/lib/SSHClient.py +++ b/src/python/jw/pkg/lib/SSHClient.py @@ -7,14 +7,16 @@ import os, abc, shlex, sys from .util import run_cmd from .log import * from .ExecContext import ExecContext, Result +from urllib.parse import urlparse class SSHClient(ExecContext): - def __init__(self, hostname: str) -> None: - super().__init__(interactive=False, verbose_default=False) - self.___ssh = None - self.__hostname = hostname - self.__password: str|None = None + def __init__(self, uri: str, *args, **kwargs) -> None: + super().__init__(uri=uri, *args, **kwargs) + parsed = urlparse(uri) + self.__hostname = parsed.hostname + self.__password: parsed.password + self.__username = parsed.username @abc.abstractmethod async def _run_cmd(self, cmd: list[str]) -> Result: @@ -101,8 +103,8 @@ class SSHClient(ExecContext): class SSHClientInternal(SSHClient): # export - def __init__(self, hostname: str) -> None: - super().__init__(hostname=hostname) + def __init__(self, *args, **kwargs) -> None: + super().__init__(*args, **kwargs) self.__timeout: float|None = None # Untested self.___ssh: Any|None = None @@ -136,10 +138,10 @@ class SSHClientInternal(SSHClient): # export class SSHClientCmd(SSHClient): # export - def __init__(self, hostname: str) -> None: + def __init__(self, *args, **kwargs) -> None: self.__askpass: str|None = None self.__askpass_orig: dict[str, str|None] = dict() - super().__init__(hostname=hostname) + super().__init__(*args, **kwargs) def __del__(self): for key, val in self.__askpass_orig.items(): diff --git a/src/python/jw/pkg/lib/ec/Local.py b/src/python/jw/pkg/lib/ec/Local.py index 8460247a..8ca5359a 100644 --- a/src/python/jw/pkg/lib/ec/Local.py +++ b/src/python/jw/pkg/lib/ec/Local.py @@ -11,6 +11,9 @@ from ..util import pretty_cmd class Local(Base): + def __init__(self, uri='local', *args, **kwargs) -> None: + super().__init__(uri, *args, **kwargs) + async def _run( self, args: list[str],