Skip to content

Commit 71790bc

Browse files
Merge pull request albertalexandrov#2 from SergeiVElfimov/main
fix linters and add check install prometheus-fastapi-instrumentator pack.
2 parents b9409f8 + d3624f7 commit 71790bc

File tree

4 files changed

+84
-35
lines changed

4 files changed

+84
-35
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,4 +174,4 @@ cython_debug/
174174
.pypirc
175175

176176
# vscode settings
177-
.vscode/
177+
.vscode/

README.md

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Кейсы для множественных БД
44

5-
В одну БД (мастер) пишется, в другую синхронизируется и из нее читается.
5+
В одну БД (мастер) пишется, в другую синхронизируется и из нее читается.
66

77
## repository-sqlalchemy
88

@@ -58,14 +58,14 @@ def get_session():
5858

5959
добавить к методам выше параметр типа using, который указывает, какую БД использовать?
6060

61-
registry для engine-ов при множестве БД?
61+
registry для engine-ов при множестве БД?
62+
63+
прямой доступ к (default) сессии?
6264

63-
прямой доступ к (default) сессии?
64-
6565
как переопределить параметры сессии?
6666

67-
для кейсов множественных БД не подходит вариант с захардкоженной сессией, тк один и тот же репозиторий может
68-
быть использован и для чтения и для записи. может оставить возможность автоматичского создания сессии для default и
67+
для кейсов множественных БД не подходит вариант с захардкоженной сессией, тк один и тот же репозиторий может
68+
быть использован и для чтения и для записи. может оставить возможность автоматичского создания сессии для default и
6969
добавить возможно задать сессию снаружи? или хотя бы указания using? или как using в Django в декораторе:
7070

7171
```python
@@ -103,7 +103,7 @@ def get_users():
103103
return users
104104
```
105105

106-
Управление жизненным циклом сессии происходит в middleware.
106+
Управление жизненным циклом сессии происходит в middleware.
107107

108108
Сессия хранится в contextvars.
109109

@@ -112,5 +112,3 @@ def get_users():
112112
Нет транзакций.
113113

114114
Паттерн active record.
115-
116-

fastapi_django/app.py

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
from functools import partial
22
from pathlib import Path
33

4+
import pkg_resources
45
from fastapi import APIRouter, FastAPI
5-
from prometheus_fastapi_instrumentator import PrometheusFastApiInstrumentator
6-
from starlette.middleware.trustedhost import TrustedHostMiddleware
76
from starlette.staticfiles import StaticFiles
87

98
from .conf import settings
109
from .docs.views import router as docs_router
1110

11+
installed_packages = pkg_resources.working_set
12+
installed_packages_list = [f"{i.key}" for i in installed_packages]
13+
1214
APP_ROOT = Path(__file__).parent
1315

1416

@@ -20,16 +22,14 @@ def include_docs_router(app: FastAPI, router: APIRouter) -> None:
2022

2123

2224
def setup_prometheus(app: FastAPI) -> None:
23-
# TODO: проверить, что prometheus-fastapi-instrumentator установлен
2425
print("===> settings.PROMETHEUS_ENABLED", settings.PROMETHEUS_ENABLED)
25-
if settings.PROMETHEUS_ENABLED:
26+
if settings.PROMETHEUS_ENABLED and "prometheus-fastapi-instrumentator" in installed_packages_list:
27+
from prometheus_fastapi_instrumentator import PrometheusFastApiInstrumentator
28+
2629
instrumentator = PrometheusFastApiInstrumentator(should_group_status_codes=False)
2730
instrumentator = instrumentator.instrument(app)
2831
instrumentator.expose(
29-
app,
30-
should_gzip=settings.PROMETHEUS_SHOULD_GZIP,
31-
name=settings.PROMETHEUS_NAME,
32-
tags=["Метрики"]
32+
app, should_gzip=settings.PROMETHEUS_SHOULD_GZIP, name=settings.PROMETHEUS_NAME, tags=["Метрики"]
3333
)
3434
# TODO:
3535
# остальные настройки в settings
@@ -46,8 +46,9 @@ def setup_middlewares(app: FastAPI) -> None:
4646
for middleware in settings.MIDDLEWARES:
4747
print("===> middleware", middleware)
4848
app.add_middleware(middleware)
49-
# TODO: продумать:
50-
# преднастроенные миддлварь, которые задаются в строковом формате и имеют настройки ИЛИ не имеют параметров инициализации
49+
# TODO: продумать:
50+
# преднастроенные миддлварь, которые задаются в строковом формате и
51+
# имеют настройки ИЛИ не имеют параметров инициализации
5152
# callabe миддвари, с преднастроенными при помощи partial параметрами напр:
5253
# MIDDLEWARES = [
5354
# partial(TrustedHostMiddleware, allowed_hosts=["localhost", "*.example.com"])
@@ -61,10 +62,10 @@ def setup_middlewares(app: FastAPI) -> None:
6162
version=settings.API_VERSION,
6263
docs_url=None,
6364
redoc_url=None,
64-
openapi_url=f"{settings.API_PREFIX}/docs/openapi.json"
65+
openapi_url=f"{settings.API_PREFIX}/docs/openapi.json",
6566
)
6667
# TODO: настроить урлы
67-
application.include_router = partial(application.include_router, prefix=settings.API_PREFIX)
68+
application.include_router = partial(application.include_router, prefix=settings.API_PREFIX) # type: ignore
6869
include_routers(application)
6970
setup_prometheus(application)
7071
setup_middlewares(application)

0 commit comments

Comments
 (0)