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.3.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.3-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: flexirope-0.1.3.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.3.tar.gz
Algorithm Hash digest
SHA256 1ade44c3cd44ee45f3b71597c6b281424f7a60f0ada68ac57f56ebc26844ff66
MD5 8adbade58531a3a57e87af45a67fb35a
BLAKE2b-256 96b8eeae56ffd57ab87e1a8e0e97fd1965ff85ed8b7ac8fcd0387074a882bc92

See more details on using hashes here.

Provenance

The following attestation bundles were made for flexirope-0.1.3.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.3-py3-none-any.whl.

File metadata

  • Download URL: flexirope-0.1.3-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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e108217a09654445ddf3392702c02a90250acdff45639103cbbb61aea3b71d67
MD5 bc7c884f703b0ec4533edeb2ca693525
BLAKE2b-256 08280b5088f11d4e7f010763c51ac343fef195135ebaafb0d37394735bd45a34

See more details on using hashes here.

Provenance

The following attestation bundles were made for flexirope-0.1.3-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