79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
from dataclasses import dataclass
|
|
from pathlib import Path
|
|
from pythonapp.Libs.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 |