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
@@ -5,11 +5,11 @@ Revises: 9fd26a2b0de4
5
5
  Create Date: 2024-04-18 10:35:19.067833
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  import sqlmodel
10
11
  from alembic import op
11
12
 
12
-
13
13
  # revision identifiers, used by Alembic.
14
14
  revision = "5bf02391cfef"
15
15
  down_revision = "9fd26a2b0de4"
@@ -50,9 +50,7 @@ def upgrade() -> None:
50
50
  sqlmodel.sql.sqltypes.AutoString(),
51
51
  nullable=True,
52
52
  ),
53
- sa.Column(
54
- "source", sqlmodel.sql.sqltypes.AutoString(), nullable=False
55
- ),
53
+ sa.Column("source", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
56
54
  sa.Column(
57
55
  "meta_non_parallel", sa.JSON(), server_default="{}", nullable=False
58
56
  ),
@@ -60,9 +58,7 @@ def upgrade() -> None:
60
58
  "meta_parallel", sa.JSON(), server_default="{}", nullable=False
61
59
  ),
62
60
  sa.Column("owner", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
63
- sa.Column(
64
- "version", sqlmodel.sql.sqltypes.AutoString(), nullable=True
65
- ),
61
+ sa.Column("version", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
66
62
  sa.Column("args_schema_non_parallel", sa.JSON(), nullable=True),
67
63
  sa.Column("args_schema_parallel", sa.JSON(), nullable=True),
68
64
  sa.Column(
@@ -166,9 +162,7 @@ def upgrade() -> None:
166
162
  "start_timestamp", sa.DateTime(timezone=True), nullable=False
167
163
  ),
168
164
  sa.Column("end_timestamp", sa.DateTime(timezone=True), nullable=True),
169
- sa.Column(
170
- "status", sqlmodel.sql.sqltypes.AutoString(), nullable=False
171
- ),
165
+ sa.Column("status", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
172
166
  sa.Column("log", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
173
167
  sa.ForeignKeyConstraint(
174
168
  ["dataset_id"],
@@ -5,6 +5,7 @@ Revises: f384e1c0cf5d
5
5
  Create Date: 2023-07-17 11:39:47.679582
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.sql import column
@@ -5,11 +5,11 @@ Revises: d4fe3708d309
5
5
  Create Date: 2023-12-05 12:36:44.100065
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  import sqlmodel
10
11
  from alembic import op
11
12
 
12
-
13
13
  # revision identifiers, used by Alembic.
14
14
  revision = "71eefd1dd202"
15
15
  down_revision = "d4fe3708d309"
@@ -0,0 +1,29 @@
1
+ """Remove project_dir server_default
2
+
3
+ Revision ID: 7673fe18c05d
4
+ Revises: 49d0856e9569
5
+ Create Date: 2025-11-11 16:50:20.079193
6
+
7
+ """
8
+
9
+ from alembic import op
10
+
11
+ # revision identifiers, used by Alembic.
12
+ revision = "7673fe18c05d"
13
+ down_revision = "49d0856e9569"
14
+ branch_labels = None
15
+ depends_on = None
16
+
17
+
18
+ def upgrade() -> None:
19
+ """
20
+ Remove `server_default` for `project_dir` column - see
21
+ https://alembic.sqlalchemy.org/en/latest/ops.html#alembic.operations.Operations.alter_column.params.server_default
22
+ """
23
+ with op.batch_alter_table("user_oauth") as batch_op:
24
+ batch_op.alter_column("project_dir", server_default=None)
25
+
26
+
27
+ def downgrade() -> None:
28
+ with op.batch_alter_table("user_oauth") as batch_op:
29
+ batch_op.alter_column("project_dir", server_default="/PLACEHOLDER")
@@ -5,8 +5,8 @@ Revises: 969d84257cac
5
5
  Create Date: 2025-06-03 09:32:30.757651
6
6
 
7
7
  """
8
- from alembic import op
9
8
 
9
+ from alembic import op
10
10
 
11
11
  # revision identifiers, used by Alembic.
12
12
  revision = "791ce783d3d8"
@@ -5,6 +5,7 @@ Revises: 981d588fe248
5
5
  Create Date: 2025-10-30 14:16:53.639006
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  import sqlmodel
10
11
  from alembic import op
@@ -5,6 +5,7 @@ Revises: 99ea79d9e5d2
5
5
  Create Date: 2023-10-26 16:11:44.061971
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
@@ -5,10 +5,10 @@ Revises: 034a469ec2eb
5
5
  Create Date: 2024-10-29 09:01:33.075251
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
11
-
12
12
  # revision identifiers, used by Alembic.
13
13
  revision = "8e8f227a3e36"
14
14
  down_revision = "034a469ec2eb"
@@ -31,9 +31,7 @@ def downgrade() -> None:
31
31
  # ### commands auto generated by Alembic - please adjust! ###
32
32
  with op.batch_alter_table("taskv2", schema=None) as batch_op:
33
33
  batch_op.add_column(
34
- sa.Column(
35
- "owner", sa.VARCHAR(), autoincrement=False, nullable=True
36
- )
34
+ sa.Column("owner", sa.VARCHAR(), autoincrement=False, nullable=True)
37
35
  )
38
36
  batch_op.alter_column(
39
37
  "taskgroupv2_id", existing_type=sa.INTEGER(), nullable=True
@@ -5,11 +5,11 @@ Revises: a7f4d6137b53
5
5
  Create Date: 2023-08-01 14:13:15.322398
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  import sqlmodel
10
11
  from alembic import op
11
12
 
12
-
13
13
  # revision identifiers, used by Alembic.
14
14
  revision = "8f79bd162e35"
15
15
  down_revision = "a7f4d6137b53"
@@ -5,6 +5,7 @@ Revises: 9c5ae74c9b98
5
5
  Create Date: 2024-09-25 09:33:18.014831
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import postgresql
@@ -5,10 +5,10 @@ Revises: c90a7c76e996
5
5
  Create Date: 2025-05-13 11:17:22.089308
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
11
-
12
12
  # revision identifiers, used by Alembic.
13
13
  revision = "969d84257cac"
14
14
  down_revision = "c90a7c76e996"
@@ -5,10 +5,10 @@ Revises: 71eefd1dd202
5
5
  Create Date: 2023-12-05 15:36:48.573358
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
11
-
12
12
  # revision identifiers, used by Alembic.
13
13
  revision = "97f444d47249"
14
14
  down_revision = "71eefd1dd202"
@@ -5,11 +5,11 @@ Revises: 0f5f85bb2ae7
5
5
  Create Date: 2025-09-15 08:31:10.363449
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  import sqlmodel
10
11
  from alembic import op
11
12
 
12
-
13
13
  # revision identifiers, used by Alembic.
14
14
  revision = "981d588fe248"
15
15
  down_revision = "0f5f85bb2ae7"
@@ -5,10 +5,10 @@ Revises: 8f79bd162e35
5
5
  Create Date: 2023-10-16 09:45:15.132185
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
11
-
12
12
  # revision identifiers, used by Alembic.
13
13
  revision = "99ea79d9e5d2"
14
14
  down_revision = "8f79bd162e35"
@@ -20,9 +20,7 @@ def upgrade() -> None:
20
20
  # ### commands auto generated by Alembic - please adjust! ###
21
21
  with op.batch_alter_table("dataset", schema=None) as batch_op:
22
22
  batch_op.add_column(
23
- sa.Column(
24
- "history", sa.JSON(), server_default="[]", nullable=False
25
- )
23
+ sa.Column("history", sa.JSON(), server_default="[]", nullable=False)
26
24
  )
27
25
 
28
26
  # ### end Alembic commands ###
@@ -5,11 +5,11 @@ Revises: d9a140db5d42
5
5
  Create Date: 2024-09-24 12:01:13.393326
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  import sqlmodel
10
11
  from alembic import op
11
12
 
12
-
13
13
  # revision identifiers, used by Alembic.
14
14
  revision = "9c5ae74c9b98"
15
15
  down_revision = "d9a140db5d42"
@@ -5,8 +5,8 @@ Revises: e81103413827
5
5
  Create Date: 2025-04-07 13:13:14.596394
6
6
 
7
7
  """
8
- from alembic import op
9
8
 
9
+ from alembic import op
10
10
 
11
11
  # revision identifiers, used by Alembic.
12
12
  revision = "9db60297b8b2"
@@ -5,13 +5,13 @@ Revises: efa89c30e0a4
5
5
  Create Date: 2024-01-11 09:31:20.950090
6
6
 
7
7
  """
8
+
8
9
  from datetime import datetime
9
10
  from datetime import timezone
10
11
 
11
12
  import sqlalchemy as sa
12
13
  from alembic import op
13
14
 
14
-
15
15
  # revision identifiers, used by Alembic.
16
16
  revision = "9fd26a2b0de4"
17
17
  down_revision = "4cedeb448a53"
@@ -5,10 +5,10 @@ Revises: 70e77f1c38b0
5
5
  Create Date: 2023-07-24 16:53:02.569582
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
11
-
12
12
  # revision identifiers, used by Alembic.
13
13
  revision = "a7f4d6137b53"
14
14
  down_revision = "70e77f1c38b0"
@@ -5,6 +5,7 @@ Revises: 1eac13a26c83
5
5
  Create Date: 2025-02-17 14:22:32.701581
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import postgresql
@@ -5,6 +5,7 @@ Revises: db09233ad13a
5
5
  Create Date: 2025-01-30 14:44:04.302795
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import postgresql
@@ -5,11 +5,11 @@ Revises: 791ce783d3d8
5
5
  Create Date: 2025-05-29 16:31:17.565973
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  import sqlmodel
10
11
  from alembic import op
11
12
 
12
-
13
13
  # revision identifiers, used by Alembic.
14
14
  revision = "b1e7f7a1ff71"
15
15
  down_revision = "791ce783d3d8"
@@ -5,6 +5,7 @@ Revises: b1e7f7a1ff71
5
5
  Create Date: 2025-06-19 10:12:06.699107
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import postgresql
@@ -5,10 +5,10 @@ Revises: f37aceb45062
5
5
  Create Date: 2025-04-16 10:44:30.219309
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
11
-
12
12
  # revision identifiers, used by Alembic.
13
13
  revision = "c90a7c76e996"
14
14
  down_revision = "f37aceb45062"
@@ -0,0 +1,49 @@
1
+ """Drop UserOAuth.user_settings_id
2
+
3
+ Revision ID: caba9fb1ea5e
4
+ Revises: 83bc2ad3ffcc
5
+ Create Date: 2025-11-11 16:38:27.243693
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "caba9fb1ea5e"
14
+ down_revision = "83bc2ad3ffcc"
15
+ branch_labels = None
16
+ depends_on = None
17
+
18
+
19
+ def upgrade() -> None:
20
+ # ### commands auto generated by Alembic - please adjust! ###
21
+ with op.batch_alter_table("user_oauth", schema=None) as batch_op:
22
+ batch_op.drop_constraint(
23
+ batch_op.f("fk_user_oauth_user_settings_id_user_settings"),
24
+ type_="foreignkey",
25
+ )
26
+ batch_op.drop_column("user_settings_id")
27
+
28
+ # ### end Alembic commands ###
29
+
30
+
31
+ def downgrade() -> None:
32
+ # ### commands auto generated by Alembic - please adjust! ###
33
+ with op.batch_alter_table("user_oauth", schema=None) as batch_op:
34
+ batch_op.add_column(
35
+ sa.Column(
36
+ "user_settings_id",
37
+ sa.INTEGER(),
38
+ autoincrement=False,
39
+ nullable=True,
40
+ )
41
+ )
42
+ batch_op.create_foreign_key(
43
+ batch_op.f("fk_user_oauth_user_settings_id_user_settings"),
44
+ "user_settings",
45
+ ["user_settings_id"],
46
+ ["id"],
47
+ )
48
+
49
+ # ### end Alembic commands ###
@@ -5,6 +5,7 @@ Revises: 19eca0dd47a9
5
5
  Create Date: 2024-11-20 15:01:52.659832
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  import sqlmodel
10
11
  from alembic import op
@@ -33,16 +34,10 @@ def upgrade() -> None:
33
34
  sa.Column(
34
35
  "version", sqlmodel.sql.sqltypes.AutoString(), nullable=False
35
36
  ),
36
- sa.Column(
37
- "status", sqlmodel.sql.sqltypes.AutoString(), nullable=False
38
- ),
39
- sa.Column(
40
- "action", sqlmodel.sql.sqltypes.AutoString(), nullable=False
41
- ),
37
+ sa.Column("status", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
38
+ sa.Column("action", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
42
39
  sa.Column("log", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
43
- sa.Column(
44
- "timestamp_ended", sa.DateTime(timezone=True), nullable=True
45
- ),
40
+ sa.Column("timestamp_ended", sa.DateTime(timezone=True), nullable=True),
46
41
  sa.ForeignKeyConstraint(
47
42
  ["taskgroupv2_id"],
48
43
  ["taskgroupv2.id"],
@@ -5,6 +5,7 @@ Revises: e75cac726012
5
5
  Create Date: 2023-11-30 14:58:23.917824
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
@@ -5,10 +5,10 @@ Revises: 94a47ea2d3ff
5
5
  Create Date: 2024-09-26 14:39:26.135101
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
11
-
12
12
  # revision identifiers, used by Alembic.
13
13
  revision = "da2cb2ac4255"
14
14
  down_revision = "94a47ea2d3ff"
@@ -5,6 +5,7 @@ Revises: 316140ff7ee1
5
5
  Create Date: 2025-01-14 14:50:46.007222
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import postgresql
@@ -0,0 +1,50 @@
1
+ """delete LinkUserProject ondelete Project
2
+
3
+ Revision ID: e0e717ae2f26
4
+ Revises: 40d6d6511b20
5
+ Create Date: 2025-11-17 14:33:56.348071
6
+
7
+ """
8
+
9
+ from alembic import op
10
+
11
+ # revision identifiers, used by Alembic.
12
+ revision = "e0e717ae2f26"
13
+ down_revision = "40d6d6511b20"
14
+ branch_labels = None
15
+ depends_on = None
16
+
17
+
18
+ def upgrade() -> None:
19
+ # ### commands auto generated by Alembic - please adjust! ###
20
+ with op.batch_alter_table("linkuserprojectv2", schema=None) as batch_op:
21
+ batch_op.drop_constraint(
22
+ batch_op.f("fk_linkuserprojectv2_project_id_projectv2"),
23
+ type_="foreignkey",
24
+ )
25
+ batch_op.create_foreign_key(
26
+ batch_op.f("fk_linkuserprojectv2_project_id_projectv2"),
27
+ "projectv2",
28
+ ["project_id"],
29
+ ["id"],
30
+ ondelete="CASCADE",
31
+ )
32
+
33
+ # ### end Alembic commands ###
34
+
35
+
36
+ def downgrade() -> None:
37
+ # ### commands auto generated by Alembic - please adjust! ###
38
+ with op.batch_alter_table("linkuserprojectv2", schema=None) as batch_op:
39
+ batch_op.drop_constraint(
40
+ batch_op.f("fk_linkuserprojectv2_project_id_projectv2"),
41
+ type_="foreignkey",
42
+ )
43
+ batch_op.create_foreign_key(
44
+ batch_op.f("fk_linkuserprojectv2_project_id_projectv2"),
45
+ "projectv2",
46
+ ["project_id"],
47
+ ["id"],
48
+ )
49
+
50
+ # ### end Alembic commands ###
@@ -5,6 +5,7 @@ Revises: 84bf0fffde30
5
5
  Create Date: 2023-10-30 15:51:18.808789
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
@@ -5,10 +5,10 @@ Revises: 47351f8c7ebc
5
5
  Create Date: 2025-03-26 11:10:41.748248
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
11
-
12
12
  # revision identifiers, used by Alembic.
13
13
  revision = "e81103413827"
14
14
  down_revision = "47351f8c7ebc"
@@ -5,6 +5,7 @@ Revises: 97f444d47249
5
5
  Create Date: 2023-12-20 10:06:52.139917
6
6
 
7
7
  """
8
+
8
9
  from datetime import datetime
9
10
  from datetime import timezone
10
11
 
@@ -5,10 +5,10 @@ Revises: 9db60297b8b2
5
5
  Create Date: 2025-04-14 13:49:40.910342
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
 
11
-
12
12
  # revision identifiers, used by Alembic.
13
13
  revision = "f37aceb45062"
14
14
  down_revision = "9db60297b8b2"
@@ -5,6 +5,7 @@ Revises: 4c308bcaea2b
5
5
  Create Date: 2023-06-06 15:10:51.838607
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  from alembic import op
10
11
  from sqlalchemy.dialects import sqlite
@@ -5,6 +5,7 @@ Revises: af1ef1c83c9b
5
5
  Create Date: 2025-03-14 15:25:01.083619
6
6
 
7
7
  """
8
+
8
9
  import sqlalchemy as sa
9
10
  import sqlmodel
10
11
  from alembic import op
@@ -37,9 +38,7 @@ def upgrade() -> None:
37
38
  sa.Column(
38
39
  "timestamp_started", sa.DateTime(timezone=True), nullable=False
39
40
  ),
40
- sa.Column(
41
- "status", sqlmodel.sql.sqltypes.AutoString(), nullable=False
42
- ),
41
+ sa.Column("status", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
43
42
  sa.Column("num_available_images", sa.Integer(), nullable=False),
44
43
  sa.ForeignKeyConstraint(
45
44
  ["dataset_id"],
@@ -59,12 +58,8 @@ def upgrade() -> None:
59
58
  "historyunit",
60
59
  sa.Column("id", sa.Integer(), nullable=False),
61
60
  sa.Column("history_run_id", sa.Integer(), nullable=False),
62
- sa.Column(
63
- "logfile", sqlmodel.sql.sqltypes.AutoString(), nullable=True
64
- ),
65
- sa.Column(
66
- "status", sqlmodel.sql.sqltypes.AutoString(), nullable=False
67
- ),
61
+ sa.Column("logfile", sqlmodel.sql.sqltypes.AutoString(), nullable=True),
62
+ sa.Column("status", sqlmodel.sql.sqltypes.AutoString(), nullable=False),
68
63
  sa.Column("zarr_urls", postgresql.ARRAY(sa.String()), nullable=True),
69
64
  sa.ForeignKeyConstraint(
70
65
  ["history_run_id"],
@@ -4,13 +4,16 @@ from pydantic import ConfigDict
4
4
 
5
5
  class JobRunnerConfigLocal(BaseModel):
6
6
  """
7
- Specifications of the local-backend configuration
7
+ Runner-configuration specifications, for a `local` resource.
8
+
9
+ The typical use case is that setting `parallel_tasks_per_job` to a
10
+ small number (e.g. 1) will limit parallelism when executing tasks
11
+ requiring a large amount of resources (e.g. memory) on a local machine.
8
12
 
9
13
  Attributes:
10
14
  parallel_tasks_per_job:
11
- Maximum number of tasks to be run in parallel as part of a call to
12
- `FractalThreadPoolExecutor.map`; if `None`, then all tasks will
13
- start at the same time.
15
+ Maximum number of tasks to be run in parallel within a local
16
+ runner. If `None`, then all tasks may start at the same time.
14
17
  """
15
18
 
16
19
  model_config = ConfigDict(extra="forbid")
@@ -18,4 +21,4 @@ class JobRunnerConfigLocal(BaseModel):
18
21
 
19
22
  @property
20
23
  def batch_size(self) -> int:
21
- return self.parallel_tasks_per_job or 1
24
+ return self.parallel_tasks_per_job or 0