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
🏀🏓 Почему ты хороший жнец, средний швец и паршивый игрец на дуде
🔥15
Прогуливался я как-то по питерским лавочкам и наткнулся на книгу "Python за 7 дней". Брать не стал - долго
😁18
Спустя 10 лет пересел с иглы Vegas Pro на DaVinci Resolve. Практиковался на новом ролике, ожидайте
🔥8
Гайд по OpenSource

Как-то я совсем профукал, что у Github есть ГАЙДИЩЕ по OpenSource – https://github.com/github/opensource.guide

Там есть клевые статьи о том:
как контрибутить
как запустить свой OSS
как мейнтейнерам не выгорать
как искать пользователей

И много всякого про построение комьюнити, метрики, поиск инвестиций и вообще все-все-все аспекты OSS. Я чет даже залип на пару часов читая все это. Обидно, что не нашел все раньше, когда стартовал свой проект😅

А еще на Github есть оч крутой список Community Standarts (прям в Insights проекта), который помогает превратить ваш репозиторий из "сделано на коленке" в "выглядит сурьезно".

В общем, мне нравится, насколько Github ориентирован на OpenSource. Надеюсь, вся эта движня с Microsoft не испортит мою любимую платформу😢

Кстати, если вам интересно, могу закинуть свой чеклист с правилами оформления репозитрия Github и конкретными тулами, чтобы вы могли за один вечер прокачать свои репозитории по всем требованиям GH и даже больше😎
7👍2
🌚 Yandex Open Source запустил страницу Good First Issue, где объединены issue всех открытых проектов компании.

Если давно хотели стать кор контрибьютерами Яндекса, то время пришло

https://opensource.yandex/good-first-issue/
🔥3
Собрал через cookiecutter шаблон для FastAPI-проекта в стиле Clean Architecture.

Внутри
1. Все разложено на слои - Domain, Application, Presentation, Infrastructure
2. Все запаковано в docker
3. FastAPI в качестве основного фреймворка + Pydantic для валидации
4. dishka для DI
5. Faststream для работы с брокерами (опционально)
6. SQLAlchemy + alembic для работы с БД
7. httpx + stamina для работы с HTTP-запросами
8. pytest для тестов
9. Makefile для удобной работы
10. При создании проекта можно выбрать БД, кэш и брокер сообщений
11. Пример кода

Когда я изучал все это, мне сильно не хваталого такого репозитория, поэтому, надеюсь вам он будет полезен

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

P.S. Если заметили какие-то ошибки, проблемы, неточности, то милости прошу в комментарии или PR'ы, давайте совместно дошлифуем)
P.S.S Выкачу аналогичный шаблон для Litestar + ролик. Но тут самое главное концепция, поэтому на основе этого уже можно разложить любой микро-фреймворк
🔥17👎1
Минусы Litestar

Внезапно вспомнил, что я меинтейнер фреймворка 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}") # <- тут тоже можно указывать `dependencies`
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? Какие минусы я забыл? Каких фичей не хватает? Что показалось сложным? Буду рад обратной связи :)
4👍2
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