Skip to content

Commit

Permalink
Refactor Settings to properly change tmp dirs based on tmp_data_dir.
Browse files Browse the repository at this point in the history
  • Loading branch information
Aleksandr Movchan committed Nov 29, 2024
1 parent 849c270 commit 31d3cb5
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 5 deletions.
24 changes: 19 additions & 5 deletions aana/configs/settings.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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()
Expand All @@ -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."""
Expand Down
36 changes: 36 additions & 0 deletions aana/tests/units/test_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 31d3cb5

Please sign in to comment.