From 78a2d0ed99c2f303fcde28b9e4d47411ca448205 Mon Sep 17 00:00:00 2001 From: Igor Garmaev <56840636+zrgt@users.noreply.github.com> Date: Tue, 12 May 2026 17:35:33 +0200 Subject: [PATCH 1/5] fix: pass paging_metadata kwarg correctly in get_aas_submodel_refs and get_concept_description_all Closes #539 Both handlers called response_t(..., cursor=cursor) but APIResponse.__init__ accepts paging_metadata, not cursor. _get_slice() already returns Optional[PagingMetadata] as its second value, so the variable just needs to be passed under the correct keyword argument name. --- server/app/interfaces/repository.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/app/interfaces/repository.py b/server/app/interfaces/repository.py index 12d11209..5e038ee5 100644 --- a/server/app/interfaces/repository.py +++ b/server/app/interfaces/repository.py @@ -589,7 +589,7 @@ def get_aas_submodel_refs( submodel_refs: Iterator[model.ModelReference[model.Submodel]] sorted_submodel_refs = sorted(aas.submodel, key=lambda ref: ref.key[0].value) submodel_refs, cursor = self._get_slice(request, sorted_submodel_refs) - return response_t(list(submodel_refs), cursor=cursor) + return response_t(list(submodel_refs), paging_metadata=cursor) def post_aas_submodel_refs(self, request: Request, url_args: Dict, response_t: Type[APIResponse], map_adapter: MapAdapter, **_kwargs) -> Response: @@ -948,7 +948,7 @@ def get_concept_description_all( ) -> Response: concept_descriptions: Iterator[model.ConceptDescription] = self._get_all_obj_of_type(model.ConceptDescription) concept_descriptions, cursor = self._get_slice(request, concept_descriptions) - return response_t(list(concept_descriptions), cursor=cursor, stripped=is_stripped_request(request)) + return response_t(list(concept_descriptions), paging_metadata=cursor, stripped=is_stripped_request(request)) def post_concept_description( self, request: Request, url_args: Dict, response_t: Type[APIResponse], map_adapter: MapAdapter From ece6a85a9dc2b4170cb9eb08a317d43aacc0715b Mon Sep 17 00:00:00 2001 From: zrgt Date: Tue, 12 May 2026 17:48:01 +0200 Subject: [PATCH 2/5] fix: fix paging_metadata kwarg in discovery and registry handlers --- server/app/interfaces/discovery.py | 4 ++-- server/app/interfaces/registry.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/server/app/interfaces/discovery.py b/server/app/interfaces/discovery.py index a6e43361..5d33f4e8 100644 --- a/server/app/interfaces/discovery.py +++ b/server/app/interfaces/discovery.py @@ -161,7 +161,7 @@ def get_all_aas_ids_by_asset_link( matching_aas_keys.update(aas_keys) paginated_slice, cursor = self._get_slice(request, list(matching_aas_keys)) - return response_t(list(paginated_slice), cursor=cursor) + return response_t(list(paginated_slice), paging_metadata=cursor) def search_all_aas_ids_by_asset_link( self, request: Request, url_args: dict, response_t: Type[APIResponse], **_kwargs @@ -172,7 +172,7 @@ def search_all_aas_ids_by_asset_link( aas_keys = self.persistent_store.search_aas_ids_by_asset_link(asset_link) matching_aas_keys.update(aas_keys) paginated_slice, cursor = self._get_slice(request, list(matching_aas_keys)) - return response_t(list(paginated_slice), cursor=cursor) + return response_t(list(paginated_slice), paging_metadata=cursor) def get_all_specific_asset_ids_by_aas_id( self, request: Request, url_args: dict, response_t: Type[APIResponse], **_kwargs diff --git a/server/app/interfaces/registry.py b/server/app/interfaces/registry.py index 8494b629..72581b51 100644 --- a/server/app/interfaces/registry.py +++ b/server/app/interfaces/registry.py @@ -225,7 +225,7 @@ def get_all_submodel_descriptors_through_superpath( ) -> Response: aas_descriptor = self._get_aas_descriptor(url_args) submodel_descriptors, cursor = self._get_slice(request, aas_descriptor.submodel_descriptors) - return response_t(list(submodel_descriptors), cursor=cursor) + return response_t(list(submodel_descriptors), paging_metadata=cursor) def get_submodel_descriptor_by_id_through_superpath( self, request: Request, url_args: Dict, response_t: Type[APIResponse], **_kwargs From 71c6c2a7429c9a266f56c4477c6ed14f6b3b360e Mon Sep 17 00:00:00 2001 From: zrgt Date: Wed, 13 May 2026 11:40:01 +0200 Subject: [PATCH 3/5] Resolve merge conflicts in discovery.py --- server/app/interfaces/discovery.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/server/app/interfaces/discovery.py b/server/app/interfaces/discovery.py index a6a41bef..a340a0e1 100644 --- a/server/app/interfaces/discovery.py +++ b/server/app/interfaces/discovery.py @@ -191,13 +191,8 @@ def get_all_aas_ids_by_asset_link( aas_keys = self.persistent_store.search_aas_ids_by_asset_link(asset_link) matching_aas_keys.update(aas_keys) -<<<<<<< fix/submodel-refs-concept-desc-paging-metadata - paginated_slice, cursor = self._get_slice(request, list(matching_aas_keys)) - return response_t(list(paginated_slice), paging_metadata=cursor) -======= paginated_slice, paging_metadata = self._get_slice(request, list(matching_aas_keys)) return response_t(list(paginated_slice), paging_metadata=paging_metadata) ->>>>>>> develop def search_all_aas_ids_by_asset_link( self, request: Request, url_args: dict, response_t: Type[APIResponse], **_kwargs @@ -207,13 +202,8 @@ def search_all_aas_ids_by_asset_link( for asset_link in asset_links: aas_keys = self.persistent_store.search_aas_ids_by_asset_link(asset_link) matching_aas_keys.update(aas_keys) -<<<<<<< fix/submodel-refs-concept-desc-paging-metadata - paginated_slice, cursor = self._get_slice(request, list(matching_aas_keys)) - return response_t(list(paginated_slice), paging_metadata=cursor) -======= paginated_slice, paging_metadata = self._get_slice(request, list(matching_aas_keys)) return response_t(list(paginated_slice), paging_metadata=paging_metadata) ->>>>>>> develop def get_all_specific_asset_ids_by_aas_id( self, request: Request, url_args: dict, response_t: Type[APIResponse], **_kwargs From 4729d569bfe4bfd42111c2620facfd9964521e8d Mon Sep 17 00:00:00 2001 From: zrgt Date: Wed, 13 May 2026 11:42:17 +0200 Subject: [PATCH 4/5] Rename cursor to paging_metadata for consistency in registry and repository handlers --- server/app/interfaces/registry.py | 4 ++-- server/app/interfaces/repository.py | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/app/interfaces/registry.py b/server/app/interfaces/registry.py index 72581b51..37ab9555 100644 --- a/server/app/interfaces/registry.py +++ b/server/app/interfaces/registry.py @@ -224,8 +224,8 @@ def get_all_submodel_descriptors_through_superpath( self, request: Request, url_args: Dict, response_t: Type[APIResponse], **_kwargs ) -> Response: aas_descriptor = self._get_aas_descriptor(url_args) - submodel_descriptors, cursor = self._get_slice(request, aas_descriptor.submodel_descriptors) - return response_t(list(submodel_descriptors), paging_metadata=cursor) + submodel_descriptors, paging_metadata = self._get_slice(request, aas_descriptor.submodel_descriptors) + return response_t(list(submodel_descriptors), paging_metadata=paging_metadata) def get_submodel_descriptor_by_id_through_superpath( self, request: Request, url_args: Dict, response_t: Type[APIResponse], **_kwargs diff --git a/server/app/interfaces/repository.py b/server/app/interfaces/repository.py index 5e038ee5..ce035c66 100644 --- a/server/app/interfaces/repository.py +++ b/server/app/interfaces/repository.py @@ -588,8 +588,8 @@ def get_aas_submodel_refs( aas = self._get_shell(url_args) submodel_refs: Iterator[model.ModelReference[model.Submodel]] sorted_submodel_refs = sorted(aas.submodel, key=lambda ref: ref.key[0].value) - submodel_refs, cursor = self._get_slice(request, sorted_submodel_refs) - return response_t(list(submodel_refs), paging_metadata=cursor) + submodel_refs, paging_metadata = self._get_slice(request, sorted_submodel_refs) + return response_t(list(submodel_refs), paging_metadata=paging_metadata) def post_aas_submodel_refs(self, request: Request, url_args: Dict, response_t: Type[APIResponse], map_adapter: MapAdapter, **_kwargs) -> Response: @@ -947,8 +947,8 @@ def get_concept_description_all( self, request: Request, url_args: Dict, response_t: Type[APIResponse], **_kwargs ) -> Response: concept_descriptions: Iterator[model.ConceptDescription] = self._get_all_obj_of_type(model.ConceptDescription) - concept_descriptions, cursor = self._get_slice(request, concept_descriptions) - return response_t(list(concept_descriptions), paging_metadata=cursor, stripped=is_stripped_request(request)) + concept_descriptions, paging_metadata = self._get_slice(request, concept_descriptions) + return response_t(list(concept_descriptions), paging_metadata=paging_metadata, stripped=is_stripped_request(request)) def post_concept_description( self, request: Request, url_args: Dict, response_t: Type[APIResponse], map_adapter: MapAdapter From 7499ac4712766deace6e7cc9101b376981973404 Mon Sep 17 00:00:00 2001 From: zrgt Date: Wed, 13 May 2026 12:23:25 +0200 Subject: [PATCH 5/5] Fix E501 line too long in get_concept_description_all --- server/app/interfaces/repository.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/app/interfaces/repository.py b/server/app/interfaces/repository.py index ce035c66..0e75eedd 100644 --- a/server/app/interfaces/repository.py +++ b/server/app/interfaces/repository.py @@ -948,7 +948,8 @@ def get_concept_description_all( ) -> Response: concept_descriptions: Iterator[model.ConceptDescription] = self._get_all_obj_of_type(model.ConceptDescription) concept_descriptions, paging_metadata = self._get_slice(request, concept_descriptions) - return response_t(list(concept_descriptions), paging_metadata=paging_metadata, stripped=is_stripped_request(request)) + return response_t(list(concept_descriptions), paging_metadata=paging_metadata, + stripped=is_stripped_request(request)) def post_concept_description( self, request: Request, url_args: Dict, response_t: Type[APIResponse], map_adapter: MapAdapter