fractal-server 2.7.0a1__py3-none-any.whl → 2.7.0a3__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.
@@ -0,0 +1,101 @@
1
+ """Revamp TaskV2 and TaskGroupV2
2
+
3
+ Revision ID: 742b74e1cc6e
4
+ Revises: df7cc3501bf7
5
+ Create Date: 2024-10-07 16:56:37.399878
6
+
7
+ """
8
+ import sqlalchemy as sa
9
+ import sqlmodel
10
+ from alembic import op
11
+
12
+
13
+ # revision identifiers, used by Alembic.
14
+ revision = "742b74e1cc6e"
15
+ down_revision = "df7cc3501bf7"
16
+ branch_labels = None
17
+ depends_on = None
18
+
19
+
20
+ def upgrade() -> None:
21
+ # ### commands auto generated by Alembic - please adjust! ###
22
+ with op.batch_alter_table("taskgroupv2", schema=None) as batch_op:
23
+ batch_op.add_column(
24
+ sa.Column(
25
+ "origin", sqlmodel.sql.sqltypes.AutoString(), nullable=False
26
+ )
27
+ )
28
+ batch_op.add_column(
29
+ sa.Column(
30
+ "pkg_name", sqlmodel.sql.sqltypes.AutoString(), nullable=False
31
+ )
32
+ )
33
+ batch_op.add_column(
34
+ sa.Column(
35
+ "version", sqlmodel.sql.sqltypes.AutoString(), nullable=True
36
+ )
37
+ )
38
+ batch_op.add_column(
39
+ sa.Column(
40
+ "python_version",
41
+ sqlmodel.sql.sqltypes.AutoString(),
42
+ nullable=True,
43
+ )
44
+ )
45
+ batch_op.add_column(
46
+ sa.Column(
47
+ "path", sqlmodel.sql.sqltypes.AutoString(), nullable=True
48
+ )
49
+ )
50
+ batch_op.add_column(
51
+ sa.Column(
52
+ "venv_path", sqlmodel.sql.sqltypes.AutoString(), nullable=True
53
+ )
54
+ )
55
+ batch_op.add_column(
56
+ sa.Column(
57
+ "pip_extras", sqlmodel.sql.sqltypes.AutoString(), nullable=True
58
+ )
59
+ )
60
+
61
+ with op.batch_alter_table("taskv2", schema=None) as batch_op:
62
+ batch_op.add_column(
63
+ sa.Column(
64
+ "category", sqlmodel.sql.sqltypes.AutoString(), nullable=True
65
+ )
66
+ )
67
+ batch_op.add_column(
68
+ sa.Column(
69
+ "modality", sqlmodel.sql.sqltypes.AutoString(), nullable=True
70
+ )
71
+ )
72
+ batch_op.add_column(
73
+ sa.Column(
74
+ "authors", sqlmodel.sql.sqltypes.AutoString(), nullable=True
75
+ )
76
+ )
77
+ batch_op.add_column(
78
+ sa.Column("tags", sa.JSON(), server_default="[]", nullable=False)
79
+ )
80
+
81
+ # ### end Alembic commands ###
82
+
83
+
84
+ def downgrade() -> None:
85
+ # ### commands auto generated by Alembic - please adjust! ###
86
+ with op.batch_alter_table("taskv2", schema=None) as batch_op:
87
+ batch_op.drop_column("tags")
88
+ batch_op.drop_column("authors")
89
+ batch_op.drop_column("modality")
90
+ batch_op.drop_column("category")
91
+
92
+ with op.batch_alter_table("taskgroupv2", schema=None) as batch_op:
93
+ batch_op.drop_column("pip_extras")
94
+ batch_op.drop_column("venv_path")
95
+ batch_op.drop_column("path")
96
+ batch_op.drop_column("python_version")
97
+ batch_op.drop_column("version")
98
+ batch_op.drop_column("pkg_name")
99
+ batch_op.drop_column("origin")
100
+
101
+ # ### end Alembic commands ###
@@ -172,6 +172,7 @@ def _prepare_tasks_metadata(
172
172
  }
173
173
  ),
