mirror of
https://github.com/inventree/InvenTree.git
synced 2025-07-16 17:56:30 +00:00
* add file for states * move general definition out * add some tests and docs * add tests for invalid definitions * make status_label tag generic * move templatetags * remove unused tag * rename test file * make status label a lookup * rename tags * move import structure * add missing tag * collect states dynamically * fix context function * move api function out * add tests for tags * rename tests * refactor imports * Add test for API function * improve errors and add tests for imporved errors * make test calls simpler * refactor definitions to use enums * switch to enum * refactor definitions to use enums * fix lookup * fix tag name * make _TAG lookup a function * cleanup BaseEnum * make _TAG definition simpler * restructure status codes to enum * reduce LoC * type status codes as int * add specific function for template context * Add definition for lookups * fix filter lookup * TEST: "fix" action lookup * Add missing migrations * Make all group code references explict * change default on models to value * switch to IntEnum * move groups into a seperate class * only request _TAG if it exsists * use value and list * use dedicated groups * fix stock assigment * fix order code * more fixes * fix borked change * fix render lookup * add group * fix import * fix syntax * clenup * fix migrations * fix typo * fix wrong value usage * fix test * remove group section * remove group section * add more test cases * Add more docstring * move choices out of migrations * change import ordeR? * last try before I revert * Update part.migrations.0112 - Add custom migration class which handles errors * Add unit test for migration - Ensure that the new fields are added to the model * Update reference to PR --------- Co-authored-by: Oliver Walters <oliver.henry.walters@gmail.com>
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
"""Generic implementation of status api functions for InvenTree models."""
|
|
|
|
import inspect
|
|
|
|
from rest_framework import permissions
|
|
from rest_framework.response import Response
|
|
from rest_framework.serializers import ValidationError
|
|
from rest_framework.views import APIView
|
|
|
|
from .states import StatusCode
|
|
|
|
|
|
class StatusView(APIView):
|
|
"""Generic API endpoint for discovering information on 'status codes' for a particular model.
|
|
|
|
This class should be implemented as a subclass for each type of status.
|
|
For example, the API endpoint /stock/status/ will have information about
|
|
all available 'StockStatus' codes
|
|
"""
|
|
|
|
permission_classes = [
|
|
permissions.IsAuthenticated,
|
|
]
|
|
|
|
# Override status_class for implementing subclass
|
|
MODEL_REF = 'statusmodel'
|
|
|
|
def get_status_model(self, *args, **kwargs):
|
|
"""Return the StatusCode moedl based on extra parameters passed to the view"""
|
|
|
|
status_model = self.kwargs.get(self.MODEL_REF, None)
|
|
|
|
if status_model is None:
|
|
raise ValidationError(f"StatusView view called without '{self.MODEL_REF}' parameter")
|
|
|
|
return status_model
|
|
|
|
def get(self, request, *args, **kwargs):
|
|
"""Perform a GET request to learn information about status codes"""
|
|
|
|
status_class = self.get_status_model()
|
|
|
|
if not inspect.isclass(status_class):
|
|
raise NotImplementedError("`status_class` not a class")
|
|
|
|
if not issubclass(status_class, StatusCode):
|
|
raise NotImplementedError("`status_class` not a valid StatusCode class")
|
|
|
|
data = {
|
|
'class': status_class.__name__,
|
|
'values': status_class.dict(),
|
|
}
|
|
|
|
return Response(data)
|