Evo Dev Club
641 subscribers
5 photos
1 video
324 links
Посилання, анонси, корисні відео для розробників від dev-команди EVO

Про Evo https://jobs.dou.ua/companies/evo/
Автор @brabadu
Download Telegram
Отличный блог для начинающих #python-разработчиков, которые хотят копнуть глубже.

Простыми словами про хранение и обработку строк в питоне, сборку мусора, внутренности классов, GIL и многое другое.

https://rushter.com/blog/
Kenneth Reitz, автор известной python-библиотеки requests, разрабатывает еще и веб-фреймворк.

https://python-responder.org

Как всегда очень простой и удобный API, умеет async/await, встроенная поддержка GraphQL и еще куча приятных вещей.

Вряд ли кто-то бросится переписывать на него все свои django сервисы, но поиграться или сделать какую-нибудь мелочь - идеально.

#python
🐍 В Python 3.8 влили патч, который экономит 8 байт на каждом контейнере (списки, кортежи, дикты, множества).

Ранее на каждый контейнер garbage collector держал три указателя: gc_prev, gc_next, и gc_refcnt. Оказалось, что gc_prev и gc_refcnt никогда не используются одновременно и получилось для обеих задач использовать один указатель.

Ссылка на багтрекер: https://bugs.python.org/issue33597

P.S. В багтрекере вычитал, что похожую оптимизацию применили недавно в php.

#python
📺 Поки чекаєте наступний епізод GoT можна подивитися відео з девелоперської конфи Google I/O 2019 або найбільшого івенту пітоністів PyCon 2019.

- Google I/O: Android, web, Chrome, ML/AI, продукти
- PyCon: Python, ML, opensource, asyncio, etc

#video #python #web
Python всегда описывали как язык "с батарейками". В стандартной поставке есть модули на все случаи жизни. Это выгодно отличает его от, ну например node.js, вспомните историю про leftpad ;)

На последнем саммите разработчков Python развернулась дискуссия о том, что от этого принципа стоит уходить. Стандартные модули развивают неохотно, приходится годамы поддерживать обратную совместимость, core-разработчики по уши заняты самим интерпретатором. Интернет сейчас гораздо доступнее, чем 20 лет назад, может проще всё-таки сделать pip install для того, что нужно конкретно вам?

Один из разработчиков питоновского фреймворка Twisted пишет о том, как может выглядеть "Python kernel"

https://glyph.twistedmatrix.com/2019/06/kernel-python.html

А вот уже и предложение по удалению "севших батареек" в виде PEP 594.

#python
🐍 Python 3.8 вышел!

Из нового:
- оператор :=, который дает возможность присваивать значение переменной внутри другой операции, например внутри условия if, while. Процесс обсуждения этой фичи вынудил Гвидо отказаться от статуса BDFL и породил новый процесс разработки Python. Вот уж действительно рожденная в муках фича
- positional-only аргументы. Раньше любому аргументу функции при вызове можно было дописать его название (напр. foo(5) и foo(bar=5) ). Теперь, если автор функции по какой-то причине считает, что эти параметры могут быть только позиционными, можно заставить
- f-strings стали более удобными для дебага
- запуск REPL через python -m asyncio делает то, что в браузерах сейчас называют top-level await.
- еще куча всего

https://docs.python.org/3/whatsnew/3.8.html

#python
🎸 Паша Филатов, один из наших разработчиков Shafa, написал короткий обзор как будет выглядеть асинхронность в Django 3.0

https://medium.com/@chimamireme/asynchronous-django-35fb2772a0c4?source=friends_link&sk=43bb097f4a63e3270bf0782e195c19d7

#python
🧙‍♀️Закончились праздники, возвращаемся к нормальному ритму!

Наш лучший специалист Александр Коваль уже достаточно давно делает python DSL для Elasticsearch elasticmagic.

https://github.com/anti-social/elasticmagic
Документация https://elasticmagic.readthedocs.io/en/latest/

По-сути это query builder для эластика, с АПИшечкой вдохновленной SQLAlchemy. В ридми написано very alpha, но мы этим пользуемся уже несколько лет и дико довольны.

А недавно наш лучший специалист Макс Киндрицкий сделал порт этой библиотеки на TypeScript. Теперь и на ноде можно работать с эластиком без слез на глазах

https://github.com/kindritskyiMax/elasticmagic-js

#python #javascript #elasticsearch #project
🐍 Конец официальной поддержки Python 2 породил очередную волну статей о переезде на третью версию.

Core-разработчик Mercurial, Gregory Szorc описал их историю миграции в двух частях. В первой хронология портирования, во второй - личное мнение автора о процессе миграции и самом Python 3.

Из интересного, первое упоминание Py3 в репозитории самого меркуриала появилось аж в 2008, затем небольшие изменения в C-extensions в 2010 году. Более-менее систематичная работа над портированием началась аж в 2015 году. А закончилась только в конце 2019! Разработчикам пришлось реализовать свой аналог six, т.е. слой абстракции, который скрывает разницу между 2й и 3й версиями. А также хак с импортом модулей, который на лету подменял все неаннотированные явно строки на byte, вместо ставшим стандартным в 3м питоне unicode.

