Рупитон – Telegram
Channel created
У многих из нас есть свои опенсорс/пет-проекты и желание получить обратную связь, помощь в их развитии, или просто немного звёзд на гитхабе. Администрация @ru_python хочет поспособствовать этому, и собирается провести небольшой эксперимент. Мы ждём ссылки на ваши проекты, отбираем из них несколько на наш вкус, а затем по очереди публикуем их раз в день в канале @rupython_channel и в закреплённом сообщении здесь. Конструктивные обсуждения и критика в разумных пределах приветствуются.

Критерии участия простые:
- Проект написан на Python
- Исходный код доступен на Github, Gitlab, Bitbucket или другом подобном сервисе
- В репозитории есть README с описанием проекта и минимальной документацией
- Для опенсорс проектов требуется наличие свободной лицензии

Для библиотек будет плюсом выложенный на PyPI пакет.

Для подачи заявки нужно написать администрации @ru_python. В сообщении укажите:
- Ссылку на проект
- Его краткое описание
- По желанию можете рассказать о себе
Первый проект, который мы хотим представить - Bitcart от @MrNaif_bel

Это платформа для разработчиков и продавцов, целью которого стоит облегчение внедерения криптовалют в ваши проекты. Есть веб-GUI и SDK. Заявленные системные требованя значительно ниже чем у bitcoin core, при том, что так же возможно добавление других криптовалют. Проект использует SPV(simple wallet verification) кошелек electrum для всего.
Пока проект находится на уровне альфа-версии.

Проект написан с помощью Django
Для работы требуется postgresql и redis
Лицензия: MIT
Подробнее: https://bitcart.readthedocs.io/ru/latest/overview.html#main-features
Наш следующий гость - wemake-python-styleguide (от @sobolev_nikita) представляет собой набор плагинов для flake8.

Он позиционируется как самый строгий линтер. Он правда заставит вас страдать. И, кажется, это имеет смысл для получения идеального кода.


Лицензия: MIT
Статья на хабре: https://habr.com/ru/company/oleg-bunin/blog/433480/
Документация: https://wemake-python-stylegui.de/en/latest/
Рупитон pinned «У многих из нас есть свои опенсорс/пет-проекты и желание получить обратную связь, помощь в их развитии, или просто немного звёзд на гитхабе. Администрация @ru_python хочет поспособствовать этому, и собирается провести небольшой эксперимент. Мы ждём ссылки…»
Интересный проект - geopuzzle от @TyVik
Это открытая версия игры для изучения географии https://geopuzzle.org/
Игроку предлагается собирать карту мира или отдельных стран из кусочков

Для работы требуется postgres с postgis и redis. Написана с использованием django и node.js

Лицензия: GPLv3
Статья на Хабре: https://habr.com/ru/post/427209/.
Исходники: https://github.com/TyVik/geopuzzle
dry-python от @proofit404 - это набор библиотек для построения высокоуровневой архитектуры приложения.

Тут есть свой DI-фрйемворк, свой DSL для описания пользовательской истории, модули для реализации более безопасных функций, линтеры и другое.

Лицензия: BSD 2-clause
Официальный сайт: https://dry-python.org
dataclass_factory от @Tishka17 — быстрая и простая в использовании библиотека для сериализации и десериализации объектов. Не требует конфигурирования при работе с датаклассами, а для более сложных случаев есть гибко настраиваемые схемы и пользовательские хуки на разных этапах обработки данных.

Лицензия: Apache License 2.0
Репозиторий: https://github.com/tishka17/dataclass_factory
PyPI: pip install dataclass-factory
сhannels от @aragaer

Обертка над пайпами и сокетами, позволяющая работать с ними одинаково.
Так же включает в себя обертку над poll, с помощью которой можно сделать простейший сервер.

Лицензия: MIT
Исходники: https://github.com/aragaer/channels
reparsec от @synrst

Библиотека для написания синтаксических анализаторов рекурсивного спуска, вдохновлённая parsec и funcparserlib.

Главная фича — режим работы с исправлением ошибок во входных данных, позволяющий за один запуск парсера определить потенциальные ошибки, способ их исправления, и результат, получаемый после исправления.

Лицензия: MIT
Репозиторий: https://github.com/ethframe/reparsec
PyPI: pip install reparsec
❤‍🔥1
aiogram-dialog от @Tishka17 — это фреймворк для разработки интерактивных сообщений и меню в вашем телеграмм-боте, подобно обычному приложению с графическим интерфейсом.

Позволяет избавиться от копипасты и сделать код более структурированным:
* разделение извлечения данных, рендеринга и обработки действий. Вам ничего не нужно делать для повторного отображения одного и того же контента после разных действий, переходы между состояниями отделены от логики отображения.
* многоразовые виджеты. Вы можете создать календарь или выбор из нескольких вариантов в любой точке вашего приложения без копирования и вставки его внутренней логики
* ограниченный контекст. Любой диалог хранит данные до его закрытия, несколько открытых диалогов обрабатывают свои данные независимо

