From 61246844256f4414b1a3fbc84f9ee12f08ffe85f Mon Sep 17 00:00:00 2001
From: Pavel Kirilin <win10@list.ru>
Date: Sat, 11 Sep 2021 12:47:51 +0400
Subject: [PATCH] Fixed critical bug. Description: * Fixed bug that caused
 uvcorn worker freezes. * Added bunch of __init__ files. * Renamed tests
 module.

Signed-off-by: Pavel Kirilin <win10@list.ru>
---
 .../{{cookiecutter.project_name}}/pyproject.toml         | 3 +++
 .../{{cookiecutter.project_name}}/db/dependencies.py     | 9 +++++----
 .../{{cookiecutter.project_name}}/services/__init__.py   | 1 +
 .../services/redis/dependency.py                         | 7 ++++---
 ...tproject.py => test_{{cookiecutter.project_name}}.py} | 0
 .../{{cookiecutter.project_name}}/web/__init__.py        | 1 +
 .../{{cookiecutter.project_name}}/web/api/redis/views.py | 3 ++-
 pyproject.toml                                           | 2 +-
 8 files changed, 17 insertions(+), 9 deletions(-)
 create mode 100644 fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/services/__init__.py
 rename fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/tests/{test_fastapitestproject.py => test_{{cookiecutter.project_name}}.py} (100%)
 create mode 100644 fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/__init__.py

diff --git a/fastapi_template/template/{{cookiecutter.project_name}}/pyproject.toml b/fastapi_template/template/{{cookiecutter.project_name}}/pyproject.toml
index 1b7d87d..21067cc 100644
--- a/fastapi_template/template/{{cookiecutter.project_name}}/pyproject.toml
+++ b/fastapi_template/template/{{cookiecutter.project_name}}/pyproject.toml
@@ -34,6 +34,9 @@ aiomysql = "^0.0.21"
 {%- if cookiecutter.enable_redis == "True" %}
 aioredis = {version = "^2.0.0", extras = ["hiredis"]}
 {%- endif %}
+httptools = "^0.3.0"
+async-exit-stack = "^1.0.1"
+async-generator = "^1.10"
 
 [tool.poetry.dev-dependencies]
 pytest = "^6.0"
diff --git a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/db/dependencies.py b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/db/dependencies.py
index 9e511d7..bb06c2b 100644
--- a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/db/dependencies.py
+++ b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/db/dependencies.py
@@ -13,7 +13,8 @@ async def get_db_session(request: Request) -> AsyncGenerator[AsyncSession, None]
     """
     session: AsyncSession = request.app.state.db_session_factory()
 
-    yield session
-
-    await session.commit()
-    await session.close()
+    try:  # noqa: WPS501
+        yield session
+    finally:
+        await session.commit()
+        await session.close()
diff --git a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/services/__init__.py b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/services/__init__.py
new file mode 100644
index 0000000..e6ef7b8
--- /dev/null
+++ b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/services/__init__.py
@@ -0,0 +1 @@
+"""Services for {{cookiecutter.project_name}}."""
diff --git a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/services/redis/dependency.py b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/services/redis/dependency.py
index 986d336..1089ed6 100644
--- a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/services/redis/dependency.py
+++ b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/services/redis/dependency.py
@@ -15,6 +15,7 @@ async def get_redis_connection(request: Request) -> AsyncGenerator[Redis, None]:
     """
     redis_client = Redis(connection_pool=request.app.state.redis_pool)
 
-    yield redis_client
-
-    await redis_client.close()
+    try:  # noqa: WPS501
+        yield redis_client
+    finally:
+        await redis_client.close()
diff --git a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/tests/test_fastapitestproject.py b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/tests/test_{{cookiecutter.project_name}}.py
similarity index 100%
rename from fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/tests/test_fastapitestproject.py
rename to fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/tests/test_{{cookiecutter.project_name}}.py
diff --git a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/__init__.py b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/__init__.py
new file mode 100644
index 0000000..852f710
--- /dev/null
+++ b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/__init__.py
@@ -0,0 +1 @@
+"""WEB API for {{cookiecutter.project_name}}."""
diff --git a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/api/redis/views.py b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/api/redis/views.py
index aeb4d0d..5c2ab6b 100644
--- a/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/api/redis/views.py
+++ b/fastapi_template/template/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/web/api/redis/views.py
@@ -38,4 +38,5 @@ async def set_value(
     :param redis_value: new value data.
     :param redis: redis connection.
     """
-    await redis.set(name=redis_value.key, value=redis_value.value)
+    if redis_value.value is not None:
+        await redis.set(name=redis_value.key, value=redis_value.value)
diff --git a/pyproject.toml b/pyproject.toml
index 95563b9..dea1852 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [tool.poetry]
 name = "fastapi_template"
-version = "2.2.4"
+version = "2.3.0"
 description = "Feature-rich robust FastAPI template"
 authors = ["Pavel Kirilin <win10@list.ru>"]
 packages = [
-- 
GitLab