fractal-server 2.19.0a2__tar.gz → 2.19.1__tar.gz

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 (282) hide show
  1. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/PKG-INFO +1 -1
  2. fractal_server-2.19.1/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/dataset.py +0 -4
  4. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/job.py +4 -0
  5. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/task_group.py +4 -0
  6. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +6 -0
  7. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/__init__.py +0 -2
  8. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/_aux_functions.py +6 -0
  9. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/submit.py +2 -0
  10. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/task_collection.py +2 -0
  11. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/task_collection_pixi.py +2 -0
  12. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +6 -0
  13. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/workflowtask.py +2 -0
  14. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/workflow.py +4 -1
  15. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/workflowtask.py +9 -2
  16. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/security/__init__.py +11 -6
  17. fractal_server-2.19.1/fractal_server/migrations/versions/18a26fcdea5d_drop_dataset_history.py +41 -0
  18. fractal_server-2.19.1/fractal_server/migrations/versions/cfd13f7954e7_add_fractal_server_version_to_jobv2_and_.py +52 -0
  19. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/config/_slurm.py +2 -0
  20. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_common/base_slurm_runner.py +1 -0
  21. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_common/get_slurm_config.py +1 -0
  22. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_common/slurm_config.py +3 -0
  23. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/submit_workflow.py +0 -2
  24. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/pyproject.toml +7 -8
  25. fractal_server-2.19.0a2/fractal_server/__init__.py +0 -1
  26. fractal_server-2.19.0a2/fractal_server/app/routes/api/v2/status_legacy.py +0 -156
  27. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/LICENSE +0 -0
  28. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/README.md +0 -0
  29. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/__main__.py +0 -0
  30. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/alembic.ini +0 -0
  31. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/__init__.py +0 -0
  32. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/db/__init__.py +0 -0
  33. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/__init__.py +0 -0
  34. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/linkusergroup.py +0 -0
  35. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/linkuserproject.py +0 -0
  36. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/security.py +0 -0
  37. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/__init__.py +0 -0
  38. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/accounting.py +0 -0
  39. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/history.py +0 -0
  40. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/profile.py +0 -0
  41. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/project.py +0 -0
  42. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/resource.py +0 -0
  43. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/task.py +0 -0
  44. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/workflow.py +0 -0
  45. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/models/v2/workflowtask.py +0 -0
  46. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/__init__.py +0 -0
  47. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/__init__.py +0 -0
  48. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
  49. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/_aux_functions.py +0 -0
  50. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
  51. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
  52. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/job.py +0 -0
  53. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/profile.py +0 -0
  54. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/resource.py +0 -0
  55. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/sharing.py +0 -0
  56. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/task.py +0 -0
  57. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
  58. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/__init__.py +0 -0
  59. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/alive.py +0 -0
  60. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/settings.py +0 -0
  61. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
  62. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/_aux_functions_sharing.py +0 -0
  63. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
  64. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py +0 -0
  65. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
  66. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py +0 -0
  67. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  68. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/history.py +0 -0
  69. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/images.py +0 -0
  70. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/job.py +0 -0
  71. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/pre_submission_checks.py +0 -0
  72. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/project.py +0 -0
  73. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/sharing.py +0 -0
  74. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/task.py +0 -0
  75. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  76. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/task_group.py +0 -0
  77. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/task_version_update.py +0 -0
  78. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  79. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
  80. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/auth/__init__.py +0 -0
  81. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  82. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/auth/current_user.py +0 -0
  83. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/auth/group.py +0 -0
  84. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/auth/login.py +0 -0
  85. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/auth/oauth.py +0 -0
  86. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/auth/register.py +0 -0
  87. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/auth/router.py +0 -0
  88. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/auth/users.py +0 -0
  89. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/auth/viewer_paths.py +0 -0
  90. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/aux/__init__.py +0 -0
  91. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/aux/_job.py +0 -0
  92. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/aux/_runner.py +0 -0
  93. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/aux/_versions.py +0 -0
  94. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/aux/validate_user_profile.py +0 -0
  95. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/routes/pagination.py +0 -0
  96. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/__init__.py +0 -0
  97. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/user.py +0 -0
  98. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/user_group.py +0 -0
  99. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/__init__.py +0 -0
  100. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/accounting.py +0 -0
  101. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/dataset.py +0 -0
  102. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/dumps.py +0 -0
  103. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/history.py +0 -0
  104. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/job.py +0 -0
  105. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/manifest.py +0 -0
  106. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/profile.py +0 -0
  107. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/project.py +0 -0
  108. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/resource.py +0 -0
  109. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/sharing.py +0 -0
  110. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/status_legacy.py +0 -0
  111. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/task.py +0 -0
  112. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  113. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/schemas/v2/task_group.py +0 -0
  114. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/security/signup_email.py +0 -0
  115. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/app/shutdown.py +0 -0
  116. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/config/__init__.py +0 -0
  117. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/config/_data.py +0 -0
  118. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/config/_database.py +0 -0
  119. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/config/_email.py +0 -0
  120. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/config/_main.py +0 -0
  121. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/config/_oauth.py +0 -0
  122. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/config/_settings_config.py +0 -0
  123. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/data_migrations/tools.py +0 -0
  124. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/exceptions.py +0 -0
  125. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/gunicorn_fractal.py +0 -0
  126. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/images/__init__.py +0 -0
  127. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/images/models.py +0 -0
  128. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/images/status_tools.py +0 -0
  129. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/images/tools.py +0 -0
  130. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/logger.py +0 -0
  131. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/main.py +0 -0
  132. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/env.py +0 -0
  133. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/naming_convention.py +0 -0
  134. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  135. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/068496367952_drop_taskgroup_venv_size_and_files_.py +0 -0
  136. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  137. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/0f5f85bb2ae7_add_pre_pinned_packages.py +0 -0
  138. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  139. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/1a83a5260664_rename.py +0 -0
  140. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/1bf8785755f9_add_description_to_workflow_and_.py +0 -0
  141. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
  142. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
  143. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/40d6d6511b20_add_index_to_history_models.py +0 -0
  144. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/45fbb391d7af_make_resource_id_fk_non_nullable.py +0 -0
  145. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
  146. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/49d0856e9569_drop_table.py +0 -0
  147. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  148. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  149. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  150. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  151. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  152. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/5fb08bf05b14_drop_taskv2_source.py +0 -0
  153. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  154. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  155. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/7673fe18c05d_remove_project_dir_server_default.py +0 -0
  156. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/7910eed4cf97_user_project_dirs_and_usergroup_viewer_.py +0 -0
  157. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/791ce783d3d8_add_indices.py +0 -0
  158. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py +0 -0
  159. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  160. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/88270f589c9b_add_prevent_new_submissions.py +0 -0
  161. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  162. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  163. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  164. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/969d84257cac_add_historyrun_task_id.py +0 -0
  165. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  166. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/981d588fe248_add_executor_error_log.py +0 -0
  167. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  168. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  169. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +0 -0
  170. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  171. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  172. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
  173. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
  174. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py +0 -0
  175. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/b3ffb095f973_json_to_jsonb.py +0 -0
  176. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/b7477cc98f45_2_18_1.py +0 -0
  177. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/bc0e8b3327a7_project_sharing.py +0 -0
  178. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +0 -0
  179. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/caba9fb1ea5e_drop_useroauth_user_settings_id.py +0 -0
  180. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  181. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  182. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  183. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
  184. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/e0e717ae2f26_delete_linkuserproject_ondelete_project.py +0 -0
  185. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/e53dc51fdf93_add_useroauth_is_guest.py +0 -0
  186. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  187. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
  188. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  189. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/f0702066b007_one_submitted_job_per_dataset.py +0 -0
  190. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +0 -0
  191. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  192. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
  193. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/py.typed +0 -0
  194. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/__init__.py +0 -0
  195. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/components.py +0 -0
  196. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/config/__init__.py +0 -0
  197. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/config/_local.py +0 -0
  198. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/config/slurm_mem_to_MB.py +0 -0
  199. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/exceptions.py +0 -0
  200. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/__init__.py +0 -0
  201. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/base_runner.py +0 -0
  202. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/call_command_wrapper.py +0 -0
  203. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/local/__init__.py +0 -0
  204. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/local/get_local_config.py +0 -0
  205. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/local/runner.py +0 -0
  206. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_common/__init__.py +0 -0
  207. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_common/_batching.py +0 -0
  208. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_common/_job_states.py +0 -0
  209. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_common/remote.py +0 -0
  210. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_common/slurm_job_task_models.py +0 -0
  211. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_ssh/__init__.py +0 -0
  212. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_ssh/run_subprocess.py +0 -0
  213. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_ssh/runner.py +0 -0
  214. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_ssh/tar_commands.py +0 -0
  215. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_sudo/__init__.py +0 -0
  216. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
  217. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/executors/slurm_sudo/runner.py +0 -0
  218. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/filenames.py +0 -0
  219. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/set_start_and_last_task_index.py +0 -0
  220. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/task_files.py +0 -0
  221. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/__init__.py +0 -0
  222. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/_local.py +0 -0
  223. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/_slurm_ssh.py +0 -0
  224. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/_slurm_sudo.py +0 -0
  225. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/db_tools.py +0 -0
  226. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/deduplicate_list.py +0 -0
  227. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/merge_outputs.py +0 -0
  228. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/runner.py +0 -0
  229. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/runner_functions.py +0 -0
  230. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/v2/task_interface.py +0 -0
  231. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/runner/versions.py +0 -0
  232. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/ssh/__init__.py +0 -0
  233. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/ssh/_fabric.py +0 -0
  234. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/string_tools.py +0 -0
  235. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/syringe.py +0 -0
  236. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/__init__.py +0 -0
  237. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/config/__init__.py +0 -0
  238. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/config/_pixi.py +0 -0
  239. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/config/_python.py +0 -0
  240. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/utils.py +0 -0
  241. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/__init__.py +0 -0
  242. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/local/__init__.py +0 -0
  243. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/local/_utils.py +0 -0
  244. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/local/collect.py +0 -0
  245. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/local/collect_pixi.py +0 -0
  246. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/local/deactivate.py +0 -0
  247. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/local/deactivate_pixi.py +0 -0
  248. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/local/delete.py +0 -0
  249. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/local/reactivate.py +0 -0
  250. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/local/reactivate_pixi.py +0 -0
  251. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  252. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py +0 -0
  253. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  254. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/ssh/collect.py +0 -0
  255. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/ssh/collect_pixi.py +0 -0
  256. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
  257. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/ssh/deactivate_pixi.py +0 -0
  258. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/ssh/delete.py +0 -0
  259. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
  260. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/ssh/reactivate_pixi.py +0 -0
  261. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  262. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  263. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  264. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  265. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/templates/5_pip_install_from_freeze.sh +0 -0
  266. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/templates/pixi_1_extract.sh +0 -0
  267. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/templates/pixi_2_install.sh +0 -0
  268. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/templates/pixi_3_post_install.sh +0 -0
  269. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/utils_background.py +0 -0
  270. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/utils_database.py +0 -0
  271. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  272. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/utils_pixi.py +0 -0
  273. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  274. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/tasks/v2/utils_templates.py +0 -0
  275. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/types/__init__.py +0 -0
  276. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/types/validators/__init__.py +0 -0
  277. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/types/validators/_common_validators.py +0 -0
  278. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/types/validators/_filter_validators.py +0 -0
  279. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/types/validators/_workflow_task_arguments_validators.py +0 -0
  280. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/urls.py +0 -0
  281. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/utils.py +0 -0
  282. {fractal_server-2.19.0a2 → fractal_server-2.19.1}/fractal_server/zip_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fractal-server
