fractal-server 2.18.6__tar.gz → 2.19.0__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.
- {fractal_server-2.18.6 → fractal_server-2.19.0}/PKG-INFO +2 -2
- fractal_server-2.19.0/fractal_server/__init__.py +1 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/security.py +16 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/dataset.py +0 -4
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/job.py +4 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/task.py +0 -1
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/task_group.py +4 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/workflow.py +2 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/workflowtask.py +3 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/sharing.py +47 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/task.py +0 -5
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +6 -0
- fractal_server-2.19.0/fractal_server/app/routes/api/__init__.py +9 -0
- fractal_server-2.19.0/fractal_server/app/routes/api/alive.py +13 -0
- fractal_server-2.18.6/fractal_server/app/routes/api/__init__.py → fractal_server-2.19.0/fractal_server/app/routes/api/settings.py +5 -18
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/__init__.py +0 -2
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +1 -20
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/dataset.py +9 -8
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/history.py +8 -8
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/images.py +6 -5
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/job.py +10 -9
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/pre_submission_checks.py +3 -3
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/project.py +7 -6
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/sharing.py +17 -9
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/submit.py +5 -3
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/task.py +7 -6
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/task_collection.py +4 -2
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/task_collection_custom.py +2 -2
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/task_collection_pixi.py +4 -2
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/task_group.py +9 -30
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +10 -4
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/task_version_update.py +4 -3
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/workflow.py +10 -9
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/workflow_import.py +14 -45
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/workflowtask.py +7 -11
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/auth/__init__.py +18 -1
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/auth/current_user.py +8 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/auth/users.py +11 -0
- fractal_server-2.19.0/fractal_server/app/routes/aux/_versions.py +42 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/user.py +7 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/__init__.py +0 -1
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/dumps.py +0 -1
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/task.py +0 -5
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/workflow.py +2 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/workflowtask.py +6 -2
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/security/__init__.py +8 -3
- fractal_server-2.19.0/fractal_server/migrations/versions/18a26fcdea5d_drop_dataset_history.py +41 -0
- fractal_server-2.19.0/fractal_server/migrations/versions/1bf8785755f9_add_description_to_workflow_and_.py +53 -0
- fractal_server-2.19.0/fractal_server/migrations/versions/5fb08bf05b14_drop_taskv2_source.py +36 -0
- fractal_server-2.19.0/fractal_server/migrations/versions/cfd13f7954e7_add_fractal_server_version_to_jobv2_and_.py +52 -0
- fractal_server-2.19.0/fractal_server/migrations/versions/e53dc51fdf93_add_useroauth_is_guest.py +36 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/submit_workflow.py +0 -2
- {fractal_server-2.18.6 → fractal_server-2.19.0}/pyproject.toml +3 -4
- fractal_server-2.18.6/fractal_server/__init__.py +0 -1
- fractal_server-2.18.6/fractal_server/app/routes/api/v2/status_legacy.py +0 -156
- {fractal_server-2.18.6 → fractal_server-2.19.0}/LICENSE +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/README.md +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/__main__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/alembic.ini +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/db/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/linkusergroup.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/linkuserproject.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/accounting.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/history.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/profile.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/project.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/resource.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/_aux_functions.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/job.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/profile.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/resource.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/_aux_functions_sharing.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/auth/group.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/auth/login.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/auth/oauth.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/auth/register.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/auth/router.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/auth/viewer_paths.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/aux/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/aux/_job.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/aux/_runner.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/aux/validate_user_profile.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/pagination.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/user_group.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/accounting.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/dataset.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/history.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/job.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/manifest.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/profile.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/project.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/resource.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/sharing.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/status_legacy.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/task_collection.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/schemas/v2/task_group.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/security/signup_email.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/shutdown.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/config/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/config/_data.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/config/_database.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/config/_email.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/config/_main.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/config/_oauth.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/config/_settings_config.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/data_migrations/tools.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/exceptions.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/gunicorn_fractal.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/images/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/images/models.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/images/status_tools.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/images/tools.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/logger.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/main.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/env.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/naming_convention.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/068496367952_drop_taskgroup_venv_size_and_files_.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/0f5f85bb2ae7_add_pre_pinned_packages.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/1a83a5260664_rename.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/40d6d6511b20_add_index_to_history_models.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/45fbb391d7af_make_resource_id_fk_non_nullable.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/49d0856e9569_drop_table.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/7673fe18c05d_remove_project_dir_server_default.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/7910eed4cf97_user_project_dirs_and_usergroup_viewer_.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/791ce783d3d8_add_indices.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/88270f589c9b_add_prevent_new_submissions.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/969d84257cac_add_historyrun_task_id.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/981d588fe248_add_executor_error_log.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/b3ffb095f973_json_to_jsonb.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/b7477cc98f45_2_18_1.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/bc0e8b3327a7_project_sharing.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/caba9fb1ea5e_drop_useroauth_user_settings_id.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/e0e717ae2f26_delete_linkuserproject_ondelete_project.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/f0702066b007_one_submitted_job_per_dataset.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/py.typed +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/components.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/config/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/config/_local.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/config/_slurm.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/config/slurm_mem_to_MB.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/exceptions.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/base_runner.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/call_command_wrapper.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/local/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/local/get_local_config.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/local/runner.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_common/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_common/_batching.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_common/_job_states.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_common/base_slurm_runner.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_common/get_slurm_config.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_common/remote.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_common/slurm_config.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_common/slurm_job_task_models.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_ssh/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_ssh/run_subprocess.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_ssh/runner.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_ssh/tar_commands.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_sudo/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/executors/slurm_sudo/runner.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/filenames.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/set_start_and_last_task_index.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/task_files.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/_local.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/_slurm_ssh.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/_slurm_sudo.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/db_tools.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/deduplicate_list.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/merge_outputs.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/runner.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/runner_functions.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/v2/task_interface.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/runner/versions.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/ssh/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/ssh/_fabric.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/string_tools.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/syringe.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/config/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/config/_pixi.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/config/_python.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/utils.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/local/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/local/_utils.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/local/collect.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/local/collect_pixi.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/local/deactivate.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/local/deactivate_pixi.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/local/delete.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/local/reactivate.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/local/reactivate_pixi.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/ssh/collect.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/ssh/collect_pixi.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/ssh/deactivate_pixi.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/ssh/delete.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/ssh/reactivate_pixi.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/templates/5_pip_install_from_freeze.sh +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/templates/pixi_1_extract.sh +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/templates/pixi_2_install.sh +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/templates/pixi_3_post_install.sh +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/utils_background.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/utils_database.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/utils_package_names.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/utils_pixi.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/tasks/v2/utils_templates.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/types/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/types/validators/__init__.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/types/validators/_common_validators.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/types/validators/_filter_validators.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/types/validators/_workflow_task_arguments_validators.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/urls.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/utils.py +0 -0
- {fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/zip_tools.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: fractal-server
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.19.0
|
|
4
4
|
Summary: Backend component of the Fractal analytics platform
|
|
5
5
|
Author: Tommaso Comparin, Marco Franzon, Yuri Chiucconi, Jacopo Nespolo
|
|
6
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>
|
|
@@ -17,7 +17,7 @@ Requires-Dist: pydantic>=2.12.0,<2.13.0
|
|
|
17
17
|
Requires-Dist: pydantic-settings==2.12.0
|
|
18
18
|
Requires-Dist: packaging>=25.0.0,<26.0.0
|
|
19
19
|
Requires-Dist: fabric>=3.2.2,<3.3.0
|
|
20
|
-
Requires-Dist: gunicorn>=
|
|
20
|
+
Requires-Dist: gunicorn>=24.1,<25
|
|
21
21
|
Requires-Dist: psycopg[binary]>=3.1.0,<4.0.0
|
|
22
22
|
Requires-Dist: tomli-w>=1.2.0,<1.3.0
|
|
23
23
|
Requires-Python: >=3.12, <3.15
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__VERSION__ = "2.19.0"
|
|
@@ -7,6 +7,8 @@ from sqlalchemy import Column
|
|
|
7
7
|
from sqlalchemy import String
|
|
8
8
|
from sqlalchemy.dialects.postgresql import ARRAY
|
|
9
9
|
from sqlalchemy.types import DateTime
|
|
10
|
+
from sqlmodel import BOOLEAN
|
|
11
|
+
from sqlmodel import CheckConstraint
|
|
10
12
|
from sqlmodel import Field
|
|
11
13
|
from sqlmodel import Relationship
|
|
12
14
|
from sqlmodel import SQLModel
|
|
@@ -100,6 +102,13 @@ class UserOAuth(SQLModel, table=True):
|
|
|
100
102
|
is_active: bool = Field(default=True, nullable=False)
|
|
101
103
|
is_superuser: bool = Field(default=False, nullable=False)
|
|
102
104
|
is_verified: bool = Field(default=False, nullable=False)
|
|
105
|
+
is_guest: bool = Field(
|
|
106
|
+
sa_column=Column(
|
|
107
|
+
BOOLEAN,
|
|
108
|
+
server_default="false",
|
|
109
|
+
nullable=False,
|
|
110
|
+
),
|
|
111
|
+
)
|
|
103
112
|
|
|
104
113
|
oauth_accounts: list["OAuthAccount"] = Relationship(
|
|
105
114
|
back_populates="user",
|
|
@@ -120,6 +129,13 @@ class UserOAuth(SQLModel, table=True):
|
|
|
120
129
|
sa_column=Column(ARRAY(String), server_default="{}"),
|
|
121
130
|
)
|
|
122
131
|
|
|
132
|
+
__table_args__ = (
|
|
133
|
+
CheckConstraint(
|
|
134
|
+
"NOT (is_superuser AND is_guest)",
|
|
135
|
+
name="superuser_is_not_guest",
|
|
136
|
+
),
|
|
137
|
+
)
|
|
138
|
+
|
|
123
139
|
|
|
124
140
|
class UserGroup(SQLModel, table=True):
|
|
125
141
|
"""
|
|
@@ -27,10 +27,6 @@ class DatasetV2(SQLModel, table=True):
|
|
|
27
27
|
sa_relationship_kwargs=dict(lazy="selectin"),
|
|
28
28
|
)
|
|
29
29
|
|
|
30
|
-
history: list[dict[str, Any]] = Field(
|
|
31
|
-
sa_column=Column(JSONB, server_default="[]", nullable=False)
|
|
32
|
-
)
|
|
33
|
-
|
|
34
30
|
timestamp_created: datetime = Field(
|
|
35
31
|
default_factory=get_timestamp,
|
|
36
32
|
sa_column=Column(DateTime(timezone=True), nullable=False),
|
|
@@ -5,6 +5,7 @@ from pydantic import ConfigDict
|
|
|
5
5
|
from sqlalchemy import Column
|
|
6
6
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
7
7
|
from sqlalchemy.types import DateTime
|
|
8
|
+
from sqlalchemy.types import String
|
|
8
9
|
from sqlmodel import Field
|
|
9
10
|
from sqlmodel import Index
|
|
10
11
|
from sqlmodel import SQLModel
|
|
@@ -44,6 +45,9 @@ class JobV2(SQLModel, table=True):
|
|
|
44
45
|
project_dump: dict[str, Any] = Field(
|
|
45
46
|
sa_column=Column(JSONB, nullable=False)
|
|
46
47
|
)
|
|
48
|
+
fractal_server_version: str = Field(
|
|
49
|
+
sa_column=Column(String, server_default="pre-2.19.0", nullable=False)
|
|
50
|
+
)
|
|
47
51
|
|
|
48
52
|
worker_init: str | None = None
|
|
49
53
|
working_dir: str | None = None
|
|
@@ -14,7 +14,6 @@ class TaskV2(SQLModel, table=True):
|
|
|
14
14
|
type: str
|
|
15
15
|
command_non_parallel: str | None = None
|
|
16
16
|
command_parallel: str | None = None
|
|
17
|
-
source: str | None = None
|
|
18
17
|
|
|
19
18
|
meta_non_parallel: dict[str, Any] = Field(
|
|
20
19
|
sa_column=Column(JSON, server_default="{}", default={}, nullable=False)
|
|
@@ -4,6 +4,7 @@ from datetime import timezone
|
|
|
4
4
|
from sqlalchemy import Column
|
|
5
5
|
from sqlalchemy.dialects.postgresql import JSONB
|
|
6
6
|
from sqlalchemy.types import DateTime
|
|
7
|
+
from sqlalchemy.types import String
|
|
7
8
|
from sqlmodel import Field
|
|
8
9
|
from sqlmodel import Relationship
|
|
9
10
|
from sqlmodel import SQLModel
|
|
@@ -151,3 +152,6 @@ class TaskGroupActivityV2(SQLModel, table=True):
|
|
|
151
152
|
default=None,
|
|
152
153
|
sa_column=Column(DateTime(timezone=True)),
|
|
153
154
|
)
|
|
155
|
+
fractal_server_version: str = Field(
|
|
156
|
+
sa_column=Column(String, server_default="pre-2.19.0", nullable=False)
|
|
157
|
+
)
|
{fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/models/v2/workflowtask.py
RENAMED
|
@@ -39,3 +39,6 @@ class WorkflowTaskV2(SQLModel, table=True):
|
|
|
39
39
|
task_type: str
|
|
40
40
|
task_id: int = Field(foreign_key="taskv2.id")
|
|
41
41
|
task: TaskV2 = Relationship(sa_relationship_kwargs=dict(lazy="selectin"))
|
|
42
|
+
|
|
43
|
+
alias: str | None = Field(default=None, nullable=True)
|
|
44
|
+
description: str | None = Field(default=None, nullable=True)
|
{fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/admin/v2/sharing.py
RENAMED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
from fastapi import APIRouter
|
|
2
2
|
from fastapi import Depends
|
|
3
|
+
from fastapi import HTTPException
|
|
4
|
+
from fastapi import Response
|
|
5
|
+
from fastapi import status
|
|
3
6
|
from sqlalchemy import func
|
|
4
7
|
from sqlmodel import select
|
|
5
8
|
|
|
@@ -8,11 +11,16 @@ from fractal_server.app.db import get_async_db
|
|
|
8
11
|
from fractal_server.app.models import LinkUserProjectV2
|
|
9
12
|
from fractal_server.app.models import UserOAuth
|
|
10
13
|
from fractal_server.app.models.v2 import ProjectV2
|
|
14
|
+
from fractal_server.app.routes.api.v2._aux_functions_sharing import (
|
|
15
|
+
get_pending_invitation_or_404,
|
|
16
|
+
)
|
|
11
17
|
from fractal_server.app.routes.auth import current_superuser_act
|
|
18
|
+
from fractal_server.app.routes.auth._aux_auth import _user_or_404
|
|
12
19
|
from fractal_server.app.routes.pagination import PaginationRequest
|
|
13
20
|
from fractal_server.app.routes.pagination import PaginationResponse
|
|
14
21
|
from fractal_server.app.routes.pagination import get_pagination_params
|
|
15
22
|
from fractal_server.app.schemas.v2 import LinkUserProjectRead
|
|
23
|
+
from fractal_server.app.schemas.v2.sharing import ProjectPermissions
|
|
16
24
|
|
|
17
25
|
router = APIRouter()
|
|
18
26
|
|
|
@@ -101,3 +109,42 @@ async def view_link_user_project(
|
|
|
101
109
|
for linkuserproject, user_email, project_name in items
|
|
102
110
|
],
|
|
103
111
|
)
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
@router.post("/verify/", status_code=200)
|
|
115
|
+
async def verify_invitation_for_guest(
|
|
116
|
+
guest_user_id: int,
|
|
117
|
+
project_id: int,
|
|
118
|
+
superuser: UserOAuth = Depends(current_superuser_act),
|
|
119
|
+
db: AsyncSession = Depends(get_async_db),
|
|
120
|
+
) -> None:
|
|
121
|
+
"""
|
|
122
|
+
Verify the invitation to join a project for a guest user
|
|
123
|
+
|
|
124
|
+
Note that a guest user would not be allowed to do this themselves.
|
|
125
|
+
"""
|
|
126
|
+
# Get user and verify that they actually are a guest
|
|
127
|
+
guest_user = await _user_or_404(guest_user_id, db)
|
|
128
|
+
if not guest_user.is_guest:
|
|
129
|
+
raise HTTPException(
|
|
130
|
+
status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
|
|
131
|
+
detail="Cannot accept invitations for non-guest users.",
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
# Find verification and check that permissions are set to R
|
|
135
|
+
link = await get_pending_invitation_or_404(
|
|
136
|
+
user_id=guest_user_id, project_id=project_id, db=db
|
|
137
|
+
)
|
|
138
|
+
if link.permissions != ProjectPermissions.READ:
|
|
139
|
+
raise HTTPException(
|
|
140
|
+
status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
|
|
141
|
+
detail=(
|
|
142
|
+
"Guest users can only have 'r' permission "
|
|
143
|
+
f"(given: '{link.permissions}')"
|
|
144
|
+
),
|
|
145
|
+
)
|
|
146
|
+
# Mark the invitation as verified
|
|
147
|
+
link.is_verified = True
|
|
148
|
+
await db.commit()
|
|
149
|
+
|
|
150
|
+
return Response(status_code=status.HTTP_200_OK)
|
|
@@ -30,7 +30,6 @@ class TaskMinimal(BaseModel):
|
|
|
30
30
|
taskgroupv2_id: int
|
|
31
31
|
command_non_parallel: str | None = None
|
|
32
32
|
command_parallel: str | None = None
|
|
33
|
-
source: str | None = None
|
|
34
33
|
version: str | None = None
|
|
35
34
|
|
|
36
35
|
|
|
@@ -55,7 +54,6 @@ class TaskInfo(BaseModel):
|
|
|
55
54
|
@router.get("/", response_model=PaginationResponse[TaskInfo])
|
|
56
55
|
async def query_tasks(
|
|
57
56
|
id: int | None = None,
|
|
58
|
-
source: str | None = None,
|
|
59
57
|
version: str | None = None,
|
|
60
58
|
name: str | None = None,
|
|
61
59
|
task_type: TaskType | None = None,
|
|
@@ -81,9 +79,6 @@ async def query_tasks(
|
|
|
81
79
|
if id is not None:
|
|
82
80
|
stm = stm.where(TaskV2.id == id)
|
|
83
81
|
stm_count = stm_count.where(TaskV2.id == id)
|
|
84
|
-
if source is not None:
|
|
85
|
-
stm = stm.where(TaskV2.source.icontains(source))
|
|
86
|
-
stm_count = stm_count.where(TaskV2.source.icontains(source))
|
|
87
82
|
if version is not None:
|
|
88
83
|
stm = stm.where(TaskV2.version == version)
|
|
89
84
|
stm_count = stm_count.where(TaskV2.version == version)
|
|
@@ -5,6 +5,7 @@ from fastapi import HTTPException
|
|
|
5
5
|
from fastapi import Response
|
|
6
6
|
from fastapi import status
|
|
7
7
|
|
|
8
|
+
from fractal_server import __VERSION__
|
|
8
9
|
from fractal_server.app.db import AsyncSession
|
|
9
10
|
from fractal_server.app.db import get_async_db
|
|
10
11
|
from fractal_server.app.models import UserOAuth
|
|
@@ -93,6 +94,7 @@ async def deactivate_task_group(
|
|
|
93
94
|
),
|
|
94
95
|
timestamp_started=get_timestamp(),
|
|
95
96
|
timestamp_ended=get_timestamp(),
|
|
97
|
+
fractal_server_version=__VERSION__,
|
|
96
98
|
)
|
|
97
99
|
db.add(task_group)
|
|
98
100
|
db.add(task_group_activity)
|
|
@@ -108,6 +110,7 @@ async def deactivate_task_group(
|
|
|
108
110
|
pkg_name=task_group.pkg_name,
|
|
109
111
|
version=task_group.version,
|
|
110
112
|
timestamp_started=get_timestamp(),
|
|
113
|
+
fractal_server_version=__VERSION__,
|
|
111
114
|
)
|
|
112
115
|
db.add(task_group_activity)
|
|
113
116
|
await db.commit()
|
|
@@ -188,6 +191,7 @@ async def reactivate_task_group(
|
|
|
188
191
|
),
|
|
189
192
|
timestamp_started=get_timestamp(),
|
|
190
193
|
timestamp_ended=get_timestamp(),
|
|
194
|
+
fractal_server_version=__VERSION__,
|
|
191
195
|
)
|
|
192
196
|
db.add(task_group)
|
|
193
197
|
db.add(task_group_activity)
|
|
@@ -211,6 +215,7 @@ async def reactivate_task_group(
|
|
|
211
215
|
pkg_name=task_group.pkg_name,
|
|
212
216
|
version=task_group.version,
|
|
213
217
|
timestamp_started=get_timestamp(),
|
|
218
|
+
fractal_server_version=__VERSION__,
|
|
214
219
|
)
|
|
215
220
|
db.add(task_group_activity)
|
|
216
221
|
await db.commit()
|
|
@@ -264,6 +269,7 @@ async def delete_task_group(
|
|
|
264
269
|
pkg_name=task_group.pkg_name,
|
|
265
270
|
version=(task_group.version or "N/A"),
|
|
266
271
|
timestamp_started=get_timestamp(),
|
|
272
|
+
fractal_server_version=__VERSION__,
|
|
267
273
|
)
|
|
268
274
|
db.add(task_group_activity)
|
|
269
275
|
await db.commit()
|
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
"""
|
|
2
|
-
`api` module
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
1
|
from fastapi import APIRouter
|
|
6
2
|
from fastapi import Depends
|
|
7
3
|
|
|
8
|
-
import fractal_server
|
|
9
4
|
from fractal_server.app.models import UserOAuth
|
|
10
5
|
from fractal_server.app.routes.auth import current_superuser_act
|
|
11
6
|
from fractal_server.config import get_db_settings
|
|
@@ -14,18 +9,10 @@ from fractal_server.config import get_oauth_settings
|
|
|
14
9
|
from fractal_server.config import get_settings
|
|
15
10
|
from fractal_server.syringe import Inject
|
|
16
11
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
@router_api.get("/alive/")
|
|
21
|
-
async def alive():
|
|
22
|
-
return dict(
|
|
23
|
-
alive=True,
|
|
24
|
-
version=fractal_server.__VERSION__,
|
|
25
|
-
)
|
|
12
|
+
router = APIRouter()
|
|
26
13
|
|
|
27
14
|
|
|
28
|
-
@
|
|
15
|
+
@router.get("/settings/app/")
|
|
29
16
|
async def view_settings(
|
|
30
17
|
user: UserOAuth = Depends(current_superuser_act),
|
|
31
18
|
):
|
|
@@ -33,7 +20,7 @@ async def view_settings(
|
|
|
33
20
|
return settings.model_dump()
|
|
34
21
|
|
|
35
22
|
|
|
36
|
-
@
|
|
23
|
+
@router.get("/settings/database/")
|
|
37
24
|
async def view_db_settings(
|
|
38
25
|
user: UserOAuth = Depends(current_superuser_act),
|
|
39
26
|
):
|
|
@@ -41,7 +28,7 @@ async def view_db_settings(
|
|
|
41
28
|
return settings.model_dump()
|
|
42
29
|
|
|
43
30
|
|
|
44
|
-
@
|
|
31
|
+
@router.get("/settings/email/")
|
|
45
32
|
async def view_email_settings(
|
|
46
33
|
user: UserOAuth = Depends(current_superuser_act),
|
|
47
34
|
):
|
|
@@ -49,7 +36,7 @@ async def view_email_settings(
|
|
|
49
36
|
return settings.model_dump()
|
|
50
37
|
|
|
51
38
|
|
|
52
|
-
@
|
|
39
|
+
@router.get("/settings/oauth/")
|
|
53
40
|
async def view_oauth_settings(
|
|
54
41
|
user: UserOAuth = Depends(current_superuser_act),
|
|
55
42
|
):
|
{fractal_server-2.18.6 → fractal_server-2.19.0}/fractal_server/app/routes/api/v2/__init__.py
RENAMED
|
@@ -14,7 +14,6 @@ from .job import router as job_router
|
|
|
14
14
|
from .pre_submission_checks import router as pre_submission_checks_router
|
|
15
15
|
from .project import router as project_router
|
|
16
16
|
from .sharing import router as sharing_router
|
|
17
|
-
from .status_legacy import router as status_legacy_router
|
|
18
17
|
from .submit import router as submit_job_router
|
|
19
18
|
from .task import router as task_router
|
|
20
19
|
from .task_collection import router as task_collection_router
|
|
@@ -37,7 +36,6 @@ router_api.include_router(sharing_router, tags=["Project Sharing"])
|
|
|
37
36
|
router_api.include_router(project_router, tags=["Project"])
|
|
38
37
|
router_api.include_router(submit_job_router, tags=["Job"])
|
|
39
38
|
router_api.include_router(history_router, tags=["History"])
|
|
40
|
-
router_api.include_router(status_legacy_router, tags=["Status Legacy"])
|
|
41
39
|
|
|
42
40
|
|
|
43
41
|
settings = Inject(get_settings)
|
|
@@ -2,8 +2,6 @@ from fastapi import HTTPException
|
|
|
2
2
|
from fastapi import status
|
|
3
3
|
from httpx import AsyncClient
|
|
4
4
|
from httpx import TimeoutException
|
|
5
|
-
from packaging.version import InvalidVersion
|
|
6
|
-
from packaging.version import Version
|
|
7
5
|
from sqlmodel import func
|
|
8
6
|
from sqlmodel import select
|
|
9
7
|
|
|
@@ -14,6 +12,7 @@ from fractal_server.app.models.v2 import TaskGroupV2
|
|
|
14
12
|
from fractal_server.app.models.v2 import TaskV2
|
|
15
13
|
from fractal_server.app.models.v2 import WorkflowTaskV2
|
|
16
14
|
from fractal_server.app.models.v2 import WorkflowV2
|
|
15
|
+
from fractal_server.app.routes.aux._versions import _find_latest_version_or_422
|
|
17
16
|
from fractal_server.app.schemas.v2 import JobStatusType
|
|
18
17
|
from fractal_server.app.schemas.v2 import TaskGroupActivityStatus
|
|
19
18
|
from fractal_server.logger import set_logger
|
|
@@ -26,24 +25,6 @@ PYPI_JSON_HEADERS = {"Accept": "application/vnd.pypi.simple.v1+json"}
|
|
|
26
25
|
logger = set_logger(__name__)
|
|
27
26
|
|
|
28
27
|
|
|
29
|
-
def _find_latest_version_or_422(versions: list[str]) -> str:
|
|
30
|
-
"""
|
|
31
|
-
> For PEP 440 versions, this is easy enough for the client to do (using
|
|
32
|
-
> the `packaging` library [...]. For non-standard versions, there is no
|
|
33
|
-
> well-defined ordering, and clients will need to decide on what rule is
|
|
34
|
-
> appropriate for their needs.
|
|
35
|
-
(https://peps.python.org/pep-0700/#why-not-provide-a-latest-version-value)
|
|
36
|
-
"""
|
|
37
|
-
try:
|
|
38
|
-
latest = max(versions, key=lambda v_str: Version(v_str))
|
|
39
|
-
return latest
|
|
40
|
-
except InvalidVersion as e:
|
|
41
|
-
raise HTTPException(
|
|
42
|
-
status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
|
|
43
|
-
detail=f"Cannot find latest version (original error: {str(e)}).",
|
|
44
|
-
)
|
|
45
|
-
|
|
46
|
-
|
|
47
28
|
async def get_package_version_from_pypi(
|
|
48
29
|
name: str,
|
|
49
30
|
version: str | None = None,
|
|
@@ -13,7 +13,8 @@ from fractal_server.app.db import get_async_db
|
|
|
13
13
|
from fractal_server.app.models import UserOAuth
|
|
14
14
|
from fractal_server.app.models.v2 import DatasetV2
|
|
15
15
|
from fractal_server.app.models.v2 import JobV2
|
|
16
|
-
from fractal_server.app.routes.auth import
|
|
16
|
+
from fractal_server.app.routes.auth import get_api_guest
|
|
17
|
+
from fractal_server.app.routes.auth import get_api_user
|
|
17
18
|
from fractal_server.app.schemas.v2 import DatasetCreate
|
|
18
19
|
from fractal_server.app.schemas.v2 import DatasetRead
|
|
19
20
|
from fractal_server.app.schemas.v2 import DatasetUpdate
|
|
@@ -38,7 +39,7 @@ router = APIRouter()
|
|
|
38
39
|
async def create_dataset(
|
|
39
40
|
project_id: int,
|
|
40
41
|
dataset: DatasetCreate,
|
|
41
|
-
user: UserOAuth = Depends(
|
|
42
|
+
user: UserOAuth = Depends(get_api_user),
|
|
42
43
|
db: AsyncSession = Depends(get_async_db),
|
|
43
44
|
) -> DatasetRead | None:
|
|
44
45
|
"""
|
|
@@ -96,7 +97,7 @@ async def create_dataset(
|
|
|
96
97
|
)
|
|
97
98
|
async def read_dataset_list(
|
|
98
99
|
project_id: int,
|
|
99
|
-
user: UserOAuth = Depends(
|
|
100
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
100
101
|
db: AsyncSession = Depends(get_async_db),
|
|
101
102
|
) -> list[DatasetRead] | None:
|
|
102
103
|
"""
|
|
@@ -126,7 +127,7 @@ async def read_dataset_list(
|
|
|
126
127
|
async def read_dataset(
|
|
127
128
|
project_id: int,
|
|
128
129
|
dataset_id: int,
|
|
129
|
-
user: UserOAuth = Depends(
|
|
130
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
130
131
|
db: AsyncSession = Depends(get_async_db),
|
|
131
132
|
) -> DatasetRead | None:
|
|
132
133
|
"""
|
|
@@ -151,7 +152,7 @@ async def update_dataset(
|
|
|
151
152
|
project_id: int,
|
|
152
153
|
dataset_id: int,
|
|
153
154
|
dataset_update: DatasetUpdate,
|
|
154
|
-
user: UserOAuth = Depends(
|
|
155
|
+
user: UserOAuth = Depends(get_api_user),
|
|
155
156
|
db: AsyncSession = Depends(get_async_db),
|
|
156
157
|
) -> DatasetRead | None:
|
|
157
158
|
"""
|
|
@@ -182,7 +183,7 @@ async def update_dataset(
|
|
|
182
183
|
async def delete_dataset(
|
|
183
184
|
project_id: int,
|
|
184
185
|
dataset_id: int,
|
|
185
|
-
user: UserOAuth = Depends(
|
|
186
|
+
user: UserOAuth = Depends(get_api_user),
|
|
186
187
|
db: AsyncSession = Depends(get_async_db),
|
|
187
188
|
) -> Response:
|
|
188
189
|
"""
|
|
@@ -226,7 +227,7 @@ async def delete_dataset(
|
|
|
226
227
|
async def export_dataset(
|
|
227
228
|
project_id: int,
|
|
228
229
|
dataset_id: int,
|
|
229
|
-
user: UserOAuth = Depends(
|
|
230
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
230
231
|
db: AsyncSession = Depends(get_async_db),
|
|
231
232
|
) -> DatasetExport | None:
|
|
232
233
|
"""
|
|
@@ -252,7 +253,7 @@ async def export_dataset(
|
|
|
252
253
|
async def import_dataset(
|
|
253
254
|
project_id: int,
|
|
254
255
|
dataset: DatasetImport,
|
|
255
|
-
user: UserOAuth = Depends(
|
|
256
|
+
user: UserOAuth = Depends(get_api_user),
|
|
256
257
|
db: AsyncSession = Depends(get_async_db),
|
|
257
258
|
) -> DatasetRead | None:
|
|
258
259
|
"""
|
|
@@ -14,7 +14,7 @@ from fractal_server.app.models.v2 import HistoryRun
|
|
|
14
14
|
from fractal_server.app.models.v2 import HistoryUnit
|
|
15
15
|
from fractal_server.app.models.v2 import JobV2
|
|
16
16
|
from fractal_server.app.models.v2 import TaskV2
|
|
17
|
-
from fractal_server.app.routes.auth import
|
|
17
|
+
from fractal_server.app.routes.auth import get_api_guest
|
|
18
18
|
from fractal_server.app.routes.pagination import PaginationRequest
|
|
19
19
|
from fractal_server.app.routes.pagination import PaginationResponse
|
|
20
20
|
from fractal_server.app.routes.pagination import get_pagination_params
|
|
@@ -71,7 +71,7 @@ async def get_workflow_tasks_statuses(
|
|
|
71
71
|
project_id: int,
|
|
72
72
|
dataset_id: int,
|
|
73
73
|
workflow_id: int,
|
|
74
|
-
user: UserOAuth = Depends(
|
|
74
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
75
75
|
db: AsyncSession = Depends(get_async_db),
|
|
76
76
|
) -> JSONResponse:
|
|
77
77
|
# Access control
|
|
@@ -186,7 +186,7 @@ async def get_history_run_list(
|
|
|
186
186
|
project_id: int,
|
|
187
187
|
dataset_id: int,
|
|
188
188
|
workflowtask_id: int,
|
|
189
|
-
user: UserOAuth = Depends(
|
|
189
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
190
190
|
db: AsyncSession = Depends(get_async_db),
|
|
191
191
|
) -> list[HistoryRunReadAggregated]:
|
|
192
192
|
# Access control
|
|
@@ -279,7 +279,7 @@ async def get_history_run_units(
|
|
|
279
279
|
workflowtask_id: int,
|
|
280
280
|
history_run_id: int,
|
|
281
281
|
unit_status: HistoryUnitStatus | None = None,
|
|
282
|
-
user: UserOAuth = Depends(
|
|
282
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
283
283
|
db: AsyncSession = Depends(get_async_db),
|
|
284
284
|
pagination: PaginationRequest = Depends(get_pagination_params),
|
|
285
285
|
) -> PaginationResponse[HistoryUnitRead]:
|
|
@@ -339,7 +339,7 @@ async def get_history_images(
|
|
|
339
339
|
dataset_id: int,
|
|
340
340
|
workflowtask_id: int,
|
|
341
341
|
request_body: ImageQuery,
|
|
342
|
-
user: UserOAuth = Depends(
|
|
342
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
343
343
|
db: AsyncSession = Depends(get_async_db),
|
|
344
344
|
pagination: PaginationRequest = Depends(get_pagination_params),
|
|
345
345
|
) -> ImagePage:
|
|
@@ -423,7 +423,7 @@ async def get_history_images(
|
|
|
423
423
|
async def get_image_log(
|
|
424
424
|
project_id: int,
|
|
425
425
|
request_data: ImageLogsRequest,
|
|
426
|
-
user: UserOAuth = Depends(
|
|
426
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
427
427
|
db: AsyncSession = Depends(get_async_db),
|
|
428
428
|
) -> JSONResponse:
|
|
429
429
|
# Access control
|
|
@@ -482,7 +482,7 @@ async def get_history_unit_log(
|
|
|
482
482
|
history_unit_id: int,
|
|
483
483
|
workflowtask_id: int,
|
|
484
484
|
dataset_id: int,
|
|
485
|
-
user: UserOAuth = Depends(
|
|
485
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
486
486
|
db: AsyncSession = Depends(get_async_db),
|
|
487
487
|
) -> JSONResponse:
|
|
488
488
|
# Access control
|
|
@@ -535,7 +535,7 @@ async def get_history_unit_log(
|
|
|
535
535
|
async def get_dataset_history(
|
|
536
536
|
project_id: int,
|
|
537
537
|
dataset_id: int,
|
|
538
|
-
user: UserOAuth = Depends(
|
|
538
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
539
539
|
db: AsyncSession = Depends(get_async_db),
|
|
540
540
|
) -> list[HistoryRunRead]:
|
|
541
541
|
"""
|
|
@@ -12,7 +12,8 @@ from fractal_server.app.db import AsyncSession
|
|
|
12
12
|
from fractal_server.app.db import get_async_db
|
|
13
13
|
from fractal_server.app.models import HistoryImageCache
|
|
14
14
|
from fractal_server.app.models import UserOAuth
|
|
15
|
-
from fractal_server.app.routes.auth import
|
|
15
|
+
from fractal_server.app.routes.auth import get_api_guest
|
|
16
|
+
from fractal_server.app.routes.auth import get_api_user
|
|
16
17
|
from fractal_server.app.routes.pagination import PaginationRequest
|
|
17
18
|
from fractal_server.app.routes.pagination import PaginationResponse
|
|
18
19
|
from fractal_server.app.routes.pagination import get_pagination_params
|
|
@@ -62,7 +63,7 @@ async def post_new_image(
|
|
|
62
63
|
project_id: int,
|
|
63
64
|
dataset_id: int,
|
|
64
65
|
new_image: SingleImage,
|
|
65
|
-
user: UserOAuth = Depends(
|
|
66
|
+
user: UserOAuth = Depends(get_api_user),
|
|
66
67
|
db: AsyncSession = Depends(get_async_db),
|
|
67
68
|
) -> Response:
|
|
68
69
|
output = await _get_dataset_check_access(
|
|
@@ -118,7 +119,7 @@ async def query_dataset_images(
|
|
|
118
119
|
dataset_id: int,
|
|
119
120
|
query: ImageQueryWithZarrUrl | None = None,
|
|
120
121
|
pagination: PaginationRequest = Depends(get_pagination_params),
|
|
121
|
-
user: UserOAuth = Depends(
|
|
122
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
122
123
|
db: AsyncSession = Depends(get_async_db),
|
|
123
124
|
) -> ImagePage:
|
|
124
125
|
page = pagination.page
|
|
@@ -193,7 +194,7 @@ async def delete_dataset_images(
|
|
|
193
194
|
project_id: int,
|
|
194
195
|
dataset_id: int,
|
|
195
196
|
zarr_url: str,
|
|
196
|
-
user: UserOAuth = Depends(
|
|
197
|
+
user: UserOAuth = Depends(get_api_user),
|
|
197
198
|
db: AsyncSession = Depends(get_async_db),
|
|
198
199
|
) -> Response:
|
|
199
200
|
output = await _get_dataset_check_access(
|
|
@@ -241,7 +242,7 @@ async def patch_dataset_image(
|
|
|
241
242
|
project_id: int,
|
|
242
243
|
dataset_id: int,
|
|
243
244
|
image_update: SingleImageUpdate,
|
|
244
|
-
user: UserOAuth = Depends(
|
|
245
|
+
user: UserOAuth = Depends(get_api_user),
|
|
245
246
|
db: AsyncSession = Depends(get_async_db),
|
|
246
247
|
):
|
|
247
248
|
output = await _get_dataset_check_access(
|
|
@@ -15,7 +15,8 @@ from fractal_server.app.db import get_async_db
|
|
|
15
15
|
from fractal_server.app.models import UserOAuth
|
|
16
16
|
from fractal_server.app.models.v2 import JobV2
|
|
17
17
|
from fractal_server.app.models.v2 import LinkUserProjectV2
|
|
18
|
-
from fractal_server.app.routes.auth import
|
|
18
|
+
from fractal_server.app.routes.auth import get_api_guest
|
|
19
|
+
from fractal_server.app.routes.auth import get_api_user
|
|
19
20
|
from fractal_server.app.routes.aux._job import _write_shutdown_file
|
|
20
21
|
from fractal_server.app.routes.aux._runner import _check_shutdown_is_supported
|
|
21
22
|
from fractal_server.app.schemas.v2 import JobRead
|
|
@@ -41,12 +42,12 @@ router = APIRouter()
|
|
|
41
42
|
|
|
42
43
|
@router.get("/job/", response_model=list[JobRead])
|
|
43
44
|
async def get_user_jobs(
|
|
44
|
-
user: UserOAuth = Depends(
|
|
45
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
45
46
|
log: bool = True,
|
|
46
47
|
db: AsyncSession = Depends(get_async_db),
|
|
47
48
|
) -> list[JobRead]:
|
|
48
49
|
"""
|
|
49
|
-
Returns all the jobs
|
|
50
|
+
Returns all the jobs from projects linked to the current user
|
|
50
51
|
"""
|
|
51
52
|
stm = (
|
|
52
53
|
select(JobV2)
|
|
@@ -73,7 +74,7 @@ async def get_user_jobs(
|
|
|
73
74
|
async def get_workflow_jobs(
|
|
74
75
|
project_id: int,
|
|
75
76
|
workflow_id: int,
|
|
76
|
-
user: UserOAuth = Depends(
|
|
77
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
77
78
|
db: AsyncSession = Depends(get_async_db),
|
|
78
79
|
) -> list[JobRead] | None:
|
|
79
80
|
"""
|
|
@@ -100,7 +101,7 @@ async def get_latest_job(
|
|
|
100
101
|
project_id: int,
|
|
101
102
|
workflow_id: int,
|
|
102
103
|
dataset_id: int,
|
|
103
|
-
user: UserOAuth = Depends(
|
|
104
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
104
105
|
db: AsyncSession = Depends(get_async_db),
|
|
105
106
|
) -> JobRead:
|
|
106
107
|
await _get_workflow_check_access(
|
|
@@ -136,7 +137,7 @@ async def read_job(
|
|
|
136
137
|
project_id: int,
|
|
137
138
|
job_id: int,
|
|
138
139
|
show_tmp_logs: bool = False,
|
|
139
|
-
user: UserOAuth = Depends(
|
|
140
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
140
141
|
db: AsyncSession = Depends(get_async_db),
|
|
141
142
|
) -> JobRead | None:
|
|
142
143
|
"""
|
|
@@ -169,7 +170,7 @@ async def read_job(
|
|
|
169
170
|
async def download_job_logs(
|
|
170
171
|
project_id: int,
|
|
171
172
|
job_id: int,
|
|
172
|
-
user: UserOAuth = Depends(
|
|
173
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
173
174
|
db: AsyncSession = Depends(get_async_db),
|
|
174
175
|
) -> StreamingResponse:
|
|
175
176
|
"""
|
|
@@ -200,7 +201,7 @@ async def download_job_logs(
|
|
|
200
201
|
)
|
|
201
202
|
async def get_job_list(
|
|
202
203
|
project_id: int,
|
|
203
|
-
user: UserOAuth = Depends(
|
|
204
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
204
205
|
log: bool = True,
|
|
205
206
|
db: AsyncSession = Depends(get_async_db),
|
|
206
207
|
) -> list[JobRead] | None:
|
|
@@ -234,7 +235,7 @@ async def get_job_list(
|
|
|
234
235
|
async def stop_job(
|
|
235
236
|
project_id: int,
|
|
236
237
|
job_id: int,
|
|
237
|
-
user: UserOAuth = Depends(
|
|
238
|
+
user: UserOAuth = Depends(get_api_user),
|
|
238
239
|
db: AsyncSession = Depends(get_async_db),
|
|
239
240
|
) -> Response:
|
|
240
241
|
"""
|