From b2a3f6d31180963d2a5fa2b9bc10929374dd005e Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 5 Jan 2025 14:58:07 +1100 Subject: [PATCH] Remove old PanelMixin class (#8828) - Custom panels for legacy UI - No longer needed --- .../plugin/base/integration/PanelMixin.py | 149 ------------------ .../InvenTree/plugin/mixins/__init__.py | 2 - 2 files changed, 151 deletions(-) delete mode 100644 src/backend/InvenTree/plugin/base/integration/PanelMixin.py diff --git a/src/backend/InvenTree/plugin/base/integration/PanelMixin.py b/src/backend/InvenTree/plugin/base/integration/PanelMixin.py deleted file mode 100644 index 9b79ac1cd8..0000000000 --- a/src/backend/InvenTree/plugin/base/integration/PanelMixin.py +++ /dev/null @@ -1,149 +0,0 @@ -"""PanelMixin plugin class definition. - -Allows integration of custom 'panels' into the user interface. -""" - -import structlog - -from InvenTree.helpers import generateTestKey -from plugin.helpers import MixinNotImplementedError, render_template, render_text - -logger = structlog.get_logger('inventree') - - -class PanelMixin: - """Mixin which allows integration of custom 'panels' into a particular page. - - The mixin provides a number of key functionalities: - - - Adds an (initially hidden) panel to the page - - Allows rendering of custom templated content to the panel - - Adds a menu item to the 'navbar' on the left side of the screen - - Allows custom javascript to be run when the panel is initially loaded - - The PanelMixin class allows multiple panels to be returned for any page, - and also allows the plugin to return panels for many different pages. - - Any class implementing this mixin must provide the 'get_custom_panels' method, - which dynamically returns the custom panels for a particular page. - - This method is provided with: - - - view : The View object which is being rendered - - request : The HTTPRequest object - - Note that as this is called dynamically (per request), - then the actual panels returned can vary depending on the particular request or page - - The 'get_custom_panels' method must return a list of dict objects, each with the following keys: - - - title : The title of the panel, to appear in the sidebar menu - - description : Extra descriptive text (optional) - - icon : The icon to appear in the sidebar menu - - content : The HTML content to appear in the panel, OR - - content_template : A template file which will be rendered to produce the panel content - - javascript : The javascript content to be rendered when the panel is loaded, OR - - javascript_template : A template file which will be rendered to produce javascript - - e.g. - - { - 'title': "Updates", - 'description': "Latest updates for this part", - 'javascript': 'alert("You just loaded this panel!")', - 'content': 'Hello world', - } - """ - - class MixinMeta: - """Meta for mixin.""" - - MIXIN_NAME = 'Panel' - - def __init__(self): - """Register mixin.""" - super().__init__() - self.add_mixin('panel', True, __class__) - - def get_custom_panels(self, view, request): - """This method *must* be implemented by the plugin class.""" - raise MixinNotImplementedError( - f"{__class__} is missing the 'get_custom_panels' method" - ) - - def get_panel_context(self, view, request, context): - """Build the context data to be used for template rendering. - - Custom class can override this to provide any custom context data. - - (See the example in "custom_panel_sample.py") - """ - # Provide some standard context items to the template for rendering - context['plugin'] = self - context['request'] = request - context['user'] = getattr(request, 'user', None) - context['view'] = view - - try: - context['object'] = view.get_object() - except AttributeError: # pragma: no cover - pass - - return context - - def render_panels(self, view, request, context): - """Get panels for a view. - - Args: - view: Current view context - request: Current request for passthrough - context: Rendering context - - Returns: - Array of panels - """ - panels = [] - - # Construct an updated context object for template rendering - ctx = self.get_panel_context(view, request, context) - - custom_panels = self.get_custom_panels(view, request) or [] - - for panel in custom_panels: - content_template = panel.get('content_template', None) - javascript_template = panel.get('javascript_template', None) - - if content_template: - # Render content template to HTML - panel['content'] = render_template(self, content_template, ctx) - else: - # Render content string to HTML - panel['content'] = render_text(panel.get('content', ''), ctx) - - if javascript_template: - # Render javascript template to HTML - panel['javascript'] = render_template(self, javascript_template, ctx) - else: - # Render javascript string to HTML - panel['javascript'] = render_text(panel.get('javascript', ''), ctx) - - # Check for required keys - required_keys = ['title', 'content'] - - if any(key not in panel for key in required_keys): - logger.warning( - 'Custom panel for plugin %s is missing a required parameter', - __class__, - ) - continue - - # Add some information on this plugin - panel['plugin'] = self - panel['slug'] = self.slug - - # Add a 'key' for the panel, which is mostly guaranteed to be unique - panel['key'] = generateTestKey(self.slug + panel.get('title', 'panel')) - - panels.append(panel) - - return panels diff --git a/src/backend/InvenTree/plugin/mixins/__init__.py b/src/backend/InvenTree/plugin/mixins/__init__.py index 3b0ea7557f..80e2856d23 100644 --- a/src/backend/InvenTree/plugin/mixins/__init__.py +++ b/src/backend/InvenTree/plugin/mixins/__init__.py @@ -9,7 +9,6 @@ from plugin.base.integration.APICallMixin import APICallMixin from plugin.base.integration.AppMixin import AppMixin from plugin.base.integration.CurrencyExchangeMixin import CurrencyExchangeMixin from plugin.base.integration.mixins import NavigationMixin, SettingsContentMixin -from plugin.base.integration.PanelMixin import PanelMixin from plugin.base.integration.ReportMixin import ReportMixin from plugin.base.integration.ScheduleMixin import ScheduleMixin from plugin.base.integration.SettingsMixin import SettingsMixin @@ -31,7 +30,6 @@ __all__ = [ 'LabelPrintingMixin', 'LocateMixin', 'NavigationMixin', - 'PanelMixin', 'ReportMixin', 'ScheduleMixin', 'SettingsContentMixin',