fractal-server 2.11.0a10__tar.gz → 2.12.0a0__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 (252) hide show
  1. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/PKG-INFO +1 -1
  2. fractal_server-2.12.0a0/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/__init__.py +0 -2
  4. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/linkuserproject.py +0 -9
  5. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/v2/dataset.py +0 -4
  6. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/v2/workflowtask.py +0 -4
  7. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/aux/_job.py +1 -3
  8. fractal_server-2.12.0a0/fractal_server/app/runner/filenames.py +2 -0
  9. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/shutdown.py +3 -27
  10. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/config.py +1 -15
  11. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/main.py +1 -12
  12. fractal_server-2.12.0a0/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +67 -0
  13. fractal_server-2.12.0a0/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +54 -0
  14. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/string_tools.py +0 -21
  15. fractal_server-2.12.0a0/fractal_server/tasks/utils.py +15 -0
  16. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/pyproject.toml +2 -2
  17. fractal_server-2.11.0a10/fractal_server/__init__.py +0 -1
  18. fractal_server-2.11.0a10/fractal_server/app/models/v1/__init__.py +0 -13
  19. fractal_server-2.11.0a10/fractal_server/app/models/v1/dataset.py +0 -71
  20. fractal_server-2.11.0a10/fractal_server/app/models/v1/job.py +0 -101
  21. fractal_server-2.11.0a10/fractal_server/app/models/v1/project.py +0 -29
  22. fractal_server-2.11.0a10/fractal_server/app/models/v1/state.py +0 -34
  23. fractal_server-2.11.0a10/fractal_server/app/models/v1/task.py +0 -85
  24. fractal_server-2.11.0a10/fractal_server/app/models/v1/workflow.py +0 -133
  25. fractal_server-2.11.0a10/fractal_server/app/routes/admin/v1.py +0 -377
  26. fractal_server-2.11.0a10/fractal_server/app/routes/api/v1/__init__.py +0 -26
  27. fractal_server-2.11.0a10/fractal_server/app/routes/api/v1/_aux_functions.py +0 -478
  28. fractal_server-2.11.0a10/fractal_server/app/routes/api/v1/dataset.py +0 -554
  29. fractal_server-2.11.0a10/fractal_server/app/routes/api/v1/job.py +0 -195
  30. fractal_server-2.11.0a10/fractal_server/app/routes/api/v1/project.py +0 -475
  31. fractal_server-2.11.0a10/fractal_server/app/routes/api/v1/task.py +0 -203
  32. fractal_server-2.11.0a10/fractal_server/app/routes/api/v1/task_collection.py +0 -239
  33. fractal_server-2.11.0a10/fractal_server/app/routes/api/v1/workflow.py +0 -355
  34. fractal_server-2.11.0a10/fractal_server/app/routes/api/v1/workflowtask.py +0 -187
  35. fractal_server-2.11.0a10/fractal_server/app/runner/async_wrap_v1.py +0 -27
  36. fractal_server-2.11.0a10/fractal_server/app/runner/filenames.py +0 -4
  37. fractal_server-2.11.0a10/fractal_server/app/runner/v1/__init__.py +0 -415
  38. fractal_server-2.11.0a10/fractal_server/app/runner/v1/_common.py +0 -620
  39. fractal_server-2.11.0a10/fractal_server/app/runner/v1/_local/__init__.py +0 -186
  40. fractal_server-2.11.0a10/fractal_server/app/runner/v1/_local/_local_config.py +0 -105
  41. fractal_server-2.11.0a10/fractal_server/app/runner/v1/_local/_submit_setup.py +0 -48
  42. fractal_server-2.11.0a10/fractal_server/app/runner/v1/_slurm/__init__.py +0 -312
  43. fractal_server-2.11.0a10/fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -81
  44. fractal_server-2.11.0a10/fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -163
  45. fractal_server-2.11.0a10/fractal_server/app/runner/v1/common.py +0 -117
  46. fractal_server-2.11.0a10/fractal_server/app/runner/v1/handle_failed_job.py +0 -141
  47. fractal_server-2.11.0a10/fractal_server/app/runner/v2/_local/executor.py +0 -100
  48. fractal_server-2.11.0a10/fractal_server/app/schemas/v1/__init__.py +0 -37
  49. fractal_server-2.11.0a10/fractal_server/app/schemas/v1/applyworkflow.py +0 -161
  50. fractal_server-2.11.0a10/fractal_server/app/schemas/v1/dataset.py +0 -165
  51. fractal_server-2.11.0a10/fractal_server/app/schemas/v1/dumps.py +0 -64
  52. fractal_server-2.11.0a10/fractal_server/app/schemas/v1/manifest.py +0 -126
  53. fractal_server-2.11.0a10/fractal_server/app/schemas/v1/project.py +0 -66
  54. fractal_server-2.11.0a10/fractal_server/app/schemas/v1/state.py +0 -18
  55. fractal_server-2.11.0a10/fractal_server/app/schemas/v1/task.py +0 -167
  56. fractal_server-2.11.0a10/fractal_server/app/schemas/v1/task_collection.py +0 -110
  57. fractal_server-2.11.0a10/fractal_server/app/schemas/v1/workflow.py +0 -212
  58. fractal_server-2.11.0a10/fractal_server/data_migrations/2_11_0.py +0 -168
  59. fractal_server-2.11.0a10/fractal_server/tasks/utils.py +0 -39
  60. fractal_server-2.11.0a10/fractal_server/tasks/v1/_TaskCollectPip.py +0 -103
  61. fractal_server-2.11.0a10/fractal_server/tasks/v1/background_operations.py +0 -352
  62. fractal_server-2.11.0a10/fractal_server/tasks/v1/endpoint_operations.py +0 -156
  63. fractal_server-2.11.0a10/fractal_server/tasks/v1/get_collection_data.py +0 -14
  64. fractal_server-2.11.0a10/fractal_server/tasks/v1/utils.py +0 -67
  65. fractal_server-2.11.0a10/fractal_server/tasks/v2/__init__.py +0 -0
  66. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/LICENSE +0 -0
  67. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/README.md +0 -0
  68. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/__main__.py +0 -0
  69. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/alembic.ini +0 -0
  70. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/__init__.py +0 -0
  71. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/db/__init__.py +0 -0
  72. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/linkusergroup.py +0 -0
  73. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/security.py +0 -0
  74. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/user_settings.py +0 -0
  75. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/v2/__init__.py +0 -0
  76. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/v2/job.py +0 -0
  77. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/v2/project.py +0 -0
  78. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/v2/task.py +0 -0
  79. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/v2/task_group.py +0 -0
  80. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/models/v2/workflow.py +0 -0
  81. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/__init__.py +0 -0
  82. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/admin/__init__.py +0 -0
  83. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
  84. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/admin/v2/job.py +0 -0
  85. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/admin/v2/project.py +0 -0
  86. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/admin/v2/task.py +0 -0
  87. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
  88. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
  89. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/__init__.py +0 -0
  90. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  91. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  92. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
  93. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
  94. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  95. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/images.py +0 -0
  96. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/job.py +0 -0
  97. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/project.py +0 -0
  98. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/status.py +0 -0
  99. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/submit.py +0 -0
  100. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/task.py +0 -0
  101. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  102. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  103. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/task_group.py +0 -0
  104. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
  105. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  106. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
  107. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  108. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/auth/__init__.py +0 -0
  109. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  110. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/auth/current_user.py +0 -0
  111. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/auth/group.py +0 -0
  112. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/auth/login.py +0 -0
  113. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/auth/oauth.py +0 -0
  114. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/auth/register.py +0 -0
  115. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/auth/router.py +0 -0
  116. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/auth/users.py +0 -0
  117. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/aux/__init__.py +0 -0
  118. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/aux/_runner.py +0 -0
  119. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/routes/aux/validate_user_settings.py +0 -0
  120. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/__init__.py +0 -0
  121. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/components.py +0 -0
  122. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/compress_folder.py +0 -0
  123. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/exceptions.py +0 -0
  124. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/__init__.py +0 -0
  125. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/__init__.py +0 -0
  126. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/_batching.py +0 -0
  127. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/_slurm_config.py +0 -0
  128. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/remote.py +0 -0
  129. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/ssh/__init__.py +0 -0
  130. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +0 -0
  131. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py +0 -0
  132. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/ssh/executor.py +0 -0
  133. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/sudo/__init__.py +0 -0
  134. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py +0 -0
  135. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py +0 -0
  136. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py +0 -0
  137. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/sudo/executor.py +0 -0
  138. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/executors/slurm/utils_executors.py +0 -0
  139. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/extract_archive.py +0 -0
  140. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/run_subprocess.py +0 -0
  141. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  142. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/task_files.py +0 -0
  143. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/__init__.py +0 -0
  144. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_local/__init__.py +0 -0
  145. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_local/_local_config.py +0 -0
  146. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_local/_submit_setup.py +0 -0
  147. {fractal_server-2.11.0a10/fractal_server/app/runner/v1 → fractal_server-2.12.0a0/fractal_server/app/runner/v2}/_local/executor.py +0 -0
  148. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_local_experimental/__init__.py +0 -0
  149. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_local_experimental/_local_config.py +0 -0
  150. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_local_experimental/_submit_setup.py +0 -0
  151. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_local_experimental/executor.py +0 -0
  152. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_slurm_common/__init__.py +0 -0
  153. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py +0 -0
  154. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_slurm_ssh/__init__.py +0 -0
  155. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_slurm_ssh/_submit_setup.py +0 -0
  156. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_slurm_sudo/__init__.py +0 -0
  157. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/_slurm_sudo/_submit_setup.py +0 -0
  158. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  159. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/handle_failed_job.py +0 -0
  160. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  161. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/runner.py +0 -0
  162. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/runner_functions.py +0 -0
  163. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
  164. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/v2/task_interface.py +0 -0
  165. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/runner/versions.py +0 -0
  166. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/__init__.py +0 -0
  167. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/_filter_validators.py +0 -0
  168. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/_validators.py +0 -0
  169. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/user.py +0 -0
  170. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/user_group.py +0 -0
  171. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/user_settings.py +0 -0
  172. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/__init__.py +0 -0
  173. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/dataset.py +0 -0
  174. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/dumps.py +0 -0
  175. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/job.py +0 -0
  176. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/manifest.py +0 -0
  177. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/project.py +0 -0
  178. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/status.py +0 -0
  179. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/task.py +0 -0
  180. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  181. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/task_group.py +0 -0
  182. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/workflow.py +0 -0
  183. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  184. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/security/__init__.py +0 -0
  185. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/security/signup_email.py +0 -0
  186. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/app/user_settings.py +0 -0
  187. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/data_migrations/README.md +0 -0
  188. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/data_migrations/tools.py +0 -0
  189. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/gunicorn_fractal.py +0 -0
  190. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/images/__init__.py +0 -0
  191. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/images/models.py +0 -0
  192. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/images/tools.py +0 -0
  193. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/logger.py +0 -0
  194. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/env.py +0 -0
  195. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/naming_convention.py +0 -0
  196. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  197. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  198. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  199. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
  200. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  201. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  202. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  203. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  204. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  205. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  206. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  207. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  208. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  209. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  210. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  211. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  212. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  213. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  214. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  215. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  216. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  217. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  218. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  219. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
  220. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  221. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  222. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  223. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/py.typed +0 -0
  224. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/ssh/__init__.py +0 -0
  225. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/ssh/_fabric.py +0 -0
  226. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/syringe.py +0 -0
  227. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/__init__.py +0 -0
  228. {fractal_server-2.11.0a10/fractal_server/tasks/v1 → fractal_server-2.12.0a0/fractal_server/tasks/v2}/__init__.py +0 -0
  229. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/local/__init__.py +0 -0
  230. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/local/_utils.py +0 -0
  231. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/local/collect.py +0 -0
  232. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/local/deactivate.py +0 -0
  233. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/local/reactivate.py +0 -0
  234. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  235. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  236. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/ssh/collect.py +0 -0
  237. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
  238. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
  239. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  240. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  241. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  242. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  243. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
  244. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
  245. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/utils_background.py +0 -0
  246. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/utils_database.py +0 -0
  247. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  248. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  249. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/tasks/v2/utils_templates.py +0 -0
  250. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/urls.py +0 -0
  251. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/utils.py +0 -0
  252. {fractal_server-2.11.0a10 → fractal_server-2.12.0a0}/fractal_server/zip_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: fractal-server
