ominfra 0.0.0.dev160__tar.gz → 0.0.0.dev162__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {ominfra-0.0.0.dev160/ominfra.egg-info → ominfra-0.0.0.dev162}/PKG-INFO +3 -3
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/git.py +2 -2
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/inject.py +2 -2
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/tmp.py +9 -9
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/venvs.py +2 -2
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/targets/connection.py +1 -1
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/scripts/manage.py +224 -240
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/scripts/supervisor.py +16 -29
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162/ominfra.egg-info}/PKG-INFO +3 -3
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra.egg-info/SOURCES.txt +0 -1
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra.egg-info/requires.txt +2 -2
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/pyproject.toml +3 -3
- ominfra-0.0.0.dev160/ominfra/manage/deploy/atomics.py +0 -207
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/LICENSE +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/MANIFEST.in +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/README.rst +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/.manifests.json +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/__about__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/__main__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/auth.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/cli.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/dataclasses.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/journald2aws/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/journald2aws/__main__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/journald2aws/cursor.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/journald2aws/driver.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/journald2aws/main.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/journald2aws/poster.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/logs.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/aws/metadata.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/gcp/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/clouds/gcp/auth.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/cmds.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/configs.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/journald/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/journald/fields.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/journald/genmessages.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/journald/messages.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/journald/tailer.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/__main__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/bootstrap.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/bootstrap_.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/commands/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/commands/base.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/commands/inject.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/commands/local.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/commands/marshal.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/commands/ping.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/commands/subprocess.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/commands/types.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/config.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/apps.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/commands.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/config.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/interp.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/paths.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/specs.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/deploy/types.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/inject.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/main.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/marshal.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/remote/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/remote/_main.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/remote/channel.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/remote/config.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/remote/connection.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/remote/execution.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/remote/inject.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/remote/payload.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/remote/spawning.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/system/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/system/commands.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/system/config.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/system/inject.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/system/packages.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/system/platforms.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/targets/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/targets/inject.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/manage/targets/targets.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/pyremote.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/scripts/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/scripts/journald2aws.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/ssh.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/LICENSE.txt +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/__main__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/configs.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/dispatchers.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/dispatchersimpl.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/events.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/exceptions.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/groups.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/groupsimpl.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/http.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/inject.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/io.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/main.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/pipes.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/privileges.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/process.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/processimpl.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/setup.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/setupimpl.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/signals.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/spawning.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/spawningimpl.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/states.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/supervisor.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/types.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/utils/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/utils/collections.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/utils/diag.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/utils/fds.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/utils/fs.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/utils/os.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/utils/ostypes.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/utils/signals.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/utils/strings.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/supervisor/utils/users.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/tailscale/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/tailscale/api.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/tailscale/cli.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/threadworkers.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/tools/__init__.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra/tools/listresources.py +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra.egg-info/dependency_links.txt +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra.egg-info/entry_points.txt +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/ominfra.egg-info/top_level.txt +0 -0
- {ominfra-0.0.0.dev160 → ominfra-0.0.0.dev162}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: ominfra
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev162
|
4
4
|
Summary: ominfra
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -12,8 +12,8 @@ Classifier: Operating System :: OS Independent
|
|
12
12
|
Classifier: Operating System :: POSIX
|
13
13
|
Requires-Python: >=3.12
|
14
14
|
License-File: LICENSE
|
15
|
-
Requires-Dist: omdev==0.0.0.
|
16
|
-
Requires-Dist: omlish==0.0.0.
|
15
|
+
Requires-Dist: omdev==0.0.0.dev162
|
16
|
+
Requires-Dist: omlish==0.0.0.dev162
|
17
17
|
Provides-Extra: all
|
18
18
|
Requires-Dist: paramiko~=3.5; extra == "all"
|
19
19
|
Requires-Dist: asyncssh~=2.18; extra == "all"
|
@@ -15,8 +15,8 @@ import typing as ta
|
|
15
15
|
from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
|
16
16
|
from omlish.lite.cached import async_cached_nullary
|
17
17
|
from omlish.lite.check import check
|
18
|
+
from omlish.os.atomics import AtomicPathSwapping
|
18
19
|
|
19
|
-
from .atomics import DeployAtomicPathSwapping
|
20
20
|
from .paths import SingleDirDeployPathOwner
|
21
21
|
from .specs import DeployGitCheckout
|
22
22
|
from .specs import DeployGitRepo
|
@@ -32,7 +32,7 @@ class DeployGitManager(SingleDirDeployPathOwner):
|
|
32
32
|
self,
|
33
33
|
*,
|
34
34
|
deploy_home: ta.Optional[DeployHome] = None,
|
35
|
-
atomics:
|
35
|
+
atomics: AtomicPathSwapping,
|
36
36
|
) -> None:
|
37
37
|
super().__init__(
|
38
38
|
owned_dir='git',
|
@@ -5,10 +5,10 @@ import typing as ta
|
|
5
5
|
from omlish.lite.inject import InjectorBindingOrBindings
|
6
6
|
from omlish.lite.inject import InjectorBindings
|
7
7
|
from omlish.lite.inject import inj
|
8
|
+
from omlish.os.atomics import AtomicPathSwapping
|
8
9
|
|
9
10
|
from ..commands.inject import bind_command
|
10
11
|
from .apps import DeployAppManager
|
11
|
-
from .atomics import DeployAtomicPathSwapping
|
12
12
|
from .commands import DeployCommand
|
13
13
|
from .commands import DeployCommandExecutor
|
14
14
|
from .config import DeployConfig
|
@@ -34,7 +34,7 @@ def bind_deploy(
|
|
34
34
|
inj.bind(DeployGitManager, singleton=True),
|
35
35
|
|
36
36
|
inj.bind(DeployTmpManager, singleton=True),
|
37
|
-
inj.bind(
|
37
|
+
inj.bind(AtomicPathSwapping, to_key=DeployTmpManager),
|
38
38
|
|
39
39
|
inj.bind(DeployVenvManager, singleton=True),
|
40
40
|
|
@@ -3,18 +3,18 @@ import typing as ta
|
|
3
3
|
|
4
4
|
from omlish.lite.cached import cached_nullary
|
5
5
|
from omlish.lite.check import check
|
6
|
+
from omlish.os.atomics import AtomicPathSwap
|
7
|
+
from omlish.os.atomics import AtomicPathSwapKind
|
8
|
+
from omlish.os.atomics import AtomicPathSwapping
|
9
|
+
from omlish.os.atomics import TempDirAtomicPathSwapping
|
6
10
|
|
7
|
-
from .atomics import DeployAtomicPathSwap
|
8
|
-
from .atomics import DeployAtomicPathSwapKind
|
9
|
-
from .atomics import DeployAtomicPathSwapping
|
10
|
-
from .atomics import TempDirDeployAtomicPathSwapping
|
11
11
|
from .paths import SingleDirDeployPathOwner
|
12
12
|
from .types import DeployHome
|
13
13
|
|
14
14
|
|
15
15
|
class DeployTmpManager(
|
16
16
|
SingleDirDeployPathOwner,
|
17
|
-
|
17
|
+
AtomicPathSwapping,
|
18
18
|
):
|
19
19
|
def __init__(
|
20
20
|
self,
|
@@ -27,18 +27,18 @@ class DeployTmpManager(
|
|
27
27
|
)
|
28
28
|
|
29
29
|
@cached_nullary
|
30
|
-
def _swapping(self) ->
|
31
|
-
return
|
30
|
+
def _swapping(self) -> AtomicPathSwapping:
|
31
|
+
return TempDirAtomicPathSwapping(
|
32
32
|
temp_dir=self._make_dir(),
|
33
33
|
root_dir=check.non_empty_str(self._deploy_home),
|
34
34
|
)
|
35
35
|
|
36
36
|
def begin_atomic_path_swap(
|
37
37
|
self,
|
38
|
-
kind:
|
38
|
+
kind: AtomicPathSwapKind,
|
39
39
|
dst_path: str,
|
40
40
|
**kwargs: ta.Any,
|
41
|
-
) ->
|
41
|
+
) -> AtomicPathSwap:
|
42
42
|
return self._swapping().begin_atomic_path_swap(
|
43
43
|
kind,
|
44
44
|
dst_path,
|
@@ -10,8 +10,8 @@ import typing as ta
|
|
10
10
|
from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
|
11
11
|
from omlish.lite.cached import cached_nullary
|
12
12
|
from omlish.lite.check import check
|
13
|
+
from omlish.os.atomics import AtomicPathSwapping
|
13
14
|
|
14
|
-
from .atomics import DeployAtomicPathSwapping
|
15
15
|
from .paths import DeployPath
|
16
16
|
from .paths import DeployPathOwner
|
17
17
|
from .types import DeployAppTag
|
@@ -23,7 +23,7 @@ class DeployVenvManager(DeployPathOwner):
|
|
23
23
|
self,
|
24
24
|
*,
|
25
25
|
deploy_home: ta.Optional[DeployHome] = None,
|
26
|
-
atomics:
|
26
|
+
atomics: AtomicPathSwapping,
|
27
27
|
) -> None:
|
28
28
|
super().__init__()
|
29
29
|
|
@@ -105,7 +105,7 @@ class DockerManageTargetConnector(ManageTargetConnector):
|
|
105
105
|
if dmt.image is not None:
|
106
106
|
sh_parts.extend(['run', '-i', dmt.image])
|
107
107
|
elif dmt.container_id is not None:
|
108
|
-
sh_parts.extend(['exec', dmt.container_id])
|
108
|
+
sh_parts.extend(['exec', '-i', dmt.container_id])
|
109
109
|
else:
|
110
110
|
raise ValueError(dmt)
|
111
111
|
|