Код 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
  1. DFS: сначала зависимости, потом сама функция.
  2. Закрытие в обратном порядке запуска, только для генераторов.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.