Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,4 @@ cython_debug/
.pypirc

# vscode settings
.vscode/
.vscode/
16 changes: 7 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

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

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

## repository-sqlalchemy

Expand Down Expand Up @@ -58,14 +58,14 @@ def get_session():

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

registry для engine-ов при множестве БД?
registry для engine-ов при множестве БД?

прямой доступ к (default) сессии?

прямой доступ к (default) сессии?

как переопределить параметры сессии?

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

```python
Expand Down Expand Up @@ -103,7 +103,7 @@ def get_users():
return users
```

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

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

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

Паттерн active record.


25 changes: 13 additions & 12 deletions fastapi_django/app.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
from functools import partial
from pathlib import Path

import pkg_resources
from fastapi import APIRouter, FastAPI
from prometheus_fastapi_instrumentator import PrometheusFastApiInstrumentator
from starlette.middleware.trustedhost import TrustedHostMiddleware
from starlette.staticfiles import StaticFiles

from .conf import settings
from .docs.views import router as docs_router

installed_packages = pkg_resources.working_set
installed_packages_list = [f"{i.key}" for i in installed_packages]

APP_ROOT = Path(__file__).parent


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


def setup_prometheus(app: FastAPI) -> None:
# TODO: проверить, что prometheus-fastapi-instrumentator установлен
print("===> settings.PROMETHEUS_ENABLED", settings.PROMETHEUS_ENABLED)
if settings.PROMETHEUS_ENABLED:
if settings.PROMETHEUS_ENABLED and "prometheus-fastapi-instrumentator" in installed_packages_list:
from prometheus_fastapi_instrumentator import PrometheusFastApiInstrumentator

instrumentator = PrometheusFastApiInstrumentator(should_group_status_codes=False)
instrumentator = instrumentator.instrument(app)
instrumentator.expose(
app,
should_gzip=settings.PROMETHEUS_SHOULD_GZIP,
name=settings.PROMETHEUS_NAME,
tags=["Метрики"]
app, should_gzip=settings.PROMETHEUS_SHOULD_GZIP, name=settings.PROMETHEUS_NAME, tags=["Метрики"]
)
# TODO:
# остальные настройки в settings
Expand All @@ -46,8 +46,9 @@ def setup_middlewares(app: FastAPI) -> None:
for middleware in settings.MIDDLEWARES:
print("===> middleware", middleware)
app.add_middleware(middleware)
# TODO: продумать:
# преднастроенные миддлварь, которые задаются в строковом формате и имеют настройки ИЛИ не имеют параметров инициализации
# TODO: продумать:
# преднастроенные миддлварь, которые задаются в строковом формате и
# имеют настройки ИЛИ не имеют параметров инициализации
# callabe миддвари, с преднастроенными при помощи partial параметрами напр:
# MIDDLEWARES = [
# partial(TrustedHostMiddleware, allowed_hosts=["localhost", "*.example.com"])
Expand All @@ -61,10 +62,10 @@ def setup_middlewares(app: FastAPI) -> None:
version=settings.API_VERSION,
docs_url=None,
redoc_url=None,
openapi_url=f"{settings.API_PREFIX}/docs/openapi.json"
openapi_url=f"{settings.API_PREFIX}/docs/openapi.json",
)
# TODO: настроить урлы
application.include_router = partial(application.include_router, prefix=settings.API_PREFIX)
application.include_router = partial(application.include_router, prefix=settings.API_PREFIX) # type: ignore
include_routers(application)
setup_prometheus(application)
setup_middlewares(application)
Loading
Loading