3
- Version: 2.19.0a2
3
+ Version: 2.19.1
4
4
  Summary: Backend component of the Fractal analytics platform
5
5
  Author: Tommaso Comparin, Marco Franzon, Yuri Chiucconi, Jacopo Nespolo
6
6
  Author-email: Tommaso Comparin <tommaso.comparin@exact-lab.it>, Marco Franzon <marco.franzon@exact-lab.it>, Yuri Chiucconi <yuri.chiucconi@exact-lab.it>, Jacopo Nespolo <jacopo.nespolo@exact-lab.it>
@@ -0,0 +1 @@
1
+ __VERSION__ = "2.19.1"
@@ -27,10 +27,6 @@ class DatasetV2(SQLModel, table=True):
27
27
  sa_relationship_kwargs=dict(lazy="selectin"),
28
28
  )
29
29
 
30
- history: list[dict[str, Any]] = Field(
31
- sa_column=Column(JSONB, server_default="[]", nullable=False)
32
- )
33
-
34
30
  timestamp_created: datetime = Field(
35
31
  default_factory=get_timestamp,
36
32
  sa_column=Column(DateTime(timezone=True), nullable=False),
@@ -5,6 +5,7 @@ from pydantic import ConfigDict
5
5
  from sqlalchemy import Column
6
6
  from sqlalchemy.dialects.postgresql import JSONB
7
7
  from sqlalchemy.types import DateTime
8
+ from sqlalchemy.types import String
8
9
  from sqlmodel import Field
9
10
  from sqlmodel import Index
10
11
  from sqlmodel import SQLModel
@@ -44,6 +45,9 @@ class JobV2(SQLModel, table=True):
44
45
  project_dump: dict[str, Any] = Field(
45
46
  sa_column=Column(JSONB, nullable=False)
46
47
  )
48
+ fractal_server_version: str = Field(
49
+ sa_column=Column(String, server_default="pre-2.19.0", nullable=False)
50
+ )
47
51
 
48
52
  worker_init: str | None = None
49
53
  working_dir: str | None = None
@@ -4,6 +4,7 @@ from datetime import timezone
4
4
  from sqlalchemy import Column
5
5
  from sqlalchemy.dialects.postgresql import JSONB
6
6
  from sqlalchemy.types import DateTime
7
+ from sqlalchemy.types import String
7
8
  from sqlmodel import Field
8
9
  from sqlmodel import Relationship
9
10
  from sqlmodel import SQLModel
@@ -151,3 +152,6 @@ class TaskGroupActivityV2(SQLModel, table=True):
151
152
  default=None,
152
153
  sa_column=Column(DateTime(timezone=True)),
153
154
  )
