Pastukhov Nikita @Propan671
Python, Opensource enthusiast, FastStream creator
Information
- Rating
- Does not participate
- Location
- Москва, Москва и Московская обл., Россия
- Date of birth
- Registered
- Activity
Python, Opensource enthusiast, FastStream creator
Неплохо, есть какие-либо планы по поддержки AsyncAPI?
Опа, в таком мы участвуем
Как в итоге ваши эксперименты с FastStream?)
Нет, репозиторий не должен как раз вовзращать модельки алхимии. Пусть возвращает имеено что объекты вашего приложения, а модельки алхимии остаются инкапсулироваными внутри
Ну, я в принципе против того, чтобы у нас был глобальный объект `from app.settings import settings`, который можно импортнуть в любом месте кода - потом очень сложно следить, какое поле конфига где используется.
Запутанные конфиги с алиасами тоже как будто не упрошают восприятие кода. Если же юзать только один алиас для всего приложения целиком - то никакой проблемы не вижу
Например, вот тот же конфиг, но без лишних зависимостей
И вот эти все плюсы достижимы и без
pydantic_settings
, вот и всеСмотри, как могу
Settings(**os.environ)
- https://github.com/MultiDirectoryLab/MultiDirectory/pull/489/filesОтлично, тогда снова возникает вопрос, какую пользу несет
pydantic_settings[dotenv]
, если можно обойтись просто без этих двух зависимостей?Не очень понял использование репозиториев AdvancedAlchemy
Репозиторий должен возрващать доменные объекты приложения, полностью инкапсулируя модели алхимии внутри себя. Если я не путаю, AdvancedAlchemy репозиторий отдает в качестве ответов модели алхимии.
Если вы делаете свои надстройки над
SQLAlchemyAsyncRepository
, то тема с заворачиванием ее результата в доменные объекты не раскрыта. Опять же - там очень примитивная логика внутри. Если мы наследуемся от этих generic репозиториев, то какую пользу мы вообще получаем? Не проще реализовать репу с 0?Пример с глобальным объектом settings, который еще и сам читает переменные окружения выглядит ну уж слишком сомнительно в вакууме
Как вы в реальных проектах переключаете
.env
файлы под разные окружения? Как настраиваете окружение на проде, где.env
файла просто нет (или у вас есть)?Из моей практики
pydantic_settings
вообще никаких плюсов не дает - можно вполне обойтисьpydantic.BaseModel
, если нужна валидация конфига, либо обычнымdataclass
, если валидация не нужнаКакой-то треш... Автор не понимает ни концепции ООП, ни ФП, зато понимает TypeScript и ловко владеет всеми возможными способами прострелить себе колени
Нет, dishka inject - это декоратор под конкретный фреймворк и работает только в контроллере. Во всех остальных частях кода вам остается таскать контейнер явным образом и делать "container.get(T)" для получения зависимостей. Или писать свой inject-декоратор. Однако, это не рекомендуется делать, о чем я в статье вскольз предупреждаю.
Никто не планирует сроки поддержки библиотеки. Поэтому и нужно "сообщество" и круг мейнтейнеров, а не один человек. Bus factor никто не отменял. В жзни всякое может случиться и мейнтейнер может пропасть.
Яркие примеры - rocketry, faust. Но тот же Faust подхватило "сообщество", сделало форк и развивает дальше.
В этом у dishka тоже есть плюс, т.к. он входит в небольшую, но все-таки организацию энтузиастов, над проектом работает сразу несколько вовлеченных контрибуторов, и флаг есть кому подхватить
Согласен, тут имеет место быть небольшое смешение понятий. Для меня DI неразрывен от DIP, т.к. без него он приносит только половину пользы. Вторую половину я и хотел показать в статье.
Ну, то, что он мой - не значит, что он самый-самый). FastDepends - это буквально копия API FastAPI и он грешит теми же проблемами в качестве DI
Но он решает несколько другую проблему, нежели просто DI и нужен он мне именно в таком виде. Все-таки в качестве чистого IoC контейнера dishka значительно лучше.
Используйте запуск через
uvicorn
или любой другой ASGI сервер вместо FastAPI CLIНу ничего себе, действительно ожил. Однако, 1 коммит раз в месяц - это не прям "активное развитие". На самом деле, я не против Dependency Injector, просто он очень сильно перегружен, реализация на глобалах и вроде как не thread-safe
Подписался на обоих) Спасибо за материал!
У меня уже глаз дергается от сочетания FastAPI + Celery, но тут он вполне уместен. Отличная работа! Btw, не пробовали сочетание FastAPI + FastStream - интересны ваши мысли на этот счет