2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-28 19:46:46 +00:00

Move view mixin to plugin.views

This commit is contained in:
Oliver Walters 2022-05-07 22:33:30 +10:00
parent 9f15dd8e2a
commit 06e79ee91b
7 changed files with 66 additions and 50 deletions

View File

@ -38,8 +38,6 @@ from part.models import PartCategory
from common.models import InvenTreeSetting, ColorTheme from common.models import InvenTreeSetting, ColorTheme
from users.models import check_user_role, RuleSet from users.models import check_user_role, RuleSet
from plugin.registry import registry
from .forms import DeleteForm, EditUserForm, SetPasswordForm from .forms import DeleteForm, EditUserForm, SetPasswordForm
from .forms import SettingCategorySelectForm from .forms import SettingCategorySelectForm
from .helpers import str2bool from .helpers import str2bool
@ -58,37 +56,6 @@ def auth_request(request):
return HttpResponse(status=403) return HttpResponse(status=403)
class InvenTreePluginMixin:
"""
Custom view mixin which adds context data to the view,
based on loaded plugins.
This allows rendered pages to be augmented by loaded plugins.
"""
def get_plugin_panels(self, ctx):
"""
Return a list of extra 'plugin panels' associated with this view
"""
panels = []
for plug in registry.with_mixin('panel'):
panels += plug.render_panels(self, self.request, ctx)
return panels
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
if settings.PLUGINS_ENABLED:
ctx['plugin_panels'] = self.get_plugin_panels(ctx)
return ctx
class InvenTreeRoleMixin(PermissionRequiredMixin): class InvenTreeRoleMixin(PermissionRequiredMixin):
""" """
Permission class based on user roles, not user 'permissions'. Permission class based on user roles, not user 'permissions'.

View File

@ -11,9 +11,11 @@ from django.views.generic import DetailView, ListView
from .models import Build from .models import Build
from InvenTree.views import AjaxDeleteView from InvenTree.views import AjaxDeleteView
from InvenTree.views import InvenTreeRoleMixin, InvenTreePluginMixin from InvenTree.views import InvenTreeRoleMixin
from InvenTree.status_codes import BuildStatus from InvenTree.status_codes import BuildStatus
from plugin.views import InvenTreePluginViewMixin
class BuildIndex(InvenTreeRoleMixin, ListView): class BuildIndex(InvenTreeRoleMixin, ListView):
""" """
@ -41,7 +43,7 @@ class BuildIndex(InvenTreeRoleMixin, ListView):
return context return context
class BuildDetail(InvenTreeRoleMixin, InvenTreePluginMixin, DetailView): class BuildDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView):
""" """
Detail view of a single Build object. Detail view of a single Build object.
""" """

View File

@ -17,15 +17,16 @@ import requests
import io import io
from InvenTree.views import AjaxUpdateView from InvenTree.views import AjaxUpdateView
from InvenTree.views import InvenTreeRoleMixin, InvenTreePluginMixin from InvenTree.views import InvenTreeRoleMixin
from .models import Company from .models import Company
from .models import ManufacturerPart from .models import ManufacturerPart
from .models import SupplierPart from .models import SupplierPart
from .forms import CompanyImageDownloadForm from .forms import CompanyImageDownloadForm
from plugin.views import InvenTreePluginViewMixin
class CompanyIndex(InvenTreeRoleMixin, ListView): class CompanyIndex(InvenTreeRoleMixin, ListView):
""" View for displaying list of companies """ View for displaying list of companies
@ -104,7 +105,7 @@ class CompanyIndex(InvenTreeRoleMixin, ListView):
return queryset return queryset
class CompanyDetail(InvenTreePluginMixin, DetailView): class CompanyDetail(InvenTreePluginViewMixin, DetailView):
""" Detail view for Company object """ """ Detail view for Company object """
context_obect_name = 'company' context_obect_name = 'company'
template_name = 'company/detail.html' template_name = 'company/detail.html'
@ -196,7 +197,7 @@ class CompanyImageDownloadFromURL(AjaxUpdateView):
) )
class ManufacturerPartDetail(InvenTreePluginMixin, DetailView): class ManufacturerPartDetail(InvenTreePluginViewMixin, DetailView):
""" Detail view for ManufacturerPart """ """ Detail view for ManufacturerPart """
model = ManufacturerPart model = ManufacturerPart
template_name = 'company/manufacturer_part_detail.html' template_name = 'company/manufacturer_part_detail.html'
@ -210,7 +211,7 @@ class ManufacturerPartDetail(InvenTreePluginMixin, DetailView):
return ctx return ctx
class SupplierPartDetail(InvenTreePluginMixin, DetailView): class SupplierPartDetail(InvenTreePluginViewMixin, DetailView):
""" Detail view for SupplierPart """ """ Detail view for SupplierPart """
model = SupplierPart model = SupplierPart
template_name = 'company/supplier_part_detail.html' template_name = 'company/supplier_part_detail.html'

View File

