from dataclasses import dataclass from pathlib import Path from modules.shared.ConfigDataClass import Config class InstanceFileNaming: config_dir = '.vaiola' main_config = 'instance.json' requirements_dir = 'requirements.d' manual_requirements = 'requirements.txt' pinned_packages = 'pinned.txt' excluded_packages = 'excluded.txt' env_dir = 'env' app_dir = 'app' @dataclass class InstanceConfig(Config): instance_type: str = 'basic' config_dir_rel_path: Path = Path(InstanceFileNaming.config_dir) env_path: Path = Path(InstanceFileNaming.env_dir) env_type: str = None requirements_dir: Path = Path(InstanceFileNaming.config_dir) / InstanceFileNaming.requirements_dir manual_requirements_path: Path = Path(InstanceFileNaming.config_dir) / InstanceFileNaming.manual_requirements pinned_packages_path: Path = Path(InstanceFileNaming.config_dir) / InstanceFileNaming.pinned_packages excluded_packages_path: Path = Path(InstanceFileNaming.config_dir) / InstanceFileNaming.excluded_packages created: bool = False app: Path = Path(InstanceFileNaming.app_dir) app_installed: bool = None app_extensions_dir: Path = None app_models_dir: Path = None app_output_dir: Path = None app_input_dir: Path = None app_user_dir: Path = None class Instance: def __init__(self): self.path: Path | None = None self.config: InstanceConfig | None = None def insert_component_reqs(self, name: str, req_file: str | Path): try: with open('req_file', 'r') as file: lines = [line.strip() for line in file] req = [] opt = [] req_bool = True for line in lines: if line.startswith("#"): req_bool = False if req_bool: req.append(line) else: opt.append(line) with open(self.path / self.config.requirements_dir / (name + '.req'), 'w') as file: for line in req: file.write(line + '\n') with open(self.path / self.config.requirements_dir / (name + '.opt'), 'w') as file: for line in opt: file.write(line + '\n') except FileNotFoundError: raise RuntimeError(f"Cannot update requirements for {name}, file {req_file} not exists") raise NotImplemented def install_git_app(self, url: str, requirements_file_in_app_dir = 'requirements.txt', extensions_dir: str = None, models_dir: str = None, output_dir: str = None, input_dir: str = None, user_dir: str = None, ): raise NotImplemented def install_reqs(self, name, req_file: Path): raise NotImplemented def create(self): raise NotImplemented def install_packages(self, pkgs: list, repo, extra, pin=False): raise NotImplemented