fractal-server 2.18.0__py3-none-any.whl → 2.18.0a0__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.
Files changed (97) hide show
  1. fractal_server/__init__.py +1 -1
  2. fractal_server/__main__.py +1 -2
  3. fractal_server/app/models/security.py +5 -7
  4. fractal_server/app/models/v2/job.py +2 -13
  5. fractal_server/app/models/v2/resource.py +0 -13
  6. fractal_server/app/routes/admin/v2/__init__.py +12 -10
  7. fractal_server/app/routes/admin/v2/accounting.py +2 -2
  8. fractal_server/app/routes/admin/v2/job.py +17 -17
  9. fractal_server/app/routes/admin/v2/task.py +8 -8
  10. fractal_server/app/routes/admin/v2/task_group.py +16 -94
  11. fractal_server/app/routes/admin/v2/task_group_lifecycle.py +20 -20
  12. fractal_server/app/routes/api/__init__.py +9 -0
  13. fractal_server/app/routes/api/v2/__init__.py +49 -47
  14. fractal_server/app/routes/api/v2/_aux_functions.py +47 -22
  15. fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +4 -4
  16. fractal_server/app/routes/api/v2/_aux_functions_tasks.py +2 -2
  17. fractal_server/app/routes/api/v2/dataset.py +60 -66
  18. fractal_server/app/routes/api/v2/history.py +5 -7
  19. fractal_server/app/routes/api/v2/job.py +12 -12
  20. fractal_server/app/routes/api/v2/project.py +11 -11
  21. fractal_server/app/routes/api/v2/sharing.py +2 -1
  22. fractal_server/app/routes/api/v2/status_legacy.py +29 -15
  23. fractal_server/app/routes/api/v2/submit.py +66 -65
  24. fractal_server/app/routes/api/v2/task.py +17 -15
  25. fractal_server/app/routes/api/v2/task_collection.py +18 -18
  26. fractal_server/app/routes/api/v2/task_collection_custom.py +13 -11
  27. fractal_server/app/routes/api/v2/task_collection_pixi.py +9 -9
  28. fractal_server/app/routes/api/v2/task_group.py +18 -18
  29. fractal_server/app/routes/api/v2/task_group_lifecycle.py +26 -26
  30. fractal_server/app/routes/api/v2/task_version_update.py +5 -5
  31. fractal_server/app/routes/api/v2/workflow.py +18 -18
  32. fractal_server/app/routes/api/v2/workflow_import.py +11 -11
  33. fractal_server/app/routes/api/v2/workflowtask.py +36 -10
  34. fractal_server/app/routes/auth/_aux_auth.py +0 -100
  35. fractal_server/app/routes/auth/current_user.py +63 -0
  36. fractal_server/app/routes/auth/group.py +30 -1
  37. fractal_server/app/routes/auth/router.py +0 -2
  38. fractal_server/app/routes/auth/users.py +0 -9
  39. fractal_server/app/schemas/user.py +12 -29
  40. fractal_server/app/schemas/user_group.py +15 -0
  41. fractal_server/app/schemas/v2/__init__.py +48 -48
  42. fractal_server/app/schemas/v2/dataset.py +13 -35
  43. fractal_server/app/schemas/v2/dumps.py +9 -9
  44. fractal_server/app/schemas/v2/job.py +11 -11
  45. fractal_server/app/schemas/v2/project.py +3 -3
  46. fractal_server/app/schemas/v2/resource.py +4 -13
  47. fractal_server/app/schemas/v2/status_legacy.py +3 -3
  48. fractal_server/app/schemas/v2/task.py +6 -6
  49. fractal_server/app/schemas/v2/task_collection.py +4 -4
  50. fractal_server/app/schemas/v2/task_group.py +16 -16
  51. fractal_server/app/schemas/v2/workflow.py +16 -16
  52. fractal_server/app/schemas/v2/workflowtask.py +14 -14
  53. fractal_server/app/security/__init__.py +1 -1
  54. fractal_server/app/shutdown.py +6 -6
  55. fractal_server/config/__init__.py +6 -0
  56. fractal_server/config/_data.py +79 -0
  57. fractal_server/config/_main.py +1 -6
  58. fractal_server/images/models.py +2 -1
  59. fractal_server/main.py +11 -72
  60. fractal_server/runner/config/_slurm.py +0 -2
  61. fractal_server/runner/executors/slurm_common/slurm_config.py +0 -1
  62. fractal_server/runner/v2/_local.py +3 -4
  63. fractal_server/runner/v2/_slurm_ssh.py +3 -4
  64. fractal_server/runner/v2/_slurm_sudo.py +3 -4
  65. fractal_server/runner/v2/runner.py +17 -36
  66. fractal_server/runner/v2/runner_functions.py +14 -11
  67. fractal_server/runner/v2/submit_workflow.py +9 -22
  68. fractal_server/tasks/v2/local/_utils.py +2 -2
  69. fractal_server/tasks/v2/local/collect.py +6 -5
  70. fractal_server/tasks/v2/local/collect_pixi.py +6 -5
  71. fractal_server/tasks/v2/local/deactivate.py +7 -7
  72. fractal_server/tasks/v2/local/deactivate_pixi.py +3 -3
  73. fractal_server/tasks/v2/local/delete.py +5 -5
  74. fractal_server/tasks/v2/local/reactivate.py +5 -5
  75. fractal_server/tasks/v2/local/reactivate_pixi.py +5 -5
  76. fractal_server/tasks/v2/ssh/collect.py +5 -5
  77. fractal_server/tasks/v2/ssh/collect_pixi.py +5 -5
  78. fractal_server/tasks/v2/ssh/deactivate.py +7 -7
  79. fractal_server/tasks/v2/ssh/deactivate_pixi.py +2 -2
  80. fractal_server/tasks/v2/ssh/delete.py +5 -5
  81. fractal_server/tasks/v2/ssh/reactivate.py +5 -5
  82. fractal_server/tasks/v2/ssh/reactivate_pixi.py +5 -5
  83. fractal_server/tasks/v2/utils_background.py +7 -7
  84. fractal_server/tasks/v2/utils_database.py +5 -5
  85. fractal_server/types/__init__.py +0 -22
  86. fractal_server/types/validators/__init__.py +0 -3
  87. fractal_server/types/validators/_common_validators.py +0 -32
  88. {fractal_server-2.18.0.dist-info → fractal_server-2.18.0a0.dist-info}/METADATA +1 -1
  89. {fractal_server-2.18.0.dist-info → fractal_server-2.18.0a0.dist-info}/RECORD +92 -97
  90. fractal_server/app/routes/auth/viewer_paths.py +0 -43
  91. fractal_server/data_migrations/2_18_0.py +0 -30
  92. fractal_server/migrations/versions/7910eed4cf97_user_project_dirs_and_usergroup_viewer_.py +0 -60
  93. fractal_server/migrations/versions/88270f589c9b_add_prevent_new_submissions.py +0 -39
  94. fractal_server/migrations/versions/f0702066b007_one_submitted_job_per_dataset.py +0 -40
  95. {fractal_server-2.18.0.dist-info → fractal_server-2.18.0a0.dist-info}/WHEEL +0 -0
  96. {fractal_server-2.18.0.dist-info → fractal_server-2.18.0a0.dist-info}/entry_points.txt +0 -0
  97. {fractal_server-2.18.0.dist-info → fractal_server-2.18.0a0.dist-info}/licenses/LICENSE +0 -0
@@ -10,9 +10,6 @@ from fractal_server.urls import normalize_url
10
10
 
11
11
  from .validators import val_absolute_path
12
12
  from .validators import val_http_url
13
- from .validators import val_no_dotdot_in_path
14
- from .validators import val_non_absolute_path
15
- from .validators import val_os_path_normpath
16
13
  from .validators import val_unique_list
17
14
  from .validators import valdict_keys
18
15
  from .validators import validate_attribute_filters
@@ -30,22 +27,11 @@ A non-empty string, with no leading/trailing whitespaces.
30
27
  AbsolutePathStr = Annotated[
31
28
  NonEmptyStr,
32
29
  AfterValidator(val_absolute_path),
33
- AfterValidator(val_no_dotdot_in_path),
34
- AfterValidator(val_os_path_normpath),
35
30
  ]
