fractal-server 2.14.4a0__py3-none-any.whl → 2.14.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fractal_server/__init__.py +1 -1
- fractal_server/app/runner/exceptions.py +1 -6
- fractal_server/app/runner/executors/base_runner.py +16 -4
- fractal_server/app/runner/executors/call_command_wrapper.py +52 -0
- fractal_server/app/runner/executors/local/runner.py +52 -13
- fractal_server/app/runner/executors/slurm_common/base_slurm_runner.py +87 -52
- fractal_server/app/runner/executors/slurm_common/remote.py +47 -92
- fractal_server/app/runner/executors/slurm_common/slurm_job_task_models.py +20 -19
- fractal_server/app/runner/executors/slurm_ssh/runner.py +1 -2
- fractal_server/app/runner/executors/slurm_sudo/_subprocess_run_as_user.py +1 -4
- fractal_server/app/runner/executors/slurm_sudo/runner.py +3 -11
- fractal_server/app/runner/task_files.py +0 -8
- fractal_server/app/runner/v2/_slurm_ssh.py +1 -2
- fractal_server/app/runner/v2/_slurm_sudo.py +1 -2
- fractal_server/app/runner/v2/runner_functions.py +16 -30
- fractal_server/app/runner/versions.py +2 -11
- fractal_server/config.py +0 -9
- fractal_server/ssh/_fabric.py +4 -1
- {fractal_server-2.14.4a0.dist-info → fractal_server-2.14.5.dist-info}/METADATA +1 -7
- {fractal_server-2.14.4a0.dist-info → fractal_server-2.14.5.dist-info}/RECORD +23 -24
- fractal_server/app/runner/executors/slurm_common/utils_executors.py +0 -58
- fractal_server/app/runner/v2/runner_functions_low_level.py +0 -122
- {fractal_server-2.14.4a0.dist-info → fractal_server-2.14.5.dist-info}/LICENSE +0 -0
- {fractal_server-2.14.4a0.dist-info → fractal_server-2.14.5.dist-info}/WHEEL +0 -0
- {fractal_server-2.14.4a0.dist-info → fractal_server-2.14.5.dist-info}/entry_points.txt +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
fractal_server/__init__.py,sha256=
|
1
|
+
fractal_server/__init__.py,sha256=UajcJi63hxo1f0KVwKUKBcFjbKvBho3JgZuYlujcsDA,23
|
2
2
|
fractal_server/__main__.py,sha256=rkM8xjY1KeS3l63irB8yCrlVobR-73uDapC4wvrIlxI,6957
|
3
3
|
fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
|
4
4
|
fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -67,45 +67,44 @@ fractal_server/app/routes/aux/validate_user_settings.py,sha256=FLVi__8YFcm_6c_K5
|
|
67
67
|
fractal_server/app/routes/pagination.py,sha256=L8F5JqekF39qz-LpeScdlhb57MQnSRXjK4ZEtsZqYLk,1210
|
68
68
|
fractal_server/app/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
69
69
|
fractal_server/app/runner/components.py,sha256=-Ii5l8d_V6f5DFOd-Zsr8VYmOsyqw0Hox9fEFQiuqxY,66
|
70
|
-
fractal_server/app/runner/exceptions.py,sha256=
|
70
|
+
fractal_server/app/runner/exceptions.py,sha256=OPUWt8DV0V5iK5xPK8AhbJ3j3llrpmQM0pvgBCW4EqY,4033
|
71
71
|
fractal_server/app/runner/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
|
-
fractal_server/app/runner/executors/base_runner.py,sha256=
|
72
|
+
fractal_server/app/runner/executors/base_runner.py,sha256=QOs9AWtT3G3XxIWBNamWpH94mAzuwWMzLXpCCkOiD-0,5459
|
73
|
+
fractal_server/app/runner/executors/call_command_wrapper.py,sha256=6ykSnuC3u0eqvVE6vEcAL5CjQwphoIf-ZoadevUWOTU,1424
|
73
74
|
fractal_server/app/runner/executors/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
74
75
|
fractal_server/app/runner/executors/local/get_local_config.py,sha256=KiakXxOahaLgWvQJ1LVGYGXht6DMGR9x8Xu-TuT9aY4,3628
|
75
|
-
fractal_server/app/runner/executors/local/runner.py,sha256=
|
76
|
+
fractal_server/app/runner/executors/local/runner.py,sha256=0b98oB9HX-1GS41M6yJ6KnL1MQxYjNtJPzF7u06Jcoc,10721
|
76
77
|
fractal_server/app/runner/executors/slurm_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
77
78
|
fractal_server/app/runner/executors/slurm_common/_batching.py,sha256=ZY020JZlDS5mfpgpWTChQkyHU7iLE5kx2HVd57_C6XA,8850
|
78
79
|
fractal_server/app/runner/executors/slurm_common/_job_states.py,sha256=nuV-Zba38kDrRESOVB3gaGbrSPZc4q7YGichQaeqTW0,238
|
79
80
|
fractal_server/app/runner/executors/slurm_common/_slurm_config.py,sha256=_feRRnVVnvQa3AsOQqfULfOgaoj2o6Ze0-fwXwic8p4,15795
|
80
|
-
fractal_server/app/runner/executors/slurm_common/base_slurm_runner.py,sha256=
|
81
|
+
fractal_server/app/runner/executors/slurm_common/base_slurm_runner.py,sha256=M7liHYIo7r0Ej70uxQF8eg-J5Ag4HM92uSMoveBB05I,34729
|
81
82
|
fractal_server/app/runner/executors/slurm_common/get_slurm_config.py,sha256=BW6fDpPyB0VH5leVxvwzkVH3r3hC7DuSyoWmRzHITWg,7305
|
82
|
-
fractal_server/app/runner/executors/slurm_common/remote.py,sha256=
|
83
|
-
fractal_server/app/runner/executors/slurm_common/slurm_job_task_models.py,sha256=
|
84
|
-
fractal_server/app/runner/executors/slurm_common/utils_executors.py,sha256=naPyJI0I3lD-sYHbSXbMFGUBK4h_SggA5V91Z1Ch1Xg,1416
|
83
|
+
fractal_server/app/runner/executors/slurm_common/remote.py,sha256=hKnNph1aSTLw1o33jHxoKhku5w_-vw5Y_bHr4J87KWc,3775
|
84
|
+
fractal_server/app/runner/executors/slurm_common/slurm_job_task_models.py,sha256=ZYi8pDKBX4fnBzJ82njH9U9uV6VbSSK1cjKav_ei8uo,3554
|
85
85
|
fractal_server/app/runner/executors/slurm_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
86
86
|
fractal_server/app/runner/executors/slurm_ssh/run_subprocess.py,sha256=vlkJ0S37wYOmLG6gKC5-x8mBivYcgK7HTVvaroBnqLk,1030
|
87
|
-
fractal_server/app/runner/executors/slurm_ssh/runner.py,sha256=
|
87
|
+
fractal_server/app/runner/executors/slurm_ssh/runner.py,sha256=1Tf-Sx8u-6yKpIdwE7BTsfxN2VwRAs0CMc0CVoIgcOM,7826
|
88
88
|
fractal_server/app/runner/executors/slurm_ssh/tar_commands.py,sha256=g173siyv7qtjov5i-CjTVRT8d19ibK8re3RVWbsdHYA,1845
|
89
89
|
fractal_server/app/runner/executors/slurm_sudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
90
|
-
fractal_server/app/runner/executors/slurm_sudo/_subprocess_run_as_user.py,sha256=
|
91
|
-
fractal_server/app/runner/executors/slurm_sudo/runner.py,sha256=
|
90
|
+
fractal_server/app/runner/executors/slurm_sudo/_subprocess_run_as_user.py,sha256=Lolm9nNk810wpJmPIXPK-Op7Wt0Oj4btT6tEVO0gfjc,2607
|
91
|
+
fractal_server/app/runner/executors/slurm_sudo/runner.py,sha256=vif3PO55mfpGMiRUzkEPSsHxazj6cBbTPpbV-UuQjEk,5907
|
92
92
|
fractal_server/app/runner/filenames.py,sha256=lPnxKHtdRizr6FqG3zOdjDPyWA7GoaJGTtiuJV0gA8E,70
|
93
93
|
fractal_server/app/runner/set_start_and_last_task_index.py,sha256=-q4zVybAj8ek2XlbENKlfOAJ39hT_zoJoZkqzDqiAMY,1254
|
94
94
|
fractal_server/app/runner/shutdown.py,sha256=9pfSKHDNdIcm0eY-opgRTi7y0HmvfPmYiu9JR6Idark,2082
|
95
|
-
fractal_server/app/runner/task_files.py,sha256=
|
95
|
+
fractal_server/app/runner/task_files.py,sha256=VR6JD5jPaZZof28j6GfkFnn_hF1DR1Om1YV8NUtslvA,4106
|
96
96
|
fractal_server/app/runner/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
97
97
|
fractal_server/app/runner/v2/_local.py,sha256=fJfSpY72BJeO_hGISIK1jE5q7lx3z3fv9_hlhNcJHLM,3072
|
98
|
-
fractal_server/app/runner/v2/_slurm_ssh.py,sha256=
|
99
|
-
fractal_server/app/runner/v2/_slurm_sudo.py,sha256=
|
98
|
+
fractal_server/app/runner/v2/_slurm_ssh.py,sha256=evhY0Ec4Foa9CXkZWC5YHkD1phrpVIxBwsxHwgLCK5E,3268
|
99
|
+
fractal_server/app/runner/v2/_slurm_sudo.py,sha256=0g96dQ7Xj8om14Lcr2vQuBDrHSmQc8L4O1rD421Kd5w,2983
|
100
100
|
fractal_server/app/runner/v2/db_tools.py,sha256=du5dKhMMFMErQXbGIgu9JvO_vtMensodyPsyDeqz1yQ,3324
|
101
101
|
fractal_server/app/runner/v2/deduplicate_list.py,sha256=IVTE4abBU1bUprFTkxrTfYKnvkNTanWQ-KWh_etiT08,645
|
102
102
|
fractal_server/app/runner/v2/merge_outputs.py,sha256=D1L4Taieq9i71SPQyNc1kMokgHh-sV_MqF3bv7QMDBc,907
|
103
103
|
fractal_server/app/runner/v2/runner.py,sha256=2NQhcaGDw6XJ6Mnmiubru0yq2PpgF6fWFIE5hOVnOY0,17701
|
104
|
-
fractal_server/app/runner/v2/runner_functions.py,sha256=
|
105
|
-
fractal_server/app/runner/v2/runner_functions_low_level.py,sha256=_h_OOffq3d7V0uHa8Uvs0mj31y1GSZBUXjDDF3WjVjY,3620
|
104
|
+
fractal_server/app/runner/v2/runner_functions.py,sha256=78tJEjeN_NKVwrMJjzMvS2Bu2bYoO5Cerh8QdC3T2nw,18865
|
106
105
|
fractal_server/app/runner/v2/submit_workflow.py,sha256=QywUGIoHAHnrWgfnyX8W9kVqKY-RvVyNLpzrbsXZOZ4,13075
|
107
106
|
fractal_server/app/runner/v2/task_interface.py,sha256=vVNSLiUTnImo82dp910KqP4gYLX3aoiLSJsfvdzGems,2561
|
108
|
-
fractal_server/app/runner/versions.py,sha256=
|
107
|
+
fractal_server/app/runner/versions.py,sha256=cgKICSTSf9mPq0gSNi1fpnk2oKSHItcxDynipT9hvo8,429
|
109
108
|
fractal_server/app/schemas/__init__.py,sha256=stURAU_t3AOBaH0HSUbV-GKhlPKngnnIMoqWc3orFyI,135
|
110
109
|
fractal_server/app/schemas/user.py,sha256=0e4fWin0EdStjlbUnNWl7GsvnVfKMJPmVPCt-Mm_9tg,1945
|
111
110
|
fractal_server/app/schemas/user_group.py,sha256=ejk5qHLbmmDotXT6_--kkoDHVm-T5nS9GDtivJ4LjZU,1456
|
@@ -127,7 +126,7 @@ fractal_server/app/schemas/v2/workflowtask.py,sha256=Q_2wM89QLMX19uthrnOigh-bxLY
|
|
127
126
|
fractal_server/app/security/__init__.py,sha256=e2cveg5hQpieGD3bSPd5GTOMthvJ-HXH3buSb9WVfEU,14096
|
128
127
|
fractal_server/app/security/signup_email.py,sha256=Xd6QYxcdmg0PHpDwmUE8XQmPcOj3Xjy5oROcIMhmltM,1472
|
129
128
|
fractal_server/app/user_settings.py,sha256=OP1yiYKtPadxwM51_Q0hdPk3z90TCN4z1BLpQsXyWiU,1316
|
130
|
-
fractal_server/config.py,sha256=
|
129
|
+
fractal_server/config.py,sha256=7njTJrbddEckO8VZjeO5_V7l9v8gCk9JwtfzYKTXvzA,26046
|
131
130
|
fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
|
132
131
|
fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
|
133
132
|
fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
|
@@ -176,7 +175,7 @@ fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.p
|
|
176
175
|
fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py,sha256=TDWCaIoM0Q4SpRWmR9zr_rdp3lJXhCfBPTMhtrP5xYE,3950
|
177
176
|
fractal_server/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
178
177
|
fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
|
179
|
-
fractal_server/ssh/_fabric.py,sha256=
|
178
|
+
fractal_server/ssh/_fabric.py,sha256=wLjOh2kBnaBjpmGB6lbrPdcWq9D5BzbaS2vKYwOfxEo,23498
|
180
179
|
fractal_server/string_tools.py,sha256=niViRrrZAOo0y6pEFI9L_eUYS1PoOiQZUBtngiLc2_k,1877
|
181
180
|
fractal_server/syringe.py,sha256=3qSMW3YaMKKnLdgnooAINOPxnCOxP7y2jeAQYB21Gdo,2786
|
182
181
|
fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39NHE8,23
|
@@ -211,8 +210,8 @@ fractal_server/types/validators/_workflow_task_arguments_validators.py,sha256=HL
|
|
211
210
|
fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
|
212
211
|
fractal_server/utils.py,sha256=PMwrxWFxRTQRl1b9h-NRIbFGPKqpH_hXnkAT3NfZdpY,3571
|
213
212
|
fractal_server/zip_tools.py,sha256=GjDgo_sf6V_DDg6wWeBlZu5zypIxycn_l257p_YVKGc,4876
|
214
|
-
fractal_server-2.14.
|
215
|
-
fractal_server-2.14.
|
216
|
-
fractal_server-2.14.
|
217
|
-
fractal_server-2.14.
|
218
|
-
fractal_server-2.14.
|
213
|
+
fractal_server-2.14.5.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
|
214
|
+
fractal_server-2.14.5.dist-info/METADATA,sha256=UZkyF3UKy2ONKfsIYsUrS7u0ha7kdkeudbUet6_ZUu4,4294
|
215
|
+
fractal_server-2.14.5.dist-info/WHEEL,sha256=7dDg4QLnNKTvwIDR9Ac8jJaAmBC_owJrckbC0jjThyA,88
|
216
|
+
fractal_server-2.14.5.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
|
217
|
+
fractal_server-2.14.5.dist-info/RECORD,,
|
@@ -1,58 +0,0 @@
|
|
1
|
-
from pathlib import Path
|
2
|
-
from typing import Literal
|
3
|
-
from typing import Optional
|
4
|
-
|
5
|
-
|
6
|
-
def get_pickle_file_path(
|
7
|
-
*,
|
8
|
-
arg: str,
|
9
|
-
workflow_dir: Path,
|
10
|
-
subfolder_name: str,
|
11
|
-
in_or_out: Literal["in", "out"],
|
12
|
-
prefix: str,
|
13
|
-
) -> Path:
|
14
|
-
if in_or_out in ["in", "out"]:
|
15
|
-
output = (
|
16
|
-
workflow_dir
|
17
|
-
/ subfolder_name
|
18
|
-
/ f"{prefix}_{in_or_out}_{arg}.pickle"
|
19
|
-
)
|
20
|
-
return output
|
21
|
-
else:
|
22
|
-
raise ValueError(
|
23
|
-
f"Missing or unexpected value in_or_out argument, {in_or_out=}"
|
24
|
-
)
|
25
|
-
|
26
|
-
|
27
|
-
def get_slurm_script_file_path(
|
28
|
-
*, workflow_dir: Path, subfolder_name: str, prefix: Optional[str] = None
|
29
|
-
) -> Path:
|
30
|
-
prefix = prefix or "_temp"
|
31
|
-
return workflow_dir / subfolder_name / f"{prefix}_slurm_submit.sbatch"
|
32
|
-
|
33
|
-
|
34
|
-
def get_slurm_file_path(
|
35
|
-
*,
|
36
|
-
workflow_dir: Path,
|
37
|
-
subfolder_name: str,
|
38
|
-
arg: str = "%j",
|
39
|
-
out_or_err: Literal["out", "err"],
|
40
|
-
prefix: str,
|
41
|
-
) -> Path:
|
42
|
-
if out_or_err == "out":
|
43
|
-
return (
|
44
|
-
workflow_dir
|
45
|
-
/ subfolder_name
|
46
|
-
/ f"{prefix}_slurm_{arg}.{out_or_err}"
|
47
|
-
)
|
48
|
-
elif out_or_err == "err":
|
49
|
-
return (
|
50
|
-
workflow_dir
|
51
|
-
/ subfolder_name
|
52
|
-
/ f"{prefix}_slurm_{arg}.{out_or_err}"
|
53
|
-
)
|
54
|
-
else:
|
55
|
-
raise ValueError(
|
56
|
-
"Missing or unexpected value out_or_err argument, "
|
57
|
-
f"{out_or_err=}"
|
58
|
-
)
|
@@ -1,122 +0,0 @@
|
|
1
|
-
import json
|
2
|
-
import logging
|
3
|
-
import shutil
|
4
|
-
import subprocess # nosec
|
5
|
-
from shlex import split
|
6
|
-
from typing import Any
|
7
|
-
|
8
|
-
from fractal_server.app.runner.exceptions import JobExecutionError
|
9
|
-
from fractal_server.app.runner.exceptions import TaskExecutionError
|
10
|
-
from fractal_server.string_tools import validate_cmd
|
11
|
-
|
12
|
-
|
13
|
-
def _call_command_wrapper(cmd: str, log_path: str) -> None:
|
14
|
-
"""
|
15
|
-
Call a command and write its stdout and stderr to files
|
16
|
-
|
17
|
-
Raises:
|
18
|
-
TaskExecutionError: If the `subprocess.run` call returns a positive
|
19
|
-
exit code
|
20
|
-
JobExecutionError: If the `subprocess.run` call returns a negative
|
21
|
-
exit code (e.g. due to the subprocess receiving a
|
22
|
-
TERM or KILL signal)
|
23
|
-
"""
|
24
|
-
try:
|
25
|
-
validate_cmd(cmd)
|
26
|
-
except ValueError as e:
|
27
|
-
raise TaskExecutionError(f"Invalid command. Original error: {str(e)}")
|
28
|
-
|
29
|
-
# Verify that task command is executable
|
30
|
-
if shutil.which(split(cmd)[0]) is None:
|
31
|
-
msg = (
|
32
|
-
f'Command "{split(cmd)[0]}" is not valid. '
|
33
|
-
"Hint: make sure that it is executable."
|
34
|
-
)
|
35
|
-
raise TaskExecutionError(msg)
|
36
|
-
|
37
|
-
with open(log_path, "w") as fp_log:
|
38
|
-
try:
|
39
|
-
result = subprocess.run( # nosec
|
40
|
-
split(cmd),
|
41
|
-
stderr=fp_log,
|
42
|
-
stdout=fp_log,
|
43
|
-
)
|
44
|
-
except Exception as e:
|
45
|
-
raise e
|
46
|
-
|
47
|
-
if result.returncode > 0:
|
48
|
-
with open(log_path, "r") as fp_stderr:
|
49
|
-
err = fp_stderr.read()
|
50
|
-
raise TaskExecutionError(err)
|
51
|
-
elif result.returncode < 0:
|
52
|
-
raise JobExecutionError(
|
53
|
-
info=f"Task failed with returncode={result.returncode}"
|
54
|
-
)
|
55
|
-
|
56
|
-
|
57
|
-
def run_single_task(
|
58
|
-
# COMMON to all parallel tasks
|
59
|
-
command: str,
|
60
|
-
workflow_task_order: int,
|
61
|
-
workflow_task_id: int,
|
62
|
-
task_name: str,
|
63
|
-
# SPECIAL for each parallel task
|
64
|
-
parameters: dict[str, Any],
|
65
|
-
remote_files: dict[str, str],
|
66
|
-
) -> dict[str, Any]:
|
67
|
-
"""
|
68
|
-
Runs within an executor (AKA on the SLURM cluster).
|
69
|
-
"""
|
70
|
-
|
71
|
-
try:
|
72
|
-
args_file_remote = remote_files["args_file_remote"]
|
73
|
-
metadiff_file_remote = remote_files["metadiff_file_remote"]
|
74
|
-
log_file_remote = remote_files["log_file_remote"]
|
75
|
-
except KeyError:
|
76
|
-
raise TaskExecutionError(
|
77
|
-
f"Invalid {remote_files=}",
|
78
|
-
workflow_task_order=workflow_task_order,
|
79
|
-
workflow_task_id=workflow_task_id,
|
80
|
-
task_name=task_name,
|
81
|
-
)
|
82
|
-
|
83
|
-
logger = logging.getLogger(None)
|
84
|
-
logger.debug(f"Now start running {command=}")
|
85
|
-
|
86
|
-
# Write arguments to args.json file
|
87
|
-
# NOTE: see issue 2346
|
88
|
-
with open(args_file_remote, "w") as f:
|
89
|
-
json.dump(parameters, f, indent=2)
|
90
|
-
|
91
|
-
# Assemble full command
|
92
|
-
# NOTE: this could be assembled backend-side
|
93
|
-
full_command = (
|
94
|
-
f"{command} "
|
95
|
-
f"--args-json {args_file_remote} "
|
96
|
-
f"--out-json {metadiff_file_remote}"
|
97
|
-
)
|
98
|
-
|
99
|
-
try:
|
100
|
-
_call_command_wrapper(
|
101
|
-
full_command,
|
102
|
-
log_path=log_file_remote,
|
103
|
-
)
|
104
|
-
except TaskExecutionError as e:
|
105
|
-
e.workflow_task_order = workflow_task_order
|
106
|
-
e.workflow_task_id = workflow_task_id
|
107
|
-
e.task_name = task_name
|
108
|
-
raise e
|
109
|
-
|
110
|
-
try:
|
111
|
-
with open(metadiff_file_remote, "r") as f:
|
112
|
-
out_meta = json.load(f)
|
113
|
-
except FileNotFoundError as e:
|
114
|
-
logger.debug(
|
115
|
-
"Task did not produce output metadata. "
|
116
|
-
f"Original FileNotFoundError: {str(e)}"
|
117
|
-
)
|
118
|
-
out_meta = None
|
119
|
-
|
120
|
-
if out_meta == {}:
|
121
|
-
return None
|
122
|
-
return out_meta
|
File without changes
|
File without changes
|
File without changes
|