From 93a28bbabac99baa3ff1268c84befd37d4f25d04 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 4 Nov 2021 03:43:39 +0100 Subject: [PATCH] enable setup hooks Fixes #2218 --- InvenTree/InvenTree/settings.py | 6 ++++++ InvenTree/plugin/apps.py | 7 ++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index d46704e85b..38d7ae8d93 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -19,6 +19,7 @@ import string import shutil import sys import importlib +from importlib import metadata from datetime import datetime import moneyed @@ -821,6 +822,11 @@ for plugin in PLUGIN_DIRS: if modules: [PLUGINS.append(item) for item in modules] +# Get plugins from setup entry points +for entry in metadata.entry_points().get('inventree_plugins', []): + plugin = entry.load() + PLUGINS.append(plugin) + # collect integration plugins INTEGRATION_PLUGINS = {} INTEGRATION_PLUGIN_SETTING = {} diff --git a/InvenTree/plugin/apps.py b/InvenTree/plugin/apps.py index ee9bf3bef6..c6968ff90b 100644 --- a/InvenTree/plugin/apps.py +++ b/InvenTree/plugin/apps.py @@ -34,7 +34,12 @@ class PluginConfig(AppConfig): # add them to the INSTALLED_APPS for slug, plugin in plugins: if plugin.mixin_enabled('app'): - plugin_path = '.'.join(pathlib.Path(plugin.path).relative_to(settings.BASE_DIR).parts) + try: + # for local path plugins + plugin_path = '.'.join(pathlib.Path(plugin.path).relative_to(settings.BASE_DIR).parts) + except ValueError: + # plugin is shipped as package + plugin_path = plugin.PLUGIN_NAME if plugin_path not in settings.INSTALLED_APPS: settings.INSTALLED_APPS += [plugin_path] apps_changed = True