From bcb0f62e42580b30b98b7e703bd2f926b0787b51 Mon Sep 17 00:00:00 2001
From: Matthias <matthias.mair@oewf.org>
Date: Mon, 10 Jan 2022 00:59:24 +0100
Subject: [PATCH] remove old loading mechanism

---
 InvenTree/InvenTree/api.py   | 17 ++++-------------
 InvenTree/plugin/plugins.py  | 11 -----------
 InvenTree/plugin/registry.py | 10 ++++++++++
 3 files changed, 14 insertions(+), 24 deletions(-)

diff --git a/InvenTree/InvenTree/api.py b/InvenTree/InvenTree/api.py
index 8249a093aa..069fd9492d 100644
--- a/InvenTree/InvenTree/api.py
+++ b/InvenTree/InvenTree/api.py
@@ -5,8 +5,6 @@ Main JSON interface views
 # -*- coding: utf-8 -*-
 from __future__ import unicode_literals
 
-import logging
-
 from django.utils.translation import ugettext_lazy as _
 from django.http import JsonResponse
 
@@ -21,15 +19,7 @@ from .views import AjaxView
 from .version import inventreeVersion, inventreeApiVersion, inventreeInstanceName
 from .status import is_worker_running
 
-from plugin.plugins import load_action_plugins
-
-
-logger = logging.getLogger("inventree")
-
-
-logger.info("Loading action plugins...")
-action_plugins = load_action_plugins()
-
+from plugin import plugin_registry
 
 class InfoView(AjaxView):
     """ Simple JSON endpoint for InvenTree information.
@@ -110,10 +100,11 @@ class ActionPluginView(APIView):
                 'error': _("No action specified")
             })
 
+        action_plugins = plugin_registry.with_mixin('action')
         for plugin_class in action_plugins:
             if plugin_class.action_name() == action:
-
-                plugin = plugin_class(request.user, data=data)
+                # TODO @matmair use easier syntax once InvenTree 0.7.0 is released
+                plugin = plugin_class.init(request.user, data=data)
 
                 plugin.perform_action()
 
diff --git a/InvenTree/plugin/plugins.py b/InvenTree/plugin/plugins.py
index e2be1e6427..f0150495cb 100644
--- a/InvenTree/plugin/plugins.py
+++ b/InvenTree/plugin/plugins.py
@@ -8,10 +8,6 @@ import logging
 
 from django.core.exceptions import AppRegistryNotReady
 
-# Action plugins
-import plugin.builtin.action as action
-from plugin.action import ActionPlugin
-
 
 logger = logging.getLogger("inventree")
 
@@ -97,13 +93,6 @@ def load_plugins(name: str, cls, module):
     return plugins
 
 
-def load_action_plugins():
-    """
-    Return a list of all registered action plugins
-    """
-    return load_plugins('action', ActionPlugin, action)
-
-
 def load_barcode_plugins():
     """
     Return a list of all registered barcode plugins
diff --git a/InvenTree/plugin/registry.py b/InvenTree/plugin/registry.py
index b7e37d22ba..907f1e179f 100644
--- a/InvenTree/plugin/registry.py
+++ b/InvenTree/plugin/registry.py
@@ -183,7 +183,17 @@ class PluginsRegistry:
         # Log collected plugins
         logger.info(f'Collected {len(self.plugin_modules)} plugins!')
         logger.info(", ".join([a.__module__ for a in self.plugin_modules]))
+    def with_mixin(self, mixin: str):
+        """
+        Returns reference to all plugins that have a specified mixin enabled
+        """
+        result = []
 
+        for plugin in self.plugins.items():
+            if plugin.mixin_enabled(mixin):
+                result.append(plugin)
+
+        return result
     def _init_plugins(self, disabled=None):
         """
         Initialise all found plugins