Coverage for src/shephex/experiment/context.py: 97%

30 statements  

« prev     ^ index     » next       coverage.py v7.6.1, created at 2025-03-29 18:45 +0100

1from pathlib import Path 

2from typing import Any, Union 

3 

4from shephex.experiment.meta import Meta 

5 

6 

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() 

13 

14 def __repr__(self) -> str: 

15 return 'ExperimentContext()' 

16 

17 def refresh(self) -> None: 

18 try: 

19 self.meta.load(self.shephex_directory) 

20 except FileNotFoundError: 

21 pass 

22 

23 @property 

24 def directory(self) -> Path: 

25 return self._directory.parent 

26 

27 @property 

28 def shephex_directory(self) -> Path: 

29 return self._directory 

30 

31 def update_progress(self, progress: Union[str, Any]) -> None: 

32 if not isinstance(progress, str): 

33 progress = str(progress) 

34 

35 self.meta.update('progress', progress) 

36 self.meta.dump(self.shephex_directory) 

37 

38 def add(self, key: str, value: Any) -> None: 

39 self.meta.update(key, value) 

40 self.meta.dump(self.shephex_directory)