diff options
authorMaxime “pep” Buquet2020-02-17 01:33:30 (GMT)
committerMaxime “pep” Buquet2020-02-17 01:39:52 (GMT)
commit3577f8877c099229828c426e0cd1e3706bf663b4 (patch)
parenta2dc6eea42bd17adfac36457a8f03d786d42d907 (diff)
plugins: Allow entry_points to be registeredrefs/keep-around/3577f8877c099229828c426e0cd1e3706bf663b4
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>
1 files changed, 9 insertions, 0 deletions
diff --git a/poezio/plugin_manager.py b/poezio/plugin_manager.py
index 2b7b737..58cfb3d 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:
+ 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,