config.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. # -*- coding: utf-8 -*-
  2. import secrets
  3. from typing import Any, Dict, Optional
  4. from pydantic import AnyHttpUrl, BaseSettings, DirectoryPath, PostgresDsn, SecretStr, validator
  5. class Settings(BaseSettings):
  6. API_V1_STR: str = '/api/v1'
  7. SECRET_KEY: str = secrets.token_urlsafe(32)
  8. # 60 minutes * 24 hours * 8 days = 8 days
  9. ACCESS_TOKEN_MINUTES: int = 60 * 24 * 8
  10. # SERVER_NAME: str
  11. # SERVER_HOST: AnyHttpUrl
  12. PLATFORM_HOST: AnyHttpUrl
  13. PLATFORM_SECRET: SecretStr
  14. TRANSFER_HOST: AnyHttpUrl
  15. LOGS_DIR: DirectoryPath
  16. PROJECT_NAME: str
  17. POSTGRES_SERVER: str
  18. POSTGRES_USER: str
  19. POSTGRES_PASSWORD: str
  20. POSTGRES_DB: str
  21. SQLALCHEMY_DATABASE_URI: Optional[PostgresDsn] = None
  22. @validator('SQLALCHEMY_DATABASE_URI', pre=True)
  23. def assemble_db_connection(cls, v: Optional[str], values: Dict[str, Any]) -> Any:
  24. if isinstance(v, str):
  25. return v
  26. return PostgresDsn.build(
  27. scheme='postgresql',
  28. user=values.get('POSTGRES_USER'),
  29. password=values.get('POSTGRES_PASSWORD'),
  30. host=values.get('POSTGRES_SERVER'),
  31. path=f'/{values.get("POSTGRES_DB") or ""}'
  32. )
  33. class Config:
  34. case_sensitive = True
  35. env_file = '.env'
  36. settings = Settings()