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" ],
@@ -120,8 +127,11 @@ def __init__(self, persistent_store: DiscoveryStore, base_path: str = "/api/v3.1
120127 strict_slashes = False ,
121128 )
122129
130+ def get_description (self , request : Request , url_args : Dict , response_t : Type [APIResponse ], ** _kwargs ) -> Response :
131+ return response_t (SUPPORTED_PROFILES .to_dict ())
132+
123133 def get_all_aas_ids_by_asset_link (
124- self , request : Request , url_args : dict , response_t : type , ** _kwargs
134+ self , request : Request , url_args : dict , response_t : Type [ APIResponse ] , ** _kwargs
125135 ) -> Response :
126136 asset_ids_param = request .args .get ("assetIds" , "" )
127137 if not asset_ids_param :
@@ -152,7 +162,7 @@ def get_all_aas_ids_by_asset_link(
152162 return response_t (list (paginated_slice ), cursor = cursor )
153163
154164 def search_all_aas_ids_by_asset_link (
155- self , request : Request , url_args : dict , response_t : type , ** _kwargs
165+ self , request : Request , url_args : dict , response_t : Type [ APIResponse ] , ** _kwargs
156166 ) -> Response :
157167 asset_links = HTTPApiDecoder .request_body_list (request , server_model .AssetLink , False )
158168 matching_aas_keys = set ()
@@ -163,13 +173,15 @@ def search_all_aas_ids_by_asset_link(
163173 return response_t (list (paginated_slice ), cursor = cursor )
164174
165175 def get_all_specific_asset_ids_by_aas_id (
166- self , request : Request , url_args : dict , response_t : type , ** _kwargs
176+ self , request : Request , url_args : dict , response_t : Type [ APIResponse ] , ** _kwargs
167177 ) -> Response :
168178 aas_identifier = str (url_args ["aas_id" ])
169179 asset_ids = self .persistent_store .get_all_specific_asset_ids_by_aas_id (aas_identifier )
170180 return response_t (asset_ids )
171181
172- def post_all_asset_links_by_id (self , request : Request , url_args : dict , response_t : type , ** _kwargs ) -> Response :
182+ def post_all_asset_links_by_id (
183+ self , request : Request , url_args : dict , response_t : Type [APIResponse ], ** _kwargs
184+ ) -> Response :
173185 aas_identifier = str (url_args ["aas_id" ])
174186 specific_asset_ids = HTTPApiDecoder .request_body_list (request , model .SpecificAssetId , False )
175187 self .persistent_store .add_specific_asset_ids_to_aas (aas_identifier , specific_asset_ids )
@@ -178,7 +190,9 @@ def post_all_asset_links_by_id(self, request: Request, url_args: dict, response_
178190 updated = {aas_identifier : self .persistent_store .get_all_specific_asset_ids_by_aas_id (aas_identifier )}
179191 return response_t (updated )
180192
181- def delete_all_asset_links_by_id (self , request : Request , url_args : dict , response_t : type , ** _kwargs ) -> Response :
193+ def delete_all_asset_links_by_id (
194+ self , request : Request , url_args : dict , response_t : Type [APIResponse ], ** _kwargs
195+ ) -> Response :
182196 aas_identifier = str (url_args ["aas_id" ])
183197 self .persistent_store .delete_specific_asset_ids_by_aas_id (aas_identifier )
184198 for key in list (self .persistent_store .asset_id_to_aas_ids .keys ()):
0 commit comments