fractal-server 2.9.0a8__tar.gz → 2.9.0a9__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 (245) hide show
  1. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/PKG-INFO +1 -1
  2. fractal_server-2.9.0a9/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/auth/current_user.py +60 -17
  4. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/config.py +50 -3
  5. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/pyproject.toml +2 -2
  6. fractal_server-2.9.0a8/fractal_server/__init__.py +0 -1
  7. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/LICENSE +0 -0
  8. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/README.md +0 -0
  9. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/__main__.py +0 -0
  10. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/alembic.ini +0 -0
  11. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/__init__.py +0 -0
  12. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/db/__init__.py +0 -0
  13. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/__init__.py +0 -0
  14. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/linkusergroup.py +0 -0
  15. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/linkuserproject.py +0 -0
  16. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/security.py +0 -0
  17. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/user_settings.py +0 -0
  18. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v1/__init__.py +0 -0
  19. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v1/dataset.py +0 -0
  20. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v1/job.py +0 -0
  21. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v1/project.py +0 -0
  22. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v1/state.py +0 -0
  23. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v1/task.py +0 -0
  24. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v1/workflow.py +0 -0
  25. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v2/__init__.py +0 -0
  26. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v2/dataset.py +0 -0
  27. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v2/job.py +0 -0
  28. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v2/project.py +0 -0
  29. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v2/task.py +0 -0
  30. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v2/task_group.py +0 -0
  31. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v2/workflow.py +0 -0
  32. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/models/v2/workflowtask.py +0 -0
  33. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/__init__.py +0 -0
  34. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/admin/__init__.py +0 -0
  35. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/admin/v1.py +0 -0
  36. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
  37. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/admin/v2/job.py +0 -0
  38. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/admin/v2/project.py +0 -0
  39. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/admin/v2/task.py +0 -0
  40. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
  41. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
  42. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/__init__.py +0 -0
  43. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v1/__init__.py +0 -0
  44. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v1/_aux_functions.py +0 -0
  45. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v1/dataset.py +0 -0
  46. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v1/job.py +0 -0
  47. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v1/project.py +0 -0
  48. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v1/task.py +0 -0
  49. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v1/task_collection.py +0 -0
  50. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v1/workflow.py +0 -0
  51. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v1/workflowtask.py +0 -0
  52. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  53. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  54. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
  55. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
  56. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  57. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/images.py +0 -0
  58. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/job.py +0 -0
  59. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/project.py +0 -0
  60. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/status.py +0 -0
  61. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/submit.py +0 -0
  62. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/task.py +0 -0
  63. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  64. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  65. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/task_group.py +0 -0
  66. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
  67. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  68. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
  69. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  70. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/auth/__init__.py +0 -0
  71. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  72. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/auth/group.py +0 -0
  73. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/auth/login.py +0 -0
  74. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/auth/oauth.py +0 -0
  75. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/auth/register.py +0 -0
  76. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/auth/router.py +0 -0
  77. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/auth/users.py +0 -0
  78. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/aux/__init__.py +0 -0
  79. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/aux/_job.py +0 -0
  80. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/aux/_runner.py +0 -0
  81. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/routes/aux/validate_user_settings.py +0 -0
  82. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/.gitignore +0 -0
  83. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/__init__.py +0 -0
  84. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/async_wrap.py +0 -0
  85. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/components.py +0 -0
  86. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/compress_folder.py +0 -0
  87. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/exceptions.py +0 -0
  88. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/__init__.py +0 -0
  89. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/__init__.py +0 -0
  90. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/_batching.py +0 -0
  91. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/_slurm_config.py +0 -0
  92. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/remote.py +0 -0
  93. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/ssh/__init__.py +0 -0
  94. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/ssh/_executor_wait_thread.py +0 -0
  95. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/ssh/_slurm_job.py +0 -0
  96. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/ssh/executor.py +0 -0
  97. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/sudo/__init__.py +0 -0
  98. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/sudo/_check_jobs_status.py +0 -0
  99. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/sudo/_executor_wait_thread.py +0 -0
  100. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/sudo/_subprocess_run_as_user.py +0 -0
  101. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/executors/slurm/sudo/executor.py +0 -0
  102. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/extract_archive.py +0 -0
  103. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/filenames.py +0 -0
  104. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/run_subprocess.py +0 -0
  105. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  106. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/shutdown.py +0 -0
  107. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/task_files.py +0 -0
  108. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/__init__.py +0 -0
  109. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/_common.py +0 -0
  110. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/_local/__init__.py +0 -0
  111. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/_local/_local_config.py +0 -0
  112. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/_local/_submit_setup.py +0 -0
  113. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/_local/executor.py +0 -0
  114. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/_slurm/__init__.py +0 -0
  115. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -0
  116. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -0
  117. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/common.py +0 -0
  118. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v1/handle_failed_job.py +0 -0
  119. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/__init__.py +0 -0
  120. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_local/__init__.py +0 -0
  121. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_local/_local_config.py +0 -0
  122. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_local/_submit_setup.py +0 -0
  123. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_local/executor.py +0 -0
  124. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_local_experimental/__init__.py +0 -0
  125. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_local_experimental/_local_config.py +0 -0
  126. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_local_experimental/_submit_setup.py +0 -0
  127. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_local_experimental/executor.py +0 -0
  128. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_slurm_common/__init__.py +0 -0
  129. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_slurm_common/get_slurm_config.py +0 -0
  130. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_slurm_ssh/__init__.py +0 -0
  131. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_slurm_ssh/_submit_setup.py +0 -0
  132. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_slurm_sudo/__init__.py +0 -0
  133. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/_slurm_sudo/_submit_setup.py +0 -0
  134. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  135. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/handle_failed_job.py +0 -0
  136. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  137. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/runner.py +0 -0
  138. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/runner_functions.py +0 -0
  139. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
  140. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/v2/task_interface.py +0 -0
  141. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/runner/versions.py +0 -0
  142. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/__init__.py +0 -0
  143. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/_validators.py +0 -0
  144. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/user.py +0 -0
  145. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/user_group.py +0 -0
  146. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/user_settings.py +0 -0
  147. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v1/__init__.py +0 -0
  148. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v1/applyworkflow.py +0 -0
  149. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v1/dataset.py +0 -0
  150. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v1/dumps.py +0 -0
  151. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v1/manifest.py +0 -0
  152. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v1/project.py +0 -0
  153. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v1/state.py +0 -0
  154. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v1/task.py +0 -0
  155. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v1/task_collection.py +0 -0
  156. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v1/workflow.py +0 -0
  157. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/__init__.py +0 -0
  158. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/dataset.py +0 -0
  159. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/dumps.py +0 -0
  160. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/job.py +0 -0
  161. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/manifest.py +0 -0
  162. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/project.py +0 -0
  163. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/status.py +0 -0
  164. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/task.py +0 -0
  165. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  166. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/task_group.py +0 -0
  167. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/workflow.py +0 -0
  168. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  169. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/security/__init__.py +0 -0
  170. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/app/user_settings.py +0 -0
  171. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/data_migrations/README.md +0 -0
  172. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/data_migrations/tools.py +0 -0
  173. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/gunicorn_fractal.py +0 -0
  174. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/images/__init__.py +0 -0
  175. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/images/models.py +0 -0
  176. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/images/tools.py +0 -0
  177. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/logger.py +0 -0
  178. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/main.py +0 -0
  179. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/README +0 -0
  180. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/env.py +0 -0
  181. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/naming_convention.py +0 -0
  182. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/script.py.mako +0 -0
  183. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  184. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  185. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  186. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  187. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  188. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  189. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  190. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  191. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  192. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  193. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  194. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  195. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  196. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  197. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  198. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  199. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  200. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  201. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  202. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  203. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  204. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  205. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  206. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  207. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  208. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/py.typed +0 -0
  209. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/ssh/__init__.py +0 -0
  210. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/ssh/_fabric.py +0 -0
  211. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/string_tools.py +0 -0
  212. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/syringe.py +0 -0
  213. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/__init__.py +0 -0
  214. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/utils.py +0 -0
  215. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v1/_TaskCollectPip.py +0 -0
  216. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v1/__init__.py +0 -0
  217. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v1/background_operations.py +0 -0
  218. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v1/endpoint_operations.py +0 -0
  219. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v1/get_collection_data.py +0 -0
  220. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v1/utils.py +0 -0
  221. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/__init__.py +0 -0
  222. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/local/__init__.py +0 -0
  223. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/local/_utils.py +0 -0
  224. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/local/collect.py +0 -0
  225. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/local/deactivate.py +0 -0
  226. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/local/reactivate.py +0 -0
  227. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  228. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  229. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/ssh/collect.py +0 -0
  230. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
  231. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
  232. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  233. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  234. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  235. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  236. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
  237. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
  238. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/utils_background.py +0 -0
  239. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/utils_database.py +0 -0
  240. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  241. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  242. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/tasks/v2/utils_templates.py +0 -0
  243. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/urls.py +0 -0
  244. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/fractal_server/utils.py +0 -0
  245. {fractal_server-2.9.0a8 → fractal_server-2.9.0a9}/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.9.0a8
