mirror of
https://github.com/inventree/InvenTree.git
synced 2025-10-23 17:37:38 +00:00
refactor(backend): Editorial changes to machine serializer descriptions (#10630)
* improve serializer text * small type improvs * more precise text (for API) * bump api version * more fixes
This commit is contained in:
@@ -1,12 +1,15 @@
|
|||||||
"""InvenTree API version information."""
|
"""InvenTree API version information."""
|
||||||
|
|
||||||
# InvenTree API version
|
# InvenTree API version
|
||||||
INVENTREE_API_VERSION = 410
|
INVENTREE_API_VERSION = 411
|
||||||
|
|
||||||
"""Increment this API version number whenever there is a significant change to the API that any clients need to know about."""
|
"""Increment this API version number whenever there is a significant change to the API that any clients need to know about."""
|
||||||
|
|
||||||
INVENTREE_API_TEXT = """
|
INVENTREE_API_TEXT = """
|
||||||
|
|
||||||
|
v411 -> 2025-06-19 : https://github.com/inventree/InvenTree/pull/10630
|
||||||
|
- Editorialy changes to machine api - no functional changes
|
||||||
|
|
||||||
v410 -> 2025-06-12 : https://github.com/inventree/InvenTree/pull/9761
|
v410 -> 2025-06-12 : https://github.com/inventree/InvenTree/pull/9761
|
||||||
- Add supplier search and import API endpoints
|
- Add supplier search and import API endpoints
|
||||||
- Add part parameter bulk create API endpoint
|
- Add part parameter bulk create API endpoint
|
||||||
|
@@ -166,7 +166,7 @@ class MachineTypesList(APIView):
|
|||||||
|
|
||||||
@extend_schema(responses={200: MachineSerializers.MachineTypeSerializer(many=True)})
|
@extend_schema(responses={200: MachineSerializers.MachineTypeSerializer(many=True)})
|
||||||
def get(self, request):
|
def get(self, request):
|
||||||
"""List all machine types."""
|
"""List of all machine types."""
|
||||||
machine_types = list(registry.get_machine_types())
|
machine_types = list(registry.get_machine_types())
|
||||||
results = MachineSerializers.MachineTypeSerializer(
|
results = MachineSerializers.MachineTypeSerializer(
|
||||||
machine_types, many=True
|
machine_types, many=True
|
||||||
|
@@ -48,6 +48,9 @@ class MachineStatus(StatusCode):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
MachinePropertyType = Literal['str', 'bool', 'progress', 'int', 'float']
|
||||||
|
|
||||||
|
|
||||||
class MachineProperty(TypedDict, total=False):
|
class MachineProperty(TypedDict, total=False):
|
||||||
"""Type definition for machine properties.
|
"""Type definition for machine properties.
|
||||||
|
|
||||||
@@ -62,7 +65,7 @@ class MachineProperty(TypedDict, total=False):
|
|||||||
key: str
|
key: str
|
||||||
value: Union[str, bool, int, float]
|
value: Union[str, bool, int, float]
|
||||||
group: str
|
group: str
|
||||||
type: Literal['str', 'bool', 'progress', 'int', 'float']
|
type: MachinePropertyType
|
||||||
max_progress: Union[int, None]
|
max_progress: Union[int, None]
|
||||||
|
|
||||||
|
|
||||||
|
@@ -11,6 +11,7 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
|
|
||||||
import common.models
|
import common.models
|
||||||
from machine import registry
|
from machine import registry
|
||||||
|
from machine.machine_type import BaseMachineType
|
||||||
|
|
||||||
|
|
||||||
class MachineConfig(models.Model):
|
class MachineConfig(models.Model):
|
||||||
@@ -83,7 +84,7 @@ class MachineConfig(models.Model):
|
|||||||
return machine
|
return machine
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def machine(self):
|
def machine(self) -> Optional[BaseMachineType]:
|
||||||
"""Machine instance getter."""
|
"""Machine instance getter."""
|
||||||
return registry.get_machine(self.pk)
|
return registry.get_machine(self.pk)
|
||||||
|
|
||||||
|
@@ -384,7 +384,7 @@ class MachineRegistry(
|
|||||||
return list(self.machine_types.values())
|
return list(self.machine_types.values())
|
||||||
|
|
||||||
@machine_registry_entrypoint()
|
@machine_registry_entrypoint()
|
||||||
def get_machine(self, pk: Union[str, UUID]):
|
def get_machine(self, pk: Union[str, UUID]) -> Optional[BaseMachineType]:
|
||||||
"""Get machine from registry by pk."""
|
"""Get machine from registry by pk."""
|
||||||
return self.machines.get(str(pk), None)
|
return self.machines.get(str(pk), None)
|
||||||
|
|
||||||
|
@@ -2,16 +2,19 @@
|
|||||||
|
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from common.serializers import GenericReferencedSettingSerializer
|
from common.serializers import GenericReferencedSettingSerializer
|
||||||
from InvenTree.helpers_mixin import ClassProviderMixin
|
from InvenTree.helpers_mixin import ClassProviderMixin
|
||||||
from machine import registry
|
from machine import registry
|
||||||
|
from machine.machine_type import MachinePropertyType
|
||||||
from machine.models import MachineConfig, MachineSetting
|
from machine.models import MachineConfig, MachineSetting
|
||||||
|
|
||||||
|
|
||||||
class MachinePropertySerializer(serializers.Serializer):
|
class MachinePropertySerializer(serializers.Serializer):
|
||||||
"""Serializer for a MachineProperty."""
|
"""Machine Properties are set by the driver/machine to represent specific state."""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta for serializer."""
|
"""Meta for serializer."""
|
||||||
@@ -19,11 +22,28 @@ class MachinePropertySerializer(serializers.Serializer):
|
|||||||
fields = ['key', 'value', 'group', 'type', 'max_progress']
|
fields = ['key', 'value', 'group', 'type', 'max_progress']
|
||||||
read_only_fields = fields
|
read_only_fields = fields
|
||||||
|
|
||||||
key = serializers.CharField()
|
key = serializers.CharField(
|
||||||
value = serializers.CharField()
|
label=_('Key'), help_text=_('Key of the property'), required=True
|
||||||
group = serializers.CharField()
|
)
|
||||||
type = serializers.CharField()
|
value = serializers.CharField(
|
||||||
max_progress = serializers.IntegerField()
|
label=_('Value'), help_text=_('Value of the property'), required=True
|
||||||
|
)
|
||||||
|
group = serializers.CharField(
|
||||||
|
label=_('Group'), help_text=_('Grouping of the property'), required=False
|
||||||
|
)
|
||||||
|
type = serializers.ChoiceField(
|
||||||
|
label=_('Type'),
|
||||||
|
choices=MachinePropertyType.__args__,
|
||||||
|
help_text=_('Type of the property'),
|
||||||
|
default='str',
|
||||||
|
required=False,
|
||||||
|
)
|
||||||
|
max_progress = serializers.IntegerField(
|
||||||
|
label=_('Max Progress'),
|
||||||
|
help_text=_('Maximum value for progress type, required if type=progress'),
|
||||||
|
required=False,
|
||||||
|
allow_null=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class MachineConfigSerializer(serializers.ModelSerializer):
|
class MachineConfigSerializer(serializers.ModelSerializer):
|
||||||
@@ -66,35 +86,35 @@ class MachineConfigSerializer(serializers.ModelSerializer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def get_initialized(self, obj: MachineConfig) -> bool:
|
def get_initialized(self, obj: MachineConfig) -> bool:
|
||||||
"""Serializer method for the initialized field."""
|
"""Indicator if machine is initialized."""
|
||||||
return getattr(obj.machine, 'initialized', False)
|
return getattr(obj.machine, 'initialized', False)
|
||||||
|
|
||||||
def get_status(self, obj: MachineConfig) -> int:
|
def get_status(self, obj: MachineConfig) -> int:
|
||||||
"""Serializer method for the status field."""
|
"""Numerical machine status if available, else -1."""
|
||||||
status = getattr(obj.machine, 'status', None)
|
status = getattr(obj.machine, 'status', None)
|
||||||
if status is not None:
|
if status is not None:
|
||||||
return status.value
|
return status.value
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
def get_status_model(self, obj: MachineConfig) -> Union[str, None]:
|
def get_status_model(self, obj: MachineConfig) -> Union[str, None]:
|
||||||
"""Serializer method for the status model field."""
|
"""Textual machine status name if available, else None."""
|
||||||
if obj.machine and obj.machine.MACHINE_STATUS:
|
if obj.machine and obj.machine.MACHINE_STATUS:
|
||||||
return obj.machine.MACHINE_STATUS.__name__
|
return obj.machine.MACHINE_STATUS.__name__
|
||||||
|
|
||||||
def get_status_text(self, obj: MachineConfig) -> str:
|
def get_status_text(self, obj: MachineConfig) -> str:
|
||||||
"""Serializer method for the status text field."""
|
"""Current status text for machine."""
|
||||||
return getattr(obj.machine, 'status_text', '')
|
return getattr(obj.machine, 'status_text', '')
|
||||||
|
|
||||||
def get_errors(self, obj: MachineConfig) -> list[str]:
|
def get_errors(self, obj: MachineConfig) -> list[str]:
|
||||||
"""Serializer method for the errors field."""
|
"""List of machine errors."""
|
||||||
return [str(err) for err in obj.errors]
|
return [str(err) for err in obj.errors]
|
||||||
|
|
||||||
def get_is_driver_available(self, obj: MachineConfig) -> bool:
|
def get_is_driver_available(self, obj: MachineConfig) -> bool:
|
||||||
"""Serializer method for the is_driver_available field."""
|
"""Indicator if driver for machine is available."""
|
||||||
return obj.is_driver_available()
|
return obj.is_driver_available()
|
||||||
|
|
||||||
def get_restart_required(self, obj: MachineConfig) -> bool:
|
def get_restart_required(self, obj: MachineConfig) -> bool:
|
||||||
"""Serializer method for the restart_required field."""
|
"""Indicator if machine restart is required."""
|
||||||
return getattr(obj.machine, 'restart_required', False)
|
return getattr(obj.machine, 'restart_required', False)
|
||||||
|
|
||||||
|
|
||||||
@@ -148,11 +168,11 @@ class BaseMachineClassSerializer(serializers.Serializer):
|
|||||||
is_builtin = serializers.SerializerMethodField('get_is_builtin')
|
is_builtin = serializers.SerializerMethodField('get_is_builtin')
|
||||||
|
|
||||||
def get_provider_file(self, obj: ClassProviderMixin) -> str:
|
def get_provider_file(self, obj: ClassProviderMixin) -> str:
|
||||||
"""Serializer method for the provider_file field."""
|
"""File that contains the class definition."""
|
||||||
return obj.get_provider_file()
|
return obj.get_provider_file()
|
||||||
|
|
||||||
def get_provider_plugin(self, obj: ClassProviderMixin) -> Union[dict, None]:
|
def get_provider_plugin(self, obj: ClassProviderMixin) -> Union[dict, None]:
|
||||||
"""Serializer method for the provider_plugin field."""
|
"""Plugin(s) that contain(s) the class definition."""
|
||||||
plugin = obj.get_provider_plugin()
|
plugin = obj.get_provider_plugin()
|
||||||
if plugin:
|
if plugin:
|
||||||
return {
|
return {
|
||||||
@@ -163,12 +183,12 @@ class BaseMachineClassSerializer(serializers.Serializer):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def get_is_builtin(self, obj: ClassProviderMixin) -> bool:
|
def get_is_builtin(self, obj: ClassProviderMixin) -> bool:
|
||||||
"""Serializer method for the is_builtin field."""
|
"""Indicates if the machine type is build into the InvenTree source code."""
|
||||||
return obj.get_is_builtin()
|
return obj.get_is_builtin()
|
||||||
|
|
||||||
|
|
||||||
class MachineTypeSerializer(BaseMachineClassSerializer):
|
class MachineTypeSerializer(BaseMachineClassSerializer):
|
||||||
"""Serializer for a BaseMachineType class."""
|
"""Available machine types."""
|
||||||
|
|
||||||
class Meta(BaseMachineClassSerializer.Meta):
|
class Meta(BaseMachineClassSerializer.Meta):
|
||||||
"""Meta for a serializer."""
|
"""Meta for a serializer."""
|
||||||
@@ -177,7 +197,7 @@ class MachineTypeSerializer(BaseMachineClassSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class MachineDriverSerializer(BaseMachineClassSerializer):
|
class MachineDriverSerializer(BaseMachineClassSerializer):
|
||||||
"""Serializer for a BaseMachineDriver class."""
|
"""Machine drivers."""
|
||||||
|
|
||||||
class Meta(BaseMachineClassSerializer.Meta):
|
class Meta(BaseMachineClassSerializer.Meta):
|
||||||
"""Meta for a serializer."""
|
"""Meta for a serializer."""
|
||||||
@@ -189,7 +209,7 @@ class MachineDriverSerializer(BaseMachineClassSerializer):
|
|||||||
driver_errors = serializers.SerializerMethodField('get_errors')
|
driver_errors = serializers.SerializerMethodField('get_errors')
|
||||||
|
|
||||||
def get_errors(self, obj) -> list[str]:
|
def get_errors(self, obj) -> list[str]:
|
||||||
"""Serializer method for the errors field."""
|
"""Errors registered against driver."""
|
||||||
driver_instance = registry.get_driver_instance(obj.SLUG)
|
driver_instance = registry.get_driver_instance(obj.SLUG)
|
||||||
|
|
||||||
if driver_instance is None:
|
if driver_instance is None:
|
||||||
@@ -198,7 +218,7 @@ class MachineDriverSerializer(BaseMachineClassSerializer):
|
|||||||
|
|
||||||
|
|
||||||
class MachineRegistryErrorSerializer(serializers.Serializer):
|
class MachineRegistryErrorSerializer(serializers.Serializer):
|
||||||
"""Serializer for a machine registry error."""
|
"""Machine registry error."""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta for a serializer."""
|
"""Meta for a serializer."""
|
||||||
@@ -209,7 +229,7 @@ class MachineRegistryErrorSerializer(serializers.Serializer):
|
|||||||
|
|
||||||
|
|
||||||
class MachineRegistryStatusSerializer(serializers.Serializer):
|
class MachineRegistryStatusSerializer(serializers.Serializer):
|
||||||
"""Serializer for machine registry status."""
|
"""Machine registry status, showing all errors that were registered."""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
"""Meta for a serializer."""
|
"""Meta for a serializer."""
|
||||||
|
Reference in New Issue
Block a user