155
+ fractal_server_version: str = Field(
156
+ sa_column=Column(String, server_default="pre-2.19.0", nullable=False)
157
+ )
@@ -5,6 +5,7 @@ from fastapi import HTTPException
5
5
  from fastapi import Response
6
6
  from fastapi import status
7
7
 
8
+ from fractal_server import __VERSION__
8
9
  from fractal_server.app.db import AsyncSession
9
10
  from fractal_server.app.db import get_async_db
10
11
  from fractal_server.app.models import UserOAuth
@@ -93,6 +94,7 @@ async def deactivate_task_group(
93
94
  ),
94
95
  timestamp_started=get_timestamp(),
95
96
  timestamp_ended=get_timestamp(),
97
+ fractal_server_version=__VERSION__,
96
98
  )
97
99
  db.add(task_group)
98
100
  db.add(task_group_activity)
@@ -108,6 +110,7 @@ async def deactivate_task_group(
108
110
  pkg_name=task_group.pkg_name,
109
111
  version=task_group.version,
110
112
  timestamp_started=get_timestamp(),
113
+ fractal_server_version=__VERSION__,
111
114
  )
112
115
  db.add(task_group_activity)
113
116
  await db.commit()
@@ -188,6 +191,7 @@ async def reactivate_task_group(
188
191
  ),