3
+ Version: 2.9.0a9
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.9.0a9"
@@ -1,6 +1,8 @@
1
1
  """
2
2
  Definition of `/auth/current-user/` endpoints
3
3
  """
4
+ import os
5
+
4
6
  from fastapi import APIRouter
5
7
  from fastapi import Depends
6
8
  from fastapi_users import schemas
@@ -22,6 +24,8 @@ from fractal_server.app.schemas import UserSettingsReadStrict
22
24
  from fractal_server.app.schemas import UserSettingsUpdateStrict
23
25
  from fractal_server.app.security import get_user_manager
24
26
  from fractal_server.app.security import UserManager
27
+ from fractal_server.config import get_settings
28
+ from fractal_server.syringe import Inject
25
29
 
26
30
  router_current_user = APIRouter()
27
31
 
@@ -109,26 +113,65 @@ async def patch_current_user_settings(
109
113
 
110
114
 
111
115
  @router_current_user.get(
112
- "/current-user/viewer-paths/", response_model=list[str]
116
+ "/current-user/allowed-viewer-paths/", response_model=list[str]
113
117
  )
114
- async def get_current_user_viewer_paths(
118
+ async def get_current_user_allowed_viewer_paths(
115
119
  current_user: UserOAuth = Depends(current_active_user),
116
120
  db: AsyncSession = Depends(get_async_db),
117
121
  ) -> 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()
122
+ """
123
+ Returns the allowed viewer paths for current user, according to the
124
+ selected FRACTAL_VIEWER_AUTHORIZATION_SCHEME
125
+ """
127
126
 
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)
127
+ settings = Inject(get_settings)
128
+
129
+ if settings.FRACTAL_VIEWER_AUTHORIZATION_SCHEME == "none":
130
+ return []
133
131
 
134
- return all_viewer_paths
132
+ authorized_paths = []
133
+
134
+ # Respond with 422 error if user has no settings
135
+ verify_user_has_settings(current_user)
136
+
137
+ # Load current user settings
138
+ current_user_settings = await db.get(
139
+ UserSettings, current_user.user_settings_id
140
+ )
141
+ # If project_dir is set, append it to the list of authorized paths
142
+ if current_user_settings.project_dir is not None:
143
+ authorized_paths.append(current_user_settings.project_dir)
144
+
145
+ # If auth scheme is "users-folders" and `slurm_user` is set,
146
+ # build and append the user folder
147
+ if (
148
+ settings.FRACTAL_VIEWER_AUTHORIZATION_SCHEME == "users-folders"
149
+ and current_user_settings.slurm_user is not None
150
+ ):
151
+ base_folder = settings.FRACTAL_VIEWER_BASE_FOLDER
152
+ user_folder = os.path.join(
153
+ base_folder, current_user_settings.slurm_user
154
+ )
155
+ authorized_paths.append(user_folder)
156
+
157
+ if settings.FRACTAL_VIEWER_AUTHORIZATION_SCHEME == "viewer-paths":
158
+ # Returns the union of `viewer_paths` for all user's groups
159
+ cmd = (
160
+ select(UserGroup.viewer_paths)
161
+ .join(LinkUserGroup)
162
+ .where(LinkUserGroup.group_id == UserGroup.id)
163
+ .where(LinkUserGroup.user_id == current_user.id)
164
+ )
165
+ res = await db.execute(cmd)
166
+ viewer_paths_nested = res.scalars().all()
167
+
168
+ # Flatten a nested object and make its elements unique
169
+ all_viewer_paths_set = set(
170
+ path
171
+ for _viewer_paths in viewer_paths_nested
172
+ for path in _viewer_paths
173
+ )
174
+
175
+ authorized_paths.extend(all_viewer_paths_set)
176
+
177
+ return authorized_paths
@@ -87,7 +87,7 @@ class Settings(BaseSettings):
87
87
  """
88
88
  Contains all the configuration variables for Fractal Server
89
89
 
90
- The attributes of this class are set from the environtment.
90
+ The attributes of this class are set from the environment.
91
91
  """
92
92
 
93
93
  class Config:
@@ -383,7 +383,7 @@ class Settings(BaseSettings):
383
383
  @root_validator(pre=True)
384
384
  def check_tasks_python(cls, values) -> None:
385
385
  """
386
- Perform multiple checks of the Python-intepreter variables.
386
+ Perform multiple checks of the Python-interpreter variables.
387
387
 
388
388
  1. Each `FRACTAL_TASKS_PYTHON_X_Y` variable must be an absolute path,
389
389
  if set.
@@ -432,7 +432,7 @@ class Settings(BaseSettings):
432
432
  f"{current_version_dot}"
433
433
  )
434
434
 
435
- # Unset all existing intepreters variable
435
+ # Unset all existing interpreters variable
436
436
  for _version in ["3_9", "3_10", "3_11", "3_12"]:
437
437
  key = f"FRACTAL_TASKS_PYTHON_{_version}"
438
438
  if _version == current_version:
@@ -498,6 +498,36 @@ class Settings(BaseSettings):
498
498
  Maximum value at which to update `pip` before performing task collection.
499
499
  """
500
500
 
501
+ FRACTAL_VIEWER_AUTHORIZATION_SCHEME: Literal[
502
+ "viewer-paths", "users-folders", "none"
503
+ ] = "none"
504
+ """
505
+ Defines how the list of allowed viewer paths is built.
506
+
507
+ This variable affects the `GET /auth/current-user/allowed-viewer-paths/`
508
+ response, which is then consumed by
509
+ [fractal-vizarr-viewer](https://github.com/fractal-analytics-platform/fractal-vizarr-viewer).
510
+
511
+ Options:
512
+
513
+ - "viewer-paths": The list of allowed viewer paths will include the user's
514
+ `project_dir` along with any path defined in user groups' `viewer_paths`
515
+ attributes.
516
+ - "users-folders": The list will consist of the user's `project_dir` and a
517
+ user-specific folder. The user folder is constructed by concatenating
518
+ the base folder `FRACTAL_VIEWER_BASE_FOLDER` with the user's
519
+ `slurm_user`.
520
+ - "none": An empty list will be returned, indicating no access to
521
+ viewer paths. Useful when vizarr viewer is not used.
522
+ """
523
+
524
+ FRACTAL_VIEWER_BASE_FOLDER: Optional[str] = None
525
+ """
526
+ Base path to Zarr files that will be served by fractal-vizarr-viewer;
527
+ This variable is required and used only when
528
+ FRACTAL_VIEWER_AUTHORIZATION_SCHEME is set to "users-folders".
529
+ """
530
+
501
531
  ###########################################################################
502
532
  # BUSINESS LOGIC
503
533
  ###########################################################################
@@ -589,6 +619,23 @@ class Settings(BaseSettings):
589
619
  if not self.FRACTAL_TASKS_DIR:
590
620
  raise FractalConfigurationError("FRACTAL_TASKS_DIR cannot be None")
591
621
 
622
+ # FRACTAL_VIEWER_BASE_FOLDER is required when
623
+ # FRACTAL_VIEWER_AUTHORIZATION_SCHEME is set to "users-folders"
624
+ # and it must be an absolute path
625
+ if self.FRACTAL_VIEWER_AUTHORIZATION_SCHEME == "users-folders":
626
+ viewer_base_folder = self.FRACTAL_VIEWER_BASE_FOLDER
627
+ if viewer_base_folder is None:
628
+ raise FractalConfigurationError(
629
+ "FRACTAL_VIEWER_BASE_FOLDER is required when "
630
+ "FRACTAL_VIEWER_AUTHORIZATION_SCHEME is set to "
631
+ "users-folders"
632
+ )
633
+ if not Path(viewer_base_folder).is_absolute():
634
+ raise FractalConfigurationError(
635
+ f"Non-absolute value for "
636
+ f"FRACTAL_VIEWER_BASE_FOLDER={viewer_base_folder}"
637
+ )
638
+
592
639
  self.check_db()
593
640
  self.check_runner()
594
641
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "fractal-server"
3
- version = "2.9.0a8"
3
+ version = "2.9.0a9"
4
4
  description = "Server component of the Fractal analytics platform"
5
5
  authors = [
6
6
  "Tommaso Comparin <tommaso.comparin@exact-lab.it>",
@@ -86,7 +86,7 @@ filterwarnings = [
86
86
  ]
87
87
 
88
88
  [tool.bumpver]
89
- current_version = "2.9.0a8"
89
+ current_version = "2.9.0a9"
90
90
  version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
91
91
  commit_message = "bump version {old_version} -> {new_version}"
92
92
  commit = true
@@ -1 +0,0 @@
1
- __VERSION__ = "2.9.0a8"