fractal-server 2.6.2__tar.gz → 2.6.3__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 (221) hide show
  1. {fractal_server-2.6.2 → fractal_server-2.6.3}/PKG-INFO +1 -1
  2. fractal_server-2.6.3/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/security.py +4 -0
  4. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/auth/current_user.py +29 -0
  5. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/auth/group.py +16 -1
  6. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/sudo/executor.py +5 -1
  7. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/user_group.py +18 -1
  8. fractal_server-2.6.3/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +36 -0
  9. {fractal_server-2.6.2 → fractal_server-2.6.3}/pyproject.toml +2 -2
  10. fractal_server-2.6.2/fractal_server/__init__.py +0 -1
  11. {fractal_server-2.6.2 → fractal_server-2.6.3}/LICENSE +0 -0
  12. {fractal_server-2.6.2 → fractal_server-2.6.3}/README.md +0 -0
  13. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/__main__.py +0 -0
  14. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/alembic.ini +0 -0
  15. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/__init__.py +0 -0
  16. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/db/__init__.py +0 -0
  17. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/__init__.py +0 -0
  18. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/linkusergroup.py +0 -0
  19. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/linkuserproject.py +0 -0
  20. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/user_settings.py +0 -0
  21. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v1/__init__.py +0 -0
  22. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v1/dataset.py +0 -0
  23. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v1/job.py +0 -0
  24. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v1/project.py +0 -0
  25. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v1/state.py +0 -0
  26. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v1/task.py +0 -0
  27. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v1/workflow.py +0 -0
  28. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v2/__init__.py +0 -0
  29. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v2/collection_state.py +0 -0
  30. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v2/dataset.py +0 -0
  31. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v2/job.py +0 -0
  32. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v2/project.py +0 -0
  33. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v2/task.py +0 -0
  34. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v2/workflow.py +0 -0
  35. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/models/v2/workflowtask.py +0 -0
  36. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/__init__.py +0 -0
  37. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/admin/__init__.py +0 -0
  38. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/admin/v1.py +0 -0
  39. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/admin/v2.py +0 -0
  40. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/__init__.py +0 -0
  41. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v1/__init__.py +0 -0
  42. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v1/_aux_functions.py +0 -0
  43. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v1/dataset.py +0 -0
  44. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v1/job.py +0 -0
  45. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v1/project.py +0 -0
  46. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v1/task.py +0 -0
  47. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v1/task_collection.py +0 -0
  48. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v1/workflow.py +0 -0
  49. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v1/workflowtask.py +0 -0
  50. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  51. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  52. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  53. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/images.py +0 -0
  54. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/job.py +0 -0
  55. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/project.py +0 -0
  56. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/status.py +0 -0
  57. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/submit.py +0 -0
  58. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/task.py +0 -0
  59. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  60. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  61. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  62. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  63. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/auth/__init__.py +0 -0
  64. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  65. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/auth/group_names.py +0 -0
  66. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/auth/login.py +0 -0
  67. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/auth/oauth.py +0 -0
  68. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/auth/register.py +0 -0
  69. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/auth/router.py +0 -0
  70. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/auth/users.py +0 -0
  71. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/aux/__init__.py +0 -0
  72. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/aux/_job.py +0 -0
  73. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/aux/_runner.py +0 -0
  74. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/routes/aux/validate_user_settings.py +0 -0
  75. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/.gitignore +0 -0
  76. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/__init__.py +0 -0
  77. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/async_wrap.py +0 -0
  78. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/components.py +0 -0
  79. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/compress_folder.py +0 -0
  80. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/exceptions.py +0 -0
  81. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/__init__.py +0 -0
  82. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/__init__.py +0 -0
  83. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/_batching.py +0 -0
  84. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/_slurm_config.py +0 -0
  85. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/remote.py +0 -0
  86. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/ssh/__init__.py +0 -0
  87. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +0 -0
  88. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py +0 -0
  89. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/ssh/executor.py +0 -0
  90. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/sudo/__init__.py +0 -0
  91. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py +0 -0
  92. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py +0 -0
  93. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py +0 -0
  94. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/extract_archive.py +0 -0
  95. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/filenames.py +0 -0
  96. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/run_subprocess.py +0 -0
  97. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  98. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/shutdown.py +0 -0
  99. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/task_files.py +0 -0
  100. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/__init__.py +0 -0
  101. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/_common.py +0 -0
  102. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/_local/__init__.py +0 -0
  103. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/_local/_local_config.py +0 -0
  104. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/_local/_submit_setup.py +0 -0
  105. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/_local/executor.py +0 -0
  106. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/_slurm/__init__.py +0 -0
  107. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -0
  108. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -0
  109. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/common.py +0 -0
  110. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v1/handle_failed_job.py +0 -0
  111. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/__init__.py +0 -0
  112. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_local/__init__.py +0 -0
  113. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_local/_local_config.py +0 -0
  114. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_local/_submit_setup.py +0 -0
  115. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_local/executor.py +0 -0
  116. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_local_experimental/__init__.py +0 -0
  117. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_local_experimental/_local_config.py +0 -0
  118. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_local_experimental/_submit_setup.py +0 -0
  119. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_local_experimental/executor.py +0 -0
  120. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_slurm_common/__init__.py +0 -0
  121. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py +0 -0
  122. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_slurm_ssh/__init__.py +0 -0
  123. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_slurm_ssh/_submit_setup.py +0 -0
  124. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_slurm_sudo/__init__.py +0 -0
  125. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/_slurm_sudo/_submit_setup.py +0 -0
  126. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  127. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/handle_failed_job.py +0 -0
  128. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  129. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/runner.py +0 -0
  130. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/runner_functions.py +0 -0
  131. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
  132. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/v2/task_interface.py +0 -0
  133. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/runner/versions.py +0 -0
  134. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/__init__.py +0 -0
  135. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/_validators.py +0 -0
  136. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/user.py +0 -0
  137. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/user_settings.py +0 -0
  138. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v1/__init__.py +0 -0
  139. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v1/applyworkflow.py +0 -0
  140. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v1/dataset.py +0 -0
  141. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v1/dumps.py +0 -0
  142. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v1/manifest.py +0 -0
  143. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v1/project.py +0 -0
  144. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v1/state.py +0 -0
  145. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v1/task.py +0 -0
  146. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v1/task_collection.py +0 -0
  147. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v1/workflow.py +0 -0
  148. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/__init__.py +0 -0
  149. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/dataset.py +0 -0
  150. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/dumps.py +0 -0
  151. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/job.py +0 -0
  152. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/manifest.py +0 -0
  153. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/project.py +0 -0
  154. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/status.py +0 -0
  155. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/task.py +0 -0
  156. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  157. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/workflow.py +0 -0
  158. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  159. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/security/__init__.py +0 -0
  160. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/app/user_settings.py +0 -0
  161. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/config.py +0 -0
  162. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/data_migrations/README.md +0 -0
  163. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/data_migrations/tools.py +0 -0
  164. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/gunicorn_fractal.py +0 -0
  165. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/images/__init__.py +0 -0
  166. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/images/models.py +0 -0
  167. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/images/tools.py +0 -0
  168. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/logger.py +0 -0
  169. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/main.py +0 -0
  170. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/README +0 -0
  171. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/env.py +0 -0
  172. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/naming_convention.py +0 -0
  173. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/script.py.mako +0 -0
  174. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  175. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  176. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  177. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  178. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  179. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  180. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  181. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  182. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  183. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  184. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  185. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  186. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  187. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  188. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  189. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  190. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  191. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  192. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  193. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  194. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/py.typed +0 -0
  195. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/ssh/__init__.py +0 -0
  196. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/ssh/_fabric.py +0 -0
  197. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/string_tools.py +0 -0
  198. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/syringe.py +0 -0
  199. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/__init__.py +0 -0
  200. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/utils.py +0 -0
  201. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v1/_TaskCollectPip.py +0 -0
  202. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v1/__init__.py +0 -0
  203. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v1/background_operations.py +0 -0
  204. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v1/endpoint_operations.py +0 -0
  205. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v1/get_collection_data.py +0 -0
  206. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v1/utils.py +0 -0
  207. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/_TaskCollectPip.py +0 -0
  208. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/__init__.py +0 -0
  209. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/_venv_pip.py +0 -0
  210. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/background_operations.py +0 -0
  211. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/background_operations_ssh.py +0 -0
  212. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/endpoint_operations.py +0 -0
  213. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/templates/_1_create_venv.sh +0 -0
  214. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/templates/_2_upgrade_pip.sh +0 -0
  215. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/templates/_3_pip_install.sh +0 -0
  216. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/templates/_4_pip_freeze.sh +0 -0
  217. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/templates/_5_pip_show.sh +0 -0
  218. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/tasks/v2/utils.py +0 -0
  219. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/urls.py +0 -0
  220. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/utils.py +0 -0
  221. {fractal_server-2.6.2 → fractal_server-2.6.3}/fractal_server/zip_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fractal-server
