если надо ранить тесты с другими енвами? Юзали бы дот енв как в сстатье тишкки написано, он не использует ди или есть еще варианты?
Шта
Создавали бы конфиг в тесте и передавали явно
окей, учту. А что если есть вещи что нет в конфиге приложения, но есть в енве, например то что касается промутеуса. Их же все равно надо переопределять
энв - это только способ доставить конфиг приложения.
да, но я о том что есть вещи которые напрямую не касаются конфига фастапи апки, но они есть в переменных окружеениях и они используются в коде
конфиг приложения и конфиг фастапи аппки это разные вещи
Конфиг содержит (по крайней мере должен) в себе все настройки приложения, он может состоять из разных компонент, это нормально Откуда они - не важно Поэтому при тестировании ты просто меняешь аргументы функции load_config Какой-то такой псевдокод в голову приходит: def load_config(src: str | path.Path | dict, **kwargs): data = get_data(src) for k, v in kwargs: data[k] = v return Config(data)
Здесь мы указываем откуда брать данные для конфига и кварги для переопределения каких-либо настроек, если нам захотелось (например переопределение через аргументы при запуске из командной строки или при тестировании)
а функция гет дата у нас как работает?
Например парсит yaml или toml файл конфига Или формирует маппинг из переменных окружения, или совмещает оба варианта Не суть важно как, важна концепция
по стандарту в фастапи апке у нас читается и лоадитсся конфиг совсем иначе class Settings(BaseSettings): """Application settings cond configs.""" app_name: str = ‘app’ @lru_cache def get_settings() -> Settings: """ Return application settings. :returns: app settings """ return Settings() Не совсем понимаю, как здесь тогда можно применить твою концепцию
В чем проблема подтянуть этот процесс в процесс загрузки общего конфига?
Очевидно, функцию get_settings ты можешь юзать только там где создаешь апп. В тесте же вместо вызова ее ты создашь настройки другим способом. Декоратор lru_cache тут нахрен не нужен, так как функция должна быть вызвана только в одном месте кода однократно
https://fastapi.tiangolo.com/ru/advanced/settings/?h=sett тут в примерах есть такое , вроде стандарт
Так это код, с какого-то репозитория. "Fastapi template"
1. тианголо говнокодер 2. в примерах варианты что можно придумать с фастапи. Архитектуру прлиожения по ним строить нельзя 3. часть важных вещей размазана по разным разделам, соответсвтенно примеры однобокие или не очень корректные
Если тианголо говнокодер, то фастапи говнокод?
да, но при этом апи относительно удобное вышло
Если бы оно ещё работало так, как выглядит. Я однажды попробовал существующую апишку портировать на фастапи, а оно громко упало на несложном тайпхинте
Обсуждают сегодня