189
192
  timestamp_started=get_timestamp(),
190
193
  timestamp_ended=get_timestamp(),
194
+ fractal_server_version=__VERSION__,
191
195
  )
192
196
  db.add(task_group)
193
197
  db.add(task_group_activity)
@@ -211,6 +215,7 @@ async def reactivate_task_group(
211
215
  pkg_name=task_group.pkg_name,
212
216
  version=task_group.version,
213
217
  timestamp_started=get_timestamp(),
218
+ fractal_server_version=__VERSION__,
214
219
  )
215
220
  db.add(task_group_activity)
216
221
  await db.commit()
@@ -264,6 +269,7 @@ async def delete_task_group(
264
269
  pkg_name=task_group.pkg_name,
265
270
  version=(task_group.version or "N/A"),
266
271
  timestamp_started=get_timestamp(),
272
+ fractal_server_version=__VERSION__,
267
273
  )
268
274
  db.add(task_group_activity)
269
275
  await db.commit()
@@ -14,7 +14,6 @@ from .job import router as job_router
14
14
  from .pre_submission_checks import router as pre_submission_checks_router
15
15
  from .project import router as project_router
16
16
  from .sharing import router as sharing_router
17
- from .status_legacy import router as status_legacy_router
18
17
  from .submit import router as submit_job_router
19
18
  from .task import router as task_router
20
19
  from .task_collection import router as task_collection_router
@@ -37,7 +36,6 @@ router_api.include_router(sharing_router, tags=["Project Sharing"])
37
36
  router_api.include_router(project_router, tags=["Project"])
38
37
  router_api.include_router(submit_job_router, tags=["Job"])
39
38
  router_api.include_router(history_router, tags=["History"])
40
- router_api.include_router(status_legacy_router, tags=["Status Legacy"])
41
39
 
42
40
 
43
41
  settings = Inject(get_settings)
@@ -400,6 +400,8 @@ async def _workflow_insert_task(
400
400
  args_non_parallel: dict[str, Any] | None = None,
401
401
  args_parallel: dict[str, Any] | None = None,
402
402
  type_filters: dict[str, bool] | None = None,
403
+ description: str | None = None,
404
+ alias: str | None = None,
403
405
  db: AsyncSession,
404
406
  ) -> WorkflowTaskV2:
