fractal-server 2.18.4__py3-none-any.whl → 2.18.6__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.18.4"
1
+ __VERSION__ = "2.18.6"
@@ -54,7 +54,6 @@ class DB:
54
54
  cls._engine_async,
55
55
  class_=AsyncSession,
56
56
  expire_on_commit=False,
57
- future=True,
58
57
  )
59
58
 
60
59
  @classmethod
@@ -68,12 +67,7 @@ class DB:
68
67
  pool_pre_ping=True,
69
68
  )
70
69
 
71
- cls._sync_session_maker = sessionmaker(
72
- bind=cls._engine_sync,
73
- autocommit=False,
74
- autoflush=False,
75
- future=True,
76
- )
70
+ cls._sync_session_maker = sessionmaker(cls._engine_sync)
77
71
 
78
72
  @classmethod
79
73
  async def get_async_db(cls) -> AsyncGenerator[AsyncSession, None]:
@@ -176,7 +176,6 @@ async def view_single_job(
176
176
  status_code=status.HTTP_404_NOT_FOUND,
177
177
  detail=f"Job {job_id} not found",
178
178
  )
179
- await db.close()
180
179
 
181
180
  if show_tmp_logs and (job.status == JobStatusType.SUBMITTED):
182
181
  try:
@@ -249,7 +248,6 @@ async def update_job(
249
248
 
250
249
  await db.commit()
251
250
  await db.refresh(job)
252
- await db.close()
253
251
  return job
254
252
 
255
253
 
@@ -274,5 +274,4 @@ async def patch_dataset_image(
274
274
  flag_modified(db_dataset, "images")
275
275
 
276
276
  await db.commit()
277
- await db.close()
278
277
  return db_dataset.images[index]
@@ -59,7 +59,6 @@ async def get_user_jobs(
59
59
  )
60
60
  res = await db.execute(stm)
61
61
  job_list = res.scalars().all()
62
- await db.close()
63
62
  if not log:
64
63
  for job in job_list:
65
64
  setattr(job, "log", None)
@@ -152,7 +151,6 @@ async def read_job(
152
151
  db=db,
153
152
  )
154
153
  job = output["job"]
155
- await db.close()
156
154
 
157
155
  if show_tmp_logs and (job.status == JobStatusType.SUBMITTED):
158
156
  try:
@@ -222,7 +220,6 @@ async def get_job_list(
222
220
  .order_by(JobV2.start_timestamp.desc())
223
221
  )
224
222
  job_list = res.scalars().all()
225
- await db.close()
226
223
  if not log:
227
224
  for job in job_list:
228
225
  setattr(job, "log", None)
@@ -47,7 +47,6 @@ async def get_list_project(
47
47
  )
48
48
  res = await db.execute(stm)
49
49
  project_list = res.scalars().all()
50
- await db.close()
51
50
  return project_list
52
51
 
53
52
 
@@ -107,7 +106,6 @@ async def read_project(
107
106
  required_permissions=ProjectPermissions.READ,
108
107
  db=db,
109
108
  )
110
- await db.close()
111
109
  return project
112
110
 
113
111
 
@@ -136,7 +134,6 @@ async def update_project(
136
134
 
137
135
  await db.commit()
138
136
  await db.refresh(project)
139
- await db.close()
140
137
  return project
141
138
 
142
139
 
@@ -77,7 +77,6 @@ async def get_list_task(
77
77
  stm = stm.order_by(TaskV2.id)
78
78
  res = await db.execute(stm)
79
79
  task_list = list(res.scalars().all())
80
- await db.close()
81
80
  if args_schema is False:
82
81
  for task in task_list:
83
82
  setattr(task, "args_schema_parallel", None)
@@ -133,7 +132,6 @@ async def patch_task(
133
132
 
134
133
  await db.commit()
135
134
  await db.refresh(db_task)
136
- await db.close()
137
135
  return db_task
138
136
 
139
137
 
@@ -216,7 +214,6 @@ async def create_task(
216
214
  db.add(db_task_group)
217
215
  await db.commit()
218
216
  await db.refresh(db_task)
219
- await db.close()
220
217
 
221
218
  return db_task
222
219
 
@@ -163,6 +163,7 @@ async def get_task_group_list(
163
163
  if args_schema is False:
164
164
  for taskgroup in task_groups:
165
165
  for task in taskgroup.task_list:
166
+ db.expunge(task) # See issue 3101
166
167
  setattr(task, "args_schema_non_parallel", None)
167
168
  setattr(task, "args_schema_parallel", None)
168
169
 
@@ -89,7 +89,6 @@ async def create_workflow(
89
89
  db.add(db_workflow)
90
90
  await db.commit()
91
91
  await db.refresh(db_workflow)
92
- await db.close()
93
92
  return db_workflow
94
93
 
95
94
 
@@ -189,7 +188,6 @@ async def update_workflow(
189
188
 
190
189
  await db.commit()
191
190
  await db.refresh(workflow)
192
- await db.close()
193
191
 
194
192
  wftask_list_with_warnings = await _add_warnings_to_workflow_tasks(
195
193
  wftask_list=workflow.task_list, user_id=user.id, db=db
@@ -202,7 +202,6 @@ async def update_workflowtask(
202
202
 
203
203
  await db.commit()
204
204
  await db.refresh(db_wf_task)
205
- await db.close()
206
205
 
207
206
  return db_wf_task
208
207
 
@@ -1,3 +1,5 @@
1
+ from typing import override
2
+
1
3
  from fastapi import APIRouter
2
4
  from httpx_oauth.clients.github import GitHubOAuth2
3
5
  from httpx_oauth.clients.google import GoogleOAuth2
@@ -25,7 +27,7 @@ class FractalOpenID(OpenID):
25
27
  super().__init__(**kwargs)
26
28
  self.email_claim = email_claim
27
29
 
28
- # TODO-requires-py312: add `@override` decorator
30
+ @override
29
31
  async def get_id_email(self, token: str) -> tuple[str, str | None]:
30
32
  """
31
33
  Identical to the parent-class method (httpx-oauth version 0.16.1),
@@ -23,9 +23,12 @@ async def get_current_user_allowed_viewer_paths(
23
23
  ) -> list[str]:
24
24
  """
25
25
  Returns the allowed viewer paths for current user.
26
- """
27
- authorized_paths = current_user.project_dirs.copy()
28
26
 
27
+ NOTE: `include_shared_projects` is an obsolete query-parameter name,
28
+ because it does not make a difference between owners/guests. A better
29
+ naming would be e.g. `include_zarr_dirs`, but it would require a fix
30
+ in `fractal-web` as well.
31
+ """
29
32
  if include_shared_projects:
30
33
  res = await db.execute(
31
34
  select(DatasetV2.zarr_dir)
@@ -36,8 +39,9 @@ async def get_current_user_allowed_viewer_paths(
36
39
  .where(LinkUserProjectV2.user_id == current_user.id)
37
40
  .where(LinkUserProjectV2.is_verified.is_(True))
38
41
  )
39
- authorized_paths.extend(res.unique().scalars().all())
40
- # Note that `project_dirs` and the `db.execute` result may have some
41
- # common elements, and then this list may have non-unique items.
42
-
43
- return authorized_paths
42
+ authorized_zarr_dirs = list(res.unique().scalars().all())
43
+ # Note that `project_dirs` and the `authorized_zarr_dirs` may have some
44
+ # common elements, and then the response may include non-unique items.
45
+ return current_user.project_dirs + authorized_zarr_dirs
46
+ else:
47
+ return current_user.project_dirs
@@ -13,7 +13,7 @@ def send_fractal_email_or_log_failure(
13
13
  subject: str,
14
14
  msg: str,
15
15
  email_settings: PublicEmailSettings | None,
16
- ):
16
+ ) -> None:
17
17
  """
18
18
  Send an email using the specified settings, or log about failure.
19
19
  """
@@ -22,6 +22,7 @@ def send_fractal_email_or_log_failure(
22
22
  logger.error(
23
23
  f"Cannot send email with {subject=}, because {email_settings=}."
24
24
  )
25
+ return
25
26
 
26
27
  try:
27
28
  logger.info(f"START sending email with {subject=}.")
@@ -117,7 +117,7 @@ def merge_type_filters(
117
117
  f"`{task_input_types}` (from task) "
118
118
  f"and `{wftask_type_filters}` (from workflowtask)."
119
119
  )
120
- merged_dict = task_input_types
120
+ merged_dict = task_input_types.copy()
121
121
  merged_dict.update(wftask_type_filters)
122
122
  return merged_dict
123
123
 
@@ -3,6 +3,7 @@ from concurrent.futures import Future
3
3
  from concurrent.futures import ThreadPoolExecutor
4
4
  from pathlib import Path
5
5
  from typing import Any
6
+ from typing import override
6
7
 
7
8
  from fractal_server.app.db import get_sync_db
8
9
  from fractal_server.app.models import Profile
@@ -91,6 +92,7 @@ class LocalRunner(BaseRunner):
91
92
  )
92
93
  return self.executor.__exit__(exc_type, exc_val, exc_tb)
93
94
 
95
+ @override
94
96
  def submit(
95
97
  self,
96
98
  *,
@@ -1,5 +1,6 @@
1
1
  import time
2
2
  from pathlib import Path
3
+ from typing import override
3
4
 
4
5
  from fractal_server.app.models import Profile
5
6
  from fractal_server.app.models import Resource
@@ -64,9 +65,11 @@ class SlurmSSHRunner(BaseSlurmRunner):
64
65
  slurm_account=slurm_account,
65
66
  )
66
67
 
68
+ @override
67
69
  def _mkdir_local_folder(self, folder: str) -> None:
68
70
  Path(folder).mkdir(parents=True)
69
71
 
72
+ @override
70
73
  def _mkdir_remote_folder(self, folder: str):
71
74
  self.fractal_ssh.mkdir(
72
75
  folder=folder,
@@ -169,6 +172,7 @@ class SlurmSSHRunner(BaseSlurmRunner):
169
172
  t_1 = time.perf_counter()
170
173
  logger.info(f"[_fetch_artifacts] End - elapsed={t_1 - t_0:.3f} s")
171
174
 
175
+ @override
172
176
  def _run_remote_cmd(self, cmd: str) -> str:
173
177
  stdout = self.fractal_ssh.run_command(cmd=cmd)
174
178
  return stdout
@@ -232,6 +236,7 @@ class SlurmSSHRunner(BaseSlurmRunner):
232
236
 
233
237
  logger.debug("[_send_many_job_inputs] END.")
234
238
 
239
+ @override
235
240
  def run_squeue(self, *, job_ids: list[str]) -> str:
236
241
  """
237
242
  Run `squeue` for a set of SLURM job IDs.
@@ -4,6 +4,7 @@ import shlex
4
4
  import subprocess # nosec
5
5
  from concurrent.futures import ThreadPoolExecutor
6
6
  from pathlib import Path
7
+ from typing import override
7
8
 
8
9
  from fractal_server.app.models import Profile
9
10
  from fractal_server.app.models import Resource
@@ -85,11 +86,13 @@ class SlurmSudoRunner(BaseSlurmRunner):
85
86
  slurm_account=slurm_account,
86
87
  )
87
88
 
89
+ @override
88
90
  def _mkdir_local_folder(self, folder: str) -> None:
89
91
  original_umask = os.umask(0)
90
92
  Path(folder).mkdir(parents=True, mode=0o755)
91
93
  os.umask(original_umask)
92
94
 
95
+ @override
93
96
  def _mkdir_remote_folder(self, folder: str) -> None:
94
97
  _mkdir_as_user(folder=folder, user=self.slurm_user)
95
98
 
@@ -164,6 +167,7 @@ class SlurmSudoRunner(BaseSlurmRunner):
164
167
  )
165
168
  logger.debug("[_fetch_artifacts] END.")
166
169
 
170
+ @override
167
171
  def _run_remote_cmd(self, cmd: str) -> str:
168
172
  res = _run_command_as_user(
169
173
  cmd=cmd,
@@ -172,6 +176,7 @@ class SlurmSudoRunner(BaseSlurmRunner):
172
176
  )
173
177
  return res.stdout
174
178
 
179
+ @override
175
180
  def run_squeue(self, *, job_ids: list[str]) -> str:
176
181
  """
177
182
  Run `squeue` for a set of SLURM job IDs.
@@ -473,7 +473,6 @@ def execute_tasks(
473
473
  )
474
474
 
475
475
  db.commit()
476
- db.close() # NOTE: this is needed, but the reason is unclear
477
476
 
478
477
  # Store the SLURM error in the job database
479
478
  job_db = db.get(JobV2, job_id)
@@ -76,7 +76,6 @@ def fail_job(
76
76
  job.log = log_msg
77
77
  db.merge(job)
78
78
  db.commit()
79
- db.close()
80
79
  return
81
80
 
82
81
 
@@ -1,26 +1,26 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fractal-server
3
- Version: 2.18.4
3
+ Version: 2.18.6
4
4
  Summary: Backend component of the Fractal analytics platform
5
5
  Author: Tommaso Comparin, Marco Franzon, Yuri Chiucconi, Jacopo Nespolo
6
6
  Author-email: Tommaso Comparin <tommaso.comparin@exact-lab.it>, Marco Franzon <marco.franzon@exact-lab.it>, Yuri Chiucconi <yuri.chiucconi@exact-lab.it>, Jacopo Nespolo <jacopo.nespolo@exact-lab.it>
7
7
  License-Expression: BSD-3-Clause
8
8
  License-File: LICENSE
9
- Requires-Dist: fastapi>=0.120.0,<0.121.0
10
- Requires-Dist: sqlmodel==0.0.27
9
+ Requires-Dist: fastapi>=0.128.0,<0.129.0
10
+ Requires-Dist: sqlmodel==0.0.31
11
11
  Requires-Dist: sqlalchemy[asyncio]>=2.0.23,<2.1
12
12
  Requires-Dist: fastapi-users[oauth]>=15,<16
13
13
  Requires-Dist: alembic>=1.13.1,<2.0.0
14
- Requires-Dist: uvicorn>=0.38.0,<0.39.0
14
+ Requires-Dist: uvicorn>=0.40.0,<0.41.0
15
15
  Requires-Dist: uvicorn-worker==0.4.0
16
16
  Requires-Dist: pydantic>=2.12.0,<2.13.0
17
- Requires-Dist: pydantic-settings==2.11.0
17
+ Requires-Dist: pydantic-settings==2.12.0
18
18
  Requires-Dist: packaging>=25.0.0,<26.0.0
19
19
  Requires-Dist: fabric>=3.2.2,<3.3.0
20
20
  Requires-Dist: gunicorn>=23.0,<24.0
21
21
  Requires-Dist: psycopg[binary]>=3.1.0,<4.0.0
22
22
  Requires-Dist: tomli-w>=1.2.0,<1.3.0
23
- Requires-Python: >=3.11, <3.15
23
+ Requires-Python: >=3.12, <3.15
24
24
  Project-URL: changelog, https://github.com/fractal-analytics-platform/fractal-server/blob/main/CHANGELOG.md
25
25
  Project-URL: documentation, https://fractal-analytics-platform.github.io/fractal-server
26
26
  Project-URL: homepage, https://github.com/fractal-analytics-platform/fractal-server
@@ -1,8 +1,8 @@
1
- fractal_server/__init__.py,sha256=1XYvdP5XhyuSdiA2WGJBMg-1xFdd82EGTGvgLTEc9Hg,23
1
+ fractal_server/__init__.py,sha256=8bUDUYK1WiiLbGAi77y3BEN7scczf-cXLjHQfvbdlHc,23
2
2
  fractal_server/__main__.py,sha256=QeKoAgqoiozLJDa8kSVe-Aso1WWgrk1yLUYWS8RxZVM,11405
3
3
  fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
4
4
  fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- fractal_server/app/db/__init__.py,sha256=Otswoi_PlwX1zRhLTFQUKbW9Ho7piRn8dezjq8k-XaU,2834
5
+ fractal_server/app/db/__init__.py,sha256=2b8wF-EBkEgFwWNoRD_ZKbfIf4eRCg74Epgwe2BA_dw,2697
6
6
  fractal_server/app/models/__init__.py,sha256=oglUT1A1lLhXy2GFz3XsQ7wqkyfs3NXRtuNov-gOHXM,368
7
7
  fractal_server/app/models/linkusergroup.py,sha256=3KkkE4QIUAlTrBAZs_tVy0pGvAxUAq6yOEjflct_z2M,678
8
8
  fractal_server/app/models/linkuserproject.py,sha256=Bk0VzjzG7RbnVnOwrztqxKIPxz_AsUynXVxyMWHCbXA,1109
@@ -25,7 +25,7 @@ fractal_server/app/routes/admin/v2/__init__.py,sha256=VF4wg09fvz6gVgIFe-r7LoCU9t
25
25
  fractal_server/app/routes/admin/v2/_aux_functions.py,sha256=fqA5sUCFuD2iVANQt2WUUfVOEVz5egQA7inzUKYGCw0,1684
26
26
  fractal_server/app/routes/admin/v2/accounting.py,sha256=xNXyQYpa0K0bOjd5WNVKfU6zBhvT2-Xgrx2F4vdS9C0,3512
27
27
  fractal_server/app/routes/admin/v2/impersonate.py,sha256=ictDjuvBr3iLv3YtwkVRMNQRq5qtPAeAXbbC7STSsEg,1125
28
- fractal_server/app/routes/admin/v2/job.py,sha256=UaUwD5vsIPslc6KrbUPs2OsGcJOsLd7UeE2a5GRZnD0,10837
28
+ fractal_server/app/routes/admin/v2/job.py,sha256=VaVMUrHV7edHyjp2rsqoWf-wh5zlXFM-VjXIlxBnwG0,10795
29
29
  fractal_server/app/routes/admin/v2/profile.py,sha256=DwLlA9K3hkl9BqzyifIDiaWeHOM_N_17kqB5CSJOhSI,3165
30
30
  fractal_server/app/routes/admin/v2/resource.py,sha256=c2z6b_D_W6_dqVnxNF8F8OdlI5Z4asex8Zgfwzjbi2Q,6330
31
31
  fractal_server/app/routes/admin/v2/sharing.py,sha256=x7RtbDPapyENEU_s4-glPoEeEOxxj2VBgduVQ1V7wkE,3796
@@ -43,33 +43,33 @@ fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=Hrumknv0vH5VX7SF
43
43
  fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py,sha256=vdvMTa3San1HMTzctN5Vk7zxpqe4ccByrFBQyHfgWW8,4889
44
44
  fractal_server/app/routes/api/v2/dataset.py,sha256=HZGJezPqzbU1PYlFZfQSOj-ONmhtitCv6I7SDORGiPg,8515
45
45
  fractal_server/app/routes/api/v2/history.py,sha256=-aLwLhDLDqwKFy3JrM1vFswyBPdolMXlH3sS7OiQsK8,18339
46
- fractal_server/app/routes/api/v2/images.py,sha256=k9wd44iwjCtEWSH9j6X6zToBwuOOo6J4FxSW7AGbPHA,8266
47
- fractal_server/app/routes/api/v2/job.py,sha256=lhYuUX9plbvIE5Gx1D4uWjmzPrWT9CqiqpHRSBv1-bA,7415
46
+ fractal_server/app/routes/api/v2/images.py,sha256=gaLHglxN9VwhNQP6uD9Ij-qaMJWC6zFcj_TcM1V8_AI,8245
47
+ fractal_server/app/routes/api/v2/job.py,sha256=nrfus2bD49Ww4E6I3vTCrOqRnXjnsHMk4KxtKYCrIp0,7352
48
48
  fractal_server/app/routes/api/v2/pre_submission_checks.py,sha256=Cs_ODoRWmkbSJJhlIE7pQh9JuJGXZTAr-EVF6wqKNGA,5215
49
- fractal_server/app/routes/api/v2/project.py,sha256=z_IMJ7uDpRDXdoNF0qWMpft2lnsX6pfP244cQlyH2CU,5811
49
+ fractal_server/app/routes/api/v2/project.py,sha256=sRlmNntaTm7LYCwjVhgnpYE0O8gCWDjOwIR6k2hoMUM,5748
50
50
  fractal_server/app/routes/api/v2/sharing.py,sha256=MvegcF3xaT9nztVwLiUisp4B8IrKRa2LVlSR2GGTqYk,9398
51
51
  fractal_server/app/routes/api/v2/status_legacy.py,sha256=XfU7sJS3luPziGzGxjiLmrLe4P-8OyBU7hTdcYmcyB8,6026
52
52
  fractal_server/app/routes/api/v2/submit.py,sha256=YCeMLXhHzouQbjR_Rh3Rdw-htBGOpznEeWIdAVf3AIk,9570
53
- fractal_server/app/routes/api/v2/task.py,sha256=FBELoBA136r_vOQfwllLkGQ1byOc82raTCEyUrf8P4Q,7500
53
+ fractal_server/app/routes/api/v2/task.py,sha256=uIVjb_J-kGu38ddy7lsYFHVF2lT1FyJtT1J1CM6AsVU,7437
54
54
  fractal_server/app/routes/api/v2/task_collection.py,sha256=DC_qI7cv-4eT2be8opcU3LfkzXjNvLoo4FPCfT77UM0,12348
55
55
  fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=gzllPiZp94rNfmAZMegS0B6wZZa-JPvqrapsWb9dyeY,6920
56
56
  fractal_server/app/routes/api/v2/task_collection_pixi.py,sha256=wed_nciaJrDFfjhUiORTnsStWUSk3wfQUehsZUurwgk,7172
57
- fractal_server/app/routes/api/v2/task_group.py,sha256=yU7RFDBGAQy698nHzLiujWuYOHxhtO1Vx1Cz4IyGPSE,8314
57
+ fractal_server/app/routes/api/v2/task_group.py,sha256=2ocRRQ1dTzrGl01hIsl39vP3ckRuBJqy2Usg19Hkw2Q,8365
58
58
  fractal_server/app/routes/api/v2/task_group_lifecycle.py,sha256=T0nDJpqZl1SEzp-Jtwf8YY0rJVTNis4Lv7CQXY8CH-Y,10523
59
59
  fractal_server/app/routes/api/v2/task_version_update.py,sha256=W6UXmh2ngqMBkSSHyP3eOyakd6y7rBFTbDq4jd45QaM,8487
60
- fractal_server/app/routes/api/v2/workflow.py,sha256=VR4zdtJpkBcYg6uh8dcVeeV742y3WoCP4t09qrSLSHo,10794
60
+ fractal_server/app/routes/api/v2/workflow.py,sha256=TFmZsojPqcxawNC6PdgfDrgapG9808Lj6f9Gdzp5eSc,10752
61
61
  fractal_server/app/routes/api/v2/workflow_import.py,sha256=mf5u2q9XRDOGa0-gbDmJKNsJj9zbBdzkJvrWRz2CEyY,9646
62
- fractal_server/app/routes/api/v2/workflowtask.py,sha256=a2RJ4Ln9H9qplQVgPEiifSc5YWIcmqTQW2wZDojEyNA,8254
62
+ fractal_server/app/routes/api/v2/workflowtask.py,sha256=QZSRiH2vy8W-Tns8aBRGD9rl81XRyaltB8UKHOtRIC4,8233
63
63
  fractal_server/app/routes/auth/__init__.py,sha256=RghfjGuu0RTW8RxBCvaePx9KErO4rTkI96XgbtbeSJU,2337
64
64
  fractal_server/app/routes/auth/_aux_auth.py,sha256=gKdYTWUzxcU44Iep787zReWwdAs4kW5baNDXCPmiKn8,9195
65
65
  fractal_server/app/routes/auth/current_user.py,sha256=uDWttWo9isG69Jv1EGnnr2Ki5ZGd0D76jgjVDQMkn8c,3251
66
66
  fractal_server/app/routes/auth/group.py,sha256=uR98vdQHH-7BFl-Czj85ESPxT2yQymy4qtagaMrnUPU,6491
67
67
  fractal_server/app/routes/auth/login.py,sha256=buVa5Y8T0cd_SW1CqC-zMv-3SfPxGJknf7MYlUyKOl0,567
68
- fractal_server/app/routes/auth/oauth.py,sha256=ocQjyy6OfuEORDYVVzQSgcisSwL-YLZxacq7FuzwJF4,3673
68
+ fractal_server/app/routes/auth/oauth.py,sha256=dOt1bWz1viW36CAnHVLmLkYzdCHUMdOhdTNgoQp-VvU,3663
69
69
  fractal_server/app/routes/auth/register.py,sha256=IiUJhgY0ZrTs0RlBRRjoTv4wF5Gb3eXTInFV-dXkpsE,615
70
70
  fractal_server/app/routes/auth/router.py,sha256=Zip_fw9qJWtoXWjluznschyrCKb2n_rf3xWarSXMkgI,692
71
71
  fractal_server/app/routes/auth/users.py,sha256=5BagdH1dz-ZoXdvTgIo9QWBNFPW3p1pIZfY9BBu4eds,7397
72
- fractal_server/app/routes/auth/viewer_paths.py,sha256=aW1QM4fdCM-WFEOXNf7I7V7_XQuuRrOHvd32nr08Ofs,1618
72
+ fractal_server/app/routes/auth/viewer_paths.py,sha256=uDIwP3AWjLOskG2ZSMUokmn6DWJX2NSviG6k4hiJRSU,1911
73
73
  fractal_server/app/routes/aux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
74
  fractal_server/app/routes/aux/_job.py,sha256=n-UhONvomKyKkQDDqd0lFh2kCMhlCGXpfdMNW39R1E4,644
75
75
  fractal_server/app/routes/aux/_runner.py,sha256=-SvcXCVEV7Mb6q4PbbxuTCCruX6sAlR5QGXk9CzBVv8,979
@@ -96,7 +96,7 @@ fractal_server/app/schemas/v2/task_group.py,sha256=sbg6AkvonU7F_-QC4G9kDxO6YVcz7
96
96
  fractal_server/app/schemas/v2/workflow.py,sha256=87Aa92H6ceBbkDUsDhDqVNJyuBZuVRRAgFqNeg_djwE,1738
97
97
  fractal_server/app/schemas/v2/workflowtask.py,sha256=1k56KHwzZDZGjl7FG1yslj-MKtKKR5fZ5RKGlJbopNc,3608
98
98
  fractal_server/app/security/__init__.py,sha256=sblIH9DFCt_iyk22WzV6k4LuKdbvNPtS1HqPCHIiBJ4,18363
99
- fractal_server/app/security/signup_email.py,sha256=ZnwwjpL6jyIkegHBebTqYYGGVtllLI0_x48K-yJtkNk,1969
99
+ fractal_server/app/security/signup_email.py,sha256=R69U5eTi9X7gZHSTfZ26SaHMQAeqReYEpGnB8r3AVig,1992
100
100
  fractal_server/app/shutdown.py,sha256=bfEmf6Xdc906ES0zDDWsihmd6neQpGFyIc7qnadnNu8,2283
101
101
  fractal_server/config/__init__.py,sha256=WvcoE3qiY1qnkumv3qspcemCFw5iFG5NkSFR78vN4ks,562
102
102
  fractal_server/config/_data.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -111,7 +111,7 @@ fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_
111
111
  fractal_server/images/__init__.py,sha256=-_wjoKtSX02P1KjDxDP_EXKvmbONTRmbf7iGVTsyBpM,154
112
112
  fractal_server/images/models.py,sha256=5wtUmX3hRy8vyOb4SgezuIWcwUaB69HyXHg4zFMJkvk,1198
113
113
  fractal_server/images/status_tools.py,sha256=Is2QWThbLCrVJuI0NpGv7TcWs1T8z8q_8Qsidr3TdBU,4932
114
- fractal_server/images/tools.py,sha256=37jVIU6RiAGbiyucNDlKe9J3yN3Y47NOvv-RJor9Jm0,4154
114
+ fractal_server/images/tools.py,sha256=4U5Sc5f9ci55W4VLJ7diQrO6gPcw7WKunZQkp3AefMk,4161
115
115
  fractal_server/logger.py,sha256=9EhRdgPnGdbJ51vxhOD42K0iaDRhKx7wuikpHoh9kzY,5302
116
116
  fractal_server/main.py,sha256=vCDvUndmLIkxUX8EAtyA4Wu9YiIHGZge5J37Yn2U5R4,6537
117
117
  fractal_server/migrations/env.py,sha256=nfyBpMIOT3kny6t-b-tUjyRjZ4k906bb1_wCQ7me1BI,1353
@@ -185,7 +185,7 @@ fractal_server/runner/executors/base_runner.py,sha256=h8uE5gr6zFEwpjhasJDc-eNTMI
185
185
  fractal_server/runner/executors/call_command_wrapper.py,sha256=yLFfwkYdfGAp6TSLx0omymW3IxaDNdxV-DDk-3oqNx0,1828
186
186
  fractal_server/runner/executors/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
187
187
  fractal_server/runner/executors/local/get_local_config.py,sha256=oI32JawlG3ixYdjxJDRfT0sreEnoHekhiAHzlejl2aM,1694
188
- fractal_server/runner/executors/local/runner.py,sha256=0s0u5ONasXdsvS2WD5zxksQgved_XGXtaxCEiBJoAlM,12297
188
+ fractal_server/runner/executors/local/runner.py,sha256=aad4Q0mLFh5Sb0Naqj0zgpNHd5som_-T85qLcMlPrcs,12339
189
189
  fractal_server/runner/executors/slurm_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
190
190
  fractal_server/runner/executors/slurm_common/_batching.py,sha256=YQjWRTDI1e6NeLe1R-1QWlt49i42M9ILeExEjdjgy48,8348
191
191
  fractal_server/runner/executors/slurm_common/_job_states.py,sha256=nuV-Zba38kDrRESOVB3gaGbrSPZc4q7YGichQaeqTW0,238
@@ -196,11 +196,11 @@ fractal_server/runner/executors/slurm_common/slurm_config.py,sha256=m65hJ4NJfk74
196
196
  fractal_server/runner/executors/slurm_common/slurm_job_task_models.py,sha256=VeX40CvU5fckUpSyXlzb3EDE9xxPXkT2sZKLXq_6Ooc,3493
197
197
  fractal_server/runner/executors/slurm_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
198
  fractal_server/runner/executors/slurm_ssh/run_subprocess.py,sha256=SyW6t4egvbiARph2YkFjc88Hj94fCamZVi50L7ph8VM,996
199
- fractal_server/runner/executors/slurm_ssh/runner.py,sha256=A6HavBk5H_fztoMV6A4pXlRPU-805gDznbJUjv0OQTU,10323
199
+ fractal_server/runner/executors/slurm_ssh/runner.py,sha256=6_5alEk5bEtFMuJfGSSkJ6RlUs3bsPXl0IlQTDXfsts,10407
200
200
  fractal_server/runner/executors/slurm_ssh/tar_commands.py,sha256=83etlsQ_dYvGVrKqlgyOYXnRFWSwf4VRISANsYMVxkQ,1763
201
201
  fractal_server/runner/executors/slurm_sudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
202
202
  fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py,sha256=OaC_aOupXnU873FvBt8xfBrz41yVyTxh3fU9_vxq0dY,2567
203
- fractal_server/runner/executors/slurm_sudo/runner.py,sha256=OWhzPbwhtaRO5sJ-Q1fewegYoMqIQ-lEALuMaK_PHiI,6037
203
+ fractal_server/runner/executors/slurm_sudo/runner.py,sha256=AKPQGDJrVWT_JtVQK6DDrtyGrTWUEkzn86PbfCbxiPI,6121
204
204
  fractal_server/runner/filenames.py,sha256=lPnxKHtdRizr6FqG3zOdjDPyWA7GoaJGTtiuJV0gA8E,70
205
205
  fractal_server/runner/set_start_and_last_task_index.py,sha256=NsioSzfEpGyo9ZKrV5KsbxeI7d5V3tE678Y3IAo5rHM,1218
206
206
  fractal_server/runner/task_files.py,sha256=n54A1x0MQRGSgqhzOTE-TPzEGJymUhQIUV9ApcVCV9M,4318
@@ -211,9 +211,9 @@ fractal_server/runner/v2/_slurm_sudo.py,sha256=UsB1P6AZB0L1QrBvR2Lq9FoJaxnhbakLA
211
211
  fractal_server/runner/v2/db_tools.py,sha256=twqFWVENkxWCYglb__BAXASDuJppwHE-VxdEUC67mq0,3317
212
212
  fractal_server/runner/v2/deduplicate_list.py,sha256=TWxHDucal0VZPswy_H7IFaEb4ddGnpl_QBwJ8g9Ybug,668
213
213
  fractal_server/runner/v2/merge_outputs.py,sha256=0ahaSwdMFAoEhxVaEaO9nSJuKIcWg9pDZ356ktSHcC0,897
214
- fractal_server/runner/v2/runner.py,sha256=hP3zxGPlrHcNQAYNa808ARAwXWPTea8QsJINSXu9dRE,20958
214
+ fractal_server/runner/v2/runner.py,sha256=aKz5ocgsMcUUsvaz00db8cWbBHMBA_g_PJhwV973pdY,20884
215
215
  fractal_server/runner/v2/runner_functions.py,sha256=1wW2ByskwPtx_mhyJiCpKMXDnDyZ_y5fDWv8hktFZXI,19564
216
- fractal_server/runner/v2/submit_workflow.py,sha256=o6JIBzcholzzWE5WuRN0nYgUR_Pj5cKRE2cs9OuQiyw,11882
216
+ fractal_server/runner/v2/submit_workflow.py,sha256=FSqXF0_BzhNMRGqYxdjwSVD5rdonk4fTL6Fkp31O_fQ,11867
217
217
  fractal_server/runner/v2/task_interface.py,sha256=ftPPpOU16rbJD8q-QV7o_3ey8W7MQTFuWJiYUr4OmF4,2532
218
218
  fractal_server/runner/versions.py,sha256=uz59Dxj7BphnFnr-p0kyaZRH0h4w5Xkd0UJNVGtt4ds,474
219
219
  fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
@@ -267,8 +267,8 @@ fractal_server/types/validators/_workflow_task_arguments_validators.py,sha256=zt
267
267
  fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
268
268
  fractal_server/utils.py,sha256=-rjg8QTXQcKweXjn0NcmETFs1_uM9PGnbl0Q7c4ERPM,2181
269
269
  fractal_server/zip_tools.py,sha256=Uhn-ax4_9g1PJ32BdyaX30hFpAeVOv2tZYTUK-zVn1E,5719
270
- fractal_server-2.18.4.dist-info/licenses/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
271
- fractal_server-2.18.4.dist-info/WHEEL,sha256=ZyFSCYkV2BrxH6-HRVRg3R9Fo7MALzer9KiPYqNxSbo,79
272
- fractal_server-2.18.4.dist-info/entry_points.txt,sha256=3TpdcjmETRYWJxFyAh3z-9955EWua9jdkSnBwxES1uE,60
273
- fractal_server-2.18.4.dist-info/METADATA,sha256=Un1KFSgGTikpOVXkKrM5PQLo3lWQsYUzNN_0cTA1nyM,4183
274
- fractal_server-2.18.4.dist-info/RECORD,,
270
+ fractal_server-2.18.6.dist-info/licenses/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
271
+ fractal_server-2.18.6.dist-info/WHEEL,sha256=eycQt0QpYmJMLKpE3X9iDk8R04v2ZF0x82ogq-zP6bQ,79
272
+ fractal_server-2.18.6.dist-info/entry_points.txt,sha256=3TpdcjmETRYWJxFyAh3z-9955EWua9jdkSnBwxES1uE,60
273
+ fractal_server-2.18.6.dist-info/METADATA,sha256=8kWN7fybjXbZX3Ull8rBcymWRBDqGRGkNlsSupUCyuM,4183
274
+ fractal_server-2.18.6.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.9.18
2
+ Generator: uv 0.9.24
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any