from pathlib import Path
from typing import *
from .. import io, Stream
[docs]class ProjectResults:
def __init__(self):
self.full_name: str = "UNKNOWN"
self.results_dir: Path = None
return
[docs] @classmethod
def from_base_results_dir(cls, base_results_dir: Path) -> List["ProjectResults"]:
full_names = Stream.of_dirs(base_results_dir)
return [cls.get_project_results(n, base_results_dir / n) for n in full_names]
[docs] @classmethod
def get_project_results(cls, full_name: str, results_dir: Path) -> "ProjectResults":
results = cls()
results.full_name = full_name
results.results_dir = results_dir
return results
@property
def meta_dir(self) -> Path:
meta_dir: Path = self.results_dir / "META"
meta_dir.mkdir(parents=True, exist_ok=True)
return meta_dir
[docs] def get_revision_dir(self, revision: str) -> Path:
revision_dir = self.results_dir / revision
revision_dir.mkdir(parents=True, exist_ok=True)
return revision_dir
[docs] def load_revision_result(
self, revision: str, file_name: str, *args, **kwargs
) -> Any:
return io.load(self.get_revision_dir(revision) / file_name, *args, **kwargs)
[docs] def dump_revision_result(
self, revision: str, file_name: str, data: Any, *args, **kwargs
) -> None:
io.dump(self.get_revision_dir(revision) / file_name, data, *args, **kwargs)