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.
@@ -1 +1 @@
1
- __VERSION__ = "2.3.5"
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
- db_task.default_args_non_parallel_from_args_schema.copy()
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
- default_args = (
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
- # Get default arguments via a Task property method
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=f"{pip} install --upgrade pip",
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(
@@ -14,7 +14,7 @@ VENVPYTHON=${PACKAGE_ENV_DIR}/bin/python
14
14
 
15
15
  # Upgrade pip
16
16
  write_log "START upgrade pip"
17
- "$VENVPYTHON" -m pip install pip --upgrade
17
+ "$VENVPYTHON" -m pip install "pip<=__FRACTAL_MAX_PIP_VERSION__" --upgrade
18
18
  write_log "END upgrade pip"
19
19
  echo
20
20
 
@@ -12,4 +12,4 @@ PACKAGE_ENV_DIR=__PACKAGE_ENV_DIR__
12
12
 
13
13
  VENVPYTHON=${PACKAGE_ENV_DIR}/bin/python
14
14
 
15
- "$VENVPYTHON" -m pip freeze
15
+ "$VENVPYTHON" -m pip freeze --all
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fractal-server
3
- Version: 2.3.5
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.19,<0.0.20)
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=RqyrrNV86fgXA3ZGY013Ddl0XCyYA-YaiOneKISOYXc,22
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=9ZPhug3VWyeqgT8wQ9_8ZXQ2crSiiicRipxrxTslOso,3257
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=tYJr5EPaA0CVGp-Y4jottFJUVToWvjcSY6PJqN_d--s,14938
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=l4eTD5IIun5cOdYzsxh3ajmnOISaSccYA_mVf15Cjtw,8802
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=jM4G-wiHynZhNERusVGLtDTepJDiYjCDloWZyflaMV0,3482
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=rfLEO6mN3sZvZYHqs3lmYvPYFGLmXyMPWl1Bg0mq-6k,56109
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=KOa2jrsbx0H6zG2ItNZkLiKqbuOkV3aUYKFuIN3FIyE,24921
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=xm4XClWYbhXQRqDxYxM9cP7ZCnx-8b078fuVUL12D2M,6286
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=3TJp2NW2CJ9KlghWDEhTQ4HDZxmbrLHjb0OQJI3ALo0,13892
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=hVqwgWuNOxr6ck-0FklpcF0o7q-vQXQasYNNaPSxlKM,524
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=6BIOVYBPZmaaOuaDwNirt1iHWjj2oDjViUDvQaL_f6Y,268
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.5.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
197
- fractal_server-2.3.5.dist-info/METADATA,sha256=dElt7KKeyH2IIRToMdsTiVKeIEww0ZsbFzlQcCskrKE,4425
198
- fractal_server-2.3.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
199
- fractal_server-2.3.5.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
200
- fractal_server-2.3.5.dist-info/RECORD,,
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,,