3
- Version: 2.11.0a10
3
+ Version: 2.12.0a0
4
4
  Summary: Backend component of the Fractal analytics platform
5
5
  Home-page: https://github.com/fractal-analytics-platform/fractal-server
6
6
  License: BSD-3-Clause
@@ -0,0 +1 @@
1
+ __VERSION__ = "2.12.0a0"
@@ -4,9 +4,7 @@ thus we should always export all relevant database models from here or they
4
4
  will not be picked up by alembic.
5
5
  """
6
6
  from .linkusergroup import LinkUserGroup # noqa: F401
7
- from .linkuserproject import LinkUserProject # noqa: F401
8
7
  from .linkuserproject import LinkUserProjectV2 # noqa: F401
9
8
  from .security import * # noqa
10
9
  from .user_settings import UserSettings # noqa
11
- from .v1 import * # noqa
12
10
  from .v2 import * # noqa
@@ -2,15 +2,6 @@ from sqlmodel import Field
2
2
  from sqlmodel import SQLModel
3
3
 
4
4
 
5
- class LinkUserProject(SQLModel, table=True):
6
- """
7
- Crossing table between User and Project
8
- """
9
-
10
- project_id: int = Field(foreign_key="project.id", primary_key=True)
11
- user_id: int = Field(foreign_key="user_oauth.id", primary_key=True)
12
-
13
-
14
5
  class LinkUserProjectV2(SQLModel, table=True):
15
6
  """
