Вот и наступила золотая осень!В сентябре я каждый день почему-то вспоминал поговорку “от работы дохнут кони, ну а я бесмертный пони”. Сделано было просто куча всего! Новые релизы, библиотеки, крутые фичи, доклад на конференции. А еще наше сообщество сделало кучу интересных проектов в опенсорсе. С меня как всегда статья без нейрослопа и ИИ, с вас как всегда интересные комментарии и лайки! А вот тут ссылка на прошлый дайджест за август.Погнали смотреть, что у нас в питоне происходило! Читать далее
Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели11K
Дайджест

Добро пожаловать в мир находок в опенсорсе!
Вот и наступила золотая осень!
В сентябре я каждый день почему‑то вспоминал поговорку «от работы дохнут кони, ну а я бессмертный пони». Сделано было просто куча всего! Новые релизы, библиотеки, крутые фичи, доклад на конференции. А еще наше сообщество сделало кучу интересных проектов в опенсорсе.
С меня как всегда статья без нейрослопа и ИИ, с вас как всегда интересные комментарии и лайки! А вот тут ссылка на прошлый дайджест за август.
Погнали смотреть, что у нас в питоне происходило!
Мой маленький вклад за месяц
Я очень активно занимался django-modern-rest, но в CPython успел влить вот такой приятный коммит (с помощью от Pablo): теперь при опечатках в именах __future__ импортов, будет красивая ошибка. Было так:
>>> from __future__ import anotations
File "<python-input-0>", line 1
from __future__ import anotations
^^^^^^^^^^
SyntaxError: future feature anotations is not definedСтало так:
>>> from __future__ import anotations
File "<python-input-0>", line 1
from __future__ import anotations
^^^^^^^^^^
SyntaxError: future feature 'anotations' is not defined. Did you mean: 'annotations'?Я всегда и везде топлю за красивые сообщения об ошибках.
Обсуждения PEP'ов
В основном канале вышло два поста (раз, два) про новые PEP'ы в Python. Остановлюсь подробнее на PEP-823 и PEP-824. Остальные можно почитать в канале. Они предлагают добавить «монадические выражения для обработки None значений».
Первый PEP посвящен двум новым операторам ?. и?[], которые семантически идентичны для some?.field следующим кодом:
if some is not None:
field = some.field
else:
field = NoneАналогично some?['field'] делает доступ через __getitem__, вместо __getattr__ в варианте выше. На реалистичном примере выглядит еще лучше:
def get_customer_name(data: Data) -> str | None:
return data.customer?.user?.name.lower()Вот такой простой код разворачивается вот в такую бандуру:
def get_customer_name(data: Data) -> str | None:
"""Get customer name in lower case if it exists."""
customer = data.customer
if customer is not None:
user = customer.user
if user is not None:
return user.name.lower()
return NoneВторой PEP добавляет оператор ??, который заменяет проверку is not None в тернарном выражении на более удобное:
def func(param: int | None = None):
print(-1 if param is None else param)
# =>
def func(param: int | None = None):
print(param ?? -1)Многие в комментариях под постом спрашивают: а почему не использовать просто param or -1? Потому что or проверяет на bool, то есть 0 не будет выведен, даже если будет явно отправлен.
Мне кажется, что первый пункт — обязательный; второй — под вопросом. Хорошо, что авторы разделили ПЕПы на две штуки. Очень жду принятие первого, равнодушен по поводу второго.
Обсуждение: Что вы думаете по поводу данного PEP? Хочется ли такой синтаксис?
Развитие сообщества
Номинировали нашего уважаемого Сергея Мирянова (@zzzzzzerg) на пост CPython Core Developer. Потому что нам нужно больше людей, кто работает над GC. Опрос закончится завтра. Очень надеемся и верим!
А пока можете посмотреть его доклад с прошедшего PyCon:
Шутки про сбор мусора пайтон разработчиками, потому что всех заменили на ИИ — приветствуются в комментариях!
msgspecНаконец‑то я сделал релиз 0.22.0 версии!
Внутри очень много улучшений. Я бы хотел остановиться подробно на одном (остальные можно посмотреть самостоятельно по ссылке). Поговорим про ускорение сериализации dataclass объектов за счет изменения логики получения __dataclass_field__ из инстанса. Посмотрим на код изменения:
// Было:
PyObject *fields = PyObject_GetAttr(obj, self->mod->str___dataclass_fields__);А вот так стало:
static MS_INLINE PyObject *
ms_type_lookup_ref(PyTypeObject *type, PyObject *name) {
#if PY313_PLUS
return _PyType_LookupRef(type, name);
#else
PyObject *out = _PyType_Lookup(type, name);
Py_XINCREF(out);
return out;
#endif
}
static PyObject *
ms_get_dataclass_fields(MsgspecState *mod, PyTypeObject *type, PyObject *obj) {
PyObject *fields = ms_type_lookup_ref(type, mod->str___dataclass_fields__);
if (fields == NULL) return NULL;
if (MS_LIKELY(
PyDict_CheckExact(fields) &&
type->tp_getattro == PyObject_GenericGetAttr
)) {
return fields;
}
Py_DECREF(fields);
fields = PyObject_GetAttr(obj, mod->str___dataclass_fields__);
if (fields == NULL) PyErr_Clear();
return fields;
}
// Стало:
PyObject *fields = ms_get_dataclass_fields(self->mod, type, obj);Что изменилось? Раньше мы проверяли наличие __dataclass_fields__ прямо у каждого инстанса, что часто вызывало python код в __getattr__ инстанса. Теперь, мы сначала смотрим только на атрибут type(instance).__dataclass_fields__, и только если нам ничего не вернулось (или вернулось не то), то мы идем на старый медленный путь. Результат?

