Skip to content

Commit 248f3f3

Browse files
Updated pydantic to v2, updated fastapi to v0.103, other small fixes
1 parent 407f88c commit 248f3f3

7 files changed

Lines changed: 769 additions & 716 deletions

File tree

{{cookiecutter.project_name}}/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ coverage.xml
5757
*.py,cover
5858
.hypothesis/
5959
.pytest_cache/
60+
log.txt
6061

6162
# Translations
6263
*.mo

{{cookiecutter.project_name}}/app/core/config.py

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@
2525
from pathlib import Path
2626
from 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

3031
PROJECT_DIR = Path(__file__).parent.parent.parent
3132
with 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

97100
settings: Settings = Settings() # type: ignore

{{cookiecutter.project_name}}/app/schemas/responses.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
from pydantic import BaseModel, EmailStr
1+
from pydantic import BaseModel, ConfigDict, EmailStr
22

33

44
class BaseResponse(BaseModel):
5-
# may define additional fields or config shared across responses
6-
class Config:
7-
orm_mode = True
5+
model_config = ConfigDict(from_attributes=True)
86

97

108
class AccessTokenResponse(BaseResponse):

0 commit comments

Comments
 (0)