From 6f8909c710aa5fd12a40d00cfef0686de70b17ce Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 19 Sep 2021 17:32:44 +0200 Subject: [PATCH] mixin registry --- InvenTree/plugins/integration/integration.py | 35 +++++++++++++++++-- .../templates/InvenTree/settings/plugin.html | 8 +++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/InvenTree/plugins/integration/integration.py b/InvenTree/plugins/integration/integration.py index 23831a747e..b4361cb416 100644 --- a/InvenTree/plugins/integration/integration.py +++ b/InvenTree/plugins/integration/integration.py @@ -18,14 +18,37 @@ class MixinBase: if not hasattr(self, '_mixins'): self._mixins = {} self._mixins[key] = fnc_enabled + self.setup_mixin(key, cls=cls) + def setup_mixin(self, key, cls=None): + if not hasattr(self, '_mixinreg'): + self._mixinreg = {} + + # get human name + human_name = getattr(cls.Meta, 'MIXIN_NAME', key) if cls and hasattr(cls, 'Meta') else key + + # register + self._mixinreg[key] = { + 'key': key, + 'human_name': human_name, + } + + @property + def registered_mixins(self): + mxins = getattr(self, '_mixinreg', None) + if mxins: + mxins = [a for a in mxins.values()] + return mxins # region mixins class SettingsMixin: """Mixin that enables settings for the plugin""" + class Meta: + MIXIN_NAME = 'Settings' + def __init__(self): super().__init__() - self.add_mixin('settings', 'has_settings') + self.add_mixin('settings', 'has_settings', __class__) self.settings = self.setup_settings() def setup_settings(self): @@ -50,9 +73,12 @@ class SettingsMixin: class UrlsMixin: """Mixin that enables urls for the plugin""" + class Meta: + MIXIN_NAME = 'URLs' + def __init__(self): super().__init__() - self.add_mixin('urls', 'has_urls') + self.add_mixin('urls', 'has_urls', __class__) self.urls = self.setup_urls() def setup_urls(self): @@ -84,9 +110,12 @@ class UrlsMixin: class NavigationMixin: """Mixin that enables adding navigation links with the plugin""" + class Meta: + MIXIN_NAME = 'Navigation Links' + def __init__(self): super().__init__() - self.add_mixin('navigation', 'has_naviation') + self.add_mixin('navigation', 'has_naviation', __class__) self.navigation = self.setup_navigation() def setup_navigation(self): diff --git a/InvenTree/templates/InvenTree/settings/plugin.html b/InvenTree/templates/InvenTree/settings/plugin.html index 44b486abae..0b2d5bcc02 100644 --- a/InvenTree/templates/InvenTree/settings/plugin.html +++ b/InvenTree/templates/InvenTree/settings/plugin.html @@ -36,6 +36,14 @@ {% if settings %} {% trans 'Has settings' %} {% endif %} + + {% define plugin.registered_mixins as mixin_list %} + {% if mixin_list %} + {% for mixin in mixin_list %} + + {% blocktrans with name=mixin.human_name%}has {{name}}{% endblocktrans %} + {% endfor %} + {% endif %} # TODO