fractal-server 2.0.5__tar.gz → 2.0.6__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 (171) hide show
  1. {fractal_server-2.0.5 → fractal_server-2.0.6}/PKG-INFO +1 -1
  2. fractal_server-2.0.6/fractal_server/__init__.py +1 -0
  3. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/__init__.py +0 -4
  4. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/security.py +0 -13
  5. fractal_server-2.0.6/fractal_server/app/models/v1/__init__.py +13 -0
  6. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v1/project.py +1 -2
  7. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v2/project.py +1 -2
  8. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v1/_aux_functions.py +1 -1
  9. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v1/project.py +1 -1
  10. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/executors/slurm/_subprocess_run_as_user.py +1 -1
  11. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/config.py +5 -0
  12. fractal_server-2.0.5/fractal_server/logger.py → fractal_server-2.0.6/fractal_server/logger/__init__.py +28 -2
  13. fractal_server-2.0.6/fractal_server/logger/gunicorn_logger.py +19 -0
  14. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/main.py +9 -4
  15. {fractal_server-2.0.5 → fractal_server-2.0.6}/pyproject.toml +6 -6
  16. fractal_server-2.0.5/fractal_server/__init__.py +0 -1
  17. fractal_server-2.0.5/fractal_server/app/models/v1/__init__.py +0 -12
  18. {fractal_server-2.0.5 → fractal_server-2.0.6}/LICENSE +0 -0
  19. {fractal_server-2.0.5 → fractal_server-2.0.6}/README.md +0 -0
  20. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/__main__.py +0 -0
  21. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/alembic.ini +0 -0
  22. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/__init__.py +0 -0
  23. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/db/__init__.py +0 -0
  24. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/linkuserproject.py +0 -0
  25. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v1/dataset.py +0 -0
  26. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v1/job.py +0 -0
  27. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v1/state.py +0 -0
  28. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v1/task.py +0 -0
  29. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v1/workflow.py +0 -0
  30. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v2/__init__.py +0 -0
  31. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v2/collection_state.py +0 -0
  32. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v2/dataset.py +0 -0
  33. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v2/job.py +0 -0
  34. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v2/task.py +0 -0
  35. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v2/workflow.py +0 -0
  36. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/models/v2/workflowtask.py +0 -0
  37. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/__init__.py +0 -0
  38. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/admin/__init__.py +0 -0
  39. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/admin/v1.py +0 -0
  40. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/admin/v2.py +0 -0
  41. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/__init__.py +0 -0
  42. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v1/__init__.py +0 -0
  43. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v1/dataset.py +0 -0
  44. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v1/job.py +0 -0
  45. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v1/task.py +0 -0
  46. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v1/task_collection.py +0 -0
  47. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v1/workflow.py +0 -0
  48. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v1/workflowtask.py +0 -0
  49. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/__init__.py +0 -0
  50. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
  51. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/dataset.py +0 -0
  52. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/images.py +0 -0
  53. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/job.py +0 -0
  54. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/project.py +0 -0
  55. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/status.py +0 -0
  56. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/submit.py +0 -0
  57. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/task.py +0 -0
  58. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
  59. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/task_legacy.py +0 -0
  60. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/workflow.py +0 -0
  61. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
  62. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/auth.py +0 -0
  63. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/aux/__init__.py +0 -0
  64. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/aux/_job.py +0 -0
  65. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/routes/aux/_runner.py +0 -0
  66. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/.gitignore +0 -0
  67. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/__init__.py +0 -0
  68. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/async_wrap.py +0 -0
  69. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/components.py +0 -0
  70. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/exceptions.py +0 -0
  71. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/executors/__init__.py +0 -0
  72. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/executors/slurm/__init__.py +0 -0
  73. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/executors/slurm/_batching.py +0 -0
  74. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/executors/slurm/_check_jobs_status.py +0 -0
  75. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/executors/slurm/_executor_wait_thread.py +0 -0
  76. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/executors/slurm/_slurm_config.py +0 -0
  77. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/executors/slurm/executor.py +0 -0
  78. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/executors/slurm/remote.py +0 -0
  79. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/filenames.py +0 -0
  80. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/set_start_and_last_task_index.py +0 -0
  81. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/task_files.py +0 -0
  82. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/__init__.py +0 -0
  83. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/_common.py +0 -0
  84. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/_local/__init__.py +0 -0
  85. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/_local/_local_config.py +0 -0
  86. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/_local/_submit_setup.py +0 -0
  87. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/_local/executor.py +0 -0
  88. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/_slurm/__init__.py +0 -0
  89. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/_slurm/_submit_setup.py +0 -0
  90. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/_slurm/get_slurm_config.py +0 -0
  91. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/common.py +0 -0
  92. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v1/handle_failed_job.py +0 -0
  93. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/__init__.py +0 -0
  94. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/_local/__init__.py +0 -0
  95. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/_local/_local_config.py +0 -0
  96. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/_local/_submit_setup.py +0 -0
  97. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/_local/executor.py +0 -0
  98. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/_slurm/__init__.py +0 -0
  99. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/_slurm/_submit_setup.py +0 -0
  100. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/_slurm/get_slurm_config.py +0 -0
  101. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/deduplicate_list.py +0 -0
  102. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/handle_failed_job.py +0 -0
  103. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/merge_outputs.py +0 -0
  104. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/runner.py +0 -0
  105. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/runner_functions.py +0 -0
  106. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/runner_functions_low_level.py +0 -0
  107. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/task_interface.py +0 -0
  108. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/runner/v2/v1_compat.py +0 -0
  109. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/__init__.py +0 -0
  110. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/_validators.py +0 -0
  111. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/state.py +0 -0
  112. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/user.py +0 -0
  113. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v1/__init__.py +0 -0
  114. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v1/applyworkflow.py +0 -0
  115. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v1/dataset.py +0 -0
  116. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v1/dumps.py +0 -0
  117. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v1/manifest.py +0 -0
  118. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v1/project.py +0 -0
  119. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v1/task.py +0 -0
  120. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v1/task_collection.py +0 -0
  121. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v1/workflow.py +0 -0
  122. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/__init__.py +0 -0
  123. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/dataset.py +0 -0
  124. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/dumps.py +0 -0
  125. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/job.py +0 -0
  126. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/manifest.py +0 -0
  127. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/project.py +0 -0
  128. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/status.py +0 -0
  129. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/task.py +0 -0
  130. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/task_collection.py +0 -0
  131. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/workflow.py +0 -0
  132. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
  133. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/app/security/__init__.py +0 -0
  134. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/data_migrations/README.md +0 -0
  135. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/images/__init__.py +0 -0
  136. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/images/models.py +0 -0
  137. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/images/tools.py +0 -0
  138. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/README +0 -0
  139. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/env.py +0 -0
  140. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/script.py.mako +0 -0
  141. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
  142. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
  143. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
  144. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
  145. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
  146. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
  147. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
  148. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
  149. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
  150. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
  151. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
  152. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
  153. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
  154. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
  155. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
  156. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
  157. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/py.typed +0 -0
  158. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/syringe.py +0 -0
  159. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/__init__.py +0 -0
  160. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/endpoint_operations.py +0 -0
  161. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/utils.py +0 -0
  162. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/v1/_TaskCollectPip.py +0 -0
  163. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/v1/__init__.py +0 -0
  164. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/v1/background_operations.py +0 -0
  165. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/v1/get_collection_data.py +0 -0
  166. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/v2/_TaskCollectPip.py +0 -0
  167. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/v2/__init__.py +0 -0
  168. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/v2/background_operations.py +0 -0
  169. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/tasks/v2/get_collection_data.py +0 -0
  170. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/urls.py +0 -0
  171. {fractal_server-2.0.5 → fractal_server-2.0.6}/fractal_server/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fractal-server
