fractal-server 2.3.5__py3-none-any.whl → 2.3.7__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/models/v2/task.py +0 -52
- fractal_server/app/routes/api/v2/_aux_functions.py +4 -6
- fractal_server/app/routes/api/v2/workflowtask.py +6 -23
- fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +5 -0
- fractal_server/app/runner/executors/slurm/ssh/executor.py +23 -0
- fractal_server/config.py +5 -0
- fractal_server/tasks/v2/_venv_pip.py +7 -1
- fractal_server/tasks/v2/background_operations_ssh.py +4 -0
- fractal_server/tasks/v2/templates/_2_upgrade_pip.sh +1 -1
- fractal_server/tasks/v2/templates/_4_pip_freeze.sh +1 -1
- {fractal_server-2.3.5.dist-info → fractal_server-2.3.7.dist-info}/METADATA +2 -2
- {fractal_server-2.3.5.dist-info → fractal_server-2.3.7.dist-info}/RECORD +16 -16
- {fractal_server-2.3.5.dist-info → fractal_server-2.3.7.dist-info}/LICENSE +0 -0
- {fractal_server-2.3.5.dist-info → fractal_server-2.3.7.dist-info}/WHEEL +0 -0
- {fractal_server-2.3.5.dist-info → fractal_server-2.3.7.dist-info}/entry_points.txt +0 -0
fractal_server/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__VERSION__ = "2.3.
|
1
|
+
__VERSION__ = "2.3.7"
|
@@ -1,5 +1,3 @@
|
|
1
|
-
import json
|
2
|
-
import logging
|
3
1
|
from typing import Any
|
4
2
|
from typing import Optional
|
5
3
|
|
@@ -41,53 +39,3 @@ class TaskV2(SQLModel, table=True):
|
|
41
39
|
|
42
40
|
input_types: dict[str, bool] = Field(sa_column=Column(JSON), default={})
|
43
41
|
output_types: dict[str, bool] = Field(sa_column=Column(JSON), default={})
|
44
|
-
|
45
|
-
@property
|
46
|
-
def default_args_non_parallel_from_args_schema(self) -> dict[str, Any]:
|
47
|
-
"""
|
48
|
-
Extract default arguments from args_schema
|
49
|
-
"""
|
50
|
-
# Return {} if there is no args_schema
|
51
|
-
if self.args_schema_non_parallel is None:
|
52
|
-
return {}
|
53
|
-
# Try to construct default_args
|
54
|
-
try:
|
55
|
-
default_args = {}
|
56
|
-
properties = self.args_schema_non_parallel["properties"]
|
57
|
-
for prop_name, prop_schema in properties.items():
|
58
|
-
default_value = prop_schema.get("default", None)
|
59
|
-
if default_value is not None:
|
60
|
-
default_args[prop_name] = default_value
|
61
|
-
return default_args
|
62
|
-
except KeyError as e:
|
63
|
-
logging.warning(
|
64
|
-
"Cannot set default_args from args_schema_non_parallel="
|
65
|
-
f"{json.dumps(self.args_schema_non_parallel)}\n"
|
66
|
-
f"Original KeyError: {str(e)}"
|
67
|
-
)
|
68
|
-
return {}
|
69
|
-
|
70
|
-
@property
|
71
|
-
def default_args_parallel_from_args_schema(self) -> dict[str, Any]:
|
72
|
-
"""
|
73
|
-
Extract default arguments from args_schema
|
74
|
-
"""
|
75
|
-
# Return {} if there is no args_schema
|
76
|
-
if self.args_schema_parallel is None:
|
77
|
-
return {}
|
78
|
-
# Try to construct default_args
|
79
|
-
try:
|
80
|
-
default_args = {}
|
81
|
-
properties = self.args_schema_parallel["properties"]
|
82
|
-
for prop_name, prop_schema in properties.items():
|
83
|
-
default_value = prop_schema.get("default", None)
|
84
|
-
if default_value is not None:
|
85
|
-
default_args[prop_name] = default_value
|
86
|
-
return default_args
|
87
|
-
except KeyError as e:
|
88
|
-
logging.warning(
|
89
|
-
"Cannot set default_args from args_schema_parallel="
|
90
|
-
f"{json.dumps(self.args_schema_parallel)}\n"
|
91
|
-
f"Original KeyError: {str(e)}"
|
92
|
-
)
|
93
|
-
return {}
|
@@ -422,6 +422,8 @@ async def _workflow_insert_task(
|
|
422
422
|
|
423
423
|
# Get task from db, and extract default arguments via a Task property
|
424
424
|
# method
|
425
|
+
# NOTE: this logic remains there for V1 tasks only. When we deprecate V1
|
426
|
+
# tasks, we can simplify this block
|
425
427
|
if is_legacy_task is True:
|
426
428
|
db_task = await db.get(Task, task_id)
|
427
429
|
if db_task is None:
|
@@ -439,12 +441,8 @@ async def _workflow_insert_task(
|
|
439
441
|
raise ValueError(f"TaskV2 {task_id} not found.")
|
440
442
|
task_type = db_task.type
|
441
443
|
|
442
|
-
final_args_non_parallel =
|
443
|
-
|
444
|
-
)
|
445
|
-
final_args_parallel = (
|
446
|
-
db_task.default_args_parallel_from_args_schema.copy()
|
447
|
-
)
|
444
|
+
final_args_non_parallel = {}
|
445
|
+
final_args_parallel = {}
|
448
446
|
final_meta_parallel = (db_task.meta_parallel or {}).copy()
|
449
447
|
final_meta_non_parallel = (db_task.meta_non_parallel or {}).copy()
|
450
448
|
|
@@ -186,34 +186,17 @@ async def update_workflowtask(
|
|
186
186
|
default_args = (
|
187
187
|
db_wf_task.task_legacy.default_args_from_args_schema
|
188
188
|
)
|
189
|
+
actual_args = deepcopy(default_args)
|
190
|
+
if value is not None:
|
191
|
+
for k, v in value.items():
|
192
|
+
actual_args[k] = v
|
189
193
|
else:
|
190
|
-
|
191
|
-
db_wf_task.task.default_args_parallel_from_args_schema
|
192
|
-
)
|
193
|
-
# Override default_args with args value items
|
194
|
-
actual_args = deepcopy(default_args)
|
195
|
-
if value is not None:
|
196
|
-
for k, v in value.items():
|
197
|
-
actual_args[k] = v
|
194
|
+
actual_args = deepcopy(value)
|
198
195
|
if not actual_args:
|
199
196
|
actual_args = None
|
200
197
|
setattr(db_wf_task, key, actual_args)
|
201
198
|
elif key == "args_non_parallel":
|
202
|
-
|
203
|
-
if db_wf_task.is_legacy_task:
|
204
|
-
# This is only needed so that we don't have to modify the rest
|
205
|
-
# of this block, but legacy task cannot take any non-parallel
|
206
|
-
# args (see checks above).
|
207
|
-
default_args = {}
|
208
|
-
else:
|
209
|
-
default_args = deepcopy(
|
210
|
-
db_wf_task.task.default_args_non_parallel_from_args_schema
|
211
|
-
)
|
212
|
-
# Override default_args with args value items
|
213
|
-
actual_args = default_args.copy()
|
214
|
-
if value is not None:
|
215
|
-
for k, v in value.items():
|
216
|
-
actual_args[k] = v
|
199
|
+
actual_args = deepcopy(value)
|
217
200
|
if not actual_args:
|
218
201
|
actual_args = None
|
219
202
|
setattr(db_wf_task, key, actual_args)
|
@@ -7,6 +7,7 @@ from typing import Callable
|
|
7
7
|
from cfut import FileWaitThread
|
8
8
|
|
9
9
|
from ......logger import set_logger
|
10
|
+
from fractal_server.app.runner.exceptions import JobExecutionError
|
10
11
|
|
11
12
|
logger = set_logger(__name__)
|
12
13
|
|
@@ -48,6 +49,10 @@ class FractalSlurmWaitThread(FileWaitThread):
|
|
48
49
|
|
49
50
|
This method is executed on the main thread.
|
50
51
|
"""
|
52
|
+
if self.shutdown:
|
53
|
+
error_msg = "Cannot call `wait` method after executor shutdown."
|
54
|
+
logger.warning(error_msg)
|
55
|
+
raise JobExecutionError(info=error_msg)
|
51
56
|
with self.lock:
|
52
57
|
self.active_job_ids.append(job_id)
|
53
58
|
|
@@ -353,6 +353,12 @@ class FractalSlurmSSHExecutor(SlurmExecutor):
|
|
353
353
|
Future representing the execution of the current SLURM job.
|
354
354
|
"""
|
355
355
|
|
356
|
+
# Do not continue if auxiliary thread was shut down
|
357
|
+
if self.wait_thread.shutdown:
|
358
|
+
error_msg = "Cannot call `submit` method after executor shutdown"
|
359
|
+
logger.warning(error_msg)
|
360
|
+
raise JobExecutionError(info=error_msg)
|
361
|
+
|
356
362
|
# Set defaults, if needed
|
357
363
|
if slurm_config is None:
|
358
364
|
slurm_config = get_default_slurm_config()
|
@@ -436,6 +442,12 @@ class FractalSlurmSSHExecutor(SlurmExecutor):
|
|
436
442
|
|
437
443
|
"""
|
438
444
|
|
445
|
+
# Do not continue if auxiliary thread was shut down
|
446
|
+
if self.wait_thread.shutdown:
|
447
|
+
error_msg = "Cannot call `map` method after executor shutdown"
|
448
|
+
logger.warning(error_msg)
|
449
|
+
raise JobExecutionError(info=error_msg)
|
450
|
+
|
439
451
|
def _result_or_cancel(fut):
|
440
452
|
"""
|
441
453
|
This function is based on the Python Standard Library 3.11.
|
@@ -867,6 +879,14 @@ class FractalSlurmSSHExecutor(SlurmExecutor):
|
|
867
879
|
job: The `SlurmJob` object to submit.
|
868
880
|
"""
|
869
881
|
|
882
|
+
# Prevent calling sbatch if auxiliary thread was shut down
|
883
|
+
if self.wait_thread.shutdown:
|
884
|
+
error_msg = (
|
885
|
+
"Cannot call `_submit_job` method after executor shutdown"
|
886
|
+
)
|
887
|
+
logger.warning(error_msg)
|
888
|
+
raise JobExecutionError(info=error_msg)
|
889
|
+
|
870
890
|
# Submit job to SLURM, and get jobid
|
871
891
|
sbatch_command = f"sbatch --parsable {job.slurm_script_remote}"
|
872
892
|
pre_submission_cmds = job.slurm_config.pre_submission_commands
|
@@ -1336,6 +1356,9 @@ class FractalSlurmSSHExecutor(SlurmExecutor):
|
|
1336
1356
|
the self.wait_thread thread, see _completion.
|
1337
1357
|
"""
|
1338
1358
|
|
1359
|
+
# Redudantly set thread shutdown attribute to True
|
1360
|
+
self.wait_thread.shutdown = True
|
1361
|
+
|
1339
1362
|
logger.debug("Executor shutdown: start")
|
1340
1363
|
|
1341
1364
|
# Handle all job futures
|
fractal_server/config.py
CHANGED
@@ -553,6 +553,11 @@ class Settings(BaseSettings):
|
|
553
553
|
Whether to include the v1 API.
|
554
554
|
"""
|
555
555
|
|
556
|
+
FRACTAL_MAX_PIP_VERSION: str = "24.0"
|
557
|
+
"""
|
558
|
+
Maximum value at which to update `pip` before performing task collection.
|
559
|
+
"""
|
560
|
+
|
556
561
|
###########################################################################
|
557
562
|
# BUSINESS LOGIC
|
558
563
|
###########################################################################
|
@@ -2,7 +2,9 @@ from pathlib import Path
|
|
2
2
|
from typing import Optional
|
3
3
|
|
4
4
|
from ..utils import COLLECTION_FREEZE_FILENAME
|
5
|
+
from fractal_server.config import get_settings
|
5
6
|
from fractal_server.logger import get_logger
|
7
|
+
from fractal_server.syringe import Inject
|
6
8
|
from fractal_server.tasks.v2._TaskCollectPip import _TaskCollectPip
|
7
9
|
from fractal_server.tasks.v2.utils import get_python_interpreter_v2
|
8
10
|
from fractal_server.utils import execute_command
|
@@ -24,6 +26,7 @@ async def _pip_install(
|
|
24
26
|
Returns:
|
25
27
|
The location of the package.
|
26
28
|
"""
|
29
|
+
settings = Inject(get_settings)
|
27
30
|
|
28
31
|
logger = get_logger(logger_name)
|
29
32
|
|
@@ -41,7 +44,10 @@ async def _pip_install(
|
|
41
44
|
|
42
45
|
await execute_command(
|
43
46
|
cwd=venv_path,
|
44
|
-
command=
|
47
|
+
command=(
|
48
|
+
f"{pip} install --upgrade "
|
49
|
+
f"'pip<={settings.FRACTAL_MAX_PIP_VERSION}'"
|
50
|
+
),
|
45
51
|
logger_name=logger_name,
|
46
52
|
)
|
47
53
|
await execute_command(
|
@@ -174,6 +174,10 @@ def background_collect_pip_ssh(
|
|
174
174
|
("__PACKAGE__", task_pkg.package),
|
175
175
|
("__PYTHON__", python_bin),
|
176
176
|
("__INSTALL_STRING__", install_string),
|
177
|
+
(
|
178
|
+
"__FRACTAL_MAX_PIP_VERSION__",
|
179
|
+
settings.FRACTAL_MAX_PIP_VERSION,
|
180
|
+
),
|
177
181
|
]
|
178
182
|
|
179
183
|
common_args = dict(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: fractal-server
|
3
|
-
Version: 2.3.
|
3
|
+
Version: 2.3.7
|
4
4
|
Summary: Server component of the Fractal analytics platform
|
5
5
|
Home-page: https://github.com/fractal-analytics-platform/fractal-server
|
6
6
|
License: BSD-3-Clause
|
@@ -33,7 +33,7 @@ Requires-Dist: psycopg[binary] (>=3.1.0,<4.0.0) ; extra == "postgres-psycopg-bin
|
|
33
33
|
Requires-Dist: pydantic (>=1.10.8,<2)
|
34
34
|
Requires-Dist: python-dotenv (>=1.0.0,<2.0.0)
|
35
35
|
Requires-Dist: sqlalchemy[asyncio] (>=2.0.23,<2.1)
|
36
|
-
Requires-Dist: sqlmodel (>=0.0.
|
36
|
+
Requires-Dist: sqlmodel (>=0.0.21,<0.0.22)
|
37
37
|
Requires-Dist: uvicorn (>=0.29.0,<0.30.0)
|
38
38
|
Project-URL: Changelog, https://github.com/fractal-analytics-platform/fractal-server/blob/main/CHANGELOG.md
|
39
39
|
Project-URL: Documentation, https://fractal-analytics-platform.github.io/fractal-server
|
@@ -1,4 +1,4 @@
|
|
1
|
-
fractal_server/__init__.py,sha256=
|
1
|
+
fractal_server/__init__.py,sha256=RnhDw1BSFncjEr_850CnTxRPd0CUQSmMtBKZ6CaNXg0,22
|
2
2
|
fractal_server/__main__.py,sha256=CocbzZooX1UtGqPi55GcHGNxnrJXFg5tUU5b3wyFCyo,4958
|
3
3
|
fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
|
4
4
|
fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -18,7 +18,7 @@ fractal_server/app/models/v2/collection_state.py,sha256=nxb042i8tt8rCpmgbFJoBCYW
|
|
18
18
|
fractal_server/app/models/v2/dataset.py,sha256=-7sxHEw4IIAvF_uSan7tA3o8hvoakBkQ0SRvqS2iOQU,1455
|
19
19
|
fractal_server/app/models/v2/job.py,sha256=ypJmN-qspkKBGhBG7Mt-HypSQqcQ2EmB4Bzzb2-y550,1535
|
20
20
|
fractal_server/app/models/v2/project.py,sha256=CRBnZ8QITNp6u1f5bMxvi1_mcvEfXpWyitsWB5f7gn8,759
|
21
|
-
fractal_server/app/models/v2/task.py,sha256=
|
21
|
+
fractal_server/app/models/v2/task.py,sha256=Esf2j9c-0pGYjdbb__Ptpdx7NCAKVxqbQMoza524miU,1286
|
22
22
|
fractal_server/app/models/v2/workflow.py,sha256=YBgFGCziUgU0aJ5EM3Svu9W2c46AewZO9VBlFCHiSps,1069
|
23
23
|
fractal_server/app/models/v2/workflowtask.py,sha256=3jEkObsSnlI05Pur_dSsXYdJxRqPL60Z7tK5-EJLOks,1532
|
24
24
|
fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -36,7 +36,7 @@ fractal_server/app/routes/api/v1/task_collection.py,sha256=82XBsJHlPiDPCbpLa-16o
|
|
36
36
|
fractal_server/app/routes/api/v1/workflow.py,sha256=7r9IoIevg_rvYCrerMOsIsUabSOQatxdPCfLdkP0dRs,10942
|
37
37
|
fractal_server/app/routes/api/v1/workflowtask.py,sha256=qcHQlzlSFf_k8gtId-mA3tnyzgSR7i1m7pvR4R86blE,5582
|
38
38
|
fractal_server/app/routes/api/v2/__init__.py,sha256=JrPWfKIJy9btRCP-zw2nZwLpSdBxEKY5emuCuJbqG0s,1813
|
39
|
-
fractal_server/app/routes/api/v2/_aux_functions.py,sha256=
|
39
|
+
fractal_server/app/routes/api/v2/_aux_functions.py,sha256=yeA0650pBk43M5ZQGpVQ17nH5D97NIGY-3tNNLQIW1M,14901
|
40
40
|
fractal_server/app/routes/api/v2/dataset.py,sha256=_HjKNP9XsMGoqyubGdF2ZyeW7vXC3VdK_0_TaUxgIF0,8248
|
41
41
|
fractal_server/app/routes/api/v2/images.py,sha256=4r_HblPWyuKSZSJZfn8mbDaLv1ncwZU0gWdKneZcNG4,7894
|
42
42
|
fractal_server/app/routes/api/v2/job.py,sha256=RkIj7ANK-nkxUvcG9K2r4dFdPnvGomx7jdB6U9bqOVQ,5202
|
@@ -48,7 +48,7 @@ fractal_server/app/routes/api/v2/task_collection.py,sha256=BiZ5s6DwdQbM79s_dPivg
|
|
48
48
|
fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=cvZorN_Xt57Rj-2JATRrdtSw6I_5befB0ua3FWh6hW4,5988
|
49
49
|
fractal_server/app/routes/api/v2/task_legacy.py,sha256=P_VJv9v0yzFUBuS-DQHhMVSOe20ecGJJcFBqiiFciOM,1628
|
50
50
|
fractal_server/app/routes/api/v2/workflow.py,sha256=2GlcYNjpvCdjwC_Kn7y0UP16B3pOLSNXBvIVsVDtDKM,11863
|
51
|
-
fractal_server/app/routes/api/v2/workflowtask.py,sha256=
|
51
|
+
fractal_server/app/routes/api/v2/workflowtask.py,sha256=l_eQPniK1zR0u249bJj4c2hFlyDwsSJgsFR6hxJaOjs,8007
|
52
52
|
fractal_server/app/routes/auth.py,sha256=Xv80iqdyfY3lyicYs2Y8B6zEDEnyUu_H6_6psYtv3R4,4885
|
53
53
|
fractal_server/app/routes/aux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
54
54
|
fractal_server/app/routes/aux/_job.py,sha256=HUItNm0SZFAYsyL1rXSjBre1-rXSe6x51qH9KAQWS1w,1361
|
@@ -65,9 +65,9 @@ fractal_server/app/runner/executors/slurm/_batching.py,sha256=3mfeFuYm3UA4EXh4VW
|
|
65
65
|
fractal_server/app/runner/executors/slurm/_slurm_config.py,sha256=iyhtDi1qveqq7I4S1tycVKsp3VfyocvBgGugYDpOzAs,16069
|
66
66
|
fractal_server/app/runner/executors/slurm/remote.py,sha256=wLziIsGdSMiO-jIXM8x77JRK82g_2hx0iBKTiMghuIo,5852
|
67
67
|
fractal_server/app/runner/executors/slurm/ssh/__init__.py,sha256=Cjn1rYvljddi96tAwS-qqGkNfOcfPzjChdaEZEObCcM,65
|
68
|
-
fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py,sha256=
|
68
|
+
fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py,sha256=bKo5Ja0IGxJWpPWyh9dN0AG-PwzTDZzD5LyaEHB3YU4,3742
|
69
69
|
fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py,sha256=rwlqZzoGo4SAb4nSlFjsQJdaCgfM1J6YGcjb8yYxlqc,4506
|
70
|
-
fractal_server/app/runner/executors/slurm/ssh/executor.py,sha256=
|
70
|
+
fractal_server/app/runner/executors/slurm/ssh/executor.py,sha256=oCc5cLZoNmJ3ENV0VaYRiIKayVClKDoEnjgZjHU864Y,57052
|
71
71
|
fractal_server/app/runner/executors/slurm/sudo/__init__.py,sha256=Cjn1rYvljddi96tAwS-qqGkNfOcfPzjChdaEZEObCcM,65
|
72
72
|
fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py,sha256=wAgwpVcr6JIslKHOuS0FhRa_6T1KCManyRJqA-fifzw,1909
|
73
73
|
fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py,sha256=z5LlhaiqAb8pHsF1WwdzXN39C5anQmwjo1rSQgtRAYE,4422
|
@@ -139,7 +139,7 @@ fractal_server/app/schemas/v2/task_collection.py,sha256=8PG1bOqkfQqORMN0brWf6mHD
|
|
139
139
|
fractal_server/app/schemas/v2/workflow.py,sha256=Zzx3e-qgkH8le0FUmAx9UrV5PWd7bj14PPXUh_zgZXM,1827
|
140
140
|
fractal_server/app/schemas/v2/workflowtask.py,sha256=atVuVN4aXsVEOmSd-vyg-8_8OnPmqx-gT75rXcn_AlQ,6552
|
141
141
|
fractal_server/app/security/__init__.py,sha256=2-QbwuR-nsuHM_uwKS_WzYvkhnuhO5jUv8UVROetyVk,11169
|
142
|
-
fractal_server/config.py,sha256
|
142
|
+
fractal_server/config.py,sha256=-9x8grPTrM-rnztRAOlqHKuHCHWEg_-qnccU3kjuxbY,25058
|
143
143
|
fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
|
144
144
|
fractal_server/gunicorn_fractal.py,sha256=2AOkgxu-oQ-XB578_voT0VuhmAXFTmb0c-nYn1XLy_Q,1231
|
145
145
|
fractal_server/images/__init__.py,sha256=xO6jTLE4EZKO6cTDdJsBmK9cdeh9hFTaSbSuWgQg7y4,196
|
@@ -181,20 +181,20 @@ fractal_server/tasks/v1/get_collection_data.py,sha256=bi9tuApLgoKZNMIG1kR4GoKI9S
|
|
181
181
|
fractal_server/tasks/v1/utils.py,sha256=J9oKys-82OehBxOon5wWl3CxjVBgYWeVEEyWGVFnreI,1759
|
182
182
|
fractal_server/tasks/v2/_TaskCollectPip.py,sha256=kWQNMNZ8OEddkYhmhsk3E6ArcaD7qe4vsjYYx9vbrUg,4900
|
183
183
|
fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
184
|
-
fractal_server/tasks/v2/_venv_pip.py,sha256=
|
184
|
+
fractal_server/tasks/v2/_venv_pip.py,sha256=6NCItfeWgO9BDnlfhoCfiUG5UCGGz_SJz4Mfn4Jg_nk,6489
|
185
185
|
fractal_server/tasks/v2/background_operations.py,sha256=CQwQon5RKAXrjsN255Okh5dcT0R45axgqoPW3EB-v_Q,11527
|
186
|
-
fractal_server/tasks/v2/background_operations_ssh.py,sha256=
|
186
|
+
fractal_server/tasks/v2/background_operations_ssh.py,sha256=wVnE6bubKsFqxsBFdyCcvW8nRr4kTGUiyt2OKQFIwrU,14050
|
187
187
|
fractal_server/tasks/v2/endpoint_operations.py,sha256=gT38pl5TEH6WNWOtg4Itegt2lTJJI6YRa7fEj9Y4x2s,4226
|
188
188
|
fractal_server/tasks/v2/templates/_1_create_venv.sh,sha256=5uW0ETYxl5xiQEXP107zgq8V_-vf3k5NzMMj1hSLjas,1015
|
189
|
-
fractal_server/tasks/v2/templates/_2_upgrade_pip.sh,sha256=
|
189
|
+
fractal_server/tasks/v2/templates/_2_upgrade_pip.sh,sha256=ca5Yng6JgJYu-a4QrsIsatwUmrLdRWBKw7_VJrY7WLY,555
|
190
190
|
fractal_server/tasks/v2/templates/_3_pip_install.sh,sha256=T9sabeB9iQzVZpLfuLkKGz9EpfHkUrJHKWO4HNij6yM,595
|
191
|
-
fractal_server/tasks/v2/templates/_4_pip_freeze.sh,sha256=
|
191
|
+
fractal_server/tasks/v2/templates/_4_pip_freeze.sh,sha256=qHdDKu1svXi1VQKGePciEJK4_uEKuwAvwaDCcGxSvNk,274
|
192
192
|
fractal_server/tasks/v2/templates/_5_pip_show.sh,sha256=GrJ19uHYQxANEy9JaeNJZVTquY9c8Ww9eCdnC7eLVr0,1754
|
193
193
|
fractal_server/tasks/v2/utils.py,sha256=JOyCacb6MNvrwfLNTyLwcz8y79J29YuJeJ2MK5kqXRM,1657
|
194
194
|
fractal_server/urls.py,sha256=5o_qq7PzKKbwq12NHSQZDmDitn5RAOeQ4xufu-2v9Zk,448
|
195
195
|
fractal_server/utils.py,sha256=b7WwFdcFZ8unyT65mloFToYuEDXpQoHRcmRNqrhd_dQ,2115
|
196
|
-
fractal_server-2.3.
|
197
|
-
fractal_server-2.3.
|
198
|
-
fractal_server-2.3.
|
199
|
-
fractal_server-2.3.
|
200
|
-
fractal_server-2.3.
|
196
|
+
fractal_server-2.3.7.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
|
197
|
+
fractal_server-2.3.7.dist-info/METADATA,sha256=dv6zpe0qPcyg3o-cHrxCJMiwNW22FFX4O_sFdsn3XWE,4425
|
198
|
+
fractal_server-2.3.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
199
|
+
fractal_server-2.3.7.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
|
200
|
+
fractal_server-2.3.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|