88import subprocess
99
1010import uvicorn
11- import yaml
12- from fastapi import FastAPI , File , UploadFile , status , Request
11+ from fastapi import FastAPI , status , Request , Query
1312from fastapi .exceptions import RequestValidationError
1413from fastapi .responses import JSONResponse
1514from fastapi .testclient import TestClient
15+ from typing import List
1616
1717from bibigrid .core .actions import check , create , terminate , list_clusters
1818from bibigrid .core .utility import id_generation
1919from bibigrid .core .utility .handler import provider_handler
2020from bibigrid .core .rest .models import ValidationResponseModel , CreateResponseModel , TerminateResponseModel , \
21- InfoResponseModel , LogResponseModel , ReadyResponseModel , ConfigurationsModel
21+ InfoResponseModel , LogResponseModel , ReadyResponseModel , ConfigurationsModel , MinimalConfigurationsModel
2222
2323VERSION = "0.0.1"
2424DESCRIPTION = """
@@ -98,7 +98,7 @@ async def validation_exception_handler(request: Request, exc: RequestValidationE
9898
9999
100100@app .post ("/bibigrid/validate" , response_model = ValidationResponseModel )
101- async def validate_configuration (cluster_id : str = None , config_file : UploadFile = File (...) ):
101+ async def validate_configuration (configurations_json : ConfigurationsModel , cluster_id : str = None ):
102102 """
103103 Expects a cluster id and a
104104 [configuration](https://github.com/BiBiServ/bibigrid/blob/master/documentation/markdown/features/configuration.md)
@@ -114,8 +114,7 @@ async def validate_configuration(cluster_id: str = None, config_file: UploadFile
114114 cluster_id , log = setup (cluster_id )
115115 LOG .info (f"Requested validation on { cluster_id } " )
116116 try :
117- content = await config_file .read ()
118- configurations = yaml .safe_load (content .decode ())
117+ configurations = configurations_json .model_dump (exclude_none = True )["configurations" ]
119118 providers = provider_handler .get_providers (configurations , log )
120119 exit_state = check .check (configurations , providers , log )
121120 if exit_state :
@@ -150,7 +149,7 @@ async def create_async():
150149 creator .create ()
151150
152151 try :
153- configurations = configurations_json .model_dump (exclude_none = True )[ "configurations" ]
152+ configurations = configurations_json .model_dump (exclude_none = True )
154153 providers = provider_handler .get_providers (configurations , log )
155154 creator = create .Create (providers = providers , configurations = configurations , log = log ,
156155 config_path = None , cluster_id = cluster_id )
@@ -161,8 +160,8 @@ async def create_async():
161160 return JSONResponse (content = {"error" : str (exc )}, status_code = 400 )
162161
163162
164- @app .post ("/bibigrid/terminate" , response_model = TerminateResponseModel )
165- async def terminate_cluster (cluster_id : str , config_file : UploadFile = File (...) ):
163+ @app .post ("/bibigrid/terminate/{cluster_id} " , response_model = TerminateResponseModel )
164+ async def terminate_cluster (cluster_id : str , configurations_json : MinimalConfigurationsModel ):
166165 """
167166 Expects a cluster id and a
168167 [configuration](https://github.com/BiBiServ/bibigrid/blob/master/documentation/markdown/features/configuration.md)
@@ -181,9 +180,7 @@ async def terminate_async():
181180 terminate .terminate (cluster_id , providers , log )
182181
183182 try :
184- # Rewrite: Maybe load a configuration file stored somewhere locally to just define access
185- content = await config_file .read ()
186- configurations = yaml .safe_load (content .decode ())
183+ configurations = configurations_json .model_dump ()["configurations" ]
187184 providers = provider_handler .get_providers (configurations , log )
188185 asyncio .create_task (terminate_async ())
189186
@@ -192,8 +189,8 @@ async def terminate_async():
192189 return JSONResponse (content = {"error" : str (exc )}, status_code = 400 )
193190
194191
195- @app .post ("/bibigrid/info/" , response_model = InfoResponseModel )
196- async def info (cluster_id : str , config_file : UploadFile ):
192+ @app .get ("/bibigrid/info/" , response_model = InfoResponseModel )
193+ async def info (cluster_id : str , configurations_json : MinimalConfigurationsModel ):
197194 """
198195 Expects a cluster id and a
199196 [configuration](https://github.com/BiBiServ/bibigrid/blob/master/documentation/markdown/features/configuration.md)
@@ -207,9 +204,8 @@ async def info(cluster_id: str, config_file: UploadFile):
207204 """
208205 LOG .debug (f"Requested info on { cluster_id } ." )
209206 cluster_id , log = setup (cluster_id )
210- content = await config_file .read ()
211- configurations = yaml .safe_load (content .decode ())
212207 try :
208+ configurations = configurations_json .model_dump ()["configurations" ]
213209 providers = provider_handler .get_providers (configurations , log )
214210 cluster_dict = list_clusters .dict_clusters (providers , log ).get (cluster_id , {}) # add information filtering
215211 if cluster_dict :
0 commit comments