3
- Version: 2.0.5
3
+ Version: 2.0.6
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.0.6"
@@ -1,7 +1,3 @@
1
- """
2
- `models` module
3
- """
4
- from .security import * # noqa: F401, F403
5
1
  from .v1 import Project # noqa: F401
6
2
  from .v2 import ProjectV2 # noqa: F401
7
3
 
@@ -18,9 +18,6 @@ from sqlmodel import Field
18
18
  from sqlmodel import Relationship
19
19
  from sqlmodel import SQLModel
20
20
 
21
- from .linkuserproject import LinkUserProject
22
- from .linkuserproject import LinkUserProjectV2
23
-
24
21
 
25
22
  class OAuthAccount(SQLModel, table=True):
26
23
  """
@@ -103,16 +100,6 @@ class UserOAuth(SQLModel, table=True):
103
100
  back_populates="user",
104
101
  sa_relationship_kwargs={"lazy": "joined", "cascade": "all, delete"},
105
102
  )
106
- project_list: list["Project"] = Relationship( # noqa
107
- back_populates="user_list",
108
- link_model=LinkUserProject,
109
- sa_relationship_kwargs={"lazy": "selectin"},
110
- )
111
- project_list_v2: list["ProjectV2"] = Relationship( # noqa
112
- back_populates="user_list",
113
- link_model=LinkUserProjectV2,
114
- sa_relationship_kwargs={"lazy": "selectin"},
115
- )
116
103
 
117
104
  class Config:
118
105
  orm_mode = True
@@ -0,0 +1,13 @@
1
+ """
2
+ `models` module
3
+ """
4
+ from ..linkuserproject import LinkUserProject # noqa F401
5
+ from .dataset import Dataset # noqa F401
6
+ from .dataset import Resource # noqa F401
7
+ from .job import ApplyWorkflow # noqa F401
8
+ from .job import JobStatusTypeV1 # noqa F401
9
+ from .project import Project # noqa F401
10
+ from .state import State # noqa F401
11
+ from .task import Task # noqa F401
12
+ from .workflow import Workflow # noqa F401
13
+ from .workflow import WorkflowTask # noqa F401
@@ -7,9 +7,9 @@ from sqlmodel import Field
7
7
  from sqlmodel import Relationship
8
8
  from sqlmodel import SQLModel
9
9
 
10
+ from . import LinkUserProject
10
11
  from ....utils import get_timestamp
11
12
  from ...schemas.v1.project import _ProjectBaseV1
12
- from ..linkuserproject import LinkUserProject
13
13
  from ..security import UserOAuth
14
14
 
15
15
 
@@ -23,7 +23,6 @@ class Project(_ProjectBaseV1, SQLModel, table=True):
23
23
 
24
24
  user_list: list[UserOAuth] = Relationship(
25
25
  link_model=LinkUserProject,
26
- back_populates="project_list",
27
26
  sa_relationship_kwargs={
28
27
  "lazy": "selectin",
29
28
  },
@@ -7,8 +7,8 @@ from sqlmodel import Field
7
7
  from sqlmodel import Relationship
8
8
  from sqlmodel import SQLModel
9
9
 
10
+ from . import LinkUserProjectV2
10
11
  from ....utils import get_timestamp
11
- from ..linkuserproject import LinkUserProjectV2
12
12
  from ..security import UserOAuth
13
13
 
14
14
 
@@ -23,7 +23,6 @@ class ProjectV2(SQLModel, table=True):
23
23
 
24
24
  user_list: list[UserOAuth] = Relationship(
25
25
  link_model=LinkUserProjectV2,
26
- back_populates="project_list_v2",
27
26
  sa_relationship_kwargs={
28
27
  "lazy": "selectin",
29
28
  },
@@ -12,9 +12,9 @@ from sqlmodel import select
12
12
  from sqlmodel.sql.expression import SelectOfScalar
13
13
 
14
14
  from ....db import AsyncSession
15
- from ....models import LinkUserProject
16
15
  from ....models.v1 import ApplyWorkflow
17
16
  from ....models.v1 import Dataset
17
+ from ....models.v1 import LinkUserProject
18
18
  from ....models.v1 import Project
19
19
  from ....models.v1 import Task
20
20
  from ....models.v1 import Workflow
@@ -18,9 +18,9 @@ from .....logger import set_logger
18
18
  from .....syringe import Inject
19
19
  from ....db import AsyncSession
20
20
  from ....db import get_async_db
21
- from ....models import LinkUserProject
22
21
  from ....models.v1 import ApplyWorkflow
23
22
  from ....models.v1 import Dataset
23
+ from ....models.v1 import LinkUserProject
24
24
  from ....models.v1 import Project
25
25
  from ....models.v1 import Workflow
26
26
  from ....runner.set_start_and_last_task_index import (
@@ -141,7 +141,7 @@ def _glob_as_user_strict(
141
141
  new_output = []
142
142
  known_filenames = [
143
143
  f"{startswith}{suffix}"
144
- for suffix in [".args.json", ".metadiff.json", ".err", ".out"]
144
+ for suffix in [".args.json", ".metadiff.json", ".err", ".out", ".log"]
145
145
  ]
146
146
  for filename in output:
147
147
  if filename in known_filenames:
@@ -361,6 +361,11 @@ class Settings(BaseSettings):
361
361
  attribute in their input-arguments JSON file.
362
362
  """
363
363
 
364
+ FRACTAL_API_V1_MODE: Literal["include", "exclude"] = "include"
365
+ """
366
+ Whether to include the v1 API.
367
+ """
368
+
364
369
  ###########################################################################
365
370
  # BUSINESS LOGIC
366
371
  ###########################################################################
@@ -17,8 +17,8 @@ from pathlib import Path
17
17
  from typing import Optional
18
18
  from typing import Union
19
19
 
20
- from .config import get_settings
21
- from .syringe import Inject
20
+ from ..config import get_settings
21
+ from ..syringe import Inject
22
22
 
23
23
 
24
24
  LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
@@ -136,3 +136,29 @@ def reset_logger_handlers(logger: logging.Logger) -> None:
136
136
  """
137
137
  close_logger(logger)
138
138
  logger.handlers.clear()
139
+
140
+
141
+ def config_uvicorn_loggers():
142
+ """
143
+ Change the formatter for the uvicorn access/error loggers.
144
+
145
+ This is similar to https://stackoverflow.com/a/68864979/19085332. See also
146
+ https://github.com/tiangolo/fastapi/issues/1508.
147
+
148
+ This function is meant to work in two scenarios:
149
+
150
+ 1. The most relevant case is for a `gunicorn` startup command, with
151
+ `--access-logfile` and `--error-logfile` options set.
152
+ 2. The case of `fractalctl start` (directly calling `uvicorn`).
153
+
154
+ Because of the second use case, we need to check whether uvicorn loggers
155
+ already have a handler. If not, we skip the formatting.
156
+ """
157
+
158
+ access_logger = logging.getLogger("uvicorn.access")
159
+ if len(access_logger.handlers) > 0:
160
+ access_logger.handlers[0].setFormatter(LOG_FORMATTER)
161
+
162
+ error_logger = logging.getLogger("uvicorn.error")
163
+ if len(error_logger.handlers) > 0:
164
+ error_logger.handlers[0].setFormatter(LOG_FORMATTER)
@@ -0,0 +1,19 @@
1
+ """
2
+ This module (which is only executed if `gunicorn` can be imported) subclasses
3
+ the gunicorn `Logger` class in order to slightly change its log formats.
4
+
5
+ This class can be used by including this `gunicorn` command-line option:
6
+ ```
7
+ --logger-class fractal_server.logger.gunicorn_logger.FractalGunicornLogger
8
+ ```
9
+ """
10
+
11
+ try:
12
+ from gunicorn.glogging import Logger as GunicornLogger
13
+
14
+ class FractalGunicornLogger(GunicornLogger):
15
+ error_fmt = r"%(asctime)s - gunicorn.error - %(levelname)s - [pid %(process)d] - %(message)s" # noqa: E501
16
+ datefmt = r"%Y-%m-%d %H:%M:%S,%u"
17
+
18
+ except (ModuleNotFoundError, ImportError):
19
+ pass
@@ -19,6 +19,7 @@ from fastapi import FastAPI
19
19
 
20
20
  from .app.security import _create_first_user
21
21
  from .config import get_settings
22
+ from .logger import config_uvicorn_loggers
22
23
  from .logger import reset_logger_handlers
23
24
  from .logger import set_logger
24
25
  from .syringe import Inject
@@ -39,12 +40,15 @@ def collect_routers(app: FastAPI) -> None:
39
40
  from .app.routes.admin.v2 import router_admin_v2
40
41
  from .app.routes.auth import router_auth
41
42
 
43
+ settings = Inject(get_settings)
44
+
42
45
  app.include_router(router_api, prefix="/api")
43
- app.include_router(router_api_v1, prefix="/api/v1")
46
+ if settings.FRACTAL_API_V1_MODE == "include":
47
+ app.include_router(router_api_v1, prefix="/api/v1")
48
+ app.include_router(
49
+ router_admin_v1, prefix="/admin/v1", tags=["V1 Admin area"]
50
+ )
44
51
  app.include_router(router_api_v2, prefix="/api/v2")
45
- app.include_router(
46
- router_admin_v1, prefix="/admin/v1", tags=["V1 Admin area"]
47
- )
48
52
  app.include_router(
49
53
  router_admin_v2, prefix="/admin/v2", tags=["V2 Admin area"]
50
54
  )
@@ -81,6 +85,7 @@ async def __on_startup() -> None:
81
85
  callable.
82
86
  """
83
87
  check_settings()
88
+ config_uvicorn_loggers()
84
89
 
85
90
 
86
91
  def start_application() -> FastAPI:
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "fractal-server"
3
- version = "2.0.5"
3
+ version = "2.0.6"
4
4
  description = "Server component of the Fractal analytics platform"
5
5
  authors = [
6
6
  "Tommaso Comparin <tommaso.comparin@exact-lab.it>",
@@ -49,16 +49,16 @@ gunicorn = ["gunicorn"]
49
49
 
50
50
  [tool.poetry.group.dev.dependencies]
51
51
  asgi-lifespan = "^2"
52
- pytest = "^7.2"
52
+ pytest = "8.1.*"
53
53
  httpx = "^0.23"
54
54
  devtools = "^0.12"
55
55
  pytest-asyncio = "^0.21"
56
56
  bumpver = "^2022.1120"
57
57
  pre-commit = "^2.19"
58
- coverage = {extras = ["toml"], version = "^6.4.4"}
59
- pytest-docker = {version = "^2.0"}
58
+ coverage = {extras = ["toml"], version = "7.5.*"}
59
+ pytest-docker = {version = "3.1.*"}
60
60
  mypy = "^1.9"
61
- pytest-subprocess = "^1.4"
61
+ pytest-subprocess = "^1.5"
62
62
  pyyaml="^6.0.1"
63
63
  a2wsgi = "^1.10.0"
64
64
  jinja2 = "^3.1.3"
@@ -87,7 +87,7 @@ filterwarnings = [
87
87
  ]
88
88
 
89
89
  [tool.bumpver]
90
- current_version = "2.0.5"
90
+ current_version = "2.0.6"
91
91
  version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
92
92
  commit_message = "bump version {old_version} -> {new_version}"
93
93
  commit = true
@@ -1 +0,0 @@
1
- __VERSION__ = "2.0.5"
@@ -1,12 +0,0 @@
1
- """
2
- `models` module
3
- """
4
- from .dataset import Dataset # noqa: F401
5
- from .dataset import Resource # noqa: F401
6
- from .job import ApplyWorkflow # noqa: F403, F401
7
- from .job import JobStatusTypeV1 # noqa: F401, F403
8
- from .project import Project # noqa: F403, F401
9
- from .state import State # noqa: F403, F401
10
- from .task import Task # noqa: F403, F401
11
- from .workflow import Workflow # noqa: F401, F403
12
- from .workflow import WorkflowTask # noqa: F401, F403
File without changes
File without changes