Лицензия: Apache-2.0
Репозиторий: https://github.com/Tishka17/aiogram_dialog/
Pypi: pip install aiogram_dialog
Обсуждение проекта - @aiogram_dialog
❤‍🔥10👍5🤔2💩2🔥1🕊1
PyHeap от @ivanyu - утилита для дампинга и анализа кучи (heap) CPython-процессов.

Использует GDB для подключения к целевому процессу. Имеет графический браузерный UI для визуализации и исследования дампов. Поддерживает Docker (и вообще Linux namespaces).
По общей идее утилита похожа на связку jmap + Eclipse Memory Analyzer из мира Java.

Лицензия: Apache License 2.0
Репозиторий: https://github.com/ivanyu/pyheap
🔥4👍2
adaptix от @Tishka17 и @pvlzhr — это библиотека для сериализации и десериализации объектов, которая гибко подстраивается под ваши нужды.

Основные преимущества:
1. Высокая производительность — до двух раз быстрее, чем pydantic v2 (бенчмарки)
2. Группировка настроек конвертации, позволяющая следовать принципу DRY.
3. Различные правила сериализации и десериализации для одних и тех же моделей.
4. Работа с любыми моделями (dataclass, NamedTuple, TypedDict, attrs) без необходимости менять что-либо в самих классах.

◾️ Репозиторий
◾️ Документация
◾️ Группа
👍4🔥3❤‍🔥1
mhjson от @dev_kitten — это простой и элегантный Python-пакет для запросов к любым типам JSON-данных.
Он облегчит вам жизнь, предоставив вкус ORM-подобных запросов к вашему JSON.
❤‍🔥62👎1🥰1🤔1
Dishka от @Tishka17 — это удобный и мощный IoC-контейнер.

Если вы следуете принципу Dependency Injection, то благодаря этой библиотеке удобнее управлять созданием и жизнью различных объектов

Основные возможности:
1. Не привязан к другим фреймворкам
2. Поддерживает финализацию зависимостей и asyncio
3. Зависимости кэшируются, поэтому один и тот же объект может быть переиспользован пока он жив.
4. Зависимости имеют ограниченное время жизни (скоуп) и вы сами управляете им
5. Фабрики зависимостей можно группировать в классы и компоненты, что позволяет делать контейнер модульным
6. Можно декорировать объекты, использовать один объект для нескольких типов
7. При старте проверяется корректность конфигурации контейнера, что позволяет исключить многие ошибки

💻 Репозиторий
📚 Документация
🚀 Группа
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍21👎1
FastStream от @diementros и компании Airt - современный фреймворк для разработки асинхронных сервисов.

Если вы работаете с RabbitMQ/Kafka/NATS/[другой брокер] - вам определенно стоит взглянуть на FastStream. Его основные преимущества:

1) Простой и интуитивный API. Описывайте бизнес-логику, а не инфраструктуру
2) In-memory эмуляция брокеров. Тестируйте ваши сервисы без внешних зависимостей в CI
3) Готовая AsyncAPI документация, автоматически сгенерированная прямо из кода проекта
4) Отличная интеграция с телеметрией: удобное логирование, нативная поддержка OpenTelemetry
5) Сериализация входящих сообщений через Pydantic на основе аннотаций типов
6) Собственная минималистичная DI система (для эстетов есть интеграция с dishka)

Также проект отчаяно нуждается в контрибуторах и амбасадорах. Если вы ищете интересный проект для участия в Open Source - это ваш шанс получить галочку в портфолио и сделать мир чуточку лучше. PR Review, участие в discussions, большие и маленькие фичи, правки в документацию - мы будем рады любому участию!

Также в telegram группе мы часто обсуждаем планируемые фичи, так что это ваш шанс напрямую повлиять на развитие проекта.

📱 Репозиторий проекта
📚 Документация
📱 RU Telegram
📱 EN Discord
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥111🥰1
По следам вопроса в чате: как не ошибиться с окружением при установке пакета

Если вы работаете с Python, у вас на машине наверняка больше одного окружения, используй вы virtualenv, pyenv, pipenv, poetry или что-то ещё. По разным причинам бинарник python и других инструментов (`pip`, black, ...) могут разъехаться и начать указывать на разные окружения, что приводит к ошибкам вида "No module named X", хотя вы только что установили X.

Многие проблемы решаются, если вообще отказаться от запуска команд помимо python. Почти все пакеты можно запустить через python -m:

$ python -m pip install numpy
...

Так у нас гарантированно вызовется pip из той же инсталляции, что и python.

