fractal-server 2.18.3a0__tar.gz → 2.18.3a2__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 (275) hide show
  1. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/PKG-INFO +21 -28
  2. fractal_server-2.18.3a2/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/job.py +9 -0
  4. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/auth/oauth.py +27 -1
  5. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/config/_oauth.py +6 -0
  6. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/call_command_wrapper.py +13 -0
  7. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/pyproject.toml +44 -47
  8. fractal_server-2.18.3a0/LICENSE +0 -29
  9. fractal_server-2.18.3a0/fractal_server/__init__.py +0 -1
  10. fractal_server-2.18.3a0/fractal_server/data_migrations/README.md +0 -6
  11. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/README.md +0 -0
  12. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/__main__.py +0 -0
  13. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/alembic.ini +0 -0
  14. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/__init__.py +0 -0
  15. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/db/__init__.py +0 -0
  16. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/__init__.py +0 -0
  17. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/linkusergroup.py +0 -0
  18. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/linkuserproject.py +0 -0
  19. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/security.py +0 -0
  20. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/__init__.py +0 -0
  21. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/accounting.py +0 -0
  22. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/dataset.py +0 -0
  23. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/history.py +0 -0
  24. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/job.py +0 -0
  25. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/profile.py +0 -0
  26. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/project.py +0 -0
  27. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/resource.py +0 -0
  28. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/task.py +0 -0
  29. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/task_group.py +0 -0
  30. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/workflow.py +0 -0
  31. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/models/v2/workflowtask.py +0 -0
  32. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/__init__.py +0 -0
  33. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/__init__.py +0 -0
  34. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
  35. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/_aux_functions.py +0 -0
  36. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
  37. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
  38. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/profile.py +0 -0
  39. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/resource.py +0 -0
  40. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/sharing.py +0 -0
  41. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/task.py +0 -0
  42. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
  43. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
  44. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/__init__.py +0 -0
  45. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  46. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  47. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
  48. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/_aux_functions_sharing.py +0 -0
  49. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
  50. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py +0 -0
  51. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
  52. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py +0 -0
  53. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  54. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/history.py +0 -0
  55. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/images.py +0 -0
  56. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/job.py +0 -0
  57. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/pre_submission_checks.py +0 -0
  58. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/project.py +0 -0
  59. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/sharing.py +0 -0
  60. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/status_legacy.py +0 -0
  61. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/submit.py +0 -0
  62. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/task.py +0 -0
  63. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  64. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
  65. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/task_collection_pixi.py +0 -0
  66. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/task_group.py +0 -0
  67. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
  68. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/task_version_update.py +0 -0
  69. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  70. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
  71. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  72. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/auth/__init__.py +0 -0
  73. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
  74. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/auth/current_user.py +0 -0
  75. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/auth/group.py +0 -0
  76. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/auth/login.py +0 -0
  77. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/auth/register.py +0 -0
  78. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/auth/router.py +0 -0
  79. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/auth/users.py +0 -0
  80. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/auth/viewer_paths.py +0 -0
  81. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/aux/__init__.py +0 -0
  82. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/aux/_job.py +0 -0
  83. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/aux/_runner.py +0 -0
  84. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/aux/validate_user_profile.py +0 -0
  85. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/routes/pagination.py +0 -0
  86. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/__init__.py +0 -0
  87. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/user.py +0 -0
  88. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/user_group.py +0 -0
  89. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/__init__.py +0 -0
  90. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/accounting.py +0 -0
  91. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/dataset.py +0 -0
  92. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/dumps.py +0 -0
  93. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/history.py +0 -0
  94. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/job.py +0 -0
  95. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/manifest.py +0 -0
  96. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/profile.py +0 -0
  97. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/project.py +0 -0
  98. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/resource.py +0 -0
  99. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/sharing.py +0 -0
  100. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/status_legacy.py +0 -0
  101. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/task.py +0 -0
  102. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  103. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/task_group.py +0 -0
  104. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/workflow.py +0 -0
  105. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  106. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/security/__init__.py +0 -0
  107. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/security/signup_email.py +0 -0
  108. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/app/shutdown.py +0 -0
  109. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/config/__init__.py +0 -0
  110. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/config/_data.py +0 -0
  111. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/config/_database.py +0 -0
  112. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/config/_email.py +0 -0
  113. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/config/_main.py +0 -0
  114. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/config/_settings_config.py +0 -0
  115. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/data_migrations/tools.py +0 -0
  116. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/exceptions.py +0 -0
  117. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/gunicorn_fractal.py +0 -0
  118. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/images/__init__.py +0 -0
  119. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/images/models.py +0 -0
  120. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/images/status_tools.py +0 -0
  121. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/images/tools.py +0 -0
  122. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/logger.py +0 -0
  123. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/main.py +0 -0
  124. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/env.py +0 -0
  125. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/naming_convention.py +0 -0
  126. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
  127. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/068496367952_drop_taskgroup_venv_size_and_files_.py +0 -0
  128. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
  129. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/0f5f85bb2ae7_add_pre_pinned_packages.py +0 -0
  130. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
  131. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/1a83a5260664_rename.py +0 -0
  132. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
  133. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
  134. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/40d6d6511b20_add_index_to_history_models.py +0 -0
  135. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/45fbb391d7af_make_resource_id_fk_non_nullable.py +0 -0
  136. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
  137. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/49d0856e9569_drop_table.py +0 -0
  138. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  139. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  140. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
  141. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  142. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  143. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  144. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  145. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/7673fe18c05d_remove_project_dir_server_default.py +0 -0
  146. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/7910eed4cf97_user_project_dirs_and_usergroup_viewer_.py +0 -0
  147. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/791ce783d3d8_add_indices.py +0 -0
  148. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py +0 -0
  149. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  150. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/88270f589c9b_add_prevent_new_submissions.py +0 -0
  151. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
  152. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  153. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
  154. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/969d84257cac_add_historyrun_task_id.py +0 -0
  155. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  156. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/981d588fe248_add_executor_error_log.py +0 -0
  157. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  158. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
  159. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +0 -0
  160. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  161. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  162. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
  163. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
  164. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py +0 -0
  165. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/b3ffb095f973_json_to_jsonb.py +0 -0
  166. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/b7477cc98f45_2_18_1.py +0 -0
  167. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/bc0e8b3327a7_project_sharing.py +0 -0
  168. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +0 -0
  169. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/caba9fb1ea5e_drop_useroauth_user_settings_id.py +0 -0
  170. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
  171. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  172. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
  173. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
  174. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/e0e717ae2f26_delete_linkuserproject_ondelete_project.py +0 -0
  175. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  176. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
  177. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  178. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/f0702066b007_one_submitted_job_per_dataset.py +0 -0
  179. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +0 -0
  180. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  181. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
  182. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/py.typed +0 -0
  183. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/__init__.py +0 -0
  184. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/components.py +0 -0
  185. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/config/__init__.py +0 -0
  186. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/config/_local.py +0 -0
  187. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/config/_slurm.py +0 -0
  188. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/config/slurm_mem_to_MB.py +0 -0
  189. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/exceptions.py +0 -0
  190. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/__init__.py +0 -0
  191. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/base_runner.py +0 -0
  192. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/local/__init__.py +0 -0
  193. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/local/get_local_config.py +0 -0
  194. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/local/runner.py +0 -0
  195. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_common/__init__.py +0 -0
  196. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_common/_batching.py +0 -0
  197. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_common/_job_states.py +0 -0
  198. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_common/base_slurm_runner.py +0 -0
  199. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_common/get_slurm_config.py +0 -0
  200. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_common/remote.py +0 -0
  201. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_common/slurm_config.py +0 -0
  202. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_common/slurm_job_task_models.py +0 -0
  203. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_ssh/__init__.py +0 -0
  204. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_ssh/run_subprocess.py +0 -0
  205. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_ssh/runner.py +0 -0
  206. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_ssh/tar_commands.py +0 -0
  207. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_sudo/__init__.py +0 -0
  208. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
  209. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/executors/slurm_sudo/runner.py +0 -0
  210. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/filenames.py +0 -0
  211. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/set_start_and_last_task_index.py +0 -0
  212. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/task_files.py +0 -0
  213. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/__init__.py +0 -0
  214. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/_local.py +0 -0
  215. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/_slurm_ssh.py +0 -0
  216. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/_slurm_sudo.py +0 -0
  217. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/db_tools.py +0 -0
  218. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/deduplicate_list.py +0 -0
  219. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/merge_outputs.py +0 -0
  220. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/runner.py +0 -0
  221. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/runner_functions.py +0 -0
  222. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/submit_workflow.py +0 -0
  223. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/v2/task_interface.py +0 -0
  224. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/runner/versions.py +0 -0
  225. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/ssh/__init__.py +0 -0
  226. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/ssh/_fabric.py +0 -0
  227. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/string_tools.py +0 -0
  228. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/syringe.py +0 -0
  229. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/__init__.py +0 -0
  230. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/config/__init__.py +0 -0
  231. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/config/_pixi.py +0 -0
  232. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/config/_python.py +0 -0
  233. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/utils.py +0 -0
  234. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/__init__.py +0 -0
  235. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/local/__init__.py +0 -0
  236. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/local/_utils.py +0 -0
  237. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/local/collect.py +0 -0
  238. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/local/collect_pixi.py +0 -0
  239. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/local/deactivate.py +0 -0
  240. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/local/deactivate_pixi.py +0 -0
  241. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/local/delete.py +0 -0
  242. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/local/reactivate.py +0 -0
  243. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/local/reactivate_pixi.py +0 -0
  244. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
  245. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py +0 -0
  246. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
  247. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/ssh/collect.py +0 -0
  248. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/ssh/collect_pixi.py +0 -0
  249. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
  250. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/ssh/deactivate_pixi.py +0 -0
  251. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/ssh/delete.py +0 -0
  252. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
  253. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/ssh/reactivate_pixi.py +0 -0
  254. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
  255. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
  256. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
  257. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
  258. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/templates/5_pip_install_from_freeze.sh +0 -0
  259. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/templates/pixi_1_extract.sh +0 -0
  260. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/templates/pixi_2_install.sh +0 -0
  261. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/templates/pixi_3_post_install.sh +0 -0
  262. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/utils_background.py +0 -0
  263. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/utils_database.py +0 -0
  264. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/utils_package_names.py +0 -0
  265. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/utils_pixi.py +0 -0
  266. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
  267. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/tasks/v2/utils_templates.py +0 -0
  268. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/types/__init__.py +0 -0
  269. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/types/validators/__init__.py +0 -0
  270. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/types/validators/_common_validators.py +0 -0
  271. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/types/validators/_filter_validators.py +0 -0
  272. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/types/validators/_workflow_task_arguments_validators.py +0 -0
  273. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/urls.py +0 -0
  274. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/utils.py +0 -0
  275. {fractal_server-2.18.3a0 → fractal_server-2.18.3a2}/fractal_server/zip_tools.py +0 -0
