PyLounge - программирование на Python и всё о IT 🐍 – Telegram
PyLounge - программирование на Python и всё о IT 🐍
2.51K subscribers
405 photos
15 videos
28 files
457 links
Сообщество канала PyLounge. YouTube: https://www.youtube.com/channel/UCru5FZQN_Xa0tKfrBqUIcng
Download Telegram
PEP 810: Explicit lazy imports

На обсуждение вышел новый PEP, который предлагает добавить в Python 3.15 новый вид импортов.

https://peps.python.org/pep-0810/


lazy import json
lazy from json import dumps


Как будет работать?

Импорты не будут подгружаться до момента первого обращения к объекту.


import sys

lazy import json

print('json' in sys.modules) # Модуля еще нет

# Загрузка начинается вот тут:
result = json.dumps({"hello": "world"})

print('json' in sys.modules) # Теперь он загружен


Зачем?

- Быстрее загружать модули
- Позволит убрать много импортов из функций / методов
- Позволит убрать if TYPE_CHECKING: import some_module, было множество предложений по добавлению import type конструкции, пример: https://discuss.python.org/t/type-only-imports/96755
- Позволит решать циклические импорты
- Убирает необходимость в LazyLoader и страшных вещей вроде https://scientific-python.org/specs/spec-0001

Детали реализации

Планируется добавить:
- Функцию __lazy_import__ (аналог __import__ для импорта )
- Специальный атрибут на уровне модуля __lazy_modules__, где будут храниться ленивые импорты текущего модуля
- types.LazyImportType как тип нового "ленивого" модуля (аналог `types.ModuleType`)
- sys.lazy_modules для списка ленивых модулей глобально
- sys.set_lazy_imports_filter для глобальных настроек импортов, что? 🤯
- Байткод IMPORT_NAME получит флаг, является ли импорт ленивым
- Ошибки в именах модулей тоже будут ленивыми https://peps.python.org/pep-0810/#reification

Из забавного: import * не будет доступен в lazy режиме.


# SyntaxError: lazy from ... import * is not allowed
lazy from json import *


Реализация: https://github.com/LazyImportsCabal/cpython/tree/lazy

Обсуждение: как вам?

Бонус: меня тут в комментах спрашивают, куда я пропал. Я пропал в опенсорсе, пилю django-modern-rest. Простую и удобную библиотеку для REST API в Django. Пока на стадии pre-alpha, но уже скоро будет первый релиз. Можно уже ставить , чтобы потом всем говорить, что первыми узнали про новую модную штуку!

https://github.com/wemake-services/django-modern-rest

| Поддержать | YouTube | GitHub | Чат |
🔥9🤮1💩1
Постоянная рубрика МОИ КОРЕША

Недавно мой коллега из Самолета Лев сделал свой pre-commit-hook - shrimport (строго open source, как мы любим).

Этот хук позволяет прогнать Python-проект и привести относительные пути к абсолютным (по правилам PEP).

Лев уже апробировал инструмент и поправил импорты в django и django-mongodb-backend.

Пользуйтесь на здоровье. А еще можно накидать звездочек репозиторию, автору будет приятно 😉

https://github.com/lyova24/shrimport
🔥13
🌟 💫 Clean Architecture Litestar Project Template

Не так давно я выкладывал cookiecutter шаблон FastAPI-проекта в стиле Clean Architecture. Не без шероховатостей, но благодаря вашему фидбеку удалось исправить большинство ошибок и причесать проект (но он будет допиливаться и дальше!).

Поэтому теперь, как и обещал, представляю вашему вниманию аналогичный шаблон только уже с Litestar вместо FastAPI. В часте Litestar я намерено ограничился только функционалом HTTP-фреймворка

https://github.com/Peopl3s/clean-architecture-litestar-project-template

P.S. Буду рад любому фидбеку, особенно фидбеку, который поможет улучшить шаблон :)
🔥4👍3🤩2
Там Никита Соболев (гений, миллиардер, филантроп, кор контрибьютер CPython) готовит альтернативу DRF - Django Modern Rest

Из более менее достойных замен DRF могу вспомнить разве что Django-Ninja да и то там всё не так гладко. Поэтому у DMR есть все шансы выстрелить - асинк есть, слои есть, валидация есть. Проект перерабатывает опыт DRF, Litestar, Django Ninja и улучшает его + привносит собственные идеи и концепции.

Проект в активной фазе разработки, поэтому если хотите помочь и вписать себя в историю - welcome :_)

