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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1ade44c3cd44ee45f3b71597c6b281424f7a60f0ada68ac57f56ebc26844ff66
|
|
| MD5 |
8adbade58531a3a57e87af45a67fb35a
|
|
| BLAKE2b-256 |
96b8eeae56ffd57ab87e1a8e0e97fd1965ff85ed8b7ac8fcd0387074a882bc92
|
Provenance
The following attestation bundles were made for flexirope-0.1.3.tar.gz:
Publisher:
publish.yml on SnayperTihCreator/FlexiRope
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
flexirope-0.1.3.tar.gz -
Subject digest:
1ade44c3cd44ee45f3b71597c6b281424f7a60f0ada68ac57f56ebc26844ff66 - Sigstore transparency entry: 863084506
- Sigstore integration time:
-
Permalink:
SnayperTihCreator/FlexiRope@15fd17a99f55be02892bb7abebc6b632fbdd9408 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/SnayperTihCreator
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@15fd17a99f55be02892bb7abebc6b632fbdd9408 -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e108217a09654445ddf3392702c02a90250acdff45639103cbbb61aea3b71d67
|
|
| MD5 |
bc7c884f703b0ec4533edeb2ca693525
|
|
| BLAKE2b-256 |
08280b5088f11d4e7f010763c51ac343fef195135ebaafb0d37394735bd45a34
|
Provenance
The following attestation bundles were made for flexirope-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on SnayperTihCreator/FlexiRope
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
flexirope-0.1.3-py3-none-any.whl -
Subject digest:
e108217a09654445ddf3392702c02a90250acdff45639103cbbb61aea3b71d67 - Sigstore transparency entry: 863084529
- Sigstore integration time:
-
Permalink:
SnayperTihCreator/FlexiRope@15fd17a99f55be02892bb7abebc6b632fbdd9408 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/SnayperTihCreator
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@15fd17a99f55be02892bb7abebc6b632fbdd9408 -
Trigger Event:
push
-
Statement type: