uz
Feedback
Коробка с питоном

Коробка с питоном

Kanalga Telegram’da o‘tish

Заметки от Python-разработчика: сниппеты, обзоры пакетов, новости и другая полезная информация. Автор: @kiriharu

Ko'proq ko'rsatish
462
Obunachilar
-124 soatlar
Ma'lumot yo'q7 kunlar
-530 kunlar
Postlar arxiv
СТО из ДомКлик разобрал в своём докладе такую, казалось бы, банальную вещь как обработка ошибок. Доклад очень интересен структурно - в нём рассмотрены как и сами конструкции (ну а в друг кто забыл?), так и байткод создания исключений, рассмотрено их поведение на примере исходников интерпретатора. А дальше - глубже! Автор так же затронул потоки, асинхронщину и неявные 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. На testd
Давно как-то искал как можно поднять свой 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 - взаимодействие с базой данных для ленивых людей Управление данными в реляционных БД имеет множество преимуществ (на
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 - у меня для вас прекрасная но
Если у вас была проблема, как организовать очередь задач, которая умеет из под коробки в async - у меня для вас прекрасная новость. Есть такой проект arq - это очередь задач, построенная на asyncio. Так как она асинхронная, с помощью неё можно добавлять задачи в очередь не блокируя основной поток, а сами задачи могут быть корутинами. Либа очень маленькая, сам автор раньше контрибутил в rq и знает, что делает. #библиотеки

Опять пост про ORM, надеюсь пока последний (хотя, кто его знает...) Новая фича с предложением интересных репозиториев на гитх
Опять пост про ORM, надеюсь пока последний (хотя, кто его знает...) Новая фича с предложением интересных репозиториев на гитхабе меня радует. Нашел вот такой cheatsheet для Django ORM, описывает пример запроса и генерируемый SQL-код. Очень полезно, если вы знаете SQL, но не знаете как выразить тот или иной запрос через Django ORM. #ссылочки #django