Fixed bug in plugin.get_plugins(), edited docstrings

This commit is contained in:
Dmitri Bogomolov 2019-10-18 17:52:00 +03:00
parent c35f48bd0b
commit 44cb975a61
Signed by untrusted user: g1itch
GPG Key ID: 720A756F18DEED13
2 changed files with 27 additions and 7 deletions

View File

@ -0,0 +1,7 @@
"""
Simple plugin system based on setuptools
----------------------------------------
"""
# .. include:: pybitmessage.plugins.plugin.rst

View File

@ -1,19 +1,28 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
src/plugins/plugin.py Operating with plugins
===================================
""" """
import logging
import pkg_resources import pkg_resources
logger = logging.getLogger('default')
def get_plugins(group, point='', name=None, fallback=None): def get_plugins(group, point='', name=None, fallback=None):
""" """
Iterate through plugins (`connect_plugin` attribute of entry point) :param str group: plugin group
which name starts with `point` or equals to `name`. :param str point: plugin name prefix
If `fallback` kwarg specified, plugin with that name yield last. :param name: exact plugin name
:param fallback: fallback plugin name
Iterate through plugins (``connect_plugin`` attribute of entry point)
which name starts with ``point`` or equals to ``name``.
If ``fallback`` kwarg specified, plugin with that name yield last.
""" """
for ep in pkg_resources.iter_entry_points('bitmessage.' + group): for ep in pkg_resources.iter_entry_points('bitmessage.' + group):
if name and ep.name == name or ep.name.startswith(point): if name and ep.name == name or not point or ep.name.startswith(point):
try: try:
plugin = ep.load().connect_plugin plugin = ep.load().connect_plugin
if ep.name == fallback: if ep.name == fallback:
@ -25,6 +34,8 @@ def get_plugins(group, point='', name=None, fallback=None):
ValueError, ValueError,
pkg_resources.DistributionNotFound, pkg_resources.DistributionNotFound,
pkg_resources.UnknownExtra): pkg_resources.UnknownExtra):
logger.debug(
'Problem while loading %s', ep.name, exc_info=True)
continue continue
try: try:
yield _fallback yield _fallback
@ -33,6 +44,8 @@ def get_plugins(group, point='', name=None, fallback=None):
def get_plugin(*args, **kwargs): def get_plugin(*args, **kwargs):
"""Returns first available plugin `from get_plugins()` if any.""" """
:return: first available plugin from :func:`get_plugins` if any.
"""
for plugin in get_plugins(*args, **kwargs): for plugin in get_plugins(*args, **kwargs):
return plugin return plugin