-
Notifications
You must be signed in to change notification settings - Fork 265
Expand file tree
/
Copy pathsettings.py
More file actions
71 lines (54 loc) · 2.88 KB
/
settings.py
File metadata and controls
71 lines (54 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import os
from pathlib import Path
from typing import Any
from pydantic_settings import BaseSettings
class BaseAppSettings(BaseSettings):
BASE_DIR: Path = Path(__file__).parent.parent
PATH_TO_DB: str = str(BASE_DIR / "database" / "source" / "theater.db")
PATH_TO_MOVIES_CSV: str = str(BASE_DIR / "database" / "seed_data" / "imdb_movies.csv")
PATH_TO_EMAIL_TEMPLATES_DIR: str = str(BASE_DIR / "notifications" / "templates")
ACTIVATION_EMAIL_TEMPLATE_NAME: str = "activation_request.html"
ACTIVATION_COMPLETE_EMAIL_TEMPLATE_NAME: str = "activation_complete.html"
PASSWORD_RESET_TEMPLATE_NAME: str = "password_reset_request.html"
PASSWORD_RESET_COMPLETE_TEMPLATE_NAME: str = "password_reset_complete.html"
LOGIN_TIME_DAYS: int = 7
EMAIL_HOST: str = os.getenv("EMAIL_HOST", "host")
EMAIL_PORT: int = int(os.getenv("EMAIL_PORT", 25))
EMAIL_HOST_USER: str = os.getenv("EMAIL_HOST_USER", "testuser")
EMAIL_HOST_PASSWORD: str = os.getenv("EMAIL_HOST_PASSWORD", "test_password")
EMAIL_USE_TLS: bool = os.getenv("EMAIL_USE_TLS", "False").lower() == "true"
MAILHOG_API_PORT: int = os.getenv("MAILHOG_API_PORT", 8025)
S3_STORAGE_HOST: str = os.getenv("MINIO_HOST", "minio-theater")
S3_STORAGE_PORT: int = os.getenv("MINIO_PORT", 9000)
S3_STORAGE_ACCESS_KEY: str = os.getenv("MINIO_ROOT_USER", "minioadmin")
S3_STORAGE_SECRET_KEY: str = os.getenv("MINIO_ROOT_PASSWORD", "some_password")
S3_BUCKET_NAME: str = os.getenv("MINIO_STORAGE", "theater-storage")
@property
def S3_STORAGE_ENDPOINT(self) -> str:
return f"http://{self.S3_STORAGE_HOST}:{self.S3_STORAGE_PORT}"
class Settings(BaseAppSettings):
POSTGRES_USER: str = os.getenv("POSTGRES_USER", "test_user")
POSTGRES_PASSWORD: str = os.getenv("POSTGRES_PASSWORD", "test_password")
POSTGRES_HOST: str = os.getenv("POSTGRES_HOST", "test_host")
POSTGRES_DB_PORT: int = int(os.getenv("POSTGRES_DB_PORT", 5432))
POSTGRES_DB: str = os.getenv("POSTGRES_DB", "test_db")
SECRET_KEY_ACCESS: str = os.getenv("SECRET_KEY_ACCESS", os.urandom(32))
SECRET_KEY_REFRESH: str = os.getenv("SECRET_KEY_REFRESH", os.urandom(32))
JWT_SIGNING_ALGORITHM: str = os.getenv("JWT_SIGNING_ALGORITHM", "HS256")
class TestingSettings(BaseAppSettings):
SECRET_KEY_ACCESS: str = "SECRET_KEY_ACCESS"
SECRET_KEY_REFRESH: str = "SECRET_KEY_REFRESH"
JWT_SIGNING_ALGORITHM: str = "HS256"
DATABASE_URL: str = "sqlite+aiosqlite:///./test.db"
def model_post_init(self, __context: dict[str, Any] | None = None) -> None:
object.__setattr__(self, 'PATH_TO_DB', ":memory:")
object.__setattr__(
self,
'PATH_TO_MOVIES_CSV',
str(self.BASE_DIR / "database" / "seed_data" / "test_data.csv")
)
environment = os.getenv('ENVIRONMENT', 'developing')
if environment == 'testing':
settings = TestingSettings()
else:
settings = Settings()