Какие‑то кейсы ускорились аж на 73%, какие‑то только на 5%
Круто? Круто. Старайтесь всегда делать так в вашем C‑API коде, избегайте PyObject_GetAttr везде, где можно.
Релиз вышел отличным, очень много полезного! Если еще не пробовали msgspec — самое время!
django‑modern‑restОбсуждение: Довольны ли вы скоростью pydantic? Замечаете ли вы деградацию скорости при увеличении объема данных?
Самый большой блок работы конечно же был тут! За месяц удалось сделать два больших релиза в рамках #opensource_september, было такое сообытие в нашем сообществе, в рамках него:
Создано 92 задачи на GithHub
Из них решено 85
Достигнута цифра в 150 уникальных контрибьюторов
Почти 50 новых контрибьюторов за месяц
Особую благодарность хочется выразить Ольге Пичужкиной за активный вклад в оба релиза.
Релиз 0.15.0
Самое интересное: теперь можно создавать ленивые декларации для методов в переиспользуемых контроллерах, они будут выполняться уже только в финальном контроллере, что дает возможность менять любую мета‑информацию на лету:
class LoginController(Controller[_SerializerT]):
status_code: ClassVar[HTTPStatus] = HTTPStatus.OK
@classmethod
def lazy_spec(cls) -> ModifyAnyCallable:
return modify(status_code=cls.status_code)
@modify.lazy(lazy_spec)
def get(self) -> str:
return 'login'
class CreatedLogin(LoginController[PydanticSerializer]):
status_code = HTTPStatus.CREATEDТеперь CreatedLogin будет использовать свой собственный статус код для ответов. Удобно!
Релиз 0.16.0
Самое интересное: улучшения производительности. Фреймворк стал значительно быстрее в разных местах. Вот сводная таблица.

Мы и дальше продолжим ускорять django‑modern‑rest!
По нашим бенчам мы уже на уровне FastAPI (где‑то чуть быстрее, где‑то чуть медленее). Дальше будет еще быстрее, еще лучше, еще удобнее. И FastAPI можно будет закапывать!
Внутри очень много всего:
Поработали над DX
Улучшили AI тулинг для пользователей
Кратно прокачали OpenAPI схему и процесс генерации. Теперь поддерживаем даже x- атрибуты в типо‑безопасном API!
Провели масштабный аудит безопасности
Улучшили API для расширения фреймворка
Коллеги из core‑команды django-modern-rest доложились на PyCon о проделанной работе:
pustotaОбсуждение: Какие фичи вы бы хотели увидеть в новых релизах
django-modern-rest?
Релизнули тему pustota для codex, вот так выглядит оригинал:

pustota для vscode: https://github.com/pustota‑theme/pustota
А вот так выглядит pustota.codex:

