Код Senior FastAPI и Pydantic обновлено
Граф зависимостей с кешем на запрос
Условие
Смоделируйте разрешение зависимостей FastAPI. deps это словарь «имя -> список зависимостей», target это эндпоинт. Каждая зависимость вычисляется один раз за запрос (кеш), сначала её зависимости в порядке списка. Зависимости с yield (их имена в generators) после ответа закрываются в порядке, обратном порядку их запуска. Верните [порядок вызова, порядок закрытия], эндпоинт тоже входит в порядок вызова последним.
Примеры
resolve({"endpoint":["user","session"],"user":["session","token"],"session":[],"token":[]}, "endpoint", ["session"]) // [["session", "token", "user", "endpoint"], ["session"]]
resolve({"endpoint":[]}, "endpoint", []) // [["endpoint"], []]
resolve({"e":["a","b"],"a":["c"],"b":["c"],"c":[]}, "e", ["a", "c"]) // [["c", "a", "b", "e"], ["a", "c"]]
Как подойти
Подсказки: 2
- DFS: сначала зависимости, потом сама функция.
- Закрытие в обратном порядке запуска, только для генераторов.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Ещё по теме «FastAPI и Pydantic»
- Откуда в FastAPI ответ 422
- Annotated в параметрах FastAPI
- BackgroundTasks или очередь задач
- httpx.AsyncClient на каждый запрос
- Сколько раз вызывается зависимость
- Эндпоинт FastAPI с моделью и зависимостью
- Откуда FastAPI берёт параметры
- Валидаторы Pydantic v2