Commit 11bb864e authored by Maxime Buquet's avatar Maxime Buquet

Merge branch 'plugins-entrygroup' into 'master'

plugins: Allow entry_points to be registered

See merge request !67
parents a2dc6eea 66323e32
Plugin API documentation
========================
External plugins
----------------
It is possible to create external plugins easily using `setuptools'
entry_point
<https://setuptools.readthedocs.io/en/latest/setuptools.html#dynamic-discovery-of-services-and-plugins>`_
feature. You can register your plugin against the ``poezio_plugins`` entry
group with the following snippet in your project ``setup.py``:
.. code-block:: python
setup(
..
packages=['yourmodule'],
entry_points{'poezio_plugins': 'yourplugin = yourmodule'},
..
)
The plugin will then be available as ``yourplugin`` at runtime.
BasePlugin
----------
......
......@@ -10,6 +10,7 @@ import os
from importlib import import_module, machinery
from pathlib import Path
from os import path
import pkg_resources
from poezio import tabs, xdg
from poezio.core.structs import Command, Completion
......@@ -74,6 +75,14 @@ class PluginManager:
module = import_module('poezio_plugins.%s' % name)
except ModuleNotFoundError:
pass
for entry in pkg_resources.iter_entry_points('poezio_plugins'):
if entry.name == name:
try:
module = entry.load()
except ImportError:
pass
finally:
break
if not module:
self.core.information('Could not find plugin: %s' % name,
'Error')
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment