fractal-server 2.3.1a0__py3-none-any.whl → 2.3.3__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.1a0"
1
+ __VERSION__ = "2.3.3"
@@ -387,9 +387,7 @@ async def download_job_logs(
387
387
  # Create and return byte stream for zipped log folder
388
388
  PREFIX_ZIP = Path(job.working_dir).name
389
389
  zip_filename = f"{PREFIX_ZIP}_archive.zip"
390
- byte_stream = _zip_folder_to_byte_stream(
391
- folder=job.working_dir, zip_filename=zip_filename
392
- )
390
+ byte_stream = _zip_folder_to_byte_stream(folder=job.working_dir)
393
391
  return StreamingResponse(
394
392
  iter([byte_stream.getvalue()]),
395
393
  media_type="application/x-zip-compressed",
@@ -274,9 +274,7 @@ async def download_job_logs(
274
274
  # Create and return byte stream for zipped log folder
275
275
  PREFIX_ZIP = Path(job.working_dir).name
276
276
  zip_filename = f"{PREFIX_ZIP}_archive.zip"
277
- byte_stream = _zip_folder_to_byte_stream(
278
- folder=job.working_dir, zip_filename=zip_filename
279
- )
277
+ byte_stream = _zip_folder_to_byte_stream(folder=job.working_dir)
280
278
  return StreamingResponse(
281
279
  iter([byte_stream.getvalue()]),
282
280
  media_type="application/x-zip-compressed",
@@ -128,9 +128,7 @@ async def download_job_logs(
128
128
  # Create and return byte stream for zipped log folder
129
129
  PREFIX_ZIP = Path(job.working_dir).name
130
130
  zip_filename = f"{PREFIX_ZIP}_archive.zip"
131
- byte_stream = _zip_folder_to_byte_stream(
132
- folder=job.working_dir, zip_filename=zip_filename
133
- )
131
+ byte_stream = _zip_folder_to_byte_stream(folder=job.working_dir)
134
132
  return StreamingResponse(
135
133
  iter([byte_stream.getvalue()]),
136
134
  media_type="application/x-zip-compressed",
@@ -131,9 +131,7 @@ async def download_job_logs(
131
131
  # Create and return byte stream for zipped log folder
132
132
  PREFIX_ZIP = Path(job.working_dir).name
133
133
  zip_filename = f"{PREFIX_ZIP}_archive.zip"
134
- byte_stream = _zip_folder_to_byte_stream(
135
- folder=job.working_dir, zip_filename=zip_filename
136
- )
134
+ byte_stream = _zip_folder_to_byte_stream(folder=job.working_dir)
137
135
  return StreamingResponse(
138
136
  iter([byte_stream.getvalue()]),
139
137
  media_type="application/x-zip-compressed",
@@ -1,3 +1,4 @@
1
+ import os
1
2
  from io import BytesIO
2
3
  from pathlib import Path
3
4
  from typing import Union
@@ -25,19 +26,20 @@ def _write_shutdown_file(*, job: Union[ApplyWorkflow, JobV2]):
25
26
  f.write(f"Trigger executor shutdown for {job.id=}.")
26
27
 
27
28
 
28
- def _zip_folder_to_byte_stream(*, folder: str, zip_filename: str) -> BytesIO:
29
+ def _zip_folder_to_byte_stream(*, folder: str) -> BytesIO:
29
30
  """
30
31
  Get byte stream with the zipped log folder of a job.
31
32
 
32
33
  Args:
33
34
  folder: the folder to zip
34
- zip_filename: name of the zipped archive
35
35
  """
36
- working_dir_path = Path(folder)
37
36
 
38
37
  byte_stream = BytesIO()
39
38
  with ZipFile(byte_stream, mode="w", compression=ZIP_DEFLATED) as zipfile:
40
- for fpath in working_dir_path.glob("*"):
41
- zipfile.write(filename=str(fpath), arcname=str(fpath.name))
39
+ for root, dirs, files in os.walk(folder):
40
+ for file in files:
41
+ file_path = os.path.join(root, file)
42
+ archive_path = os.path.relpath(file_path, folder)
43
+ zipfile.write(file_path, archive_path)
42
44
 
43
45
  return byte_stream
fractal_server/config.py CHANGED
@@ -497,7 +497,7 @@ class Settings(BaseSettings):
497
497
  [`clusterfutures`](https://github.com/sampsyo/clusterfutures/blob/master/cfut/__init__.py)).
498
498
  """
499
499
 
500
- FRACTAL_SLURM_SBATCH_SLEEP: int = 0
500
+ FRACTAL_SLURM_SBATCH_SLEEP: float = 0
501
501
  """
502
502
  Interval to wait (in seconds) between two subsequent `sbatch` calls, when
503
503
  running a task that produces multiple SLURM jobs.
@@ -286,7 +286,6 @@ class FractalSSH(object):
286
286
  folder: Absolute path to a folder that should be removed.
287
287
  safe_root: If `folder` is not a subfolder of the absolute
288
288
  `safe_root` path, raise an error.
289
- fractal_ssh:
290
289
  """
291
290
  invalid_characters = {" ", "\n", ";", "$", "`"}
292
291
 
@@ -9,12 +9,12 @@ def sanitize_string(value: str) -> str:
9
9
 
10
10
  Make the string lower-case, and replace any special character with an
11
11
  underscore, where special characters are:
12
- ```python repl
13
- >>> string.punctuation
14
- '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
15
- >>> string.whitespace
16
- ' \t\n\r\x0b\x0c'
17
- ```
12
+
13
+
14
+ >>> string.punctuation
15
+ '!"#$%&\'()*+,-./:;<=>?@[\\\\]^_`{|}~'
16
+ >>> string.whitespace
17
+ ' \\t\\n\\r\\x0b\\x0c'
18
18
 
19
19
  Args:
20
20
  value: Input string
@@ -35,5 +35,11 @@ def slugify_task_name_for_source(task_name: str) -> str:
35
35
  from `fractal_server.string_tools.sanitize_string`, nor we can remove it.
36
36
  As 2.3.1, we are renaming it to `slugify_task_name_for_source`, to make
37
37
  it clear that it should not be used for other purposes.
38
+
39
+ Args:
40
+ task_name:
41
+
42
+ Return:
43
+ Slug-ified task name.
38
44
  """
39
45
  return task_name.replace(" ", "_").lower()
@@ -167,7 +167,7 @@ def background_collect_pip_ssh(
167
167
  / ".fractal"
168
168
  / f"{task_pkg.package_name}{package_version}"
169
169
  ).as_posix()
170
-
170
+ logger.debug(f"{package_env_dir=}")
171
171
  replacements = [
172
172
  ("__PACKAGE_NAME__", task_pkg.package_name),
173
173
  ("__PACKAGE_ENV_DIR__", package_env_dir),
@@ -197,10 +197,18 @@ def background_collect_pip_ssh(
197
197
  # long operations that do not use the db
198
198
  db.close()
199
199
 
200
+ # `remove_venv_folder_upon_failure` is set to True only if
201
+ # script 1 goes through, which means that the remote folder
202
+ # `package_env_dir` did not already exist. If this remote
203
+ # folder already existed, then script 1 fails and the boolean
204
+ # flag `remove_venv_folder_upon_failure` remains false.
205
+ remove_venv_folder_upon_failure = False
200
206
  stdout = _customize_and_run_template(
201
207
  script_filename="_1_create_venv.sh",
202
208
  **common_args,
203
209
  )
210
+ remove_venv_folder_upon_failure = True
211
+
204
212
  stdout = _customize_and_run_template(
205
213
  script_filename="_2_upgrade_pip.sh",
206
214
  **common_args,
@@ -294,6 +302,7 @@ def background_collect_pip_ssh(
294
302
 
295
303
  # Finalize (write metadata to DB)
296
304
  logger.debug("finalising - START")
305
+
297
306
  collection_state = db.get(CollectionStateV2, state_id)
298
307
  collection_state.data["log"] = log_file_path.open("r").read()
299
308
  collection_state.data["freeze"] = stdout_pip_freeze
@@ -312,16 +321,26 @@ def background_collect_pip_ssh(
312
321
  exception=e,
313
322
  db=db,
314
323
  )
315
- try:
316
- logger.info(f"Now delete remote folder {package_env_dir}")
317
- fractal_ssh.remove_folder(
318
- folder=package_env_dir,
319
- safe_root=settings.FRACTAL_SLURM_SSH_WORKING_BASE_DIR,
320
- )
321
- logger.info(f"Deleted remoted folder {package_env_dir}")
322
- except Exception as e:
323
- logger.error(
324
- f"Deleting remote folder failed.\n"
325
- f"Original error:\n{str(e)}"
326
- )
324
+ if remove_venv_folder_upon_failure:
325
+ try:
326
+ logger.info(
327
+ f"Now delete remote folder {package_env_dir}"
328
+ )
329
+ fractal_ssh.remove_folder(
330
+ folder=package_env_dir,
331
+ safe_root=settings.FRACTAL_SLURM_SSH_WORKING_BASE_DIR, # noqa: E501
332
+ )
333
+ logger.info(
334
+ f"Deleted remoted folder {package_env_dir}"
335
+ )
336
+ except Exception as e:
337
+ logger.error(
338
+ f"Removing remote folder failed.\n"
339
+ f"Original error:\n{str(e)}"
340
+ )
341
+ else:
342
+ logger.info(
343
+ "Not trying to remove remote folder "
344
+ f"{package_env_dir}."
345
+ )
327
346
  return
@@ -12,12 +12,12 @@ PYTHON=__PYTHON__
12
12
 
13
13
  TIME_START=$(date +%s)
14
14
 
15
-
16
- # Create main folder
15
+ # Check that package folder does not exist
17
16
  if [ -d "$PACKAGE_ENV_DIR" ]; then
18
17
  write_log "ERROR: Folder $PACKAGE_ENV_DIR already exists. Exit."
19
18
  exit 1
20
19
  fi
20
+
21
21
  write_log "START mkdir -p $PACKAGE_ENV_DIR"
22
22
  mkdir -p $PACKAGE_ENV_DIR
23
23
  write_log "END mkdir -p $PACKAGE_ENV_DIR"
@@ -7,10 +7,6 @@ write_log(){
7
7
 
8
8
  # Variables to be filled within fractal-server
9
9
  PACKAGE_ENV_DIR=__PACKAGE_ENV_DIR__
10
- PACKAGE_NAME=__PACKAGE_NAME__
11
- PACKAGE=__PACKAGE__
12
- PYTHON=__PYTHON__
13
- INSTALL_STRING=__INSTALL_STRING__
14
10
 
15
11
  TIME_START=$(date +%s)
16
12
 
@@ -8,12 +8,8 @@ write_log(){
8
8
 
9
9
  # Variables to be filled within fractal-server
10
10
  PACKAGE_ENV_DIR=__PACKAGE_ENV_DIR__
11
- PACKAGE_NAME=__PACKAGE_NAME__
12
- PACKAGE=__PACKAGE__
13
- PYTHON=__PYTHON__
14
11
  INSTALL_STRING=__INSTALL_STRING__
15
12
 
16
-
17
13
  TIME_START=$(date +%s)
18
14
 
19
15
  VENVPYTHON=${PACKAGE_ENV_DIR}/bin/python
@@ -9,12 +9,6 @@ write_log(){
9
9
 
10
10
  # Variables to be filled within fractal-server
11
11
  PACKAGE_ENV_DIR=__PACKAGE_ENV_DIR__
12
- PACKAGE_NAME=__PACKAGE_NAME__
13
- PACKAGE=__PACKAGE__
14
- PYTHON=__PYTHON__
15
- INSTALL_STRING=__INSTALL_STRING__
16
-
17
-
18
12
 
19
13
  VENVPYTHON=${PACKAGE_ENV_DIR}/bin/python
20
14
 
@@ -9,9 +9,7 @@ write_log(){
9
9
  # Variables to be filled within fractal-server
10
10
  PACKAGE_ENV_DIR=__PACKAGE_ENV_DIR__
11
11
  PACKAGE_NAME=__PACKAGE_NAME__
12
- PACKAGE=__PACKAGE__
13
- PYTHON=__PYTHON__
14
- INSTALL_STRING=__INSTALL_STRING__
12
+
15
13
 
16
14
 
17
15
  TIME_START=$(date +%s)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fractal-server
3
- Version: 2.3.1a0
3
+ Version: 2.3.3
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=LGLgo7tegJSxLMnlD2Dghxf2Hn7v3vwkcXy6gjO85iQ,24
1
+ fractal_server/__init__.py,sha256=cbDFprg05SSdPI6GVzVSaFJyKMlLMr-cn7_vn5ISPN4,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
@@ -23,13 +23,13 @@ fractal_server/app/models/v2/workflow.py,sha256=YBgFGCziUgU0aJ5EM3Svu9W2c46AewZO
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
25
25
  fractal_server/app/routes/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- fractal_server/app/routes/admin/v1.py,sha256=JfcA3oz08CCjxukjxuPeatUVb8VhvlTsTDU3N78aBz8,13967
27
- fractal_server/app/routes/admin/v2.py,sha256=lwTtg3lonIDQn3IcYF84x9fIKsoTVJ0FFmBx4wy2xf8,13728
26
+ fractal_server/app/routes/admin/v1.py,sha256=ShmsUFtfyRqP84QScqmRDVrJFpbR4p-8baLxAkI3n1U,13926
27
+ fractal_server/app/routes/admin/v2.py,sha256=JuG1qqVeQIgVJgPyqrB1053il22mGPGpKBiJi6zVsqQ,13687
28
28
  fractal_server/app/routes/api/__init__.py,sha256=EVyZrEq3I_1643QGTPCC5lgCp4xH_auYbrFfogTm4pc,315
29
29
  fractal_server/app/routes/api/v1/__init__.py,sha256=Y2HQdG197J0a7DyQEE2jn53IfxD0EHGhzK1I2JZuEck,958
30
30
  fractal_server/app/routes/api/v1/_aux_functions.py,sha256=CeaVrNVYs_lEbiJbu4uaTeeiajljeXfdq1iLkt5RoRo,12636
31
31
  fractal_server/app/routes/api/v1/dataset.py,sha256=HRE-8vPmVkeXf7WFYkI19mDtbY-iJZeJ7PmMiV0LMgY,16923
32
- fractal_server/app/routes/api/v1/job.py,sha256=ctMil9HQLWLlEHFJQ3Z3xV-LWuJHgI6jbf0i3_sd6os,5354
32
+ fractal_server/app/routes/api/v1/job.py,sha256=217fGh7U37esib1JG8INpLhE0W88t9X0fFwCNVt2r_M,5313
33
33
  fractal_server/app/routes/api/v1/project.py,sha256=MxbJUc9H14ZZ8mmMbX3LXGTVR3sHdD26YSw4TKI7WtU,16108
34
34
  fractal_server/app/routes/api/v1/task.py,sha256=udbKnenzc-Q10elYCVB9JmOPWATraa9tZi0AaByvWo0,6129
35
35
  fractal_server/app/routes/api/v1/task_collection.py,sha256=82XBsJHlPiDPCbpLa-16ojKDpj2LYj9_jFSZt0t58bQ,8911
@@ -39,7 +39,7 @@ fractal_server/app/routes/api/v2/__init__.py,sha256=JrPWfKIJy9btRCP-zw2nZwLpSdBx
39
39
  fractal_server/app/routes/api/v2/_aux_functions.py,sha256=tYJr5EPaA0CVGp-Y4jottFJUVToWvjcSY6PJqN_d--s,14938
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
- fractal_server/app/routes/api/v2/job.py,sha256=dQN4OVFWpLr0W609zJEHBJE1sQlgKjtHfv8hwpa88g0,5243
42
+ fractal_server/app/routes/api/v2/job.py,sha256=RkIj7ANK-nkxUvcG9K2r4dFdPnvGomx7jdB6U9bqOVQ,5202
43
43
  fractal_server/app/routes/api/v2/project.py,sha256=U4TxD-J4TtQuu1D4BOhL1kTse5fCiNc3BwGH7bnlo38,6592
44
44
  fractal_server/app/routes/api/v2/status.py,sha256=osLexiMOSqmYcEV-41tlrwt9ofyFbtRm5HmPS5BU0t4,6394
45
45
  fractal_server/app/routes/api/v2/submit.py,sha256=Oqggq3GeBrUsE535tmw-JsRZEWa7jziU34fKdlj4QUE,8734
@@ -51,7 +51,7 @@ fractal_server/app/routes/api/v2/workflow.py,sha256=2GlcYNjpvCdjwC_Kn7y0UP16B3pO
51
51
  fractal_server/app/routes/api/v2/workflowtask.py,sha256=l4eTD5IIun5cOdYzsxh3ajmnOISaSccYA_mVf15Cjtw,8802
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
- fractal_server/app/routes/aux/_job.py,sha256=EShKa9AMHy7zqlwPHGsKO6uE0LtXkqutO9wCCHbZzcU,1321
54
+ fractal_server/app/routes/aux/_job.py,sha256=HUItNm0SZFAYsyL1rXSjBre1-rXSe6x51qH9KAQWS1w,1361
55
55
  fractal_server/app/routes/aux/_runner.py,sha256=FdCVla5DxGAZ__aB7Z8dEJzD_RIeh5tftjrPyqkr8N8,895
56
56
  fractal_server/app/runner/.gitignore,sha256=ytzN_oyHWXrGU7iFAtoHSTUbM6Rn6kG0Zkddg0xZk6s,16
57
57
  fractal_server/app/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -138,7 +138,7 @@ fractal_server/app/schemas/v2/task_collection.py,sha256=8PG1bOqkfQqORMN0brWf6mHD
138
138
  fractal_server/app/schemas/v2/workflow.py,sha256=Zzx3e-qgkH8le0FUmAx9UrV5PWd7bj14PPXUh_zgZXM,1827
139
139
  fractal_server/app/schemas/v2/workflowtask.py,sha256=atVuVN4aXsVEOmSd-vyg-8_8OnPmqx-gT75rXcn_AlQ,6552
140
140
  fractal_server/app/security/__init__.py,sha256=2-QbwuR-nsuHM_uwKS_WzYvkhnuhO5jUv8UVROetyVk,11169
141
- fractal_server/config.py,sha256=SCKJrGQeKkWxyz-kT7sCjcxwKwidR1bT0hi0KEj0sV0,24282
141
+ fractal_server/config.py,sha256=LoN530DB9Xxey-riV2BNgUcKEDquMrH9ijuRrwl7TMk,24284
142
142
  fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
143
143
  fractal_server/gunicorn_fractal.py,sha256=2AOkgxu-oQ-XB578_voT0VuhmAXFTmb0c-nYn1XLy_Q,1231
144
144
  fractal_server/images/__init__.py,sha256=xO6jTLE4EZKO6cTDdJsBmK9cdeh9hFTaSbSuWgQg7y4,196
@@ -167,8 +167,8 @@ fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py
167
167
  fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py,sha256=9BwqUS9Gf7UW_KjrzHbtViC880qhD452KAytkHWWZyk,746
168
168
  fractal_server/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
169
169
  fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
170
- fractal_server/ssh/_fabric.py,sha256=GsiB3wrNfIkDmXr5A3qjkXhUAaRCyAT4VJRHIAbI1gM,10764
171
- fractal_server/string_tools.py,sha256=AwwDb-wtgGQeGdZjZQKgtYCmWbFHGNk_DzaCnYerRAY,1197
170
+ fractal_server/ssh/_fabric.py,sha256=4B6D0F2bWWho1V_xdDDBWYAHno9h_6Smp7_FP2n8jYo,10739
171
+ fractal_server/string_tools.py,sha256=KThgTLn_FHNSuEUGLabryJAP6DaFd7bpi-hF5FgkBjw,1268
172
172
  fractal_server/syringe.py,sha256=3qSMW3YaMKKnLdgnooAINOPxnCOxP7y2jeAQYB21Gdo,2786
173
173
  fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39NHE8,23
174
174
  fractal_server/tasks/utils.py,sha256=wucz57I7G0Vd8hvtmvonlryACx9zIVlqfxG5I87MJ80,1820
@@ -182,18 +182,18 @@ fractal_server/tasks/v2/_TaskCollectPip.py,sha256=kWQNMNZ8OEddkYhmhsk3E6ArcaD7qe
182
182
  fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
183
183
  fractal_server/tasks/v2/_venv_pip.py,sha256=xm4XClWYbhXQRqDxYxM9cP7ZCnx-8b078fuVUL12D2M,6286
184
184
  fractal_server/tasks/v2/background_operations.py,sha256=CQwQon5RKAXrjsN255Okh5dcT0R45axgqoPW3EB-v_Q,11527
185
- fractal_server/tasks/v2/background_operations_ssh.py,sha256=Zjoo3UZQD97INksFkhkTMHYHDltDADs8MbWyAWJtjO8,12926
185
+ fractal_server/tasks/v2/background_operations_ssh.py,sha256=3TJp2NW2CJ9KlghWDEhTQ4HDZxmbrLHjb0OQJI3ALo0,13892
186
186
  fractal_server/tasks/v2/endpoint_operations.py,sha256=gT38pl5TEH6WNWOtg4Itegt2lTJJI6YRa7fEj9Y4x2s,4226
187
- fractal_server/tasks/v2/templates/_1_create_venv.sh,sha256=_Lr1UCWQycqea07YZFICxiwQVz9YZHYS-AaVFjNLUyQ,993
188
- fractal_server/tasks/v2/templates/_2_upgrade_pip.sh,sha256=45CPrRxxNBq1ujDA8m1_LWt6QaN1G29mda_LbW2EjN8,626
189
- fractal_server/tasks/v2/templates/_3_pip_install.sh,sha256=ViAf3KKtk8YnEkrhybPV8ZZdmZJ0g2l4zkoVnmXbAKw,664
190
- fractal_server/tasks/v2/templates/_4_pip_freeze.sh,sha256=SHndmLn5daT_lg6rnhNPMrRiPAIbGUlMUBIDDLniVOg,372
191
- fractal_server/tasks/v2/templates/_5_pip_show.sh,sha256=3onbKZ0PJkkYronP4_tdMBoAe3GqxVQFH-L4dUqSkQY,1825
187
+ fractal_server/tasks/v2/templates/_1_create_venv.sh,sha256=5uW0ETYxl5xiQEXP107zgq8V_-vf3k5NzMMj1hSLjas,1015
188
+ fractal_server/tasks/v2/templates/_2_upgrade_pip.sh,sha256=hVqwgWuNOxr6ck-0FklpcF0o7q-vQXQasYNNaPSxlKM,524
189
+ fractal_server/tasks/v2/templates/_3_pip_install.sh,sha256=T9sabeB9iQzVZpLfuLkKGz9EpfHkUrJHKWO4HNij6yM,595
190
+ fractal_server/tasks/v2/templates/_4_pip_freeze.sh,sha256=6BIOVYBPZmaaOuaDwNirt1iHWjj2oDjViUDvQaL_f6Y,268
191
+ fractal_server/tasks/v2/templates/_5_pip_show.sh,sha256=GrJ19uHYQxANEy9JaeNJZVTquY9c8Ww9eCdnC7eLVr0,1754
192
192
  fractal_server/tasks/v2/utils.py,sha256=JOyCacb6MNvrwfLNTyLwcz8y79J29YuJeJ2MK5kqXRM,1657
193
193
  fractal_server/urls.py,sha256=5o_qq7PzKKbwq12NHSQZDmDitn5RAOeQ4xufu-2v9Zk,448
194
194
  fractal_server/utils.py,sha256=b7WwFdcFZ8unyT65mloFToYuEDXpQoHRcmRNqrhd_dQ,2115
195
- fractal_server-2.3.1a0.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
196
- fractal_server-2.3.1a0.dist-info/METADATA,sha256=VFMB244L_c5nJwB1YbqGAN2ybMcNN2WtrropteULb48,4427
197
- fractal_server-2.3.1a0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
198
- fractal_server-2.3.1a0.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
199
- fractal_server-2.3.1a0.dist-info/RECORD,,
195
+ fractal_server-2.3.3.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
196
+ fractal_server-2.3.3.dist-info/METADATA,sha256=He-pPtJu3dHSdXV-YYSsjeHbCHIYgMGPohJ67v-qIBQ,4425
197
+ fractal_server-2.3.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
198
+ fractal_server-2.3.3.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
199
+ fractal_server-2.3.3.dist-info/RECORD,,