fractal-server 2.18.0__tar.gz → 2.18.0a1__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 (279) hide show
  1. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/PKG-INFO +1 -1
  2. fractal_server-2.18.0a1/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/__main__.py +1 -2
  4. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/security.py +5 -7
  5. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/job.py +2 -13
  6. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/resource.py +0 -13
  7. fractal_server-2.18.0a1/fractal_server/app/routes/admin/v2/__init__.py +29 -0
  8. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/job.py +15 -15
  9. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/task.py +7 -7
  10. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/task_group.py +12 -14
  11. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +20 -20
  12. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/__init__.py +9 -0
  13. fractal_server-2.18.0a1/fractal_server/app/routes/api/v2/__init__.py +74 -0
  14. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions.py +47 -22
  15. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +4 -4
  16. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +2 -2
  17. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/dataset.py +60 -66
  18. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/history.py +5 -7
  19. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/job.py +12 -12
  20. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/project.py +11 -11
  21. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/status_legacy.py +29 -15
  22. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/submit.py +66 -65
  23. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task.py +17 -15
  24. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_collection.py +18 -18
  25. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_collection_custom.py +13 -11
  26. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_collection_pixi.py +9 -9
  27. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_group.py +18 -18
  28. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +26 -26
  29. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/task_version_update.py +5 -5
  30. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/workflow.py +18 -18
  31. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/workflow_import.py +11 -11
  32. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/workflowtask.py +37 -10
  33. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/_aux_auth.py +0 -100
  34. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/current_user.py +63 -0
  35. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/group.py +30 -1
  36. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/router.py +0 -2
  37. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/users.py +0 -9
  38. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/user.py +12 -29
  39. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/user_group.py +15 -0
  40. fractal_server-2.18.0a1/fractal_server/app/schemas/v2/__init__.py +78 -0
  41. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/dataset.py +13 -35
  42. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/dumps.py +9 -9
  43. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/job.py +11 -11
  44. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/project.py +3 -3
  45. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/resource.py +4 -13
  46. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/status_legacy.py +3 -3
  47. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/task.py +6 -6
  48. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/task_collection.py +4 -4
  49. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/task_group.py +16 -16
  50. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/workflow.py +16 -16
  51. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/workflowtask.py +14 -14
  52. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/security/__init__.py +1 -1
  53. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/shutdown.py +6 -6
  54. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/config/__init__.py +6 -0
  55. fractal_server-2.18.0a1/fractal_server/config/_data.py +79 -0
  56. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/config/_main.py +1 -6
  57. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/images/models.py +2 -1
  58. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/main.py +11 -72
  59. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/config/_slurm.py +0 -2
  60. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/slurm_config.py +0 -1
  61. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/_local.py +3 -4
  62. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/_slurm_ssh.py +3 -4
  63. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/_slurm_sudo.py +3 -4
  64. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/runner.py +17 -36
  65. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/runner_functions.py +14 -11
  66. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/submit_workflow.py +9 -22
  67. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/_utils.py +2 -2
  68. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/collect.py +6 -5
  69. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/collect_pixi.py +6 -5
  70. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/deactivate.py +7 -7
  71. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/deactivate_pixi.py +3 -3
  72. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/delete.py +5 -5
  73. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/reactivate.py +5 -5
  74. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/reactivate_pixi.py +5 -5
  75. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/collect.py +5 -5
  76. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/collect_pixi.py +5 -5
  77. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/deactivate.py +7 -7
  78. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/deactivate_pixi.py +2 -2
  79. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/delete.py +5 -5
  80. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/reactivate.py +5 -5
  81. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/reactivate_pixi.py +5 -5
  82. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_background.py +7 -7
  83. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_database.py +5 -5
  84. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/types/__init__.py +0 -22
  85. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/types/validators/__init__.py +0 -3
  86. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/types/validators/_common_validators.py +0 -32
  87. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/pyproject.toml +2 -2
  88. fractal_server-2.18.0/fractal_server/__init__.py +0 -1
  89. fractal_server-2.18.0/fractal_server/app/routes/admin/v2/__init__.py +0 -27
  90. fractal_server-2.18.0/fractal_server/app/routes/api/v2/__init__.py +0 -72
  91. fractal_server-2.18.0/fractal_server/app/routes/auth/viewer_paths.py +0 -43
  92. fractal_server-2.18.0/fractal_server/app/schemas/v2/__init__.py +0 -78
  93. fractal_server-2.18.0/fractal_server/config/_data.py +0 -0
  94. fractal_server-2.18.0/fractal_server/data_migrations/2_18_0.py +0 -30
  95. fractal_server-2.18.0/fractal_server/migrations/versions/7910eed4cf97_user_project_dirs_and_usergroup_viewer_.py +0 -60
  96. fractal_server-2.18.0/fractal_server/migrations/versions/88270f589c9b_add_prevent_new_submissions.py +0 -39
  97. fractal_server-2.18.0/fractal_server/migrations/versions/f0702066b007_one_submitted_job_per_dataset.py +0 -40
  98. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/LICENSE +0 -0
  99. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/README.md +0 -0
  100. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/alembic.ini +0 -0
  101. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/__init__.py +0 -0
  102. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/db/__init__.py +0 -0
  103. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/__init__.py +0 -0
  104. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/linkusergroup.py +0 -0
  105. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/linkuserproject.py +0 -0
  106. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/__init__.py +0 -0
  107. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/accounting.py +0 -0
  108. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/dataset.py +0 -0
  109. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/history.py +0 -0
  110. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/profile.py +0 -0
  111. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/project.py +0 -0
  112. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/task.py +0 -0
  113. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/task_group.py +0 -0
  114. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/workflow.py +0 -0
  115. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/models/v2/workflowtask.py +0 -0
  116. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/__init__.py +0 -0
  117. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/__init__.py +0 -0
  118. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/_aux_functions.py +0 -0
  119. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
  120. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
  121. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/profile.py +0 -0
  122. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/resource.py +0 -0
  123. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/admin/v2/sharing.py +0 -0
  124. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
  125. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions_sharing.py +0 -0
  126. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py +0 -0
  127. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py +0 -0
  128. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/images.py +0 -0
  129. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/pre_submission_checks.py +0 -0
  130. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/api/v2/sharing.py +0 -0
  131. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/__init__.py +0 -0
  132. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/login.py +0 -0
  133. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/oauth.py +0 -0
  134. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/auth/register.py +0 -0
  135. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/aux/__init__.py +0 -0
  136. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/aux/_job.py +0 -0
  137. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/aux/_runner.py +0 -0
  138. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/aux/validate_user_profile.py +0 -0
  139. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/routes/pagination.py +0 -0
  140. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/__init__.py +0 -0
  141. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/accounting.py +0 -0
  142. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/history.py +0 -0
  143. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/manifest.py +0 -0
  144. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/profile.py +0 -0
  145. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/schemas/v2/sharing.py +0 -0
  146. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/app/security/signup_email.py +0 -0
  147. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/config/_database.py +0 -0
  148. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/config/_email.py +0 -0
  149. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/config/_oauth.py +0 -0
  150. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/config/_settings_config.py +0 -0
  151. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/data_migrations/README.md +0 -0
  152. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/data_migrations/tools.py +0 -0
  153. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/exceptions.py +0 -0
  154. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/gunicorn_fractal.py +0 -0
  155. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/images/__init__.py +0 -0
  156. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/images/status_tools.py +0 -0
  157. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/images/tools.py +0 -0
  158. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/logger.py +0 -0
  159. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/env.py +0 -0
  160. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/naming_convention.py +0 -0
  161. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  162. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  163. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/0f5f85bb2ae7_add_pre_pinned_packages.py +0 -0
  164. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  165. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/1a83a5260664_rename.py +0 -0
  166. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
  167. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
  168. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/40d6d6511b20_add_index_to_history_models.py +0 -0
  169. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/45fbb391d7af_make_resource_id_fk_non_nullable.py +0 -0
  170. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
  171. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/49d0856e9569_drop_table.py +0 -0
  172. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  173. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  174. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  175. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  176. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  177. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  178. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  179. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/7673fe18c05d_remove_project_dir_server_default.py +0 -0
  180. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/791ce783d3d8_add_indices.py +0 -0
  181. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py +0 -0
  182. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  183. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  184. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  185. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  186. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/969d84257cac_add_historyrun_task_id.py +0 -0
  187. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  188. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/981d588fe248_add_executor_error_log.py +0 -0
  189. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  190. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  191. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +0 -0
  192. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  193. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  194. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
  195. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
  196. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py +0 -0
  197. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/b3ffb095f973_json_to_jsonb.py +0 -0
  198. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/bc0e8b3327a7_project_sharing.py +0 -0
  199. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +0 -0
  200. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/caba9fb1ea5e_drop_useroauth_user_settings_id.py +0 -0
  201. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  202. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  203. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  204. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
  205. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/e0e717ae2f26_delete_linkuserproject_ondelete_project.py +0 -0
  206. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  207. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
  208. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  209. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +0 -0
  210. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  211. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
  212. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/py.typed +0 -0
  213. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/__init__.py +0 -0
  214. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/components.py +0 -0
  215. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/config/__init__.py +0 -0
  216. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/config/_local.py +0 -0
  217. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/config/slurm_mem_to_MB.py +0 -0
  218. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/exceptions.py +0 -0
  219. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/__init__.py +0 -0
  220. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/base_runner.py +0 -0
  221. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/call_command_wrapper.py +0 -0
  222. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/local/__init__.py +0 -0
  223. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/local/get_local_config.py +0 -0
  224. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/local/runner.py +0 -0
  225. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/__init__.py +0 -0
  226. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/_batching.py +0 -0
  227. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/_job_states.py +0 -0
  228. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/base_slurm_runner.py +0 -0
  229. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/get_slurm_config.py +0 -0
  230. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/remote.py +0 -0
  231. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_common/slurm_job_task_models.py +0 -0
  232. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_ssh/__init__.py +0 -0
  233. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_ssh/run_subprocess.py +0 -0
  234. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_ssh/runner.py +0 -0
  235. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_ssh/tar_commands.py +0 -0
  236. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_sudo/__init__.py +0 -0
  237. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
  238. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/executors/slurm_sudo/runner.py +0 -0
  239. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/filenames.py +0 -0
  240. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/set_start_and_last_task_index.py +0 -0
  241. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/task_files.py +0 -0
  242. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/__init__.py +0 -0
  243. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/db_tools.py +0 -0
  244. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/deduplicate_list.py +0 -0
  245. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/merge_outputs.py +0 -0
  246. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/v2/task_interface.py +0 -0
  247. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/runner/versions.py +0 -0
  248. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/ssh/__init__.py +0 -0
  249. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/ssh/_fabric.py +0 -0
  250. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/string_tools.py +0 -0
  251. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/syringe.py +0 -0
  252. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/__init__.py +0 -0
  253. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/config/__init__.py +0 -0
  254. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/config/_pixi.py +0 -0
  255. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/config/_python.py +0 -0
  256. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/utils.py +0 -0
  257. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/__init__.py +0 -0
  258. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/local/__init__.py +0 -0
  259. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  260. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py +0 -0
  261. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  262. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  263. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  264. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  265. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  266. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
  267. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
  268. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/pixi_1_extract.sh +0 -0
  269. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/pixi_2_install.sh +0 -0
  270. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/templates/pixi_3_post_install.sh +0 -0
  271. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  272. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_pixi.py +0 -0
  273. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  274. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/tasks/v2/utils_templates.py +0 -0
  275. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/types/validators/_filter_validators.py +0 -0
  276. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/types/validators/_workflow_task_arguments_validators.py +0 -0
  277. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/urls.py +0 -0
  278. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/fractal_server/utils.py +0 -0
  279. {fractal_server-2.18.0 → fractal_server-2.18.0a1}/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.18.0