405
407
  """
@@ -414,6 +416,8 @@ async def _workflow_insert_task(
414
416
  args_non_parallel:
415
417
  args_parallel:
416
418
  type_filters:
419
+ description:
420
+ alias:
417
421
  db:
418
422
  """
419
423
  db_workflow = await db.get(WorkflowV2, workflow_id)
@@ -448,6 +452,8 @@ async def _workflow_insert_task(
448
452
  meta_parallel=final_meta_parallel,
449
453
  meta_non_parallel=final_meta_non_parallel,
450
454
  type_filters=(type_filters or dict()),
455
+ description=description,
456
+ alias=alias,
451
457
  )
452
458
  db_workflow.task_list.append(wf_task)
453
459
  flag_modified(db_workflow, "task_list")
@@ -11,6 +11,7 @@ from fastapi import status
11
11
  from sqlmodel import select
12
12
  from sqlmodel import update
13
13
 
14
+ from fractal_server import __VERSION__
14
15
  from fractal_server.app.db import AsyncSession
15
16
  from fractal_server.app.db import get_async_db
16
17
  from fractal_server.app.models import Profile
@@ -221,6 +222,7 @@ async def submit_job(
221
222
  project_dump=json.loads(
222
223
  project.model_dump_json(exclude={"resource_id"})
223
224
  ),
225
+ fractal_server_version=__VERSION__,
224
226
  **job_create.model_dump(),
225
227
  )
226
228
 
@@ -14,6 +14,7 @@ from pydantic import BaseModel
14
14
  from pydantic import ValidationError
15
15
  from pydantic import model_validator
16
16
 
17
+ from fractal_server import __VERSION__
17
18
  from fractal_server.app.db import AsyncSession
18
19
  from fractal_server.app.db import get_async_db
19
20
  from fractal_server.app.models import UserOAuth
@@ -332,6 +333,7 @@ async def collect_tasks_pip(
332
333
  action=TaskGroupActivityAction.COLLECT,
333
334
  pkg_name=task_group.pkg_name,
334
335
  version=task_group.version,
336
+ fractal_server_version=__VERSION__,
335
337
  )
336
338
  db.add(task_group_activity)
337
339
  await db.commit()
@@ -10,6 +10,7 @@ from fastapi import Response
10
10
  from fastapi import UploadFile
11
11
  from fastapi import status
12
12
 
13
+ from fractal_server import __VERSION__
13
14
  from fractal_server.app.db import AsyncSession
14
15
  from fractal_server.app.db import get_async_db
15
16
  from fractal_server.app.models import UserOAuth
@@ -182,6 +183,7 @@ async def collect_task_pixi(
182
183
  action=TaskGroupActivityAction.COLLECT,
183
184
  pkg_name=task_group.pkg_name,
184
185
  version=task_group.version,
186
+ fractal_server_version=__VERSION__,
185
187
  )
186
188
  db.add(task_group_activity)
187
189
  await db.commit()
@@ -5,6 +5,7 @@ from fastapi import HTTPException
5
5
  from fastapi import Response
6
6
  from fastapi import status
7
7
 
8
+ from fractal_server import __VERSION__
8
9
  from fractal_server.app.db import AsyncSession
9
10
  from fractal_server.app.db import get_async_db
10
11
  from fractal_server.app.models import UserOAuth
@@ -99,6 +100,7 @@ async def deactivate_task_group(
99
100
  ),
100
101
  timestamp_started=get_timestamp(),
101
102
  timestamp_ended=get_timestamp(),
103
+ fractal_server_version=__VERSION__,
102
104
  )
103
105
  db.add(task_group)
104
106
  db.add(task_group_activity)
@@ -114,6 +116,7 @@ async def deactivate_task_group(
114
116
  pkg_name=task_group.pkg_name,
115
117
  version=task_group.version,
116
118
  timestamp_started=get_timestamp(),
119
+ fractal_server_version=__VERSION__,
117
120
  )
118
121
  task_group.active = False
119
122
  db.add(task_group)
@@ -202,6 +205,7 @@ async def reactivate_task_group(
202
205
  ),
203
206
  timestamp_started=get_timestamp(),
204
207
  timestamp_ended=get_timestamp(),
208
+ fractal_server_version=__VERSION__,
205
209
  )
206
210
  db.add(task_group)
207
211
  db.add(task_group_activity)
