Skip to content

Commit 9f5e323

Browse files
committed
Added app configuration
1 parent fee7410 commit 9f5e323

File tree

4 files changed

+47
-0
lines changed

4 files changed

+47
-0
lines changed

sample_fastapi/app/config/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
from .depends import get_app_dirs, get_app_settings
2+
from .models import AppDirectories, AppSettings
3+
4+
__all__ = ["get_app_dirs", "get_app_settings", "AppDirectories", "AppSettings"]

sample_fastapi/app/config/depends.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from functools import lru_cache
2+
3+
from .models import AppDirectories, AppSettings
4+
5+
6+
@lru_cache()
7+
def get_app_settings():
8+
return AppSettings()
9+
10+
11+
@lru_cache()
12+
def get_app_dirs():
13+
return AppDirectories()

sample_fastapi/app/config/models.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from functools import partial
2+
from pathlib import Path
3+
4+
import platformdirs
5+
from pydantic import AnyUrl, Field
6+
from pydantic_settings import BaseSettings
7+
from pydantic_settings.main import SettingsConfigDict
8+
9+
from .settings import APP_NAME
10+
11+
12+
class BaseAppSettings(BaseSettings):
13+
"""Base class for all settings classes. Allows to be loaded from a `.env` file if found."""
14+
model_config = SettingsConfigDict(
15+
env_file=(".env", ".env.dev"),
16+
env_file_encoding="utf-8",
17+
extra="allow",
18+
)
19+
20+
21+
class AppSettings(BaseAppSettings):
22+
"""Main application-specific settings"""
23+
app_base_url: AnyUrl = "http://localhost:8000"
24+
25+
26+
class AppDirectories(BaseAppSettings):
27+
"""Paths that may be used by the application"""
28+
cache_dir: Path = Field(default_factory=partial(platformdirs.user_cache_path, appname=APP_NAME))
29+
data_dir: Path = Field(default_factory=partial(platformdirs.user_data_path, appname=APP_NAME))

sample_fastapi/app/config/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
APP_NAME = "sample-fastapi"

0 commit comments

Comments
 (0)