Files
xas-test-library/console/settings.py
T

63 lines
2.5 KiB
Python
Raw Normal View History

from dataclasses import dataclass, field
import json
import os
from pathlib import Path
@dataclass
class Settings:
root: Path
sources: list
allowed_hosts: list = field(default_factory=lambda: ["10.88.118.188:14442", "10.88.118.188:14440"])
allowed_networks: list = field(default_factory=lambda: ["10.88.0.0/17", "10.20.0.0/21"])
test_mode: bool = False
max_upload: int = 1024 * 1024
max_log: int = 16 * 1024 * 1024
max_artifact: int = 32 * 1024 * 1024
max_run_files: int = 64
test_definitions: list = field(default_factory=list)
example_script_ids: list = field(default_factory=list)
native_catalog: dict = field(default_factory=lambda: {"profiles": [], "targets": []})
@property
def native_socket(self):
return self.root / "native-ipc" / "control.sock"
@property
def library(self):
return self.root / "library"
@property
def runs(self):
return self.root / "runs"
@property
def db(self):
return self.root / "console-data" / "console.sqlite3"
def prepare(self):
self.validate_paths()
for directory in (self.root, self.library, self.runs, self.db.parent):
directory.mkdir(parents=True, exist_ok=True)
def validate_paths(self):
for directory in (self.root, self.library, self.runs, self.db.parent):
if not directory.is_absolute():
raise ValueError("Runtime must be an absolute path")
for part in (directory, *directory.parents):
if part.is_symlink():
raise ValueError("Runtime paths must not contain symlinks")
for path in (self.db, Path(str(self.db) + "-wal"), Path(str(self.db) + "-shm")):
if path.is_symlink():
raise ValueError("Database symlinks are not supported")
@classmethod
def from_env(cls):
project = Path(__file__).resolve().parents[1]
catalog = json.loads((project / "catalog/external-sources.json").read_text(encoding="utf-8"))
tests = json.loads((project / "catalog/test-definitions.json").read_text(encoding="utf-8"))
native_file = project / "catalog/native-profiles.json"
native = json.loads(native_file.read_text(encoding="utf-8")) if native_file.exists() else {"profiles": [], "targets": []}
return cls(Path(os.environ.get("XAS_CONSOLE_ROOT", str(project / "runtime"))), catalog["sources"],
test_definitions=tests["tests"], example_script_ids=tests.get("example_script_ids", []), native_catalog=native)