Coverage for src/shephex/experiment/context.py: 97%
30 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-06-20 14:13 +0200
« prev ^ index » next coverage.py v7.6.1, created at 2025-06-20 14:13 +0200
1from pathlib import Path
2from typing import Any, Union
4from shephex.experiment.meta import Meta
7class ExperimentContext:
8 def __init__(self, directory: Union[Path, str], refresh: bool = True) -> None:
9 self._directory = Path(directory)
10 self.meta = Meta(name='context.json')
11 if refresh:
12 self.refresh()
14 def __repr__(self) -> str:
15 return 'ExperimentContext()'
17 def refresh(self) -> None:
18 try:
19 self.meta.load(self.shephex_directory)
20 except FileNotFoundError:
21 pass
23 @property
24 def directory(self) -> Path:
25 return self._directory.parent
27 @property
28 def shephex_directory(self) -> Path:
29 return self._directory
31 def update_progress(self, progress: Union[str, Any]) -> None:
32 if not isinstance(progress, str):
33 progress = str(progress)
35 self.meta.update('progress', progress)
36 self.meta.dump(self.shephex_directory)
38 def add(self, key: str, value: Any) -> None:
39 self.meta.update(key, value)
40 self.meta.dump(self.shephex_directory)