2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-10-24 01:47:39 +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', {})
# remove filter args from kwargs
kwargs = PathScopedMixin.gather_filters(self, kwargs)
# TODO remove: kwargs = PathScopedMixin.gather_filters(self, 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."""
_was_filtered = False
@@ -86,6 +86,10 @@ class PathScopedMixin(serializers.Serializer):
tgs_vals[k] = str2bool(val) if isinstance(val, str) else val
self.filter_target_values = tgs_vals
# TODO remove
if len(self.filter_targets) == 0:
raise ValueError('No filter targets found')
return kwargs
def do_filtering(self, *args, **kwargs):

View File

@@ -38,6 +38,7 @@ from InvenTree.serializers import (
InvenTreeDecimalField,
InvenTreeModelSerializer,
NotesFieldMixin,
PathScopedMixin,
can_filter,
)
from stock.generators import generate_batch_code
@@ -55,6 +56,7 @@ from .status_codes import BuildStatus
class BuildSerializer(
PathScopedMixin,
NotesFieldMixin,
DataImportExportSerializerMixin,
InvenTreeCustomStatusSerializerMixin,
@@ -1156,7 +1158,9 @@ class BuildAutoAllocationSerializer(serializers.Serializer):
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."""
export_child_fields = [
@@ -1291,7 +1295,9 @@ class BuildItemSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali
quantity = InvenTreeDecimalField(label=_('Allocated Quantity'))
class BuildLineSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer):
class BuildLineSerializer(
PathScopedMixin, DataImportExportSerializerMixin, InvenTreeModelSerializer
):
"""Serializer for a BuildItem object."""
export_exclude_fields = ['allocations']

View File

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

View File

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

View File

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

View File

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

View File

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