From e2a9bb7a7b38cb988d487bf70f81540998e4e639 Mon Sep 17 00:00:00 2001
From: Pavel Kirilin <pavel.kirilin@simbirsoft.com>
Date: Mon, 9 Nov 2020 01:54:35 +0400
Subject: [PATCH] Fixed many mypy issues and Dockerfiles. Description: - Fixed
 Dockerfile libraries versions; - Fixed mypy errors; - Fixed .pre-commit
 config.

Signed-off-by: Pavel Kirilin <pavel.kirilin@simbirsoft.com>
---
 .../.pre-commit-config.yaml                        |  1 +
 {{cookiecutter.project_name}}/Dockerfile           |  6 ++----
 .../src/services/db/base.py                        | 14 +++++++-------
 .../src/services/db/engine.py                      |  4 ++--
 {{cookiecutter.project_name}}/tests/conftest.py    |  6 +++---
 5 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/{{cookiecutter.project_name}}/.pre-commit-config.yaml b/{{cookiecutter.project_name}}/.pre-commit-config.yaml
index 1fff678..408c2c1 100644
--- a/{{cookiecutter.project_name}}/.pre-commit-config.yaml
+++ b/{{cookiecutter.project_name}}/.pre-commit-config.yaml
@@ -32,6 +32,7 @@ repos:
           - "--strict"
           - "--ignore-missing-imports"
           - "--allow-subclassing-any"
+          - "--allow-untyped-calls"
           - "--pretty"
           - "--show-error-codes"
           - "--no-warn-return-any"
diff --git a/{{cookiecutter.project_name}}/Dockerfile b/{{cookiecutter.project_name}}/Dockerfile
index cc8db51..4631950 100644
--- a/{{cookiecutter.project_name}}/Dockerfile
+++ b/{{cookiecutter.project_name}}/Dockerfile
@@ -30,8 +30,8 @@ ENV PYTHONUNBUFFERED=1 \
 RUN apt-get update \
     && apt-get install --no-install-recommends -y \
         # deps for installing poetry
-        postgresql=11+200+deb10u3 \
-        libpq-dev=11.7-0+deb10u1 \
+        postgresql=11+200+deb10u4 \
+        libpq-dev=11.9-0+deb10u1 \
     && apt-get clean \
     && rm -rf /var/lib/apt/lists/*
 
@@ -45,8 +45,6 @@ RUN apt-get update \
     && apt-get install --no-install-recommends -y \
         # deps for installing poetry
         curl=7.64.0-4+deb10u1 \
-        postgresql=11+200+deb10u3 \
-        libpq-dev=11.7-0+deb10u1 \
         # deps for building python deps
         build-essential=12.6 \
     && apt-get clean \
diff --git a/{{cookiecutter.project_name}}/src/services/db/base.py b/{{cookiecutter.project_name}}/src/services/db/base.py
index 1af33be..99bb90c 100644
--- a/{{cookiecutter.project_name}}/src/services/db/base.py
+++ b/{{cookiecutter.project_name}}/src/services/db/base.py
@@ -22,7 +22,7 @@ class Base:
         return self.__name__.lower()
 
     @declared_attr
-    def id(self) -> sa.Column:
+    def id(self) -> sa.Column[Any]:
         return Column(
             UUID(as_uuid=True),
             primary_key=True,
@@ -30,7 +30,7 @@ class Base:
         )
 
     @declared_attr
-    def created_at(self) -> sa.Column:
+    def created_at(self) -> sa.Column[Any]:
         return sa.Column(
             sa.DateTime(timezone=True),
             server_default=sa.text("clock_timestamp()"),
@@ -38,7 +38,7 @@ class Base:
         )
 
     @declared_attr
-    def updated_at(self) -> sa.Column:
+    def updated_at(self) -> sa.Column[Any]:
         return sa.Column(
             sa.DateTime(timezone=True),
             server_default=sa.text("clock_timestamp()"),
@@ -47,17 +47,17 @@ class Base:
         )
 
     @classmethod
-    async def get(
+    def get(
         cls, pk: Union[uuid.UUID, str], *fields: InstrumentedAttribute
     ) -> Optional[Any]:
         return cls.select_query(*fields).where(cls.id == pk)
 
     @classmethod
-    async def exists(cls, pk: Union[uuid.UUID, str]) -> sa.sql.Select:
+    def exists(cls, pk: Union[uuid.UUID, str]) -> sa.sql.expression.Exists:
         return sa.exists().where(cls.id == pk)
 
     @classmethod
-    async def delete(cls, pk: uuid.UUID) -> sa.sql.Delete:
+    def delete(cls, pk: uuid.UUID) -> sa.sql.Delete:
         return cls.delete_query().where(cls.id == pk)
 
     @classmethod
@@ -66,7 +66,7 @@ class Base:
         *columns: Union[InstrumentedAttribute, Type["Base"]],
         use_labels: bool = False,
     ) -> sa.sql.Select:
-        return sa.select(columns or [cls], use_labels=use_labels)
+        return sa.select(columns or [cls], use_labels=use_labels)  # type: ignore
 
     @classmethod
     def insert_query(cls, **values: Any) -> sa.sql.Insert:
diff --git a/{{cookiecutter.project_name}}/src/services/db/engine.py b/{{cookiecutter.project_name}}/src/services/db/engine.py
index 83ee83a..17c9b02 100644
--- a/{{cookiecutter.project_name}}/src/services/db/engine.py
+++ b/{{cookiecutter.project_name}}/src/services/db/engine.py
@@ -6,14 +6,14 @@ from sqlalchemy.engine.url import URL, make_url
 from src.settings import settings
 
 db_url = make_url(
-    URL(
+    str(URL(
         drivername=settings.db_driver,
         username=settings.postgres_user,
         password=settings.postgres_password,
         host=settings.postgres_host,
         port=settings.postgres_port,
         database=settings.postgres_db,
-    )
+    ))
 )
 
 
diff --git a/{{cookiecutter.project_name}}/tests/conftest.py b/{{cookiecutter.project_name}}/tests/conftest.py
index a41373d..7c2596e 100644
--- a/{{cookiecutter.project_name}}/tests/conftest.py
+++ b/{{cookiecutter.project_name}}/tests/conftest.py
@@ -17,14 +17,14 @@ warnings.filterwarnings("ignore", category=DeprecationWarning)
 
 def get_engine() -> Engine:
     pg_db_url = make_url(
-        URL(
+        str(URL(
             drivername=settings.db_driver,
             username=settings.postgres_user,
             password=settings.postgres_password,
             host=settings.postgres_host,
             port=settings.postgres_port,
             database="postgres",
-        )
+        ))
     )
     engine = create_engine(str(pg_db_url))
     return engine
@@ -84,7 +84,7 @@ def app_fixture(create_db: None) -> TestClient:
 
 
 @pytest.fixture(scope="function")
-def pg_conn() -> Connection:
+def pg_conn() -> Generator[Connection, None, None]:
     engine = create_engine(str(db_url), pool_size=0, echo=True)
     conn = engine.connect()
 
-- 
GitLab