88import werkzeug .routing
99import werkzeug .urls
1010import werkzeug .utils
11- from werkzeug .exceptions import Conflict , NotFound
11+ from werkzeug .exceptions import Conflict , NotFound , BadRequest
1212from werkzeug .routing import MapAdapter , Rule , Submount
1313from werkzeug .wrappers import Request , Response
1414
1515import server .app .model as server_model
1616from basyx .aas import model
17- from server .app .util .converters import Base64URLConverter
17+ from server .app .util .converters import Base64URLConverter , base64url_decode
1818from server .app .interfaces .base import ObjectStoreWSGIApp , APIResponse , is_stripped_request , HTTPApiDecoder
1919
2020
@@ -64,20 +64,26 @@ def _get_all_aas_descriptors(self, request: "Request") -> Tuple[
6464 server_model .AssetAdministrationShellDescriptor
6565 )
6666
67- id_short = request .args .get ("idShort " )
68- if id_short is not None :
69- descriptors = filter ( lambda desc : desc . id_short == id_short , descriptors )
70-
71- asset_ids = request . args . getlist ( "assetIds" )
72- if asset_ids is not None :
73- # Decode and instantiate SpecificAssetIds
74- specific_asset_ids : List [ model . SpecificAssetId ] = list (
75- map ( lambda asset_id : HTTPApiDecoder . base64url_json ( asset_id , model . SpecificAssetId , False ), asset_ids )
67+ asset_kind = request .args .get ("assetKind " )
68+ if asset_kind is not None :
69+ try :
70+ asset_kind = model . AssetKind [ asset_kind ]
71+ except KeyError :
72+ raise BadRequest ( f"Invalid assetKind ' { asset_kind } ', must be one of { list ( model . AssetKind . __members__ ) } " )
73+ descriptors = filter (
74+ lambda desc : desc . asset_kind == asset_kind ,
75+ descriptors
7676 )
77- # Filter AAS based on these SpecificAssetIds
77+
78+ asset_type = request .args .get ("assetType" )
79+ if asset_type is not None :
80+ asset_type = base64url_decode (asset_type )
81+ try :
82+ asset_type = model .Identifier (asset_type )
83+ except Exception :
84+ raise BadRequest (f"Invalid assetType: '{ asset_type } '" )
7885 descriptors = filter (
79- lambda desc : all (specific_asset_id in desc .specific_asset_id
80- for specific_asset_id in specific_asset_ids ),
86+ lambda desc : desc .asset_type == asset_type ,
8187 descriptors
8288 )
8389
@@ -89,14 +95,6 @@ def _get_aas_descriptor(self, url_args: Dict) -> server_model.AssetAdministratio
8995
9096 def _get_all_submodel_descriptors (self , request : Request ) -> Tuple [Iterator [server_model .SubmodelDescriptor ], int ]:
9197 submodel_descriptors : Iterator [server_model .SubmodelDescriptor ] = self ._get_all_obj_of_type (server_model .SubmodelDescriptor )
92- id_short = request .args .get ("idShort" )
93- if id_short is not None :
94- submodel_descriptors = filter (lambda sm : sm .id_short == id_short , submodel_descriptors )
95- semantic_id = request .args .get ("semanticId" )
96- if semantic_id is not None :
97- spec_semantic_id = HTTPApiDecoder .base64url_json (
98- semantic_id , model .Reference , False ) # type: ignore[type-abstract]
99- submodel_descriptors = filter (lambda sm : sm .semantic_id == spec_semantic_id , submodel_descriptors )
10098 paginated_submodel_descriptors , end_index = self ._get_slice (request , submodel_descriptors )
10199 return paginated_submodel_descriptors , end_index
102100
0 commit comments