2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-10-24 09:57:40 +00:00

make application of PathScopedMixin more intentional -> more efficient

This commit is contained in:
Matthias Mair
2025-10-14 06:41:34 +02:00
parent 33ce7e39b7
commit 70df5cc89a
7 changed files with 59 additions and 23 deletions

View File

@@ -45,12 +45,12 @@ class OptFilter:
self.is_filterable_vals = kwargs.pop('is_filterable_vals', {}) self.is_filterable_vals = kwargs.pop('is_filterable_vals', {})
# remove filter args from kwargs # remove filter args from kwargs
kwargs = PathScopedMixin.gather_filters(self, kwargs) # TODO remove: kwargs = PathScopedMixin.gather_filters(self, kwargs)
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
PathScopedMixin.do_filtering(self, *args, **kwargs) # TODO remove: PathScopedMixin.do_filtering(self, *args, **kwargs)
class PathScopedMixin(serializers.Serializer): class PathScopedMixin:
"""Mixin to disable a serializer field based on kwargs passed to the view.""" """Mixin to disable a serializer field based on kwargs passed to the view."""
_was_filtered = False _was_filtered = False
@@ -86,6 +86,10 @@ class PathScopedMixin(serializers.Serializer):
tgs_vals[k] = str2bool(val) if isinstance(val, str) else val tgs_vals[k] = str2bool(val) if isinstance(val, str) else val
self.filter_target_values = tgs_vals self.filter_target_values = tgs_vals
# TODO remove
if len(self.filter_targets) == 0:
raise ValueError('No filter targets found')
return kwargs return kwargs
def do_filtering(self, *args, **kwargs): def do_filtering(self, *args, **kwargs):

View File

