PYTHONOMANIA
273 subscribers
195 photos
3 videos
1 file
616 links
Откройте для себя мир Python в PYTHONOMANIA!

Идеально подходит как для начинающих, так и для опытных разработчиков. Присоединяйтесь к нам, чтобы достичь совершенства в Python!

Сайт: https://pythonomania.github.io/
Download Telegram
📱Bowler.

Bowler — это инструмент для рефакторинга, который работает на уровне синтаксического дерева Python.

✅Он позволяет выполнять масштабные изменения кода, гарантируя, что результат скомпилируется и будет работать корректно.

✅Bowler поддерживает изменения для любого Python-кода, начиная с версии 2 и выше, но для работы самого инструмента требуется Python 3.6+.

🔹Особенности:

🔘Поддержка Python 2 и 3, но сам Bowler требует Python 3.6+ для работы.

🔘Использует "fluent" API для построения скриптов рефакторинга через селекторы, фильтры и модификаторы.

🔘Поддержка крупных модификаций кода с минимальным риском для работоспособности программы.

🔻Пример использования:

Bowler может использоваться для переименования функций и генерации интерактивного diff:
query = (
Query(<путь к файлам>)
.select_function("старое_имя")
.rename("новое_имя")
.diff(interactive=True)
)


#Python #Refactoring #Bowler #CodeOptimization #Программирование #Refactor #PythonDev

📱Ссылка на репозиторий:
https://github.com/facebookincubator/bowler
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍5🔥2
📱Skylos.

Skylos — это инструмент статического анализа кода на Python, который вычищает мёртвый код.

🔍Что находит Skylos:

🔘Неиспользуемые функции и методы.

🔘Неиспользуемые классы.

🔘Неиспользуемые импорты.

🔘И делает это по всему проекту, даже между модулями.

🔻Пример запуска:
# Установка
pip install skylos

# Анализ проекта
skylos /path/to/project

# Режим с выбором — удалить только то, что хочешь
skylos --interactive

# Предпросмотр изменений без удаления
skylos --dry-run


✅Ставь реакцию, если хочешь меньше мёртвого кода в мире.

#Python #DeadCode #StaticAnalysis #OpenSource #Refactoring #CLI #Skylos #DevTools #PyPI #Rustless

📱Ссылка на репозиторий:
https://github.com/duriantaco/skylos
Please open Telegram to view this post
VIEW IN TELEGRAM
1⚡22👍1
📱Transfunctions.

Transfunctions
— это Python-библиотека, которая позволяет из одного шаблона создавать синхронные, асинхронные и генераторные функции.

✅Transfunctions решает одну из ключевых проблем Python — дублирование кода из-за разделения функций на синхронные и асинхронные.

С помощью шаблонов вы пишете логику один раз и генерируете сразу несколько версий:

🔘Обычную (sync).

🔘Асинхронную (async).

🔘Генератор (generator).

💡Как это работает:

🔘Используются маркеры (sync_context, async_context, generator_context) для выделения специфичных блоков.

🔘На базе одного шаблона создаются разные типы функций без изменения синтаксиса Python.

🔘Поддерживаются superfunctions — функции, которые автоматически определяют, как их вызвать: синхронно, асинхронно или как генератор.

🔹Пример:
@transfunction
def template():
print('so, ', end='')
with sync_context:
print("it's just usual function!")
with async_context:
print("it's an async function!")
with generator_context:
print("it's a generator function!")
yield


➡️Далее:
template.get_usual_function()
template.get_async_function()
template.get_generator_function()


🎯Преимущества:

🔘Нет дублирования кода.

🔘Простая поддержка sync/async/generator.

🔘Подходит для высоконагруженных проектов.

🔘Легко интегрировать в существующий код.

#Python #AsyncIO #Generators #CodeQuality #DevTools #Backend #Transfunctions #Refactoring #CodeReuse #PythonTips

📱Ссылка на репозиторий:
https://github.com/pomponchik/transfunctions
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥3👍22
📱Pyupgrade.

Pyupgrade — это инструмент, который автоматически обновляет ваш Python-код под современные версии языка.

Он сам переписывает устаревший или избыточный синтаксис, убирает легаси и приводит код к актуальным стандартам без ручных правок. Очень удобно ставить его как pre-commit hook — и тогда каждый коммит автоматически делает проект чище.

❓Что делает Pyupgrade:

🔘Заменяет старые строки форматирования на f-строки.

🔘Убирает six, Python-2 конструкции и ненужные костыли.

🔘Упрощает super(), open(), defaultdict, проверки типов.

🔘Обновляет аннотации типов на синтаксис из PEP 585/604.

🔘Чистит лишние импорты и исправляет устаревшие вызовы.

🔘Делает код современным, компактным и читаемым.