3
- Version: 2.6.2
3
+ Version: 2.6.3
4
4
  Summary: Server 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.6.3"
@@ -15,6 +15,7 @@ from typing import Optional
15
15
  from pydantic import EmailStr
16
16
  from sqlalchemy import Column
17
17
  from sqlalchemy.types import DateTime
18
+ from sqlalchemy.types import JSON
18
19
  from sqlmodel import Field
19
20
  from sqlmodel import Relationship
20
21
  from sqlmodel import SQLModel
@@ -126,3 +127,6 @@ class UserGroup(SQLModel, table=True):
126
127
  default_factory=get_timestamp,
127
128
  sa_column=Column(DateTime(timezone=True), nullable=False),
128
129
  )
130
+ viewer_paths: list[str] = Field(
131
+ sa_column=Column(JSON, server_default="[]", nullable=False)
132
+ )
@@ -5,6 +5,7 @@ from fastapi import APIRouter
5
5
  from fastapi import Depends
6
6
  from fastapi_users import schemas
7
7
  from sqlalchemy.ext.asyncio import AsyncSession
8
+ from sqlmodel import select
8
9
 
9
10
  from . import current_active_user
10
11
  from ...db import get_async_db
@@ -13,6 +14,8 @@ from ...schemas.user import UserUpdate
13
14
  from ...schemas.user import UserUpdateStrict