3
+ Version: 2.18.0a1
4
4
  Summary: Backend component of the Fractal analytics platform
5
5
  License-Expression: BSD-3-Clause
6
6
  License-File: LICENSE
@@ -0,0 +1 @@
1
+ __VERSION__ = "2.18.0a1"
@@ -167,8 +167,7 @@ def init_db_data(
167
167
  "`--admin-pwd` and `--admin-project-dir`. Exit."
168
168
  )
169
169
  sys.exit(1)
170
-
171
- if admin_email:
170
+ if admin_password and admin_email:
172
171
  asyncio.run(
173
172
  _create_first_user(
174
173
  email=admin_email,
@@ -6,6 +6,7 @@ from pydantic import EmailStr
6
6
  from sqlalchemy import Column
7
7
  from sqlalchemy import String
8
8
  from sqlalchemy.dialects.postgresql import ARRAY
9
+ from sqlalchemy.dialects.postgresql import JSONB
9
10
  from sqlalchemy.types import DateTime
10
11
  from sqlmodel import Field
11
12
  from sqlmodel import Relationship
@@ -112,13 +113,7 @@ class UserOAuth(SQLModel, table=True):
112
113
  ondelete="RESTRICT",
113
114
  )
114
115
 
115
- # TODO-2.18.1: drop `project_dir`
116
- project_dir: str | None = Field(default=None, nullable=True)
117
- # TODO-2.18.1: `project_dirs: list[str] = Field(min_length=1)`
118
- project_dirs: list[str] = Field(
119
- sa_column=Column(ARRAY(String), nullable=False, server_default="{}"),
120
- )
121
-
116
+ project_dir: str
122
117
  slurm_accounts: list[str] = Field(
123
118
  sa_column=Column(ARRAY(String), server_default="{}"),
124
119
  )
@@ -140,3 +135,6 @@ class UserGroup(SQLModel, table=True):
140
135
  default_factory=get_timestamp,
141
136
  sa_column=Column(DateTime(timezone=True), nullable=False),
142
137
  )
