Skip to content

Commit 0e86bd0

Browse files
committed
start adding programs example
1 parent 7f6a5ae commit 0e86bd0

File tree

4 files changed

+87
-4
lines changed

4 files changed

+87
-4
lines changed

clients/python/src/osparc/_api_files_api.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
FileUploadCompletionBody,
2626
FileUploadData,
2727
UploadedPart,
28+
ClientFileInProgramJob,
2829
)
2930
from urllib.parse import urljoin
3031
import aiofiles
@@ -134,6 +135,10 @@ def upload_file(
134135
async def upload_file_async(
135136
self,
136137
file: Union[str, Path],
138+
program_key: str,
139+
program_version: str,
140+
job_id: str,
141+
workspace_path: str,
137142
timeout_seconds: int = DEFAULT_TIMEOUT_SECONDS,
138143
max_concurrent_uploads: int = _MAX_CONCURRENT_UPLOADS,
139144
**kwargs,
@@ -150,10 +155,21 @@ async def upload_file_async(
150155
# if a file has the same sha256 checksum
151156
# and name they are considered equal
152157
return file_result
153-
client_file: ClientFile = ClientFile(
154-
filename=file.name,
155-
filesize=file.stat().st_size,
156-
sha256_checksum=checksum,
158+
# ClientFileInProgramJob(
159+
# filename=file.name,
160+
# filesize=file.stat().st_size,
161+
# sha256_checksum=checksum,
162+
# )
163+
client_file = ClientFile(
164+
ClientFileInProgramJob(
165+
filename=file.name,
166+
filesize=file.stat().st_size,
167+
sha256_checksum=checksum,
168+
program_key=program_key,
169+
program_version=program_version,
170+
job_id=job_id,
171+
workspace_path=workspace_path,
172+
)
157173
)
158174
client_upload_schema: ClientFileUploadData = super().get_upload_links(
159175
client_file=client_file, _request_timeout=timeout_seconds, **kwargs

clients/python/src/osparc/api.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from osparc_client.api.meta_api import MetaApi as MetaApi
1313
from osparc_client.api.users_api import UsersApi as UsersApi
1414
from osparc_client.api.wallets_api import WalletsApi as WalletsApi
15+
from osparc_client.api.programs_api import ProgramsApi as ProgramsApi
1516

1617

1718
from ._api_solvers_api import SolversApi as SolversApi

clients/python/src/osparc/models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
BodyCompleteMultipartUploadV0FilesFileIdCompletePost as BodyCompleteMultipartUploadV0FilesFileIdCompletePost,
1414
)
1515
from osparc_client.models.client_file import ClientFile as ClientFile
16+
from osparc_client.models.client_file_in_program_job import (
17+
ClientFileInProgramJob as ClientFileInProgramJob,
18+
)
1619
from osparc_client.models.client_file_upload_data import (
1720
ClientFileUploadData as ClientFileUploadData,
1821
)

programs_example.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from pathlib import Path
2+
from pydantic_settings import BaseSettings, SettingsConfigDict
3+
from pydantic import Field
4+
import osparc
5+
import asyncio
6+
from tempfile import TemporaryDirectory
7+
8+
9+
class OsparcUser(BaseSettings):
10+
host: str = Field(default=...)
11+
key: str = Field(default=...)
12+
secret: str = Field(default=...)
13+
model_config = SettingsConfigDict(env_prefix="osparc_api_")
14+
15+
16+
def osparc_client():
17+
user = OsparcUser()
18+
config = osparc.Configuration(
19+
host=user.host, username=user.key, password=user.secret
20+
)
21+
print(config.host)
22+
print(config.username)
23+
print(config.password)
24+
return osparc.ApiClient(config)
25+
26+
27+
def check_credentials():
28+
with osparc_client() as api_client:
29+
user_api = osparc.UsersApi(api_client)
30+
print(user_api.get_my_profile())
31+
32+
33+
async def run(program_key: str, version: str) -> osparc.JobStatus:
34+
with osparc_client() as api_client:
35+
files_api = osparc.FilesApi(api_client)
36+
programs_api = osparc.ProgramsApi(api_client)
37+
# check if the program exists
38+
program = programs_api.get_program_release(
39+
program_key=program_key, version=version
40+
)
41+
42+
program_job = programs_api.create_program_job(
43+
program_key=program.id, version=program.version
44+
)
45+
46+
with TemporaryDirectory() as tmp_dir:
47+
# Upload the input file
48+
tmp_file = Path(tmp_dir) / "tmpfile"
49+
tmp_file.write_text("this is a test")
50+
await files_api.upload_file_async(
51+
file=tmp_file,
52+
program_key=program.id,
53+
program_version=program.version,
54+
job_id=program_job.id,
55+
workspace_path="workspace/tmpfile",
56+
)
57+
58+
59+
if __name__ == "__main__":
60+
check_credentials()
61+
asyncio.run(
62+
run(program_key="simcore/services/dynamic/jupyter-math", version="3.0.2")
63+
)

0 commit comments

Comments
 (0)