✅Если хотите, чтобы ваш проект выглядел так, будто он написан в 2025 — добавьте Pyupgrade в свой workflow.

#Python #Pyupgrade #Refactoring #CleanCode #PreCommit #PythonTools #DevTools

📱Ссылка на репозиторий:
https://github.com/asottile/pyupgrade
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍2🔥2
📱Cohesion.

Cohesion —
это инструмент статического анализа для измерения связанности (когезии) классов в Python.

В программировании cohesion (связанность) определяет, насколько сильно методы и переменные внутри одного модуля или класса логически подходят друг другу. Как писал Роберт Мартин в книге «Чистый код»: «Когда связанность высока, это означает, что методы и переменные класса зависят друг от друга и составляют единое логическое целое».

🔹Преимущества высокой связанности классов:

🔘Меньше сложности: Классы становятся проще, так как выполняют меньше разрозненных операций.

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

🔘Выше переиспользуемость: Разработчикам гораздо проще находить нужные компоненты, если каждый класс сфокусирован на одной задаче.

❓Как работает утилита:

Cohesion проверяет, как именно методы класса используют переменные этого класса (как уровня класса, так и уровня экземпляра self), и выводит процентную оценку для каждого из них.

Пример отчета (cohesion --files example.py --verbose):

Class: ExampleClass1
Function: func1 -> Использует 2 из 3 переменных (66.67%)
Function: func2 -> Использует 1 из 3 переменных (33.33%)
Function: func3 -> Использует 0 из 3 переменных (0.00%)
Total (Общая связанность класса): 33.33%

Если общая оценка слишком низкая, это явный сигнал о том, что класс делает слишком много разных вещей и его пора разбивать (нарушен принцип Single Responsibility).

🛠Полезные фичи:

🔘Флаги --below и --above позволяют отфильтровать вывод (например, подсветить только те классы, у которых связанность ниже 50%).

🔘Интеграция с Flake8: Инструмент работает как плагин для линтера. При проверке кода он автоматически выдаст предупреждение, если найдет перегруженный класс:
example.py:1:1: H601 class has low cohesion

🔧Установка:

pip install cohesion


#Python #CleanCode #Cohesion #Refactoring #Flake8 #Linter #DevTools #StaticAnalysis #OpenSource

📱Ссылка на репозиторий:
https://github.com/mschwager/cohesion
Please open Telegram to view this post
VIEW IN TELEGRAM
2⚡3👍3🔥3
📱Matchify.

Matchify
- это CLI-утилита, которая автоматически преобразует длинные цепочки if/elif/else в современные конструкции match/case (сопоставление с образцом, появившееся в Python 3.10+), сохраняя логику работы и исходное форматирование кода.

Инструмент построен на базе LibCST, благодаря чему не ломает существующие отступы, комментарии и стиль оформления кодовой базы.

🔹Что умеет трансформировать:

🔘Базовые сравнения: Простые проверки равенства (x == 1, x == 2) и идентичности (x is None).

🔘Проверки типов и атрибутов: Превращает конструкции вида isinstance(p, Point) and p.x == 5 в элегантный case Point(x=5):.

🔘Последовательности и срезы: Заменяет громоздкие проверки длины и индексов (len(x) == 2 and x[0] == 0) на распаковку case 0, _:.

🔘Вложенные структуры: Распознает сложные комбинации списков, вложенных объектов и кортежей.

🔘Безопасность по умолчанию: В стандартном режиме (--safe) утилита переписывает код только тогда, когда семантика гарантированно сохраняется. Для спорных случаев есть флаги явных допущений (--assume pure-subjects, --assume identity-equality и др.).

🔘Параллелизм и CI: Поддерживает многопоточную обработку для больших репозиториев, проверку без изменения файлов (--check) и готовые хуки для pre-commit.

🔻Пример до и после:

До:

if isinstance(node, Point) and node.x == 5:
print("x is 5")
elif isinstance(node, Point):
print("other point")


После обработки Matchify:


match node:
case Point(x=5):
print("x is 5")
case Point():
print("other point")


🚀Быстрый запуск:

Запуск на проекте без предварительной установки:

uvx matchify path/to/project/


Или установка в качестве постоянной CLI-утилиты:

uv tool install matchify
# Проверить проект без записи изменений
matchify path/to/project/ --check


❗️Обратите внимание: проект создавался при содействии ИИ-инструментов, поэтому перед коммитом сгенерированных изменений обязательно прогоняйте тесты своего проекта)\.

#Python #Matchify #PatternMatching #Refactoring #DevTools #LibCST #CleanCode #OpenSource #Programming

📱Ссылка на репозиторий:
https://github.com/15r10nk/matchify
Please open Telegram to view this post
VIEW IN TELEGRAM
4⚡1🔥1