mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-11-03 22:55:43 +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:
		@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user