55from models_library .generics import Envelope
66from models_library .services_enums import ServiceType
77from models_library .services_types import ServiceKey , ServiceVersion
8+ from pydantic import BaseModel
89from servicelib .fastapi .dependencies import get_app
910
1011from ... import exceptions , registry_proxy
1415log = logging .getLogger (__name__ )
1516
1617
17- @router .get ("/services" )
18+ class _ErrorMessage (BaseModel ):
19+ message : str
20+
21+
22+ @router .get (
23+ "/services" ,
24+ response_model = Envelope [list [dict [str , Any ]]],
25+ responses = {
26+ status .HTTP_401_UNAUTHORIZED : {
27+ "model" : _ErrorMessage ,
28+ "description" : "Could not connect with Docker Registry" ,
29+ },
30+ status .HTTP_500_INTERNAL_SERVER_ERROR : {
31+ "model" : _ErrorMessage ,
32+ "description" : "Unexpected error" ,
33+ },
34+ },
35+ )
1836async def list_services (
1937 the_app : Annotated [FastAPI , Depends (get_app )],
2038 service_type : ServiceType | None = None ,
@@ -29,11 +47,11 @@ async def list_services(
2947 services = await registry_proxy .list_services (
3048 the_app , registry_proxy .ServiceType .ALL
3149 )
32- elif "computational" in service_type :
50+ elif service_type is ServiceType . COMPUTATIONAL :
3351 services = await registry_proxy .list_services (
3452 the_app , registry_proxy .ServiceType .COMPUTATIONAL
3553 )
36- elif "interactive" in service_type :
54+ elif service_type is ServiceType . DYNAMIC :
3755 services = await registry_proxy .list_services (
3856 the_app , registry_proxy .ServiceType .DYNAMIC
3957 )
@@ -47,56 +65,57 @@ async def list_services(
4765 ) from err
4866
4967
50- @router .get ("/services/{service_key:path}/{service_version}" )
51- async def get_service (
68+ # NOTE: be careful that /labels must be defined before the more generic get_service
69+ @router .get ("/services/{service_key:path}/{service_version}/labels" )
70+ async def list_service_labels (
5271 the_app : Annotated [FastAPI , Depends (get_app )],
5372 service_key : ServiceKey ,
5473 service_version : ServiceVersion ,
55- ) -> Envelope [list [ dict [str , Any ] ]]:
74+ ) -> Envelope [dict [str , Any ]]:
5675 log .debug (
57- "Client does get_service with service_key %s, service_version %s" ,
76+ "Retrieving service labels with service_key %s, service_version %s" ,
5877 service_key ,
5978 service_version ,
6079 )
6180 try :
62- services = [
63- await registry_proxy .get_image_details (
64- the_app , service_key , service_version
65- )
66- ]
67- return Envelope [list [dict [str , Any ]]](data = services )
81+ service_labels , _ = await registry_proxy .get_image_labels (
82+ the_app , service_key , service_version
83+ )
84+ return Envelope [dict [str , Any ]](data = service_labels )
85+
6886 except exceptions .ServiceNotAvailableError as err :
6987 raise HTTPException (
7088 status_code = status .HTTP_404_NOT_FOUND , detail = f"{ err } "
7189 ) from err
90+
7291 except exceptions .RegistryConnectionError as err :
7392 raise HTTPException (
7493 status_code = status .HTTP_401_UNAUTHORIZED , detail = f"{ err } "
7594 ) from err
7695
7796
78- @router .get ("/services/{service_key:path}/{service_version}/labels " )
79- async def list_service_labels (
97+ @router .get ("/services/{service_key:path}/{service_version}" )
98+ async def get_service (
8099 the_app : Annotated [FastAPI , Depends (get_app )],
81100 service_key : ServiceKey ,
82101 service_version : ServiceVersion ,
83- ) -> Envelope [dict [str , Any ]]:
102+ ) -> Envelope [list [ dict [str , Any ] ]]:
84103 log .debug (
85- "Retrieving service labels with service_key %s, service_version %s" ,
104+ "Client does get_service with service_key %s, service_version %s" ,
86105 service_key ,
87106 service_version ,
88107 )
89108 try :
90- service_labels , _ = await registry_proxy .get_image_labels (
91- the_app , service_key , service_version
92- )
93- return Envelope [dict [str , Any ]](data = service_labels )
94-
109+ services = [
110+ await registry_proxy .get_image_details (
111+ the_app , service_key , service_version
112+ )
113+ ]
114+ return Envelope [list [dict [str , Any ]]](data = services )
95115 except exceptions .ServiceNotAvailableError as err :
96116 raise HTTPException (
97117 status_code = status .HTTP_404_NOT_FOUND , detail = f"{ err } "
98118 ) from err
99-
100119 except exceptions .RegistryConnectionError as err :
101120 raise HTTPException (
102121 status_code = status .HTTP_401_UNAUTHORIZED , detail = f"{ err } "
0 commit comments