138
+ viewer_paths: list[str] = Field(
139
+ sa_column=Column(JSONB, server_default="[]", nullable=False)
140
+ )
@@ -6,11 +6,9 @@ from sqlalchemy import Column
6
6
  from sqlalchemy.dialects.postgresql import JSONB
7
7
  from sqlalchemy.types import DateTime
8
8
  from sqlmodel import Field
9
- from sqlmodel import Index
10
9
  from sqlmodel import SQLModel
11
- from sqlmodel import text
12
10
 
13
- from fractal_server.app.schemas.v2 import JobStatusType
11
+ from fractal_server.app.schemas.v2 import JobStatusTypeV2
14
12
  from fractal_server.utils import get_timestamp
15
13
 
16
14
 
@@ -58,7 +56,7 @@ class JobV2(SQLModel, table=True):
58
56
  end_timestamp: datetime | None = Field(
59
57
  default=None, sa_column=Column(DateTime(timezone=True))
60
58
  )
61
- status: str = JobStatusType.SUBMITTED
59
+ status: str = JobStatusTypeV2.SUBMITTED
62
60
  log: str | None = None
63
61
  executor_error_log: str | None = None
64
62
 
@@ -68,12 +66,3 @@ class JobV2(SQLModel, table=True):
68
66
  type_filters: dict[str, bool] = Field(
69
67
  sa_column=Column(JSONB, nullable=False, server_default="{}")
70
68
  )
