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