/
FlysAt
/
DataFoundry
Обзор
Документация
Войти
/
FlysAt
/
DataFoundry
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/src/core/config.py
123 строки
3 KB
AlexanderShmygol
preparing for deployment
22 апр 2026, 19:40
22 апр 2026, 19:40
67a0f7d
Код
Авторство
О чём код?
from pathlib import Path from pydantic_settings import BaseSettings, SettingsConfigDict BACKEND_DIR = Path(__file__).resolve().parents[2] # backend/ ROOT_DIR = BACKEND_DIR.parent # корень проекта ENV_FILE = ROOT_DIR / ".env" class DBSettings(BaseSettings): model_config = SettingsConfigDict( env_file=ENV_FILE, env_file_encoding="utf-8", extra="ignore", ) POSTGRES_HOST: str POSTGRES_PORT: int POSTGRES_USER: str POSTGRES_PASSWORD: str POSTGRES_DB: str @property def sync_url(self) -> str: return ( f"postgresql+psycopg2://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}" f"@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}" ) @property def async_url(self) -> str: return ( f"postgresql+asyncpg://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}" f"@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}" ) class AuthSettings(BaseSettings): model_config = SettingsConfigDict( env_file=ENV_FILE, env_file_encoding="utf-8", extra="ignore", ) JWT_SECRET_KEY: str = "super-secret-key" JWT_ALGORITHM: str = "HS256" JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 JWT_REFRESH_TOKEN_EXPIRE_DAYS: int = 7 class MinioSettings(BaseSettings): model_config = SettingsConfigDict( env_file=ENV_FILE, env_file_encoding="utf-8", extra="ignore", ) MINIO_ENDPOINT: str = "localhost:9000" MINIO_ACCESS_KEY: str = "minioadmin" MINIO_SECRET_KEY: str = "minioadmin" MINIO_BUCKET: str = "order-datasets" MINIO_SECURE: bool = False MINIO_PUBLIC_ENDPOINT: str | None = None class RabbitMQSettings(BaseSettings): model_config = SettingsConfigDict( env_file=ENV_FILE, env_file_encoding="utf-8", extra="ignore", ) RABBITMQ_HOST: str = "localhost" RABBITMQ_PORT: int = 5672 RABBITMQ_USER: str = "guest" RABBITMQ_PASSWORD: str = "guest" RABBITMQ_DATASET_VALIDATION_QUEUE: str = "dataset_validation" @property def amqp_url(self) -> str: return ( f"amqp://{self.RABBITMQ_USER}:{self.RABBITMQ_PASSWORD}" f"@{self.RABBITMQ_HOST}:{self.RABBITMQ_PORT}/" ) class DatasetValidationSettings(BaseSettings): model_config = SettingsConfigDict( env_file=ENV_FILE, env_file_encoding="utf-8", extra="ignore", ) DATASET_MAX_UNCOMPRESSED_SIZE_MB: int = 500 @property def max_uncompressed_size_bytes(self) -> int: return self.DATASET_MAX_UNCOMPRESSED_SIZE_MB * 1024 * 1024 class LabelStudioSettings(BaseSettings): model_config = SettingsConfigDict( env_file=ENV_FILE, env_file_encoding="utf-8", extra="ignore", ) LABEL_STUDIO_API_URL: str = "http://label-studio:8080" LABEL_STUDIO_PUBLIC_URL: str = "http://localhost:8080" LABEL_STUDIO_USERNAME: str = "admin@example.com" LABEL_STUDIO_PASSWORD: str = "admin123" LABEL_STUDIO_USER_TOKEN: str = "ls_dev_token_12345" LABEL_STUDIO_WEBHOOK_BASE_URL: str = "http://backend-api:8000/api/label-studio/webhooks" LABEL_STUDIO_TIMEOUT_SECONDS: int = 20 db_settings = DBSettings() auth_settings = AuthSettings() minio_settings = MinioSettings() rabbitmq_settings = RabbitMQSettings() dataset_validation_settings = DatasetValidationSettings() label_studio_settings = LabelStudioSettings()