diff --git a/InvenTree/InvenTree/settings.py b/InvenTree/InvenTree/settings.py index a9401a3688..44f3b3cf48 100644 --- a/InvenTree/InvenTree/settings.py +++ b/InvenTree/InvenTree/settings.py @@ -19,24 +19,14 @@ import socket import string import shutil import sys -import importlib from datetime import datetime -try: - from importlib import metadata -except: - import importlib_metadata as metadata - - import moneyed import yaml from django.utils.translation import gettext_lazy as _ from django.contrib.messages import constants as messages -from plugin import plugins as inventree_plugins -from plugin.integration import IntegrationPluginBase - def _is_true(x): # Shortcut function to determine if a value "looks" like a boolean @@ -869,31 +859,7 @@ if not TESTING: if DEBUG or TESTING: PLUGIN_DIRS.append('plugin.samples') -# collect all plugins from paths PLUGINS = [] -for plugin in PLUGIN_DIRS: - modules = inventree_plugins.get_plugins(importlib.import_module(plugin), IntegrationPluginBase, True) - 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() - plugin.is_package = True - PLUGINS.append(plugin) - -# collect integration plugins INTEGRATION_PLUGINS = {} INTEGRATION_PLUGIN_SETTING = {} INTEGRATION_APPS_LOADED = False # Marks if apps were reloaded yet - -for plugin in inventree_plugins.load_integration_plugins(): - # check if package - was_packaged = getattr(plugin, 'is_package', False) - - # init package - plugin.is_package = was_packaged - plugin = plugin() - plugin.is_package = was_packaged - # safe reference - INTEGRATION_PLUGINS[plugin.slug] = plugin diff --git a/InvenTree/plugin/apps.py b/InvenTree/plugin/apps.py index c6968ff90b..b3b9330676 100644 --- a/InvenTree/plugin/apps.py +++ b/InvenTree/plugin/apps.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals +import importlib import pathlib from typing import OrderedDict @@ -7,12 +8,46 @@ from django.apps import AppConfig, apps from django.conf import settings from django.db.utils import OperationalError, ProgrammingError +try: + from importlib import metadata +except: + import importlib_metadata as metadata + +from plugin import plugins as inventree_plugins +from plugin.integration import IntegrationPluginBase + class PluginConfig(AppConfig): name = 'plugin' def ready(self): from common.models import InvenTreeSetting + + # Collect plugins from paths + for plugin in settings.PLUGIN_DIRS: + modules = inventree_plugins.get_plugins(importlib.import_module(plugin), IntegrationPluginBase, True) + if modules: + [settings.PLUGINS.append(item) for item in modules] + + # Collect plugins from setup entry points + for entry in metadata.entry_points().get('inventree_plugins', []): + plugin = entry.load() + plugin.is_package = True + settings.PLUGINS.append(plugin) + + # Initialize integration plugins + for plugin in inventree_plugins.load_integration_plugins(): + # check if package + was_packaged = getattr(plugin, 'is_package', False) + + # init package + plugin.is_package = was_packaged + plugin = plugin() + plugin.is_package = was_packaged + # safe reference + settings.INTEGRATION_PLUGINS[plugin.slug] = plugin + + # activate integrations plugins = settings.INTEGRATION_PLUGINS.items() try: