File size: 1,479 Bytes
c6e88ba
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
03beb83
c6e88ba
 
 
 
 
 
 
 
 
 
36ed17a
c6e88ba
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
from pydantic.v1 import BaseSettings, Field
from loguru import logger


class Settings(BaseSettings):
    POSTGRES_DB: str = Field("test_db", env="POSTGRES_DB")
    POSTGRES_USER: str = Field("test_user", env="POSTGRES_USER")
    POSTGRES_PASSWORD: str = Field("test_pass", env="POSTGRES_PASSWORD")

    is_docker: bool = Field(default_factory=lambda: os.environ.get("DOCKER_ENV") == "1")

    database_url: str = Field(..., env="DATABASE_URL")
    redis_url: str = Field(..., env="REDIS_URL")
    flower_basic_auth: str = Field(..., env="FLOWER_BASIC_AUTH")
    broker_url: str = Field(..., env="BROKER_URL")
    cache_backend: str = "aiocache.SimpleMemoryCache"

    class Config:
        env_file = ".env"

    @classmethod
    def create(cls):
        """Create instance and dynamically set database and redis URLs."""
        instance = cls()
        # Set the correct database URL without the +asyncpg
        instance.database_url = (
            f"postgresql+asyncpg://{instance.POSTGRES_USER}:{instance.POSTGRES_PASSWORD}@"
            f"{'localhost' if not instance.is_docker else 'postgres'}:5432/{instance.POSTGRES_DB}"
        )
        instance.redis_url = (
            f"redis://{'localhost' if not instance.is_docker else 'redis'}:6379/0"
        )
        instance.broker_url = instance.redis_url
        return instance


# Instantiate Settings
settings = Settings.create()

if __name__ == "__main__":
    logger.info(f"Settings: {settings.dict()}")