Привет!
Меня зовут Никита Соболев. Я занимаюсь опенсорс разработкой полный рабочий день.
Тут я рассказываю про свои интересные проекты, коммиты, доклады, и тд.
Поддержать: https://boosty.to/sobolevn
Информация о канале обновлена 05.10.2025.
Привет!
Меня зовут Никита Соболев. Я занимаюсь опенсорс разработкой полный рабочий день.
Тут я рассказываю про свои интересные проекты, коммиты, доклады, и тд.
Поддержать: https://boosty.to/sobolevn
Внезапно вспомнил, что я меинтейнер фреймворка Litestar.
Для тех, кто пропустил:
> Litestar не является микро-фреймворком. В отличие от таких фреймворков, как FastAPI, Starlette или Flask,
> Litestar изначально включает множество функций, необходимых для типичного современного веб-приложения,
> таких как интеграция с ORM, клиентские и серверные сессии, кэширование, поддержка OpenTelemetry и многое другое.
from dataclasses import dataclass
from litestar import Litestar, post
@dataclass
class User:
name: str
@post(path="/")
async def index(data: User) -> User:
return data
app = Litestar(route_handlers=[index])
И он классный:
- Быстрый
- Работает с Pydantic
, msgspec
и даже базовые dataclasses
в качестве моделей
- Предоставляет базовые примитивы для работы с логикой: DTOs, Repository, Service (часть из них в advanced_sqlalchemy
, очень удобно для крудов)
- Умеет из коробки в аутентификацию, метрики, DI, CORS, CSRF, кеширование, логирование, мониторинг, вебсокеты, htmx, сессии, загрузку файлов, разные ORMки и много всего еще
- Можно делать не только API, но и нормальные шаблончики
- Он с нами уже несколько лет, он работает
- А еще его делает большая команда, а не один человек
Кароче, просто лучший фреймворк (кроме Django, конечно).
Но! Сегодня речь пройдет про минусы. Которые скоро пофиксят в v3
(или которые все еще будут с нами)
Минусы
1. Самое главное: DI на именах. Да. Вот так:
class UserController(Controller):
path = "/user"
dependencies = {"user": Provide(retrieve_db_user)}
@patch(path="/{user_id:uuid}") # async def get_user(self, user: User) -> User: ...
Что очень плохо. Тип user
, который мы указываем в dependencies
и в параметрах может не совпасть. Есть некоторая валидация для такого в рантайме, но все равно очень рисково.
Планы? Я предложил использовать dishka в качестве дефолтного DI, а старый задеприкейтить.
Высказать свое обоснованное мнение можно тут (или просто лайкнуть пост): https://github.com/orgs/litestar-org/discussions/4377
Хочу верить, что мы сможем поправить данную проблему в v3
, ваши голоса – могут помочь :)
2. DI в middleware. А точнее отсутствие DI в middleware. Пока что приходится прокидывать зависимости через app.state
, что очень криво. Данная проблема признана ошибкой дизайна и будет исправлено в v3
, ура!
3. Своя схема для OpenAPI. Litestar переписал дефолтную схему pydantic, что позволило использовать более строгую схему, но переодически новые типы отваливаются. Например, pydantic.Json
не обработан, имеет кривую схему. Сейчас мы обсуждаем стоит ли откатиться до дефолтной схемы. Стоит ли?
4. PydanticPlugin
игнорирует ConfigDict
, который объявлен в самой моделе, в v3
будет пофикшено. Сейчас параметры вроде by_alias
и round_trip
надо передавать в плагин. Что свело меня с ума, искал ошибку несколько часов
5. CLI местами разваливается, очень много багов и плохая читаемость
6. Очень сырая документация. Очень плохая навигация и структура, очень мало примеров, мало людей ее читало, мало людей находило проблемы, мало людей присылало PRы. Тут нужна ваша помощь очень сильно!
Итог
Отличный фреймворк, у которого есть некоторое количество детских проблем и ошибок проектирования. Но что отличает? Про них говорят, их исправляют.
Полный роадмап для версии v3
: https://github.com/litestar-org/litestar/issues/4009
Обсуждение: Как вам Litestar? Какие минусы я забыл? Каких фичей не хватает? Что показалось сложным? Буду рад обратной связи :)
Сегодня будет пост для тех, кто любит заглядывать в будущее.
Поговорим про то, что только-только начинают делать в питончике.
JIT и FT
https://github.com/python/cpython/issues/139038
Описывает планы на 3.15 и 3.16 по развитию JIT.
Самое важное планируют:
- Сделать JIT на 5-10% быстрее для всех случаев, до 50% скорости для краевых случаев
- Трассирующий JIT: https://github.com/python/cpython/issues/139109
- Поддежка Free-Threading режима: https://github.com/python/cpython/issues/133171
- К 3.16 планируют найти еще 2х меинтейнеров, потому что сейчас очень мало людей работают над джитом. Если всегда хотели - присоединяйтесь!
https://discuss.python.org/t/pre-pep-safe-parallel-python/103636
Обсуждение по будущему FT и subinterpreters как практических концепций.
Марк Шеннон предлагает сделать из Python Erlang 🌚
Каждому объекту предлагают добавить:
- Метод __freeze__()
в большинство классов, чтобы делать объект иммутабельным (чтобы можно его было шарить между потоками и интерпретаторами)
- Метод __protect__(self: Self, obj: T) -> T
, чтобы помечать объекты как "защищенные". Их можно менять, но с мьютексом
- И сам __mutex__
, чтобы работать с защищенными объектами
https://discuss.python.org/t/add-virtual-threads-to-python/91403
Еще одно предложение от Марка – virtual threads в Python!
Кажется, что не только мне не нравится asyncio
.
Обсуждение на очень раннем шаге, можно принять участие :)
PEPs
https://peps.python.org/pep-0798 позволит нам писать вот такой код:
list_of_lists = [[1, 2], [3, 4]]
flat_list = [*l for l in list_of_lists]
Если ПЕП примут, то можно будет делать unpacking прямо в comprehension. Не надо будет делать цикл или городить всякое сложное внутри. Крутое предложение, думаю, что его примут.
https://peps.python.org/pep-0799
Кратко:
- Добавляет пакет profiling
в CPython
- Чистый питоновский profile
теперь deprecated
- В 3.15 добавили profiling.sampling
- cProfile
теперь будет доступен еще и как profile.tracing
https://peps.python.org/pep-0728
Добавляет такую возможность в TypedDict
:
class Movie(TypedDict, extra_items=str):
name: str
rating: float
year: int
Что значит, что три ключа имеют явный тип, любые другие ключи имеют fallback тип str
. Что удобно, если у нас гигантский json с кучей похожих полей, например.
И конечно можно будет указать такое:
class Movie(TypedDict, closed=True):
name: str
rating: float
year: int
Что будет значить, что никаких других ключей в словаре быть не может. Джва года ждал такую фичу!
https://peps.python.org/pep-0791 предлагает добавить новый модуль в Python: intmath
Решает старые проблемы модуля math
. Если интересуетесь математикой в питоне – ПЕП для вас.
Обсуждение: как вам такой формат со ссылками? Что вы больше всего ждете из списка выше? Какие фичи вас бесят?
| Поддержать | YouTube | GitHub | Чат |
easyp
– пакетный менеджер, билд-система и линтер для .proto
файлов.
Хоть easyp
и написан на #go 😱, одна из его фишек в том – что вы можете использовать любые плагины для генерации финального кода: он может быть хоть на #python, хоть на #rust.
Если много используете ProtoBuf – обязательно для ознакомления!
Как оно работает?
# Секция для правил линтера:
lint:
use:
- DEFAULT
# Секция с зависимостями:
deps:
- github.com/googleapis/googleapis
- github.com/grpc-ecosystem/grpc-gateway@v2.20.0
# Секция для правил сборки и генерации итоговых файлов:
generate:
plugins:
- name: go
out: .
opts:
paths: source_relative
- name: go-grpc
out: .
opts:
paths: source_relative
require_unimplemented_servers: false
Прощайте огромные Makefile
с кучей скриптов для сборки.
Что будет в видео?
В видео:
- спросим зачем ребята его сделали
- узнаем как оно работает
- покажем, откуда можно устанавливать зависимости
- потыкаем разные юзкейсы
- поговорим про безопасность решения
- обсудим планы на следующие релизы
- расскажем как находить ломающие изменения в вашей ProtoBuf спецификации
А еще в видео кот на гитаре играет!
Репозиторий: https://github.com/easyp-tech/easyp
Документация: https://easyp.tech
Чатик сообщества: @easyptech
Поставьте пацанам звездочек, если проект понравился!
Обсуждение: Какие инструменты для ProtoBuf вы используете? Какие есть пролемы? Что можно было бы добавить в качестве новой фичи в easyp?
| Поддержать | YouTube | GitHub | Чат |
Владелец канала не предоставил расширенную статистику, но Вы можете сделать ему запрос на ее получение.
Также Вы можете воспользоваться расширенным поиском и отфильтровать результаты по каналам, которые предоставили расширенную статистику.
Также Вы можете воспользоваться расширенным поиском и отфильтровать результаты по каналам, которые предоставили расширенную статистику.
Подтвердите, что вы не робот
Вы выполнили несколько запросов, и прежде чем продолжить, мы ходим убелиться в том, что они не автоматизированные.