16
7
  Crossing table between User and ProjectV2
@@ -1,6 +1,5 @@
1
1
  from datetime import datetime
2
2
  from typing import Any
3
- from typing import Literal
4
3
  from typing import Optional
5
4
 
6
5
  from sqlalchemy import Column
@@ -42,9 +41,6 @@ class DatasetV2(SQLModel, table=True):
42
41
  sa_column=Column(JSON, server_default="[]", nullable=False)
43
42
  )
44
43
 
45
- filters: Optional[
46
- dict[Literal["attributes", "types"], dict[str, Any]]
47
- ] = Field(sa_column=Column(JSON, nullable=True, server_default="null"))
48
44
  type_filters: dict[str, bool] = Field(
49
45
  sa_column=Column(JSON, nullable=False, server_default="{}")
50
46
  )
@@ -1,5 +1,4 @@
1
1
  from typing import Any
2
- from typing import Literal
3
2
  from typing import Optional
4
3
 
5
4
  from sqlalchemy import Column
@@ -25,9 +24,6 @@ class WorkflowTaskV2(SQLModel, table=True):
25
24
  args_parallel: Optional[dict[str, Any]] = Field(sa_column=Column(JSON))
26
25
  args_non_parallel: Optional[dict[str, Any]] = Field(sa_column=Column(JSON))
