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

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

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

Arid
- это сверхбыстрый инструмент для поиска дублирующегося кода в Python-проектах, написанный на Rust.

Проект создан как узкоспециализированная замена анализатору дубликатов из Pylint (правило R0801 / утилита symilar). Arid не пытается быть еще одним универсальным линтером, а идеально дополняет Ruff: пока Ruff форматирует и линтит код, Arid берет на себя строгий контроль принципа DRY (Don't Repeat Yourself).

🔹Главные фичи и преимущества:

🔘Производительность Rust: В бенчмарках на реальных кодовых базах (Requests, Pydantic, Polaris) отрабатывает в 190–250 раз быстрее, чем анализатор Pylint.

🔘Понимание синтаксиса Python: В отличие от универсальных текстовых утилит вроде jscpd, Arid парсит синтаксис языка и поддерживает умную нормализацию. При поиске дубликатов можно исключать комментарии, докстринги, блоки импортов и сигнатуры функций.

🔘Baselines: Позволяет зафиксировать текущий техдолг в легаси-проектах (--write-baseline arid-baseline.json). В CI проверяются только новые дубликаты, не ломая сборки на старом коде.

🔘Suppression audit: Намеренные дубликаты можно изолировать директивами # arid: disable / # arid: enable. Опция --suppression-status --fail-on-stale отслеживает и требует удалять комментарии подавления, если код вокруг изменился и дубликата больше нет.

🔘Машиночитаемые отчеты: Поддерживает вывод в Text, JSON, Markdown и стандартный формат SARIF (для бесшовной интеграции с GitHub Code Scanning).

🔘Готовая экосистема: Официальный GitHub Action, хук для pre-commit (анализирует весь проект целиком, а не только staged-файлы) и конфигурация через секцию [tool.arid] в pyproject.toml.

🚀Быстрый старт:

Установка:
# Через uv (изолированно):
uv tool install arid

# Или через pip:
pip install arid


Использование в связке с Ruff:

ruff check .
arid .


Пример конфигурации в
pyproject.toml:

Ini, TOML
[tool.arid]
min-lines = 5
ignore-comments = true
ignore-docstrings = true
ignore-imports = true
ignore-signatures = true
exclude = ["generated/**", "vendor/**"]


#Python #Rust #Arid #Ruff #Pylint #DRY #CodeQuality #CleanCode #DevTools #OpenSource #CICD

📱Ссылка на репозиторий:
https://github.com/sponge-b0b/arid
Please open Telegram to view this post
VIEW IN TELEGRAM
4⚡31
📱Pydantic Pint.

Pydantic Pint
- это библиотека для Python, объединяющая возможности валидации данных из Pydantic с библиотекой для работы с физическими величинами и единицами измерения.

Если ваш проект связан с инженерией, научными вычислениями, геоданными или физикой, вам наверняка знакома проблема: Pydantic отлично проверяет типы и структуры, а Pint берет на себя математику над размерными величинами (метры, килограммы, секунды, градусы). По умолчанию они несовместимы, и разработчикам приходится писать кастомные сериализаторы. pydantic-pint устраняет этот разрыв с помощью чистого синтаксиса typing.Annotated.

🔹Ключевые возможности:

🔘Строгая типизация размерностей: Позволяет задать целевую единицу измерения для поля модели через аннотацию PydanticPintQuantity("unit").

🔘Автоматическая конвертация: Если поле ожидает километры (km), а на вход передали строку "12 meters", библиотека проверит размерность и сама пересчитает значение в 0.012 kilometer. Ошибочные размерности (например, попытка передать секунды вместо метров) приведут к ошибке валидации.

🔘Полная поддержка сериализации: Корректно выгружается в структуры Python и JSON через стандартные методы Pydantic V2 (model_dump() и model_dump_json()).

🔘Современный синтаксис: Не требует наследования от специальных базовых классов — работает прямо внутри стандартного pydantic.BaseModel.

🔻Пример использования:
from typing import Annotated
from pydantic import BaseModel
from pydantic_pint import PydanticPintQuantity
from pint import Quantity

class Coordinates(BaseModel):
latitude: Annotated[Quantity, PydanticPintQuantity("deg")]
longitude: Annotated[Quantity, PydanticPintQuantity("deg")]
# Поле ожидает километры:
altitude: Annotated[Quantity, PydanticPintQuantity("km")]

# Передаем высоту в метрах — библиотека сконвертирует её сама:
coord = Coordinates(
latitude="39.905705 deg",
longitude="-75.166519 deg",
altitude="12 meters",
)

print(coord.altitude)
# -> <Quantity(0.012, 'kilometer')>

# Сериализация в JSON
print(coord.model_dump_json())
# -> {"latitude":"39.905705 degree","longitude":"-75.166519 degree","altitude":"0.012 kilometer"}


📦Установка:
pip install pydantic-pint


#Python #Pydantic #Pint #DataValidation #DataScience #Physics #Engineering #Backend #OpenSource #DevTools

📱Ссылка на репозиторий:
https://github.com/tylerh111/pydantic-pint
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42🔥1