fractal-server 2.10.1__py3-none-any.whl → 2.10.2__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.10.1"
1
+ __VERSION__ = "2.10.2"
@@ -9,6 +9,7 @@ from cfut import FileWaitThread
9
9
 
10
10
  from ......logger import set_logger
11
11
  from ._check_jobs_status import _jobs_finished
12
+ from fractal_server.app.runner.exceptions import JobExecutionError
12
13
 
13
14
  logger = set_logger(__name__)
14
15
 
@@ -56,6 +57,10 @@ class FractalFileWaitThread(FileWaitThread):
56
57
  Note that (with respect to clusterfutures) we replaced `filename` with
57
58
  `filenames`.
58
59
  """
60
+ if self.shutdown:
61
+ error_msg = "Cannot call `wait` method after executor shutdown."
62
+ logger.warning(error_msg)
63
+ raise JobExecutionError(info=error_msg)
59
64
  with self.lock:
60
65
  self.waiting[filenames] = jobid
61
66
 
@@ -331,6 +331,12 @@ class FractalSlurmExecutor(SlurmExecutor):
331
331
  Future representing the execution of the current SLURM job.
332
332
  """
333
333
 
334
+ # Do not continue if auxiliary thread was shut down
335
+ if self.wait_thread.shutdown:
336
+ error_msg = "Cannot call `submit` method after executor shutdown"
337
+ logger.warning(error_msg)
338
+ raise JobExecutionError(info=error_msg)
339
+
334
340
  # Set slurm_file_prefix
335
341
  slurm_file_prefix = task_files.file_prefix
336
342
 
@@ -395,6 +401,12 @@ class FractalSlurmExecutor(SlurmExecutor):
395
401
 
396
402
  """
397
403
 
404
+ # Do not continue if auxiliary thread was shut down
405
+ if self.wait_thread.shutdown:
406
+ error_msg = "Cannot call `map` method after executor shutdown"
407
+ logger.warning(error_msg)
408
+ raise JobExecutionError(info=error_msg)
409
+
398
410
  def _result_or_cancel(fut):
399
411
  """
400
412
  This function is based on the Python Standard Library 3.11.
@@ -546,6 +558,15 @@ class FractalSlurmExecutor(SlurmExecutor):
546
558
  Returns:
547
559
  Future representing the execution of the current SLURM job.
548
560
  """
561
+
562
+ # Prevent calling sbatch if auxiliary thread was shut down
563
+ if self.wait_thread.shutdown:
564
+ error_msg = (
565
+ "Cannot call `_submit_job` method after executor shutdown"
566
+ )
567
+ logger.warning(error_msg)
568
+ raise JobExecutionError(info=error_msg)
569
+
549
570
  fut: Future = Future()
550
571
 
551
572
  # Inject SLURM account (if set) into slurm_config
@@ -1207,6 +1228,9 @@ class FractalSlurmExecutor(SlurmExecutor):
1207
1228
  logger.error(error_msg)
1208
1229
  raise JobExecutionError(info=error_msg)
1209
1230
 
1231
+ # Redudantly set thread shutdown attribute to True
1232
+ self.wait_thread.shutdown = True
1233
+
1210
1234
  logger.debug("Executor shutdown: end")
1211
1235
 
1212
1236
  def _stop_and_join_wait_thread(self):
fractal_server/config.py CHANGED
@@ -492,6 +492,39 @@ class Settings(BaseSettings):
492
492
  Whether to include the v1 API.
493
493
  """
494
494
 
495
+ FRACTAL_PIP_CACHE_DIR: Optional[str] = None
496
+ """
497
+ Absolute path to the cache directory for `pip`; if unset,
498
+ `--no-cache-dir` is used.
499
+ """
500
+
501
+ @validator("FRACTAL_PIP_CACHE_DIR", always=True)
502
+ def absolute_FRACTAL_PIP_CACHE_DIR(cls, v):
503
+ """
504
+ If `FRACTAL_PIP_CACHE_DIR` is a relative path, fail.
505
+ """
506
+ if v is None:
507
+ return None
508
+ elif not Path(v).is_absolute():
509
+ raise FractalConfigurationError(
510
+ f"Non-absolute value for FRACTAL_PIP_CACHE_DIR={v}"
511
+ )
512
+ else:
513
+ return v
514
+
515
+ @property
516
+ def PIP_CACHE_DIR_ARG(self) -> str:
517
+ """
518
+ Option for `pip install`, based on `FRACTAL_PIP_CACHE_DIR` value.
519
+
520
+ If `FRACTAL_PIP_CACHE_DIR` is set, then return
521
+ `--cache-dir /somewhere`; else return `--no-cache-dir`.
522
+ """
523
+ if self.FRACTAL_PIP_CACHE_DIR is not None:
524
+ return f"--cache-dir {self.FRACTAL_PIP_CACHE_DIR}"
525
+ else:
526
+ return "--no-cache-dir"
527
+
495
528
  FRACTAL_MAX_PIP_VERSION: str = "24.0"
