2525from pathlib import Path
2626from typing import Literal
2727
28- from pydantic import AnyHttpUrl , BaseSettings , EmailStr , PostgresDsn , validator
28+ from pydantic import AnyHttpUrl , EmailStr , PostgresDsn , model_validator
29+ from pydantic_settings import BaseSettings , SettingsConfigDict
2930
3031PROJECT_DIR = Path (__file__ ).parent .parent .parent
3132with open (f"{ PROJECT_DIR } /pyproject.toml" , "rb" ) as f :
@@ -51,47 +52,49 @@ class Settings(BaseSettings):
5152 DEFAULT_DATABASE_HOSTNAME : str
5253 DEFAULT_DATABASE_USER : str
5354 DEFAULT_DATABASE_PASSWORD : str
54- DEFAULT_DATABASE_PORT : str
55+ DEFAULT_DATABASE_PORT : int
5556 DEFAULT_DATABASE_DB : str
5657 DEFAULT_SQLALCHEMY_DATABASE_URI : str = ""
5758
5859 # POSTGRESQL TEST DATABASE
5960 TEST_DATABASE_HOSTNAME : str = "postgres"
6061 TEST_DATABASE_USER : str = "postgres"
6162 TEST_DATABASE_PASSWORD : str = "postgres"
62- TEST_DATABASE_PORT : str = " 5432"
63+ TEST_DATABASE_PORT : int = 5432
6364 TEST_DATABASE_DB : str = "postgres"
6465 TEST_SQLALCHEMY_DATABASE_URI : str = ""
6566
6667 # FIRST SUPERUSER
6768 FIRST_SUPERUSER_EMAIL : EmailStr
6869 FIRST_SUPERUSER_PASSWORD : str
6970
70- @validator ("DEFAULT_SQLALCHEMY_DATABASE_URI" )
71- def _assemble_default_db_connection (cls , v : str , values : dict [str , str ]) -> str :
72- return PostgresDsn .build (
73- scheme = "postgresql+asyncpg" ,
74- user = values ["DEFAULT_DATABASE_USER" ],
75- password = values ["DEFAULT_DATABASE_PASSWORD" ],
76- host = values ["DEFAULT_DATABASE_HOSTNAME" ],
77- port = values ["DEFAULT_DATABASE_PORT" ],
78- path = f"/{ values ['DEFAULT_DATABASE_DB' ]} " ,
71+ @model_validator (mode = "after" )
72+ def _assemble_default_db_connection (self ):
73+ self .DEFAULT_SQLALCHEMY_DATABASE_URI = str (
74+ PostgresDsn .build (
75+ scheme = "postgresql+asyncpg" ,
76+ username = self .DEFAULT_DATABASE_USER ,
77+ password = self .DEFAULT_DATABASE_PASSWORD ,
78+ host = self .DEFAULT_DATABASE_HOSTNAME ,
79+ port = self .DEFAULT_DATABASE_PORT ,
80+ path = self .DEFAULT_DATABASE_DB ,
81+ )
7982 )
8083
81- @ validator ( " TEST_SQLALCHEMY_DATABASE_URI" )
82- def _assemble_test_db_connection ( cls , v : str , values : dict [ str , str ]) -> str :
83- return PostgresDsn . build (
84- scheme = "postgresql+asyncpg" ,
85- user = values [ "TEST_DATABASE_USER" ] ,
86- password = values [ "TEST_DATABASE_PASSWORD" ] ,
87- host = values [ "TEST_DATABASE_HOSTNAME" ] ,
88- port = values [ "TEST_DATABASE_PORT" ] ,
89- path = f"/ { values [ 'TEST_DATABASE_DB' ] } " ,
84+ self . TEST_SQLALCHEMY_DATABASE_URI = str (
85+ PostgresDsn . build (
86+ scheme = "postgresql+asyncpg" ,
87+ username = self . TEST_DATABASE_USER ,
88+ password = self . TEST_DATABASE_PASSWORD ,
89+ host = self . TEST_DATABASE_HOSTNAME ,
90+ port = self . TEST_DATABASE_PORT ,
91+ path = self . TEST_DATABASE_DB ,
92+ )
9093 )
9194
92- class Config :
93- env_file = f"{ PROJECT_DIR } /.env"
94- case_sensitive = True
95+ model_config = SettingsConfigDict (
96+ env_file = f"{ PROJECT_DIR } /.env" , case_sensitive = True
97+ )
9598
9699
97100settings : Settings = Settings () # type: ignore
0 commit comments