mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 20:16:44 +00:00
rename global settings objects
This commit is contained in:
parent
11c3ac8bf8
commit
b10492f088
@ -863,5 +863,5 @@ if DEBUG or TESTING:
|
|||||||
PLUGINS = []
|
PLUGINS = []
|
||||||
INTEGRATION_PLUGINS = {}
|
INTEGRATION_PLUGINS = {}
|
||||||
INTEGRATION_PLUGINS_INACTIVE = {}
|
INTEGRATION_PLUGINS_INACTIVE = {}
|
||||||
INTEGRATION_PLUGIN_SETTING = {}
|
INTEGRATION_PLUGIN_GLOBALSETTING = {}
|
||||||
INTEGRATION_APPS_LOADED = False # Marks if apps were reloaded yet
|
INTEGRATION_APPS_LOADED = False # Marks if apps were reloaded yet
|
||||||
|
@ -979,9 +979,9 @@ class InvenTreeSetting(BaseInvenTreeSetting):
|
|||||||
'validator': bool,
|
'validator': bool,
|
||||||
'requires_restart': True,
|
'requires_restart': True,
|
||||||
},
|
},
|
||||||
'ENABLE_PLUGINS_SETTING': {
|
'ENABLE_PLUGINS_GLOBALSETTING': {
|
||||||
'name': _('Enable setting integration'),
|
'name': _('Enable global setting integration'),
|
||||||
'description': _('Enable plugins to integrate into inventree settings'),
|
'description': _('Enable plugins to integrate into inventree global settings'),
|
||||||
'default': False,
|
'default': False,
|
||||||
'validator': bool,
|
'validator': bool,
|
||||||
'requires_restart': True,
|
'requires_restart': True,
|
||||||
|
@ -92,20 +92,20 @@ class PluginAppConfig(AppConfig):
|
|||||||
logger.info(f'Found {len(plugins)} active plugins')
|
logger.info(f'Found {len(plugins)} active plugins')
|
||||||
|
|
||||||
# if plugin settings are enabled enhance the settings
|
# if plugin settings are enabled enhance the settings
|
||||||
self.activate_integration_settings(plugins)
|
self.activate_integration_globalsettings(plugins)
|
||||||
|
|
||||||
# if plugin apps are enabled
|
# if plugin apps are enabled
|
||||||
self.activate_integration_app(plugins)
|
self.activate_integration_app(plugins)
|
||||||
|
|
||||||
def activate_integration_settings(self, plugins):
|
def activate_integration_globalsettings(self, plugins):
|
||||||
from common.models import InvenTreeSetting
|
from common.models import InvenTreeSetting
|
||||||
|
|
||||||
if settings.PLUGIN_TESTING or InvenTreeSetting.get_setting('ENABLE_PLUGINS_SETTING'):
|
if settings.PLUGIN_TESTING or InvenTreeSetting.get_setting('ENABLE_PLUGINS_GLOBALSETTING'):
|
||||||
logger.info('Registering IntegrationPlugin settings')
|
logger.info('Registering IntegrationPlugin global settings')
|
||||||
for slug, plugin in plugins:
|
for slug, plugin in plugins:
|
||||||
if plugin.mixin_enabled('settings'):
|
if plugin.mixin_enabled('globalsettings'):
|
||||||
plugin_setting = plugin.settingspatterns
|
plugin_setting = plugin.globalsettingspatterns
|
||||||
settings.INTEGRATION_PLUGIN_SETTING[slug] = plugin_setting
|
settings.INTEGRATION_PLUGIN_GLOBALSETTING[slug] = plugin_setting
|
||||||
|
|
||||||
# Add to settings dir
|
# Add to settings dir
|
||||||
InvenTreeSetting.GLOBAL_SETTINGS.update(plugin_setting)
|
InvenTreeSetting.GLOBAL_SETTINGS.update(plugin_setting)
|
||||||
|
@ -57,53 +57,53 @@ class MixinBase:
|
|||||||
return mixins
|
return mixins
|
||||||
|
|
||||||
|
|
||||||
class SettingsMixin:
|
class GlobalSettingsMixin:
|
||||||
"""Mixin that enables settings for the plugin"""
|
"""Mixin that enables global settings for the plugin"""
|
||||||
class Meta:
|
class Meta:
|
||||||
"""meta options for this mixin"""
|
"""meta options for this mixin"""
|
||||||
MIXIN_NAME = 'Settings'
|
MIXIN_NAME = 'Global settings'
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.add_mixin('settings', 'has_settings', __class__)
|
self.add_mixin('globalsettings', 'has_globalsettings', __class__)
|
||||||
self.settings = self.setup_settings()
|
self.globalsettings = self.setup_globalsettings()
|
||||||
|
|
||||||
def setup_settings(self):
|
def setup_globalsettings(self):
|
||||||
"""
|
"""
|
||||||
setup settings for this plugin
|
setup global settings for this plugin
|
||||||
"""
|
"""
|
||||||
return getattr(self, 'SETTINGS', None)
|
return getattr(self, 'GLOBALSETTINGS', None)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def has_settings(self):
|
def has_globalsettings(self):
|
||||||
"""
|
"""
|
||||||
does this plugin use custom settings
|
does this plugin use custom global settings
|
||||||
"""
|
"""
|
||||||
return bool(self.settings)
|
return bool(self.globalsettings)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def settingspatterns(self):
|
def globalsettingspatterns(self):
|
||||||
"""
|
"""
|
||||||
get patterns for InvenTreeSetting defintion
|
get patterns for InvenTreeSetting defintion
|
||||||
"""
|
"""
|
||||||
if self.has_settings:
|
if self.has_globalsettings:
|
||||||
return {f'PLUGIN_{self.slug.upper()}_{key}': value for key, value in self.settings.items()}
|
return {f'PLUGIN_{self.slug.upper()}_{key}': value for key, value in self.globalsettings.items()}
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def _setting_name(self, key):
|
def _globalsetting_name(self, key):
|
||||||
"""get global name of setting"""
|
"""get global name of setting"""
|
||||||
return f'PLUGIN_{self.slug.upper()}_{key}'
|
return f'PLUGIN_{self.slug.upper()}_{key}'
|
||||||
|
|
||||||
def get_setting(self, key):
|
def get_globalsetting(self, key):
|
||||||
"""
|
"""
|
||||||
get plugin setting by key
|
get plugin global setting by key
|
||||||
"""
|
"""
|
||||||
from common.models import InvenTreeSetting
|
from common.models import InvenTreeSetting
|
||||||
return InvenTreeSetting.get_setting(self._setting_name(key))
|
return InvenTreeSetting.get_setting(self._globalsetting_name(key))
|
||||||
|
|
||||||
def set_setting(self, key, value, user):
|
def set_globalsetting(self, key, value, user):
|
||||||
"""
|
"""
|
||||||
set plugin setting by key
|
set plugin global setting by key
|
||||||
"""
|
"""
|
||||||
from common.models import InvenTreeSetting
|
from common.models import InvenTreeSetting
|
||||||
return InvenTreeSetting.set_setting(self._setting_name(key), value, user)
|
return InvenTreeSetting.set_setting(self._setting_name(key), value, user)
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
"""sample implementations for IntegrationPlugin"""
|
"""sample implementations for IntegrationPlugin"""
|
||||||
from plugin.integration import AppMixin, SettingsMixin, UrlsMixin, NavigationMixin, IntegrationPluginBase
|
from plugin.integration import AppMixin, GlobalSettingsMixin, UrlsMixin, NavigationMixin, IntegrationPluginBase
|
||||||
|
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.conf.urls import url, include
|
from django.conf.urls import url, include
|
||||||
|
|
||||||
|
|
||||||
class SampleIntegrationPlugin(AppMixin, SettingsMixin, UrlsMixin, NavigationMixin, IntegrationPluginBase):
|
class SampleIntegrationPlugin(AppMixin, GlobalSettingsMixin, UrlsMixin, NavigationMixin, IntegrationPluginBase):
|
||||||
"""
|
"""
|
||||||
An full integration plugin
|
An full integration plugin
|
||||||
"""
|
"""
|
||||||
|
@ -25,9 +25,9 @@ def inactive_plugin_list(*args, **kwargs):
|
|||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
def plugin_settings(plugin, *args, **kwargs):
|
def plugin_globalsettings(plugin, *args, **kwargs):
|
||||||
""" Return a list of all settings for a plugin """
|
""" Return a list of all global settings for a plugin """
|
||||||
return djangosettings.INTEGRATION_PLUGIN_SETTING.get(plugin)
|
return djangosettings.INTEGRATION_PLUGIN_GLOBALSETTING.get(plugin)
|
||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
|
@ -7,7 +7,7 @@ from django.contrib.auth import get_user_model
|
|||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from plugin.integration import AppMixin, IntegrationPluginBase, SettingsMixin, UrlsMixin, NavigationMixin
|
from plugin.integration import AppMixin, IntegrationPluginBase, GlobalSettingsMixin, UrlsMixin, NavigationMixin
|
||||||
|
|
||||||
|
|
||||||
class BaseMixinDefinition:
|
class BaseMixinDefinition:
|
||||||
@ -18,19 +18,19 @@ class BaseMixinDefinition:
|
|||||||
self.assertEqual(self.mixin.registered_mixins[0]['human_name'], self.MIXIN_HUMAN_NAME)
|
self.assertEqual(self.mixin.registered_mixins[0]['human_name'], self.MIXIN_HUMAN_NAME)
|
||||||
|
|
||||||
|
|
||||||
class SettingsMixinTest(BaseMixinDefinition, TestCase):
|
class GlobalSettingsMixinTest(BaseMixinDefinition, TestCase):
|
||||||
MIXIN_HUMAN_NAME = 'Settings'
|
MIXIN_HUMAN_NAME = 'Global settings'
|
||||||
MIXIN_NAME = 'settings'
|
MIXIN_NAME = 'globalsettings'
|
||||||
MIXIN_ENABLE_CHECK = 'has_settings'
|
MIXIN_ENABLE_CHECK = 'has_globalsettings'
|
||||||
|
|
||||||
TEST_SETTINGS = {'SETTING1': {'default': '123', }}
|
TEST_SETTINGS = {'SETTING1': {'default': '123', }}
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
class SettingsCls(SettingsMixin, IntegrationPluginBase):
|
class SettingsCls(GlobalSettingsMixin, IntegrationPluginBase):
|
||||||
SETTINGS = self.TEST_SETTINGS
|
SETTINGS = self.TEST_SETTINGS
|
||||||
self.mixin = SettingsCls()
|
self.mixin = SettingsCls()
|
||||||
|
|
||||||
class NoSettingsCls(SettingsMixin, IntegrationPluginBase):
|
class NoSettingsCls(GlobalSettingsMixin, IntegrationPluginBase):
|
||||||
pass
|
pass
|
||||||
self.mixin_nothing = NoSettingsCls()
|
self.mixin_nothing = NoSettingsCls()
|
||||||
|
|
||||||
@ -40,25 +40,25 @@ class SettingsMixinTest(BaseMixinDefinition, TestCase):
|
|||||||
|
|
||||||
def test_function(self):
|
def test_function(self):
|
||||||
# settings variable
|
# settings variable
|
||||||
self.assertEqual(self.mixin.settings, self.TEST_SETTINGS)
|
self.assertEqual(self.mixin.globalsettings, self.TEST_SETTINGS)
|
||||||
|
|
||||||
# settings pattern
|
# settings pattern
|
||||||
target_pattern = {f'PLUGIN_{self.mixin.slug.upper()}_{key}': value for key, value in self.mixin.settings.items()}
|
target_pattern = {f'PLUGIN_{self.mixin.slug.upper()}_{key}': value for key, value in self.mixin.settings.items()}
|
||||||
self.assertEqual(self.mixin.settingspatterns, target_pattern)
|
self.assertEqual(self.mixin.globalsettingspatterns, target_pattern)
|
||||||
|
|
||||||
# no settings
|
# no settings
|
||||||
self.assertIsNone(self.mixin_nothing.settings)
|
self.assertIsNone(self.mixin_nothing.globalsettings)
|
||||||
self.assertIsNone(self.mixin_nothing.settingspatterns)
|
self.assertIsNone(self.mixin_nothing.globalsettingspatterns)
|
||||||
|
|
||||||
# calling settings
|
# calling settings
|
||||||
# not existing
|
# not existing
|
||||||
self.assertEqual(self.mixin.get_setting('ABCD'), '')
|
self.assertEqual(self.mixin.get_globalsetting('ABCD'), '')
|
||||||
self.assertEqual(self.mixin_nothing.get_setting('ABCD'), '')
|
self.assertEqual(self.mixin_nothing.get_globalsetting('ABCD'), '')
|
||||||
# right setting
|
# right setting
|
||||||
self.mixin.set_setting('SETTING1', '12345', self.test_user)
|
self.mixin.set_globalsetting('SETTING1', '12345', self.test_user)
|
||||||
self.assertEqual(self.mixin.get_setting('SETTING1'), '12345')
|
self.assertEqual(self.mixin.get_globalsetting('SETTING1'), '12345')
|
||||||
# no setting
|
# no setting
|
||||||
self.assertEqual(self.mixin_nothing.get_setting(''), '')
|
self.assertEqual(self.mixin_nothing.get_globalsetting(''), '')
|
||||||
|
|
||||||
|
|
||||||
class UrlsMixinTest(BaseMixinDefinition, TestCase):
|
class UrlsMixinTest(BaseMixinDefinition, TestCase):
|
||||||
|
@ -59,9 +59,9 @@ class PluginTagTests(TestCase):
|
|||||||
"""test that all plugins are listed"""
|
"""test that all plugins are listed"""
|
||||||
self.assertEqual(plugin_tags.plugin_list(), settings.INTEGRATION_PLUGINS)
|
self.assertEqual(plugin_tags.plugin_list(), settings.INTEGRATION_PLUGINS)
|
||||||
|
|
||||||
def test_tag_plugin_settings(self):
|
def test_tag_plugin_globalsettings(self):
|
||||||
"""check all plugins are listed"""
|
"""check all plugins are listed"""
|
||||||
self.assertEqual(plugin_tags.plugin_settings(self.sample), settings.INTEGRATION_PLUGIN_SETTING.get(self.sample))
|
self.assertEqual(plugin_tags.plugin_globalsettings(self.sample), settings.INTEGRATION_PLUGIN_GLOBALSETTING.get(self.sample))
|
||||||
|
|
||||||
def test_tag_mixin_enabled(self):
|
def test_tag_mixin_enabled(self):
|
||||||
"""check that mixin enabled functions work"""
|
"""check that mixin enabled functions work"""
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
{% load plugin_extras %}
|
{% load plugin_extras %}
|
||||||
|
|
||||||
<h4>{% trans "Settings" %}</h4>
|
<h4>{% trans "Settings" %}</h4>
|
||||||
{% plugin_settings plugin_key as plugin_settings %}
|
{% plugin_globalsettings plugin_key as plugin_settings %}
|
||||||
|
|
||||||
<table class='table table-striped table-condensed'>
|
<table class='table table-striped table-condensed'>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{% include "InvenTree/settings/setting.html" with key="ENABLE_PLUGINS_URL" %}
|
{% include "InvenTree/settings/setting.html" with key="ENABLE_PLUGINS_URL" %}
|
||||||
{% include "InvenTree/settings/setting.html" with key="ENABLE_PLUGINS_NAVIGATION" %}
|
{% include "InvenTree/settings/setting.html" with key="ENABLE_PLUGINS_NAVIGATION" %}
|
||||||
{% include "InvenTree/settings/setting.html" with key="ENABLE_PLUGINS_SETTING"%}
|
{% include "InvenTree/settings/setting.html" with key="ENABLE_PLUGINS_GLOBALSETTING"%}
|
||||||
{% include "InvenTree/settings/setting.html" with key="ENABLE_PLUGINS_APP"%}
|
{% include "InvenTree/settings/setting.html" with key="ENABLE_PLUGINS_APP"%}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@ -120,8 +120,8 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% mixin_enabled plugin 'settings' as settings %}
|
{% mixin_enabled plugin 'globalsettings' as globalsettings %}
|
||||||
{% if settings %}
|
{% if globalsettings %}
|
||||||
{% include 'InvenTree/settings/mixins/settings.html' %}
|
{% include 'InvenTree/settings/mixins/settings.html' %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user