Files
vaiola/deprecated/InstanceHandler.py
2025-09-12 17:18:13 +07:00

88 lines
3.5 KiB
Python

from pythonapp.Instance.Instance import Instance
class InstanceHandler:
def __init__(self):
self._loaded_instances: dict[str, Instance] = {}
self._active_instance: Instance | None = None
pass
def _unknown_command(self, command: list[str]):
command_str = ''
for word in command: command_str += word + ' '
raise ValueError(f"Unknown INSTANCE subcommand: {command_str}")
def _create_handler(self, command: list[str]):
if len(command) < 4: raise ValueError("CREATE INSTANCE: missing arguments")
if command[1].upper() == "VENV":
Instance(path=command[3], env=command[1].lower(), python=command[2]).create()
def _activate_handler(self, command: list[str]):
if len(command) != 2: raise ValueError("ACTIVATE INSTANCE: missing arguments")
i = self._loaded_instances.get(command[1], None)
if i: self._active_instance = i
else: raise ValueError("ACTIVATE INSTANCE: instance not exists")
def _load_handler(self, command: list[str]):
if len(command) != 3: raise ValueError("LOAD INSTANCE: missing arguments")
name = command[1]
path = command[2]
i = Instance(path)
if not i.config.created: raise ValueError("ACTIVATE INSTANCE: instance not exists")
self._loaded_instances[name] = i
self._active_instance = i
print(f"instance {path} loaded and activated. identified by {name}")
def _show_handler(self, command: list[str]):
print("Environment type:", self._active_instance.config.env_type)
def _install_handler(self, command: list[str]):
if len(command) <= 2: raise ValueError("missing arguments")
verb = command[1].lower()
if verb == "package":
args = command[2:]
pkgs = []
repo = None
for arg in args:
if arg.lower().startswith("repo:"): repo = arg[5:]
else: pkgs.append(arg)
self._active_instance.install_packages(pkgs, repo)
if verb == "gitapp":
app_extensions_dir: str = None
app_models_dir: str = None
app_output_dir: str = None
app_input_dir: str = None
app_user_dir: str = None
req_file: str = 'requirements.txt'
url = command[2]
args = command[3:]
for arg in args:
if arg.lower().startswith("ext:"): app_extensions_dir = arg[4:]
elif arg.lower().startswith("mod:"): app_models_dir = arg[4:]
elif arg.lower().startswith("out:"): app_output_dir = arg[4:]
elif arg.lower().startswith("inp:"): app_input_dir = arg[4:]
elif arg.lower().startswith("usr:"): app_user_dir = arg[4:]
elif arg.lower().startswith("req:"): req_file = arg[4:]
self._active_instance.install_git_app(url, req_file, app_extensions_dir, app_models_dir, app_output_dir,
app_input_dir, app_user_dir)
def handle(self, command: list[str]):
if len(command) == 0: return
verb = command[0].upper()
if verb == "CREATE": self._create_handler(command)
elif verb == "LOAD": self._load_handler(command)
elif verb == "ACTIVATE": self._activate_handler(command)
elif verb == "SHOW": self._show_handler(command)
elif verb == "INSTALL": self._install_handler(command)
else:
self._unknown_command(command)
return
pass