71
-
72
- __table_args__ = (
73
- Index(
74
- "ix_jobv2_one_submitted_job_per_dataset",
75
- "dataset_id",
76
- unique=True,
77
- postgresql_where=text(f"status = '{JobStatusType.SUBMITTED}'"),
78
- ),
79
- )
@@ -5,7 +5,6 @@ from typing import Self
5
5
  from sqlalchemy import Column
6
6
  from sqlalchemy.dialects.postgresql import JSONB
7
7
  from sqlalchemy.types import DateTime
8
- from sqlmodel import BOOLEAN
9
8
  from sqlmodel import CheckConstraint
10
9
  from sqlmodel import Field
11
10
  from sqlmodel import SQLModel
@@ -44,18 +43,6 @@ class Resource(SQLModel, table=True):
44
43
  Address for ssh connections, when `type="slurm_ssh"`.
45
44
  """
46
45
 
47
- prevent_new_submissions: bool = Field(
48
- sa_column=Column(
49
- BOOLEAN,
50
- server_default="false",
51
- nullable=False,
52
- ),
53
- )
54
- """
55
- When set to true: Prevent new job submissions and stop execution of
56
- ongoing jobs as soon as the current task is complete.
57
- """
58
-
59
46
  jobs_local_dir: str
60
47
  """
61
48
  Base local folder for job subfolders (containing artifacts and logs).
@@ -0,0 +1,29 @@
1
+ """
2
+ `admin/v2` module
3
+ """
4
+
5
+ from fastapi import APIRouter
6
+
7
+ from .accounting import router as accounting_router
8
+ from .impersonate import router as impersonate_router
9
+ from .job import router as job_router
10
+ from .profile import router as profile_router
11
+ from .resource import router as resource_router
12
+ from .sharing import router as sharing_router
13
+ from .task import router as task_router
14
+ from .task_group import router as task_group_router
15
+ from .task_group_lifecycle import router as task_group_lifecycle_router
16
+
17
+ router_admin_v2 = APIRouter()
18
+
19
+ router_admin_v2.include_router(accounting_router, prefix="/accounting")
20
+ router_admin_v2.include_router(job_router, prefix="/job")
21
+ router_admin_v2.include_router(task_router, prefix="/task")
22
+ router_admin_v2.include_router(task_group_router, prefix="/task-group")
23
+ router_admin_v2.include_router(
24
+ task_group_lifecycle_router, prefix="/task-group"
25
+ )
26
+ router_admin_v2.include_router(impersonate_router, prefix="/impersonate")
27
+ router_admin_v2.include_router(resource_router, prefix="/resource")
28
+ router_admin_v2.include_router(profile_router, prefix="/profile")
29
+ router_admin_v2.include_router(sharing_router, prefix="/linkuserproject")
@@ -24,9 +24,9 @@ from fractal_server.app.routes.pagination import PaginationRequest
24
24
  from fractal_server.app.routes.pagination import PaginationResponse
25
25
  from fractal_server.app.routes.pagination import get_pagination_params
26
26
  from fractal_server.app.schemas.v2 import HistoryUnitStatus
27
- from fractal_server.app.schemas.v2 import JobRead
28
- from fractal_server.app.schemas.v2 import JobStatusType
29
- from fractal_server.app.schemas.v2 import JobUpdate
27
+ from fractal_server.app.schemas.v2 import JobReadV2
28
+ from fractal_server.app.schemas.v2 import JobStatusTypeV2
29
+ from fractal_server.app.schemas.v2 import JobUpdateV2
30
30
  from fractal_server.runner.filenames import WORKFLOW_LOG_FILENAME
31
31
  from fractal_server.utils import get_timestamp
32
32
  from fractal_server.zip_tools import _zip_folder_to_byte_stream_iterator
@@ -34,14 +34,14 @@ from fractal_server.zip_tools import _zip_folder_to_byte_stream_iterator
34
34
  router = APIRouter()
35
35
 
36
36
 
