diff options
author | Maxime “pep” Buquet <pep@bouah.net> | 2020-02-17 02:33:30 +0100 |
---|---|---|
committer | Maxime “pep” Buquet <pep@bouah.net> | 2020-02-17 02:39:52 +0100 |
commit | 3577f8877c099229828c426e0cd1e3706bf663b4 (patch) | |
tree | 3b0c51ecbaddb79db24707c0623a4a10828a50b7 | |
parent | a2dc6eea42bd17adfac36457a8f03d786d42d907 (diff) | |
download | poezio-3577f8877c099229828c426e0cd1e3706bf663b4.tar.gz poezio-3577f8877c099229828c426e0cd1e3706bf663b4.tar.bz2 poezio-3577f8877c099229828c426e0cd1e3706bf663b4.tar.xz poezio-3577f8877c099229828c426e0cd1e3706bf663b4.zip |
plugins: Allow entry_points to be registered
It's currently impractical to use out-of-tree plugins that want to be
distributed via distribution channels.
Poezio now looks for every entry point registered in the
`poezio_plugins` entry group, and will use the first matching module
with the specified name.
This also helps specifically for the OMEMO plugin that has a conflicting
name (omemo / omemo) with the backend library.
Thanks jonas for pointing this out.
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
-rw-r--r-- | poezio/plugin_manager.py | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/poezio/plugin_manager.py b/poezio/plugin_manager.py index 2b7b7374..58cfb3d3 100644 --- a/poezio/plugin_manager.py +++ b/poezio/plugin_manager.py @@ -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') |