22# pylint: disable=unused-argument
33# pylint: disable=unused-variable
44
5- import json
6- import random
75import re
86from pathlib import Path
97from typing import Any
1311from aioresponses import aioresponses as AioResponsesMock
1412from aioresponses .core import CallbackResult
1513from faker import Faker
14+ from models_library .api_schemas_directorv2 .comp_tasks import ComputationGet
1615from models_library .api_schemas_storage import (
1716 FileMetaDataGet ,
1817 FileUploadCompleteFutureResponse ,
2322 LinkType ,
2423 PresignedLink ,
2524)
26- from models_library .clusters import Cluster
2725from models_library .generics import Envelope
2826from models_library .projects_pipeline import ComputationTask
2927from models_library .projects_state import RunningState
@@ -81,7 +79,7 @@ def create_computation_cb(url, **kwargs) -> CallbackResult:
8179 assert param in body , f"{ param } is missing from body: { body } "
8280 state = (
8381 RunningState .PUBLISHED
84- if "start_pipeline" in body and body [ "start_pipeline" ]
82+ if body . get ( "start_pipeline" )
8583 else RunningState .NOT_STARTED
8684 )
8785 pipeline : dict [str , list [str ]] = FULL_PROJECT_PIPELINE_ADJACENCY
@@ -131,8 +129,13 @@ def get_computation_cb(url, **kwargs) -> CallbackResult:
131129 state = RunningState .NOT_STARTED
132130 pipeline : dict [str , list [str ]] = FULL_PROJECT_PIPELINE_ADJACENCY
133131 node_states = FULL_PROJECT_NODE_STATES
134- returned_computation = ComputationTask .model_validate (
135- ComputationTask .model_config ["json_schema_extra" ]["examples" ][0 ]
132+ assert "json_schema_extra" in ComputationGet .model_config
133+ assert isinstance (ComputationGet .model_config ["json_schema_extra" ], dict )
134+ assert isinstance (
135+ ComputationGet .model_config ["json_schema_extra" ]["examples" ], list
136+ )
137+ returned_computation = ComputationGet .model_validate (
138+ ComputationGet .model_config ["json_schema_extra" ]["examples" ][0 ]
136139 ).model_copy (
137140 update = {
138141 "id" : Path (url .path ).name ,
@@ -151,85 +154,6 @@ def get_computation_cb(url, **kwargs) -> CallbackResult:
151154 )
152155
153156
154- def create_cluster_cb (url , ** kwargs ) -> CallbackResult :
155- assert "json" in kwargs , f"missing body in call to { url } "
156- assert url .query .get ("user_id" )
157- random_cluster = Cluster .model_validate (
158- random .choice (Cluster .model_config ["json_schema_extra" ]["examples" ])
159- )
160- return CallbackResult (
161- status = 201 , payload = json .loads (random_cluster .model_dump_json (by_alias = True ))
162- )
163-
164-
165- def list_clusters_cb (url , ** kwargs ) -> CallbackResult :
166- assert url .query .get ("user_id" )
167- return CallbackResult (
168- status = 200 ,
169- body = json .dumps (
170- [
171- json .loads (
172- Cluster .model_validate (
173- random .choice (
174- Cluster .model_config ["json_schema_extra" ]["examples" ]
175- )
176- ).model_dump_json (by_alias = True )
177- )
178- for _ in range (3 )
179- ]
180- ),
181- )
182-
183-
184- def get_cluster_cb (url , ** kwargs ) -> CallbackResult :
185- assert url .query .get ("user_id" )
186- cluster_id = url .path .split ("/" )[- 1 ]
187- return CallbackResult (
188- status = 200 ,
189- payload = json .loads (
190- Cluster .model_validate (
191- {
192- ** random .choice (
193- Cluster .model_config ["json_schema_extra" ]["examples" ]
194- ),
195- ** {"id" : cluster_id },
196- }
197- ).model_dump_json (by_alias = True )
198- ),
199- )
200-
201-
202- def get_cluster_details_cb (url , ** kwargs ) -> CallbackResult :
203- assert url .query .get ("user_id" )
204- cluster_id = url .path .split ("/" )[- 1 ]
205- assert cluster_id
206- return CallbackResult (
207- status = 200 ,
208- payload = {
209- "scheduler" : {"status" : "RUNNING" },
210- "dashboard_link" : "https://dashboard.link.com" ,
211- },
212- )
213-
214-
215- def patch_cluster_cb (url , ** kwargs ) -> CallbackResult :
216- assert url .query .get ("user_id" )
217- cluster_id = url .path .split ("/" )[- 1 ]
218- return CallbackResult (
219- status = 200 ,
220- payload = json .loads (
221- Cluster .model_validate (
222- {
223- ** random .choice (
224- Cluster .model_config ["json_schema_extra" ]["examples" ]
225- ),
226- ** {"id" : cluster_id },
227- }
228- ).model_dump_json (by_alias = True )
229- ),
230- )
231-
232-
233157@pytest .fixture
234158async def director_v2_service_mock (
235159 aioresponses_mocker : AioResponsesMock ,
@@ -280,73 +204,6 @@ async def director_v2_service_mock(
280204 aioresponses_mocker .delete (delete_computation_pattern , status = 204 , repeat = True )
281205 aioresponses_mocker .patch (projects_networks_pattern , status = 204 , repeat = True )
282206
283- # clusters
284- aioresponses_mocker .post (
285- re .compile (
286- r"^http://[a-z\-_]*director-v2:[0-9]+/v2/clusters\?(\w+(?:=\w+)?\&?){1,}$"
287- ),
288- callback = create_cluster_cb ,
289- status = status .HTTP_201_CREATED ,
290- repeat = True ,
291- )
292-
293- aioresponses_mocker .get (
294- re .compile (
295- r"^http://[a-z\-_]*director-v2:[0-9]+/v2/clusters\?(\w+(?:=\w+)?\&?){1,}$"
296- ),
297- callback = list_clusters_cb ,
298- status = status .HTTP_201_CREATED ,
299- repeat = True ,
300- )
301-
302- aioresponses_mocker .get (
303- re .compile (
304- r"^http://[a-z\-_]*director-v2:[0-9]+/v2/clusters(/[0-9]+)\?(\w+(?:=\w+)?\&?){1,}$"
305- ),
306- callback = get_cluster_cb ,
307- status = status .HTTP_201_CREATED ,
308- repeat = True ,
309- )
310-
311- aioresponses_mocker .get (
312- re .compile (
313- r"^http://[a-z\-_]*director-v2:[0-9]+/v2/clusters/[0-9]+/details\?(\w+(?:=\w+)?\&?){1,}$"
314- ),
315- callback = get_cluster_details_cb ,
316- status = status .HTTP_201_CREATED ,
317- repeat = True ,
318- )
319-
320- aioresponses_mocker .patch (
321- re .compile (
322- r"^http://[a-z\-_]*director-v2:[0-9]+/v2/clusters(/[0-9]+)\?(\w+(?:=\w+)?\&?){1,}$"
323- ),
324- callback = patch_cluster_cb ,
325- status = status .HTTP_201_CREATED ,
326- repeat = True ,
327- )
328- aioresponses_mocker .delete (
329- re .compile (
330- r"^http://[a-z\-_]*director-v2:[0-9]+/v2/clusters(/[0-9]+)\?(\w+(?:=\w+)?\&?){1,}$"
331- ),
332- status = status .HTTP_204_NO_CONTENT ,
333- repeat = True ,
334- )
335-
336- aioresponses_mocker .post (
337- re .compile (r"^http://[a-z\-_]*director-v2:[0-9]+/v2/clusters:ping$" ),
338- status = status .HTTP_204_NO_CONTENT ,
339- repeat = True ,
340- )
341-
342- aioresponses_mocker .post (
343- re .compile (
344- r"^http://[a-z\-_]*director-v2:[0-9]+/v2/clusters(/[0-9]+):ping\?(\w+(?:=\w+)?\&?){1,}$"
345- ),
346- status = status .HTTP_204_NO_CONTENT ,
347- repeat = True ,
348- )
349-
350207 return aioresponses_mocker
351208
352209
0 commit comments