@@ -1,35 +1,29 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fractal-server
3
- Version: 2.18.3a0
3
+ Version: 2.18.3a2
4
4
  Summary: Backend component of the Fractal analytics platform
5
+ Author: Tommaso Comparin, Marco Franzon, Yuri Chiucconi, Jacopo Nespolo
6
+ Author-email: Tommaso Comparin <tommaso.comparin@exact-lab.it>, Marco Franzon <marco.franzon@exact-lab.it>, Yuri Chiucconi <yuri.chiucconi@exact-lab.it>, Jacopo Nespolo <jacopo.nespolo@exact-lab.it>
5
7
  License-Expression: BSD-3-Clause
6
- License-File: LICENSE
7
- Author: Tommaso Comparin
8
- Author-email: tommaso.comparin@exact-lab.it
9
- Requires-Python: >=3.11,<3.15
10
- Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.11
12
- Classifier: Programming Language :: Python :: 3.12
13
- Classifier: Programming Language :: Python :: 3.13
14
- Classifier: Programming Language :: Python :: 3.14
15
- Requires-Dist: alembic (>=1.13.1,<2.0.0)
16
- Requires-Dist: fabric (>=3.2.2,<3.3.0)
17
- Requires-Dist: fastapi (>=0.120.0,<0.121.0)
18
- Requires-Dist: fastapi-users[oauth] (>=15,<16)
19
- Requires-Dist: gunicorn (>=23.0,<24.0)
20
- Requires-Dist: packaging (>=25.0.0,<26.0.0)
21
- Requires-Dist: psycopg[binary] (>=3.1.0,<4.0.0)
22
- Requires-Dist: pydantic (>=2.12.0,<2.13.0)
23
- Requires-Dist: pydantic-settings (==2.11.0)
24
- Requires-Dist: sqlalchemy[asyncio] (>=2.0.23,<2.1)
25
- Requires-Dist: sqlmodel (==0.0.27)
26
- Requires-Dist: tomli_w (>=1.2.0,<1.3.0)
27
- Requires-Dist: uvicorn (>=0.38.0,<0.39.0)
28
- Requires-Dist: uvicorn-worker (==0.4.0)
29
- Project-URL: Documentation, https://fractal-analytics-platform.github.io/fractal-server
30
- Project-URL: Homepage, https://github.com/fractal-analytics-platform/fractal-server
31
- Project-URL: Repository, https://github.com/fractal-analytics-platform/fractal-server
8
+ Requires-Dist: fastapi>=0.120.0,<0.121.0
9
+ Requires-Dist: sqlmodel==0.0.27
10
+ Requires-Dist: sqlalchemy[asyncio]>=2.0.23,<2.1
11
+ Requires-Dist: fastapi-users[oauth]>=15,<16
12
+ Requires-Dist: alembic>=1.13.1,<2.0.0
13
+ Requires-Dist: uvicorn>=0.38.0,<0.39.0
14
+ Requires-Dist: uvicorn-worker==0.4.0
15
+ Requires-Dist: pydantic>=2.12.0,<2.13.0
16
+ Requires-Dist: pydantic-settings==2.11.0
17
+ Requires-Dist: packaging>=25.0.0,<26.0.0
18
+ Requires-Dist: fabric>=3.2.2,<3.3.0
19
+ Requires-Dist: gunicorn>=23.0,<24.0
20
+ Requires-Dist: psycopg[binary]>=3.1.0,<4.0.0
21
+ Requires-Dist: tomli-w>=1.2.0,<1.3.0
22
+ Requires-Python: >=3.11, <3.15
32
23
  Project-URL: changelog, https://github.com/fractal-analytics-platform/fractal-server/blob/main/CHANGELOG.md
