| from pathlib import Path |
|
|
| from PIL import Image as PILImage |
|
|
| try: |
| from trackio.utils import TRACKIO_DIR |
| except ImportError: |
| from utils import TRACKIO_DIR |
|
|
|
|
| class FileStorage: |
| @staticmethod |
| def get_project_media_path( |
| project: str, |
| run: str | None = None, |
| step: int | None = None, |
| filename: str | None = None, |
| ) -> Path: |
| if filename is not None and step is None: |
| raise ValueError("filename requires step") |
| if step is not None and run is None: |
| raise ValueError("step requires run") |
|
|
| path = TRACKIO_DIR / "media" / project |
| if run: |
| path /= run |
| if step is not None: |
| path /= str(step) |
| if filename: |
| path /= filename |
| return path |
|
|
| @staticmethod |
| def init_project_media_path( |
| project: str, run: str | None = None, step: int | None = None |
| ) -> Path: |
| path = FileStorage.get_project_media_path(project, run, step) |
| path.mkdir(parents=True, exist_ok=True) |
| return path |
|
|
| @staticmethod |
| def save_image( |
| image: PILImage.Image, |
| project: str, |
| run: str, |
| step: int, |
| filename: str, |
| format: str = "PNG", |
| ) -> Path: |
| path = FileStorage.init_project_media_path(project, run, step) / filename |
| image.save(path, format=format) |
| return path |
|
|
| @staticmethod |
| def get_image(project: str, run: str, step: int, filename: str) -> PILImage.Image: |
| path = FileStorage.get_project_media_path(project, run, step, filename) |
| if not path.exists(): |
| raise FileNotFoundError(f"Image file not found: {path}") |
| return PILImage.open(path).convert("RGBA") |
|
|