diff --git a/src/backend/InvenTree/InvenTree/serializers.py b/src/backend/InvenTree/InvenTree/serializers.py index 78887a3fe0..bc4974e2d9 100644 --- a/src/backend/InvenTree/InvenTree/serializers.py +++ b/src/backend/InvenTree/InvenTree/serializers.py @@ -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): diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index 0ff12ad1c1..3973546bf3 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -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'] diff --git a/src/backend/InvenTree/company/serializers.py b/src/backend/InvenTree/company/serializers.py index 55c4d37ecf..9515cf44b6 100644 --- a/src/backend/InvenTree/company/serializers.py +++ b/src/backend/InvenTree/company/serializers.py @@ -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.""" diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index d698806507..17faa1a807 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -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.""" diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index 12136188b1..957eb5220f 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -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.""" diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index b0e28199f7..8fa40ac51f 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -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.""" diff --git a/src/backend/InvenTree/users/serializers.py b/src/backend/InvenTree/users/serializers.py index 00d5db2686..ec40862efb 100644 --- a/src/backend/InvenTree/users/serializers.py +++ b/src/backend/InvenTree/users/serializers.py @@ -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: