async def test_parse_output_data( aiopg_engine: aiopg.sa.engine.Engine, # type: ignore published_project: PublishedProject, user_id: UserID, fake_io_schema: Dict[str, Dict[str, str]], fake_task_output_data: TaskOutputData, mocker: MockerFixture, ): # need some fakes set in the DB sleeper_task: CompTaskAtDB = published_project.tasks[1] no_outputs = {} await set_comp_task_outputs(aiopg_engine, sleeper_task.node_id, fake_io_schema, no_outputs) # mock the set_value function so we can test it is called correctly mocked_node_ports_set_value_fct = mocker.patch( "simcore_sdk.node_ports_v2.port.Port.set_value") # test dask_job_id = generate_dask_job_id( sleeper_task.image.name, sleeper_task.image.tag, user_id, published_project.project.uuid, sleeper_task.node_id, ) await parse_output_data(aiopg_engine, dask_job_id, fake_task_output_data) # the FileUrl types are converted to a pure url expected_values = { k: v.url if isinstance(v, FileUrl) else v for k, v in fake_task_output_data.items() } mocked_node_ports_set_value_fct.assert_has_calls( [mock.call(value) for value in expected_values.values()])
async def parse_output_data( db_engine: Engine, job_id: str, data: TaskOutputData ) -> None: ( service_key, service_version, user_id, project_id, node_id, ) = parse_dask_job_id(job_id) logger.debug( "parsing output %s of dask task for %s:%s of user %s on project '%s' and node '%s'", json_dumps(data, indent=2), service_key, service_version, user_id, project_id, node_id, ) ports = await _create_node_ports( db_engine=db_engine, user_id=user_id, project_id=project_id, node_id=node_id, ) for port_key, port_value in data.items(): value_to_transfer: Optional[links.ItemValue] = None if isinstance(port_value, FileUrl): value_to_transfer = port_value.url else: value_to_transfer = port_value await (await ports.outputs)[port_key].set_value(value_to_transfer)