Eli Bendersky: Плагины. Кейс-с... Заметка
RSS Планета Python

Eli Bendersky: Плагины. Кейс-стади: Pluggy

Pluggy — это библиотека Python, предназначенная для создания систем плагинов в инструментах и библиотеках. Изначально она была разработана для проекта pytest, а затем выделена в отдельную библиотеку. Основная концепция Pluggy вращается вокруг хуков — функций, предоставляемых хост-приложением и реализуемых плагинами. Хосты определяют хуки с помощью HookspecMarker, а плагины реализуют их с помощью HookimplMarker.Библиотека облегчает создание демонстрационного инструмента под названием htmlize, который преобразует разметку в HTML и поддерживает пользовательские роли и обработку содержимого через плагины. Хост определяет специфические хуки, такие как htmlize_role_handler и htmlize_contents, чтобы позволить плагинам расширять его функциональность. Эти хуки могут принимать различные параметры и возвращать функции для обработки данных.PluginManager библиотеки обрабатывает загрузку плагинов, предоставляя удобный механизм для обнаружения плагинов, зарегистрированных как точки входа setuptools. Это позволяет плагинам, установленным через pip, автоматически обнаруживаться и загружаться хост-приложением. Хосты также могут использовать пользовательские методы обнаружения плагинов, регистрируя плагины напрямую в менеджере.Вызов загруженных плагинов прост; PluginManager координирует вызовы зарегистрированных реализаций хуков. Вызовы хуков обычно возвращают список результатов от всех подключенных плагинов, с возможностью управления порядком выполнения. Плагины реализуют хуки, декорируя свои функции маркером hookimpl хоста.Pluggy хорошо соответствует фундаментальным концепциям плагинов, таким как обнаружение, регистрация и использование хуков. Он предлагает Pythonic-способ предоставления API хоста плагинам, используя стандартные механизмы импорта Python. Хотя создание системы плагинов может быть простым, Pluggy предоставляет расширенные функции, такие как проверка сигнатуры, согласованный сбор результатов и параметры упорядочивания.Решение об использовании Pluggy зависит от потребностей проекта, взвешивая преимущества его расширенных функций по сравнению с добавлением зависимости. Механизм автоматической регистрации точек входа библиотеки особенно полезен для проектов, которые используют стандартные инструменты упаковки Python. В целом, Pluggy предлагает надежное и гибкое решение для создания расширяемых приложений Python.