Python - Как принять аргумент в функции с именем 'from'

Использую FastAPI. Функция - обработчик в качестве аргументов принимает имена Query параметров из запроса. Вот сама функция обработчик:

@api.get('/visited_links/')
def upload_links(from: str):
    from_time = from
    print(from_time)

Такой подход понятно, что работать не будет. Пробовал вот так:

@api.get('/visited_links/')
def upload_links(*args, **kwargs):
    from_time = kwargs.get('from')
    print(from_time)

Но на такой подход ругается FastAPI и не хочет передавать параметры в такую функцию. Обращаться к API по другому не вариант. Переезжать на DRF ради такой мелочи нет желания. Спасибо!


Ответы (2 шт):

Автор решения: gil9red

Можно в функцию добавить параметр Request, что описывает запрос, а из него получить параметры:

from fastapi import FastAPI, Request

app = FastAPI()

@app.get("/items/{item_id}")
def read_item(item_id: int, request: Request):
    query_params = request.query_params

    print(query_params['from'])
    # 9999

    return {"item_id": item_id, "q": query_params}

При открытии http://127.0.0.1:8000/items/5?q=somequery&from=9999 вернуло:

{"item_id":5,"q":{"q":"somequery","from":"9999"}}

PS.

Описание типа Request

→ Ссылка
Автор решения: Вадим Закиров

Вариант @gil9red работает, все отлично. Однако хотелось бы не терять в авто-документации. Решил вопрос с помощью Query и alias, если вдруг кому-то пригодится.

@api.get('/visited_links/')
def get_links(to: str, q: str = Query(None, alias="from")):
    try:
        filtered_domains = store.filter_domains_by_time(time_from=q, time_to=to)
        return Response(details={'domains': filtered_domains}).json()
    except Exception as e:
        return Response(status=str(e)).json()

P.S. Ссылка на документацию о Query

→ Ссылка