1
0
Fork 0
mirror of https://github.com/yavook/kiwi-scp.git synced 2025-12-07 09:03:06 +00:00
kiwi-scp/src/kiwi/subcommands/_utils.py

85 lines
2.1 KiB
Python
Raw Normal View History

2020-08-10 12:50:47 +00:00
import os
import subprocess
from ..core import Parser
from ..config import LoadedConfig
2020-08-10 12:50:47 +00:00
def is_executable(filename):
if filename is None:
return False
return os.path.isfile(filename) and os.access(filename, os.X_OK)
def find_exe_file(exe_name):
for path in os.environ['PATH'].split(os.pathsep):
exe_file = os.path.join(path, exe_name)
if is_executable(exe_file):
return exe_file
return None
def get_exe_key(exe_name):
return f'executables:{exe_name}'
class SubCommand:
__name = None
__parser = None
def __init__(self, name, **kwargs):
self.__name = name
self.__parser = Parser().get_subparsers().add_parser(name, **kwargs)
def __str__(self):
return self.__name
def get_parser(self):
return self.__parser
def run(self):
pass
class DockerProgram:
class __DockerProgram:
__cmd = []
def __init__(self, exe_name):
config = LoadedConfig.get()
self.__cmd = [config[get_exe_key(exe_name)]]
if DockerProgram.__requires_root:
self.__cmd = [config[get_exe_key("sudo")], *self.__cmd]
def run(self, args, **kwargs):
cmd = [*self.__cmd, *args]
print(cmd)
return subprocess.run(cmd, **kwargs)
__exe_name = None
__instances = {}
__requires_root = None
def __init__(self, exe_name):
if DockerProgram.__requires_root is None:
try:
config = LoadedConfig.get()
subprocess.run(
2020-08-10 12:50:47 +00:00
[config[get_exe_key('docker')], 'ps'],
check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL
)
DockerProgram.__requires_root = False
except subprocess.CalledProcessError:
DockerProgram.__requires_root = True
self.__exe_name = exe_name
if exe_name not in DockerProgram.__instances:
DockerProgram.__instances[exe_name] = DockerProgram.__DockerProgram(exe_name)
def __getattr__(self, item):
return getattr(self.__instances[self.__exe_name], item)