2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-28 03:26:45 +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
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."""
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
- Allow 'icon' field to be nullified in the PartCategory API
- Allow 'custom_icon' field to be nullified in the StockLocation API

View File

@ -123,7 +123,7 @@ class BuildSerializer(
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)
@ -132,11 +132,14 @@ class BuildSerializer(
barcode_hash = serializers.CharField(read_only=True)
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(
source='project_code', many=False, read_only=True
source='project_code', many=False, read_only=True, allow_null=True
)
create_child_builds = serializers.BooleanField(

View File

@ -69,11 +69,11 @@ class SettingsSerializer(InvenTreeModelSerializer):
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)
api_url = serializers.CharField(read_only=True)
api_url = serializers.CharField(read_only=True, allow_null=True)
value = SettingsValueField(allow_null=True)

View File

@ -160,6 +160,14 @@ class CompanySerializer(
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)
image = InvenTreeImageSerializerField(required=False, allow_null=True)

View File

@ -137,12 +137,15 @@ class AbstractOrderSerializer(DataImportExportSerializerMixin, serializers.Seria
)
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
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

View File

@ -386,7 +386,9 @@ class PartBriefSerializer(InvenTree.serializers.InvenTreeModelSerializer):
self.fields.pop('pricing_min', 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)
thumbnail = serializers.CharField(source='get_thumbnail_url', read_only=True)
@ -969,7 +971,9 @@ class PartSerializer(
unallocated_stock = serializers.FloatField(
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'))
minimum_stock = serializers.FloatField(

View File

@ -593,13 +593,17 @@ class StockItemSerializer(
)
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(
source='supplier_part.manufacturer_part.MPN',
read_only=True,
label=_('Manufacturer Part Number'),
allow_null=True,
)
# Optional detail fields, which can be appended via query parameters
@ -657,11 +661,11 @@ class StockItemSerializer(
)
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(
source='sales_order.reference', read_only=True
source='sales_order.reference', read_only=True, allow_null=True
)
tags = TagListSerializerField(required=False)

View File

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