@@ -38,6 +38,7 @@ from InvenTree.serializers import (
InvenTreeDecimalField, InvenTreeDecimalField,
InvenTreeModelSerializer, InvenTreeModelSerializer,
NotesFieldMixin, NotesFieldMixin,
PathScopedMixin,
can_filter, can_filter,
) )
from stock.generators import generate_batch_code from stock.generators import generate_batch_code
@@ -55,6 +56,7 @@ from .status_codes import BuildStatus
class BuildSerializer( class BuildSerializer(
PathScopedMixin,
NotesFieldMixin, NotesFieldMixin,
DataImportExportSerializerMixin, DataImportExportSerializerMixin,
InvenTreeCustomStatusSerializerMixin, InvenTreeCustomStatusSerializerMixin,
@@ -1156,7 +1158,9 @@ class BuildAutoAllocationSerializer(serializers.Serializer):
raise ValidationError(_('Failed to start auto-allocation task')) raise ValidationError(_('Failed to start auto-allocation task'))
class BuildItemSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): class BuildItemSerializer(
PathScopedMixin, DataImportExportSerializerMixin, InvenTreeModelSerializer
):
"""Serializes a BuildItem object, which is an allocation of a stock item against a build order.""" """Serializes a BuildItem object, which is an allocation of a stock item against a build order."""
export_child_fields = [ export_child_fields = [
@@ -1291,7 +1295,9 @@ class BuildItemSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali
quantity = InvenTreeDecimalField(label=_('Allocated Quantity')) quantity = InvenTreeDecimalField(label=_('Allocated Quantity'))
class BuildLineSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): class BuildLineSerializer(
PathScopedMixin, DataImportExportSerializerMixin, InvenTreeModelSerializer
):
"""Serializer for a BuildItem object.""" """Serializer for a BuildItem object."""
export_exclude_fields = ['allocations'] export_exclude_fields = ['allocations']

View File

@@ -26,6 +26,7 @@ from InvenTree.serializers import (
InvenTreeMoneySerializer, InvenTreeMoneySerializer,
InvenTreeTagModelSerializer, InvenTreeTagModelSerializer,
NotesFieldMixin, NotesFieldMixin,
PathScopedMixin,
RemoteImageMixin, RemoteImageMixin,
can_filter, can_filter,
) )
@@ -250,7 +251,10 @@ class ContactSerializer(DataImportExportSerializerMixin, InvenTreeModelSerialize
@register_importer() @register_importer()
class ManufacturerPartSerializer( class ManufacturerPartSerializer(
DataImportExportSerializerMixin, InvenTreeTagModelSerializer, NotesFieldMixin PathScopedMixin,
DataImportExportSerializerMixin,
InvenTreeTagModelSerializer,
NotesFieldMixin,
): ):
"""Serializer for ManufacturerPart object.""" """Serializer for ManufacturerPart object."""
@@ -300,7 +304,7 @@ class ManufacturerPartSerializer(
@register_importer() @register_importer()
class ManufacturerPartParameterSerializer( class ManufacturerPartParameterSerializer(
DataImportExportSerializerMixin, InvenTreeModelSerializer PathScopedMixin, DataImportExportSerializerMixin, InvenTreeModelSerializer
): ):
"""Serializer for the ManufacturerPartParameter model.""" """Serializer for the ManufacturerPartParameter model."""
@@ -524,7 +528,7 @@ class SupplierPartSerializer(
@register_importer() @register_importer()
class SupplierPriceBreakSerializer( class SupplierPriceBreakSerializer(
DataImportExportSerializerMixin, InvenTreeModelSerializer PathScopedMixin, DataImportExportSerializerMixin, InvenTreeModelSerializer
): ):
"""Serializer for SupplierPriceBreak object.""" """Serializer for SupplierPriceBreak object."""

View File

@@ -303,6 +303,7 @@ class AbstractExtraLineMeta:
@register_importer() @register_importer()
class PurchaseOrderSerializer( class PurchaseOrderSerializer(
PathScopedMixin,
NotesFieldMixin, NotesFieldMixin,
TotalPriceMixin, TotalPriceMixin,
InvenTreeCustomStatusSerializerMixin, InvenTreeCustomStatusSerializerMixin,
@@ -462,6 +463,7 @@ class PurchaseOrderIssueSerializer(OrderAdjustSerializer):
@register_importer() @register_importer()
class PurchaseOrderLineItemSerializer( class PurchaseOrderLineItemSerializer(
PathScopedMixin,
DataImportExportSerializerMixin, DataImportExportSerializerMixin,
AbstractLineItemSerializer, AbstractLineItemSerializer,
InvenTreeModelSerializer, InvenTreeModelSerializer,
@@ -695,7 +697,7 @@ class PurchaseOrderLineItemSerializer(
@register_importer() @register_importer()
class PurchaseOrderExtraLineSerializer( class PurchaseOrderExtraLineSerializer(
AbstractExtraLineSerializer, InvenTreeModelSerializer PathScopedMixin, AbstractExtraLineSerializer, InvenTreeModelSerializer
): ):
"""Serializer for a PurchaseOrderExtraLine object.""" """Serializer for a PurchaseOrderExtraLine object."""
@@ -958,6 +960,7 @@ class PurchaseOrderReceiveSerializer(serializers.Serializer):
@register_importer() @register_importer()
class SalesOrderSerializer( class SalesOrderSerializer(
PathScopedMixin,
NotesFieldMixin, NotesFieldMixin,
TotalPriceMixin, TotalPriceMixin,
InvenTreeCustomStatusSerializerMixin, InvenTreeCustomStatusSerializerMixin,
@@ -1051,9 +1054,9 @@ class SalesOrderIssueSerializer(OrderAdjustSerializer):
@register_importer() @register_importer()
class SalesOrderLineItemSerializer( class SalesOrderLineItemSerializer(
PathScopedMixin,
DataImportExportSerializerMixin, DataImportExportSerializerMixin,
AbstractLineItemSerializer, AbstractLineItemSerializer,
PathScopedMixin,
InvenTreeModelSerializer, InvenTreeModelSerializer,
): ):
"""Serializer for a SalesOrderLineItem object.""" """Serializer for a SalesOrderLineItem object."""
@@ -1219,7 +1222,9 @@ class SalesOrderLineItemSerializer(
@register_importer() @register_importer()
class SalesOrderShipmentSerializer(NotesFieldMixin, InvenTreeModelSerializer): class SalesOrderShipmentSerializer(
PathScopedMixin, NotesFieldMixin, InvenTreeModelSerializer
):
"""Serializer for the SalesOrderShipment class.""" """Serializer for the SalesOrderShipment class."""
class Meta: class Meta:
@@ -1265,7 +1270,7 @@ class SalesOrderShipmentSerializer(NotesFieldMixin, InvenTreeModelSerializer):
) )
class SalesOrderAllocationSerializer(InvenTreeModelSerializer): class SalesOrderAllocationSerializer(PathScopedMixin, InvenTreeModelSerializer):
"""Serializer for the SalesOrderAllocation model. """Serializer for the SalesOrderAllocation model.
This includes some fields from the related model objects. This includes some fields from the related model objects.
@@ -1781,7 +1786,7 @@ class SalesOrderShipmentAllocationSerializer(serializers.Serializer):
@register_importer() @register_importer()
class SalesOrderExtraLineSerializer( class SalesOrderExtraLineSerializer(
AbstractExtraLineSerializer, InvenTreeModelSerializer PathScopedMixin, AbstractExtraLineSerializer, InvenTreeModelSerializer
): ):
"""Serializer for a SalesOrderExtraLine object.""" """Serializer for a SalesOrderExtraLine object."""
@@ -1799,6 +1804,7 @@ class SalesOrderExtraLineSerializer(
@register_importer() @register_importer()
class ReturnOrderSerializer( class ReturnOrderSerializer(
PathScopedMixin,
NotesFieldMixin, NotesFieldMixin,
InvenTreeCustomStatusSerializerMixin, InvenTreeCustomStatusSerializerMixin,
AbstractOrderSerializer, AbstractOrderSerializer,
@@ -1991,6 +1997,7 @@ class ReturnOrderReceiveSerializer(serializers.Serializer):
@register_importer() @register_importer()
class ReturnOrderLineItemSerializer( class ReturnOrderLineItemSerializer(
PathScopedMixin,
DataImportExportSerializerMixin, DataImportExportSerializerMixin,
AbstractLineItemSerializer, AbstractLineItemSerializer,
InvenTreeModelSerializer, InvenTreeModelSerializer,
@@ -2049,7 +2056,7 @@ class ReturnOrderLineItemSerializer(
@register_importer() @register_importer()
class ReturnOrderExtraLineSerializer( class ReturnOrderExtraLineSerializer(
AbstractExtraLineSerializer, InvenTreeModelSerializer PathScopedMixin, AbstractExtraLineSerializer, InvenTreeModelSerializer
): ):
"""Serializer for a ReturnOrderExtraLine object.""" """Serializer for a ReturnOrderExtraLine object."""

View File

@@ -37,6 +37,7 @@ from InvenTree.serializers import (
CfFloatField, CfFloatField,
CfListField, CfListField,
FilterableListSerializer, FilterableListSerializer,
PathScopedMixin,
can_filter, can_filter,
) )
from users.serializers import UserSerializer from users.serializers import UserSerializer
@@ -63,7 +64,9 @@ logger = structlog.get_logger('inventree')
@register_importer() @register_importer()
class CategorySerializer( class CategorySerializer(
DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer PathScopedMixin,
DataImportExportSerializerMixin,
InvenTree.serializers.InvenTreeModelSerializer,
): ):
"""Serializer for PartCategory.""" """Serializer for PartCategory."""
@@ -311,7 +314,9 @@ class PartParameterTemplateSerializer(
return queryset.annotate(parts=SubqueryCount('instances')) return queryset.annotate(parts=SubqueryCount('instances'))
class PartBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer): class PartBriefSerializer(
PathScopedMixin, InvenTree.serializers.InvenTreeModelSerializer
):
"""Serializer for Part (brief detail).""" """Serializer for Part (brief detail)."""
class Meta: class Meta:
@@ -388,7 +393,9 @@ class PartBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer):
@register_importer() @register_importer()
class PartParameterSerializer( class PartParameterSerializer(
DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer PathScopedMixin,
DataImportExportSerializerMixin,
InvenTree.serializers.InvenTreeModelSerializer,
): ):
"""JSON serializers for the PartParameter model.""" """JSON serializers for the PartParameter model."""
@@ -622,7 +629,7 @@ class DefaultLocationSerializer(InvenTree.serializers.InvenTreeModelSerializer):
@register_importer() @register_importer()
class PartSerializer( class PartSerializer(
InvenTree.serializers.PathScopedMixin, PathScopedMixin,
DataImportExportSerializerMixin, DataImportExportSerializerMixin,
InvenTree.serializers.NotesFieldMixin, InvenTree.serializers.NotesFieldMixin,
InvenTree.serializers.RemoteImageMixin, InvenTree.serializers.RemoteImageMixin,
@@ -1611,7 +1618,9 @@ class BomItemSubstituteSerializer(InvenTree.serializers.InvenTreeModelSerializer
@register_importer() @register_importer()
class BomItemSerializer( class BomItemSerializer(
DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer PathScopedMixin,
DataImportExportSerializerMixin,
InvenTree.serializers.InvenTreeModelSerializer,
): ):
"""Serializer for BomItem object.""" """Serializer for BomItem object."""

View File

@@ -197,7 +197,9 @@ class LocationBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer):
@register_importer() @register_importer()
class StockItemTestResultSerializer( class StockItemTestResultSerializer(
DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeModelSerializer PathScopedMixin,
DataImportExportSerializerMixin,
InvenTree.serializers.InvenTreeModelSerializer,
): ):
"""Serializer for the StockItemTestResult model.""" """Serializer for the StockItemTestResult model."""
@@ -299,6 +301,7 @@ class StockItemTestResultSerializer(
@register_importer() @register_importer()
class StockItemSerializer( class StockItemSerializer(
PathScopedMixin,
DataImportExportSerializerMixin, DataImportExportSerializerMixin,
InvenTreeCustomStatusSerializerMixin, InvenTreeCustomStatusSerializerMixin,
InvenTree.serializers.InvenTreeTagModelSerializer, InvenTree.serializers.InvenTreeTagModelSerializer,
@@ -1125,7 +1128,9 @@ class LocationTreeSerializer(InvenTree.serializers.InvenTreeModelSerializer):
@register_importer() @register_importer()
class LocationSerializer( class LocationSerializer(
DataImportExportSerializerMixin, InvenTree.serializers.InvenTreeTagModelSerializer PathScopedMixin,
DataImportExportSerializerMixin,
InvenTree.serializers.InvenTreeTagModelSerializer,
): ):
"""Detailed information about a stock location.""" """Detailed information about a stock location."""
@@ -1210,8 +1215,8 @@ class LocationSerializer(
@register_importer() @register_importer()
class StockTrackingSerializer( class StockTrackingSerializer(
DataImportExportSerializerMixin,
PathScopedMixin, PathScopedMixin,
DataImportExportSerializerMixin,
InvenTree.serializers.InvenTreeModelSerializer, InvenTree.serializers.InvenTreeModelSerializer,
): ):
"""Serializer for StockItemTracking model.""" """Serializer for StockItemTracking model."""

View File

@@ -11,6 +11,7 @@ from InvenTree.serializers import (
CfSerializerMethodField, CfSerializerMethodField,
FilterableListSerializer, FilterableListSerializer,
InvenTreeModelSerializer, InvenTreeModelSerializer,
PathScopedMixin,
can_filter, can_filter,
) )
@@ -238,7 +239,7 @@ class ApiTokenSerializer(InvenTreeModelSerializer):
user_detail = UserSerializer(source='user', read_only=True) user_detail = UserSerializer(source='user', read_only=True)
class GroupSerializer(InvenTreeModelSerializer): class GroupSerializer(PathScopedMixin, InvenTreeModelSerializer):
"""Serializer for a 'Group'.""" """Serializer for a 'Group'."""
class Meta: class Meta: