Files
vaiola/pythonapp/Instance/ABS.py
bsakaguchi 3a88bdad3a Harden image fetch algorithm
Prepare for database integration
2025-09-24 20:07:19 +07:00

79 lines
2.9 KiB
Python

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