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