Skip to content

Commit e3b5ddf

Browse files
committed
adapt filter options for get_all_aas_descritors and remove filter for get_all_submodels_descriptors
1 parent 5d0fd5b commit e3b5ddf

1 file changed

Lines changed: 20 additions & 22 deletions

File tree

server/app/interfaces/registry.py

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88
import werkzeug.routing
99
import werkzeug.urls
1010
import werkzeug.utils
11-
from werkzeug.exceptions import Conflict, NotFound
11+
from werkzeug.exceptions import Conflict, NotFound, BadRequest
1212
from werkzeug.routing import MapAdapter, Rule, Submount
1313
from werkzeug.wrappers import Request, Response
1414

1515
import server.app.model as server_model
1616
from basyx.aas import model
17-
from server.app.util.converters import Base64URLConverter
17+
from server.app.util.converters import Base64URLConverter, base64url_decode
1818
from 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

Comments
 (0)