27
26
 
28
- input_filters: Optional[
29
- dict[Literal["attributes", "types"], dict[str, Any]]
30
- ] = Field(sa_column=Column(JSON, nullable=True, server_default="null"))
31
27
  type_filters: dict[str, bool] = Field(
32
28
  sa_column=Column(JSON, nullable=False, server_default="{}")
33
29
  )
@@ -1,12 +1,10 @@
1
1
  from pathlib import Path
2
- from typing import Union
3
2
 
4
- from ...models.v1 import ApplyWorkflow
5
3
  from ...models.v2 import JobV2
6
4
  from ...runner.filenames import SHUTDOWN_FILENAME
7
5
 
8
6
 
9
- def _write_shutdown_file(*, job: Union[ApplyWorkflow, JobV2]):
7
+ def _write_shutdown_file(*, job: JobV2):
10
8
  """
11
9
  Write job's shutdown file.
12
10
 
@@ -0,0 +1,2 @@
1
+ SHUTDOWN_FILENAME = "shutdown"
2
+ WORKFLOW_LOG_FILENAME = "workflow.log"
@@ -3,8 +3,6 @@ import time
3
3
  from sqlmodel import select
4
4
 
5
5
  from fractal_server.app.db import get_async_db
6
- from fractal_server.app.models.v1 import ApplyWorkflow
7
- from fractal_server.app.models.v1.job import JobStatusTypeV1
8
6
  from fractal_server.app.models.v2 import JobV2
9
7
  from fractal_server.app.models.v2.job import JobStatusTypeV2
10
8
  from fractal_server.app.routes.aux._job import _write_shutdown_file
@@ -13,9 +11,7 @@ from fractal_server.logger import get_logger
13
11
  from fractal_server.syringe import Inject
14
12
 
15
13
 
16
- async def cleanup_after_shutdown(
17
- *, jobsV1: list[int], jobsV2: list[int], logger_name: str
18
- ):
14
+ async def cleanup_after_shutdown(*, jobsV2: list[int], logger_name: str):
19
15
  logger = get_logger(logger_name)
20
16
  logger.info("Cleanup function after shutdown")
21
17
  stm_v2 = (
@@ -24,22 +20,12 @@ async def cleanup_after_shutdown(
24
20
  .where(JobV2.status == JobStatusTypeV2.SUBMITTED)
25
21
  )
26
22
 
27
- stm_v1 = (
28
- select(ApplyWorkflow)
29
- .where(ApplyWorkflow.id.in_(jobsV1))
30
- .where(ApplyWorkflow.status == JobStatusTypeV1.SUBMITTED)
31
- )
32
-
33
23
  async for session in get_async_db():
34
24
  jobsV2_db = (await session.execute(stm_v2)).scalars().all()
35
- jobsV1_db = (await session.execute(stm_v1)).scalars().all()
36
25
 
37
26
  for job in jobsV2_db:
38
27
  _write_shutdown_file(job=job)
39
28
 
40
- for job in jobsV1_db:
41
- _write_shutdown_file(job=job)
42
-
43
29
  settings = Inject(get_settings)
44
30
 
45
31
  t_start = time.perf_counter()
@@ -49,9 +35,8 @@ async def cleanup_after_shutdown(
49
35
  logger.info("Waiting 3 seconds before checking")
50
36
  time.sleep(3)
51
37
  jobsV2_db = (await session.execute(stm_v2)).scalars().all()
52
- jobsV1_db = (await session.execute(stm_v1)).scalars().all()
53
38
 
54
- if len(jobsV2_db) == 0 and len(jobsV1_db) == 0:
39
+ if len(jobsV2_db) == 0:
55
40
  logger.info(
56
41
  (
57
42
  "All jobs associated to this app are "
@@ -61,10 +46,7 @@ async def cleanup_after_shutdown(
61
46
  return
62
47
  else:
63
48
  logger.info(
64
- (
65
- f"Some jobs are still 'submitted' "
66
- f"{jobsV1_db=}, {jobsV2_db=}"
67
- )
49
+ (f"Some jobs are still 'submitted' " f"{jobsV2_db=}")
68
50
  )
69
51
  logger.info(
70
52
  (
@@ -79,10 +61,4 @@ async def cleanup_after_shutdown(
79
61
  session.add(job)
80
62
  await session.commit()
81
63
 
82
- for job in jobsV1_db:
83
- job.status = "failed"
84
- job.log = (job.log or "") + "\nJob stopped due to app shutdown\n"
85
- session.add(job)
86
- await session.commit()
87
-
88
64
  logger.info("Exit from shutdown logic")
@@ -338,7 +338,7 @@ class Settings(BaseSettings):
338
338
 
339
339
  FRACTAL_API_MAX_JOB_LIST_LENGTH: int = 50
340
340
  """
