From e74b780017661162a128ed58a1aaec1adfbba2d2 Mon Sep 17 00:00:00 2001 From: Jan Lerking Date: Wed, 17 Jul 2024 18:50:47 +0200 Subject: [PATCH] Added manager and register. /JL --- src/pluginlib/__init__.py | 2 ++ src/pluginlib/pluginlib.ini | 2 +- src/pluginlib/pluginlib_manager.py | 0 src/pluginlib/pluginlib_register.py | 19 +++++++++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/pluginlib/pluginlib_manager.py create mode 100644 src/pluginlib/pluginlib_register.py diff --git a/src/pluginlib/__init__.py b/src/pluginlib/__init__.py index 265aef5..af79480 100644 --- a/src/pluginlib/__init__.py +++ b/src/pluginlib/__init__.py @@ -1,2 +1,4 @@ from . import pluginlib_init +from . import pluginlib_manager +from . import pluginlib_register from . import pluginlib_relay \ No newline at end of file diff --git a/src/pluginlib/pluginlib.ini b/src/pluginlib/pluginlib.ini index e34a86c..78ace17 100644 --- a/src/pluginlib/pluginlib.ini +++ b/src/pluginlib/pluginlib.ini @@ -1,3 +1,3 @@ [pluginlib] -build = 5 +build = 6 diff --git a/src/pluginlib/pluginlib_manager.py b/src/pluginlib/pluginlib_manager.py new file mode 100644 index 0000000..e69de29 diff --git a/src/pluginlib/pluginlib_register.py b/src/pluginlib/pluginlib_register.py new file mode 100644 index 0000000..75d9fd7 --- /dev/null +++ b/src/pluginlib/pluginlib_register.py @@ -0,0 +1,19 @@ +import importlib.metadata as importlib_metadata + +def register_plugin(name, namespace, entry_point) -> None: + """Registers a plugin dynamically without needing to install as a package. + Args: + name (str): Name of plugin to be referenced. + namespace (str): Name of plugin namespace. + entry_point (str): Entry point in the form: some.module:some.attr + """ + ep = importlib_metadata.EntryPoint(name, entry_point, namespace) + e = ExtensionManager(namespace) + if namespace in e.ENTRY_POINT_CACHE: + entry_points = e.ENTRY_POINT_CACHE.get(namespace) + if name not in [entry_point.name for entry_point in entry_points]: + entry_points.append(ep) + e.ENTRY_POINT_CACHE[namespace] = entry_points + else: + e.ENTRY_POINT_CACHE[namespace] = [ep] + ep.load() \ No newline at end of file