Если же это не помогло, вот несколько рецептов для дебага, что же происходит при установке.

Как посмотреть, куда указывает python:

$ which python
/Users/saluev/myproject/.venv/bin/python
Как посмотреть, где python ищет пакеты:
$ python -c "import sys, pprint; pprint.pprint(sys.path)"
['',
'/opt/homebrew/Cellar/python@3.12/3.12.7_1/Frameworks/Python.framework/Versions/3.12/lib/python312.zip',
'/opt/homebrew/Cellar/python@3.12/3.12.7_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12',
'/opt/homebrew/Cellar/python@3.12/3.12.7_1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/lib-dynload',
'/Users/saluev/myproject/.venv/lib/python3.12/site-packages']


Как посмотреть, с каким python работает pip:

$ pip debug
pip version: pip 24.2 from /Users/saluev/myproject/.venv/lib/python3.12/site-packages/pip (python 3.12)
sys.version: 3.12.7 (main, Oct 1 2024, 02:05:46) [Clang 16.0.0 (clang-1600.0.26.3)]
sys.executable: /Users/saluev/myproject/.venv/bin/python3.12
...


Как посмотреть, куда pip установил ваш пакет:

$ pip show numpy
...
...
...
Location: /Users/saluev/myproject/.venv/lib/python3.12/site-packages
...


—————

Мы расширяем тематику канала и ищем авторов. Если вы хотите поделиться библиотекой, новостью или просто хорошим техническим материалом, пишите @saluev или любому другому из админов!
❤‍🔥8🔥1
По следам вопроса в чате: как раздавать контент (картинки, документы, JS), и как это делать приватно

В большинстве популярных веб-фреймворков для Python есть опция раздачи статических файлов. И всегда в документации указано, что эта функциональность — для разработки и отладки, но не для продакшн-решения. А как выглядит продакшн-решение?

Простой уровень — настроить для этого веб-сервер (nginx, traefik, ...). Он будет раздавать статику быстрее, чем веб-фреймворк на Python, не будет тормозить API-запросы и позаботится о многих нюансах (сжатии, HTTP-хедерах для кэширования, рейтлимитах и проч.). Это годится для раздачи статики — JS или картинок, входящих в дизайн сайта.

Следующий уровень начинается, когда нагрузка на сервер большая, распределённая географически, и/или когда у нас появляется UGC (user-generated content), т.е. пользователи сами начинают заливать нам картинки, PDF-документы и прочие файлы в приличном объёме. В таком случае используют CDN (content delivery network) — Amazon S3, его аналоги (есть практически во всех облаках) и продвинутые обёртки для высокой нагрузки. CDN занимается за нас кэшированием (продвинутые сервисы даже могут раскопировать файлы по датацентрам в нескольких регионах для более быстрой раздачи), горизонтальным масштабированием, отказоустойчивостью и так далее.

При этом использование CDN, как правило, крайне дёшево (ставка порядка $0.02/GB в месяц означает, что даже когда ваши пользователи зальют терабайт данных, это будет обходиться всего в $20 в месяц) и очень просто — все облака предоставляют унифицированное S3-подобное API и, соответственно, могут быть подключены посредством одной библиотеки boto3).

Следующий вопрос — что делать, если контент приватный, например, паспорта, контракты и прочие документы, и не должен попадать в руки неавторизованных пользователей. Тут возникает два больших риска:
— ссылка на документ утечёт в интернет (например, её проиндексирует поисковик) и злоумышленник извне сможет получить доступ к документу;
— пользователь с доступом к одному документу займётся обходом адресов и получит несанкционированный доступ к другим документам.

Для решения первой проблемы S3 предоставляет возможность создавать временные подписанные ссылки. То есть мы делаем все файлы в хранилище по умолчанию недоступными никому и на стороне бэкенда выдаём временные ссылки с коротким сроком жизни, чтобы авторизованные пользователи могли скачивать файлы.

Вторая проблема при этом перестаёт быть актуальной, но чтобы перестраховаться на случай случайного изменения настроек приватности, общая рекомендация — использовать UUID (или ObjectId или другие строковые идентификаторы) вместо номеров для приватных файлов. Эта полумера также может быть использована без временных ссылок для не-очень-но-немного-приватного контента; например, в соцсетях фотография может быть защищена настройками приватности, но по прямой ссылке картинка всегда доступна — потому что генерировать приватную ссылку для каждой картинки в зависимости от пользовательских настроек приватности было бы слишком накладно; при этом перебирать адреса и смотреть чужие приватные фото практически невозможно.

—————

Мы расширяем тематику канала и ищем авторов. Если вы хотите поделиться библиотекой, новостью или просто хорошим техническим материалом, пишите @saluev или любому другому из админов!
👍8❤‍🔥1🤗1😎1