2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-28 11:36:44 +00:00

Schema cleanup tmp (#9143)

* Add type hints for name, address, expired, and active

* Add nullable to various fields that return null in the test dataset

* Removed nullable type hint, add default boolean value instead of nullable

* Bump schema version

* Add schema version notes, add localized tags for doc string

---------

Co-authored-by: Oliver <oliver.henry.walters@gmail.com>
This commit is contained in:
Joe Rogers 2025-02-28 09:15:35 +01:00 committed by GitHub
parent 92a9423c21
commit 157cbbead5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 44 additions and 17 deletions

View File

@ -1,13 +1,18 @@
"""InvenTree API version information.""" """InvenTree API version information."""
# InvenTree API version # InvenTree API version
INVENTREE_API_VERSION = 316 INVENTREE_API_VERSION = 317
"""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 = """
v317 - 2025-02-26 : https://github.com/inventree/InvenTree/pull/9143
- Default 'overdue' field to False in Build serializer
- Add allow_null to various fields in Build, Settings, Order, Part, and Stock serializers
- Add type hints to Users model to properly type fields
v316 - 2025-02-26 : https://github.com/inventree/InvenTree/pull/9185 v316 - 2025-02-26 : https://github.com/inventree/InvenTree/pull/9185
- Allow 'icon' field to be nullified in the PartCategory API - Allow 'icon' field to be nullified in the PartCategory API
- Allow 'custom_icon' field to be nullified in the StockLocation API - Allow 'custom_icon' field to be nullified in the StockLocation API

View File

@ -123,7 +123,7 @@ class BuildSerializer(
quantity = InvenTreeDecimalField() quantity = InvenTreeDecimalField()
overdue = serializers.BooleanField(required=False, read_only=True) overdue = serializers.BooleanField(read_only=True, default=False)
issued_by_detail = UserSerializer(source='issued_by', read_only=True) issued_by_detail = UserSerializer(source='issued_by', read_only=True)
@ -132,11 +132,14 @@ class BuildSerializer(
barcode_hash = serializers.CharField(read_only=True) barcode_hash = serializers.CharField(read_only=True)
project_code_label = serializers.CharField( project_code_label = serializers.CharField(
source='project_code.code', read_only=True, label=_('Project Code Label') source='project_code.code',
read_only=True,
label=_('Project Code Label'),
allow_null=True,
) )
project_code_detail = ProjectCodeSerializer( project_code_detail = ProjectCodeSerializer(
source='project_code', many=False, read_only=True source='project_code', many=False, read_only=True, allow_null=True
) )
create_child_builds = serializers.BooleanField( create_child_builds = serializers.BooleanField(

View File

@ -69,11 +69,11 @@ class SettingsSerializer(InvenTreeModelSerializer):
choices = serializers.SerializerMethodField() choices = serializers.SerializerMethodField()
model_name = serializers.CharField(read_only=True) model_name = serializers.CharField(read_only=True, allow_null=True)
model_filters = serializers.DictField(read_only=True) model_filters = serializers.DictField(read_only=True)
api_url = serializers.CharField(read_only=True) api_url = serializers.CharField(read_only=True, allow_null=True)
value = SettingsValueField(allow_null=True) value = SettingsValueField(allow_null=True)

View File

@ -160,6 +160,14 @@ class CompanySerializer(
return queryset return queryset
address = serializers.CharField(
label=_(
'Return the string representation for the primary address. This property exists for backwards compatibility.'
),
allow_null=True,
read_only=True,
)
primary_address = AddressSerializer(required=False, allow_null=True, read_only=True) primary_address = AddressSerializer(required=False, allow_null=True, read_only=True)
image = InvenTreeImageSerializerField(required=False, allow_null=True) image = InvenTreeImageSerializerField(required=False, allow_null=True)

View File

@ -137,12 +137,15 @@ class AbstractOrderSerializer(DataImportExportSerializerMixin, serializers.Seria
) )
project_code_label = serializers.CharField( project_code_label = serializers.CharField(
source='project_code.code', read_only=True, label='Project Code Label' source='project_code.code',
read_only=True,
label='Project Code Label',
allow_null=True,
) )
# Detail for project code field # Detail for project code field
project_code_detail = ProjectCodeSerializer( project_code_detail = ProjectCodeSerializer(
source='project_code', read_only=True, many=False source='project_code', read_only=True, many=False, allow_null=True
) )
# Detail for address field # Detail for address field

View File

@ -386,7 +386,9 @@ class PartBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer):
self.fields.pop('pricing_min', None) self.fields.pop('pricing_min', None)
self.fields.pop('pricing_max', None) self.fields.pop('pricing_max', None)
category_default_location = serializers.IntegerField(read_only=True) category_default_location = serializers.IntegerField(
read_only=True, allow_null=True
)
image = InvenTree.serializers.InvenTreeImageSerializerField(read_only=True) image = InvenTree.serializers.InvenTreeImageSerializerField(read_only=True)
thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True) thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True)
@ -969,7 +971,9 @@ class PartSerializer(
unallocated_stock = serializers.FloatField( unallocated_stock = serializers.FloatField(
read_only=True, label=_('Unallocated Stock') read_only=True, label=_('Unallocated Stock')
) )
category_default_location = serializers.IntegerField(read_only=True) category_default_location = serializers.IntegerField(
read_only=True, allow_null=True
)
variant_stock = serializers.FloatField(read_only=True, label=_('Variant Stock')) variant_stock = serializers.FloatField(read_only=True, label=_('Variant Stock'))
minimum_stock = serializers.FloatField( minimum_stock = serializers.FloatField(

View File

@ -593,13 +593,17 @@ class StockItemSerializer(
) )
SKU = serializers.CharField( SKU = serializers.CharField(
source='supplier_part.SKU', read_only=True, label=_('Supplier Part Number') source='supplier_part.SKU',
read_only=True,
label=_('Supplier Part Number'),
allow_null=True,
) )
MPN = serializers.CharField( MPN = serializers.CharField(
source='supplier_part.manufacturer_part.MPN', source='supplier_part.manufacturer_part.MPN',
read_only=True, read_only=True,
label=_('Manufacturer Part Number'), label=_('Manufacturer Part Number'),
allow_null=True,
) )
# Optional detail fields, which can be appended via query parameters # Optional detail fields, which can be appended via query parameters
@ -657,11 +661,11 @@ class StockItemSerializer(
) )
purchase_order_reference = serializers.CharField( purchase_order_reference = serializers.CharField(
source='purchase_order.reference', read_only=True source='purchase_order.reference', read_only=True, allow_null=True
) )
sales_order_reference = serializers.CharField( sales_order_reference = serializers.CharField(
source='sales_order.reference', read_only=True source='sales_order.reference', read_only=True, allow_null=True
) )
tags = TagListSerializerField(required=False) tags = TagListSerializerField(required=False)

View File

@ -137,7 +137,7 @@ class ApiToken(AuthToken, InvenTree.models.MetadataMixin):
) )
@staticmethod @staticmethod
def sanitize_name(name: str): def sanitize_name(name: str) -> str:
"""Sanitize the provide name value.""" """Sanitize the provide name value."""
name = str(name).strip() name = str(name).strip()
@ -155,7 +155,7 @@ class ApiToken(AuthToken, InvenTree.models.MetadataMixin):
@property @property
@admin.display(description=_('Token')) @admin.display(description=_('Token'))
def token(self): def token(self) -> str:
"""Provide a redacted version of the token. """Provide a redacted version of the token.
The *raw* key value should never be displayed anywhere! The *raw* key value should never be displayed anywhere!
@ -170,7 +170,7 @@ class ApiToken(AuthToken, InvenTree.models.MetadataMixin):
@property @property
@admin.display(boolean=True, description=_('Expired')) @admin.display(boolean=True, description=_('Expired'))
def expired(self): def expired(self) -> bool:
"""Test if this token has expired.""" """Test if this token has expired."""
return ( return (
self.expiry is not None and self.expiry < InvenTree.helpers.current_date() self.expiry is not None and self.expiry < InvenTree.helpers.current_date()
@ -178,7 +178,7 @@ class ApiToken(AuthToken, InvenTree.models.MetadataMixin):
@property @property
@admin.display(boolean=True, description=_('Active')) @admin.display(boolean=True, description=_('Active'))
def active(self): def active(self) -> bool:
"""Test if this token is active.""" """Test if this token is active."""
return not self.revoked and not self.expired return not self.revoked and not self.expired