174
174
  **task_attributes,
175
+ authors=package_manifest.authors,
175
176
  )
176
177
  task_list.append(task_obj)
177
178
  return task_list
@@ -274,9 +275,19 @@ async def background_collect_pip(
274
275
  )
275
276
  _check_task_files_exist(task_list=task_list)
276
277
 
278
+ # Prepare some task-group attributes
279
+ task_group_attrs = dict(
280
+ pkg_name=task_pkg.package_name,
281
+ version=task_pkg.package_version,
282
+ )
283
+ if task_pkg.is_local_package:
284
+ task_group_attrs["origin"] = "wheel-file"
285
+ else:
286
+ task_group_attrs["origin"] = "pypi"
287
+
277
288
  task_group = create_db_task_group_and_tasks(
278
289
  task_list=task_list,
279
- task_group_obj=TaskGroupCreateV2(),
290
+ task_group_obj=TaskGroupCreateV2(**task_group_attrs),
280
291
  user_id=user_id,
281
292
  user_group_id=user_group_id,
282
293
  db=db,
@@ -316,9 +316,19 @@ def background_collect_pip_ssh(
316
316
  python_bin=Path(python_bin),
317
317
  )
318
318
 
319
+ # Prepare some task-group attributes
320
+ task_group_attrs = dict(
321
+ pkg_name=task_pkg.package_name,
322
+ version=task_pkg.package_version,
323
+ )
324
+ if task_pkg.is_local_package:
325
+ task_group_attrs["origin"] = "wheel-file"
326
+ else:
327
+ task_group_attrs["origin"] = "pypi"
328
+
319
329
  create_db_task_group_and_tasks(
320
330
  task_list=task_list,
321
- task_group_obj=TaskGroupCreateV2(),
331
+ task_group_obj=TaskGroupCreateV2(**task_group_attrs),
322
332
  user_id=user_id,
323
333
  user_group_id=user_group_id,
324
334
  db=db,
@@ -5,17 +5,24 @@ from typing import Optional
5
5
  from typing import Union
6
6
  from zipfile import ZipFile
7
7
 
8
+ from fastapi import HTTPException
9
+ from fastapi import status
10
+ from httpx import AsyncClient
11
+ from httpx import TimeoutException
12
+
8
13
  from ._TaskCollectPip import _TaskCollectPip
9
14
  from .utils import _parse_wheel_filename
10
15
  from .utils import get_python_interpreter_v2
11
16
  from fractal_server.app.schemas.v2 import ManifestV2
12
17
  from fractal_server.config import get_settings
13
18
  from fractal_server.logger import get_logger
19
+ from fractal_server.logger import set_logger
14
20
  from fractal_server.syringe import Inject
15
21
  from fractal_server.utils import execute_command
16
22
 
17
23
 
18
24
  FRACTAL_PUBLIC_TASK_SUBDIR = ".fractal"
25
+ logger = set_logger(__name__)
19
26
 
20
27
 
21
28
  async def download_package(
@@ -134,3 +141,38 @@ def create_package_dir_pip(
134
141
  if create:
135
142
  venv_path.mkdir(exist_ok=False, parents=True)
136
143
  return venv_path
144
+
145
+
146
+ async def get_package_version_from_pypi(name: str) -> str:
147
+ """
148
+ Make a GET call to PyPI JSON API and get latest package version.
149
+
150
+ Ref https://warehouse.pypa.io/api-reference/json.html.
151
+
152
+ Arguments:
153
+ name: Package name.
154
+ """
155
+
156
+ url = f"https://pypi.org/pypi/{name}/json"
157
+ hint = f"Hint: specify the required version for '{name}'."
158
+ try:
159
+ async with AsyncClient(timeout=5.0) as client:
160
+ res = await client.get(url)
161
+ if res.status_code != 200:
162
+ raise HTTPException(
163
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
164
+ detail=(
165
+ f"Could not get {url} (status_code {res.status_code})."
166
+ f"\n{hint}"
167
+ ),
168
+ )
169
+ version = res.json()["info"]["version"]
170
+ return version
171
+ except (KeyError, TimeoutException) as e:
172
+ logger.warning(
173
+ f"An error occurred while getting {url}. Original error: {str(e)}."
174
+ )
175
+ raise HTTPException(
176
+ status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
177
+ detail=(f"An error occurred while getting {url}.\n{hint}"),
178
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fractal-server
3
- Version: 2.7.0a1
3
+ Version: 2.7.0a3
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,5 +1,5 @@
1
- fractal_server/__init__.py,sha256=a93MyH1kQ9BKFlxzrvnhMDhXFBw7mHkaQCSrrhceInk,24
2
- fractal_server/__main__.py,sha256=WcBAkmVE9aH5mDI6wGkVmPAql2N5Vyk0A-7zuUl8WX0,6122
1
+ fractal_server/__init__.py,sha256=8F5In7R-H4qg5Yf7sXXB43RixMlW4SOmaCR83lziaso,24
2
+ fractal_server/__main__.py,sha256=KqGiemsvIhrBeUlFDzIQsMEjOJW2BsH4qo_a_ldRQok,6362
3
3
  fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
4
4
  fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  fractal_server/app/db/__init__.py,sha256=81rK9w1__Z6PJ5cEcChPVc-wI9YOK4fN--_5Opry0MQ,4119
@@ -20,13 +20,17 @@ fractal_server/app/models/v2/collection_state.py,sha256=nxb042i8tt8rCpmgbFJoBCYW
20
20
  fractal_server/app/models/v2/dataset.py,sha256=-7sxHEw4IIAvF_uSan7tA3o8hvoakBkQ0SRvqS2iOQU,1455
21
21
  fractal_server/app/models/v2/job.py,sha256=ypJmN-qspkKBGhBG7Mt-HypSQqcQ2EmB4Bzzb2-y550,1535
22
22
  fractal_server/app/models/v2/project.py,sha256=rAHoh5KfYwIaW7rTX0_O0jvWmxEvfo1BafvmcXuSSRk,786
23
- fractal_server/app/models/v2/task.py,sha256=JuRo18JBiHxuujux0Uw-AWzj8L0ln2ZMJA7zQn4KQU8,2074
23
+ fractal_server/app/models/v2/task.py,sha256=SbTVkIUj7igL6-zhu8GigJK9oq4ddN4mXGvtlbjNbC0,2495
24
24
  fractal_server/app/models/v2/workflow.py,sha256=YBgFGCziUgU0aJ5EM3Svu9W2c46AewZO9VBlFCHiSps,1069
25
25
  fractal_server/app/models/v2/workflowtask.py,sha256=iDuJYk8kp4PNqGmbKRtGI7y-QsbjkNd_gDsbMzL4i-g,1274
26
26
  fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
27
  fractal_server/app/routes/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  fractal_server/app/routes/admin/v1.py,sha256=GIpZlwAwwwLGDWkBqywhtmp9TGsKLhGmZAdj1TDKJvE,13976
29
- fractal_server/app/routes/admin/v2.py,sha256=hoEbH_sRJ-MaKMwhFp8c7SNObP0-Kmtgw1zbs_Z3nLY,12971
29
+ fractal_server/app/routes/admin/v2/__init__.py,sha256=zkdrk3mSQWfgTJugS8Sc_Q_xCAwfmHUfdRe0DTaYT80,521
30
+ fractal_server/app/routes/admin/v2/job.py,sha256=JmNmF5MeHtcDQzGadCJWwFNDQvB5G8SwVABaL11S1Vc,8268
31
+ fractal_server/app/routes/admin/v2/project.py,sha256=luy-yiGX1JYTdPm1hpIdDUUqPm8xHuipLy9k2X6zu74,1223
32
+ fractal_server/app/routes/admin/v2/task.py,sha256=T0DNtc8d4jZYS0gGKBcz6pwoeh30WSgkMuIUEw_yBjo,4406
33
+ fractal_server/app/routes/admin/v2/task_group.py,sha256=aJhizy-EhM0Iupxq19w0lam7Prs_xTnGxyLFaL8I_AE,4545
30
34
  fractal_server/app/routes/api/__init__.py,sha256=2IDheFi0OFdsUg7nbUiyahqybvpgXqeHUXIL2QtWrQQ,641
31
35
  fractal_server/app/routes/api/v1/__init__.py,sha256=Y2HQdG197J0a7DyQEE2jn53IfxD0EHGhzK1I2JZuEck,958
32
36
  fractal_server/app/routes/api/v1/_aux_functions.py,sha256=P9Q48thGH95w0h5cacYoibxqgiiLW4oqZ8rNJ2LIISY,13219
@@ -46,11 +50,11 @@ fractal_server/app/routes/api/v2/job.py,sha256=Bga2Kz1OjvDIdxZObWaaXVhNIhC_5JKhK
46
50
  fractal_server/app/routes/api/v2/project.py,sha256=eWYFJ7F2ZYQcpi-_n-rhPF-Q4gJhzYBsVGYFhHZZXAE,6653
47
51
  fractal_server/app/routes/api/v2/status.py,sha256=6N9DSZ4iFqbZImorWfEAPoyoFUgEruo4Hweqo0x0xXU,6435
48
52
  fractal_server/app/routes/api/v2/submit.py,sha256=h7mjmea_VNCriGiA4HRuyxLHlvd9aGfTAFXK3bSsvzc,9422
49
- fractal_server/app/routes/api/v2/task.py,sha256=CZQjI5IKxeN23YTu3eTjPuPcO6BSmcAXQR3Pcy0WSuQ,7828
53
+ fractal_server/app/routes/api/v2/task.py,sha256=FRYHJTvr_tl62HvwKgHSayLrT0gCNeGwU9k9bsiSqws,8302
50
54
  fractal_server/app/routes/api/v2/task_collection.py,sha256=9trKrJDuaKKgdn-mG06VuFpyObhbcCD8AstaxN4lAOM,13507
51
- fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=T3RoxQWmJVipEdXSjbD_Zdw_mc3IIYT3aDLZIQ_StIM,7272
55
+ fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=CIJ4ZYPRtKvC6JVkagQPVFm6A53mOeDIPD8-y1lPJLc,7433
52
56
  fractal_server/app/routes/api/v2/task_group.py,sha256=yRUCMZtXH9KdfD2pfdCKPBGf_eVn-S5CXFHCUyXAoJk,4078
53
- fractal_server/app/routes/api/v2/workflow.py,sha256=q4_sFCSw-_1oC4FENv_HIInDF_2uJG5QXqiH9Ns_ZK4,11330
57
+ fractal_server/app/routes/api/v2/workflow.py,sha256=aG5hs7oj-em2EpydgBPE4xPKrlKxD6NXuLhKkfdG79c,12116
54
58
  fractal_server/app/routes/api/v2/workflowtask.py,sha256=TIOePM13uK3GKVhtGK2wBB341ZFheBYQKTfXuPfdymE,6999
55
59
  fractal_server/app/routes/auth/__init__.py,sha256=fao6CS0WiAjHDTvBzgBVV_bSXFpEAeDBF6Z6q7rRkPc,1658
56
60
  fractal_server/app/routes/auth/_aux_auth.py,sha256=6GERRDXK4P-2OA81bjxJZEw6hN4QCk5x7MqDNtN7VG4,4746
@@ -144,17 +148,18 @@ fractal_server/app/schemas/v2/__init__.py,sha256=BHbRPSBLjGaCpmjd8OJSycKhBLfZY5b
144
148
  fractal_server/app/schemas/v2/dataset.py,sha256=dLT52tV4dSf2HrFNak4vdQEn8PT_04IUrGnd2z-AXIU,2599
145
149
  fractal_server/app/schemas/v2/dumps.py,sha256=ZrJCHTv9oU2QMNjPUSBO3DIPRO3qDvbxpAGpernpf-Q,1720
146
150
  fractal_server/app/schemas/v2/job.py,sha256=zfF9K3v4jWUJ7M482ta2CkqUJ4tVT4XfVt60p9IRhP0,3250
147
- fractal_server/app/schemas/v2/manifest.py,sha256=N37IWohcfO3_y2l8rVM0h_1nZq7m4Izxk9iL1vtwBJw,6243
151
+ fractal_server/app/schemas/v2/manifest.py,sha256=eHfDjth8cSDiuYeDMfBOte8sMHOI74DC0VlhebhUXvY,6545
148
152
  fractal_server/app/schemas/v2/project.py,sha256=u7S4B-bote1oGjzAGiZ-DuQIyeRAGqJsI71Tc1EtYE0,736
149
153
  fractal_server/app/schemas/v2/status.py,sha256=SQaUpQkjFq5c5k5J4rOjNhuQaDOEg8lksPhkKmPU5VU,332
150
- fractal_server/app/schemas/v2/task.py,sha256=TpMBinf3Mf2Kqlj1IgiHkf6Blob_bjXyIM-7xgK7XqY,4814
154
+ fractal_server/app/schemas/v2/task.py,sha256=8iuugQR_ol-bP9nFkANt2JjjBtEzzTifrBmTWpV4QF4,6557
151
155
  fractal_server/app/schemas/v2/task_collection.py,sha256=_utBv7_kcRJCbPdWezasU8GrikI_QFPKeIl4vyAgDd4,6155
152
- fractal_server/app/schemas/v2/task_group.py,sha256=8A4MgLgSIRBdb5Q10Ae7RmsRdZkVtGRxD6cIdn8Gjho,419
156
+ fractal_server/app/schemas/v2/task_group.py,sha256=LRW_sggWUqnXVkmicmwxMbxRRYbSJmzg0Np-Dm0uBDU,1217
153
157
  fractal_server/app/schemas/v2/workflow.py,sha256=7jqZhGn6plFSU8EkQsvvnDMh5N8m7GouRt1DIXmweIA,1986
154
158
  fractal_server/app/schemas/v2/workflowtask.py,sha256=t29n7TM2Z_bcFC8RKor694dcU_cGaasUSuX4Q9oQikY,5758
155
159
  fractal_server/app/security/__init__.py,sha256=V1NOWlmaFZHMR6SrkMl62jyAuqYONyo8lyGvR6UZesM,12312
156
160
  fractal_server/app/user_settings.py,sha256=aZgQ3i0JkHfgwLGW1ee6Gzr1ae3IioFfJKKSsSS8Svk,1312
157
161
  fractal_server/config.py,sha256=gX0aYwDwbC5y7JNorifON84YMveubb7XTb4sH14N3KM,23667
162
+ fractal_server/data_migrations/2_7_0.py,sha256=ReB664szR2w9_mblfEilYYkVzs8Wi61O1_9G1gDtoQQ,9405
158
163
  fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
159
164
  fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
160
165
  fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
@@ -175,6 +180,7 @@ fractal_server/migrations/versions/50a13d6138fd_initial_schema.py,sha256=zwXegXs
175
180
  fractal_server/migrations/versions/5bf02391cfef_v2.py,sha256=axhNkr_H6R4rRbY7oGYazNbFvPXeSyBDWFVbKNmiqs8,8433
176
181
  fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py,sha256=Q-DsMzG3IcUV2Ol1dhJWosDvKERamBE6QvA2zzS5zpQ,1632
177
182
  fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py,sha256=mbWuCkTpRAdGbRhW7lhXs_e5S6O37UAcCN6JfoY5H8A,1353
183
+ fractal_server/migrations/versions/742b74e1cc6e_revamp_taskv2_and_taskgroupv2.py,sha256=CHihUE7dfHfVwweH_ijdGw_l7XGM0UfXDqXwAG9FKBg,3002
178
184
  fractal_server/migrations/versions/7cf1baae8fb4_task_group_v2.py,sha256=793xuEk8Pr28q1Hfe9_qNWWtU6ysXYdOFVRUPO_MB1o,1996
179
185
  fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py,sha256=NSCuhANChsg76vBkShBl-9tQ4VEHubOjtAv1etHhlvY,2684
180
186
  fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py,sha256=6pgODDtyAxevZvAJBj9IJ41inhV1RpwbpZr_qfPPu1A,1115
@@ -206,10 +212,10 @@ fractal_server/tasks/v1/utils.py,sha256=J9oKys-82OehBxOon5wWl3CxjVBgYWeVEEyWGVFn
206
212
  fractal_server/tasks/v2/_TaskCollectPip.py,sha256=kWQNMNZ8OEddkYhmhsk3E6ArcaD7qe4vsjYYx9vbrUg,4900
207
213
  fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
214
  fractal_server/tasks/v2/_venv_pip.py,sha256=6NCItfeWgO9BDnlfhoCfiUG5UCGGz_SJz4Mfn4Jg_nk,6489
209
- fractal_server/tasks/v2/background_operations.py,sha256=Z-AlIIYGbwoZMQgpAM_4PDgh3w5xk-cwrJXwcOiJk_M,11171
210
- fractal_server/tasks/v2/background_operations_ssh.py,sha256=Tw-vuGbxjvXF90QSbkvoRzxSGYLdjGUDO6n0tKHML1s,14494
215
+ fractal_server/tasks/v2/background_operations.py,sha256=CcaIzhQTqtw4wnlN3A-vLLSm6qOJvzrfG-12Jg0iC1I,11604
216
+ fractal_server/tasks/v2/background_operations_ssh.py,sha256=9mj4t3cNJ8a268ykoj7lukXSojXi2dme7od1Uf_lVq4,14917
211
217
  fractal_server/tasks/v2/database_operations.py,sha256=_55kLUMWuOYQANuN0QDtDt-GWby4hDKPJp5NOB4ZoxA,1396
212
- fractal_server/tasks/v2/endpoint_operations.py,sha256=gT38pl5TEH6WNWOtg4Itegt2lTJJI6YRa7fEj9Y4x2s,4226
218
+ fractal_server/tasks/v2/endpoint_operations.py,sha256=v1p3lFa3nuQ0ydv2T-cUQF42mZodz62C4tuiOKsA858,5637
213
219
  fractal_server/tasks/v2/templates/_1_create_venv.sh,sha256=5uW0ETYxl5xiQEXP107zgq8V_-vf3k5NzMMj1hSLjas,1015
214
220
  fractal_server/tasks/v2/templates/_2_upgrade_pip.sh,sha256=ca5Yng6JgJYu-a4QrsIsatwUmrLdRWBKw7_VJrY7WLY,555
215
221
  fractal_server/tasks/v2/templates/_3_pip_install.sh,sha256=T9sabeB9iQzVZpLfuLkKGz9EpfHkUrJHKWO4HNij6yM,595
@@ -219,8 +225,8 @@ fractal_server/tasks/v2/utils.py,sha256=JOyCacb6MNvrwfLNTyLwcz8y79J29YuJeJ2MK5kq
219
225
  fractal_server/urls.py,sha256=5o_qq7PzKKbwq12NHSQZDmDitn5RAOeQ4xufu-2v9Zk,448
220
226
  fractal_server/utils.py,sha256=b7WwFdcFZ8unyT65mloFToYuEDXpQoHRcmRNqrhd_dQ,2115
221
227
  fractal_server/zip_tools.py,sha256=xYpzBshysD2nmxkD5WLYqMzPYUcCRM3kYy-7n9bJL-U,4426
222
- fractal_server-2.7.0a1.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
223
- fractal_server-2.7.0a1.dist-info/METADATA,sha256=sl_pu6zE_5uRj_frkAhgWsAJxDvNNz6LYpmsLq4BPWE,4630
224
- fractal_server-2.7.0a1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
225
- fractal_server-2.7.0a1.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
226
- fractal_server-2.7.0a1.dist-info/RECORD,,
228
+ fractal_server-2.7.0a3.dist-info/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
229
+ fractal_server-2.7.0a3.dist-info/METADATA,sha256=rovIICs2nBroN4xAIpjuVgTPhmY985uWMIuWQDPjl3g,4630
230
+ fractal_server-2.7.0a3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
231
+ fractal_server-2.7.0a3.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
232
+ fractal_server-2.7.0a3.dist-info/RECORD,,