@ -31,7 +31,9 @@ from . import forms as order_forms
from part.views import PartPricing from part.views import PartPricing
from InvenTree.helpers import DownloadFile from InvenTree.helpers import DownloadFile
from InvenTree.views import InvenTreeRoleMixin, InvenTreePluginMixin, AjaxView from InvenTree.views import InvenTreeRoleMixin, AjaxView
from plugin.views import InvenTreePluginViewMixin
logger = logging.getLogger("inventree") logger = logging.getLogger("inventree")
@ -65,7 +67,7 @@ class SalesOrderIndex(InvenTreeRoleMixin, ListView):
context_object_name = 'orders' context_object_name = 'orders'
class PurchaseOrderDetail(InvenTreeRoleMixin, InvenTreePluginMixin, DetailView): class PurchaseOrderDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView):
""" Detail view for a PurchaseOrder object """ """ Detail view for a PurchaseOrder object """
context_object_name = 'order' context_object_name = 'order'
@ -78,7 +80,7 @@ class PurchaseOrderDetail(InvenTreeRoleMixin, InvenTreePluginMixin, DetailView):
return ctx return ctx
class SalesOrderDetail(InvenTreeRoleMixin, InvenTreePluginMixin, DetailView): class SalesOrderDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView):
""" Detail view for a SalesOrder object """ """ Detail view for a SalesOrder object """
context_object_name = 'order' context_object_name = 'order'

View File

@ -49,10 +49,12 @@ from order.models import PurchaseOrderLineItem
from InvenTree.views import AjaxView, AjaxCreateView, AjaxUpdateView, AjaxDeleteView from InvenTree.views import AjaxView, AjaxCreateView, AjaxUpdateView, AjaxDeleteView
from InvenTree.views import QRCodeView from InvenTree.views import QRCodeView
from InvenTree.views import InvenTreeRoleMixin, InvenTreePluginMixin from InvenTree.views import InvenTreeRoleMixin
from InvenTree.helpers import str2bool from InvenTree.helpers import str2bool
from plugin.views import InvenTreePluginViewMixin
class PartIndex(InvenTreeRoleMixin, ListView): class PartIndex(InvenTreeRoleMixin, ListView):
""" View for displaying list of Part objects """ View for displaying list of Part objects
@ -365,7 +367,7 @@ class PartImportAjax(FileManagementAjaxView, PartImport):
return PartImport.validate(self, self.steps.current, form, **kwargs) return PartImport.validate(self, self.steps.current, form, **kwargs)
class PartDetail(InvenTreeRoleMixin, InvenTreePluginMixin, DetailView): class PartDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView):
""" Detail view for Part object """ Detail view for Part object
""" """
@ -969,7 +971,7 @@ class PartParameterTemplateDelete(AjaxDeleteView):
ajax_form_title = _("Delete Part Parameter Template") ajax_form_title = _("Delete Part Parameter Template")
class CategoryDetail(InvenTreeRoleMixin, InvenTreePluginMixin, DetailView): class CategoryDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView):
""" Detail view for PartCategory """ """ Detail view for PartCategory """
model = PartCategory model = PartCategory

40
InvenTree/plugin/views.py Normal file
View File

@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.conf import settings
from plugin.registry import registry
class InvenTreePluginViewMixin:
"""
Custom view mixin which adds context data to the view,
based on loaded plugins.
This allows rendered pages to be augmented by loaded plugins.
"""
def get_plugin_panels(self, ctx):
"""
Return a list of extra 'plugin panels' associated with this view
"""
panels = []
for plug in registry.with_mixin('panel'):
panels += plug.render_panels(self, self.request, ctx)
return panels
def get_context_data(self, **kwargs):
"""
Add plugin context data to the view
"""
ctx = super().get_context_data(**kwargs)
if settings.PLUGINS_ENABLED:
ctx['plugin_panels'] = self.get_plugin_panels(ctx)
return ctx

View File

@ -15,7 +15,7 @@ from django.utils.translation import gettext_lazy as _
from InvenTree.views import AjaxUpdateView, AjaxDeleteView, AjaxCreateView from InvenTree.views import AjaxUpdateView, AjaxDeleteView, AjaxCreateView
from InvenTree.views import QRCodeView from InvenTree.views import QRCodeView
from InvenTree.views import InvenTreeRoleMixin, InvenTreePluginMixin from InvenTree.views import InvenTreeRoleMixin
from InvenTree.forms import ConfirmForm from InvenTree.forms import ConfirmForm
from InvenTree.helpers import str2bool from InvenTree.helpers import str2bool
@ -26,8 +26,10 @@ import common.settings
from . import forms as StockForms from . import forms as StockForms
from plugin.views import InvenTreePluginViewMixin
class StockIndex(InvenTreeRoleMixin, InvenTreePluginMixin, ListView):
class StockIndex(InvenTreeRoleMixin, InvenTreePluginViewMixin, ListView):
""" StockIndex view loads all StockLocation and StockItem object """ StockIndex view loads all StockLocation and StockItem object
""" """
model = StockItem model = StockItem
@ -54,7 +56,7 @@ class StockIndex(InvenTreeRoleMixin, InvenTreePluginMixin, ListView):
return context return context
class StockLocationDetail(InvenTreeRoleMixin, InvenTreePluginMixin, DetailView): class StockLocationDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView):
""" """
Detailed view of a single StockLocation object Detailed view of a single StockLocation object
""" """
@ -75,7 +77,7 @@ class StockLocationDetail(InvenTreeRoleMixin, InvenTreePluginMixin, DetailView):
return context return context
class StockItemDetail(InvenTreeRoleMixin, InvenTreePluginMixin, DetailView): class StockItemDetail(InvenTreeRoleMixin, InvenTreePluginViewMixin, DetailView):
""" """
Detailed view of a single StockItem object Detailed view of a single StockItem object
""" """