From 288ec168d38237bf6f6ed8fc6ab463fa1ad64306 Mon Sep 17 00:00:00 2001 From: Marko Ristin-Kaufmann Date: Thu, 29 Oct 2026 20:57:30 +0100 Subject: [PATCH] Update to aas-core-meta 63cbfd3 We update the meta-model to aas-core-meta 63cbfd3 and re-generate the code. Notably, the optional lists in Part 2 are now allowed to be empty where the Part 2 specification and its OpenAPI schema allow them to be empty. Previously, all of them had to be either not set or have at least one item, following the convention of Part 1. This concerns, for example, the results of the paged queries, the messages of the results and operation results, the endpoint protocol versions in protocol information, the AAS IDs in the package description and the filters in the query filter. The non-empty invariants are kept on the lists which have ``minItems`` in the OpenAPI schema, as well as on the lists which mirror their Part 1 counterparts, such as multi-language strings, specific asset IDs, operation arguments and submodel descriptors. --- aas_core3_2/verification.py | 75 ----------- dev/dev_scripts/codegen/meta_model.py | 182 +------------------------- 2 files changed, 2 insertions(+), 255 deletions(-) diff --git a/aas_core3_2/verification.py b/aas_core3_2/verification.py index f8c081d..8cf1b79 100644 --- a/aas_core3_2/verification.py +++ b/aas_core3_2/verification.py @@ -6464,15 +6464,6 @@ def transform_endpoint(self, that: our_types.Endpoint) -> Iterator[Error]: def transform_protocol_information( self, that: our_types.ProtocolInformation ) -> Iterator[Error]: - if not ( - not (that.endpoint_protocol_version is not None) - or (len(that.endpoint_protocol_version) >= 1) - ): - yield Error( - "Endpoint protocol versions must be either not set or have " - + "at least one item." - ) - if not ( not (that.security_attributes is not None) or (len(that.security_attributes) >= 1) @@ -6641,9 +6632,6 @@ def transform_submodel_recent_change( # noinspection PyMethodMayBeStatic def transform_result(self, that: our_types.Result) -> Iterator[Error]: - if not (not (that.messages is not None) or (len(that.messages) >= 1)): - yield Error("Messages must be either not set or have at least one item.") - if that.messages is not None: for error in _verify_list_of__class(that.messages): error.path._prepend(PropertySegment(that, "messages")) @@ -6824,9 +6812,6 @@ def transform_operation_request_async_value_only( def transform_base_operation_result( self, that: our_types.BaseOperationResult ) -> Iterator[Error]: - if not (not (that.messages is not None) or (len(that.messages) >= 1)): - yield Error("Messages must be either not set or have at least one item.") - if that.messages is not None: for error in _verify_list_of__class(that.messages): error.path._prepend(PropertySegment(that, "messages")) @@ -6853,9 +6838,6 @@ def transform_operation_result( + "one item." ) - if not (not (that.messages is not None) or (len(that.messages) >= 1)): - yield Error("Messages must be either not set or have at least one item.") - if that.messages is not None: for error in _verify_list_of__class(that.messages): error.path._prepend(PropertySegment(that, "messages")) @@ -6875,9 +6857,6 @@ def transform_operation_result( def transform_operation_result_value_only( self, that: our_types.OperationResultValueOnly ) -> Iterator[Error]: - if not (not (that.messages is not None) or (len(that.messages) >= 1)): - yield Error("Messages must be either not set or have at least one item.") - if that.messages is not None: for error in _verify_list_of__class(that.messages): error.path._prepend(PropertySegment(that, "messages")) @@ -6927,9 +6906,6 @@ def transform_operation_handle( # noinspection PyMethodMayBeStatic def transform_paged_result(self, that: our_types.PagedResult) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - if that.result is not None: for error in _verify_list_of__class(that.result): error.path._prepend(PropertySegment(that, "result")) @@ -6954,9 +6930,6 @@ def transform_paging_metadata( def transform_package_description( self, that: our_types.PackageDescription ) -> Iterator[Error]: - if not (not (that.aas_ids is not None) or (len(that.aas_ids) >= 1)): - yield Error("AAS IDs must be either not set or have at least one item.") - for error in verify_short_id_type(that.package_id): error.path._prepend(PropertySegment(that, "package_id")) yield error @@ -9118,9 +9091,6 @@ def transform_entity_value(self, that: our_types.EntityValue) -> Iterator[Error] def transform_get_asset_administration_shells_result( self, that: our_types.GetAssetAdministrationShellsResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9134,9 +9104,6 @@ def transform_get_asset_administration_shells_result( def transform_get_asset_administration_shells_metadata_result( self, that: our_types.GetAssetAdministrationShellsMetadataResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9150,9 +9117,6 @@ def transform_get_asset_administration_shells_metadata_result( def transform_get_all_asset_administration_shells_recent_changes_result( self, that: our_types.GetAllAssetAdministrationShellsRecentChangesResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9166,9 +9130,6 @@ def transform_get_all_asset_administration_shells_recent_changes_result( def transform_get_asset_administration_shell_descriptors_result( self, that: our_types.GetAssetAdministrationShellDescriptorsResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9182,9 +9143,6 @@ def transform_get_asset_administration_shell_descriptors_result( def transform_get_concept_descriptions_result( self, that: our_types.GetConceptDescriptionsResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9198,9 +9156,6 @@ def transform_get_concept_descriptions_result( def transform_get_all_concept_descriptions_recent_changes_result( self, that: our_types.GetAllConceptDescriptionsRecentChangesResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9214,9 +9169,6 @@ def transform_get_all_concept_descriptions_recent_changes_result( def transform_get_package_descriptions_result( self, that: our_types.GetPackageDescriptionsResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9230,9 +9182,6 @@ def transform_get_package_descriptions_result( def transform_get_path_items_result( self, that: our_types.GetPathItemsResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9246,9 +9195,6 @@ def transform_get_path_items_result( def transform_get_references_result( self, that: our_types.GetReferencesResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9262,9 +9208,6 @@ def transform_get_references_result( def transform_get_submodel_descriptors_result( self, that: our_types.GetSubmodelDescriptorsResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9278,9 +9221,6 @@ def transform_get_submodel_descriptors_result( def transform_get_submodel_elements_metadata_result( self, that: our_types.GetSubmodelElementsMetadataResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9305,9 +9245,6 @@ def transform_get_submodel_elements_result( + "list shall be specified)." ) - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9344,9 +9281,6 @@ def transform_get_submodel_elements_value_result( def transform_get_all_submodels_recent_changes_result( self, that: our_types.GetAllSubmodelsRecentChangesResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9360,9 +9294,6 @@ def transform_get_all_submodels_recent_changes_result( def transform_get_submodels_metadata_result( self, that: our_types.GetSubmodelsMetadataResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9376,9 +9307,6 @@ def transform_get_submodels_metadata_result( def transform_get_submodels_result( self, that: our_types.GetSubmodelsResult ) -> Iterator[Error]: - if not (not (that.result is not None) or (len(that.result) >= 1)): - yield Error("Result must be either not set or have at least one item.") - for error in verify(that.paging_metadata): error.path._prepend(PropertySegment(that, "paging_metadata")) yield error @@ -9731,9 +9659,6 @@ def transform_query_filter(self, that: our_types.QueryFilter) -> Iterator[Error] # noinspection PyMethodMayBeStatic def transform_query(self, that: our_types.Query) -> Iterator[Error]: - if not (not (that.filters is not None) or (len(that.filters) >= 1)): - yield Error("Filters must be either not set or have at least one item.") - for error in verify(that.condition): error.path._prepend(PropertySegment(that, "condition")) yield error diff --git a/dev/dev_scripts/codegen/meta_model.py b/dev/dev_scripts/codegen/meta_model.py index 27aad19..a25885c 100644 --- a/dev/dev_scripts/codegen/meta_model.py +++ b/dev/dev_scripts/codegen/meta_model.py @@ -1,4 +1,4 @@ -# Downloaded from: https://raw.githubusercontent.com/eclipse-aascw/aas-core-meta/2244c160abe5409a5171342e21a8d7f1cdd6f9c8/aas_core_meta/v3_2.py +# Downloaded from: https://raw.githubusercontent.com/eclipse-aascw/aas-core-meta/63cbfd368a915a6696c6dec5b455dd5430ba652a/aas_core_meta/v3_2.py """ --- WORK IN PROGRESS --- Provide an implementation of the Asset Administration Shell (AAS) V3.2. @@ -7228,12 +7228,6 @@ def __init__( or len(self.security_attributes) >= 1, "Security attributes must be either not set or have at least one item." ) -@invariant( - lambda self: - not (self.endpoint_protocol_version is not None) - or len(self.endpoint_protocol_version) >= 1, - "Endpoint protocol versions must be either not set or have at least one item." -) # fmt: on class Protocol_information(DBC): """ @@ -8411,14 +8405,6 @@ class Status_code(Enum): """Bad gateway""" -# fmt: off -@invariant( - lambda self: - not (self.messages is not None) - or len(self.messages) >= 1, - "Messages must be either not set or have at least one item." -) -# fmt: on class Result(DBC): """ The result object. @@ -8702,14 +8688,6 @@ def __init__( self.inoutput_arguments = inoutput_arguments -# fmt: off -@invariant( - lambda self: - not (self.messages is not None) - or len(self.messages) >= 1, - "Messages must be either not set or have at least one item." -) -# fmt: on class Base_operation_result(DBC): """ The object containing the intermediate state of an operation. @@ -8754,12 +8732,6 @@ def __init__( # fmt: off -@invariant( - lambda self: - not (self.messages is not None) - or len(self.messages) >= 1, - "Messages must be either not set or have at least one item." -) @invariant( lambda self: not (self.output_arguments is not None) @@ -8819,14 +8791,6 @@ def __init__( self.inoutput_arguments = inoutput_arguments -# fmt: off -@invariant( - lambda self: - not (self.messages is not None) - or len(self.messages) >= 1, - "Messages must be either not set or have at least one item." -) -# fmt: on class Operation_result_value_only(DBC): """ The operation's invocation result object in the ValueOnly notation. @@ -9023,14 +8987,6 @@ class Extent(Enum): # region HTTP/REST API -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Paged_result(DBC): """ An object connecting the actual list of returned items with metadata @@ -9084,14 +9040,6 @@ def __init__(self, cursor: Optional[str] = None) -> None: self.cursor = cursor -# fmt: off -@invariant( - lambda self: - not (self.AAS_IDs is not None) - or len(self.AAS_IDs) >= 1, - "AAS IDs must be either not set or have at least one item." -) -# fmt: on class Package_description(DBC): """ The package description consists of a system-wide unique packageId and @@ -10374,14 +10322,6 @@ def __init__( # https://industrialdigitaltwin.io/aas-specifications/IDTA-01002/v3.2/http-rest-api/http-rest-api.html#pagination -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_asset_administration_shells_result(DBC): """ The result of listing all Asset Administration Shells. @@ -10411,14 +10351,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_asset_administration_shells_metadata_result(DBC): """ The result of listing the metadata of all Asset Administration Shells. @@ -10448,14 +10380,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_all_asset_administration_shells_recent_changes_result(DBC): """ The result of listing the recent changes of all Asset Administration Shells. @@ -10485,14 +10409,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_asset_administration_shell_descriptors_result(DBC): """ The result of listing all Asset Administration Shell descriptors. @@ -10522,14 +10438,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_concept_descriptions_result(DBC): """ The result of listing all concept descriptions. @@ -10559,14 +10467,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_all_concept_descriptions_recent_changes_result(DBC): """ The result of listing the recent changes of all concept descriptions. @@ -10596,14 +10496,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_package_descriptions_result(DBC): """ The result of listing all AASX package descriptions. @@ -10633,14 +10525,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_path_items_result(DBC): """ The result of listing idShortPaths. @@ -10670,14 +10554,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_references_result(DBC): """ The result of listing references. @@ -10707,14 +10583,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_submodel_descriptors_result(DBC): """ The result of listing all submodel descriptors. @@ -10744,14 +10612,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_submodel_elements_metadata_result(DBC): """ The result of listing the metadata of all submodel elements. @@ -10782,12 +10642,6 @@ def __init__( # fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) @invariant( lambda self: not (self.result is not None) @@ -10866,14 +10720,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_all_submodels_recent_changes_result(DBC): """ The result of listing the recent changes of all submodels. @@ -10903,14 +10749,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_submodels_metadata_result(DBC): """ The result of listing the metadata of all submodels. @@ -10940,14 +10778,6 @@ def __init__( self.result = result -# fmt: off -@invariant( - lambda self: - not (self.result is not None) - or len(self.result) >= 1, - "Result must be either not set or have at least one item." -) -# fmt: on class Get_submodels_result(DBC): """ The result of listing all submodels. @@ -12349,14 +12179,6 @@ def __init__( self.condition = condition -# fmt: off -@invariant( - lambda self: - not (self.filters is not None) - or len(self.filters) >= 1, - "Filters must be either not set or have at least one item." -) -# fmt: on class Query(DBC): """ A query in the AAS Query Language. @@ -12469,4 +12291,4 @@ def __init__( # endregion Part 2 -# Downloaded from: https://raw.githubusercontent.com/eclipse-aascw/aas-core-meta/2244c160abe5409a5171342e21a8d7f1cdd6f9c8/aas_core_meta/v3_2.py +# Downloaded from: https://raw.githubusercontent.com/eclipse-aascw/aas-core-meta/63cbfd368a915a6696c6dec5b455dd5430ba652a/aas_core_meta/v3_2.py