14
15
  from ..aux.validate_user_settings import verify_user_has_settings
15
16
  from ._aux_auth import _get_single_user_with_group_names
17
+ from fractal_server.app.models import LinkUserGroup
18
+ from fractal_server.app.models import UserGroup
16
19
  from fractal_server.app.models import UserOAuth
17
20
  from fractal_server.app.models import UserSettings
18
21
  from fractal_server.app.schemas import UserSettingsReadStrict
@@ -103,3 +106,29 @@ async def patch_current_user_settings(
103
106
  await db.refresh(current_user_settings)
104
107
 
105
108
  return current_user_settings
109
+
110
+
111
+ @router_current_user.get(
112
+ "/current-user/viewer-paths/", response_model=list[str]
113
+ )
114
+ async def get_current_user_viewer_paths(
115
+ current_user: UserOAuth = Depends(current_active_user),
116
+ db: AsyncSession = Depends(get_async_db),
117
+ ) -> list[str]:
118
+ """Returns the union of `viewer_paths` for all user's groups"""
119
+ cmd = (
120
+ select(UserGroup.viewer_paths)
121
+ .join(LinkUserGroup)
122
+ .where(LinkUserGroup.group_id == UserGroup.id)
123
+ .where(LinkUserGroup.user_id == current_user.id)
124
+ )
125
+ res = await db.execute(cmd)
126
+ viewer_paths_nested = res.scalars().all()
127
+
128
+ # Flatten a nested object and make its elements unique
129
+ all_viewer_paths_set = set(
130
+ path for _viewer_paths in viewer_paths_nested for path in _viewer_paths
131
+ )
132
+ all_viewer_paths = list(all_viewer_paths_set)
133
+
134
+ return all_viewer_paths
@@ -97,7 +97,9 @@ async def create_single_group(
97
97
  )
98
98
 
99
99
  # Create and return new group
100
- new_group = UserGroup(name=group_create.name)
100
+ new_group = UserGroup(
101
+ name=group_create.name, viewer_paths=group_create.viewer_paths
102
+ )
101
103
  db.add(new_group)
102
104
  await db.commit()
103
105
 
@@ -116,6 +118,13 @@ async def update_single_group(
116
118
  db: AsyncSession = Depends(get_async_db),
117
119
  ) -> UserGroupRead:
118
120
 
121
+ group = await db.get(UserGroup, group_id)
122
+ if group is None:
123
+ raise HTTPException(
124
+ status_code=status.HTTP_404_NOT_FOUND,
125
+ detail=f"UserGroup {group_id} not found.",
126
+ )
127
+
119
128
  # Check that all required users exist
120
129
  # Note: The reason for introducing `col` is as in
121
130
  # https://sqlmodel.tiangolo.com/tutorial/where/#type-annotations-and-errors,
@@ -152,6 +161,12 @@ async def update_single_group(
152
161
  detail=error_msg,
153
162
  )
154
163
 
164
+ # Patch `viewer_paths`
165
+ if group_update.viewer_paths is not None:
166
+ group.viewer_paths = group_update.viewer_paths
167
+ db.add(group)
168
+ await db.commit()
169
+
155
170
  updated_group = await _get_single_group_with_user_ids(
156
171
  group_id=group_id, db=db
157
172
  )
@@ -246,6 +246,11 @@ class FractalSlurmExecutor(SlurmExecutor):
246
246
 
247
247
  super().__init__(*args, **kwargs)
248
248
 
249
+ # Assign `wait_thread.shutdown_callback` early, since it may be called
250
+ # from within `_stop_and_join_wait_thread` (e.g. if an exception is
251
+ # raised within `__init__`).
252
+ self.wait_thread.shutdown_callback = self.shutdown
253
+
249
254
  self.keep_pickle_files = keep_pickle_files
250
255
  self.slurm_user = slurm_user
251
256
  self.slurm_account = slurm_account
@@ -291,7 +296,6 @@ class FractalSlurmExecutor(SlurmExecutor):
291
296
  shutdown_file
292
297
  or (self.workflow_dir_local / SHUTDOWN_FILENAME).as_posix()
293
298
  )
