From cd28459c17abb7c701ad34c0b0da8f591664b0bc Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sun, 24 Nov 2024 05:20:40 +0000 Subject: [PATCH] Use same serializer for AllStatusView --- src/backend/InvenTree/generic/states/api.py | 29 +++++++++++++++---- .../InvenTree/generic/states/serializers.py | 4 +-- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/backend/InvenTree/generic/states/api.py b/src/backend/InvenTree/generic/states/api.py index 5f5b4a7027..2d2870217d 100644 --- a/src/backend/InvenTree/generic/states/api.py +++ b/src/backend/InvenTree/generic/states/api.py @@ -11,13 +11,11 @@ from rest_framework.response import Response import common.models import common.serializers -from generic.states.custom import get_status_api_response from importer.mixins import DataExportViewMixin from InvenTree.filters import SEARCH_ORDER_FILTER from InvenTree.mixins import ListCreateAPI, RetrieveUpdateDestroyAPI from InvenTree.permissions import IsStaffOrReadOnly from InvenTree.serializers import EmptySerializer -from machine.machine_type import MachineStatus from .serializers import GenericStateClassSerializer from .states import StatusCode @@ -72,7 +70,7 @@ class StatusView(GenericAPIView): if not issubclass(status_class, StatusCode): raise NotImplementedError('`status_class` not a valid StatusCode class') - data = {'class': status_class.__name__, 'values': status_class.dict()} + data = {'class_name': status_class.__name__, 'values': status_class.dict()} # Extend with custom values try: @@ -102,10 +100,29 @@ class AllStatusViews(StatusView): def get(self, request, *args, **kwargs): """Perform a GET request to learn information about status codes.""" - data = get_status_api_response(StatusCode) + from InvenTree.helpers import inheritors - # Extend with MachineStatus classes - data.update(get_status_api_response(MachineStatus, prefix=['MachineStatus'])) + data = {} + + # Find all inherited status classes + status_classes = inheritors(StatusCode) + + for cls in status_classes: + cls_data = {'class_name': cls.__name__, 'values': cls.dict()} + + # Extend with custom values + for item in cls.custom_values(): + label = str(item.name) + if label not in cls_data['values']: + cls_data['values'][label] = { + 'color': item.color, + 'logical_key': item.logical_key, + 'key': item.key, + 'label': item.label, + 'name': item.name, + } + + data[cls.__name__] = GenericStateClassSerializer(cls_data, many=False).data return Response(data) diff --git a/src/backend/InvenTree/generic/states/serializers.py b/src/backend/InvenTree/generic/states/serializers.py index 5d16073920..63a057a0fd 100644 --- a/src/backend/InvenTree/generic/states/serializers.py +++ b/src/backend/InvenTree/generic/states/serializers.py @@ -30,9 +30,9 @@ class GenericStateClassSerializer(serializers.Serializer): class Meta: """Meta class for GenericStateClassSerializer.""" - fields = ['class', 'values'] + fields = ['class_name', 'values'] - class_ = serializers.CharField(label=_('Class'), read_only=True) + class_name = serializers.CharField(label=_('Class'), read_only=True) values = serializers.DictField( child=GenericStateValueSerializer(), label=_('Values'), required=True