Skip to content

Commit b36b12d

Browse files
committed
add creation of workspace directory when creating program job
1 parent 17b38a9 commit b36b12d

File tree

5 files changed

+39
-10
lines changed

5 files changed

+39
-10
lines changed

packages/simcore-sdk/src/simcore_sdk/node_ports_common/filemanager.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,19 @@
4444
async def complete_file_upload(
4545
uploaded_parts: list[UploadedPart],
4646
upload_completion_link: AnyUrl,
47+
is_directory: bool,
4748
client_session: ClientSession | None = None,
48-
) -> ETag:
49+
) -> ETag | None:
4950
async with ClientSessionContextManager(client_session) as session:
5051
e_tag: ETag | None = await _filemanager_utils.complete_upload(
5152
session=session,
5253
upload_completion_link=upload_completion_link,
5354
parts=uploaded_parts,
54-
is_directory=False,
55+
is_directory=is_directory,
5556
)
5657
# should not be None because a file is being uploaded
57-
assert e_tag is not None # nosec
58+
if not is_directory:
59+
assert e_tag is not None # nosec
5860
return e_tag
5961

6062

@@ -278,8 +280,7 @@ class UploadedFile:
278280

279281

280282
@dataclass
281-
class UploadedFolder:
282-
...
283+
class UploadedFolder: ...
283284

284285

285286
async def _generate_checksum(

services/api-server/src/simcore_service_api_server/_service.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ async def create_solver_or_program_job(
2626
parent_node_id: NodeID | None,
2727
url_for: Callable[..., HttpUrl],
2828
hidden: bool
29-
) -> Job:
29+
) -> tuple[Job, ProjectGet]:
3030
# creates NEW job as prototype
3131
pre_job = Job.create_job_from_solver_or_program(
3232
solver_or_program_name=solver_or_program.name, inputs=inputs
@@ -55,4 +55,4 @@ async def create_solver_or_program_job(
5555
parent_name=solver_or_program.resource_name,
5656
job_id=job.id,
5757
)
58-
return job
58+
return job, new_project

services/api-server/src/simcore_service_api_server/api/routes/files.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,6 +451,7 @@ async def complete_multipart_upload(
451451
e_tag: ETag = await complete_file_upload(
452452
uploaded_parts=uploaded_parts.parts,
453453
upload_completion_link=TypeAdapter(AnyUrl).validate_python(f"{complete_link}"),
454+
is_directory=False,
454455
)
455456

456457
file.e_tag = e_tag

services/api-server/src/simcore_service_api_server/api/routes/programs.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,18 @@
55

66
from fastapi import APIRouter, Depends, Header, HTTPException, status
77
from httpx import HTTPStatusError
8+
from models_library.api_schemas_storage.storage_schemas import (
9+
LinkType,
10+
)
811
from models_library.projects import ProjectID
912
from models_library.projects_nodes_io import NodeID
10-
from pydantic import PositiveInt, ValidationError
13+
from pydantic import ByteSize, PositiveInt, ValidationError
1114
from servicelib.fastapi.dependencies import get_reverse_url_mapper
15+
from simcore_sdk.node_ports_common.constants import SIMCORE_LOCATION
16+
from simcore_sdk.node_ports_common.filemanager import (
17+
complete_file_upload,
18+
get_upload_links_from_s3,
19+
)
1220
from simcore_service_api_server._service import create_solver_or_program_job
1321
from simcore_service_api_server.api.dependencies.webserver_http import (
1422
get_webserver_session,
@@ -116,7 +124,7 @@ async def create_program_job(
116124
product_name=product_name,
117125
)
118126

119-
job = await create_solver_or_program_job(
127+
job, project = await create_solver_or_program_job(
120128
webserver_api=webserver_api,
121129
solver_or_program=program,
122130
inputs=inputs,
@@ -125,4 +133,23 @@ async def create_program_job(
125133
url_for=url_for,
126134
hidden=False,
127135
)
136+
assert len(project.workbench) > 0 # nosec
137+
node_id = next(iter(project.workbench))
138+
139+
_, file_upload_schema = await get_upload_links_from_s3(
140+
user_id=user_id,
141+
store_name=None,
142+
store_id=SIMCORE_LOCATION,
143+
s3_object=f"{project.uuid}/{node_id}/workspace",
144+
link_type=LinkType.PRESIGNED,
145+
client_session=None,
146+
file_size=ByteSize(0),
147+
is_directory=True,
148+
sha256_checksum=None,
149+
)
150+
await complete_file_upload(
151+
uploaded_parts=[],
152+
upload_completion_link=file_upload_schema.links.complete_upload,
153+
is_directory=True,
154+
)
128155
return job

services/api-server/src/simcore_service_api_server/api/routes/solvers_jobs.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ async def create_solver_job(
111111
version=version,
112112
product_name=product_name,
113113
)
114-
job = await create_solver_or_program_job(
114+
job, _ = await create_solver_or_program_job(
115115
webserver_api=webserver_api,
116116
solver_or_program=solver,
117117
inputs=inputs,

0 commit comments

Comments
 (0)