@@ -225,6 +229,7 @@ async def reactivate_task_group(
225
229
  pkg_name=task_group.pkg_name,
226
230
  version=task_group.version,
227
231
  timestamp_started=get_timestamp(),
232
+ fractal_server_version=__VERSION__,
228
233
  )
229
234
  db.add(task_group_activity)
230
235
  await db.commit()
@@ -288,6 +293,7 @@ async def delete_task_group(
288
293
  pkg_name=task_group.pkg_name,
289
294
  version=(task_group.version or "N/A"),
290
295
  timestamp_started=get_timestamp(),
296
+ fractal_server_version=__VERSION__,
291
297
  )
292
298
  db.add(task_group_activity)
293
299
  await db.commit()
@@ -93,6 +93,8 @@ async def create_workflowtask(
93
93
  args_non_parallel=wftask.args_non_parallel,
94
94
  args_parallel=wftask.args_parallel,
95
95
  type_filters=wftask.type_filters,
96
+ description=wftask.description,
97
+ alias=wftask.alias,
96
98
  db=db,
97
99
  )
98
100
 
@@ -20,6 +20,7 @@ class WorkflowCreate(BaseModel):
20
20
  model_config = ConfigDict(extra="forbid")
21
21
 
22
22
  name: NonEmptyStr
23
+ description: NonEmptyStr | None = None
23
24
 
24
25
 
25
26
  class WorkflowRead(BaseModel):
@@ -45,7 +46,7 @@ class WorkflowUpdate(BaseModel):
45
46
 
46
47
  name: NonEmptyStr = None
47
48
  reordered_workflowtask_ids: ListUniqueNonNegativeInt | None = None
48
- description: str | None = None
49
+ description: NonEmptyStr | None = None
49
50
 
50
51
 
51
52
  class WorkflowImport(BaseModel):
@@ -58,6 +59,7 @@ class WorkflowImport(BaseModel):
58
59
 
59
60
  model_config = ConfigDict(extra="forbid")
60
61
  name: NonEmptyStr
62
+ description: NonEmptyStr | None = None
61
63
  task_list: list[WorkflowTaskImport]
62
64
 
63
65
 
