55"""
66
77import json
8- from typing import Dict , List , Set
8+ from typing import Dict , List , Set , Type
99
1010import werkzeug .exceptions
1111from basyx .aas import model
1414
1515from app import model as server_model
1616from app .adapter import jsonization
17- from app .interfaces .base import BaseWSGIApp , HTTPApiDecoder
17+ from app .interfaces .base import BaseWSGIApp , HTTPApiDecoder , APIResponse
1818from app .util .converters import IdentifierToBase64URLConverter , base64url_decode
19+ from app .model import ServiceSpecificationProfileEnum , ServiceDescription
20+
21+ SUPPORTED_PROFILES : ServiceDescription = ServiceDescription ([
22+ ServiceSpecificationProfileEnum .DISCOVERY_FULL ,
23+ ServiceSpecificationProfileEnum .DISCOVERY_READ ,
24+ ])
1925
2026
2127class DiscoveryStore :
@@ -90,6 +96,7 @@ def __init__(self, persistent_store: DiscoveryStore, base_path: str = "/api/v3.1
9096 Submount (
9197 base_path ,
9298 [
99+ Rule ("/description" , methods = ["GET" ], endpoint = self .get_description ),
93100 Rule (
94101 "/lookup/shellsByAssetLink" ,
95102 methods = ["POST" ],
@@ -122,8 +129,11 @@ def __init__(self, persistent_store: DiscoveryStore, base_path: str = "/api/v3.1
122129 strict_slashes = False ,
123130 )
124131
132+ def get_description (self , request : Request , url_args : Dict , response_t : Type [APIResponse ], ** _kwargs ) -> Response :
133+ return response_t (SUPPORTED_PROFILES .to_dict ())
134+
125135 def get_all_aas_ids_by_asset_link (
126- self , request : Request , url_args : dict , response_t : type , ** _kwargs
136+ self , request : Request , url_args : dict , response_t : Type [ APIResponse ] , ** _kwargs
127137 ) -> Response :
128138 asset_ids_param = request .args .get ("assetIds" , "" )
129139 if not asset_ids_param :
@@ -154,7 +164,7 @@ def get_all_aas_ids_by_asset_link(
154164 return response_t (list (paginated_slice ), cursor = cursor )
155165
156166 def search_all_aas_ids_by_asset_link (
157- self , request : Request , url_args : dict , response_t : type , ** _kwargs
167+ self , request : Request , url_args : dict , response_t : Type [ APIResponse ] , ** _kwargs
158168 ) -> Response :
159169 asset_links = HTTPApiDecoder .request_body_list (request , server_model .AssetLink , False )
160170 matching_aas_keys = set ()
@@ -165,13 +175,15 @@ def search_all_aas_ids_by_asset_link(
165175 return response_t (list (paginated_slice ), cursor = cursor )
166176
167177 def get_all_specific_asset_ids_by_aas_id (
168- self , request : Request , url_args : dict , response_t : type , ** _kwargs
178+ self , request : Request , url_args : dict , response_t : Type [ APIResponse ] , ** _kwargs
169179 ) -> Response :
170180 aas_identifier = str (url_args ["aas_id" ])
171181 asset_ids = self .persistent_store .get_all_specific_asset_ids_by_aas_id (aas_identifier )
172182 return response_t (asset_ids )
173183
174- def post_all_asset_links_by_id (self , request : Request , url_args : dict , response_t : type , ** _kwargs ) -> Response :
184+ def post_all_asset_links_by_id (
185+ self , request : Request , url_args : dict , response_t : Type [APIResponse ], ** _kwargs
186+ ) -> Response :
175187 aas_identifier = str (url_args ["aas_id" ])
176188 specific_asset_ids = HTTPApiDecoder .request_body_list (request , model .SpecificAssetId , False )
177189 self .persistent_store .add_specific_asset_ids_to_aas (aas_identifier , specific_asset_ids )
@@ -180,7 +192,9 @@ def post_all_asset_links_by_id(self, request: Request, url_args: dict, response_
180192 updated = {aas_identifier : self .persistent_store .get_all_specific_asset_ids_by_aas_id (aas_identifier )}
181193 return response_t (updated )
182194
183- def delete_all_asset_links_by_id (self , request : Request , url_args : dict , response_t : type , ** _kwargs ) -> Response :
195+ def delete_all_asset_links_by_id (
196+ self , request : Request , url_args : dict , response_t : Type [APIResponse ], ** _kwargs
197+ ) -> Response :
184198 aas_identifier = str (url_args ["aas_id" ])
185199 self .persistent_store .delete_specific_asset_ids_by_aas_id (aas_identifier )
186200 for key in list (self .persistent_store .asset_id_to_aas_ids .keys ()):
0 commit comments