341
- Number of ids that can be stored in the `jobsV1` and `jobsV2` attributes of
341
+ Number of ids that can be stored in the `jobsV2` attribute of
342
342
  `app.state`.
343
343
  """
344
344
 
@@ -496,13 +496,6 @@ class Settings(BaseSettings):
496
496
  `JobExecutionError`.
497
497
  """
498
498
 
499
- FRACTAL_API_SUBMIT_RATE_LIMIT: int = 2
500
- """
501
- Interval to wait (in seconds) to be allowed to call again
502
- `POST api/v1/{project_id}/workflow/{workflow_id}/apply/`
503
- with the same path and query parameters.
504
- """
505
-
506
499
  FRACTAL_RUNNER_TASKS_INCLUDE_IMAGE: str = (
507
500
  "Copy OME-Zarr structure;Convert Metadata Components from 2D to 3D"
508
501
  )
@@ -511,13 +504,6 @@ class Settings(BaseSettings):
511
504
  attribute in their input-arguments JSON file.
512
505
  """
513
506
 
514
- FRACTAL_API_V1_MODE: Literal[
515
- "include", "include_read_only", "exclude"
516
- ] = "include"
517
- """
518
- Whether to include the v1 API.
519
- """
520
-
521
507
  FRACTAL_PIP_CACHE_DIR: Optional[str] = None
522
508
  """
523
509
  Absolute path to the cache directory for `pip`; if unset,
@@ -39,20 +39,11 @@ def collect_routers(app: FastAPI) -> None:
39
39
  The application to register the routers to.
