Skip to main content

Flexible middleware-based method tools

Project description

flexirope 🪢

FlexiRope — это мощный и гибкий фреймворк для реализации аспектно-ориентированного программирования (AOP) в Python с использованием концепции "умных оберток" (SmartRopes).

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

✨ Ключевые особенности

  • SmartRope: Умный декоратор, который понимает контекст вызова (обычная функция, метод экземпляра, staticmethod, classmethod или property).
  • Гибридная асинхронность: Прозрачная поддержка как синхронных, так и асинхронных функций и плагинов.
  • Система плагинов: Строгие протоколы SyncPlugin и AsyncPlugin для реализации перехватчиков before и after.
  • Слабые ссылки: Использование WeakKeyDictionary для предотвращения утечек памяти при работе с экземплярами классов.
  • Фабрика декораторов: Легкое создание кастомных декораторов на базе ваших плагинов.

📦 Установка

uv add flexirope

Или через pip:

pip install flexirope

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

1. Создание плагина

Плагин может изменять входящие аргументы или результат выполнения.

from flexirope import SyncPlugin

class LoggingPlugin(SyncPlugin):
    def before(self, wire, args, kwargs):
        print(f"Вызов функции: {wire._name} с аргументами {args}")
        return args, kwargs

    def after(self, wire, result):
        print(f"Результат {wire._name}: {result}")
        return result

2. Использование SmartRope

Оборачивайте функции или методы классов:

from flexirope import SmartRope

# Инициализация с плагинами
log_rope = SmartRope(plugins=[LoggingPlugin()])

@log_rope
def multiply(a, b):
    return a * b

multiply(10, 2)
# Вывод:
# Вызов функции: multiply с аргументами (10, 2)
# Результат multiply: 20

🛠 Продвинутое использование

Работа с классами и слотами

Если ваш класс использует __slots__, используйте декоратор @support_ropes, чтобы добавить поддержку __weakref__, необходимую для работы системы:

from flexirope import SmartRope, support_ropes

@support_ropes
class MyService:
    __slots__ = ("data",)
    
    @SmartRope(plugins=[LoggingPlugin()])
    def process(self, value):
        return value.upper()

Асинхронные плагины

AsyncWire автоматически обрабатывает как синхронные, так и асинхронные плагины:

from flexirope import AsyncPlugin

class AsyncValidator(AsyncPlugin):
    async def before(self, wire, args, kwargs):
        # Асинхронная проверка (например, в БД)
        return args, kwargs

Создание своих декораторов через фабрику

Вы можете превратить любой плагин в удобный декоратор:

from flexirope import rope_factory

# Создаем декоратор @trace()
trace = rope_factory(LoggingPlugin)

@trace
def some_func():
    pass

🏗 Архитектура

  • Rope (SmartRope): Точка входа. Управляет жизненным циклом оберток.
  • Wire (BaseWire/AsyncWire): Исполнитель. Создается для каждого контекста (экземпляра или класса) и последовательно вызывает плагины.
  • Plugins: Протоколы, определяющие логику "до" и "после" основного вызова.

📄 Лицензия

MIT License © 2026 SnayperTihCreator

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

flexirope-0.1.2.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

flexirope-0.1.2-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file flexirope-0.1.2.tar.gz.

File metadata

  • Download URL: flexirope-0.1.2.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for flexirope-0.1.2.tar.gz
Algorithm Hash digest
SHA256 7b37a47abe70e8ea9327a20227e27f38c4c1c3b1cacd30b27ec7d337090173d1
MD5 e10008230641a57e65b771e7f81ef547
BLAKE2b-256 c7d6093c975dd2476d7803661c9b18c30ad08af3f18a81d58894386800750bc1

See more details on using hashes here.

Provenance

The following attestation bundles were made for flexirope-0.1.2.tar.gz:

Publisher: publish.yml on SnayperTihCreator/FlexiRope

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file flexirope-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: flexirope-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for flexirope-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 7e485bea8981b72e463b2e968f3e884bd2d25d01cf8a06a08b612155b684a396
MD5 3d35597376afcc362eb533a41794474c
BLAKE2b-256 cd31f95c8563e087e5149533af17a0896fb8e3213bd398b2f3e46e426d3ec8be

See more details on using hashes here.

Provenance

The following attestation bundles were made for flexirope-0.1.2-py3-none-any.whl:

Publisher: publish.yml on SnayperTihCreator/FlexiRope

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page