From 31d3cb5c449e240bbc9f85a0393bba428b41f559 Mon Sep 17 00:00:00 2001 From: Aleksandr Movchan Date: Fri, 29 Nov 2024 14:03:45 +0000 Subject: [PATCH] Refactor Settings to properly change tmp dirs based on tmp_data_dir. --- aana/configs/settings.py | 24 ++++++++++++++++----- aana/tests/units/test_settings.py | 36 +++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/aana/configs/settings.py b/aana/configs/settings.py index a2ef7a6b..dd2ae426 100644 --- a/aana/configs/settings.py +++ b/aana/configs/settings.py @@ -1,6 +1,6 @@ from pathlib import Path -from pydantic import BaseModel, field_validator +from pydantic import BaseModel, field_validator, model_validator from pydantic_settings import BaseSettings, SettingsConfigDict from aana.configs.db import DbSettings @@ -55,10 +55,11 @@ class Settings(BaseSettings): """ tmp_data_dir: Path = Path("/tmp/aana_data") # noqa: S108 - image_dir: Path = tmp_data_dir / "images" - video_dir: Path = tmp_data_dir / "videos" - audio_dir: Path = tmp_data_dir / "audios" - model_dir: Path = tmp_data_dir / "models" + image_dir: Path | None = None + video_dir: Path | None = None + audio_dir: Path | None = None + model_dir: Path | None = None + num_workers: int = 2 task_queue: TaskQueueSettings = TaskQueueSettings() @@ -67,6 +68,19 @@ class Settings(BaseSettings): test: TestSettings = TestSettings() + @model_validator(mode="after") + def set_dependent_paths(self): + """Set default paths for directories if not explicitly provided.""" + if self.image_dir is None: + self.image_dir = self.tmp_data_dir / "images" + if self.video_dir is None: + self.video_dir = self.tmp_data_dir / "videos" + if self.audio_dir is None: + self.audio_dir = self.tmp_data_dir / "audios" + if self.model_dir is None: + self.model_dir = self.tmp_data_dir / "models" + return self + @field_validator("tmp_data_dir", mode="after") def create_tmp_data_dir(cls, path: Path) -> Path: """Create the tmp_data_dir if it doesn't exist.""" diff --git a/aana/tests/units/test_settings.py b/aana/tests/units/test_settings.py index ca46f49a..771d4b1f 100644 --- a/aana/tests/units/test_settings.py +++ b/aana/tests/units/test_settings.py @@ -16,3 +16,39 @@ def test_custom_tmp_data_dir(monkeypatch): monkeypatch.setenv("TMP_DATA_DIR", test_path) settings = Settings() assert settings.tmp_data_dir == Path(test_path) + + +def test_changing_tmp_data_dir(): + """Test that changing the temporary data directory is reflected in the other directories.""" + new_tmp_data_dir = Path("/new_tmp_data_dir") + settings = Settings(tmp_data_dir=new_tmp_data_dir) + + assert settings.tmp_data_dir == new_tmp_data_dir + assert settings.image_dir == new_tmp_data_dir / "images" + assert settings.video_dir == new_tmp_data_dir / "videos" + assert settings.audio_dir == new_tmp_data_dir / "audios" + assert settings.model_dir == new_tmp_data_dir / "models" + + # Check that we can change the image directory independently + new_image_dir = Path("/new_image_dir") + settings = Settings(tmp_data_dir=new_tmp_data_dir, image_dir=new_image_dir) + assert settings.tmp_data_dir == new_tmp_data_dir + assert settings.image_dir == new_image_dir + + # Check that we can change the video directory independently + new_video_dir = Path("/new_video_dir") + settings = Settings(tmp_data_dir=new_tmp_data_dir, video_dir=new_video_dir) + assert settings.tmp_data_dir == new_tmp_data_dir + assert settings.video_dir == new_video_dir + + # Check that we can change the audio directory independently + new_audio_dir = Path("/new_audio_dir") + settings = Settings(tmp_data_dir=new_tmp_data_dir, audio_dir=new_audio_dir) + assert settings.tmp_data_dir == new_tmp_data_dir + assert settings.audio_dir == new_audio_dir + + # Check that we can change the model directory independently + new_model_dir = Path("/new_model_dir") + settings = Settings(tmp_data_dir=new_tmp_data_dir, model_dir=new_model_dir) + assert settings.tmp_data_dir == new_tmp_data_dir + assert settings.model_dir == new_model_dir