mirror of
https://github.com/yavook/kiwi-scp.git
synced 2024-11-23 05:13:01 +00:00
61 lines
1.6 KiB
Python
61 lines
1.6 KiB
Python
# system
|
|
import logging
|
|
|
|
# local
|
|
from . import subcommands
|
|
from .config import LoadedConfig
|
|
from .parser import Parser
|
|
|
|
|
|
class Runner:
|
|
"""Singleton: Subcommands setup and run"""
|
|
|
|
class __Runner:
|
|
"""Singleton type"""
|
|
|
|
__parser = None
|
|
__commands = []
|
|
|
|
def __init__(self):
|
|
# setup all subcommands
|
|
for className in subcommands.__all__:
|
|
cmd = getattr(subcommands, className)
|
|
self.__commands.append(cmd())
|
|
|
|
def run(self, command=None):
|
|
"""run the desired subcommand"""
|
|
|
|
args = Parser().get_args()
|
|
|
|
if command is None:
|
|
command = args.command
|
|
|
|
for cmd in self.__commands:
|
|
if str(cmd) == command:
|
|
# command found
|
|
logging.debug(f"Running '{cmd}' with args: {args}")
|
|
|
|
try:
|
|
cmd.run(self, LoadedConfig.get(), args)
|
|
|
|
except KeyboardInterrupt:
|
|
print()
|
|
logging.warning(f"'{cmd}' aborted, inputs may have been discarded.")
|
|
|
|
return True
|
|
|
|
# command not found
|
|
logging.error(f"kiwi command '{command}' unknown")
|
|
return False
|
|
|
|
__instance = None
|
|
|
|
def __init__(self):
|
|
if Runner.__instance is None:
|
|
# create singleton
|
|
Runner.__instance = Runner.__Runner()
|
|
|
|
def __getattr__(self, item):
|
|
"""Inner singleton direct access"""
|
|
|
|
return getattr(self.__instance, item)
|