https://github.com/pustota‑theme/pustota.codex
Спасибо Александру за тему!
Проекты сообществаОбсуждение: Нравятся ли вам минималистичные темы? Какие ваши любимые?
Использование готовых DTO (pydantic / adaptix / dataclasses) в качестве JSON поля в Django моделях: https://github.com/skv0zsneg/django‑dto‑field
Yara ORM — async ORM для Python с движком на Rust. Хотелось привычный Django/Tortoise API, но чтобы горячий путь (пул, биндинг, декодинг строк) крутился в компилированном коде на Rust: https://github.com/vsdudakov/yara‑orm
FastAdmin — админка в духе Django Admin, но для FastAPI, Flask и Django, для разных orm — Tortoise, Django ORM, SQLAlchemy, Pony или Yara ORM: https://github.com/vsdudakov/fastadmin
Yara Code — терминальный редактор под работу с кодинг‑агентами (Claude Code, Codex, Cursor CLI): https://github.com/vsdudakov/yara‑code
Скилл для Claude Code и других агентов, позволяющий писать лучшие программы на Go. Внутри — выжимка из 13 источников: гайды Google и Uber, четыре Go‑скилла и четыре донора по агентам и MCP. Всё сведено в один непротиворечивый свод с явной лестницей приоритетов, так что на конфликтах побеждает архитектура, а не линтер: https://github.com/Djarvur/go‑ultimate
Rust бекенд для Asr для GigaAm v3: https://github.com/deeray‑ltd/gigaam‑v3-runtime
Клиент для протокола MQTT (широко используется в IoT): https://github.com/faststream‑community/zMQTT
Для внутренних нужд создаём бинарные патчи, недавно выкатил интерактивную пошаговую иллюстрацию того как работает алгоритм создания патчей (чтобы не объяснять коллегам). Можно менять данные, константы: https://github.com/tochka‑public/bitcut
DB STAT — это веб‑приложение для мониторинга PostgreSQL, Greenplum и Greengage. В одном интерфейсе можно посмотреть состояние баз данных, размеры таблиц, использование памяти, активные запросы, сессии и блокировки: https://github.com/OlegEgoism/DB_STAT
Cотни навыков у агента без раздутого промпта, в 4,4 раза меньше входных токенов: 113k → 25,8k за ход на каталоге из 236 навыков: https://github.com/deyna256/langchain‑skill‑router
Библиотека на Python, созданная для упрощения и ускорения асинхронной разработки. Ее декоратор @appoint_limit_async безопасно защищает от состояния гонки и ограничивает частоту вызовов функций, что крайне полезно для работы с лимитированными API: https://gitlab.com/asurnovsurnov/asynctoolspy
Локальный k8s cluster одной строкой: https://github.com/prostoLavr/libvirtd‑tf‑infra
Markdown Preview Editor — редактор Markdown с живым предпросмотром, работает полностью в браузере: файлы никуда не загружаются, бэкенда нет. Умеет GFM, формулы, Mermaid, вкладки, перетаскивание папок с картинками, экспорт в HTML и PDF: https://github.com/ovasendin/markdown_preview_editor
Хотите попасть в следующий дайджест? Пишите о своем проекте в нашем чате, добавляйте тег #opensource, я обязательно им поделюсь!
Вышел новый релиз mypy с поддержкой sentinel и TypeForm, читаем полный набор изменений для 2.4.0 тут
Вышел новый релиз wemake-python-styleguide с несколькими фиксами багов @ 1.8.1
У django-stubs вышло два релиза: 6.1.1 и 6.1.2, в 6.1.1 мы поменяли правильную типизацию ReleatedManager, а в 6.1.2 добавили официальную поддержку mypy@2.4.0
У django-test-migrations вышел новый релиз 1.7.0 с поддержкой новых версий Django
Вышел новый релиз нашей Dependency Injection библиотеки punq, в версии 0.9.0 мы поправили то, как работают синглтоны зависимостей
Вышел новый 1.8.0 релиз у библиотеки dump-env, она нужна для слияния .env.template файла и ENV переменных в один финальный .env файл, в новой версии мы поддержали полную шаблонизацию значений с флагом --interpolate
Съездил в Суздаль в пресс‑тур с другими блогерами и коллегами из Magnit Tech. Было очень круто. Приятно видеть, как развивается ритейл. Обсудил с коллегами умные кассы, внедрение ИИ, новые способы оплаты, предиктивную аналитику спроса, интересное в логистике, предложил им внедрить wps
Продолжаем активно готовиться к нашей большой встрече сообщества: 17 октября, Нижний Новгород. Бесплатное меропритие от сообщества и для сообщества. Будут очень крутые доклады от ваших любимых ютюберов и опенсорсеров. Ну и конечно тусовка нашего сообщества в баре и до утра. Ждем всех желающих!
А если вы думаете, что я делаю что‑то полезное для мира, то поддержать можно по ссылкам:
Бусти для российских карт: https://boosty.to/sobolevn
GitHub Sponsors для западных карт: https://github.com/sponsors/wemake‑services
Я там ничего не продаю, просто делаю свою работу, если считаете, что я делаю полезное — можно поддержать. Если нет, то я все равно продолжу ее делать.
Подписывайтесь на главный канал сообщества, если вам нравится такое читать. И возможно даже захочется поучаствовать! Буду рад видеть вас частью нашего опенсорс сообщества:)
До встречи в следующем дайджесте и в нашем сообществе!
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Marauders: Your Choice | 0 | 12.46 | 05-10-2026 |
| 2 | Я всё ещё боюсь работать с ИИ | 0 | 6.63 | 05-10-2026 |
| 3 | Реальные истории IT‑найма 2026: продолжение | 0 | 9.78 | 25-09-2026 |
| 4 | Я всё ещё боюсь работать с ИИ | 0 | 6.63 | 05-10-2026 |
| 5 | Осень золотая, а вы бриллиантовые ✨ Поэтому для вас в ... | 0 | 5.62 | 03-10-2026 |
| 6 | Daily Hacker News for 2026-09-26 | 0 | 10.96 | 27-09-2026 |
| 7 | Daily Hacker News for 2026-09-22 | 0 | 10.96 | 23-09-2026 |
| 8 | Daily Hacker News for 2026-09-24 | 0 | 11.62 | 25-09-2026 |
| 9 | Неэффективные менеджеры | 0 | 7.01 | 25-09-2026 |
| 10 | God of Pixels: шесть лет, два языка и один генератор планет | 0 | 8.03 | 05-10-2026 |