40
40
  """
41
41
  from .app.routes.api import router_api
42
- from .app.routes.api.v1 import router_api_v1
43
42
  from .app.routes.api.v2 import router_api_v2
44
- from .app.routes.admin.v1 import router_admin_v1
45
43
  from .app.routes.admin.v2 import router_admin_v2
46
44
  from .app.routes.auth.router import router_auth
47
45
 
48
- settings = Inject(get_settings)
49
-
50
46
  app.include_router(router_api, prefix="/api")
51
- if settings.FRACTAL_API_V1_MODE.startswith("include"):
52
- app.include_router(router_api_v1, prefix="/api/v1")
53
- app.include_router(
54
- router_admin_v1, prefix="/admin/v1", tags=["V1 Admin area"]
55
- )
56
47
  app.include_router(router_api_v2, prefix="/api/v2")
57
48
  app.include_router(
58
49
  router_admin_v2, prefix="/admin/v2", tags=["V2 Admin area"]
@@ -84,7 +75,6 @@ def check_settings() -> None:
84
75
 
85
76
  @asynccontextmanager
86
77
  async def lifespan(app: FastAPI):
87
- app.state.jobsV1 = []
88
78
  app.state.jobsV2 = []
89
79
  logger = set_logger("fractal_server.lifespan")
90
80
  logger.info("Start application startup")
@@ -123,12 +113,11 @@ async def lifespan(app: FastAPI):
123
113
 
124
114
  logger.info(
125
115
  f"Current worker with pid {os.getpid()} is shutting down. "
126
- f"Current jobs: {app.state.jobsV1=}, {app.state.jobsV2=}"
116
+ f"Current jobs: {app.state.jobsV2=}"
127
117
  )
128
118
  if _backend_supports_shutdown(settings.FRACTAL_RUNNER_BACKEND):
129
119
  try:
130
120
  await cleanup_after_shutdown(
131
- jobsV1=app.state.jobsV1,
132
121
  jobsV2=app.state.jobsV2,
133
122
  logger_name="fractal_server.lifespan",
134
123
  )
@@ -0,0 +1,67 @@
1
+ """Drop V1 tables
2
+
3
+ Revision ID: 1eac13a26c83
4
+ Revises: af8673379a5c
5
+ Create Date: 2025-01-10 13:17:47.838607
6
+
7
+ """
8
+ import logging
9
+
10
+ from alembic import op
11
+ from sqlmodel import SQLModel
12
+
13
+ from fractal_server.migrations.naming_convention import NAMING_CONVENTION
14
+
15
+ # revision identifiers, used by Alembic.
16
+ revision = "1eac13a26c83"
17
+ down_revision = "af8673379a5c"
18
+ branch_labels = None
19
+ depends_on = None
20
+
21
+
22
+ TABLES_V1 = [
23
+ "resource",
24
+ "applyworkflow",
25
+ "task",
26
+ "workflow",
27
+ "workflowtask",
28
+ "linkuserproject",
29
+ "dataset",
30
+ "project",
31
+ "state",
32
+ ]
33
+
34
+
35
+ def upgrade() -> None:
36
+
37
+ logger = logging.getLogger("alembic.runtime.migration")
38
+
39
+ target_metadata = SQLModel.metadata
40
+ target_metadata.naming_convention = NAMING_CONVENTION
41
+
42
+ connection = op.get_bind()
43
+ target_metadata.reflect(
44
+ bind=connection,
45
+ extend_existing=True,
46
+ only=TABLES_V1,
47
+ )
48
+
49
+ logger.info("Starting non-reversible upgrade")
50
+ logger.info("Dropping all V1 ForeignKey constraints")
51
+ fk_names = []
52
+ for table_name in TABLES_V1:
53
+ table = target_metadata.tables[table_name]
54
+ for fk in table.foreign_keys:
55
+ op.drop_constraint(fk.name, table_name, type_="foreignkey")
56
+ fk_names.append(fk.name)
57
+ logger.info(f"Dropped all V1 ForeignKey constraints: {fk_names}")
58
+ logger.info(f"Dropping all V1 tables: {TABLES_V1}")
59
+ for table_name in TABLES_V1:
60
+ op.drop_table(table_name)
61
+
62
+
63
+ def downgrade() -> None:
64
+ raise RuntimeError(
65
+ "Cannot downgrade from 1eac13a26c83 to db09233ad13a, "
66
+ "because it's fully breaking."
67
+ )
@@ -0,0 +1,54 @@
1
+ """drop old filter columns
2
+
3
+ Revision ID: af8673379a5c
4
+ Revises: db09233ad13a
5
+ Create Date: 2025-01-30 14:44:04.302795
6
+
7
+ """
8
+ import sqlalchemy as sa
9
+ from alembic import op
10
+ from sqlalchemy.dialects import postgresql
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "af8673379a5c"
14
+ down_revision = "db09233ad13a"
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("datasetv2", schema=None) as batch_op:
22
+ batch_op.drop_column("filters")
23
+
24
+ with op.batch_alter_table("workflowtaskv2", schema=None) as batch_op:
25
+ batch_op.drop_column("input_filters")
26
+
27
+ # ### end Alembic commands ###
28
+
29
+
30
+ def downgrade() -> None:
31
+ # ### commands auto generated by Alembic - please adjust! ###
32
+ with op.batch_alter_table("workflowtaskv2", schema=None) as batch_op:
33
+ batch_op.add_column(
34
+ sa.Column(
35
+ "input_filters",
36
+ postgresql.JSON(astext_type=sa.Text()),
37
+ server_default=sa.text("'null'::json"),
38
+ autoincrement=False,
39
+ nullable=True,
40
+ )
41
+ )
42
+
43
+ with op.batch_alter_table("datasetv2", schema=None) as batch_op:
44
+ batch_op.add_column(
45
+ sa.Column(
46
+ "filters",
47
+ postgresql.JSON(astext_type=sa.Text()),
48
+ server_default=sa.text("'null'::json"),
49
+ autoincrement=False,
50
+ nullable=True,
51
+ )
52
+ )
53
+
54
+ # ### end Alembic commands ###
@@ -33,27 +33,6 @@ def sanitize_string(value: str) -> str:
33
33
  return new_value
34
34
 
35
35
 
36
- def slugify_task_name_for_source_v1(task_name: str) -> str:
37
- """
38
- NOTE: this function is used upon creation of tasks' sources, therefore
39
- for the moment we cannot replace it with its more comprehensive version
40
- from `fractal_server.string_tools.sanitize_string`, nor we can remove it.
41
-
42
- As of 2.3.1, we are renaming it to `slugify_task_name_for_source`, to make
43
- it clear that it should not be used for other purposes.
44
-
45
- As of 2.7.0, we are renaming it to `slugify_task_name_for_source_v1`, to
46
- make it clear that it is not used for v2.
47
-
48
- Args:
49
- task_name:
50
-
51
- Return:
52
- Slug-ified task name.
53
- """
54
- return task_name.replace(" ", "_").lower()
55
-
56
-
57
36
  def validate_cmd(
58
37
  command: str,
59
38
  *,
@@ -0,0 +1,15 @@
1
+ from pathlib import Path
2
+
3
+
4
+ COLLECTION_FILENAME = "collection.json"
5
+ COLLECTION_LOG_FILENAME = "collection.log"
6
+ COLLECTION_FREEZE_FILENAME = "collection_freeze.txt"
7
+ FORBIDDEN_DEPENDENCY_STRINGS = ["github.com"]
8
+
9
+
10
+ def get_collection_path(base: Path) -> Path:
11
+ return base / COLLECTION_FILENAME
12
+
13
+
14
+ def get_log_path(base: Path) -> Path:
15
+ return base / COLLECTION_LOG_FILENAME
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fractal-server"
3
- version = "2.11.0a10"
3
+ version = "2.12.0a0"
4
4
  description = "Backend component of the Fractal analytics platform"
5
5
  authors = [
6
6
  { name="Tommaso Comparin", email="tommaso.comparin@exact-lab.it" },
@@ -95,7 +95,7 @@ filterwarnings = [
95
95
  ]
96
96
 
97
97
  [tool.bumpver]
98
- current_version = "2.11.0a10"
98
+ current_version = "2.12.0a0"
99
99
  version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
100
100
  commit_message = "bump version {old_version} -> {new_version}"
101
101
  commit = true
@@ -1 +0,0 @@
1
- __VERSION__ = "2.11.0a10"
@@ -1,13 +0,0 @@
1
- """
2
- `models` module
3
- """
4
- from ..linkuserproject import LinkUserProject # noqa F401
5
- from .dataset import Dataset # noqa F401
6
- from .dataset import Resource # noqa F401
7
- from .job import ApplyWorkflow # noqa F401
8
- from .job import JobStatusTypeV1 # noqa F401
9
- from .project import Project # noqa F401
10
- from .state import State # noqa F401
11
- from .task import Task # noqa F401
12
- from .workflow import Workflow # noqa F401
13
- from .workflow import WorkflowTask # noqa F401
@@ -1,71 +0,0 @@
1
- from datetime import datetime
2
- from typing import Any
3
- from typing import Optional
4
-
5
- from sqlalchemy import Column
6
- from sqlalchemy.ext.orderinglist import ordering_list
7
- from sqlalchemy.types import DateTime
8
- from sqlalchemy.types import JSON
9
- from sqlmodel import Field
10
- from sqlmodel import Relationship
11
- from sqlmodel import SQLModel
12
-
13
- from ....utils import get_timestamp
14
- from ...schemas.v1.dataset import _DatasetBaseV1
15
- from ...schemas.v1.dataset import _ResourceBaseV1
16
-
17
-
18
- class Resource(_ResourceBaseV1, SQLModel, table=True):
19
- id: Optional[int] = Field(default=None, primary_key=True)
20
- dataset_id: int = Field(foreign_key="dataset.id")
21
-
22
-
23
- class Dataset(_DatasetBaseV1, SQLModel, table=True):
24
- """
25
- Represent a dataset
26
-
27
- Attributes:
28
- id:
29
- Primary key
30
- project_id:
31
- ID of the project the workflow belongs to.
32
- meta:
33
- Metadata of the Dataset
34
- history:
35
- History of the Dataset
36
- resource_list:
37
- (Mapper attribute)
38
-
39
- """
40
-
41
- id: Optional[int] = Field(default=None, primary_key=True)
42
- project_id: int = Field(foreign_key="project.id")
43
- project: "Project" = Relationship( # noqa: F821
44
- sa_relationship_kwargs=dict(lazy="selectin"),
45
- )
46
-
47
- resource_list: list[Resource] = Relationship(
48
- sa_relationship_kwargs={
49
- "lazy": "selectin",
50
- "order_by": "Resource.id",
51
- "collection_class": ordering_list("id"),
52
- "cascade": "all, delete-orphan",
53
- }
54
- )
55
-
56
- meta: dict[str, Any] = Field(sa_column=Column(JSON), default={})
57
- history: list[dict[str, Any]] = Field(
58
- sa_column=Column(JSON, server_default="[]", nullable=False)
59
- )
60
-
61
- timestamp_created: datetime = Field(
62
- default_factory=get_timestamp,
63
- sa_column=Column(DateTime(timezone=True), nullable=False),
64
- )
65
-
66
- class Config:
67
- arbitrary_types_allowed = True
68
-
69
- @property
70
- def paths(self) -> list[str]:
71
- return [r.path for r in self.resource_list]
@@ -1,101 +0,0 @@
1
- from datetime import datetime
2
- from typing import Any
3
- from typing import Optional
4
-
5
- from sqlalchemy import Column
6
- from sqlalchemy.types import DateTime
7
- from sqlalchemy.types import JSON
8
- from sqlmodel import Field
9
- from sqlmodel import SQLModel
10
-
11
- from ....utils import get_timestamp
12
- from ...schemas.v1 import JobStatusTypeV1
13
- from ...schemas.v1.applyworkflow import _ApplyWorkflowBaseV1
14
-
15
-
16
- class ApplyWorkflow(_ApplyWorkflowBaseV1, SQLModel, table=True):
17
- """
18
- Represent a workflow run
19
-
20
- This table is responsible for storing the state of a workflow execution in
21
- the database.
22
-
23
- Attributes:
24
- id:
25
- Primary key.
26
- project_id:
27
- ID of the project the workflow belongs to, or `None` if the project
28
- was deleted.
29
- input_dataset_id:
30
- ID of the input dataset, or `None` if the dataset was deleted.
31
- output_dataset_id:
32
- ID of the output dataset, or `None` if the dataset was deleted.
33
- workflow_id:
34
- ID of the workflow being applied, or `None` if the workflow was
35
- deleted.
36
- status:
37
- Job status
38
- workflow_dump:
39
- Copy of the submitted workflow at submission.
40
- input_dataset_dump:
41
- Copy of the input_dataset at submission.
42
- output_dataset_dump:
43
- Copy of the output_dataset at submission.
44
- start_timestamp:
45
- Timestamp of when the run began.
46
- end_timestamp:
47
- Timestamp of when the run ended or failed.
48
- status:
49
- Status of the run.
50
- log:
51
- Forward of the workflow logs.
52
- user_email:
53
- Email address of the user who submitted the job.
54
- slurm_account:
55
- Account to be used when submitting the job to SLURM (see "account"
56
- option in [`sbatch`
57
- documentation](https://slurm.schedmd.com/sbatch.html#SECTION_OPTIONS)).
58
- first_task_index:
59
- last_task_index:
60
- """
61
-
62
- class Config:
63
- arbitrary_types_allowed = True
64
-
65
- id: Optional[int] = Field(default=None, primary_key=True)
66
-
67
- project_id: Optional[int] = Field(foreign_key="project.id")
68
- workflow_id: Optional[int] = Field(foreign_key="workflow.id")
69
- input_dataset_id: Optional[int] = Field(foreign_key="dataset.id")
70
- output_dataset_id: Optional[int] = Field(foreign_key="dataset.id")
71
-
72
- user_email: str = Field(nullable=False)
73
- slurm_account: Optional[str]
74
-
75
- input_dataset_dump: dict[str, Any] = Field(
76
- sa_column=Column(JSON, nullable=False)
77
- )
78
- output_dataset_dump: dict[str, Any] = Field(
79
- sa_column=Column(JSON, nullable=False)
80
- )
81
- workflow_dump: dict[str, Any] = Field(
82
- sa_column=Column(JSON, nullable=False)
83
- )
84
- project_dump: dict[str, Any] = Field(
85
- sa_column=Column(JSON, nullable=False)
86
- )
87
-
88
- working_dir: Optional[str]
89
- working_dir_user: Optional[str]
90
- first_task_index: int
91
- last_task_index: int
92
-
93
- start_timestamp: datetime = Field(
94
- default_factory=get_timestamp,
95
- sa_column=Column(DateTime(timezone=True), nullable=False),
96
- )
97
- end_timestamp: Optional[datetime] = Field(
98
- default=None, sa_column=Column(DateTime(timezone=True))
99
- )
100
- status: str = JobStatusTypeV1.SUBMITTED
101
- log: Optional[str] = None
@@ -1,29 +0,0 @@
1
- from datetime import datetime
2
- from typing import Optional
3
-
4
- from sqlalchemy import Column
5
- from sqlalchemy.types import DateTime
6
- from sqlmodel import Field
7
- from sqlmodel import Relationship
8
- from sqlmodel import SQLModel
9
-
10
- from . import LinkUserProject
11
- from ....utils import get_timestamp
12
- from ...schemas.v1.project import _ProjectBaseV1
13
- from fractal_server.app.models import UserOAuth
14
-
15
-
16
- class Project(_ProjectBaseV1, SQLModel, table=True):
17
-
18
- id: Optional[int] = Field(default=None, primary_key=True)
19
- timestamp_created: datetime = Field(
20
- default_factory=get_timestamp,
21
- sa_column=Column(DateTime(timezone=True), nullable=False),
22
- )
23
-
24
- user_list: list[UserOAuth] = Relationship(
25
- link_model=LinkUserProject,
26
- sa_relationship_kwargs={
27
- "lazy": "selectin",
28
- },
29
- )