1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Enable plugins to define user preferences

This commit is contained in:
jeremystretch
2021-12-22 09:10:50 -05:00
parent 1eeac7f4f4
commit 1aafcf241f
8 changed files with 119 additions and 65 deletions

View File

@@ -15,6 +15,7 @@ from extras.plugins.utils import import_object
# Initialize plugin registry stores
registry['plugin_template_extensions'] = collections.defaultdict(list)
registry['plugin_menu_items'] = {}
registry['plugin_preferences'] = {}
#
@@ -54,6 +55,7 @@ class PluginConfig(AppConfig):
# integrated components.
template_extensions = 'template_content.template_extensions'
menu_items = 'navigation.menu_items'
user_preferences = 'preferences.preferences'
def ready(self):
@@ -67,6 +69,12 @@ class PluginConfig(AppConfig):
if menu_items is not None:
register_menu_items(self.verbose_name, menu_items)
# Register user preferences
user_preferences = import_object(f"{self.__module__}.{self.user_preferences}")
if user_preferences is not None:
plugin_name = self.name.rsplit('.', 1)[1]
register_user_preferences(plugin_name, user_preferences)
@classmethod
def validate(cls, user_config, netbox_version):
@@ -242,3 +250,14 @@ def register_menu_items(section_name, class_list):
raise TypeError(f"{button} must be an instance of extras.plugins.PluginMenuButton")
registry['plugin_menu_items'][section_name] = class_list
#
# User preferences
#
def register_user_preferences(plugin_name, preferences):
"""
Register a list of user preferences defined by a plugin.
"""
registry['plugin_preferences'][plugin_name] = preferences