Из личного мнения уже не удивляет фраза про то, что если бы начинали проект сейчас, писали бы его на Rust. Интересная мысль о том, что чрезмерное, по мнению автора, форсирование юникода в языке и стандартной библиотеке сделало Python языком, который не так удобно использовать в системном\низкоуровневом софте. Да и трудно спорить с тем фактом, что для многих первая юзабельная версия 3й ветки были Python 3.4/3.5, а это 5-7 лет с дня первого релиза 3.0.

https://gregoryszorc.com/blog/2020/01/13/mercurial%27s-journey-to-and-reflections-on-python-3/

#python
🐍 Вышла очередная альфа следующего релиза Python 3.9. Главное, что нас ожидает:

1. Новые операторы у диктов для слияния (dict1| dict2) и дополнения (dict1 |= dict2). Все существующие варианты решения такой пустяковой проблемы либо достаточно громоздкие, либо неочевидны синтаксически
2. Расширение аннотаций. В данный момент большая часть аннотаций - это аннотации типами. Хотя в целом эта фича имеет гораздо больше потенциал. От валидции, до навешивания новой логики переменной. Новый класс Annotated позволит это исправить
3. Переход на релизный цикл раз в год. До этого конкретной даты не было и релиз происходил тогда, когда разработчики считали что продукт готов

Код фриза для версии еще не произошло, возможно появиться еще что-то интересное.

#python
🐍 Про хеширование и равенство в Питоне и других языках

В двух словах: Don’t override hash and eq to force objects to hashable. Use immutable objects instead.

https://eng.lyft.com/hashing-and-equality-in-python-2ea8c738fb9d

#python
💥В Python 3.10 может появиться паттерн-матчинг

https://www.python.org/dev/peps/pep-0622/

Мотивация: чаще всего builtin isinstance в Python используют в контексте if isinstance(a, A): ... elif isinstance(a, B): .... Решили эту конструкцию упростить и сделать более читабельной. Предлагается синтаксис для матчинга с литералами, константами и деструктуризацией объектов:

 match node:
case Node(children=[LParen(), RParen()]):
return True
case Node(children=[Leaf(value="("), Node(), Leaf(value=")")]):
return True
case _:
return False

Если этот PEP примут, это будет первая фича, которая будет использовать возможности нового парсера python. Среди авторов Гвидо и Иван Левкивский.

#python
🦄 Хотите небольшой привкус golang или даже deno в Python? Держите githubimport.

Добавляет хук к импорту, который позволяет прямо из интерпретатора импортировать код с гитхаба

>>> import githubimport
>>> from MineRobber9000.test_modules import blah
>>> blah.foo()
"bar"

https://gist.github.com/MineRobber9000/998fe8c5a183fa2649f937c9d2e0b8b0

Упоминают еще модуль httpimport, который умеет это же, но без каноничного синтаксиса импортов, зато с поддержкой Gitlab/BitBucket

#python
​​🐍 Пару дней назад вышел релиз Python 3.9. Уже даже инфографика с нововведениями есть

https://docs.python.org/release/3.9.0/whatsnew/3.9.html

UPD: Все, кто нашли ошибку на картинке получают ачивку "Орлиный глаз 🦅". Вариант без ошибки можно найти в наших комментариях. Спасибо дорогим читателям!

#python
Forwarded from Python Daily
Python functions naming: an algorithm

Здравый гайд по именованию функций. Особенно полезно почитать тем у кого методы, которые что-то возвращают называются только get_* и никак иначе.

#python #codestyle #medium #pydaily #nothabr
🌌Продолжаем про наш opensource

Darq - асинхронный Celery-like менеджер задач для Python.


Предыстория

В одном из наших проектов мы начинали плавный переход с синхронного на асинхронный Python. Мы активно использовали Celery, и он был главным блокером при переходе - так, как даже постановку в очередь существующих Celery-задач из асинхронного кода реализовать нетривиально и очень костыльно. Не говоря уже о том, что весь новый код мы хотели писать асинхронным, а оставляя Celery пришлось бы дублировать много логики.

Основными нашими требованиями было:
- поддержка асинхронного кода
- возможность постановки задач из синхронного кода
- гибкость настройки: интеграция кастомного логгинга, трассировки, покрытие метриками

Из существующих решений ничего подходящего не нашлось. Так и появился Darq.

Что такое Darq?

Это асинхронный Celery-like менеджер задач, в качестве транспорта использующий Redis. Является форком arq (https://github.com/samuelcolvin/arq).

Основные фичи:
- @task декоратор, .delay() для постановки задачи в очередь (как в Celery)
- Отложенный запуск задачи
- Cron (scheduler)
- Graceful shutdown: при тушении процесса текущие задачи корректно завершаются
- Широкие возможности для кастомизации: сallback-и on_startup, on_shutdown, on_job_prerun, on_job_postrun, on_job_prepublish, on_scheduler_startup, on_scheduler_shutdown позволяют добавлять трассировочную информацию, покрывать метриками задачи и тд

#opensource #python
📽 Я дуже люблю MyPy у Python. На великих проектах ця штука дозволяє хоча б мінімально розуміти які дані ходять в тебе між функціями.

Розумію і всі мінуси, і складність в деяких випадках, і неможливість покрити все зовсім. Але як на мене, це значно краще ніж нічого.

На останньому PyCon US один кор-девів Łukasz Langa зробив кейноут, в якому розказав як спростити собі життя, коли пишете аннотації типів

https://www.youtube.com/watch?v=wbohVjhqg7c

#video #python
👍51