496
529
  """
497
530
  Maximum value at which to update `pip` before performing task collection.
@@ -538,7 +571,6 @@ class Settings(BaseSettings):
538
571
  raise FractalConfigurationError("POSTGRES_DB cannot be None.")
539
572
 
540
573
  def check_runner(self) -> None:
541
-
542
574
  if not self.FRACTAL_RUNNER_WORKING_BASE_DIR:
543
575
  raise FractalConfigurationError(
544
576
  "FRACTAL_RUNNER_WORKING_BASE_DIR cannot be None."
@@ -546,7 +578,6 @@ class Settings(BaseSettings):
546
578
 
547
579
  info = f"FRACTAL_RUNNER_BACKEND={self.FRACTAL_RUNNER_BACKEND}"
548
580
  if self.FRACTAL_RUNNER_BACKEND == "slurm":
549
-
550
581
  from fractal_server.app.runner.executors.slurm._slurm_config import ( # noqa: E501
551
582
  load_slurm_config_file,
552
583
  )
@@ -6,6 +6,7 @@ from fractal_server.syringe import Inject
6
6
  COLLECTION_FILENAME = "collection.json"
7
7
  COLLECTION_LOG_FILENAME = "collection.log"
8
8
  COLLECTION_FREEZE_FILENAME = "collection_freeze.txt"
9
+ FORBIDDEN_DEPENDENCY_STRINGS = ["github.com"]
9
10
 
10
11
 
11
12
  def get_absolute_venv_path_v1(venv_path: Path) -> Path:
@@ -15,6 +15,7 @@ from fractal_server.app.schemas.v2 import TaskGroupActivityActionV2
15
15
  from fractal_server.app.schemas.v2 import TaskGroupV2OriginEnum
16
16
  from fractal_server.app.schemas.v2.task_group import TaskGroupActivityStatusV2
17
17
  from fractal_server.logger import set_logger
18
+ from fractal_server.tasks.utils import FORBIDDEN_DEPENDENCY_STRINGS
18
19
  from fractal_server.tasks.utils import get_log_path
19
20
  from fractal_server.tasks.v2.utils_background import get_current_log
20
21
  from fractal_server.tasks.v2.utils_templates import SCRIPTS_SUBFOLDER
@@ -189,6 +190,16 @@ def deactivate_local(
189
190
  "task-group attributes."
190
191
  )
191
192
 
193
+ # Fail if `pip_freeze` includes "github.com", see
194
+ # https://github.com/fractal-analytics-platform/fractal-server/issues/2142
195
+ for forbidden_string in FORBIDDEN_DEPENDENCY_STRINGS:
196
+ if forbidden_string in task_group.pip_freeze:
197
+ raise ValueError(
198
+ "Deactivation and reactivation of task packages "
199
+ f"with direct {forbidden_string} dependencies "
200
+ "are not currently supported. Exit."
201
+ )
202
+
192
203
  # We now have all required information for reactivating the
193
204
  # virtual environment at a later point
194
205
 
@@ -119,7 +119,6 @@ def reactivate_local(
119
119
  )
120
120
  logger.debug("end - create venv")
121
121
  activity.log = get_current_log(log_file_path)
122
- activity.timestamp_ended = get_timestamp()
123
122
  activity = add_commit_refresh(obj=activity, db=db)
124
123
 
125
124
  logger.debug("start - install from pip freeze")
@@ -16,6 +16,7 @@ from fractal_server.app.schemas.v2 import TaskGroupV2OriginEnum
16
16
  from fractal_server.app.schemas.v2.task_group import TaskGroupActivityStatusV2
17
17
  from fractal_server.logger import set_logger
18
18
  from fractal_server.ssh._fabric import FractalSSH
19
+ from fractal_server.tasks.utils import FORBIDDEN_DEPENDENCY_STRINGS
19
20
  from fractal_server.tasks.utils import get_log_path
20
21
  from fractal_server.tasks.v2.utils_background import get_current_log
21
22
  from fractal_server.tasks.v2.utils_templates import SCRIPTS_SUBFOLDER
@@ -221,6 +222,16 @@ def deactivate_ssh(
221
222
  "task-group attributes."
222
223
  )
223
224
 
225
+ # Fail if `pip_freeze` includes "github", see
226
+ # https://github.com/fractal-analytics-platform/fractal-server/issues/2142
227
+ for forbidden_string in FORBIDDEN_DEPENDENCY_STRINGS:
228
+ if forbidden_string in task_group.pip_freeze:
229
+ raise ValueError(
230
+ "Deactivation and reactivation of task packages "
231
+ f"with direct {forbidden_string} dependencies "
232
+ "are not currently supported. Exit."
233
+ )
234
+
224
235
  # We now have all required information for reactivating the
225
236
  # virtual environment at a later point
226
237
 
@@ -159,7 +159,6 @@ def reactivate_ssh(
159
159
  )
160
160
  logger.debug("end - create venv")
161
161
  activity.log = get_current_log(log_file_path)
162
- activity.timestamp_ended = get_timestamp()
163
162
  activity = add_commit_refresh(obj=activity, db=db)
164
163
 
165
164
  logger.debug("start - install from pip freeze")
@@ -10,6 +10,7 @@ PACKAGE_ENV_DIR=__PACKAGE_ENV_DIR__
10
10
  INSTALL_STRING=__INSTALL_STRING__
11
11
  PINNED_PACKAGE_LIST="__PINNED_PACKAGE_LIST__"
12
12
  FRACTAL_MAX_PIP_VERSION="__FRACTAL_MAX_PIP_VERSION__"
13
+ FRACTAL_PIP_CACHE_DIR_ARG="__FRACTAL_PIP_CACHE_DIR_ARG__"
13
14
 
14
15
  TIME_START=$(date +%s)
15
16
 
@@ -17,8 +18,8 @@ VENVPYTHON=${PACKAGE_ENV_DIR}/bin/python
17
18
 
18
19
  # Upgrade `pip` and install `setuptools`
19
20
  write_log "START upgrade pip and install setuptools"
20
- "$VENVPYTHON" -m pip install --no-cache-dir "pip<=${FRACTAL_MAX_PIP_VERSION}" --upgrade
21
- "$VENVPYTHON" -m pip install --no-cache-dir setuptools
21
+ "$VENVPYTHON" -m pip install ${FRACTAL_PIP_CACHE_DIR_ARG} "pip<=${FRACTAL_MAX_PIP_VERSION}" --upgrade
22
+ "$VENVPYTHON" -m pip install ${FRACTAL_PIP_CACHE_DIR_ARG} setuptools
22
23
  write_log "END upgrade pip and install setuptools"
23
24
  echo
24
25
 
@@ -41,7 +42,7 @@ if [ "$PINNED_PACKAGE_LIST" != "" ]; then
41
42
  done
42
43
 
43
44
  write_log "All packages in ${PINNED_PACKAGE_LIST} are already installed, proceed with specific versions."
44
- "$VENVPYTHON" -m pip install --no-cache-dir "$PINNED_PACKAGE_LIST"
45
+ "$VENVPYTHON" -m pip install ${FRACTAL_PIP_CACHE_DIR_ARG} "$PINNED_PACKAGE_LIST"
45
46
  write_log "END installing pinned versions $PINNED_PACKAGE_LIST"
46
47
  else
47
48
  write_log "SKIP installing pinned versions $PINNED_PACKAGE_LIST (empty list)"
@@ -9,6 +9,7 @@ write_log(){
9
9
  PACKAGE_ENV_DIR=__PACKAGE_ENV_DIR__
10
10
  PIP_FREEZE_FILE=__PIP_FREEZE_FILE__
11
11
  FRACTAL_MAX_PIP_VERSION=__FRACTAL_MAX_PIP_VERSION__
12
+ FRACTAL_PIP_CACHE_DIR_ARG="__FRACTAL_PIP_CACHE_DIR_ARG__"
12
13
 
13
14
  TIME_START=$(date +%s)
14
15
 
@@ -16,14 +17,14 @@ VENVPYTHON=${PACKAGE_ENV_DIR}/bin/python
16
17
 
17
18
  # Upgrade `pip` and install `setuptools`
18
19
  write_log "START upgrade pip and install setuptools"
19
- "$VENVPYTHON" -m pip install --no-cache-dir "pip<=${FRACTAL_MAX_PIP_VERSION}" --upgrade
20
- "$VENVPYTHON" -m pip install --no-cache-dir setuptools
20
+ "$VENVPYTHON" -m pip install ${FRACTAL_PIP_CACHE_DIR_ARG} "pip<=${FRACTAL_MAX_PIP_VERSION}" --upgrade
21
+ "$VENVPYTHON" -m pip install ${FRACTAL_PIP_CACHE_DIR_ARG} setuptools
21
22
  write_log "END upgrade pip and install setuptools"
22
23
  echo
23
24
 
24
25
  # Install from pip-freeze file
25
26
  write_log "START installing requirements from ${PIP_FREEZE_FILE}"
26
- "$VENVPYTHON" -m pip install -r "${PIP_FREEZE_FILE}"
27
+ "$VENVPYTHON" -m pip install ${FRACTAL_PIP_CACHE_DIR_ARG} -r "${PIP_FREEZE_FILE}"
27
28
  write_log "END installing requirements from ${PIP_FREEZE_FILE}"
28
29
  echo
29
30
 
@@ -81,6 +81,7 @@ def get_collection_replacements(
81
81
  "__FRACTAL_MAX_PIP_VERSION__",
82
82
  settings.FRACTAL_MAX_PIP_VERSION,
83
83
  ),
84
+ ("__FRACTAL_PIP_CACHE_DIR_ARG__", settings.PIP_CACHE_DIR_ARG),
84
85
  (
85
86
  "__PINNED_PACKAGE_LIST__",
86
87
  task_group.pinned_package_versions_string,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fractal-server
3
- Version: 2.10.1
3
+ Version: 2.10.2
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
@@ -1,4 +1,4 @@
1
- fractal_server/__init__.py,sha256=mGoPL5QC9hw_tGv5lsEM4M_0NMrtig40cMpwnjY5kto,23
1
+ fractal_server/__init__.py,sha256=tZW5fVNCJEAwS9Hds76myD5Wbu6QwRk6i6vry6Km0qQ,23
2
2
  fractal_server/__main__.py,sha256=dEkCfzLLQrIlxsGC-HBfoR-RBMWnJDgNrxYTyzmE9c0,6146
3
3
  fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
4
4
  fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -90,9 +90,9 @@ fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py,sha256=rwlqZzoGo4SAb
90
90
  fractal_server/app/runner/executors/slurm/ssh/executor.py,sha256=U2-tNE_5ECHFIoXjEvBlaSXKaIf-1IXZlDs0c34mab8,54110
91
91
  fractal_server/app/runner/executors/slurm/sudo/__init__.py,sha256=Cjn1rYvljddi96tAwS-qqGkNfOcfPzjChdaEZEObCcM,65
92
92
  fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py,sha256=wAgwpVcr6JIslKHOuS0FhRa_6T1KCManyRJqA-fifzw,1909
93
- fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py,sha256=z5LlhaiqAb8pHsF1WwdzXN39C5anQmwjo1rSQgtRAYE,4422
93
+ fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py,sha256=uRRyVHQtK9McHCB6OsjYfDnQsu2E8At9K_UYb_pe2pg,4682
94
94
  fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py,sha256=g8wqUjSicN17UZVXlfaMomYZ-xOIbBu1oE7HdJTzfvw,5218
95
- fractal_server/app/runner/executors/slurm/sudo/executor.py,sha256=CAIPFMmsjQLxmjN8Kdpq0OlZIX9PZIiRo0XO1quKWEM,46495
95
+ fractal_server/app/runner/executors/slurm/sudo/executor.py,sha256=FVgx2mxqCLOhSoH3UTAeNc0BT0eJaxHMglGzGYePGPM,47439
96
96
  fractal_server/app/runner/executors/slurm/utils_executors.py,sha256=naPyJI0I3lD-sYHbSXbMFGUBK4h_SggA5V91Z1Ch1Xg,1416
97
97
  fractal_server/app/runner/extract_archive.py,sha256=tLpjDrX47OjTNhhoWvm6iNukg8KoieWyTb7ZfvE9eWU,2483
98
98
  fractal_server/app/runner/filenames.py,sha256=9lwu3yB4C67yiijYw8XIKaLFn3mJUt6_TCyVFM_aZUQ,206
@@ -163,7 +163,7 @@ fractal_server/app/schemas/v2/workflow.py,sha256=-KWvXnbHBFA3pj5n7mfSyLKJQSqkJmo
163
163
  fractal_server/app/schemas/v2/workflowtask.py,sha256=FthKErVgx3a-k7WVk3nqJe1G-fl_iHND4rVrDXJ0F84,5942
164
164
  fractal_server/app/security/__init__.py,sha256=MlWVrLFPj9M2Gug-k8yATM-Cw066RugVU4KK6kMRbnQ,13019
165
165
  fractal_server/app/user_settings.py,sha256=OP1yiYKtPadxwM51_Q0hdPk3z90TCN4z1BLpQsXyWiU,1316
166
- fractal_server/config.py,sha256=wRWJqyEeH4j2puH-fGlCYKLoKFh9pzRsQkS6q1VtO9M,23173
166
+ fractal_server/config.py,sha256=y9dxlHg1_BY6grec3mlpjutEiakQlsPJr3ERU-FlRfE,24200
167
167
  fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
168
168
  fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
169
169
  fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
@@ -208,7 +208,7 @@ fractal_server/ssh/_fabric.py,sha256=lNy4IX1I4We6VoWa4Bz4fUPuApLMSoejpyE6I3jDZeM
208
208
  fractal_server/string_tools.py,sha256=XtMNsr5R7GmgzmFi68zkKMedHs8vjGoVMMCXqWhIk9k,2568
209
209
  fractal_server/syringe.py,sha256=3qSMW3YaMKKnLdgnooAINOPxnCOxP7y2jeAQYB21Gdo,2786
210
210
  fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39NHE8,23
211
- fractal_server/tasks/utils.py,sha256=2ShlUSOXx53IiZT72dTCF31xXoLX9P8bY18vMj2m-mc,1059
211
+ fractal_server/tasks/utils.py,sha256=gA9nYAviWKAMJmaF5RtoT2InddU6dCT2qA6fZTYNGO4,1105
212
212
  fractal_server/tasks/v1/_TaskCollectPip.py,sha256=ARq5AoHYXH0hziEsb-nFAqbsLA-VIddXOdXL38O6_zA,3746
213
213
  fractal_server/tasks/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
214
  fractal_server/tasks/v1/background_operations.py,sha256=0Zm8TT_RV0BxJCXbruYJCu1eXOkEcHpqnWn_BEe7huw,11829
@@ -219,29 +219,29 @@ fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
219
219
  fractal_server/tasks/v2/local/__init__.py,sha256=9RVItnS7OyLsJOuJjWMCicaky4ASUPQEYD4SzDs0hOE,141
220
220
  fractal_server/tasks/v2/local/_utils.py,sha256=EvhmVwYjqaNyDCUMEsTWYOUXLgEwR1xr6bu32apCEI8,2491
221
221
  fractal_server/tasks/v2/local/collect.py,sha256=JuMplfREqrPvVEGlT5kJhcmZXC_iYlwvNlkgFrCaCC0,12107
222
- fractal_server/tasks/v2/local/deactivate.py,sha256=XR1nvJY3mKCRqwPwV79rVaQmtb3J83KdmJKjTOHD-cU,9250
223
- fractal_server/tasks/v2/local/reactivate.py,sha256=R3rArAzUpMGf6xa3dGVwwXHW9WVDi5ia28AFisZsqNc,6112
222
+ fractal_server/tasks/v2/local/deactivate.py,sha256=SOFtOaR5yYm3IkbOw48TrQgzEpONQ9647KvyD_zImr8,9899
223
+ fractal_server/tasks/v2/local/reactivate.py,sha256=MeUZHx8IKrfTEf-pXlfYms8I4o-26co3jdNgSNAvw60,6053
224
224
  fractal_server/tasks/v2/ssh/__init__.py,sha256=aSQbVi6Ummt9QzcSLWNmSqYjfdxrn9ROmqgH6bDpI7k,135
225
225
  fractal_server/tasks/v2/ssh/_utils.py,sha256=LjaEYVUJDChilu3YuhxuGWYRNnVJ_zqNE9SDHdRTIHY,2824
226
226
  fractal_server/tasks/v2/ssh/collect.py,sha256=2XXEPpl4LS22A75v_k4Bd46k46tmnLNZfceHyPi3kXo,13457
227
- fractal_server/tasks/v2/ssh/deactivate.py,sha256=Ffk_UuQSBUBNBCiviuKNhEUGyZPQa4_erJKFdwgMcE8,10616
228
- fractal_server/tasks/v2/ssh/reactivate.py,sha256=jdO8iyzavzSVPcOpIZrYSEkGPYTvz5XJ5h_5-nz9yzA,7896
227
+ fractal_server/tasks/v2/ssh/deactivate.py,sha256=D8rfnC46davmDKZCipPdWZHDD4TIZ-4nr9vxZSV2aC0,11261
228
+ fractal_server/tasks/v2/ssh/reactivate.py,sha256=cmdT2P1J0FwS1NYYRrhxHsSRyUZ5uu78hS3fDrSVbKo,7837
229
229
  fractal_server/tasks/v2/templates/1_create_venv.sh,sha256=PK0jdHKtQpda1zULebBaVPORt4t6V17wa4N1ohcj5ac,548
230
- fractal_server/tasks/v2/templates/2_pip_install.sh,sha256=RDDfbFnGOK3aRuHyXqDOUNCGullzAr0zS7BFqG1CJeE,1720
230
+ fractal_server/tasks/v2/templates/2_pip_install.sh,sha256=0NLELYgEDOrbfcjMamWN91Cw90bdl9wvWjlgXeLHT98,1820
231
231
  fractal_server/tasks/v2/templates/3_pip_freeze.sh,sha256=JldREScEBI4cD_qjfX4UK7V4aI-FnX9ZvVNxgpSOBFc,168
232
232
  fractal_server/tasks/v2/templates/4_pip_show.sh,sha256=84NGHlg6JIbrQktgGKyfGsggPFzy6RBJuOmIpPUhsrw,1747
233
233
  fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh,sha256=q-6ZUvA6w6FDVEoSd9O63LaJ9tKZc7qAFH72SGPrd_k,284
234
- fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh,sha256=n9C8w76YraLbeTe7NhuLzvAQiJCm_akL3Mc3EMfxrHo,1007
234
+ fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh,sha256=A2y8RngEjAcRhG-_owA6P7tAdrS_AszFuGXnaeMV8u0,1122
235
235
  fractal_server/tasks/v2/utils_background.py,sha256=tikXhggqxdU7EnKdx2co3UwinlDazEjfOPQOXtO58zs,4240
236
236
  fractal_server/tasks/v2/utils_database.py,sha256=g5m3sNPZKQ3AjflhPURDlAppQcIS5T1A8a1macdswBA,1268
237
237
  fractal_server/tasks/v2/utils_package_names.py,sha256=RDg__xrvQs4ieeVzmVdMcEh95vGQYrv9Hfal-5EDBM8,2393
238
238
  fractal_server/tasks/v2/utils_python_interpreter.py,sha256=5_wrlrTqXyo1YuLZvAW9hrSoh5MyLOzdPVUlUwM7uDQ,955
239
- fractal_server/tasks/v2/utils_templates.py,sha256=MS8zu24qimJSktZaHruPxkwIl81ZoUnIVGtnMHS4Y3o,2876
239
+ fractal_server/tasks/v2/utils_templates.py,sha256=07TZpJ0Mh_A4lXVXrrH2o1VLFFGwxeRumA6DdgMgCWk,2947
240
240
  fractal_server/urls.py,sha256=5o_qq7PzKKbwq12NHSQZDmDitn5RAOeQ4xufu-2v9Zk,448
241
241
  fractal_server/utils.py,sha256=utvmBx8K9I8hRWFquxna2pBaOqe0JifDL_NVPmihEJI,3525
242
242
  fractal_server/zip_tools.py,sha256=GjDgo_sf6V_DDg6wWeBlZu5zypIxycn_l257p_YVKGc,4876
243
- fractal_server-2.10.1.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
244
- fractal_server-2.10.1.dist-info/METADATA,sha256=r2HP2NsG-Jz9wcqob_X5XehPxQCzC8amUcW300aoPG4,4544
245
- fractal_server-2.10.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
246
- fractal_server-2.10.1.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
247
- fractal_server-2.10.1.dist-info/RECORD,,
243
+ fractal_server-2.10.2.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
244
+ fractal_server-2.10.2.dist-info/METADATA,sha256=qVhVwFIf7b6tlYACZ6HCT621DPVmF0YxwepFRoTkPU0,4544
245
+ fractal_server-2.10.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
246
+ fractal_server-2.10.2.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
247
+ fractal_server-2.10.2.dist-info/RECORD,,