fractal-server 2.17.1a0__py3-none-any.whl → 2.17.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. fractal_server/__init__.py +1 -1
  2. fractal_server/__main__.py +19 -18
  3. fractal_server/app/db/__init__.py +3 -3
  4. fractal_server/app/models/__init__.py +1 -1
  5. fractal_server/app/models/linkuserproject.py +3 -1
  6. fractal_server/app/models/security.py +22 -17
  7. fractal_server/app/models/v2/__init__.py +3 -1
  8. fractal_server/app/models/v2/accounting.py +9 -1
  9. fractal_server/app/models/v2/dataset.py +5 -1
  10. fractal_server/app/models/v2/history.py +15 -1
  11. fractal_server/app/models/v2/job.py +4 -0
  12. fractal_server/app/models/v2/profile.py +29 -0
  13. fractal_server/app/models/v2/project.py +5 -14
  14. fractal_server/app/models/v2/resource.py +4 -0
  15. fractal_server/app/models/v2/task_group.py +5 -7
  16. fractal_server/app/models/v2/workflow.py +2 -1
  17. fractal_server/app/routes/admin/v2/__init__.py +1 -2
  18. fractal_server/app/routes/admin/v2/accounting.py +1 -1
  19. fractal_server/app/routes/admin/v2/job.py +9 -9
  20. fractal_server/app/routes/admin/v2/profile.py +3 -2
  21. fractal_server/app/routes/admin/v2/resource.py +5 -5
  22. fractal_server/app/routes/admin/v2/task.py +28 -18
  23. fractal_server/app/routes/admin/v2/task_group.py +0 -1
  24. fractal_server/app/routes/admin/v2/task_group_lifecycle.py +1 -2
  25. fractal_server/app/routes/api/__init__.py +1 -0
  26. fractal_server/app/routes/api/v2/__init__.py +5 -6
  27. fractal_server/app/routes/api/v2/_aux_functions.py +70 -63
  28. fractal_server/app/routes/api/v2/_aux_functions_history.py +43 -20
  29. fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +2 -4
  30. fractal_server/app/routes/api/v2/_aux_functions_tasks.py +5 -7
  31. fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py +1 -2
  32. fractal_server/app/routes/api/v2/dataset.py +13 -32
  33. fractal_server/app/routes/api/v2/history.py +35 -21
  34. fractal_server/app/routes/api/v2/images.py +3 -2
  35. fractal_server/app/routes/api/v2/job.py +17 -14
  36. fractal_server/app/routes/api/v2/pre_submission_checks.py +5 -4
  37. fractal_server/app/routes/api/v2/project.py +22 -17
  38. fractal_server/app/routes/api/v2/status_legacy.py +12 -11
  39. fractal_server/app/routes/api/v2/submit.py +11 -12
  40. fractal_server/app/routes/api/v2/task.py +4 -3
  41. fractal_server/app/routes/api/v2/task_collection.py +28 -30
  42. fractal_server/app/routes/api/v2/task_collection_custom.py +8 -7
  43. fractal_server/app/routes/api/v2/task_collection_pixi.py +1 -2
  44. fractal_server/app/routes/api/v2/task_group.py +7 -6
  45. fractal_server/app/routes/api/v2/task_group_lifecycle.py +6 -6
  46. fractal_server/app/routes/api/v2/task_version_update.py +13 -12
  47. fractal_server/app/routes/api/v2/workflow.py +14 -31
  48. fractal_server/app/routes/api/v2/workflow_import.py +17 -19
  49. fractal_server/app/routes/api/v2/workflowtask.py +10 -12
  50. fractal_server/app/routes/auth/__init__.py +1 -3
  51. fractal_server/app/routes/auth/_aux_auth.py +1 -2
  52. fractal_server/app/routes/auth/current_user.py +4 -5
  53. fractal_server/app/routes/auth/group.py +7 -5
  54. fractal_server/app/routes/auth/login.py +1 -0
  55. fractal_server/app/routes/auth/oauth.py +4 -3
  56. fractal_server/app/routes/auth/register.py +4 -2
  57. fractal_server/app/routes/auth/users.py +10 -10
  58. fractal_server/app/routes/aux/_job.py +1 -1
  59. fractal_server/app/routes/aux/_runner.py +2 -2
  60. fractal_server/app/routes/pagination.py +1 -1
  61. fractal_server/app/schemas/user.py +3 -3
  62. fractal_server/app/schemas/v2/accounting.py +11 -0
  63. fractal_server/app/schemas/v2/dataset.py +28 -4
  64. fractal_server/app/schemas/v2/dumps.py +1 -0
  65. fractal_server/app/schemas/v2/manifest.py +4 -3
  66. fractal_server/app/schemas/v2/profile.py +53 -2
  67. fractal_server/app/schemas/v2/resource.py +109 -13
  68. fractal_server/app/schemas/v2/task.py +0 -1
  69. fractal_server/app/schemas/v2/task_collection.py +1 -1
  70. fractal_server/app/schemas/v2/workflowtask.py +4 -3
  71. fractal_server/app/security/__init__.py +4 -7
  72. fractal_server/app/security/signup_email.py +4 -5
  73. fractal_server/app/shutdown.py +23 -19
  74. fractal_server/config/_data.py +36 -25
  75. fractal_server/config/_database.py +19 -20
  76. fractal_server/config/_email.py +30 -38
  77. fractal_server/config/_main.py +34 -53
  78. fractal_server/config/_oauth.py +17 -21
  79. fractal_server/exceptions.py +4 -0
  80. fractal_server/images/models.py +3 -3
  81. fractal_server/images/status_tools.py +4 -2
  82. fractal_server/logger.py +1 -1
  83. fractal_server/main.py +4 -3
  84. fractal_server/migrations/versions/034a469ec2eb_task_groups.py +4 -8
  85. fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +1 -1
  86. fractal_server/migrations/versions/0f5f85bb2ae7_add_pre_pinned_packages.py +1 -0
  87. fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +1 -1
  88. fractal_server/migrations/versions/1a83a5260664_rename.py +1 -1
  89. fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +1 -0
  90. fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +1 -1
  91. fractal_server/migrations/versions/40d6d6511b20_add_index_to_history_models.py +47 -0
  92. fractal_server/migrations/versions/45fbb391d7af_make_resource_id_fk_non_nullable.py +46 -0
  93. fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +1 -0
  94. fractal_server/migrations/versions/49d0856e9569_drop_table.py +62 -0
  95. fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +1 -1
  96. fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +1 -1
  97. fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +2 -1
  98. fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +7 -19
  99. fractal_server/migrations/versions/5bf02391cfef_v2.py +4 -10
  100. fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +1 -0
  101. fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +1 -1
  102. fractal_server/migrations/versions/7673fe18c05d_remove_project_dir_server_default.py +29 -0
  103. fractal_server/migrations/versions/791ce783d3d8_add_indices.py +1 -1
  104. fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py +1 -0
  105. fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +1 -0
  106. fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +2 -4
  107. fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +1 -1
  108. fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +1 -0
  109. fractal_server/migrations/versions/969d84257cac_add_historyrun_task_id.py +1 -1
  110. fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +1 -1
  111. fractal_server/migrations/versions/981d588fe248_add_executor_error_log.py +1 -1
  112. fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +2 -4
  113. fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +1 -1
  114. fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +1 -1
  115. fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +1 -1
  116. fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +1 -1
  117. fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +1 -0
  118. fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +1 -0
  119. fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py +1 -1
  120. fractal_server/migrations/versions/b3ffb095f973_json_to_jsonb.py +1 -0
  121. fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +1 -1
  122. fractal_server/migrations/versions/caba9fb1ea5e_drop_useroauth_user_settings_id.py +49 -0
  123. fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +4 -9
  124. fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +1 -0
  125. fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +1 -1
  126. fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +1 -0
  127. fractal_server/migrations/versions/e0e717ae2f26_delete_linkuserproject_ondelete_project.py +50 -0
  128. fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +1 -0
  129. fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +1 -1
  130. fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +1 -0
  131. fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +1 -1
  132. fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +1 -0
  133. fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +4 -9
  134. fractal_server/runner/config/_local.py +8 -5
  135. fractal_server/runner/config/_slurm.py +37 -33
  136. fractal_server/runner/config/slurm_mem_to_MB.py +0 -1
  137. fractal_server/runner/executors/base_runner.py +29 -4
  138. fractal_server/runner/executors/local/get_local_config.py +1 -0
  139. fractal_server/runner/executors/local/runner.py +14 -13
  140. fractal_server/runner/executors/slurm_common/_batching.py +5 -10
  141. fractal_server/runner/executors/slurm_common/base_slurm_runner.py +53 -27
  142. fractal_server/runner/executors/slurm_common/get_slurm_config.py +14 -7
  143. fractal_server/runner/executors/slurm_common/remote.py +3 -1
  144. fractal_server/runner/executors/slurm_common/slurm_config.py +1 -0
  145. fractal_server/runner/executors/slurm_common/slurm_job_task_models.py +1 -3
  146. fractal_server/runner/executors/slurm_ssh/runner.py +16 -11
  147. fractal_server/runner/executors/slurm_ssh/tar_commands.py +1 -0
  148. fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py +1 -0
  149. fractal_server/runner/executors/slurm_sudo/runner.py +16 -11
  150. fractal_server/runner/task_files.py +9 -3
  151. fractal_server/runner/v2/_local.py +9 -4
  152. fractal_server/runner/v2/_slurm_ssh.py +11 -5
  153. fractal_server/runner/v2/_slurm_sudo.py +11 -5
  154. fractal_server/runner/v2/db_tools.py +0 -1
  155. fractal_server/runner/v2/deduplicate_list.py +2 -1
  156. fractal_server/runner/v2/runner.py +11 -14
  157. fractal_server/runner/v2/runner_functions.py +11 -14
  158. fractal_server/runner/v2/submit_workflow.py +7 -6
  159. fractal_server/ssh/_fabric.py +6 -13
  160. fractal_server/string_tools.py +0 -1
  161. fractal_server/syringe.py +1 -1
  162. fractal_server/tasks/config/_pixi.py +1 -1
  163. fractal_server/tasks/config/_python.py +16 -9
  164. fractal_server/tasks/utils.py +0 -1
  165. fractal_server/tasks/v2/local/_utils.py +1 -1
  166. fractal_server/tasks/v2/local/collect.py +10 -12
  167. fractal_server/tasks/v2/local/collect_pixi.py +9 -10
  168. fractal_server/tasks/v2/local/deactivate.py +7 -8
  169. fractal_server/tasks/v2/local/deactivate_pixi.py +4 -4
  170. fractal_server/tasks/v2/local/delete.py +1 -3
  171. fractal_server/tasks/v2/local/reactivate.py +7 -7
  172. fractal_server/tasks/v2/local/reactivate_pixi.py +7 -7
  173. fractal_server/tasks/v2/ssh/_utils.py +3 -3
  174. fractal_server/tasks/v2/ssh/collect.py +14 -19
  175. fractal_server/tasks/v2/ssh/collect_pixi.py +17 -19
  176. fractal_server/tasks/v2/ssh/deactivate.py +10 -8
  177. fractal_server/tasks/v2/ssh/deactivate_pixi.py +6 -5
  178. fractal_server/tasks/v2/ssh/delete.py +7 -5
  179. fractal_server/tasks/v2/ssh/reactivate.py +11 -11
  180. fractal_server/tasks/v2/ssh/reactivate_pixi.py +8 -9
  181. fractal_server/tasks/v2/templates/1_create_venv.sh +2 -0
  182. fractal_server/tasks/v2/templates/2_pip_install.sh +2 -0
  183. fractal_server/tasks/v2/templates/3_pip_freeze.sh +2 -0
  184. fractal_server/tasks/v2/templates/4_pip_show.sh +2 -0
  185. fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +3 -1
  186. fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +2 -0
  187. fractal_server/tasks/v2/templates/pixi_1_extract.sh +2 -0
  188. fractal_server/tasks/v2/templates/pixi_2_install.sh +2 -0
  189. fractal_server/tasks/v2/templates/pixi_3_post_install.sh +2 -0
  190. fractal_server/tasks/v2/utils_background.py +3 -3
  191. fractal_server/tasks/v2/utils_package_names.py +1 -2
  192. fractal_server/tasks/v2/utils_pixi.py +1 -3
  193. fractal_server/types/__init__.py +76 -1
  194. fractal_server/types/validators/_common_validators.py +1 -3
  195. fractal_server/types/validators/_workflow_task_arguments_validators.py +1 -2
  196. fractal_server/utils.py +1 -0
  197. fractal_server/zip_tools.py +34 -0
  198. {fractal_server-2.17.1a0.dist-info → fractal_server-2.17.2.dist-info}/METADATA +1 -1
  199. fractal_server-2.17.2.dist-info/RECORD +265 -0
  200. fractal_server/app/models/user_settings.py +0 -37
  201. fractal_server/app/routes/admin/v2/project.py +0 -41
  202. fractal_server/data_migrations/2_17_0.py +0 -339
  203. fractal_server-2.17.1a0.dist-info/RECORD +0 -262
  204. {fractal_server-2.17.1a0.dist-info → fractal_server-2.17.2.dist-info}/WHEEL +0 -0
  205. {fractal_server-2.17.1a0.dist-info → fractal_server-2.17.2.dist-info}/entry_points.txt +0 -0
  206. {fractal_server-2.17.1a0.dist-info → fractal_server-2.17.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,339 +0,0 @@
1
- import json
2
- import logging
3
- import sys
4
- from pathlib import Path
5
- from typing import Any
6
-
7
- from dotenv.main import DotEnv
8
- from pydantic import BaseModel
9
- from sqlalchemy.orm import Session
10
- from sqlalchemy.sql.operators import is_
11
- from sqlalchemy.sql.operators import is_not
12
- from sqlmodel import select
13
-
14
- from fractal_server.app.db import get_sync_db
15
- from fractal_server.app.models import Profile
16
- from fractal_server.app.models import ProjectV2
17
- from fractal_server.app.models import Resource
18
- from fractal_server.app.models import TaskGroupV2
19
- from fractal_server.app.models import UserOAuth
20
- from fractal_server.app.models import UserSettings
21
- from fractal_server.app.schemas.v2.profile import cast_serialize_profile
22
- from fractal_server.app.schemas.v2.resource import cast_serialize_resource
23
- from fractal_server.config import get_settings
24
- from fractal_server.runner.config import JobRunnerConfigLocal
25
- from fractal_server.runner.config import JobRunnerConfigSLURM
26
- from fractal_server.tasks.config import TasksPixiSettings
27
- from fractal_server.tasks.config import TasksPythonSettings
28
- from fractal_server.types import AbsolutePathStr
29
- from fractal_server.types import ListUniqueNonEmptyString
30
- from fractal_server.urls import normalize_url
31
-
32
- logging.basicConfig(level=logging.INFO)
33
-
34
-
35
- class UserUpdateInfo(BaseModel):
36
- user_id: int
37
- project_dir: AbsolutePathStr
38
- slurm_accounts: ListUniqueNonEmptyString
39
-
40
-
41
- class ProfileUsersUpdateInfo(BaseModel):
42
- data: dict[str, Any]
43
- user_updates: list[UserUpdateInfo]
44
-
45
-
46
- def _get_user_settings(user: UserOAuth, db: Session) -> UserSettings:
47
- if user.user_settings_id is None:
48
- sys.exit(f"User {user.email} is active but {user.user_settings_id=}.")
49
- user_settings = db.get(UserSettings, user.user_settings_id)
50
- return user_settings
51
-
52
-
53
- def assert_user_setting_key(
54
- user: UserOAuth,
55
- user_settings: UserSettings,
56
- keys: list[str],
57
- ) -> None:
58
- for key in keys:
59
- if getattr(user_settings, key) is None:
60
- sys.exit(
61
- f"User {user.email} is active and verified but their "
62
- f"user settings have {key}=None."
63
- )
64
-
65
-
66
- def prepare_profile_and_user_updates() -> dict[str, ProfileUsersUpdateInfo]:
67
- settings = get_settings()
68
- profiles_and_users: dict[str, ProfileUsersUpdateInfo] = {}
69
- with next(get_sync_db()) as db:
70
- # Get active&verified users
71
- res = db.execute(
72
- select(UserOAuth)
73
- .where(is_(UserOAuth.is_active, True))
74
- .where(is_(UserOAuth.is_verified, True))
75
- .order_by(UserOAuth.id)
76
- )
77
- for user in res.unique().scalars().all():
78
- # Get user settings
79
- user_settings = _get_user_settings(user=user, db=db)
80
- assert_user_setting_key(user, user_settings, ["project_dir"])
81
-
82
- # Prepare profile data and user update
83
- new_profile_data = dict()
84
- if settings.FRACTAL_RUNNER_BACKEND == "local":
85
- username = None
86
- if settings.FRACTAL_RUNNER_BACKEND == "slurm_sudo":
87
- assert_user_setting_key(user, user_settings, ["slurm_user"])
88
- username = user_settings.slurm_user
89
- elif settings.FRACTAL_RUNNER_BACKEND == "slurm_ssh":
90
- assert_user_setting_key(
91
- user,
92
- user_settings,
93
- [
94
- "ssh_username",
95
- "ssh_private_key_path",
96
- "ssh_tasks_dir",
97
- "ssh_jobs_dir",
98
- ],
99
- )
100
- username = user_settings.ssh_username
101
- new_profile_data.update(
102
- ssh_key_path=user_settings.ssh_private_key_path,
103
- tasks_remote_dir=normalize_url(
104
- user_settings.ssh_tasks_dir
105
- ),
106
- jobs_remote_dir=normalize_url(user_settings.ssh_jobs_dir),
107
- )
108
-
109
- new_profile_data.update(
110
- name=f"Profile {username}",
111
- username=username,
112
- resource_type=settings.FRACTAL_RUNNER_BACKEND,
113
- )
114
- cast_serialize_profile(new_profile_data)
115
-
116
- user_update_info = UserUpdateInfo(
117
- user_id=user.id,
118
- project_dir=normalize_url(user_settings.project_dir),
119
- slurm_accounts=user_settings.slurm_accounts or [],
120
- )
121
-
122
- if username in profiles_and_users.keys():
123
- if profiles_and_users[username].data != new_profile_data:
124
- error_msg = (
125
- "Profile data mismatch.\n"
126
- f"{profiles_and_users[username].data=}\n"
127
- f"{new_profile_data=}"
128
- )
129
- logging.error(error_msg)
130
- sys.exit(error_msg)
131
- profiles_and_users[username].user_updates.append(
132
- user_update_info
133
- )
134
- else:
135
- profiles_and_users[username] = ProfileUsersUpdateInfo(
136
- data=new_profile_data,
137
- user_updates=[user_update_info],
138
- )
139
-
140
- return profiles_and_users
141
-
142
-
143
- def get_old_dotenv_variables() -> dict[str, str | None]:
144
- """
145
- See
146
- https://github.com/fractal-analytics-platform/fractal-server/blob/2.16.x/fractal_server/config.py
147
- """
148
- OLD_DOTENV_FILE = ".fractal_server.env.old"
149
- return dict(
150
- **DotEnv(
151
- dotenv_path=OLD_DOTENV_FILE,
152
- override=False,
153
- ).dict()
154
- )
155
-
156
-
157
- def get_TasksPythonSettings(
158
- old_config: dict[str, str | None]
159
- ) -> dict[str, Any]:
160
- versions = {}
161
- for version_underscore in ["3_9", "3_10", "3_11", "3_12"]:
162
- key = f"FRACTAL_TASKS_PYTHON_{version_underscore}"
163
- version_dot = version_underscore.replace("_", ".")
164
- value = old_config.get(key, None)
165
- if value is not None:
166
- versions[version_dot] = value
167
- obj = TasksPythonSettings(
168
- default_version=old_config["FRACTAL_TASKS_PYTHON_DEFAULT_VERSION"],
169
- versions=versions,
170
- pip_cache_dir=old_config.get("FRACTAL_PIP_CACHE_DIR", None),
171
- )
172
- return obj.model_dump()
173
-
174
-
175
- def get_TasksPixiSettings(old_config: dict[str, str | None]) -> dict[str, Any]:
176
- pixi_file = old_config.get("FRACTAL_PIXI_CONFIG_FILE", None)
177
- if pixi_file is None:
178
- return {}
179
- with open(pixi_file) as f:
180
- old_pixi_config = json.load(f)
181
- TasksPixiSettings(**old_pixi_config)
182
- return old_pixi_config
183
-
184
-
185
- def get_JobRunnerConfigSLURM(
186
- old_config: dict[str, str | None]
187
- ) -> dict[str, Any]:
188
- slurm_file = old_config["FRACTAL_SLURM_CONFIG_FILE"]
189
- with open(slurm_file) as f:
190
- old_slurm_config = json.load(f)
191
- JobRunnerConfigSLURM(**old_slurm_config)
192
- return old_slurm_config
193
-
194
-
195
- def get_JobRunnerConfigLocal(
196
- old_config: dict[str, str | None]
197
- ) -> dict[str, Any]:
198
- local_file = old_config.get("FRACTAL_LOCAL_CONFIG_FILE", None)
199
- if local_file is None or not Path(local_file).exists():
200
- return JobRunnerConfigLocal().model_dump()
201
- else:
202
- with open(local_file) as f:
203
- old_local_config = json.load(f)
204
- JobRunnerConfigLocal(**old_local_config)
205
- return old_local_config
206
-
207
-
208
- def get_ssh_host() -> str:
209
- with next(get_sync_db()) as db:
210
- res = db.execute(
211
- select(UserSettings.ssh_host).where(
212
- is_not(UserSettings.ssh_host, None)
213
- )
214
- )
215
- hosts = res.scalars().all()
216
- if len(set(hosts)) > 1:
217
- host = max(set(hosts), key=hosts.count)
218
- print(f"MOST FREQUENT HOST: {host}")
219
- else:
220
- host = hosts[0]
221
- return host
222
-
223
-
224
- def prepare_resource_data(old_config: dict[str, str | None]) -> dict[str, Any]:
225
- settings = get_settings()
226
-
227
- resource_data = dict(
228
- type=settings.FRACTAL_RUNNER_BACKEND,
229
- name="Resource Name",
230
- tasks_python_config=get_TasksPythonSettings(old_config),
231
- tasks_pixi_config=get_TasksPixiSettings(old_config),
232
- tasks_local_dir=old_config["FRACTAL_TASKS_DIR"],
233
- jobs_local_dir=old_config["FRACTAL_RUNNER_WORKING_BASE_DIR"],
234
- jobs_poll_interval=int(
235
- old_config.get("FRACTAL_SLURM_POLL_INTERVAL", 15)
236
- ),
237
- )
238
- if settings.FRACTAL_RUNNER_BACKEND == "local":
239
- resource_data["jobs_runner_config"] = get_JobRunnerConfigLocal(
240
- old_config
241
- )
242
- elif settings.FRACTAL_RUNNER_BACKEND == "slurm_sudo":
243
- resource_data["jobs_slurm_python_worker"] = old_config[
244
- "FRACTAL_SLURM_WORKER_PYTHON"
245
- ]
246
- resource_data["jobs_runner_config"] = get_JobRunnerConfigSLURM(
247
- old_config
248
- )
249
- else:
250
- resource_data["jobs_slurm_python_worker"] = old_config[
251
- "FRACTAL_SLURM_WORKER_PYTHON"
252
- ]
253
- resource_data["jobs_runner_config"] = get_JobRunnerConfigSLURM(
254
- old_config
255
- )
256
- resource_data["host"] = get_ssh_host()
257
-
258
- resource_data = cast_serialize_resource(resource_data)
259
-
260
- return resource_data
261
-
262
-
263
- def fix_db():
264
- logging.info("START preliminary checks.")
265
-
266
- # Read old env file
267
- old_config = get_old_dotenv_variables()
268
-
269
- # Prepare resource data
270
- logging.info("START prepare_resource_data")
271
- resource_data = prepare_resource_data(old_config)
272
- logging.info("END prepare_resource_data")
273
-
274
- # Prepare profile/users data
275
- logging.info("START prepare_profile_and_user_updates")
276
- profile_and_user_updates = prepare_profile_and_user_updates()
277
- logging.info("END prepare_profile_and_user_updates")
278
-
279
- logging.info("END preliminary checks.")
280
- print()
281
-
282
- with next(get_sync_db()) as db:
283
- # Create new resource
284
- resource = Resource(**resource_data)
285
- db.add(resource)
286
- db.commit()
287
- db.refresh(resource)
288
- db.expunge(resource)
289
- resource_id = resource.id
290
- logging.info(f"Created resource with {resource_id=}.")
291
-
292
- # Update task groups
293
- res = db.execute(select(TaskGroupV2).order_by(TaskGroupV2.id))
294
- for taskgroup in res.scalars().all():
295
- taskgroup.resource_id = resource_id
296
- db.add(taskgroup)
297
- db.commit()
298
- logging.info(f"Set {resource_id=} foreign key for all task groups.")
299
-
300
- # Update projects
301
- res = db.execute(select(ProjectV2).order_by(ProjectV2.id))
302
- for project in res.scalars().all():
303
- project.resource_id = resource_id
304
- db.add(project)
305
- db.commit()
306
- logging.info(f"Set {resource_id=} foreign key for all projects.")
307
- print()
308
-
309
- db.expunge_all()
310
-
311
- for _, info in profile_and_user_updates.items():
312
- # Create profile
313
- profile_data = info.data
314
- profile_data["resource_id"] = resource_id
315
- profile = Profile(**profile_data)
316
- db.add(profile)
317
- db.commit()
318
- db.refresh(profile)
319
- db.expunge(profile)
320
- profile_id = profile.id
321
- logging.info(
322
- f"Created profile '{profile.name}', with {profile.id=}."
323
- )
324
-
325
- # Update users
326
- for user_update in info.user_updates:
327
- user = db.get(UserOAuth, user_update.user_id)
328
- user.profile_id = profile_id
329
- user.project_dir = user_update.project_dir
330
- user.slurm_accounts = user_update.slurm_accounts
331
- db.add(user)
332
- logging.info(f"Updated {user.email} with {user.project_dir=}.")
333
- logging.info(
334
- f"Associated {user.email} to profile {profile.name}."
335
- )
336
- print()
337
- db.commit()
338
-
339
- logging.info("END - all ok.")
@@ -1,262 +0,0 @@
1
- fractal_server/__init__.py,sha256=DW4yg1QyP_AsgqW1m4v28pnbhBE5KzkBv39LnIslJnE,25
2
- fractal_server/__main__.py,sha256=qLbUicU1Ulaob_Eo5pspi-IH2xAkLfifJTH9gYEhZss,11427
3
- fractal_server/alembic.ini,sha256=MWwi7GzjzawI9cCAK1LW7NxIBQDUqD12-ptJoq5JpP0,3153
4
- fractal_server/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- fractal_server/app/db/__init__.py,sha256=sttX0mHVV0ESI1SJ1kcxUKiuEwqeP-BWsst0o_9Yo44,2810
6
- fractal_server/app/models/__init__.py,sha256=xJWiGAwpXmCpnFMC4c_HTqoUCzMOXrakoGLUH_uMvdA,415
7
- fractal_server/app/models/linkusergroup.py,sha256=3KkkE4QIUAlTrBAZs_tVy0pGvAxUAq6yOEjflct_z2M,678
8
- fractal_server/app/models/linkuserproject.py,sha256=hvaxh3Lkiy2uUCwB8gvn8RorCpvxSSdzWdCS_U1GL7g,315
9
- fractal_server/app/models/security.py,sha256=VThWDEmzUP4SgLsAvd5WjJ1p2WVxBuc6D5TMQJaOyd8,3873
10
- fractal_server/app/models/user_settings.py,sha256=u0GOK1JdqDmXzA8hK2JV93rZxY_rF-0oKMkArRolnN8,1201
11
- fractal_server/app/models/v2/__init__.py,sha256=A668GF4z_UPar6kAOwC-o_qUo3CIRJ3SmBGYTs3Xc7k,923
12
- fractal_server/app/models/v2/accounting.py,sha256=i-2TsjqyuclxFQ21C-TeDoss7ZBTRuXdzIJfVr2UxwE,1081
13
- fractal_server/app/models/v2/dataset.py,sha256=P_zy4dPQAqrCALQ6737VkAFk1SvcgYjnslGUZhPI8sc,1226
14
- fractal_server/app/models/v2/history.py,sha256=CBN2WVg9vW5pHU1RP8TkB_nnJrwnuifCcxgnd53UtEE,2163
15
- fractal_server/app/models/v2/job.py,sha256=YYzt3ef2CU1WXFNjlltR3ft2kM9T0Hq8oskSipQSxuM,2042
16
- fractal_server/app/models/v2/profile.py,sha256=QqOE7XGeq-ckQAbGhcgzDN5zFFaTNrtcuWgOXy9psR8,440
17
- fractal_server/app/models/v2/project.py,sha256=oXNcuNVDeNYZ60fwAx-Y_vnkS3xd9pwFdoT2pZmnBNI,918
18
- fractal_server/app/models/v2/resource.py,sha256=ReaBGtKb3e0_1PZOZncdGqrttkrC-bsgDCv3wPCGfOs,3512
19
- fractal_server/app/models/v2/task.py,sha256=iBIQB8POQE5MyKvLZhw7jZWlBhbrThzCDzRTcgiAczQ,1493
20
- fractal_server/app/models/v2/task_group.py,sha256=gHkuyIBw8hkoMCwHgo08SWVMc8T1MXC5xqoW2YNd5Sw,4753
21
- fractal_server/app/models/v2/workflow.py,sha256=gBjDXO-RytVT81aAlesImBhmVHrwNUrmsF_UsGa1qLM,1057
22
- fractal_server/app/models/v2/workflowtask.py,sha256=qkTc-hcFLpJUVsEUbnDq2BJL0qg9jagy2doZeusF1ek,1266
23
- fractal_server/app/routes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- fractal_server/app/routes/admin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- fractal_server/app/routes/admin/v2/__init__.py,sha256=SzLurEzKBRWHcIFh2mpac2wrGAWJwv9WW-Ry2DiNkZY,1161
26
- fractal_server/app/routes/admin/v2/_aux_functions.py,sha256=fqA5sUCFuD2iVANQt2WUUfVOEVz5egQA7inzUKYGCw0,1684
27
- fractal_server/app/routes/admin/v2/accounting.py,sha256=DjgMqzdrL8hYMn19cZj2pkwtLKl3QfBwxd473kH4KaI,3584
28
- fractal_server/app/routes/admin/v2/impersonate.py,sha256=ictDjuvBr3iLv3YtwkVRMNQRq5qtPAeAXbbC7STSsEg,1125
29
- fractal_server/app/routes/admin/v2/job.py,sha256=CRt_a6tULsuzN5ojcClzVH3vd7OXT06jK81Qro9fuBk,10171
30
- fractal_server/app/routes/admin/v2/profile.py,sha256=0Y_1Qv-BA6cHVrxPTDDBOpttpfuJN8g1FqFlG6JiOD8,3164
31
- fractal_server/app/routes/admin/v2/project.py,sha256=rRq7ZDngr_29skASnte1xfycZCjK-WPdeTf7siBXiCU,1182
32
- fractal_server/app/routes/admin/v2/resource.py,sha256=UWimApUcL9HPu8NN0ccDbReuKly3aCqff2SA-Y1iEzs,6349
33
- fractal_server/app/routes/admin/v2/task.py,sha256=tHWCPZRpfvu7k8sQA-634CUC7QbgdJa2RHiMXQL8a58,5599
34
- fractal_server/app/routes/admin/v2/task_group.py,sha256=EDY9oliXq_xYVJ2HgRuE4-5MbL85j-y4LbWwupZxy38,6249
35
- fractal_server/app/routes/admin/v2/task_group_lifecycle.py,sha256=W7LjIBAheyjrn0fEz0SsWINqcZK5HMB5GRGMjPrc6a4,9994
36
- fractal_server/app/routes/api/__init__.py,sha256=ewprevw6hZ0FWM-GPHoQZU0w-yfItqLeQT-Jr_Nbjnw,1658
37
- fractal_server/app/routes/api/v2/__init__.py,sha256=D3sRRsqkmZO6kBxUjg40q0aRDsnuXI4sOOfn0xF9JsM,2820
38
- fractal_server/app/routes/api/v2/_aux_functions.py,sha256=0OC5ydaX-XpscMRAsqiE03w2UVcd0xZ_vGs2PahDf1Y,14821
39
- fractal_server/app/routes/api/v2/_aux_functions_history.py,sha256=PXsqMQ3sfkABqAMI7v1_VAzUEDF_-kvaZyyhEicqsCw,4431
40
- fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py,sha256=5gNt35rYR8sHG2f1N8coQbOJacYIRJ5zUrmMEXcs2LQ,8585
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=63CFMe1QZKRPmmU1xk1qZ_R6A1VANCxAlUBTGDrE0GI,13674
43
- fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py,sha256=492tLRUWTxsAZuhkZUt9PmJtKNLIhkAqKAa-LDtwG_Y,4893
44
- fractal_server/app/routes/api/v2/dataset.py,sha256=HhRrReo_isFJFMaUhQfxEQkLj0_lXNfGblzwpLG81VU,8623
45
- fractal_server/app/routes/api/v2/history.py,sha256=T-7GDLZ_x4cp9PMEozJoEFt4cGFYPDqv9-akYmN2JSU,17150
46
- fractal_server/app/routes/api/v2/images.py,sha256=_R-F1qrsFv3PPukrwXSa-5swNS4kNghY0DTrxjLC_7E,7897
47
- fractal_server/app/routes/api/v2/job.py,sha256=fyIYGcplsxzx91FxYWlImp1ATPk5IC8bfIcJkuZOhws,6526
48
- fractal_server/app/routes/api/v2/pre_submission_checks.py,sha256=DEnlFj6PMNMy9DrnH6_pMW9evdKl6iTlAb0zlzBR1Qs,4953
49
- fractal_server/app/routes/api/v2/project.py,sha256=PkRR1lQayBvY8uEOMherXpvv_YwIMwxWzVMjC5nFfm4,4857
50
- fractal_server/app/routes/api/v2/status_legacy.py,sha256=vZA4AYMehXbNFgekl4j6p8idETC3IylQQL64CmFCr98,6330
51
- fractal_server/app/routes/api/v2/submit.py,sha256=o0r58Dc6A1BHOUPp2OK7PKEHc4dIqnp3-kXBWnX8KsY,9373
52
- fractal_server/app/routes/api/v2/task.py,sha256=HIQRA7lAW41P89eveCGmUI2HERMakxOw5is-F-j-fco,7519
53
- fractal_server/app/routes/api/v2/task_collection.py,sha256=wgY5-sry8Dg9IbLyzjxur8iqoe9ALs2zNK0bmNtO8Co,12226
54
- fractal_server/app/routes/api/v2/task_collection_custom.py,sha256=WjByW-raK-HU1IR02JNc39XMjkRftXyUSHwHrgnZFBw,6924
55
- fractal_server/app/routes/api/v2/task_collection_pixi.py,sha256=-HlgVzYxZb0Ysk6fkHbhkiVvVtQxmvli1kW03PTVaVo,7191
56
- fractal_server/app/routes/api/v2/task_group.py,sha256=7eGVim9D6AE4synpxAYMijyHIC1HTSBojY08MiuqMBg,8349
57
- fractal_server/app/routes/api/v2/task_group_lifecycle.py,sha256=ZSn8Ibjwkp89v87OPBquULPc9xsdpBfRvV1PiQdiicw,10593
58
- fractal_server/app/routes/api/v2/task_version_update.py,sha256=JO5xggiRqay4zNlbjlRa26ygMEue2klSFPyLrXS215k,8254
59
- fractal_server/app/routes/api/v2/workflow.py,sha256=szb6t9OWOjr0CwboF0fJUyO5jUPj_HRpf5N0CDuHkqc,10755
60
- fractal_server/app/routes/api/v2/workflow_import.py,sha256=cEs1bt5urKIbaC8PjnUwYAaPK3kGqupXpUdgwEXM0Ss,9445
61
- fractal_server/app/routes/api/v2/workflowtask.py,sha256=-V7WjTfYb2L7i3_dQ0Am_ydqepdqs-j3BY67_5iZPfU,7960
62
- fractal_server/app/routes/auth/__init__.py,sha256=Y-RQMwY5V25ZVgyYYoFIXvEDQgm6PGTDgxH755oa_NM,2358
63
- fractal_server/app/routes/auth/_aux_auth.py,sha256=10eQlLWCsuwmkGiZB3eSR9JhnU4db67wsWRxu8arKqc,5435
64
- fractal_server/app/routes/auth/current_user.py,sha256=xYun8dn9Ie3mzTczq1BC7HfIjPpj3x8QOtJ1H6Yb_GM,5585
65
- fractal_server/app/routes/auth/group.py,sha256=JfQKmmafgVfsPmuVcA4wGs5qKwq9Xx4f-m4uwIyY3-Y,7291
66
- fractal_server/app/routes/auth/login.py,sha256=tSu6OBLOieoBtMZB4JkBAdEgH2Y8KqPGSbwy7NIypIo,566
67
- fractal_server/app/routes/auth/oauth.py,sha256=5BTEKb7Cb6ASVmgiPb5kVbHcBg0rF8Iqho0aJZd7PPQ,2730
68
- fractal_server/app/routes/auth/register.py,sha256=Ola-lNdYYEOK8Wh0Q-TFKwIJ25e6UswlUojJ8QGBCfc,581
69
- fractal_server/app/routes/auth/router.py,sha256=-E87A8h2UvcLucy5xjzKiWbXHVKcqxUmmZGeV_utEzA,598
70
- fractal_server/app/routes/auth/users.py,sha256=xUvzH_hIwOOSU5QiJyJmU1NRZHkTcypjTgSbuTm8A5I,7060
71
- fractal_server/app/routes/aux/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
- fractal_server/app/routes/aux/_job.py,sha256=nqqdcW5B7fL_PbvHf57_TcifjUfcMgl04tKNvG2sV1U,628
73
- fractal_server/app/routes/aux/_runner.py,sha256=SDzI7glEfkW_XecWFuRQitbSWSvAPegI-J5c7i5d0_w,957
74
- fractal_server/app/routes/aux/validate_user_profile.py,sha256=fGqJDdAFkbQoEIjqZ5F9-SDY_4os63R2EUMqODC7eBg,1969
75
- fractal_server/app/routes/pagination.py,sha256=IGy8Ll5lYr6ENYE18h3huH5s0GMX1DCs5VdCi6j1cdk,1174
76
- fractal_server/app/schemas/__init__.py,sha256=VIWJCaqokte3OljDLX00o-EC2d12rFoPb5HOLKQI94Y,86
77
- fractal_server/app/schemas/user.py,sha256=MGggiWGqQV97426IzoaKNIkqHUMEuadW7BbJgom6tB8,2898
78
- fractal_server/app/schemas/user_group.py,sha256=uTTOVGoy89SxVDpJumjqOEWxqXWR41MNOTBDCyNxEDA,1478
79
- fractal_server/app/schemas/v2/__init__.py,sha256=XQex5ojpELgO0xvq2l-Y8oV85ZgM3GBj6lrGGctPb1g,3729
80
- fractal_server/app/schemas/v2/accounting.py,sha256=C_ekrYQwhi7PtrxxB07oVAG2y1NLigXjYwyp4E38fao,396
81
- fractal_server/app/schemas/v2/dataset.py,sha256=NKCjBwGBC7mPiSlXktZAcleJsvlLY6KfNKw7Wx4Zfqk,1728
82
- fractal_server/app/schemas/v2/dumps.py,sha256=LCYiNF_FNYiA6HYp5GyFao3IKRX0RpzgNpiX56IwgCE,2293
83
- fractal_server/app/schemas/v2/history.py,sha256=pZiMKfh6nMWbTp5MUtrnGySPKbeRFf5tM1VLFaTgGcw,1784
84
- fractal_server/app/schemas/v2/job.py,sha256=BuiNzAX2Kl-b7LJnAiqCGDC9h6bGEjKvsHQIgf5mjHQ,3330
85
- fractal_server/app/schemas/v2/manifest.py,sha256=QUpXMDB8WkB1F4UK-yYmm3O8bXoHwDGURnqwn6ayO_I,6674
86
- fractal_server/app/schemas/v2/profile.py,sha256=tqjG3kgoBsNl0It0icZQ0mIab2POmV_K8fsL21-WR8U,2082
87
- fractal_server/app/schemas/v2/project.py,sha256=7UC0aZLgtmkaAiPykeUj-9OZXhMkoyi3V-475UW_EQs,654
88
- fractal_server/app/schemas/v2/resource.py,sha256=4iXzZJeHVLcXYY08-okoJM_4gqpzhG4KglRPBm24Jwc,3718
89
- fractal_server/app/schemas/v2/status_legacy.py,sha256=eQT1zGxbkzSwd0EqclsOdZ60n1x6J3DB1CZ3m4LYyxc,955
90
- fractal_server/app/schemas/v2/task.py,sha256=IJv8loB4kx9FBkaIHoiMsswQyq02FxvyAnHK1u074fU,4364
91
- fractal_server/app/schemas/v2/task_collection.py,sha256=S4fBQ3cbL4YmyL6ZTZYDbIBm6o8D-v5CuYQy4ng3nWU,4581
92
- fractal_server/app/schemas/v2/task_group.py,sha256=4hNZUXnWYSozpLXR3JqBvGzfZBG2TbjqydckHHu2Aq0,3506
93
- fractal_server/app/schemas/v2/workflow.py,sha256=L-dW6SzCH_VNoH6ENip44lTgGGqVYHHBk_3PtM-Ooy8,1772
94
- fractal_server/app/schemas/v2/workflowtask.py,sha256=6eweAMyziwaoMT-7R1fVJYunIeZKzT0-7fAVgPO_FEc,3639
95
- fractal_server/app/security/__init__.py,sha256=k-La8Da89C1hSUGsiidrWo6Az4u6dbe5PzN1Ctt1t34,18394
96
- fractal_server/app/security/signup_email.py,sha256=kphjq6TAygvPpYpg95QJWefyqmzdVrGz7fyRMctUJWE,1982
97
- fractal_server/app/shutdown.py,sha256=ViSNJyXWU_iWPSDOOMGNh_iQdUFrdPh_jvf8vVKLpAo,1950
98
- fractal_server/config/__init__.py,sha256=ZCmroNB50sUxJiFtkW0a4fFtmfyPnL4LWhtKY5FbQfg,737
99
- fractal_server/config/_data.py,sha256=9Jyt83yrSsr_0_9ANWDAXz88_jjyFlcB5VWJGXq8aUY,2311
100
- fractal_server/config/_database.py,sha256=k1z__MrslQjmel34yFvge0sroPUs1vBtT_OSlPY8pN8,1690
101
- fractal_server/config/_email.py,sha256=j1QmZCyspNbD1xxkypc9Kv299tU3vTO1AqDFJ8-LZzQ,4201
102
- fractal_server/config/_main.py,sha256=9v64gJsvY1oGP70_AoJMnyMIeRo7FcIg6T8NDV-p9as,1992
103
- fractal_server/config/_oauth.py,sha256=7J4FphGVFfVmtQycCkas6scEJQJGZUGEzQ-t2PZiqSo,1934
104
- fractal_server/config/_settings_config.py,sha256=tsyXQOnn9QKCFJD6hRo_dJXlQQyl70DbqgHMJoZ1xnY,144
105
- fractal_server/data_migrations/2_17_0.py,sha256=DGxrQ5JSiJW5tzpfydCjYKjX7FsiF3y_k34b0mo_RaY,11757
106
- fractal_server/data_migrations/README.md,sha256=_3AEFvDg9YkybDqCLlFPdDmGJvr6Tw7HRI14aZ3LOIw,398
107
- fractal_server/data_migrations/tools.py,sha256=LeMeASwYGtEqd-3wOLle6WARdTGAimoyMmRbbJl-hAM,572
108
- fractal_server/exceptions.py,sha256=7ftpWwNsTQmNonWCynhH5ErUh1haPPhIaVPrNHla7-o,53
109
- fractal_server/gunicorn_fractal.py,sha256=u6U01TLGlXgq1v8QmEpLih3QnsInZD7CqphgJ_GrGzc,1230
110
- fractal_server/images/__init__.py,sha256=-_wjoKtSX02P1KjDxDP_EXKvmbONTRmbf7iGVTsyBpM,154
111
- fractal_server/images/models.py,sha256=6WchcIzLLLwdkLNRfg71Dl4Y-9UFLPyrrzh1lWgjuP0,1245
112
- fractal_server/images/status_tools.py,sha256=KICcThwHniHNkDftzJmK_n2gQK2IeTKlR_PFAesf204,4912
113
- fractal_server/images/tools.py,sha256=37jVIU6RiAGbiyucNDlKe9J3yN3Y47NOvv-RJor9Jm0,4154
114
- fractal_server/logger.py,sha256=2_IN0WcIzLEX20HFUUkwyZGSIi0yLbE0JamkzXREDZw,5302
115
- fractal_server/main.py,sha256=4HJO8EiGJp0Iw0p3xEm_zhwjnT4joFG1KuGccIIndjo,4419
116
- fractal_server/migrations/env.py,sha256=nfyBpMIOT3kny6t-b-tUjyRjZ4k906bb1_wCQ7me1BI,1353
117
- fractal_server/migrations/naming_convention.py,sha256=bSEMiMZeArmWKrUk-12lhnOw1pAFMg6LEl7yucohPqc,263
118
- fractal_server/migrations/versions/034a469ec2eb_task_groups.py,sha256=vrPhC8hfFu1c4HmLHNZyCuqEfecFD8-bWc49bXMNes0,6199
119
- fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py,sha256=-BSS9AFTPcu3gYC-sYbawSy4MWQQx8TfMb5BW5EBKmQ,1450
120
- fractal_server/migrations/versions/0f5f85bb2ae7_add_pre_pinned_packages.py,sha256=FxnIvfktnSjy2nBKDIow24on1nMkLw1THhO84FtNZSo,1055
121
- fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py,sha256=Q1Gj1cJ0UrdLBJ5AXfFK9QpxTtmcv-4Z3NEGDnxOme4,961
122
- fractal_server/migrations/versions/1a83a5260664_rename.py,sha256=EkzTAjbJm7CfsLraIUbH9hkTj4M6XvmziVb4K9ZjKmQ,790
123
- fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py,sha256=7OW3HmqAePHx53OWdEPzNxvtupxSR0lB_6tZF1b3JIM,1604
124
- fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py,sha256=lANgTox0rz459_yo1Rw7fGCT1qw5sUCUXTLUMc_Bzf8,911
125
- fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py,sha256=vePkVm1iUHiPNKLQ3KR7BBLdHruqBdl87j_tUCbMbEA,1414
126
- fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py,sha256=-wHe-fOffmYeAm0JXVl_lxZ7hhDkaEVqxgxpHkb_uL8,954
127
- fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py,sha256=Mob8McGYAcmgvrseyyYOa54E6Gsgr-4SiGdC-r9O4_A,1157
128
- fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py,sha256=JOrVa6mGzqZ6H61YCFVOed64vFRjTWGWyN3z7NE3T08,3270
129
- fractal_server/migrations/versions/50a13d6138fd_initial_schema.py,sha256=zwXegXs9J40eyCWi3w0c_iIBVJjXNn4VdVnQaT3KxDg,8770
130
- fractal_server/migrations/versions/5bf02391cfef_v2.py,sha256=axhNkr_H6R4rRbY7oGYazNbFvPXeSyBDWFVbKNmiqs8,8433
131
- fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py,sha256=Q-DsMzG3IcUV2Ol1dhJWosDvKERamBE6QvA2zzS5zpQ,1632
132
- fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py,sha256=mbWuCkTpRAdGbRhW7lhXs_e5S6O37UAcCN6JfoY5H8A,1353
133
- fractal_server/migrations/versions/791ce783d3d8_add_indices.py,sha256=gNE6AgJgeJZY99Fbd336Z9see3gRMQvuNBC0xDk_5sw,1154
134
- fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py,sha256=U7t_8n58taRkd9sxCXOshrTr9M5AhlsQne8SGKa5Jt4,6377
135
- fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py,sha256=NSCuhANChsg76vBkShBl-9tQ4VEHubOjtAv1etHhlvY,2684
136
- fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py,sha256=68y9-fpSuKx6KPtM_9n8Ho0I1qwa8IoG-yJqXUYQrGg,1111
137
- fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py,sha256=6pgODDtyAxevZvAJBj9IJ41inhV1RpwbpZr_qfPPu1A,1115
138
- fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py,sha256=yL3-Hvzw5jBLKj4LFP1z5ofZE9L9W3tLwYtPNW7z4ko,1508
139
- fractal_server/migrations/versions/969d84257cac_add_historyrun_task_id.py,sha256=4nLSYEMp_Tm7VRfo8p9YKLHVnoizTXaPV6lfcfvWhj0,1143
140
- fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py,sha256=eKTZm3EgUgapXBxO0RuHkEfTKic-TZG3ADaMpGLuc0k,1057
141
- fractal_server/migrations/versions/981d588fe248_add_executor_error_log.py,sha256=p51lFxxpU-9vSdOHr_idkK3215NQsFD8oX9M6qRCASU,956
142
- fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py,sha256=0im6TxDr53sKKcjiPgeH4ftVRGnRXZSh2lPbRQ1Ir9w,883
143
- fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py,sha256=syONdZNf4-OnAcWIsbzXpYwpXPsXZ4SsmjwVvmVG0PU,2256
144
- fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py,sha256=F0IdXk8vclViOGKe2SOHO3MsQsqe7SsZRSqz9cXhhrE,7928
145
- fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py,sha256=4l1AHGUsa0ONoJVZlr3fTXw_xbbQ8O7wlD92Az2aRfM,1849
146
- fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py,sha256=ekDUML7ILpmdoqEclKbEUdyLi4uw9HSG_sTjG2hp_JE,867
147
- fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py,sha256=BftudWuSGvKGBzIL5AMb3yWkgTAuaKPBGsYcOzp_gLQ,1899
148
- fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py,sha256=9sLd0F7nO5chHHm7RZ4wBA-9bvWomS-av_odKwODADM,1551
149
- fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py,sha256=loDrqBB-9U3vqLKePEeJy4gK4EuPs_1F345mdrnoCt0,1293
150
- fractal_server/migrations/versions/b3ffb095f973_json_to_jsonb.py,sha256=Q01lPlBNQgi3hpoUquWj2QUEF7cTsyQ7uikUhWunzWY,10035
151
- fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py,sha256=Y1cPwmFOZ4mx3v2XZM6adgu8u0L0VD_R4ADURyMb2ro,1102
152
- fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py,sha256=HN3_Pk8G81SzdYjg4K1RZAyjKSlsZGvcYE2nWOUbwxQ,3861
153
- fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py,sha256=6cHEZFuTXiQg9yu32Y3RH1XAl71av141WQ6UMbiITIg,949
154
- fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py,sha256=yGWSA2HIHUybcVy66xBITk08opV2DFYSCIIrulaUZhI,901
155
- fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py,sha256=NumyjvciIjgShLZcmpDvh3ggJxnc-W1kc7vofrpcNOs,2906
156
- fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py,sha256=lOggSvzGWqQvnxxFuSM6W50Ui49R918A-uBuiZJ0pNM,963
157
- fractal_server/migrations/versions/e81103413827_add_job_type_filters.py,sha256=t4ImlKNHx5JMgBL2sTpLWunv1gwY8OCFOKd3G338mdE,890
158
- fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py,sha256=jilQW3QIqYQ4Q6hCnUiG7UtNMpA41ujqrB3tPFiPM1Q,1221
159
- fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py,sha256=jLHcVq9z0Ou20u-mwPf6EICDKY4dwFAzBgbRRx9_xDw,1007
160
- fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py,sha256=9BwqUS9Gf7UW_KjrzHbtViC880qhD452KAytkHWWZyk,746
161
- fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py,sha256=TDWCaIoM0Q4SpRWmR9zr_rdp3lJXhCfBPTMhtrP5xYE,3950
162
- fractal_server/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
163
- fractal_server/runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
164
- fractal_server/runner/components.py,sha256=-Ii5l8d_V6f5DFOd-Zsr8VYmOsyqw0Hox9fEFQiuqxY,66
165
- fractal_server/runner/config/__init__.py,sha256=a-vSrvWBeMVnxTtYoy-f5Ibt_mM8MM3F7jqnPvvjHSY,108
166
- fractal_server/runner/config/_local.py,sha256=_t3s56MAfg5jI8ZOiRSdbvCJLqvQK6kjyAzJ_Fh0KqY,603
167
- fractal_server/runner/config/_slurm.py,sha256=g8zv-r2aP3vfkY-orKRGO6JbC6yxprR4yOwtpP3uKcg,3633
168
- fractal_server/runner/config/slurm_mem_to_MB.py,sha256=twtBHIyY3SITe9q1uvH5rQx0QbY_AzexgYB9gaMkVok,2004
169
- fractal_server/runner/exceptions.py,sha256=N8DLn7tuV8zMSdr8xdJN0aIdytPveSCeQ1Y5IoxXW-8,1778
170
- fractal_server/runner/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
171
- fractal_server/runner/executors/base_runner.py,sha256=Zd3sgXnxbyMdvuqUZd0rRRWng_wDlPUuQQLsfkXRLYw,6543
172
- fractal_server/runner/executors/call_command_wrapper.py,sha256=n6c9haKyIudBlz9-d3GQb19rewBR54qLG8jlrma6okk,1415
173
- fractal_server/runner/executors/local/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
- fractal_server/runner/executors/local/get_local_config.py,sha256=HdgDOT3G-wmyG6czH-VsPEQ_g9Rw2IDaGHMOyWDJt1c,1693
175
- fractal_server/runner/executors/local/runner.py,sha256=cwQyPfSXyvLTigU4hfyQuCTps8QGMhBDN1L9uyhqk4c,12196
176
- fractal_server/runner/executors/slurm_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
177
- fractal_server/runner/executors/slurm_common/_batching.py,sha256=la_FXt4ErYU63vkmk2SGZcSOqq-Jzp_L9tZfzBY7rlU,8806
178
- fractal_server/runner/executors/slurm_common/_job_states.py,sha256=nuV-Zba38kDrRESOVB3gaGbrSPZc4q7YGichQaeqTW0,238
179
- fractal_server/runner/executors/slurm_common/base_slurm_runner.py,sha256=jnUuoHDwNu1UL0FWu61PjY8GLgK20PvVBpJRwRCKJP8,40969
180
- fractal_server/runner/executors/slurm_common/get_slurm_config.py,sha256=kQQtc4o5Ya3gLMB6x9xuuyDX6jKpa0bSqkHeiAz7lTM,7071
181
- fractal_server/runner/executors/slurm_common/remote.py,sha256=2ByWIHFKL1bW6CS04ijrJvX4jH8CpX2Pp-QhAncc-Hs,3806
182
- fractal_server/runner/executors/slurm_common/slurm_config.py,sha256=hnZWxgXZsawubPNRHPXMHe1eD8cT44z1BTuKaYqPLTU,7895
183
- fractal_server/runner/executors/slurm_common/slurm_job_task_models.py,sha256=wOVtACSFLulc0gUwXlj_SXJHIQmgHpseohw-SahT1DM,3517
184
- fractal_server/runner/executors/slurm_ssh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
185
- fractal_server/runner/executors/slurm_ssh/run_subprocess.py,sha256=SyW6t4egvbiARph2YkFjc88Hj94fCamZVi50L7ph8VM,996
186
- fractal_server/runner/executors/slurm_ssh/runner.py,sha256=1ehjRxcbChvk9mZgqCUCQY69Xpn8JyYH-Db6cQ7Xrt4,10203
187
- fractal_server/runner/executors/slurm_ssh/tar_commands.py,sha256=yqBjWTLmh_FzhCllt_KfbuCUGvRhsHLVWlPOZlRWLzY,1762
188
- fractal_server/runner/executors/slurm_sudo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
189
- fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py,sha256=9pN0N409M24TXIyhuWJb-Tj0Ztaud68xtQ7wfAibmfk,2566
190
- fractal_server/runner/executors/slurm_sudo/runner.py,sha256=a_9c29735U3xqiWGv8WsyBN8SX9SgkGTY1mepNUUh64,5916
191
- fractal_server/runner/filenames.py,sha256=lPnxKHtdRizr6FqG3zOdjDPyWA7GoaJGTtiuJV0gA8E,70
192
- fractal_server/runner/set_start_and_last_task_index.py,sha256=NsioSzfEpGyo9ZKrV5KsbxeI7d5V3tE678Y3IAo5rHM,1218
193
- fractal_server/runner/task_files.py,sha256=MvOrklZrN8iLj3oPx7G-iaEFj2N_mkTOnxIBX-okH1E,4037
194
- fractal_server/runner/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
195
- fractal_server/runner/v2/_local.py,sha256=js1W8_9QQad_kbvMM8ytjfWX_BEoq8OER9BLdxH0JRs,3759
196
- fractal_server/runner/v2/_slurm_ssh.py,sha256=F7Zcs9NpmXDktTX_fQQke99Ov06Hi4XUUDsDKZwOmOI,4437
197
- fractal_server/runner/v2/_slurm_sudo.py,sha256=f34B6KWtn1Wwm7Y-D95Ecub0vKpA03zYL7jZAF53tfI,4344
198
- fractal_server/runner/v2/db_tools.py,sha256=kLB0sGYNuCMPPoP4XDSClPIf7x5lSseTKUjzGk6gAfc,3318
199
- fractal_server/runner/v2/deduplicate_list.py,sha256=vidkd7K6u3w0A4zVgsGZkc9mwoP6ihTYJZQUhBNorfE,667
200
- fractal_server/runner/v2/merge_outputs.py,sha256=0ahaSwdMFAoEhxVaEaO9nSJuKIcWg9pDZ356ktSHcC0,897
201
- fractal_server/runner/v2/runner.py,sha256=PANeskwZpZbbaL8i5vk0voHfP-jli1sZaFKpiW1gq20,20245
202
- fractal_server/runner/v2/runner_functions.py,sha256=w_i74LCt_9f07w511wslTFhoDUtoE1R-IKcglEGWPIc,19618
203
- fractal_server/runner/v2/submit_workflow.py,sha256=s3mo5pLZH5x8V01IZjoJXcbpCl9geZwvISEr5StSBeI,11458
204
- fractal_server/runner/v2/task_interface.py,sha256=ftPPpOU16rbJD8q-QV7o_3ey8W7MQTFuWJiYUr4OmF4,2532
205
- fractal_server/runner/versions.py,sha256=uz59Dxj7BphnFnr-p0kyaZRH0h4w5Xkd0UJNVGtt4ds,474
206
- fractal_server/ssh/__init__.py,sha256=sVUmzxf7_DuXG1xoLQ1_00fo5NPhi2LJipSmU5EAkPs,124
207
- fractal_server/ssh/_fabric.py,sha256=Xv1SrdqwxLAWlZXjYG0-KlM0QHPe5NX6Gu0yAIrygik,26083
208
- fractal_server/string_tools.py,sha256=UJFi8rhlI6QXxX5twycLjsvOQ6x4uG7L3JdxEVDhC5A,2592
209
- fractal_server/syringe.py,sha256=3YJeIALH-wibuJ9R5VMNYUWh7x1-MkWT0SqGcWG5MY8,2795
210
- fractal_server/tasks/__init__.py,sha256=kadmVUoIghl8s190_Tt-8f-WBqMi8u8oU4Pvw39NHE8,23
211
- fractal_server/tasks/config/__init__.py,sha256=f1kARvKJPdM3b0HmJhIyMRxi8RCgPajUfS7RBhNfLKY,152
212
- fractal_server/tasks/config/_pixi.py,sha256=KVf0xYAf6hAnOKSrTmg_GYJ5VaA19kEMAydRJNHjeiA,3773
213
- fractal_server/tasks/config/_python.py,sha256=uEBm4Z9Ah-7A7pXBcSTBhFgefSuJPwN8WrWQHoNdp9M,1353
214
- fractal_server/tasks/utils.py,sha256=V7dj8o2AnoHhGSTYlqJHcRFhCIpmOrMOUhtiE_DvRVA,291
215
- fractal_server/tasks/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
216
- fractal_server/tasks/v2/local/__init__.py,sha256=2dJqJIwn9UEANg8lPFprxVLk3ug-4xYIb5pvIsqPb5s,353
217
- fractal_server/tasks/v2/local/_utils.py,sha256=MXrvGOJ3oSlZFtoWFX3eJhtvabq1SmacPWNxlrL-Pu8,3469
218
- fractal_server/tasks/v2/local/collect.py,sha256=2dvR90b57gCz8F_bmNoMLtnvlrW1ZLBzAjVzP4tjCKU,12162
219
- fractal_server/tasks/v2/local/collect_pixi.py,sha256=BTWwu07LZQB0zTvCpHJkyEHgUl8XlF1qSN5NsOC5MVo,11489
220
- fractal_server/tasks/v2/local/deactivate.py,sha256=cPJbB-zoHjmxL5goaNAUItkW0o_fg-YAd2YuXu_n8Rg,9925
221
- fractal_server/tasks/v2/local/deactivate_pixi.py,sha256=h1XdAwihACywC9qak5K2tlfz4y32zZJOA-OEkIVy67U,3627
222
- fractal_server/tasks/v2/local/delete.py,sha256=rmAjZ5i8x0jAIqOjG7eH9XFtUZkeo172S2WyZRFIVq0,2960
223
- fractal_server/tasks/v2/local/reactivate.py,sha256=ZQTaqPquevpwdchUJIp59Lw01vErA3T2XN8g1jMBNAE,6013
224
- fractal_server/tasks/v2/local/reactivate_pixi.py,sha256=R0D3bUwrAo3uyDNZRYsQ65NMl7-nhqd1GefBAh9Hk5c,8159
225
- fractal_server/tasks/v2/ssh/__init__.py,sha256=dPK6BtEZVh1GiFP05j1RKTEnZvjJez8o2KkMC2hWXaw,339
226
- fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py,sha256=3iixFaS5Uqhh28qAv_yBSW4YvffqIhE0LK0gQee9qjI,7448
227
- fractal_server/tasks/v2/ssh/_utils.py,sha256=nqw_xn3C_cD7blGyP2ySjsMIuUzZHEHBjK0NeuXf6FI,6071
228
- fractal_server/tasks/v2/ssh/collect.py,sha256=n3OT7EdA0BwtFpKfVFHabRZtdNUZQ8LaGWd_p3tqmfY,14568
229
- fractal_server/tasks/v2/ssh/collect_pixi.py,sha256=BpcuyjJ_VReHIahtuuQNTXtaSSHnSjHqmUXDQmLCfTw,15871
230
- fractal_server/tasks/v2/ssh/deactivate.py,sha256=VoXOyT5e-GVr593hDsDR7vJcIN_TIONSI4rkE2ZwxVo,12585
231
- fractal_server/tasks/v2/ssh/deactivate_pixi.py,sha256=PCMygjFyqbBWbwnjplmmedANwzobzkbS5w28tRdpr4o,4863
232
- fractal_server/tasks/v2/ssh/delete.py,sha256=f7j9RR0h0c1rUGeKjI-HhwIq6SGfhzE9kIqWcmrVbWA,4387
233
- fractal_server/tasks/v2/ssh/reactivate.py,sha256=ScVwW5K7c0PKcb0YbK25pADAF_T5uw2yX32KafsL7Ow,8488
234
- fractal_server/tasks/v2/ssh/reactivate_pixi.py,sha256=TAY_77QtUHcb5jz33PDbzgYundVSx_C4tJFTbVH_70A,11886
235
- fractal_server/tasks/v2/templates/1_create_venv.sh,sha256=PK0jdHKtQpda1zULebBaVPORt4t6V17wa4N1ohcj5ac,548
236
- fractal_server/tasks/v2/templates/2_pip_install.sh,sha256=vN9DX-eucJjB-XCuQuZmkuATGBzL4FlDQJTQdVewJG8,2155
237
- fractal_server/tasks/v2/templates/3_pip_freeze.sh,sha256=JldREScEBI4cD_qjfX4UK7V4aI-FnX9ZvVNxgpSOBFc,168
238
- fractal_server/tasks/v2/templates/4_pip_show.sh,sha256=k6yO4cuTe4U6NpHdjpbjgOVNOC_WKpjZYM9CZCPVzhI,1684
239
- fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh,sha256=q-6ZUvA6w6FDVEoSd9O63LaJ9tKZc7qAFH72SGPrd_k,284
240
- fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh,sha256=jHoALPagSCD1_HuqrxEYibWAJNOUxQGm-A2oE3f_LPE,982
241
- fractal_server/tasks/v2/templates/pixi_1_extract.sh,sha256=Jdy5OyKo2jxe_qIDB9Zi4a0FL0cMBysxvBPHlUrARQM,1099
242
- fractal_server/tasks/v2/templates/pixi_2_install.sh,sha256=h6-M101Q1AdAfZNZyPfSUc8AlZ-uS84Hae4vJdDSglY,1601
243
- fractal_server/tasks/v2/templates/pixi_3_post_install.sh,sha256=99J8KXkNeQk9utuEtUxfAZS6VCThC32X7I7HAp2gdTU,2501
244
- fractal_server/tasks/v2/utils_background.py,sha256=jjWxNbHPuvAkXNIQ9Bqs67X72xHSRqmY8_BCoj0HM3E,4840
245
- fractal_server/tasks/v2/utils_database.py,sha256=C1td6m6ab1NdXVoT6stvVdrY_3FNck8OkRZZhn9h8ZA,1797
246
- fractal_server/tasks/v2/utils_package_names.py,sha256=RDg__xrvQs4ieeVzmVdMcEh95vGQYrv9Hfal-5EDBM8,2393
247
- fractal_server/tasks/v2/utils_pixi.py,sha256=4q0inbOfJ-TWe7wFIq-f7W7-iKyd98tgNQpEkR-TE6E,3441
248
- fractal_server/tasks/v2/utils_python_interpreter.py,sha256=36AvrMoydr9w6Rm_7hKl5QK8zYI0KIm4Pv8WHANWwjE,658
249
- fractal_server/tasks/v2/utils_templates.py,sha256=L5GblhIKJwyzUbCORj1et5mh-7mG19nT5kmIpxOEj90,3489
250
- fractal_server/types/__init__.py,sha256=aA_8J1xXzuiLqpwO_Qf18-qzaRcYkHzevhH_T-diXWM,2026
251
- fractal_server/types/validators/__init__.py,sha256=5uj6KJ9MelFZgyoq3MzXLhgWCl0yiriS7XKmb0gathg,392
252
- fractal_server/types/validators/_common_validators.py,sha256=MpxyaP2kwgbyCTOaVRjYnJ74Lfi0f2X0q3rjX9w3vTk,1170
253
- fractal_server/types/validators/_filter_validators.py,sha256=irmjzycmiR6F4fmWUeA45Pdh7AeLufwVjNItskDsknk,831
254
- fractal_server/types/validators/_workflow_task_arguments_validators.py,sha256=HL7NgV8d56XbcD6gG5PVFUPMHjDm5Q-d7cXhVLdFAGU,387
255
- fractal_server/urls.py,sha256=QjIKAC1a46bCdiPMu3AlpgFbcv6a4l3ABcd5xz190Og,471
256
- fractal_server/utils.py,sha256=SYVVUuXe_nWyrJLsy7QA-KJscwc5PHEXjvsW4TK7XQI,2180
257
- fractal_server/zip_tools.py,sha256=H0w7wS5yE4ebj7hw1_77YQ959dl2c-L0WX6J_ro1TY4,4884
258
- fractal_server-2.17.1a0.dist-info/METADATA,sha256=XJQY23pLEp0LL8hg0EN9kPh7P6wfJLD9GwcHq8psXQo,4226
259
- fractal_server-2.17.1a0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
260
- fractal_server-2.17.1a0.dist-info/entry_points.txt,sha256=8tV2kynvFkjnhbtDnxAqImL6HMVKsopgGfew0DOp5UY,58
261
- fractal_server-2.17.1a0.dist-info/licenses/LICENSE,sha256=QKAharUuhxL58kSoLizKJeZE3mTCBnX6ucmz8W0lxlk,1576
262
- fractal_server-2.17.1a0.dist-info/RECORD,,