Коробка с питоном
前往频道在 Telegram
Заметки от Python-разработчика: сниппеты, обзоры пакетов, новости и другая полезная информация. Автор: @kiriharu
显示更多462
订阅者
-124 小时
无数据7 天
-530 天
帖子存档
СТО из ДомКлик разобрал в своём докладе такую, казалось бы, банальную вещь как обработка ошибок. Доклад очень интересен структурно - в нём рассмотрены как и сами конструкции (ну а в друг кто забыл?), так и байткод создания исключений, рассмотрено их поведение на примере исходников интерпретатора.
А дальше - глубже! Автор так же затронул потоки, асинхронщину и неявные raise (например как с ZeroDivisionError).
#посмотреть #exceptions
Нашел прекрасную утилиту которая позволяет делать написанный питонячий код лучше - refurb.
Есть у нас вот такой код:
python
for filename in ["file1.txt", "file2.txt"]:
with open(filename) as f:
contents = f.read()
lines = contents.splitlines()
for line in lines:
if not line or line.startswith("# ") or line.startswith("// "):
continue
for word in line.split():
print(f"[{word}]", end="")
print("")
refurb подсветит моменты, где код можно улучшить. Например, использовать кортежи вместо листов или выбрать более удобный метод для какой либо операции.
$ refurb main.py
main.py:3:17 [FURB109]: Use `in (x, y, z)` instead of `in [x, y, z]`
main.py:4:5 [FURB101]: Use `y = Path(x).read_text()` instead of `with open(x, ...) as f: y = f.read()`
main.py:10:40 [FURB102]: Replace `x.startswith(y) or x.startswith(z)` with `x.startswith((y, z))`
main.py:16:9 [FURB105]: Use `print() instead of `print("")`
Refurb не является тайп- или стаилчекером. Его задача - делать код лучше, и не более того.
#утилитыDjango бест-практикс у нас были, а вот по FastAPI не было. А теперь есть :)
#fastapi
Нашел свежий доклад со сравнением использования CTE и SFW в Django ORM и SQLAlchemy, спойлер: джанга не умеет, пишите raw sql.
Ещё внезапно для себя узнал насколько алхимия мощная в плане рефлексии и как с ней легко работать используя уже существующую базу.
#доклад #sqlalchemy #django
Давно как-то искал как можно поднять свой pypi сервер, в итоге остановился на комплексном решении от Sonatype Nexus. На testdriven.io вышла замечательная статья, как это сделать при помощи pypiserver. Всё разворачивается в нашем с вами любимом докере :)
#статья
Давно как-то искал как можно поднять свой pypi сервер, в итоге остановился на комплексном решении от Sonatype Nexus. На testdriven.io вышла замечательная статья, как это сделать при помощи pypiserver. Всё разворачивается в нашем с вами любимом докере :)
#статья
Django 4.1 вышел! Список изменений, из интересного:
1) Асинхронный интерфейс к ORM. Под капотом выполняет
sync_to_async(), про лимиты и подводные камни можно почитать тут. Сделали как и предполагал, чтобы сделать асинхронный get нужно добавить букву a в начало - aget, afirst и т.д.
2) В CBV можно делать асинхронные методы. Подробнее тут.
3) То, чего мне не хватало - ограничения Check, unique и exclusion проверяются во время валидации модели.
4) Добавили команду optimizemigration которая попытается оптимизировать миграции.
#новости #djangoТут сборки PyPy для Python 3.8 и 3.9 зарелизили под маковский M1. Отличная новость для разработчиков которые пользуются новыми макбуками!
#новости
Если вы любите делать игры на Godot или хотите начать их делать, при этом разбираться с GDScript вам лень - вы можете попробовать использовать godot-python. Godot - это прекраснейший движок, чтобы начать разрабатывать игры. Как по мне выглядит получше Unity, для всяких небольших мобильных игр (особенно на фоне последних новостей).
Ребята пытаются добавить поддержку скриптинга на Python в Godot, и судя по тому как развивается проект - получается это у них довольно неплохо.
Из минусов я бы выделил: странный механизм экспорта проекта, вместе с игрой вы экспортите интерпретатор питона (хотя для кого-то это не минус), отсутствие pip из под коробки - его ставить нужно отдельно.
#библиотека #gamedev
Гуглил как мне в Pydantic изменять входящие данные (забыл что это можно делать через валидатор) и натолкнулся на Blue Book - персональную вики одного разработчика, который пишет о различных темах - активизме, здоровье и так далее. Сейчас это обзывают модным словом Digital garden.
Но так как у нас канал о Python, и мы будем говорить о нём, у него есть небольшой раздел связанный с Python, со сниппетами, обсуждением библиотек и концепций.
Очень рекомендую заглянуть!
#ссылочки
Гуглил как мне в Pydantic изменять входящие данные (забыл что это можно делать через валидатор) и натолкнулся на Blue Book - персональную вики одного разработчика, который пишет о различных темах - активизме, здоровье и так далее. Сейчас это обзывают модным словом Digital garden.
Но так как у нас канал о Python, и мы будем говорить о нём, у него есть небольшой раздел связанный с Python, со сниппетами, обсуждением библиотек и концепций.
Очень рекомендую заглянуть!
#ссылочки
Помните, я тут хотел сделать "классы-фильтры", из которых бы генерировался запрос в базу с фильтрацией? Я, конечно, сделал наколеночный вариант (который крутится в проде!) и пошел искать уже готовые библиотеки, и нашел sqlalchemy-filters.
Тут всё проще - фильтры описываются в словарях. Умеет в джоины, сортировку и пагинацию. Идеально подходит для всяких REST API, поэтому если вам нужно быстрое решение - можно не заниматься велосипедостроением и воспользоваться этой библиотекой.
#библиотека
dataset - взаимодействие с базой данных для ленивых людей
Управление данными в реляционных БД имеет множество преимуществ (например организация связей), но они довольно редко используются там, где нужно просто сохранить в БД данные, чтобы потом с ними как-то работать. Из-за этого частенько данные сохраняют в CSV или JSON, но с ними в перспективе сложнее работать - обновлять в них данные или использовать поиск.
Другая проблема - изменяемость данных. Постоянно нужно писать миграции, если схема данных изменилась.
Решением этих проблем - небольшая библиотека dataset. Она представляет собой обертку над SQLAlchemy, которая обеспечивает абстракцию, которая позволяет работать с реляционной БД как с NoSQL (например как с MongoDB)!
Одна из самых крутых фич в dataset - это изменение схемы налету. Вы можете записать любые данные, и если какой-то колонки в базе нет - библиотека создаст её за вас.
Всё это дело прекрасно работает с SQLite, PostgreSQL и MySQL.
GitHub | Документация
#библиотека
Анонсирование программы вознаграждения для urllib3
Немного слоупочная новость (неделя прошла), но всё же - у меинтейнеров появилась острая нехватка времени для допиливания urllib3 v2.0, поэтому они очень срочно ищут контрибьюторов и готовы платить от 100$ (большинство за 300$) за решение проблем и внесение фич в библиотеку. Таким образом они пытаются подогреть интерес к проекту и наконец допилить новую версию. Все награды выплачиваются через OpenCollective.
К слову, в прошлый раз они уже попытались это сделать через Твиттер, всё прошло прошло довольно неплохо, теперь пытаются расширить масштаб.
А масштаб там неплохой - как минимум хотят завести OpenSSL 3.0.
Идея звучит очень здраво - есть возможность заработать денег за вклад в опенсурс. Если интересно и найдете в себе силы - обязательно участвуйте!
Ну а если вам не жалко - можете кинуть деньги в фонд, зная что они пойду на оплату времени разработчиков.
Анонсирование программы вознаграждения для urllib3
Немного слоупочная новость (неделя прошла), но всё же - меинтейнеры urllib3 не успевают допилить v2.0, поэтому очень срочно ищут контрибуторов и готовы платить от 100$ (большинство за 300$) за решение проблем и внесение фич в библиотеку. Таким образом они пытаются подогреть интерес к проекту, а все награды выплачиваются через OpenCollective.
К слову, в прошлый раз они уже попытались это сделать через Твиттер и уже тогда выплатили
Тут кто-то решил сравнить скорость работы list() и []. Очень занятное исследование, там так же есть про наши любимые однострочники с "list comp", почитайте.
*тык*
#статья #хабр
Я нашел новый годный фреимворк, называется он Starlite, и сейчас я вам расскажу, чем он мне понравился.
Starlite - это новый, гибкий асинхронный фреимворк для API, построенный на Pydantic и Starlette. Нет, это не очередной клон FastAPI, потому что у него совершенно другая философия.
По большей части фреимворк испытал влияние NestJS, например у него в основном используются классы-контроллеры, которые уже содержат в себе роуты для сущности и всякие компоненты.
Что ещё здесь есть?
- DI. Он очень прикольный, все зависимости описываются в контроллере.
- Мидлвари построены на мидлварях Starlette и это однозначно плюс.
- Guards, это такие вызываемые функции для работы с ролями, которые управляют доступами к ресурсам.
- Плагины! Например можно сделать кастомную валидацию или парсинг входящих данных.
- DTOFactory с ремаппингом, расширением и так далее. DTO это вообще полезный паттерн, для передачи данных между подсистемами, который исключает какую либо логику в инстансе класса кроме хранения данных и их де/сериализации.
- Классы для создания тестов из под коробки.
- Кеширование ответов с выбором бекенда (есть Redis, Memcached и Etcd).
- А ещё вебсокеты, OpenAPI и многое другое!
Фреимворк очень быстрый, активно развивается, контрибуторы помогают в проблемах с ним. Фреимворк так же задает базовую структуру проекта, (например только в контроллере у тебя должны быть вьюшки для сущности), а это позволяет не "наломать дров" при попытке придумать свою структуру.
В общем, выглядит круто. Буду продолжать наблюдать.
#библиотека
У меня тут небольшая хотелка возникла, я захотел исходя из описаний поля в Pydantic модели генерировать выборку с фильтрацией в БД.
Оказывается, кто-то уже сделал похожее для Django. Выглядит неплохо, но всё же саму генерацию запроса я бы вынес в отдельный класс :)
#django #pydantic #eng #статья
Если у вас была проблема, как организовать очередь задач, которая умеет из под коробки в async - у меня для вас прекрасная новость.
Есть такой проект arq - это очередь задач, построенная на asyncio. Так как она асинхронная, с помощью неё можно добавлять задачи в очередь не блокируя основной поток, а сами задачи могут быть корутинами.
Либа очень маленькая, сам автор раньше контрибутил в rq и знает, что делает.
#библиотеки
Опять пост про ORM, надеюсь пока последний (хотя, кто его знает...)
Новая фича с предложением интересных репозиториев на гитхабе меня радует. Нашел вот такой cheatsheet для Django ORM, описывает пример запроса и генерируемый SQL-код. Очень полезно, если вы знаете SQL, но не знаете как выразить тот или иной запрос через Django ORM.
#ссылочки #django