https://github.com/wemake-services/django-modern-rest
🥰54😁1🤮1
Тут еще канальчик есть https://news.1rj.ru/str/opensource_findings_python
Там публикуют issues в разных репозиториях (от litestar до cpython). Можно забирать и контрибутить в open source, улучшать проекты, которыми пользуются сотни тысяч человек)

По django-modern-rest тоже есть (будут)
🔥5
Кажется что-то затевается
🔥10👍4
Зачем нужен новый REST API для Django?

Последний месяц я крайне увлечен созданием https://github.com/wemake-services/django-modern-rest
(Кстати, у нас уже >200 звезд и 26 контрибьюторов при 0 релизов)

Ключевой вопрос – зачем? Что будет нового?

Во-первых, я крайне сильно люблю Django. Основная причина – под него есть буквально любые библиотеки. Все то, что в FastAPI нужно героически писать руками – в джанге уже давно есть и работает.
Но, есть несколько основных причин, почему люди думают, что не любят джангу:
1. DRF, тут без лишних слов – он ужасен. Нет типизации, нет async, очень сложно работать с ним в сложных случаях
2. Многие считают, что джанга - сложная. Однако, она как FastAPI или Litestar может спокойно уместиться в один файл: https://django-modern-rest.readthedocs.io/en/latest/pages/micro-framework.html
3. Есть критика за архитектуру: тут нечего особо даже комментировать. На любом фреймворке можно писать хорошо, на любом можно писать плохо. Слой фреймворка очень тонкий
4. Медленный. А вот тут остановимся подробнее.

На скринах выше можно сравнить, что с django-modern-rest, без нескольких будущих оптимизаций (привет cython и rust!), голая джанга начинает выглядеть не так уж и медленнее FastAPI: бенчи.

Во-вторых, Django на длительный срок был в плену DRF. Который морально устарел еще в середине десятых.
Потом появилась django-ninja, которая хоть и намного лучше, но все равно не решает главную задачу: интеграция с существующими тулами. Конечно, если затащить FastAPI дизайн в чужой мир, то ничего не будет нормально работать 🌚️

Вот такие проблемы мы решаем.

Одной строкой:
- Супер строгая OpenAPI схема и валидация при разработке, что мы ее соблюдаем
- Полная типизация всего
- Нормальный способ создания АПИ, без god-functions a-la FastAPI
- async без sync_to_async
- Быстро: msgspec для парсинга json (самый быстрый способ в питоне), практически 0 работы в рантайме (все делаем при импорте), оптимизации роутера (быстрее дефолтного в 51 раз)
- Пидантик, msgspec, или любой другой способ выражать модели. Хоть adaptix
- Полная поддержка всего существующего в Django. От декораторов до миддлварь (с полной валидацией и OpenAPI схемой!)
- OpenAPI схема из коробки
- Удобное тестирование с polyfactory
- property-based тесты вашего АПИ одной командой благодаря schemathesis

Что еще будет:
- RSGI (да, на #rust скорее всего) под granian, в теории можем побить FastAPI после такого
- SSE с автоматической OpenAPI спекой и умной валидацией схемы
- JWT или любая другая аутентификация
- Какие-то части (скорее всего валидацию) мы компильнем cython, чтобы было еще быстрее

Modern? Modern!
Осталось дождаться. Релиз скоро!
И еще скоро будут несколько новых видео.

Мы регулярно постим задачки в @opensource_findings_python, так что можно нам помочь.
А если кто хочет мне закинуть на развитие опенсорса (за написание 32500 строк кода за 2 недели), то мой бусти открыт: https://boosty.to/sobolevn
Ну и звезды можно ставить, конечно же. Там посмотрите, какие люди нас уже советуют.

Большое спасибо Александру, Алексею, Роману, Максиму и всем остальным за неоценимую помощь. Пацаны, без вас никак! Лучшее сообщество!

Обсуждение: а чего бы вам хотелось в modern rest фреймворке? Чего сильно не хватает сейчас?
👍105🔥2
Есть мнение, что хорошего качественного контента для мидл и выше не существует. Он существует, просто его не так просто найти.

Делюсь подобным кладезем знаний от автора dishka - https://news.1rj.ru/str/advice17
🔥10
Немного базы из конфлюенса Самолета
14🤡3💩1
А помните раньше было модно делиться папками-подборками разных тг-каналов? Тренд дошел и до меня (спустя 52 года)

Поэтому делюсь свой подборкой тг-каналов. Здесь много разного - от каналов с полезной инфой для прокачки до чатов и мемов. Залетайте, мб найдете для себя что-то интересное

https://news.1rj.ru/str/addlist/akUhw65HHcUxZjFi
👍61🔥1💩1