24
+ Project-URL: documentation, https://fractal-analytics-platform.github.io/fractal-server
25
+ Project-URL: homepage, https://github.com/fractal-analytics-platform/fractal-server
26
+ Project-URL: repository, https://github.com/fractal-analytics-platform/fractal-server
33
27
  Description-Content-Type: text/markdown
34
28
 
35
29
  # Fractal Server
@@ -63,4 +57,3 @@ See https://fractal-analytics-platform.github.io/fractal-server.
63
57
  Fractal was conceived in the Liberali Lab at the Friedrich Miescher Institute for Biomedical Research and in the Pelkmans Lab at the University of Zurich by [@jluethi](https://github.com/jluethi) and [@gusqgm](https://github.com/gusqgm). The Fractal project is now developed at the [BioVisionCenter](https://www.biovisioncenter.uzh.ch/en.html) at the University of Zurich and the project lead is with [@jluethi](https://github.com/jluethi). The core development is done under contract by [eXact lab S.r.l.](https://www.exact-lab.it).
64
58
 
65
59
  Unless otherwise specified, Fractal components are released under the BSD 3-Clause License, and copyright is with the BioVisionCenter at the University of Zurich.
66
-
@@ -0,0 +1 @@
1
+ __VERSION__ = "2.18.3a2"
@@ -17,6 +17,7 @@ from fractal_server.app.models import UserOAuth
17
17
  from fractal_server.app.models.v2 import HistoryRun
18
18
  from fractal_server.app.models.v2 import HistoryUnit
19
19
  from fractal_server.app.models.v2 import JobV2
20
+ from fractal_server.app.models.v2.project import ProjectV2
20
21
  from fractal_server.app.routes.auth import current_superuser_act
21
22
  from fractal_server.app.routes.aux._job import _write_shutdown_file
22
23
  from fractal_server.app.routes.aux._runner import _check_shutdown_is_supported
@@ -37,6 +38,7 @@ router = APIRouter()
37
38
  @router.get("/", response_model=PaginationResponse[JobRead])
38
39
  async def view_job(
39
40
  id: int | None = None,
41
+ resource_id: int | None = None,
40
42
  user_id: int | None = None,
41
43
  project_id: int | None = None,
42
44
  dataset_id: int | None = None,
@@ -84,6 +86,13 @@ async def view_job(
84
86
  if id is not None:
85
87
  stm = stm.where(JobV2.id == id)
86
88
  stm_count = stm_count.where(JobV2.id == id)
89
+ if resource_id is not None:
90
+ stm = stm.join(ProjectV2, ProjectV2.id == JobV2.project_id).where(
91
+ ProjectV2.resource_id == resource_id
92
+ )
93
+ stm_count = stm_count.join(
94
+ ProjectV2, ProjectV2.id == JobV2.project_id
95
+ ).where(ProjectV2.resource_id == resource_id)
87
96
  if user_id is not None:
88
97
  stm = (
89
98
  stm.join(
@@ -3,6 +3,8 @@ from httpx_oauth.clients.github import GitHubOAuth2
3
3
  from httpx_oauth.clients.google import GoogleOAuth2
4
4
  from httpx_oauth.clients.openid import OpenID
5
5
  from httpx_oauth.clients.openid import OpenIDConfigurationError
6
+ from httpx_oauth.exceptions import GetIdEmailError
7
+ from httpx_oauth.exceptions import GetProfileError
6
8
 
7
9
  from fractal_server.config import OAuthSettings
8
10
  from fractal_server.config import get_oauth_settings
@@ -13,6 +15,29 @@ from . import cookie_backend
13
15
  from . import fastapi_users
14
16
 
15
17
 
18
+ class FractalOpenID(OpenID):
19
+ """
20
+ Subclass of `httpx_oauth.clients.openid.OpenID` with customizable name for
21
+ the `"email"` claim.
22
+ """
23
+
24
+ def __init__(self, *, email_claim: str, **kwargs):
25
+ super().__init__(**kwargs)
26
+ self.email_claim = email_claim
27
+
28
+ # TODO-requires-py312: add `@override` decorator
29
+ async def get_id_email(self, token: str) -> tuple[str, str | None]:
30
+ """
31
+ Identical to the parent-class method (httpx-oauth version 0.16.1),
32
+ apart from making `"email"` configurable.
33
+ """
34
+ try:
35
+ profile = await self.get_profile(token)
36
+ except GetProfileError as e:
37
+ raise GetIdEmailError(response=e.response) from e
38
+ return str(profile["sub"]), profile.get(self.email_claim)
39
+
40
+
16
41
  def _create_client_github(cfg: OAuthSettings) -> GitHubOAuth2:
17
42
  return GitHubOAuth2(
18
43
  client_id=cfg.OAUTH_CLIENT_ID.get_secret_value(),
@@ -29,10 +54,11 @@ def _create_client_google(cfg: OAuthSettings) -> GoogleOAuth2:
29
54
 
30
55
  def _create_client_oidc(cfg: OAuthSettings) -> OpenID:
31
56
  try:
32
- open_id = OpenID(
57
+ open_id = FractalOpenID(
33
58
  client_id=cfg.OAUTH_CLIENT_ID.get_secret_value(),
34
59
  client_secret=cfg.OAUTH_CLIENT_SECRET.get_secret_value(),
35
60
  openid_configuration_endpoint=cfg.OAUTH_OIDC_CONFIG_ENDPOINT.get_secret_value(), # noqa
61
+ email_claim=cfg.OAUTH_EMAIL_CLAIM,
36
62
  )
37
63
  except OpenIDConfigurationError as e:
38
64
  OAUTH_OIDC_CONFIG_ENDPOINT = (
@@ -28,6 +28,11 @@ class OAuthSettings(BaseSettings):
28
28
  String to be used as `redirect_url` argument in
29
29
  `fastapi_users.get_oauth_router`, and then in
30
30
  `httpx_oauth.integrations.fastapi.OAuth2AuthorizeCallback`.
31
+ OAUTH_EMAIL_CLAIM:
32
+ Name of the OIDC claim with the user's email address. This is
33
+ `"email"` by default, but can be customized (e.g. to `"mail"`) to
34
+ fit with the response from the userinfo endpoint - see
35
+ https://openid.net/specs/openid-connect-core-1_0.html#UserInfoResponse
31
36
  """
32
37
 
33
38
  model_config = SettingsConfigDict(**SETTINGS_CONFIG_DICT)
@@ -43,6 +48,7 @@ class OAuthSettings(BaseSettings):
43
48
  OAUTH_CLIENT_SECRET: SecretStr | None = None
44
49
  OAUTH_OIDC_CONFIG_ENDPOINT: SecretStr | None = None
45
50
  OAUTH_REDIRECT_URL: str | None = None
51
+ OAUTH_EMAIL_CLAIM: str = "email"
46
52
 
47
53
  @model_validator(mode="after")
48
54
  def check_configuration(self: Self) -> Self:
@@ -6,6 +6,18 @@ import subprocess # nosec
6
6
  from fractal_server.runner.exceptions import TaskExecutionError
7
7
  from fractal_server.string_tools import validate_cmd
8
8
 
9
+ MAX_LEN_STDERR = 100_000
10
+
11
+
12
+ def placeholder_if_too_long(stderr: str) -> str:
13
+ """Returns a placeholder if the string is too long"""
14
+ if len(stderr) > MAX_LEN_STDERR:
15
+ return (
16
+ f"Cannot display stderr of length {len(stderr)}. You can find the "
17
+ "detailed logs by downloading the job-log folder."
18
+ )
19
+ return stderr
20
+
9
21
 
10
22
  def call_command_wrapper(*, cmd: str, log_path: str) -> None:
11
23
  """
@@ -46,6 +58,7 @@ def call_command_wrapper(*, cmd: str, log_path: str) -> None:
46
58
  if os.path.isfile(log_path):
47
59
  with open(log_path) as fp_stderr:
48
60
  stderr = fp_stderr.read()
61
+ stderr = placeholder_if_too_long(stderr)
49
62
  raise TaskExecutionError(
50
63
  f"Task failed with returncode={result.returncode}.\n"
51
64
  f"STDERR: {stderr}"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "fractal-server"
3
- version = "2.18.3a0"
3
+ version = "2.18.3a2"
4
4
  description = "Backend component of the Fractal analytics platform"
5
5
  authors = [
6
6
  { name="Tommaso Comparin", email="tommaso.comparin@exact-lab.it" },
@@ -37,54 +37,51 @@ changelog = "https://github.com/fractal-analytics-platform/fractal-server/blob/m
37
37
  [project.scripts]
38
38
  fractalctl = "fractal_server.__main__:run"
39
39
 
40
- [build-system]
41
- requires = ["poetry-core"]
42
- build-backend = "poetry.core.masonry.api"
43
-
44
- [tool.poetry]
45
- requires-poetry = ">=2.0"
46
- packages = [
47
- {include="fractal_server"}
40
+ [dependency-groups]
41
+ dev = [
42
+ "asgi-lifespan >2.0.0,<3.0.0",
43
+ "pytest>=8.4.0,<8.5.0",
44
+ "pytest-env >=1.1.5,<1.2.0",
45
+ "httpx >=0.28.0,<0.29.0",
46
+ "devtools ==0.12",
47
+ "pytest-asyncio >= 1.2.0,<1.3.0",
48
+ "bumpver >=2024.0",
49
+ "pre-commit ==4.2.0",
50
+ "coverage[toml]>=7.12.0,<7.13.0",
51
+ "pytest-docker >=3.2.0,<3.3.0",
52
+ "mypy >= 1.9",
53
+ "pytest-subprocess >=1.5.0,<1.6.0",
54
+ "a2wsgi >=1.10.0,<1.11.0",
55
+ "jinja2 >=3.1.3,<3.1.4",
56
+ "pyyaml>=6.0.0"
48
57
  ]
49
- exclude = [
50
- "fractal_server/data_migrations/old",
51
- "fractal_server/json_schemas",
52
- "fractal_server/migrations/script.py.mako",
58
+
59
+ docs = [
60
+ "mkdocs==1.6.1",
61
+ "mkdocstrings[python]==0.30.1",
62
+ "mkdocs-material==9.7.0",
63
+ "mkdocs-gen-files==0.5.0",
64
+ "mkdocs-literate-nav==0.6.2",
65
+ "mkdocs-section-index==0.3.10",
66
+ "mkdocs-include-markdown-plugin==7.2.0",
67
+ "mkdocs-render-swagger-plugin==0.1.2",
68
+ "pyyaml>=6.0.0",
69
+ "click == 8.2.1"
53
70
  ]
54
71
 
55
- [tool.poetry.group.dev]
56
- optional = true
57
-
58
- [tool.poetry.group.dev.dependencies]
59
- asgi-lifespan = "^2"
60
- pytest = "8.4.*"
61
- pytest-env = ">=1.1.5,<1.2.0"
62
- httpx = ">=0.28.0,<0.29.0"
63
- devtools = "^0.12"
64
- pytest-asyncio = "1.2.*"
65
- bumpver = ">=2024.0"
66
- pre-commit = "4.2.0"
67
- coverage = {extras = ["toml"], version = "7.5.*"}
68
- pytest-docker = {version = "3.2.*"}
69
- mypy = "^1.9"
70
- pytest-subprocess = "1.5.*"
71
- a2wsgi = "^1.10.0"
72
- jinja2 = "^3.1.3"
73
- pyyaml=">=6.0.0"
74
-
75
- [tool.poetry.group.docs]
76
- optional = true
77
-
78
- [tool.poetry.group.docs.dependencies]
79
- mkdocs="1.6.1"
80
- mkdocstrings = { extras = ["python"], version = "0.30.1" }
81
- mkdocs-material="9.7.0"
82
- mkdocs-gen-files="0.5.0"
83
- mkdocs-literate-nav="0.6.2"
84
- mkdocs-section-index="0.3.10"
85
- mkdocs-render-swagger-plugin="0.1.2"
86
- pyyaml=">=6.0.0"
87
- click = "8.2.1"
72
+
73
+ [build-system]
74
+ requires = ["uv_build>=0.9.18,<0.10.0"]
75
+ build-backend = "uv_build"
76
+
77
+ # See https://docs.astral.sh/uv/concepts/build-backend/#file-inclusion-and-exclusion
78
+ [tool.uv.build-backend]
79
+ module-name = "fractal_server"
80
+ module-root = ""
81
+ source-exclude = ["tmp*", "fractal_server/data_migrations/old", "fractal_server/data_migrations/README.md", "fractal_server/json_schemas", "fractal_server/migrations/script.py.mako"]
82
+ wheel-exclude = ["tmp*", "fractal_server/data_migrations/old", "fractal_server/data_migrations/README.md", "fractal_server/json_schemas", "fractal_server/migrations/script.py.mako"]
83
+
84
+
88
85
 
89
86
  [tool.pytest.ini_options]
90
87
  asyncio_mode = "auto"
@@ -95,7 +92,7 @@ filterwarnings = [
95
92
  markers = ["container", "ssh", "fails_on_macos", "oauth"]
96
93
 
97
94
  [tool.bumpver]
98
- current_version = "2.18.3a0"
95
+ current_version = "2.18.3a2"
99
96
  version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
100
97
  commit_message = "bump version {old_version} -> {new_version}"
101
98
  commit = true
@@ -1,29 +0,0 @@
1
- BSD 3-Clause License
2
-
3
- Copyright 2022 (C) Friedrich Miescher Institute for Biomedical Research and University of Zurich
4
- All rights reserved.
5
-
6
- Redistribution and use in source and binary forms, with or without
7
- modification, are permitted provided that the following conditions are met:
8
-
9
- * Redistributions of source code must retain the above copyright notice, this
10
- list of conditions and the following disclaimer.
11
-
12
- * Redistributions in binary form must reproduce the above copyright notice,
13
- this list of conditions and the following disclaimer in the documentation
14
- and/or other materials provided with the distribution.
15
-
16
- * Neither the name of the copyright holder nor the names of its
17
- contributors may be used to endorse or promote products derived from
18
- this software without specific prior written permission.
19
-
20
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -1 +0,0 @@
1
- __VERSION__ = "2.18.3a0"
@@ -1,6 +0,0 @@
1
- Modules in this folder are consumed from the `update_db_data` function in
2
- `fractal_server/__main__.py`. They must expose a `fix_db` function, and they
3
- must be named according to `_slugify_version` (e.g. both for versions `1.4.3`
4
- and `1.4.3a0` the module name is `1_4_3.py`).
5
- Modules corresponding to old versions should be moved to the `old` subfolder,
6
- which is not included in the package wheel.