shlax/podctl/script.py
2020-02-12 03:19:21 +01:00

42 lines
1.4 KiB
Python

import textwrap
from .proc import Proc
class Script:
async def exec(self, *args, **kwargs):
"""Execute a command on the host."""
kwargs.setdefault('prefix', self.container.name)
proc = await Proc(*args, **kwargs)()
if kwargs.get('wait', True):
await proc.wait()
return proc
async def __call__(self, name, loop=None):
script = copy(self.scripts[name])
script.loop = loop or asyncio.events.get_event_loop()
results = []
async def clean():
for visitor in self.visitors:
if hasattr(visitor, 'clean_' + name):
result = getattr(visitor, 'clean_' + name)(script)
if result:
await result
for prefix in ('init_', 'pre_', '', 'post_', 'clean_'):
method = prefix + name
for visitor in self.visitors:
if not hasattr(visitor, method):
continue
rep = {k: v if not isinstance(v, object) else type(v).__name__ for k, v in visitor.__dict__.items()}
print(self.name + ' | ', type(visitor).__name__, method, rep)
result = getattr(visitor, method)(script)
if result:
try:
await result
except Exception as e:
await clean()
raise