@@ -70,4 +72,5 @@ class WorkflowExport(BaseModel):
70
72
  """
71
73
 
72
74
  name: str
75
+ description: str | None
73
76
  task_list: list[WorkflowTaskExport]
@@ -6,6 +6,7 @@ from pydantic import Field
6
6
  from pydantic import model_validator
7
7
 
8
8
  from fractal_server.types import DictStrAny
9
+ from fractal_server.types import NonEmptyStr
9
10
  from fractal_server.types import TypeFilters
10
11
  from fractal_server.types import WorkflowTaskArgument
11
12
 
@@ -23,6 +24,8 @@ class WorkflowTaskCreate(BaseModel):
23
24
  args_non_parallel: WorkflowTaskArgument | None = None
24
25
  args_parallel: WorkflowTaskArgument | None = None
25
26
  type_filters: TypeFilters = Field(default_factory=dict)
27
+ description: NonEmptyStr | None = None
28
+ alias: NonEmptyStr | None = None
26
29
 
27
30
 
28
31
  class WorkflowTaskReplace(BaseModel):
@@ -65,8 +68,8 @@ class WorkflowTaskUpdate(BaseModel):
65
68
  args_non_parallel: WorkflowTaskArgument | None = None
66
69
  args_parallel: WorkflowTaskArgument | None = None
67
70
  type_filters: TypeFilters = None
68
- description: str | None = None
69
- alias: str | None = None
71
+ description: NonEmptyStr | None = None
72
+ alias: NonEmptyStr | None = None
70
73
 
71
74
 
72
75
  class WorkflowTaskImport(BaseModel):
@@ -78,6 +81,8 @@ class WorkflowTaskImport(BaseModel):
78
81
  args_parallel: DictStrAny | None = None
79
82
  type_filters: TypeFilters | None = None
80
83
  input_filters: dict[str, Any] | None = None
84
+ description: NonEmptyStr | None = None
85
+ alias: NonEmptyStr | None = None
81
86
 
82
87
  task: TaskImport
83
88
 
@@ -116,5 +121,7 @@ class WorkflowTaskExport(BaseModel):
116
121
  args_non_parallel: dict[str, Any] | None = None
117
122
  args_parallel: dict[str, Any] | None = None
118
123
  type_filters: dict[str, bool] = Field(default_factory=dict)
124
+ description: str | None = None
125
+ alias: str | None = None
119
126
 
120
127
  task: TaskExport
@@ -191,17 +191,22 @@ class UserManager(IntegerIDMixin, BaseUserManager[UserOAuth, int]):
191
191
 
192
192
  @override
193
193
  async def validate_password(self, password: str, user: UserOAuth) -> None:
194
- # check password length
195
194
  min_length = 4
196
- max_length = 72
197
- if len(password) < min_length:
195
+ len_password = len(password)
196
+ if len_password < min_length:
198
197
  raise InvalidPasswordException(
199
- f"The password is too short (minimum length: {min_length})."
198
+ "The password is too short "
199
+ f"(length = {len_password}, minimum length = {min_length})."
200
200
  )
201
- if len(password.encode("utf-8")) > max_length:
201
+ max_length_in_bytes = 72
202
+ len_password_in_bytes = len(password.encode("utf-8"))
203
+ if len_password_in_bytes > max_length_in_bytes:
204
+ # See:
205
+ # https://github.com/pyca/bcrypt/blob/f0451e42e3ab6f6e1b9ac8b09bf04104bf8bdef8/src/_bcrypt/src/lib.rs#L85-L89
202
206
  raise InvalidPasswordException(
203
207
  "The password is too long "
204
- f"(maximum length: {max_length} bytes)."
208
+ f"(length = {len_password_in_bytes} bytes, "
209
+ f"maximum length = {max_length_in_bytes} bytes)."
205
210
  )
206
211
 
207
212
  @override
@@ -0,0 +1,41 @@
1
+ """drop dataset.history
2
+
3
+ Revision ID: 18a26fcdea5d
4
+ Revises: 1bf8785755f9
5
+ Create Date: 2026-01-29 10:15:18.467384
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 = "18a26fcdea5d"
15
+ down_revision = "1bf8785755f9"
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("datasetv2", schema=None) as batch_op:
23
+ batch_op.drop_column("history")
24
+
25
+ # ### end Alembic commands ###
26
+
27
+
28
+ def downgrade() -> None:
29
+ # ### commands auto generated by Alembic - please adjust! ###
30
+ with op.batch_alter_table("datasetv2", schema=None) as batch_op:
31
+ batch_op.add_column(
32
+ sa.Column(
33
+ "history",
34
+ postgresql.JSONB(astext_type=sa.Text()),
35
+ server_default=sa.text("'[]'::json"),
36
+ autoincrement=False,
37
+ nullable=False,
38
+ )
39
+ )
40
+
41
+ # ### end Alembic commands ###
@@ -0,0 +1,52 @@
1
+ """add fractal_server_version to jobv2 and taskgroupactivityv2
2
+
3
+ Revision ID: cfd13f7954e7
4
+ Revises: 18a26fcdea5d
5
+ Create Date: 2026-01-29 12:33:00.064562
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "cfd13f7954e7"
14
+ down_revision = "18a26fcdea5d"
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("jobv2", schema=None) as batch_op:
22
+ batch_op.add_column(
23
+ sa.Column(
24
+ "fractal_server_version",
25
+ sa.String(),
26
+ server_default="pre-2.19.0",
27
+ nullable=False,
28
+ )
29
+ )
30
+
31
+ with op.batch_alter_table("taskgroupactivityv2", schema=None) as batch_op:
32
+ batch_op.add_column(
33
+ sa.Column(
34
+ "fractal_server_version",
35
+ sa.String(),
36
+ server_default="pre-2.19.0",
37
+ nullable=False,
38
+ )
39
+ )
40
+
41
+ # ### end Alembic commands ###
42
+
43
+
44
+ def downgrade() -> None:
45
+ # ### commands auto generated by Alembic - please adjust! ###
46
+ with op.batch_alter_table("taskgroupactivityv2", schema=None) as batch_op:
47
+ batch_op.drop_column("fractal_server_version")
48
+
49
+ with op.batch_alter_table("jobv2", schema=None) as batch_op:
50
+ batch_op.drop_column("fractal_server_version")
51
+
52
+ # ### end Alembic commands ###
@@ -31,6 +31,7 @@ class SlurmConfigSet(BaseModel):
31
31
  time:
32
32
  exclude:
33
33
  nodelist:
34
+ nodes:
34
35
  account:
35
36
  extra_lines:
36
37
  gpus:
@@ -47,6 +48,7 @@ class SlurmConfigSet(BaseModel):
47
48
  gres: NonEmptyStr | None = None
48
49
  exclude: NonEmptyStr | None = None
49
50
  nodelist: NonEmptyStr | None = None
51
+ nodes: int | None = None
50
52
  time: NonEmptyStr | None = None
51
53
  account: NonEmptyStr | None = None
52
54
  extra_lines: list[NonEmptyStr] = Field(default_factory=list)
@@ -41,6 +41,7 @@ STDERR_IGNORE_PATTERNS = [
41
41
  "step creation temporarily disabled, retrying",
42
42
  "step creation still disabled, retrying",
43
43
  "srun: step created for stepid=",
44
+ "srun: warning: can't run 1 processes on ",
44
45
  ]
45
46
 
46
47
 
@@ -118,6 +118,7 @@ def _get_slurm_config_internal(
118
118
  "gpus",
119
119
  "constraint",
120
120
  "nodelist",
121
+ "nodes",
121
122
  "exclude",
122
123
  ]:
123
124
  value = wftask_meta.get(key, None)
@@ -39,6 +39,7 @@ class SlurmConfig(BaseModel):
39
39
  gpus: Corresponds to SLURM option.
40
40
  time: Corresponds to SLURM option (WARNING: not fully supported).
41
41
  nodelist: Corresponds to SLURM option.
42
+ nodes: Corresponds to SLURM option.
42
43
  exclude: Corresponds to SLURM option.
43
44
  prefix: Prefix of configuration lines in SLURM submission scripts.
44
45
  shebang_line: Shebang line for SLURM submission scripts.
@@ -87,6 +88,7 @@ class SlurmConfig(BaseModel):
87
88
  time: str | None = None
88
89
  account: str | None = None
89
90
  nodelist: str | None = None
91
+ nodes: int | None = None
90
92
  exclude: str | None = None
91
93
 
92
94
  # Free-field attribute for extra lines to be added to the SLURM job
@@ -188,6 +190,7 @@ class SlurmConfig(BaseModel):
188
190
  "account",
189
191
  "exclude",
190
192
  "nodelist",
193
+ "nodes",
191
194
  ]:
192
195
  value = getattr(self, key)
193
196
  if value is not None:
@@ -13,7 +13,6 @@ from typing import Protocol
13
13
 
14
14
  from sqlalchemy.orm import Session as DBSyncSession
15
15
 
16
- from fractal_server import __VERSION__
17
16
  from fractal_server.app.db import DB
18
17
  from fractal_server.app.models.v2 import DatasetV2
19
18
  from fractal_server.app.models.v2 import JobV2
@@ -224,7 +223,6 @@ def submit_workflow(
224
223
  f'Start execution of workflow "{workflow.name}"; '
225
224
  f"more logs at {str(log_file_path)}"
226
225
  )
227
- logger.debug(f"fractal_server.__VERSION__: {__VERSION__}")
228
226
  logger.debug(f"Resource name: {resource.name}")
229
227
  logger.debug(f"Profile name: {profile.name}")
230
228
  logger.debug(f"Username: {profile.username}")
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fractal-server"
3
- version = "2.19.0a2"
3
+ version = "2.19.1"
4
4
  description = "Backend component of the Fractal analytics platform"
5
5
  authors = [
6
6
  { name="Tommaso Comparin", email="tommaso.comparin@exact-lab.it" },
@@ -58,16 +58,15 @@ dev = [
58
58
 
59
59
  docs = [
60
60
  "mkdocs==1.6.1",
61
- "mkdocstrings[python]==0.30.1",
62
- "mkdocs-material==9.7.0",
63
- "mkdocs-gen-files==0.5.0",
61
+ "mkdocstrings[python]>=1.0.2,<1.1.0",
62
+ "mkdocs-material==9.7.1",
63
+ "mkdocs-gen-files==0.6.0",
64
64
  "mkdocs-literate-nav==0.6.2",
65
65
  "mkdocs-section-index==0.3.10",
66
- "mkdocs-include-markdown-plugin==7.2.0",
66
+ "mkdocs-include-markdown-plugin==7.2.1",
67
67
  "mkdocs-render-swagger-plugin==0.1.2",
68
68
  "pyyaml>=6.0.0",
69
- "click == 8.2.1"
70
- ]
69
+ ]
71
70
 
72
71
 
73
72
  [build-system]
@@ -92,7 +91,7 @@ filterwarnings = [
92
91
  markers = ["container", "ssh", "fails_on_macos", "oauth"]
93
92
 
94
93
  [tool.bumpver]
95
- current_version = "2.19.0a2"
94
+ current_version = "2.19.1"
96
95
  version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
97
96
  commit_message = "bump version {old_version} -> {new_version}"
98
97
  commit = true
@@ -1 +0,0 @@
1
- __VERSION__ = "2.19.0a2"