36
31
  """
37
32
  String representing an absolute path.
38
-
39
- Validation fails if the path is not absolute or if it contains a
40
- parent-directory reference "/../".
41
33
  """
42
34
 
43
- RelativePathStr = Annotated[
44
- NonEmptyStr,
45
- AfterValidator(val_no_dotdot_in_path),
46
- AfterValidator(val_os_path_normpath),
47
- AfterValidator(val_non_absolute_path),
48
- ]
49
35
 
50
36
  HttpUrlStr = Annotated[
51
37
  NonEmptyStr,
@@ -58,27 +44,19 @@ String representing an URL.
58
44
 
59
45
  ZarrUrlStr = Annotated[
60
46
  NonEmptyStr,
61
- AfterValidator(val_no_dotdot_in_path),
62
47
  AfterValidator(normalize_url),
63
48
  ]
64
49
  """
65
50
  String representing a zarr URL/path.
66
-
67
- Validation fails if the path is not absolute or if it contains a
68
- parent-directory reference "/../".
69
51
  """
70
52
 
71
53
 
72
54
  ZarrDirStr = Annotated[
73
55
  NonEmptyStr,
74
- AfterValidator(val_no_dotdot_in_path),
75
56
  AfterValidator(normalize_url),
76
57
  ]
77
58
  """
78
59
  String representing a `zarr_dir` path.
79
-
80
- Validation fails if the path is not absolute or if it contains a
81
- parent-directory reference "/../".
82
60
  """
83
61
 
84
62
  DictStrAny = Annotated[
@@ -1,9 +1,6 @@
1
1
  from ._common_validators import val_absolute_path # noqa F401
2
- from ._common_validators import val_no_dotdot_in_path # noqa F401
3
- from ._common_validators import val_os_path_normpath # noqa F401
4
2
  from ._common_validators import val_http_url # noqa F401
5
3
  from ._common_validators import val_unique_list # noqa F401
6
4
  from ._common_validators import valdict_keys # noqa F401
7
- from ._common_validators import val_non_absolute_path # noqa F401
8
5
  from ._filter_validators import validate_attribute_filters # noqa F401
9
6
  from ._workflow_task_arguments_validators import validate_wft_args # noqa F401
@@ -1,5 +1,4 @@
1
1
  import os
2
- from pathlib import Path
3
2
  from typing import Any
4
3
 
5
4
  from pydantic import HttpUrl
@@ -30,37 +29,6 @@ def val_absolute_path(path: str) -> str:
30
29
  return path
31
30
 
32
31
 
33
- def val_non_absolute_path(path: str) -> str:
34
- """
35
- Check that a string attribute is not an absolute path
36
- """
37
- if os.path.isabs(path):
38
- raise ValueError(
39
- f"String must not be an absolute path (given '{path}')."
40
- )
41
- return path
42
-
43
-
44
- def val_no_dotdot_in_path(path: str) -> str:
45
- """
46
- Check that a string attribute has no '/../' in it
47
- """
48
- if ".." in Path(path).parts:
49
- raise ValueError("String must not contain '/../'.")
50
- return path
51
-
52
-
53
- def val_os_path_normpath(path: str) -> str:
54
- """
55
- Apply `os.path.normpath` to `path`.
56
-
57
- Note: we keep this separate from `fractal_server.urls.normalize_url`,
58
- because this function only applies to on-disk paths, while `normalize_url`
59
- may apply to s3 URLs as well.
60
- """
61
- return os.path.normpath(path)
62
-
63
-
64
32
  def val_unique_list(must_be_unique: list) -> list:
65
33
  if len(set(must_be_unique)) != len(must_be_unique):
66
34
  raise ValueError("List has repetitions")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fractal-server
3
- Version: 2.18.0
3
+ Version: 2.18.0a0
4
4
  Summary: Backend component of the Fractal analytics platform
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE
@@ -1,121 +1,119 @@
1
- fractal_server/__init__.py,sha256=pdN1fnxhNKolF9m4XM5sTCTrrj8qx2MEagRBI-_k_bk,23
2
- fractal_server/__main__.py,sha256=QeKoAgqoiozLJDa8kSVe-Aso1WWgrk1yLUYWS8RxZVM,11405
1
+ fractal_server/__init__.py,sha256=zUjuvRpoe51pROLg8ctvKgpIyEZgCSJzeDX3TTVg9Ms,25
2
+ fractal_server/__main__.py,sha256=o63YYNPm6wv0YG5PTtxPselXY6g3ii5VoBP8blPGgK8,11423
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=Otswoi_PlwX1zRhLTFQUKbW9Ho7piRn8dezjq8k-XaU,2834
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=LW09JFTY2lFLqp3KdxUNjldeJRaao3WnTko_gS21EU4,1572
9
- fractal_server/app/models/security.py,sha256=mhKmRN5Ln2nwDOf-K_-BrSdTB6qQZrjeT_FiD76sMu4,4781
9
+ fractal_server/app/models/security.py,sha256=p9h1wqWzkJ2_P1kVmsHgeA81Bt5DU24v7THCr2-J238,4671
10
10
  fractal_server/app/models/v2/__init__.py,sha256=xL05Mvdx0dqUFhJf694oPfuqkUQxZbxOkoUgRuNIXl4,949
11
11
  fractal_server/app/models/v2/accounting.py,sha256=VNweFARrvY3mj5LI0834Ku061S2aGC61kuVHzi_tZhc,1187
12
12
  fractal_server/app/models/v2/dataset.py,sha256=BL5elDU0UXnUSwvuXSO4JeKa9gje0QFerU_LP7sI754,1273
13
13
  fractal_server/app/models/v2/history.py,sha256=869RQzBssHFYnBLBvCGlKrLV_HAXwsdO5DgwG9U8D-U,2339
14
- fractal_server/app/models/v2/job.py,sha256=IwlOPgx4FU-6PsPd_aBJRGsp5qVXddRBv6xxSMdh524,2360
14
+ fractal_server/app/models/v2/job.py,sha256=OFSNALm4xRvZ7nlojrbff-HcILYKY2gahlLxEbRsCDE,2074
15
15
  fractal_server/app/models/v2/profile.py,sha256=YajSmV4J_-zC4RX917s-A_lJt4mxYdPRVS3RH_uvJ48,1006
16
16
  fractal_server/app/models/v2/project.py,sha256=VvLXrgzKYLH585mYg_txrO8q3JoSoSEy4XkWjex4sDU,585
17
- fractal_server/app/models/v2/resource.py,sha256=XaHlJj9CladIahkrpywWXn8JBSx7_qEHp_wnkFuQ0rU,3896
17
+ fractal_server/app/models/v2/resource.py,sha256=IHZR7D2K1zpbL1I66vAGqm1RGE8WOH9Q6dNQ-qGcH9g,3549
18
18
  fractal_server/app/models/v2/task.py,sha256=iBIQB8POQE5MyKvLZhw7jZWlBhbrThzCDzRTcgiAczQ,1493
19
19
  fractal_server/app/models/v2/task_group.py,sha256=ud5c_Cncp3hz7_FLiEUvO2VD8h9KtBQljyjR6GQK0D0,4674
20
20
  fractal_server/app/models/v2/workflow.py,sha256=AsL7p8UMGbow--21IG2lYZnOjQ--m85dRWaNCHqb35I,1069
21
21
  fractal_server/app/models/v2/workflowtask.py,sha256=qkTc-hcFLpJUVsEUbnDq2BJL0qg9jagy2doZeusF1ek,1266
22
22
  fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  fractal_server/app/routes/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- fractal_server/app/routes/admin/v2/__init__.py,sha256=VF4wg09fvz6gVgIFe-r7LoCU9tlF9kBcEhkQRQPhatY,1134
24
+ fractal_server/app/routes/admin/v2/__init__.py,sha256=l3BVqu5f_KXW-8KCpmnI9QS_sZJTXygIz7Z_WawCGDA,1170
25
25
  fractal_server/app/routes/admin/v2/_aux_functions.py,sha256=fqA5sUCFuD2iVANQt2WUUfVOEVz5egQA7inzUKYGCw0,1684
26
- fractal_server/app/routes/admin/v2/accounting.py,sha256=xNXyQYpa0K0bOjd5WNVKfU6zBhvT2-Xgrx2F4vdS9C0,3512
26
+ fractal_server/app/routes/admin/v2/accounting.py,sha256=HJ98G_Pde31cwEOqtloAJBXxsoRgNaoSG46OW7x1OBM,3584
27
27
  fractal_server/app/routes/admin/v2/impersonate.py,sha256=ictDjuvBr3iLv3YtwkVRMNQRq5qtPAeAXbbC7STSsEg,1125
28
- fractal_server/app/routes/admin/v2/job.py,sha256=nishNH472KMmz9Au8_w6xOOAXEN3tqVSUX1IraO1Hr0,10430
28
+ fractal_server/app/routes/admin/v2/job.py,sha256=aozHUx7nrDGr-JagePWjwdFGfW7nsAMH4RNvi4iLrsk,10515
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
32
- fractal_server/app/routes/admin/v2/task.py,sha256=M4cetPkzn73-6faftk49AU_PeaPLqKE_dZxrrQ_x_98,6087
33
- fractal_server/app/routes/admin/v2/task_group.py,sha256=3LxH2LEstj7L9qGNN3kkLo4JdFw4GXDlnlM6s4ulc_0,9377
34
- fractal_server/app/routes/admin/v2/task_group_lifecycle.py,sha256=LkHSQVXRRUkicpIDQpc7dwT944uabtCTTrZCoESHjik,9935
35
- fractal_server/app/routes/api/__init__.py,sha256=GaNOm1elJLldHNWZ482qlvETLAXhdJ8u_X6kGxMmwQs,1409
36
- fractal_server/app/routes/api/v2/__init__.py,sha256=_J8ekQqNGJ3DC1mKum8m8SNOcv66oZ7A260MFjcEtGE,2710
37
- fractal_server/app/routes/api/v2/_aux_functions.py,sha256=pxXcauCMZEVKkft8nOCK_Nq5m7hkx7BVUXch_j2KVtg,15131
32
+ fractal_server/app/routes/admin/v2/task.py,sha256=t_ldc_71ZNbYuymmhn2WT8RqZlxMUceQfLU3LLInR4I,6127
33
+ fractal_server/app/routes/admin/v2/task_group.py,sha256=zotpvn5ccQ9Kn-mgIorxJ8RU0BelxP_EEIi-2THH4kA,6248
34
+ fractal_server/app/routes/admin/v2/task_group_lifecycle.py,sha256=3LtyLDLFDEWSx9e4huXV_uBUdoDuIWib7IzMjlD1OMI,9975
35
+ fractal_server/app/routes/api/__init__.py,sha256=kq_c4t4a0rrJ6zMO0WGOTjCHf46SAlmWhh7Sa-3LkNg,1659
36
+ fractal_server/app/routes/api/v2/__init__.py,sha256=lOSRxe408B3dUfd1FtpfynEWBwKDVFlUt3I4NpIQTRo,2938
37
+ fractal_server/app/routes/api/v2/_aux_functions.py,sha256=df6-Eep_402StSOiGeDHfKWZb7E1yJkFyHdi_EThRgE,15921
38
38
  fractal_server/app/routes/api/v2/_aux_functions_history.py,sha256=RhKheO2mdSpA0PYGPuDfr8XTaE4e8LkuKeVJlilNtko,5683
39
39
  fractal_server/app/routes/api/v2/_aux_functions_sharing.py,sha256=IvDII3Sl00eypdD3QRELQ4SLyC3gq6-HsXhuCx5Bp5I,2995
40
- fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=qTJdKC3nKLwLYfuKbzJW6tREmzy-dNk57xcmvgi_UDA,8529
40
+ fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=u7KO6VXBJhPhlUZlIt-mqmWzhfR-btrQdb5HNvPR5OY,8537
41
41
  fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py,sha256=PKjV7r8YsPRXoNiVSnOK4KBYVV3l_Yb_ZPrqAkMkXrQ,1182
42
- fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=Hrumknv0vH5VX7SFp8WZDzsJv_z7quvFyNoDYmYoD7A,13623
42
+ fractal_server/app/routes/api/v2/_aux_functions_tasks.py,sha256=jg1QUQhDmeTw6c36-gBOVqOiBgI9kqBiuU77hHaJ_ag,13627
43
43
  fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py,sha256=vdvMTa3San1HMTzctN5Vk7zxpqe4ccByrFBQyHfgWW8,4889
44
- fractal_server/app/routes/api/v2/dataset.py,sha256=HZGJezPqzbU1PYlFZfQSOj-ONmhtitCv6I7SDORGiPg,8515
45
- fractal_server/app/routes/api/v2/history.py,sha256=5IYb6m6vmXjNU7uatEmgdXhehyKdbK98T5wAjQpNH4g,18266
44
+ fractal_server/app/routes/api/v2/dataset.py,sha256=FE5m8t8KyBQG-df_uBJIpaPHBjbHOGkFbSDhMN6fsuw,8579
45
+ fractal_server/app/routes/api/v2/history.py,sha256=BYsfBlvcBGbJCL47KlMpZDktXAHB8ft2nIaOQMMjqPA,18183
46
46
  fractal_server/app/routes/api/v2/images.py,sha256=k9wd44iwjCtEWSH9j6X6zToBwuOOo6J4FxSW7AGbPHA,8266
47
- fractal_server/app/routes/api/v2/job.py,sha256=05_uzX11wYWpGZLN159-7CFXGB9gnSDYdeLEvDAefpY,7250
47
+ fractal_server/app/routes/api/v2/job.py,sha256=vRN3Ovwami_4CpZw8zJN1azltMCh2ed42dlOfVHHG6Q,7274
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
50
- fractal_server/app/routes/api/v2/sharing.py,sha256=MvegcF3xaT9nztVwLiUisp4B8IrKRa2LVlSR2GGTqYk,9398
51
- fractal_server/app/routes/api/v2/status_legacy.py,sha256=XfU7sJS3luPziGzGxjiLmrLe4P-8OyBU7hTdcYmcyB8,6026
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
54
- fractal_server/app/routes/api/v2/task_collection.py,sha256=DC_qI7cv-4eT2be8opcU3LfkzXjNvLoo4FPCfT77UM0,12348
55
- fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=gzllPiZp94rNfmAZMegS0B6wZZa-JPvqrapsWb9dyeY,6920
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
58
- fractal_server/app/routes/api/v2/task_group_lifecycle.py,sha256=T0nDJpqZl1SEzp-Jtwf8YY0rJVTNis4Lv7CQXY8CH-Y,10523
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
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
49
+ fractal_server/app/routes/api/v2/project.py,sha256=TlcixNdrss6-0jSiFGnlLP-qCsuX8_nhUyagG5tip3c,5833
50
+ fractal_server/app/routes/api/v2/sharing.py,sha256=mwq8p6rQ4wE4ymli_azV-BYDbVk45RzYqMBei0wuzzk,9446
51
+ fractal_server/app/routes/api/v2/status_legacy.py,sha256=zP5YheZBoeffanUpVZvKYL4kYIiGIkGtR9W9GX0pXVE,6599
52
+ fractal_server/app/routes/api/v2/submit.py,sha256=HScEY2IC4xVLXBoe1Pwiy9bjNR1FnEuAJWjQTidEGFU,9562
53
+ fractal_server/app/routes/api/v2/task.py,sha256=gekExcUmk-A8psT0_D356U-j8k38aw_wrCO8kWgG2Tw,7536
54
+ fractal_server/app/routes/api/v2/task_collection.py,sha256=x6TMI3JeeIJQJS7bIbn3fnRZaxIxQlp-SQHr2ZVDLBw,12384
55
+ fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=9Ycm8-C_bgsEgjqyRLqa64e0HwMVYZWPYr--r-oomB4,6948
56
+ fractal_server/app/routes/api/v2/task_collection_pixi.py,sha256=oAKO4dr0wMjOn3hC73YczLFrl-DznffGPgiZUmnyFAY,7190
57
+ fractal_server/app/routes/api/v2/task_group.py,sha256=a9YzcXMwkoa_2x6mCz3U_qctE_BvyPIzaGFalF5Otus,8350
58
+ fractal_server/app/routes/api/v2/task_group_lifecycle.py,sha256=g20Egnwlw8Qvm1PzKK_64Fv9UKELmPy1Vt-sItNvQRk,10575
59
+ fractal_server/app/routes/api/v2/task_version_update.py,sha256=p0Bk8B7EZi9T0IWeDPqH7U7JNcjMGj1x72-ngZGgTOU,8497
60
+ fractal_server/app/routes/api/v2/workflow.py,sha256=EW6u-_O6ox3DVBYgrllMfCMHC-DNetUNT6OZudbThko,10830
61
+ fractal_server/app/routes/api/v2/workflow_import.py,sha256=zSCWKFzwIX2fWpxZJKXHbFk11nuUrgJL50-P0E_vYTc,9668
62
+ fractal_server/app/routes/api/v2/workflowtask.py,sha256=phHiQU8y4kTDaCJ6BQwTp4SPdE_L4MH3QTnWnkx1hcA,9225
63
63
  fractal_server/app/routes/auth/__init__.py,sha256=RghfjGuu0RTW8RxBCvaePx9KErO4rTkI96XgbtbeSJU,2337
64
- fractal_server/app/routes/auth/_aux_auth.py,sha256=gKdYTWUzxcU44Iep787zReWwdAs4kW5baNDXCPmiKn8,9195
65
- fractal_server/app/routes/auth/current_user.py,sha256=uDWttWo9isG69Jv1EGnnr2Ki5ZGd0D76jgjVDQMkn8c,3251
66
- fractal_server/app/routes/auth/group.py,sha256=uR98vdQHH-7BFl-Czj85ESPxT2yQymy4qtagaMrnUPU,6491
64
+ fractal_server/app/routes/auth/_aux_auth.py,sha256=s_boxuhPC60j74NmE8FopYPv_Fc4hiADvL0beWPcuE0,5474
65
+ fractal_server/app/routes/auth/current_user.py,sha256=Y_2Es3HFtTMuVUmWVHFFvk3vsRgmlqS_x5BwkeavlvI,5552
66
+ fractal_server/app/routes/auth/group.py,sha256=5bIM8LoUVv1C5-bMYoJbNSS8eESgVpK8-o47sUjMcZU,7293
67
67
  fractal_server/app/routes/auth/login.py,sha256=buVa5Y8T0cd_SW1CqC-zMv-3SfPxGJknf7MYlUyKOl0,567
68
68
  fractal_server/app/routes/auth/oauth.py,sha256=NxrwOWBGPe7hLPEnD66nfWPGMWzDM80LIrwtmONVw-4,2731
69
69
  fractal_server/app/routes/auth/register.py,sha256=IiUJhgY0ZrTs0RlBRRjoTv4wF5Gb3eXTInFV-dXkpsE,615
70
- fractal_server/app/routes/auth/router.py,sha256=Zip_fw9qJWtoXWjluznschyrCKb2n_rf3xWarSXMkgI,692
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
70
+ fractal_server/app/routes/auth/router.py,sha256=-E87A8h2UvcLucy5xjzKiWbXHVKcqxUmmZGeV_utEzA,598
71
+ fractal_server/app/routes/auth/users.py,sha256=2E1TEWRGprp-TyF39VJ3Bu6p9tyy37xObG0Ijqa1aHg,7089
73
72
  fractal_server/app/routes/aux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
73
  fractal_server/app/routes/aux/_job.py,sha256=n-UhONvomKyKkQDDqd0lFh2kCMhlCGXpfdMNW39R1E4,644
75
74
  fractal_server/app/routes/aux/_runner.py,sha256=-SvcXCVEV7Mb6q4PbbxuTCCruX6sAlR5QGXk9CzBVv8,979
76
75
  fractal_server/app/routes/aux/validate_user_profile.py,sha256=fGqJDdAFkbQoEIjqZ5F9-SDY_4os63R2EUMqODC7eBg,1969
77
76
  fractal_server/app/routes/pagination.py,sha256=C4XW6cnyDfyu1XMHXRN4wgk72lsS0UtlINZmwGZFb4Y,1174
78
77
  fractal_server/app/schemas/__init__.py,sha256=VIWJCaqokte3OljDLX00o-EC2d12rFoPb5HOLKQI94Y,86
79
- fractal_server/app/schemas/user.py,sha256=qixLVZWeANxX5TIWoruLjYE_oh4DMZ2q3vMgMBsnzQE,3294
80
- fractal_server/app/schemas/user_group.py,sha256=irel29GbffKCXNcyrAYbNSN3pCgmoUQ1wG32_s6jvos,1082
81
- fractal_server/app/schemas/v2/__init__.py,sha256=6W1uSthuLGXs9oOYnjmScoqJYkWyUTT-9cNHFZoTmkM,4005
78
+ fractal_server/app/schemas/user.py,sha256=ed1kXyVoCboNiHTQSA9EVGCZNIFByFknPluehHbYKmE,2900
79
+ fractal_server/app/schemas/user_group.py,sha256=uTTOVGoy89SxVDpJumjqOEWxqXWR41MNOTBDCyNxEDA,1478
80
+ fractal_server/app/schemas/v2/__init__.py,sha256=mMhdt4Jo-lyG8bITGAbpuyhDJx4MNgk-VSTKqcE6Ymo,4101
82
81
  fractal_server/app/schemas/v2/accounting.py,sha256=6EVUdPTkFY6Wb9-Vc0cIEZYVXwGEvJ3tP4YOXYE1hao,546
83
- fractal_server/app/schemas/v2/dataset.py,sha256=SBS3TwHxPRHtLvFu-Bm4eQlI96DIkCiFF7oKvfcfTOc,2736
84
- fractal_server/app/schemas/v2/dumps.py,sha256=UPtb1Rqkd48AFpWsVfcHcAjKGzF2ZoHLdYrAJzPdsSM,2276
82
+ fractal_server/app/schemas/v2/dataset.py,sha256=cBsEkny-EgNqFETMGRbJu5ChfYOnsKhkivqXK5dEOxQ,1938
83
+ fractal_server/app/schemas/v2/dumps.py,sha256=NrQYrfu3ze317DC7wDwjJYv6gYfkWWze25HmQmYJNhQ,2294
85
84
  fractal_server/app/schemas/v2/history.py,sha256=pZiMKfh6nMWbTp5MUtrnGySPKbeRFf5tM1VLFaTgGcw,1784
86
- fractal_server/app/schemas/v2/job.py,sha256=YnnxnrbI_l7EgZNzk_KgnuEuh0COg-RPoph2foHUvZo,3308
85
+ fractal_server/app/schemas/v2/job.py,sha256=BuiNzAX2Kl-b7LJnAiqCGDC9h6bGEjKvsHQIgf5mjHQ,3330
87
86
  fractal_server/app/schemas/v2/manifest.py,sha256=I8KyVZvW6r6_DrcKX5aZ9zJwa-Kk_u3gCKlz6HVPF5o,6655
88
87
  fractal_server/app/schemas/v2/profile.py,sha256=CB44vkjRzcxAhw_6J67dYcVKKbYKJS6MdmZAXKF1ous,3299
89
- fractal_server/app/schemas/v2/project.py,sha256=jTc4jhwdkO1Ht2K27AguA0z9wWX0CYKvV_sg0sNcf-E,648
90
- fractal_server/app/schemas/v2/resource.py,sha256=LPi1D67vGngOn5BWNicqAIHCKExaf2XyzuZKByo7wfc,6841
88
+ fractal_server/app/schemas/v2/project.py,sha256=7UC0aZLgtmkaAiPykeUj-9OZXhMkoyi3V-475UW_EQs,654
89
+ fractal_server/app/schemas/v2/resource.py,sha256=MSwMKEmX9qdmYg-_2VGELlmCobJ3Ih2ldG6-R16WDBg,6230
91
90
  fractal_server/app/schemas/v2/sharing.py,sha256=wHBiEmqhU53NokQ2rmm6xkH3lumBR6TdWw4nvDz6uww,1818
92
- fractal_server/app/schemas/v2/status_legacy.py,sha256=ajLm2p0wNfJ_lQX9Oq3NJn0jxQj50U3eZxuRjOIdOpg,949
93
- fractal_server/app/schemas/v2/task.py,sha256=Fd4n6vitliOuQyoofQ0daFy25QzIoWe9NPbXanNyrrE,4351
94
- fractal_server/app/schemas/v2/task_collection.py,sha256=ljGnZOmYg9pQ9PbYnNxLJDf4O2BDym-BQ_cXr-NWSd4,4590
95
- fractal_server/app/schemas/v2/task_group.py,sha256=HYwgv8KQWr1A8ihdz_FTmKAymlHh4AEPyfmYOhafE24,3472
96
- fractal_server/app/schemas/v2/workflow.py,sha256=87Aa92H6ceBbkDUsDhDqVNJyuBZuVRRAgFqNeg_djwE,1738
97
- fractal_server/app/schemas/v2/workflowtask.py,sha256=1k56KHwzZDZGjl7FG1yslj-MKtKKR5fZ5RKGlJbopNc,3608
98
- fractal_server/app/security/__init__.py,sha256=sblIH9DFCt_iyk22WzV6k4LuKdbvNPtS1HqPCHIiBJ4,18363
91
+ fractal_server/app/schemas/v2/status_legacy.py,sha256=eQT1zGxbkzSwd0EqclsOdZ60n1x6J3DB1CZ3m4LYyxc,955
92
+ fractal_server/app/schemas/v2/task.py,sha256=WkjliM8zujapC9CHTFme5ByjPCiln6qYKWJ_9gbcGOk,4363
93
+ fractal_server/app/schemas/v2/task_collection.py,sha256=QUiMAwckHSzjXlC_cyNSR1QX0fpxG1wKPcd95SE2qKo,4598
94
+ fractal_server/app/schemas/v2/task_group.py,sha256=4hNZUXnWYSozpLXR3JqBvGzfZBG2TbjqydckHHu2Aq0,3506
95
+ fractal_server/app/schemas/v2/workflow.py,sha256=L-dW6SzCH_VNoH6ENip44lTgGGqVYHHBk_3PtM-Ooy8,1772
96
+ fractal_server/app/schemas/v2/workflowtask.py,sha256=ckfPmbPTAn0lzbiaWQItdGxEUuWsRxiWBj898VEb1gw,3640
97
+ fractal_server/app/security/__init__.py,sha256=L-Q0wsh2GjDyeiT4FfgWTyfrSH1QA52cp9zl5U5OT9I,18360
99
98
  fractal_server/app/security/signup_email.py,sha256=ZnwwjpL6jyIkegHBebTqYYGGVtllLI0_x48K-yJtkNk,1969
100
- fractal_server/app/shutdown.py,sha256=bfEmf6Xdc906ES0zDDWsihmd6neQpGFyIc7qnadnNu8,2283
101
- fractal_server/config/__init__.py,sha256=WvcoE3qiY1qnkumv3qspcemCFw5iFG5NkSFR78vN4ks,562
102
- fractal_server/config/_data.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
+ fractal_server/app/shutdown.py,sha256=QU4DfNvqwUXlHiLORtYJit4DxlFQo014SKTfs4dcE2U,2295
100
+ fractal_server/config/__init__.py,sha256=ZCmroNB50sUxJiFtkW0a4fFtmfyPnL4LWhtKY5FbQfg,737
101
+ fractal_server/config/_data.py,sha256=M7bwGDrvTV2mIo9Y3BilzluCyEIlE-PyIjCdcTbzWZg,2804
103
102
  fractal_server/config/_database.py,sha256=0_FvboMkQEKKRxvr9uFdp98oiQwMTFbdCW3loTZNSY0,1846
104
103
  fractal_server/config/_email.py,sha256=vMwLHN9-beYp_-up-WkTpeyNUZk4EHwt3N2l6-PYnx4,4364
105
- fractal_server/config/_main.py,sha256=6splUmAPRD1J9HXkeZ-Vqif7Nw4ljJXIugpvRrcwPeI,2476
104
+ fractal_server/config/_main.py,sha256=s11lg9r-4hALGefG8xiMlc12ul0hL7ct4YviD-YBWWE,2230
106
105
  fractal_server/config/_oauth.py,sha256=UTmlFppDZcOQhr3RvkiG5XMqvr54XRAQ_Y-iR0V8N-8,2024
107
106
  fractal_server/config/_settings_config.py,sha256=tsyXQOnn9QKCFJD6hRo_dJXlQQyl70DbqgHMJoZ1xnY,144
108
- fractal_server/data_migrations/2_18_0.py,sha256=GSTs69gLnMJ0XSf59dIOARYu5aP4SSAG5Eid670yCgk,854
109
107
  fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
110
108
  fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
111
109
  fractal_server/exceptions.py,sha256=l6aZDk_6u_9PwDaQSoIFdI40ekpzqOJaxjx5rhW-HVI,141
112
110
  fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
113
111
  fractal_server/images/__init__.py,sha256=-_wjoKtSX02P1KjDxDP_EXKvmbONTRmbf7iGVTsyBpM,154
114
- fractal_server/images/models.py,sha256=5wtUmX3hRy8vyOb4SgezuIWcwUaB69HyXHg4zFMJkvk,1198
112
+ fractal_server/images/models.py,sha256=dNcCW7XzRRbqL86LJ5aGc6LUAqIPsZXMq67IZyGbIpQ,1242
115
113
  fractal_server/images/status_tools.py,sha256=Is2QWThbLCrVJuI0NpGv7TcWs1T8z8q_8Qsidr3TdBU,4932
116
114
  fractal_server/images/tools.py,sha256=37jVIU6RiAGbiyucNDlKe9J3yN3Y47NOvv-RJor9Jm0,4154
117
115
  fractal_server/logger.py,sha256=9EhRdgPnGdbJ51vxhOD42K0iaDRhKx7wuikpHoh9kzY,5302
118
- fractal_server/main.py,sha256=vCDvUndmLIkxUX8EAtyA4Wu9YiIHGZge5J37Yn2U5R4,6537
116
+ fractal_server/main.py,sha256=6hI23zI6x3Hz1Cj7JDBNHFYVg5yCymL8oe5UyIc9T2Q,4420
119
117
  fractal_server/migrations/env.py,sha256=nfyBpMIOT3kny6t-b-tUjyRjZ4k906bb1_wCQ7me1BI,1353
120
118
  fractal_server/migrations/naming_convention.py,sha256=bSEMiMZeArmWKrUk-12lhnOw1pAFMg6LEl7yucohPqc,263
121
119
  fractal_server/migrations/versions/034a469ec2eb_task_groups.py,sha256=uuf0sJibC4Am1HDb_dX_Jdj2oinptlg2ojiHwCpjDCY,6155
@@ -137,11 +135,9 @@ fractal_server/migrations/versions/5bf02391cfef_v2.py,sha256=jTNyZ8H5VDh4eRvCEy-
137
135
  fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py,sha256=vJ6nDb7UnkCMIPg2zNM7ZE0JOTvaqFL3Fe9UarP-ivM,1633
138
136
  fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py,sha256=qpHZC97AduFk5_G0xHs9akhnhpzb1LZooYCTPHy7n28,1353
139
137
  fractal_server/migrations/versions/7673fe18c05d_remove_project_dir_server_default.py,sha256=PwTfY9Kq3_cwb5G4E0sM9u7UjzOhOwsYCspymmPgipQ,795
140
- fractal_server/migrations/versions/7910eed4cf97_user_project_dirs_and_usergroup_viewer_.py,sha256=FvX6dq0DsbKmF-M1TZ63b6lpPGCiJev88sVmQOU80M4,1730
141
138
  fractal_server/migrations/versions/791ce783d3d8_add_indices.py,sha256=IeWDVBRryFcFYIJVXhj-QJ6jczGnN_41K7sh6RYF0C4,1154
142
139
  fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py,sha256=bLFmGJF7jLkices6PJFO1pmit_4-bu8rwykR6ZWDiCQ,6378
143
140
  fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py,sha256=mOlqERL0MrF6Inp4onoSB2mAnyGeh4gW_IysCeCHTj4,2685
144
- fractal_server/migrations/versions/88270f589c9b_add_prevent_new_submissions.py,sha256=POieZSMOgznkvEIIEmNznVN50cDZCAjGnFyLsfBckEg,980
145
141
  fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py,sha256=Sm4IFSsAi0zM9HypNkbDQSAWzhrRWFjhGIjp6Lz9VLw,1081
146
142
  fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py,sha256=PevYomdu8_lfxfSO5gSbaByDXLdj9AzsHy5WgsOtsJk,1115
147
143
  fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py,sha256=UJnpLSGTahYqujwXrKFVnXxsggh27EONfsyWb3H9qmM,1509
@@ -168,7 +164,6 @@ fractal_server/migrations/versions/e0e717ae2f26_delete_linkuserproject_ondelete_
168
164
  fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py,sha256=x6eCYsx_Cb7yDC5K_gV2RNHeCF_K-964NtZF1mmxUb0,964
169
165
  fractal_server/migrations/versions/e81103413827_add_job_type_filters.py,sha256=w0HYX1645_JXsfUB259OrmXLUasOgRnpKvJJaF44GpQ,890
170
166
  fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py,sha256=3ppXZxLsljAlN5Def9lHuEZlf_7hMXaIIeTV2N5zUXY,1222
171
- fractal_server/migrations/versions/f0702066b007_one_submitted_job_per_dataset.py,sha256=BtkgkFuitYuJ0TbRBPbVMEtaj3YPa5P-LnjvT4xhz5U,1064
172
167
  fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py,sha256=z18Qyts6_49uVhgaXWGQNzF4adnDmVLv3hKHeE9qD9E,1007
173
168
  fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py,sha256=TjAkD_275nDVSURAC5wzJbHDBG0yY2_vkLvw4iHeYoc,747
174
169
  fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py,sha256=Fr6USeI6LAK9vqbRFvCBmFAiERaEDuZXgSfjUvlc3EU,3885
@@ -177,7 +172,7 @@ fractal_server/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
177
172
  fractal_server/runner/components.py,sha256=-Ii5l8d_V6f5DFOd-Zsr8VYmOsyqw0Hox9fEFQiuqxY,66
178
173
  fractal_server/runner/config/__init__.py,sha256=a-vSrvWBeMVnxTtYoy-f5Ibt_mM8MM3F7jqnPvvjHSY,108
179
174
  fractal_server/runner/config/_local.py,sha256=IHWtxpKuJDdsQNpk8Q5bNL4DEJunNkNJkLfetfnwmQM,788
180
- fractal_server/runner/config/_slurm.py,sha256=eFtfo9mXAoo-MEk-XZIK7OfwD21KjLAtdMzWfSvaypA,3735
175
+ fractal_server/runner/config/_slurm.py,sha256=iC4gBolGaYD8SX5FMZu7mq9xI6-kepzeZ6bETrFf0pg,3636
181
176
  fractal_server/runner/config/slurm_mem_to_MB.py,sha256=6KmrIC-NymQjb9-bIQjNYQx6mE0OoKoZxdi6WQnWOHw,2003
182
177
  fractal_server/runner/exceptions.py,sha256=N8DLn7tuV8zMSdr8xdJN0aIdytPveSCeQ1Y5IoxXW-8,1778
183
178
  fractal_server/runner/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -192,7 +187,7 @@ fractal_server/runner/executors/slurm_common/_job_states.py,sha256=nuV-Zba38kDrR
192
187
  fractal_server/runner/executors/slurm_common/base_slurm_runner.py,sha256=pU2Szcg3tv7vinLJXbzSgYlfEPLY_b0R0YDR-FSYLc8,41873
193
188
  fractal_server/runner/executors/slurm_common/get_slurm_config.py,sha256=B6EKjob8Y-DiJ8YbXf2CeoY7B8cwvkpKvlW8Ce6bbx0,7115
194
189
  fractal_server/runner/executors/slurm_common/remote.py,sha256=8pTMTRp_LjzoUr3FtFTfdvDhuLnqzY6HT-T9pzrVLw4,3845
195
- fractal_server/runner/executors/slurm_common/slurm_config.py,sha256=JcAV1xNhzBjpZFTRRbQm0EN9Ti4udNOjseGQcFlFnuM,7897
190
+ fractal_server/runner/executors/slurm_common/slurm_config.py,sha256=VSow-JfxBkdmkMnTBeZ01nnMXXtlqV8ysaSYcdE-_PU,7896
196
191
  fractal_server/runner/executors/slurm_common/slurm_job_task_models.py,sha256=VeX40CvU5fckUpSyXlzb3EDE9xxPXkT2sZKLXq_6Ooc,3493
197
192
  fractal_server/runner/executors/slurm_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
198
193
  fractal_server/runner/executors/slurm_ssh/run_subprocess.py,sha256=SyW6t4egvbiARph2YkFjc88Hj94fCamZVi50L7ph8VM,996
@@ -205,15 +200,15 @@ fractal_server/runner/filenames.py,sha256=lPnxKHtdRizr6FqG3zOdjDPyWA7GoaJGTtiuJV
205
200
  fractal_server/runner/set_start_and_last_task_index.py,sha256=NsioSzfEpGyo9ZKrV5KsbxeI7d5V3tE678Y3IAo5rHM,1218
206
201
  fractal_server/runner/task_files.py,sha256=n54A1x0MQRGSgqhzOTE-TPzEGJymUhQIUV9ApcVCV9M,4318
207
202
  fractal_server/runner/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
208
- fractal_server/runner/v2/_local.py,sha256=aSnniBh_qPti94ShAOFqIAEJ_BRO0_2D_yrv1i1pRs4,3870
209
- fractal_server/runner/v2/_slurm_ssh.py,sha256=r9QgBOrW9PqWc-8lUNLpX6M5pH3aFnoMazHlGovJxnQ,4561
210
- fractal_server/runner/v2/_slurm_sudo.py,sha256=UsB1P6AZB0L1QrBvR2Lq9FoJaxnhbakLAKK63E1KKtU,4456
203
+ fractal_server/runner/v2/_local.py,sha256=XT6uFi0wwO5ZxR_qoszgibkUqal-pNPWWcd101NFgCg,3838
204
+ fractal_server/runner/v2/_slurm_ssh.py,sha256=GcpBLvvSwadxnchS5phOXVk42BlADeDi-xr2K6FBIyU,4529
205
+ fractal_server/runner/v2/_slurm_sudo.py,sha256=iexw_hpUf-jVngMRxntiKIwNT_Dvdbk2R-yHHWEFnws,4424
211
206
  fractal_server/runner/v2/db_tools.py,sha256=twqFWVENkxWCYglb__BAXASDuJppwHE-VxdEUC67mq0,3317
212
207
  fractal_server/runner/v2/deduplicate_list.py,sha256=TWxHDucal0VZPswy_H7IFaEb4ddGnpl_QBwJ8g9Ybug,668
213
208
  fractal_server/runner/v2/merge_outputs.py,sha256=0ahaSwdMFAoEhxVaEaO9nSJuKIcWg9pDZ356ktSHcC0,897
214
- fractal_server/runner/v2/runner.py,sha256=hP3zxGPlrHcNQAYNa808ARAwXWPTea8QsJINSXu9dRE,20958
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
209
+ fractal_server/runner/v2/runner.py,sha256=zX_gResJlzfdyBkcmadhaRAYWhgfNbCqm3jF0l3lbGo,20178
210
+ fractal_server/runner/v2/runner_functions.py,sha256=308EwXZ2hBAnavokaywkVcaDkywQIillGibCvJB5y_E,19634
211
+ fractal_server/runner/v2/submit_workflow.py,sha256=tNJmlgSNOCjesN8tEGtq3sz1RYB67lP-tgRcKKTTSvs,11453
217
212
  fractal_server/runner/v2/task_interface.py,sha256=ftPPpOU16rbJD8q-QV7o_3ey8W7MQTFuWJiYUr4OmF4,2532
218
213
  fractal_server/runner/versions.py,sha256=uz59Dxj7BphnFnr-p0kyaZRH0h4w5Xkd0UJNVGtt4ds,474
219
214
  fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
@@ -227,24 +222,24 @@ fractal_server/tasks/config/_python.py,sha256=lvjIzuV9mMyDmRadx2yTTKu1abx1EE_gnZ
227
222
  fractal_server/tasks/utils.py,sha256=izZthoEmt5NcnC8ktTmbMtNnrCD8zKir37NyCfPJDX4,290
228
223
  fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
229
224
  fractal_server/tasks/v2/local/__init__.py,sha256=2dJqJIwn9UEANg8lPFprxVLk3ug-4xYIb5pvIsqPb5s,353
230
- fractal_server/tasks/v2/local/_utils.py,sha256=2MerOEGvr9zR4ATUBAV4MSS-ixODqiRpS5S--r2mSMM,3487
231
- fractal_server/tasks/v2/local/collect.py,sha256=Vu64E_BhP4Pzut8Fhs0tDy91-Z9HB6Ezj1qA57W2KA8,12108
232
- fractal_server/tasks/v2/local/collect_pixi.py,sha256=uhfXd4U8tfCwItzhIizeY52EAwijbuws4a0Pw5LwuV4,11480
233
- fractal_server/tasks/v2/local/deactivate.py,sha256=GWB3Krx7-FJTLa2yCUHFyQMq202_MizoPl6wcuc33D8,9946
234
- fractal_server/tasks/v2/local/deactivate_pixi.py,sha256=VgageDeNHaOsMR7ANpac2QtzMnaagzGzSP9jY2EHY0k,3709
235
- fractal_server/tasks/v2/local/delete.py,sha256=PeLbAkNEsknClZeM9Dg8rYbemmNetr6wZ7TLGLO8x-k,2941
236
- fractal_server/tasks/v2/local/reactivate.py,sha256=c8uyAKBJbAhMt2y0-GILe7IIUxbhtihh_HLxytsJr1g,6065
237
- fractal_server/tasks/v2/local/reactivate_pixi.py,sha256=cWLe-lrwQlpQhPtKrMg5ClGVd5LVYzRpgLZQ2aC3PKU,8211
225
+ fractal_server/tasks/v2/local/_utils.py,sha256=J9E3EhY8VKe7aaHRJqv5aT7MOTFPZ-7lDCFqUXXAw1E,3491
226
+ fractal_server/tasks/v2/local/collect.py,sha256=vtDGEwLoKrvZG-lFnOUbtQabM-1ob16hzLYv440hQ58,12146
227
+ fractal_server/tasks/v2/local/collect_pixi.py,sha256=XJZpjmXZwpKc6IPU43EMtQlncPnSHi0OA9wpE_P4hiw,11518
228
+ fractal_server/tasks/v2/local/deactivate.py,sha256=jBkgDOp8vHQCSpDaM5jH7YhYGZor25rQtSsVkvn2rHM,9960
229
+ fractal_server/tasks/v2/local/deactivate_pixi.py,sha256=p5_TVz5p-4yvH6TeZ0KtgEPnBGQ0Lxs46ls0AkBx3JA,3715
230
+ fractal_server/tasks/v2/local/delete.py,sha256=BhIfPQ-Ylfq3D5969GFe_eMTQm6oCEiz2ghwThqZVKY,2951
231
+ fractal_server/tasks/v2/local/reactivate.py,sha256=7USin1BRWmmN9OZnRYiTa3gPN5B_xdEeV8A91bA1YIc,6075
232
+ fractal_server/tasks/v2/local/reactivate_pixi.py,sha256=SOblcb_IlRTCyaVvhW-KIxHw2GbVKMtx8VPauhFHvbs,8221
238
233
  fractal_server/tasks/v2/ssh/__init__.py,sha256=dPK6BtEZVh1GiFP05j1RKTEnZvjJez8o2KkMC2hWXaw,339
239
234
  fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py,sha256=3iixFaS5Uqhh28qAv_yBSW4YvffqIhE0LK0gQee9qjI,7448
240
235
  fractal_server/tasks/v2/ssh/_utils.py,sha256=a2oM8zh68zmcUuRLY_5y_9wA9MNd3NOM-w-P7RgwX2E,6112
241
- fractal_server/tasks/v2/ssh/collect.py,sha256=1RpAbuUKQodgDCuVOfN-DZC1uhIqHEhaVSSx3v0DwHs,14487
242
- fractal_server/tasks/v2/ssh/collect_pixi.py,sha256=9Pe-oaCu-Cih8c5vcW2Xpt9GuZYkju6otrnJldXUGfA,15861
243
- fractal_server/tasks/v2/ssh/deactivate.py,sha256=okNPNKnym8nCE7P_M-92TDUM0nRdD_NZake34R1tHcI,12675
244
- fractal_server/tasks/v2/ssh/deactivate_pixi.py,sha256=tGuiOs9JXZoSmDqyEg3ZnmMkYwplkK1OkvMuGJpez00,4948
245
- fractal_server/tasks/v2/ssh/delete.py,sha256=hUOGah3MyeUG-jBbljvkpkwY2KkdXK-i8zV8LK2sBVQ,4459
246
- fractal_server/tasks/v2/ssh/reactivate.py,sha256=gxsgSDWVOw9reQumP92yC8SwNVcQrd4mvUh-sDoa7Uc,8528
247
- fractal_server/tasks/v2/ssh/reactivate_pixi.py,sha256=7jfODVCsHkqypPaJcQ9kozgUIPVPujmzgYp3gRx8dvs,11889
236
+ fractal_server/tasks/v2/ssh/collect.py,sha256=KHhpTGURX1H0A1O4asoH-idTgHpW2-Vx1fsQPhi5RlY,14497
237
+ fractal_server/tasks/v2/ssh/collect_pixi.py,sha256=Pg9o1qnBFRpBwpt7abjrewDjPURDCwoaKraEq8AcOk0,15871
238
+ fractal_server/tasks/v2/ssh/deactivate.py,sha256=nbm9lnWtegql8rITeM5-VmsL6RD7TiKZKvdzl39Shwk,12689
239
+ fractal_server/tasks/v2/ssh/deactivate_pixi.py,sha256=6p2quZe8Kg0gK_zoF21-F8guFBjrmNvOZCRaUOYUb3E,4952
240
+ fractal_server/tasks/v2/ssh/delete.py,sha256=63qUL9p54Qjw0FSSuKossimON6rTJb9Ak8imVN3JhM0,4469
241
+ fractal_server/tasks/v2/ssh/reactivate.py,sha256=TX6MAlVai4766PDJ5qfCg5YIUwhJkJpnungdzojCiaY,8538
242
+ fractal_server/tasks/v2/ssh/reactivate_pixi.py,sha256=ohL-rpMS8Ey07-mVnc-dZrY3FKtpzAJRqcLsUEDzjZ8,11899
248
243
  fractal_server/tasks/v2/templates/1_create_venv.sh,sha256=a9viswsex_26lNStFgTjtSM4_K1eiyA2qfSQAwhH1Pw,561
249
244
  fractal_server/tasks/v2/templates/2_pip_install.sh,sha256=IS1iXCvFTb6owHAIrvTrnPN1g7UWESkZyTTVdBBLQ3Y,2168
250
245
  fractal_server/tasks/v2/templates/3_pip_freeze.sh,sha256=oxqXMd-ZW8jtHjkwdwchbtWaoW6QHIk2Ksgreygo4no,181
@@ -254,22 +249,22 @@ fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh,sha256=ddF-Pz-MTv
254
249
  fractal_server/tasks/v2/templates/pixi_1_extract.sh,sha256=vRRiBhwdE0NAXxornzG4P8QlZ5vjn-f9lJTtigA_Q_g,1112
255
250
  fractal_server/tasks/v2/templates/pixi_2_install.sh,sha256=0vWP7PscdPlGwlukD752eKeQVRis4PwG2f2IhPK_8RA,1614
256
251
  fractal_server/tasks/v2/templates/pixi_3_post_install.sh,sha256=eiTcg-eTSo-itmeEBt5am0jSji1-2MvYamm-HqiCfO4,2514
257
- fractal_server/tasks/v2/utils_background.py,sha256=w1VVFuPql8KXWdKr64iZWoykUDGtMCQA8VQFHqeObBU,4828
258
- fractal_server/tasks/v2/utils_database.py,sha256=Kyg-2fN0rx5eKKiFg1FtcJy82-7NAPJHEAGV1TvRkjI,1787
252
+ fractal_server/tasks/v2/utils_background.py,sha256=Rc_dO3Y89i3oI3tLgqrvJNwbL-E9tWg4TskQYqTDX3E,4842
253
+ fractal_server/tasks/v2/utils_database.py,sha256=C1td6m6ab1NdXVoT6stvVdrY_3FNck8OkRZZhn9h8ZA,1797
259
254
  fractal_server/tasks/v2/utils_package_names.py,sha256=-FAcbwBHsjyvhIK0QKue9_0xJUfRVdKMSIU_-gnLOR0,2381
260
255
  fractal_server/tasks/v2/utils_pixi.py,sha256=Z0FnRqVynSvXDDeFL0anz7zwKrBDLGdQxyuJdipt2DI,3411
261
256
  fractal_server/tasks/v2/utils_python_interpreter.py,sha256=36AvrMoydr9w6Rm_7hKl5QK8zYI0KIm4Pv8WHANWwjE,658
262
257
  fractal_server/tasks/v2/utils_templates.py,sha256=L5GblhIKJwyzUbCORj1et5mh-7mG19nT5kmIpxOEj90,3489
263
- fractal_server/types/__init__.py,sha256=ENzSmiU4niKK0CLWN0AfdzsbRsTCrUMcFeANRvNZ5aU,3721
264
- fractal_server/types/validators/__init__.py,sha256=wIMRF13prXlVbNrsktPPhvyJ-WIk80c3bPVQP53kQoo,592
265
- fractal_server/types/validators/_common_validators.py,sha256=gzSl-RcmiWM874RoQw0XV7DVo853RaTUJhbiVbDQO3E,1993
258
+ fractal_server/types/__init__.py,sha256=z5jzdESBld-orcOyBe6J5I-V-CQfY64nRYVFQXZUlWs,2934
259
+ fractal_server/types/validators/__init__.py,sha256=5uj6KJ9MelFZgyoq3MzXLhgWCl0yiriS7XKmb0gathg,392
260
+ fractal_server/types/validators/_common_validators.py,sha256=LTIQPfOPBM-KjxPgbeCLvLFwSESxAQjppzON9pt_RDQ,1148
266
261
  fractal_server/types/validators/_filter_validators.py,sha256=irmjzycmiR6F4fmWUeA45Pdh7AeLufwVjNItskDsknk,831
267
262
  fractal_server/types/validators/_workflow_task_arguments_validators.py,sha256=zt4TQBiLiNVD3yMYbN-dkX0AWRAjG4vRv3FIybh9zLQ,372
268
263
  fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
269
264
  fractal_server/utils.py,sha256=-rjg8QTXQcKweXjn0NcmETFs1_uM9PGnbl0Q7c4ERPM,2181
270
265
  fractal_server/zip_tools.py,sha256=Uhn-ax4_9g1PJ32BdyaX30hFpAeVOv2tZYTUK-zVn1E,5719
271
- fractal_server-2.18.0.dist-info/METADATA,sha256=1shbTm__SM3ftoWkoNapkTlOu1idAlW3j0K0fjEHcGo,4275
272
- fractal_server-2.18.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
273
- fractal_server-2.18.0.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
274
- fractal_server-2.18.0.dist-info/licenses/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
275
- fractal_server-2.18.0.dist-info/RECORD,,
266
+ fractal_server-2.18.0a0.dist-info/METADATA,sha256=Z6QtIkxxrETcp7P-PYKpvhf1xAhqzoEuwwZtkfGz3gs,4277
267
+ fractal_server-2.18.0a0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
268
+ fractal_server-2.18.0a0.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
269
+ fractal_server-2.18.0a0.dist-info/licenses/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
270
+ fractal_server-2.18.0a0.dist-info/RECORD,,
@@ -1,43 +0,0 @@
1
- from fastapi import APIRouter
2
- from fastapi import Depends
3
- from sqlalchemy.ext.asyncio import AsyncSession
4
- from sqlmodel import select
5
-
6
- from fractal_server.app.db import get_async_db
7
- from fractal_server.app.models import UserOAuth
8
- from fractal_server.app.models.linkuserproject import LinkUserProjectV2
9
- from fractal_server.app.models.v2.dataset import DatasetV2
10
- from fractal_server.app.models.v2.project import ProjectV2
11
- from fractal_server.app.routes.auth import current_user_act_ver
12
-
13
- router_viewer_paths = APIRouter()
14
-
15
-
16
- @router_viewer_paths.get(
17
- "/current-user/allowed-viewer-paths/", response_model=list[str]
18
- )
19
- async def get_current_user_allowed_viewer_paths(
20
- include_shared_projects: bool = True,
21
- current_user: UserOAuth = Depends(current_user_act_ver),
22
- db: AsyncSession = Depends(get_async_db),
23
- ) -> list[str]:
24
- """
25
- Returns the allowed viewer paths for current user.
26
- """
27
- authorized_paths = current_user.project_dirs.copy()
28
-
29
- if include_shared_projects:
30
- res = await db.execute(
31
- select(DatasetV2.zarr_dir)
32
- .join(ProjectV2, ProjectV2.id == DatasetV2.project_id)
33
- .join(
34
- LinkUserProjectV2, LinkUserProjectV2.project_id == ProjectV2.id
35
- )
36
- .where(LinkUserProjectV2.user_id == current_user.id)
37
- .where(LinkUserProjectV2.is_verified.is_(True))
38
- )
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
@@ -1,30 +0,0 @@
1
- import logging
2
- import sys
3
- from os.path import normpath
4
-
5
- from sqlalchemy.orm.attributes import flag_modified
6
- from sqlmodel import select
7
-
8
- from fractal_server.app.db import get_sync_db
9
- from fractal_server.app.models import UserOAuth
10
-
11
- logging.basicConfig(level=logging.INFO)
12
-
13
-
14
- def fix_db():
15
- logging.info("START - fix db")
16
-
17
- with next(get_sync_db()) as db:
18
- res = db.execute(select(UserOAuth).order_by(UserOAuth.email))
19
- user_list = res.scalars().unique().all()
20
-
21
- for user in user_list:
22
- logging.info(f"Now handling user {user.email}.")
23
- if user.project_dirs != []:
24
- sys.exit(f"Non empty `project_dirs` for User[{user.id}]")
25
- user.project_dirs.append(normpath(user.project_dir))
26
- flag_modified(user, "project_dirs")
27
-
28
- db.commit()
29
-
30
- logging.info("END - fix db")
@@ -1,60 +0,0 @@
1
- """User project_dirs and UserGroup viewer paths
2
-
3
- Revision ID: 7910eed4cf97
4
- Revises: bc0e8b3327a7
5
- Create Date: 2025-11-27 16:02:51.824653
6
-
7
- """
8
-
9
- import sqlalchemy as sa
10
- from alembic import op
11
- from sqlalchemy.dialects import postgresql
12
-
13
- # revision identifiers, used by Alembic.
14
- revision = "7910eed4cf97"
15
- down_revision = "bc0e8b3327a7"
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("user_oauth", schema=None) as batch_op:
23
- batch_op.add_column(
24
- sa.Column(
25
- "project_dirs",
26
- postgresql.ARRAY(sa.String()),
27
- server_default="{}",
28
- nullable=False,
29
- )
30
- )
31
- batch_op.alter_column(
32
- "project_dir", existing_type=sa.VARCHAR(), nullable=True
33
- )
34
-
35
- with op.batch_alter_table("usergroup", schema=None) as batch_op:
36
- batch_op.drop_column("viewer_paths")
37
-
38
- # ### end Alembic commands ###
39
-
40
-
41
- def downgrade() -> None:
42
- # ### commands auto generated by Alembic - please adjust! ###
43
- with op.batch_alter_table("usergroup", schema=None) as batch_op:
44
- batch_op.add_column(
45
- sa.Column(
46
- "viewer_paths",
47
- postgresql.JSONB(astext_type=sa.Text()),
48
- server_default=sa.text("'[]'::json"),
49
- autoincrement=False,
50
- nullable=False,
51
- )
52
- )
53
-
54
- with op.batch_alter_table("user_oauth", schema=None) as batch_op:
55
- batch_op.alter_column(
56
- "project_dir", existing_type=sa.VARCHAR(), nullable=False
57
- )
58
- batch_op.drop_column("project_dirs")
59
-
60
- # ### end Alembic commands ###