Динамические расширенные зависимости FastAPI /Python

Программы на Python
Ответить
Anonymous
 Динамические расширенные зависимости FastAPI /

Сообщение Anonymous »

Я начал с примера, показанного на этой странице: https://fastapi.tiangolo.com/advanced/a ... -dependent

Код: Выделить всё

from typing import Annotated
from fastapi import Depends, FastAPI
app = FastAPI()

class FixedContentQueryChecker:
def __init__(self, fixed_content: str):
self.fixed_content = fixed_content

def __call__(self, q: str = ""):
if q:
return self.fixed_content in q
return False

checker = FixedContentQueryChecker("bar")

@app.get("/query-checker/")
async def read_query_check(fixed_content_included: Annotated[bool, Depends(checker)]):
return {"fixed_content_in_query": fixed_content_included}
Теперь я хотел бы иметь возможность использовать тот же тип внедрения зависимостей, но с динамически определяемым значением, используя декоратор.

Код: Выделить всё

def config_checker(value):
checker = FixedContentQueryChecker(value)
def f(func):
@functools.wraps(func)
async def wrap_func(*args, fixed_content_included: Annotated[bool, Depends(checker)], **kwargs):
return await func(*args, fixed_content_included, **kwargs)
return wrap_func
return f

@app.get("/query-bar-checker/")
@config_checker(value="bar")
async def read_query_check_bar(fixed_content_included: Annotated[bool, Depends(??)]):
return {"fixed_content_in_query": fixed_content_included}

@app.get("/query-foo-checker/")
@config_checker(value="foo")
async def read_query_check_foo(fixed_content_included: Annotated[bool, Depends(??)]):
return {"fixed_content_in_query": fixed_content_included}
Проблема в том, что мне нужно определить фиксированный_контент_included как зависимость в маршрутах, чтобы он не рассматривался как параметр запроса.
Но если я укажите что-либо в функции Depends() в определении маршрута, декоратор не сможет переопределить его, чтобы можно было использовать параметризованную функцию.
Как мне действовать?

Подробнее здесь: https://stackoverflow.com/questions/793 ... pendencies
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»