37
- @router.get("/", response_model=PaginationResponse[JobRead])
37
+ @router.get("/", response_model=PaginationResponse[JobReadV2])
38
38
  async def view_job(
39
39
  id: int | None = None,
40
40
  user_id: int | None = None,
41
41
  project_id: int | None = None,
42
42
  dataset_id: int | None = None,
43
43
  workflow_id: int | None = None,
44
- status: JobStatusType | None = None,
44
+ status: JobStatusTypeV2 | None = None,
45
45
  start_timestamp_min: AwareDatetime | None = None,
46
46
  start_timestamp_max: AwareDatetime | None = None,
47
47
  end_timestamp_min: AwareDatetime | None = None,
@@ -50,7 +50,7 @@ async def view_job(
50
50
  pagination: PaginationRequest = Depends(get_pagination_params),
51
51
  user: UserOAuth = Depends(current_superuser_act),
52
52
  db: AsyncSession = Depends(get_async_db),
53
- ) -> PaginationResponse[JobRead]:
53
+ ) -> PaginationResponse[JobReadV2]:
54
54
  """
55
55
  Query `JobV2` table.
56
56
 
@@ -154,13 +154,13 @@ async def view_job(
154
154
  )
155
155
 
156
156
 
157
- @router.get("/{job_id}/", response_model=JobRead)
157
+ @router.get("/{job_id}/", response_model=JobReadV2)
158
158
  async def view_single_job(
159
159
  job_id: int,
160
160
  show_tmp_logs: bool = False,
161
161
  user: UserOAuth = Depends(current_superuser_act),
162
162
  db: AsyncSession = Depends(get_async_db),
163
- ) -> JobRead:
163
+ ) -> JobReadV2:
164
164
  job = await db.get(JobV2, job_id)
165
165
  if not job:
166
166
  raise HTTPException(
@@ -169,7 +169,7 @@ async def view_single_job(
169
169
  )
170
170
  await db.close()
171
171
 
172
- if show_tmp_logs and (job.status == JobStatusType.SUBMITTED):
172
+ if show_tmp_logs and (job.status == JobStatusTypeV2.SUBMITTED):
173
173
  try:
174
174
  with open(f"{job.working_dir}/{WORKFLOW_LOG_FILENAME}") as f:
175
175
  job.log = f.read()
@@ -179,13 +179,13 @@ async def view_single_job(
179
179
  return job
180
180
 
181
181
 
182
- @router.patch("/{job_id}/", response_model=JobRead)
182
+ @router.patch("/{job_id}/", response_model=JobReadV2)
183
183
  async def update_job(
184
- job_update: JobUpdate,
184
+ job_update: JobUpdateV2,
185
185
  job_id: int,
186
186
  user: UserOAuth = Depends(current_superuser_act),
187
187
  db: AsyncSession = Depends(get_async_db),
188
- ) -> JobRead | None:
188
+ ) -> JobReadV2 | None:
189
189
  """
190
190
  Change the status of an existing job.
191
191
 
@@ -198,13 +198,13 @@ async def update_job(
198
198
  status_code=status.HTTP_404_NOT_FOUND,
199
199
  detail=f"Job {job_id} not found",
200
200
  )
201
- if job.status != JobStatusType.SUBMITTED:
201
+ if job.status != JobStatusTypeV2.SUBMITTED:
202
202
  raise HTTPException(
203
203
  status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
204
204
  detail=f"Job {job_id} has status {job.status=} != 'submitted'.",
205
205
  )
206
206
 
