zinoubm's picture
initial commit
66340f1
import sys
from typing import Any, Dict, List, Optional
from pydantic import BaseSettings, HttpUrl, PostgresDsn, validator
from pydantic.networks import AnyHttpUrl
class Settings(BaseSettings):
PROJECT_NAME: str = "QueryX"
SENTRY_DSN: Optional[HttpUrl] = None
API_PATH: str = "/api/v1"
ACCESS_TOKEN_EXPIRE_MINUTES: int = 7 * 24 * 60 # 7 days
BACKEND_CORS_ORIGINS: List[AnyHttpUrl] = [
"http://0.0.0.0:9000",
"http://0.0.0.0:8000",
]
# The following variables need to be defined in environment
TEST_DATABASE_URL: Optional[PostgresDsn]
DATABASE_URL: PostgresDsn
ASYNC_DATABASE_URL: Optional[PostgresDsn]
@validator("DATABASE_URL", pre=True)
def build_test_database_url(cls, v: Optional[str], values: Dict[str, Any]):
"""Overrides DATABASE_URL with TEST_DATABASE_URL in test environment."""
url = v
if "pytest" in sys.modules:
if not values.get("TEST_DATABASE_URL"):
raise Exception(
"pytest detected, but TEST_DATABASE_URL is not set in environment"
)
url = values["TEST_DATABASE_URL"]
if url:
return url.replace("postgres://", "postgresql://")
return url
@validator("ASYNC_DATABASE_URL")
def build_async_database_url(cls, v: Optional[str], values: Dict[str, Any]):
"""Builds ASYNC_DATABASE_URL from DATABASE_URL."""
v = values["DATABASE_URL"]
return v.replace("postgresql", "postgresql+asyncpg", 1) if v else v
SECRET_KEY: str
# END: required environment variables
settings = Settings()