1
1
import logging
2
2
from collections .abc import Callable
3
3
from typing import Annotated
4
- from uuid import UUID
5
4
6
5
from fastapi import APIRouter , Depends , Header , Query , Request , status
7
6
from fastapi .encoders import jsonable_encoder
8
7
from fastapi .responses import JSONResponse
9
8
from fastapi_pagination .api import create_page
10
- from models_library .api_schemas_webserver .projects import ProjectPatch
11
- from models_library .api_schemas_webserver .projects_nodes import NodeOutputs
12
9
from models_library .clusters import ClusterID
13
- from models_library .function_services_catalog .services import file_picker
14
10
from models_library .projects import ProjectID
15
- from models_library .projects_nodes import InputID , InputTypes
16
11
from models_library .projects_nodes_io import NodeID
17
12
from pydantic import HttpUrl , PositiveInt
18
13
from servicelib .logging_utils import log_context
42
37
from ...services_http .solver_job_models_converters import create_jobstatus_from_task
43
38
from ...services_http .storage import StorageApi
44
39
from ...services_http .study_job_models_converters import (
45
- create_job_from_study ,
46
40
create_job_outputs_from_project_outputs ,
47
- get_project_and_file_inputs_from_job_inputs ,
48
41
)
49
42
from ...services_http .webserver import AuthSession
50
- from ...services_rpc .wb_api_server import WbApiRpcClient
51
43
from ..dependencies .application import get_reverse_url_mapper
52
- from ..dependencies .authentication import get_current_user_id , get_product_name
44
+ from ..dependencies .authentication import get_current_user_id
53
45
from ..dependencies .services import get_api_client , get_study_service
54
46
from ..dependencies .webserver_http import AuthSession , get_webserver_session
55
- from ..dependencies .webserver_rpc import (
56
- get_wb_api_rpc_client ,
57
- )
58
47
from ._constants import (
59
48
FMSG_CHANGELOG_CHANGED_IN_VERSION ,
60
49
FMSG_CHANGELOG_NEW_IN_VERSION ,
@@ -98,9 +87,6 @@ async def list_study_jobs(
98
87
study_service : Annotated [StudyService , Depends (get_study_service )],
99
88
url_for : Annotated [Callable , Depends (get_reverse_url_mapper )],
100
89
):
101
- msg = f"list study jobs study_id={ study_id !r} with pagination={ page_params !r} . SEE https://github.com/ITISFoundation/osparc-simcore/issues/4177"
102
- _logger .debug (msg )
103
-
104
90
jobs , meta = await study_service .list_jobs (
105
91
filter_by_study_id = study_id ,
106
92
pagination_offset = page_params .offset ,
@@ -128,27 +114,24 @@ async def list_study_jobs(
128
114
async def create_study_job (
129
115
study_id : StudyID ,
130
116
job_inputs : JobInputs ,
131
- webserver_api : Annotated [AuthSession , Depends (get_webserver_session )],
132
- wb_api_rpc : Annotated [WbApiRpcClient , Depends (get_wb_api_rpc_client )],
117
+ study_service : Annotated [StudyService , Depends (get_study_service )],
133
118
url_for : Annotated [Callable , Depends (get_reverse_url_mapper )],
134
- user_id : Annotated [PositiveInt , Depends ( get_current_user_id )],
135
- product_name : Annotated [ str , Depends ( get_product_name )],
136
- hidden : Annotated [ bool , Query () ] = True , # noqa: FBT002
119
+ hidden : Annotated [
120
+ bool , Query ( description = "If True (default) hides project from UI" )
121
+ ] = True , # noqa: FBT002
137
122
x_simcore_parent_project_uuid : ProjectID | None = Header (default = None ),
138
123
x_simcore_parent_node_id : NodeID | None = Header (default = None ),
139
124
) -> Job :
140
- """
141
- hidden -- if True (default) hides project from UI
142
- """
143
- project = await webserver_api .clone_project (
144
- project_id = study_id ,
125
+
126
+ job = await study_service .create_job (
127
+ study_id = study_id ,
128
+ job_inputs = job_inputs ,
145
129
hidden = hidden ,
146
130
parent_project_uuid = x_simcore_parent_project_uuid ,
147
131
parent_node_id = x_simcore_parent_node_id ,
148
132
)
149
- job = create_job_from_study (
150
- study_key = study_id , project = project , job_inputs = job_inputs
151
- )
133
+
134
+ # Set URLs in the controller
152
135
job .url = url_for (
153
136
"get_study_job" ,
154
137
study_id = study_id ,
@@ -161,50 +144,6 @@ async def create_study_job(
161
144
job_id = job .id ,
162
145
)
163
146
164
- await webserver_api .patch_project (
165
- project_id = job .id ,
166
- patch_params = ProjectPatch (name = job .name ), # type: ignore[arg-type]
167
- )
168
-
169
- await wb_api_rpc .mark_project_as_job (
170
- product_name = product_name ,
171
- user_id = user_id ,
172
- project_uuid = job .id ,
173
- job_parent_resource_name = job .runner_name ,
174
- )
175
-
176
- project_inputs = await webserver_api .get_project_inputs (project_id = project .uuid )
177
-
178
- file_param_nodes = {}
179
- for node_id , node in project .workbench .items ():
180
- if (
181
- node .key == file_picker .META .key
182
- and node .outputs is not None
183
- and len (node .outputs ) == 0
184
- ):
185
- file_param_nodes [node .label ] = node_id
186
-
187
- file_inputs : dict [InputID , InputTypes ] = {}
188
-
189
- (
190
- new_project_inputs ,
191
- new_project_file_inputs ,
192
- ) = get_project_and_file_inputs_from_job_inputs (
193
- project_inputs , file_inputs , job_inputs
194
- )
195
-
196
- for node_label , file_link in new_project_file_inputs .items ():
197
- await webserver_api .update_node_outputs (
198
- project_id = project .uuid ,
199
- node_id = UUID (file_param_nodes [node_label ]),
200
- new_node_outputs = NodeOutputs (outputs = {"outFile" : file_link }),
201
- )
202
-
203
- if len (new_project_inputs ) > 0 :
204
- await webserver_api .update_project_inputs (
205
- project_id = project .uuid , new_inputs = new_project_inputs
206
- )
207
-
208
147
assert job .name == _compose_job_resource_name (study_id , job .id )
209
148
210
149
return job
0 commit comments