207
- if job_update.status != JobStatusType.FAILED:
207
+ if job_update.status != JobStatusTypeV2.FAILED:
208
208
  raise HTTPException(
209
209
  status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
210
210
  detail=f"Cannot set job status to {job_update.status}",
@@ -217,7 +217,7 @@ async def update_job(
217
217
  job,
218
218
  "log",
219
219
  f"{job.log or ''}\nThis job was manually marked as "
220
- f"'{JobStatusType.FAILED}' by an admin ({timestamp.isoformat()}).",
220
+ f"'{JobStatusTypeV2.FAILED}' by an admin ({timestamp.isoformat()}).",
221
221
  )
222
222
 
223
223
  res = await db.execute(
@@ -23,7 +23,7 @@ from fractal_server.app.schemas.v2.task import TaskType
23
23
  router = APIRouter()
24
24
 
25
25
 
26
- class TaskMinimal(BaseModel):
26
+ class TaskV2Minimal(BaseModel):
27
27
  id: int
28
28
  name: str
29
29
  type: str
@@ -39,7 +39,7 @@ class ProjectUser(BaseModel):
39
39
  email: EmailStr
40
40
 
41
41
 
42
- class TaskRelationship(BaseModel):
42
+ class TaskV2Relationship(BaseModel):
43
43
  workflow_id: int
44
44
  workflow_name: str
45
45
  project_id: int
@@ -47,12 +47,12 @@ class TaskRelationship(BaseModel):
47
47
  project_users: list[ProjectUser] = Field(default_factory=list)
48
48
 
49
49
 
50
- class TaskInfo(BaseModel):
51
- task: TaskMinimal
52
- relationships: list[TaskRelationship]
50
+ class TaskV2Info(BaseModel):
51
+ task: TaskV2Minimal
52
+ relationships: list[TaskV2Relationship]
53
53
 
54
54
 
55
- @router.get("/", response_model=PaginationResponse[TaskInfo])
55
+ @router.get("/", response_model=PaginationResponse[TaskV2Info])
56
56
  async def query_tasks(
57
57
  id: int | None = None,
58
58
  source: str | None = None,
@@ -66,7 +66,7 @@ async def query_tasks(
66
66
  pagination: PaginationRequest = Depends(get_pagination_params),
67
67
  user: UserOAuth = Depends(current_superuser_act),
68
68
  db: AsyncSession = Depends(get_async_db),
69
- ) -> PaginationResponse[TaskInfo]:
69
+ ) -> PaginationResponse[TaskV2Info]:
70
70
  """
71
71
  Query `TaskV2` and get information about related workflows and projects.
72
72
  """
@@ -20,12 +20,12 @@ from fractal_server.app.routes.auth._aux_auth import (
20
20
  from fractal_server.app.routes.pagination import PaginationRequest
21
21
  from fractal_server.app.routes.pagination import PaginationResponse
22
22
  from fractal_server.app.routes.pagination import get_pagination_params
23
- from fractal_server.app.schemas.v2 import TaskGroupActivityAction
24
- from fractal_server.app.schemas.v2 import TaskGroupActivityRead
25
- from fractal_server.app.schemas.v2 import TaskGroupActivityStatus
26
- from fractal_server.app.schemas.v2 import TaskGroupOriginEnum
23
+ from fractal_server.app.schemas.v2 import TaskGroupActivityActionV2
24
+ from fractal_server.app.schemas.v2 import TaskGroupActivityStatusV2
25
+ from fractal_server.app.schemas.v2 import TaskGroupActivityV2Read
27
26
  from fractal_server.app.schemas.v2 import TaskGroupReadSuperuser
28
- from fractal_server.app.schemas.v2 import TaskGroupUpdate
27
+ from fractal_server.app.schemas.v2 import TaskGroupUpdateV2
28
+ from fractal_server.app.schemas.v2 import TaskGroupV2OriginEnum
29
29
  from fractal_server.logger import set_logger
30
30
 
31
31
  router = APIRouter()
@@ -34,27 +34,25 @@ logger = set_logger(__name__)
34
34
 
35
35
 
36
36
  @router.get(
37
- "/activity/", response_model=PaginationResponse[TaskGroupActivityRead]
37
+ "/activity/", response_model=PaginationResponse[TaskGroupActivityV2Read]
38
38
  )
39
39
  async def get_task_group_activity_list(
40
40
  task_group_activity_id: int | None = None,
41
41
  user_id: int | None = None,
42
42
  taskgroupv2_id: int | None = None,
43
43
  pkg_name: str | None = None,
44
- status: TaskGroupActivityStatus | None = None,
45
- action: TaskGroupActivityAction | None = None,
44
+ status: TaskGroupActivityStatusV2 | None = None,
45
+ action: TaskGroupActivityActionV2 | None = None,
46
46
  timestamp_started_min: AwareDatetime | None = None,
47
47
  pagination: PaginationRequest = Depends(get_pagination_params),
48
48
  superuser: UserOAuth = Depends(current_superuser_act),
49
49
  db: AsyncSession = Depends(get_async_db),
50
- ) -> PaginationResponse[TaskGroupActivityRead]:
50
+ ) -> PaginationResponse[TaskGroupActivityV2Read]:
51
51
  # Assign pagination parameters
52
52
  page = pagination.page
53
53
  page_size = pagination.page_size
54
54
 
55
- stm = select(TaskGroupActivityV2).order_by(
56
- TaskGroupActivityV2.timestamp_started.desc()
57
- )
55
+ stm = select(TaskGroupActivityV2)
58
56
  stm_count = select(func.count(TaskGroupActivityV2.id))
59
57
  if task_group_activity_id is not None:
60
58
  stm = stm.where(TaskGroupActivityV2.id == task_group_activity_id)
@@ -129,7 +127,7 @@ async def query_task_group_list(
129
127
  private: bool | None = None,
130
128
  active: bool | None = None,
131
129
  pkg_name: str | None = None,
132
- origin: TaskGroupOriginEnum | None = None,
130
+ origin: TaskGroupV2OriginEnum | None = None,
133
131
  timestamp_last_used_min: AwareDatetime | None = None,
134
132
  timestamp_last_used_max: AwareDatetime | None = None,
135
133
  resource_id: int | None = None,
@@ -219,7 +217,7 @@ async def query_task_group_list(
219
217
  @router.patch("/{task_group_id}/", response_model=TaskGroupReadSuperuser)
220
218
  async def patch_task_group(
221
219
  task_group_id: int,
222
- task_group_update: TaskGroupUpdate,
220
+ task_group_update: TaskGroupUpdateV2,
223
221
  user: UserOAuth = Depends(current_superuser_act),
224
222
  db: AsyncSession = Depends(get_async_db),
225
223
  ) -> list[TaskGroupReadSuperuser]:
@@ -26,10 +26,10 @@ from fractal_server.app.routes.aux.validate_user_profile import (
26
26
  validate_user_profile,
27
27
  )
28
28
  from fractal_server.app.schemas.v2 import ResourceType
29
- from fractal_server.app.schemas.v2 import TaskGroupActivityAction
30
- from fractal_server.app.schemas.v2 import TaskGroupActivityRead
31
- from fractal_server.app.schemas.v2 import TaskGroupActivityStatus
32
- from fractal_server.app.schemas.v2 import TaskGroupOriginEnum
29
+ from fractal_server.app.schemas.v2 import TaskGroupActivityActionV2
30
+ from fractal_server.app.schemas.v2 import TaskGroupActivityStatusV2
31
+ from fractal_server.app.schemas.v2 import TaskGroupActivityV2Read
32
+ from fractal_server.app.schemas.v2 import TaskGroupV2OriginEnum
33
33
  from fractal_server.logger import set_logger
34
34
  from fractal_server.tasks.v2.local import deactivate_local
35
35
  from fractal_server.tasks.v2.local import delete_local
@@ -46,7 +46,7 @@ logger = set_logger(__name__)
46
46
 
47
47
  @router.post(
48
48
  "/{task_group_id}/deactivate/",
49
- response_model=TaskGroupActivityRead,
49
+ response_model=TaskGroupActivityV2Read,
50
50
  )
51
51
  async def deactivate_task_group(
52
52
  task_group_id: int,
@@ -54,7 +54,7 @@ async def deactivate_task_group(
54
54
  response: Response,
55
55
  superuser: UserOAuth = Depends(current_superuser_act),
56
56
  db: AsyncSession = Depends(get_async_db),
57
- ) -> TaskGroupActivityRead:
57
+ ) -> TaskGroupActivityV2Read:
58
58
  """
59
59
  Deactivate task-group venv
60
60
  """
@@ -78,13 +78,13 @@ async def deactivate_task_group(
78
78
  await check_no_submitted_job(task_group_id=task_group.id, db=db)
79
79
 
80
80
  # Shortcut for task-group with origin="other"
81
- if task_group.origin == TaskGroupOriginEnum.OTHER:
81
+ if task_group.origin == TaskGroupV2OriginEnum.OTHER:
82
82
  task_group.active = False
83
83
  task_group_activity = TaskGroupActivityV2(
84
84
  user_id=task_group.user_id,
85
85
  taskgroupv2_id=task_group.id,
86
- status=TaskGroupActivityStatus.OK,
87
- action=TaskGroupActivityAction.DEACTIVATE,
86
+ status=TaskGroupActivityStatusV2.OK,
87
+ action=TaskGroupActivityActionV2.DEACTIVATE,
88
88
  pkg_name=task_group.pkg_name,
89
89
  version=(task_group.version or "N/A"),
90
90
  log=(
@@ -103,8 +103,8 @@ async def deactivate_task_group(
103
103
  task_group_activity = TaskGroupActivityV2(
104
104
  user_id=task_group.user_id,
105
105
  taskgroupv2_id=task_group.id,
106
- status=TaskGroupActivityStatus.PENDING,
107
- action=TaskGroupActivityAction.DEACTIVATE,
106
+ status=TaskGroupActivityStatusV2.PENDING,
107
+ action=TaskGroupActivityActionV2.DEACTIVATE,
108
108
  pkg_name=task_group.pkg_name,
109
109
  version=task_group.version,
110
110
  timestamp_started=get_timestamp(),
@@ -140,7 +140,7 @@ async def deactivate_task_group(
140
140
 
141
141
  @router.post(
142
142
  "/{task_group_id}/reactivate/",
143
- response_model=TaskGroupActivityRead,
143
+ response_model=TaskGroupActivityV2Read,
144
144
  )
145
145
  async def reactivate_task_group(
146
146
  task_group_id: int,
@@ -148,7 +148,7 @@ async def reactivate_task_group(
148
148
  response: Response,
149
149
  superuser: UserOAuth = Depends(current_superuser_act),
150
150
  db: AsyncSession = Depends(get_async_db),
151
- ) -> TaskGroupActivityRead:
151
+ ) -> TaskGroupActivityV2Read:
152
152
  """
153
153
  Deactivate task-group venv
154
154
  """
@@ -173,13 +173,13 @@ async def reactivate_task_group(
173
173
  await check_no_submitted_job(task_group_id=task_group.id, db=db)
174
174
 
175
175
  # Shortcut for task-group with origin="other"
176
- if task_group.origin == TaskGroupOriginEnum.OTHER:
176
+ if task_group.origin == TaskGroupV2OriginEnum.OTHER:
177
177
  task_group.active = True
178
178
  task_group_activity = TaskGroupActivityV2(
179
179
  user_id=task_group.user_id,
180
180
  taskgroupv2_id=task_group.id,
181
- status=TaskGroupActivityStatus.OK,
182
- action=TaskGroupActivityAction.REACTIVATE,
181
+ status=TaskGroupActivityStatusV2.OK,
182
+ action=TaskGroupActivityActionV2.REACTIVATE,
183
183
  pkg_name=task_group.pkg_name,
184
184
  version=(task_group.version or "N/A"),
185
185
  log=(
@@ -206,8 +206,8 @@ async def reactivate_task_group(
206
206
  task_group_activity = TaskGroupActivityV2(
207
207
  user_id=task_group.user_id,
208
208
  taskgroupv2_id=task_group.id,
209
- status=TaskGroupActivityStatus.PENDING,
210
- action=TaskGroupActivityAction.REACTIVATE,
209
+ status=TaskGroupActivityStatusV2.PENDING,
210
+ action=TaskGroupActivityActionV2.REACTIVATE,
211
211
  pkg_name=task_group.pkg_name,
212
212
  version=task_group.version,
213
213
  timestamp_started=get_timestamp(),
@@ -259,8 +259,8 @@ async def delete_task_group(
259
259
  task_group_activity = TaskGroupActivityV2(
260
260
  user_id=task_group.user_id,
261
261
  taskgroupv2_id=task_group.id,
262
- status=TaskGroupActivityStatus.PENDING,
263
- action=TaskGroupActivityAction.DELETE,
262
+ status=TaskGroupActivityStatusV2.PENDING,
263
+ action=TaskGroupActivityActionV2.DELETE,
264
264
  pkg_name=task_group.pkg_name,
265
265
  version=(task_group.version or "N/A"),
266
266
  timestamp_started=get_timestamp(),
@@ -8,6 +8,7 @@ from fastapi import Depends
8
8
  import fractal_server
9
9
  from fractal_server.app.models import UserOAuth
10
10
  from fractal_server.app.routes.auth import current_superuser_act
11
+ from fractal_server.config import get_data_settings
11
12
  from fractal_server.config import get_db_settings
12
13
  from fractal_server.config import get_email_settings
13
14
  from fractal_server.config import get_oauth_settings
@@ -49,6 +50,14 @@ async def view_email_settings(
49
50
  return settings.model_dump()
50
51
 
51
52
 
53
+ @router_api.get("/settings/data/")
54
+ async def view_data_settings(
55
+ user: UserOAuth = Depends(current_superuser_act),
56
+ ):
57
+ settings = Inject(get_data_settings)
58
+ return settings.model_dump()
59
+
60
+
52
61
  @router_api.get("/settings/oauth/")
53
62
  async def view_oauth_settings(
54
63
  user: UserOAuth = Depends(current_superuser_act),
@@ -0,0 +1,74 @@
1
+ """
2
+ `api/v2` module
3
+ """
4
+
5
+ from fastapi import APIRouter
6
+
7
+ from fractal_server.config import get_settings
8
+ from fractal_server.syringe import Inject
9
+
10
+ from .dataset import router as dataset_router_v2
11
+ from .history import router as history_router_v2
12
+ from .images import router as images_routes_v2
13
+ from .job import router as job_router_v2
14
+ from .pre_submission_checks import router as pre_submission_checks_router
15
+ from .project import router as project_router_v2
16
+ from .sharing import router as sharing_router_v2
17
+ from .status_legacy import router as status_legacy_router_v2
18
+ from .submit import router as submit_job_router_v2
19
+ from .task import router as task_router_v2
20
+ from .task_collection import router as task_collection_router_v2
21
+ from .task_collection_custom import router as task_collection_router_v2_custom
22
+ from .task_collection_pixi import router as task_collection_pixi_router_v2
23
+ from .task_group import router as task_group_router_v2
24
+ from .task_group_lifecycle import router as task_group_lifecycle_router_v2
25
+ from .task_version_update import router as task_version_update_router_v2
26
+ from .workflow import router as workflow_router_v2
27
+ from .workflow_import import router as workflow_import_router_v2
28
+ from .workflowtask import router as workflowtask_router_v2
29
+
30
+ router_api_v2 = APIRouter()
31
+
32
+ router_api_v2.include_router(dataset_router_v2, tags=["V2 Dataset"])
33
+ router_api_v2.include_router(pre_submission_checks_router, tags=["V2 Job"])
34
+ router_api_v2.include_router(job_router_v2, tags=["V2 Job"])
35
+ router_api_v2.include_router(images_routes_v2, tags=["V2 Images"])
36
+ router_api_v2.include_router(sharing_router_v2, tags=["Project Sharing"])
37
+ router_api_v2.include_router(project_router_v2, tags=["V2 Project"])
38
+ router_api_v2.include_router(submit_job_router_v2, tags=["V2 Job"])
39
+ router_api_v2.include_router(history_router_v2, tags=["V2 History"])
40
+ router_api_v2.include_router(status_legacy_router_v2, tags=["V2 Status Legacy"])
41
+
42
+
43
+ settings = Inject(get_settings)
44
+ router_api_v2.include_router(
45
+ task_collection_router_v2,
46
+ prefix="/task",
47
+ tags=["V2 Task Lifecycle"],
48
+ )
49
+ router_api_v2.include_router(
50
+ task_collection_router_v2_custom,
51
+ prefix="/task",
52
+ tags=["V2 Task Lifecycle"],
53
+ )
54
+ router_api_v2.include_router(
55
+ task_collection_pixi_router_v2,
56
+ prefix="/task",
57
+ tags=["V2 Task Lifecycle"],
58
+ )
59
+ router_api_v2.include_router(
60
+ task_group_lifecycle_router_v2,
61
+ prefix="/task-group",
62
+ tags=["V2 Task Lifecycle"],
63
+ )
64
+
65
+ router_api_v2.include_router(task_router_v2, prefix="/task", tags=["V2 Task"])
66
+ router_api_v2.include_router(task_version_update_router_v2, tags=["V2 Task"])
67
+ router_api_v2.include_router(
68
+ task_group_router_v2, prefix="/task-group", tags=["V2 TaskGroup"]
69
+ )
70
+ router_api_v2.include_router(workflow_router_v2, tags=["V2 Workflow"])
71
+ router_api_v2.include_router(
72
+ workflow_import_router_v2, tags=["V2 Workflow Import"]
73
+ )
74
+ router_api_v2.include_router(workflowtask_router_v2, tags=["V2 WorkflowTask"])