From f3c4a549edca82a80757f91d85fcb2cb80e61fed Mon Sep 17 00:00:00 2001 From: Stanislav Roslavtsev Date: Mon, 24 Jul 2023 12:17:17 +0300 Subject: [PATCH 1/3] Initial commit --- {{cookiecutter.repo_name}}/migrations/env.py | 2 +- {{cookiecutter.repo_name}}/requirements.txt | 1 + .../{{cookiecutter.module_name}}/routes/base.py | 2 +- .../{{cookiecutter.module_name}}/settings.py | 9 +++------ 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/{{cookiecutter.repo_name}}/migrations/env.py b/{{cookiecutter.repo_name}}/migrations/env.py index 13b74b8..7a372f8 100644 --- a/{{cookiecutter.repo_name}}/migrations/env.py +++ b/{{cookiecutter.repo_name}}/migrations/env.py @@ -61,7 +61,7 @@ def run_migrations_online(): """ configuration = config.get_section(config.config_ini_section) - configuration['sqlalchemy.url'] = settings.DB_DSN + configuration['sqlalchemy.url'] = str(settings.DB_DSN) connectable = engine_from_config( configuration, prefix="sqlalchemy.", diff --git a/{{cookiecutter.repo_name}}/requirements.txt b/{{cookiecutter.repo_name}}/requirements.txt index 3c83f42..9fd26f2 100644 --- a/{{cookiecutter.repo_name}}/requirements.txt +++ b/{{cookiecutter.repo_name}}/requirements.txt @@ -6,5 +6,6 @@ gunicorn logging-profcomff psycopg2-binary pydantic[dotenv] +pydantic-settings SQLAlchemy uvicorn diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/base.py b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/base.py index 12a6222..068f158 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/base.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/base.py @@ -19,7 +19,7 @@ app.add_middleware( DBSessionMiddleware, - db_url=settings.DB_DSN, + db_url=str(settings.DB_DSN), engine_args={"pool_pre_ping": True, "isolation_level": "AUTOCOMMIT"}, ) diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/settings.py b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/settings.py index 9a90f55..da8fa70 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/settings.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/settings.py @@ -1,7 +1,8 @@ import os from functools import lru_cache -from pydantic import BaseSettings, PostgresDsn +from pydantic import ConfigDict, PostgresDsn +from pydantic_settings import BaseSettings class Settings(BaseSettings): @@ -15,11 +16,7 @@ class Settings(BaseSettings): CORS_ALLOW_METHODS: list[str] = ['*'] CORS_ALLOW_HEADERS: list[str] = ['*'] - class Config: - """Pydantic BaseSettings config""" - - case_sensitive = True - env_file = ".env" + model_config = ConfigDict(case_sensitive=True, env_file=".env", extra="ignore") @lru_cache From 541987ada43480d8d87119eb1b3c37a3dc2c8415 Mon Sep 17 00:00:00 2001 From: Stanislav Roslavtsev Date: Mon, 24 Jul 2023 12:18:22 +0300 Subject: [PATCH 2/3] Black (kinda) + isort --- {{cookiecutter.repo_name}}/migrations/env.py | 4 +--- .../{{cookiecutter.module_name}}/__init__.py | 2 +- .../{{cookiecutter.module_name}}/__main__.py | 2 -- .../{{cookiecutter.module_name}}/models/base.py | 2 +- .../{{cookiecutter.module_name}}/routes/models/base.py | 2 +- .../{{cookiecutter.module_name}}/settings.py | 10 +++++----- 6 files changed, 9 insertions(+), 13 deletions(-) diff --git a/{{cookiecutter.repo_name}}/migrations/env.py b/{{cookiecutter.repo_name}}/migrations/env.py index 7a372f8..e3c1632 100644 --- a/{{cookiecutter.repo_name}}/migrations/env.py +++ b/{{cookiecutter.repo_name}}/migrations/env.py @@ -1,9 +1,7 @@ from logging.config import fileConfig -from sqlalchemy import engine_from_config -from sqlalchemy import pool - from alembic import context +from sqlalchemy import engine_from_config, pool from {{cookiecutter.module_name}}.models.base import Base from {{cookiecutter.module_name}}.settings import get_settings diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/__init__.py b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/__init__.py index ebcaeac..4ed3366 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/__init__.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/__init__.py @@ -1,3 +1,3 @@ import os -__version__ = os.getenv('APP_VERSION', 'dev') +__version__ = os.getenv("APP_VERSION", "dev") diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/__main__.py b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/__main__.py index 4f3e9c5..7e2d401 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/__main__.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/__main__.py @@ -1,7 +1,5 @@ import uvicorn - from {{cookiecutter.module_name}}.routes.base import app - if __name__ == '__main__': uvicorn.run(app) diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/models/base.py b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/models/base.py index 16065b5..3fc9b96 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/models/base.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/models/base.py @@ -19,4 +19,4 @@ def __repr__(self) -> str: attrs = [] for c in self.__table__.columns: attrs.append(f"{c.name}={getattr(self, c.name)}") - return "{}({})".format(self.__class__.__name__, ', '.join(attrs)) + return "{}({})".format(self.__class__.__name__, ", ".join(attrs)) diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/models/base.py b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/models/base.py index d96d4d5..92f4d78 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/models/base.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/models/base.py @@ -6,7 +6,7 @@ def __repr__(self) -> str: attrs = [] for k, v in self.__class__.schema().items(): attrs.append(f"{k}={v}") - return "{}({})".format(self.__class__.__name__, ', '.join(attrs)) + return "{}({})".format(self.__class__.__name__, ", ".join(attrs)) class Config: orm_mode = True diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/settings.py b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/settings.py index da8fa70..a98c0d9 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/settings.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/settings.py @@ -8,13 +8,13 @@ class Settings(BaseSettings): """Application settings""" - DB_DSN: PostgresDsn = 'postgresql://postgres@localhost:5432/postgres' - ROOT_PATH: str = '/' + os.getenv("APP_NAME", "") + DB_DSN: PostgresDsn = "postgresql://postgres@localhost:5432/postgres" + ROOT_PATH: str = "/" + os.getenv("APP_NAME", "") - CORS_ALLOW_ORIGINS: list[str] = ['*'] + CORS_ALLOW_ORIGINS: list[str] = ["*"] CORS_ALLOW_CREDENTIALS: bool = True - CORS_ALLOW_METHODS: list[str] = ['*'] - CORS_ALLOW_HEADERS: list[str] = ['*'] + CORS_ALLOW_METHODS: list[str] = ["*"] + CORS_ALLOW_HEADERS: list[str] = ["*"] model_config = ConfigDict(case_sensitive=True, env_file=".env", extra="ignore") From 193964825fe11f347e78ecb49063d601c8e953bd Mon Sep 17 00:00:00 2001 From: Stanislav Roslavtsev Date: Mon, 24 Jul 2023 12:32:39 +0300 Subject: [PATCH 3/3] ConfigDict in routes/models/base.py --- .../{{cookiecutter.module_name}}/routes/models/base.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/models/base.py b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/models/base.py index 92f4d78..251e426 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/models/base.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.module_name}}/routes/models/base.py @@ -1,4 +1,4 @@ -from pydantic import BaseModel +from pydantic import BaseModel, ConfigDict class Base(BaseModel): @@ -8,5 +8,4 @@ def __repr__(self) -> str: attrs.append(f"{k}={v}") return "{}({})".format(self.__class__.__name__, ", ".join(attrs)) - class Config: - orm_mode = True + model_config = ConfigDict(from_attributes=True, extra="ignore")