294
- self.wait_thread.shutdown_callback = self.shutdown
295
299
 
296
300
  def _cleanup(self, jobid: str) -> None:
297
301
  """
@@ -6,9 +6,9 @@ from pydantic import Extra
6
6
  from pydantic import Field
7
7
  from pydantic import validator
8
8
 
9
+ from ._validators import val_absolute_path
9
10
  from ._validators import val_unique_list
10
11
 
11
-
12
12
  __all__ = (
13
13
  "UserGroupRead",
14
14
  "UserGroupUpdate",
@@ -34,6 +34,7 @@ class UserGroupRead(BaseModel):
34
34
  name: str
35
35
  timestamp_created: datetime
36
36
  user_ids: Optional[list[int]] = None
37
+ viewer_paths: list[str]
37
38
 
38
39
 
39
40
  class UserGroupCreate(BaseModel, extra=Extra.forbid):
@@ -45,6 +46,14 @@ class UserGroupCreate(BaseModel, extra=Extra.forbid):
45
46
  """
46
47
 
47
48
  name: str
49
+ viewer_paths: list[str] = Field(default_factory=list)
50
+
51
+ @validator("viewer_paths")
52
+ def viewer_paths_validator(cls, value):
53
+ for i, path in enumerate(value):
54
+ value[i] = val_absolute_path(f"viewer_paths[{i}]")(path)
55
+ value = val_unique_list("viewer_paths")(value)
56
+ return value
48
57
 
49
58
 
50
59
  class UserGroupUpdate(BaseModel, extra=Extra.forbid):
@@ -59,7 +68,15 @@ class UserGroupUpdate(BaseModel, extra=Extra.forbid):
59
68
  """
60
69
 
61
70
  new_user_ids: list[int] = Field(default_factory=list)
71
+ viewer_paths: Optional[list[str]] = None
62
72
 
63
73
  _val_unique = validator("new_user_ids", allow_reuse=True)(
64
74
  val_unique_list("new_user_ids")
65
75
  )
76
+
77
+ @validator("viewer_paths")
78
+ def viewer_paths_validator(cls, value):
79
+ for i, path in enumerate(value):
80
+ value[i] = val_absolute_path(f"viewer_paths[{i}]")(path)
81
+ value = val_unique_list("viewer_paths")(value)
82
+ return value
@@ -0,0 +1,36 @@
1
+ """user group viewer paths
2
+
3
+ Revision ID: da2cb2ac4255
4
+ Revises: 94a47ea2d3ff
5
+ Create Date: 2024-09-26 14:39:26.135101
6
+
7
+ """
8
+ import sqlalchemy as sa
9
+ from alembic import op
10
+
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "da2cb2ac4255"
14
+ down_revision = "94a47ea2d3ff"
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("usergroup", schema=None) as batch_op:
22
+ batch_op.add_column(
23
+ sa.Column(
24
+ "viewer_paths", sa.JSON(), server_default="[]", nullable=False
25
+ )
26
+ )
27
+
28
+ # ### end Alembic commands ###
29
+
30
+
31
+ def downgrade() -> None:
32
+ # ### commands auto generated by Alembic - please adjust! ###
33
+ with op.batch_alter_table("usergroup", schema=None) as batch_op:
34
+ batch_op.drop_column("viewer_paths")
35
+
36
+ # ### end Alembic commands ###
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "fractal-server"
3
- version = "2.6.2"
3
+ version = "2.6.3"
4
4
  description = "Server component of the Fractal analytics platform"
5
5
  authors = [
6
6
  "Tommaso Comparin <tommaso.comparin@exact-lab.it>",
@@ -92,7 +92,7 @@ filterwarnings = [
92
92
  ]
93
93
 
94
94
  [tool.bumpver]
95
- current_version = "2.6.2"
95
+ current_version = "2.6.3"
96
96
  version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
97
97
  commit_message = "bump version {old_version} -> {new_version}"
98
98
  commit = true
@@ -1 +0,0 @@
1
- __VERSION__ = "2.6.2"
File without changes
File without changes