fractal-server 2.19.0__tar.gz → 2.19.0a1__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.19.0 → fractal_server-2.19.0a1}/PKG-INFO +1 -1
- fractal_server-2.19.0a1/fractal_server/__init__.py +1 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/dataset.py +4 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/job.py +0 -4
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/task_group.py +0 -4
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/workflow.py +0 -2
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/workflowtask.py +0 -3
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -6
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/__init__.py +2 -0
- fractal_server-2.19.0a1/fractal_server/app/routes/api/v2/status_legacy.py +156 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/submit.py +1 -3
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/task_collection.py +0 -2
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/task_collection_pixi.py +0 -2
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -6
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/workflow.py +1 -1
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/workflowtask.py +6 -1
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/workflow.py +0 -2
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/workflowtask.py +0 -5
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/submit_workflow.py +2 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/pyproject.toml +2 -2
- fractal_server-2.19.0/fractal_server/__init__.py +0 -1
- fractal_server-2.19.0/fractal_server/migrations/versions/18a26fcdea5d_drop_dataset_history.py +0 -41
- fractal_server-2.19.0/fractal_server/migrations/versions/1bf8785755f9_add_description_to_workflow_and_.py +0 -53
- fractal_server-2.19.0/fractal_server/migrations/versions/cfd13f7954e7_add_fractal_server_version_to_jobv2_and_.py +0 -52
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/LICENSE +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/README.md +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/__main__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/alembic.ini +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/db/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/linkusergroup.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/linkuserproject.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/security.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/accounting.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/history.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/profile.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/project.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/resource.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/task.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/_aux_functions.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/job.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/profile.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/resource.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/sharing.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/task.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/alive.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/settings.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/_aux_functions_sharing.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/dataset.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/history.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/images.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/job.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/pre_submission_checks.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/project.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/sharing.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/task.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/task_group.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/task_version_update.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/auth/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/auth/current_user.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/auth/group.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/auth/login.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/auth/oauth.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/auth/register.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/auth/router.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/auth/users.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/auth/viewer_paths.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/aux/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/aux/_job.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/aux/_runner.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/aux/_versions.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/aux/validate_user_profile.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/pagination.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/user.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/user_group.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/accounting.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/dataset.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/dumps.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/history.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/job.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/manifest.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/profile.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/project.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/resource.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/sharing.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/status_legacy.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/task.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/task_collection.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/task_group.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/security/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/security/signup_email.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/shutdown.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/config/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/config/_data.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/config/_database.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/config/_email.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/config/_main.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/config/_oauth.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/config/_settings_config.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/data_migrations/tools.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/exceptions.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/gunicorn_fractal.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/images/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/images/models.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/images/status_tools.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/images/tools.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/logger.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/main.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/env.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/naming_convention.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/068496367952_drop_taskgroup_venv_size_and_files_.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/0f5f85bb2ae7_add_pre_pinned_packages.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/1a83a5260664_rename.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/40d6d6511b20_add_index_to_history_models.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/45fbb391d7af_make_resource_id_fk_non_nullable.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/49d0856e9569_drop_table.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/5fb08bf05b14_drop_taskv2_source.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/7673fe18c05d_remove_project_dir_server_default.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/7910eed4cf97_user_project_dirs_and_usergroup_viewer_.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/791ce783d3d8_add_indices.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/88270f589c9b_add_prevent_new_submissions.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/969d84257cac_add_historyrun_task_id.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/981d588fe248_add_executor_error_log.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/b3ffb095f973_json_to_jsonb.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/b7477cc98f45_2_18_1.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/bc0e8b3327a7_project_sharing.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/caba9fb1ea5e_drop_useroauth_user_settings_id.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/e0e717ae2f26_delete_linkuserproject_ondelete_project.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/e53dc51fdf93_add_useroauth_is_guest.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/f0702066b007_one_submitted_job_per_dataset.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/py.typed +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/components.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/config/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/config/_local.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/config/_slurm.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/config/slurm_mem_to_MB.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/exceptions.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/base_runner.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/call_command_wrapper.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/local/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/local/get_local_config.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/local/runner.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_common/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_common/_batching.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_common/_job_states.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_common/base_slurm_runner.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_common/get_slurm_config.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_common/remote.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_common/slurm_config.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_common/slurm_job_task_models.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_ssh/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_ssh/run_subprocess.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_ssh/runner.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_ssh/tar_commands.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_sudo/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/executors/slurm_sudo/runner.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/filenames.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/set_start_and_last_task_index.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/task_files.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/_local.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/_slurm_ssh.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/_slurm_sudo.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/db_tools.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/deduplicate_list.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/merge_outputs.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/runner.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/runner_functions.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/task_interface.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/versions.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/ssh/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/ssh/_fabric.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/string_tools.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/syringe.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/config/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/config/_pixi.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/config/_python.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/utils.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/local/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/local/_utils.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/local/collect.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/local/collect_pixi.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/local/deactivate.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/local/deactivate_pixi.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/local/delete.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/local/reactivate.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/local/reactivate_pixi.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/ssh/collect.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/ssh/collect_pixi.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/ssh/deactivate_pixi.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/ssh/delete.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/ssh/reactivate_pixi.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/templates/5_pip_install_from_freeze.sh +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/templates/pixi_1_extract.sh +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/templates/pixi_2_install.sh +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/templates/pixi_3_post_install.sh +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/utils_background.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/utils_database.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/utils_package_names.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/utils_pixi.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/tasks/v2/utils_templates.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/types/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/types/validators/__init__.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/types/validators/_common_validators.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/types/validators/_filter_validators.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/types/validators/_workflow_task_arguments_validators.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/urls.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/utils.py +0 -0
- {fractal_server-2.19.0 → fractal_server-2.19.0a1}/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.19.
|
|
3
|
+
Version: 2.19.0a1
|
|
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>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__VERSION__ = "2.19.0a1"
|
|
@@ -27,6 +27,10 @@ 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
|
+
|
|
30
34
|
timestamp_created: datetime = Field(
|
|
31
35
|
default_factory=get_timestamp,
|
|
32
36
|
sa_column=Column(DateTime(timezone=True), nullable=False),
|
|
@@ -5,7 +5,6 @@ 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
|
|
9
8
|
from sqlmodel import Field
|
|
10
9
|
from sqlmodel import Index
|
|
11
10
|
from sqlmodel import SQLModel
|
|
@@ -45,9 +44,6 @@ class JobV2(SQLModel, table=True):
|
|
|
45
44
|
project_dump: dict[str, Any] = Field(
|
|
46
45
|
sa_column=Column(JSONB, nullable=False)
|
|
47
46
|
)
|
|
48
|
-
fractal_server_version: str = Field(
|
|
49
|
-
sa_column=Column(String, server_default="pre-2.19.0", nullable=False)
|
|
50
|
-
)
|
|
51
47
|
|
|
52
48
|
worker_init: str | None = None
|
|
53
49
|
working_dir: str | None = None
|
{fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/task_group.py
RENAMED
|
@@ -4,7 +4,6 @@ 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
|
|
8
7
|
from sqlmodel import Field
|
|
9
8
|
from sqlmodel import Relationship
|
|
10
9
|
from sqlmodel import SQLModel
|
|
@@ -152,6 +151,3 @@ class TaskGroupActivityV2(SQLModel, table=True):
|
|
|
152
151
|
default=None,
|
|
153
152
|
sa_column=Column(DateTime(timezone=True)),
|
|
154
153
|
)
|
|
155
|
-
fractal_server_version: str = Field(
|
|
156
|
-
sa_column=Column(String, server_default="pre-2.19.0", nullable=False)
|
|
157
|
-
)
|
{fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/v2/workflowtask.py
RENAMED
|
@@ -39,6 +39,3 @@ 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)
|
|
@@ -5,7 +5,6 @@ from fastapi import HTTPException
|
|
|
5
5
|
from fastapi import Response
|
|
6
6
|
from fastapi import status
|
|
7
7
|
|
|
8
|
-
from fractal_server import __VERSION__
|
|
9
8
|
from fractal_server.app.db import AsyncSession
|
|
10
9
|
from fractal_server.app.db import get_async_db
|
|
11
10
|
from fractal_server.app.models import UserOAuth
|
|
@@ -94,7 +93,6 @@ async def deactivate_task_group(
|
|
|
94
93
|
),
|
|
95
94
|
timestamp_started=get_timestamp(),
|
|
96
95
|
timestamp_ended=get_timestamp(),
|
|
97
|
-
fractal_server_version=__VERSION__,
|
|
98
96
|
)
|
|
99
97
|
db.add(task_group)
|
|
100
98
|
db.add(task_group_activity)
|
|
@@ -110,7 +108,6 @@ async def deactivate_task_group(
|
|
|
110
108
|
pkg_name=task_group.pkg_name,
|
|
111
109
|
version=task_group.version,
|
|
112
110
|
timestamp_started=get_timestamp(),
|
|
113
|
-
fractal_server_version=__VERSION__,
|
|
114
111
|
)
|
|
115
112
|
db.add(task_group_activity)
|
|
116
113
|
await db.commit()
|
|
@@ -191,7 +188,6 @@ async def reactivate_task_group(
|
|
|
191
188
|
),
|
|
192
189
|
timestamp_started=get_timestamp(),
|
|
193
190
|
timestamp_ended=get_timestamp(),
|
|
194
|
-
fractal_server_version=__VERSION__,
|
|
195
191
|
)
|
|
196
192
|
db.add(task_group)
|
|
197
193
|
db.add(task_group_activity)
|
|
@@ -215,7 +211,6 @@ async def reactivate_task_group(
|
|
|
215
211
|
pkg_name=task_group.pkg_name,
|
|
216
212
|
version=task_group.version,
|
|
217
213
|
timestamp_started=get_timestamp(),
|
|
218
|
-
fractal_server_version=__VERSION__,
|
|
219
214
|
)
|
|
220
215
|
db.add(task_group_activity)
|
|
221
216
|
await db.commit()
|
|
@@ -269,7 +264,6 @@ async def delete_task_group(
|
|
|
269
264
|
pkg_name=task_group.pkg_name,
|
|
270
265
|
version=(task_group.version or "N/A"),
|
|
271
266
|
timestamp_started=get_timestamp(),
|
|
272
|
-
fractal_server_version=__VERSION__,
|
|
273
267
|
)
|
|
274
268
|
db.add(task_group_activity)
|
|
275
269
|
await db.commit()
|
{fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/__init__.py
RENAMED
|
@@ -14,6 +14,7 @@ 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
|
|
17
18
|
from .submit import router as submit_job_router
|
|
18
19
|
from .task import router as task_router
|
|
19
20
|
from .task_collection import router as task_collection_router
|
|
@@ -36,6 +37,7 @@ router_api.include_router(sharing_router, tags=["Project Sharing"])
|
|
|
36
37
|
router_api.include_router(project_router, tags=["Project"])
|
|
37
38
|
router_api.include_router(submit_job_router, tags=["Job"])
|
|
38
39
|
router_api.include_router(history_router, tags=["History"])
|
|
40
|
+
router_api.include_router(status_legacy_router, tags=["Status Legacy"])
|
|
39
41
|
|
|
40
42
|
|
|
41
43
|
settings = Inject(get_settings)
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
from fastapi import APIRouter
|
|
2
|
+
from fastapi import Depends
|
|
3
|
+
|
|
4
|
+
from fractal_server.app.db import AsyncSession
|
|
5
|
+
from fractal_server.app.db import get_async_db
|
|
6
|
+
from fractal_server.app.models import UserOAuth
|
|
7
|
+
from fractal_server.app.models.v2 import JobV2
|
|
8
|
+
from fractal_server.app.routes.auth import get_api_guest
|
|
9
|
+
from fractal_server.app.schemas.v2.sharing import ProjectPermissions
|
|
10
|
+
from fractal_server.app.schemas.v2.status_legacy import LegacyStatusRead
|
|
11
|
+
from fractal_server.app.schemas.v2.status_legacy import WorkflowTaskStatusType
|
|
12
|
+
from fractal_server.logger import set_logger
|
|
13
|
+
|
|
14
|
+
from ._aux_functions import _get_dataset_check_access
|
|
15
|
+
from ._aux_functions import _get_submitted_jobs_statement
|
|
16
|
+
from ._aux_functions import _get_workflow_check_access
|
|
17
|
+
|
|
18
|
+
router = APIRouter()
|
|
19
|
+
|
|
20
|
+
logger = set_logger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@router.get(
|
|
24
|
+
"/project/{project_id}/status-legacy/",
|
|
25
|
+
response_model=LegacyStatusRead,
|
|
26
|
+
)
|
|
27
|
+
async def get_workflowtask_status(
|
|
28
|
+
project_id: int,
|
|
29
|
+
dataset_id: int,
|
|
30
|
+
workflow_id: int,
|
|
31
|
+
user: UserOAuth = Depends(get_api_guest),
|
|
32
|
+
db: AsyncSession = Depends(get_async_db),
|
|
33
|
+
) -> LegacyStatusRead | None:
|
|
34
|
+
"""
|
|
35
|
+
Extract the status of all `WorkflowTaskV2` of a given `WorkflowV2` that ran
|
|
36
|
+
on a given `DatasetV2`.
|
|
37
|
+
|
|
38
|
+
*NOTE*: the current endpoint is not guaranteed to provide consistent
|
|
39
|
+
results if the workflow task list is modified in a non-trivial way
|
|
40
|
+
(that is, by adding intermediate tasks, removing tasks, or changing their
|
|
41
|
+
order). See fractal-server GitHub issues: 793, 1083.
|
|
42
|
+
"""
|
|
43
|
+
# Get the dataset DB entry
|
|
44
|
+
output = await _get_dataset_check_access(
|
|
45
|
+
project_id=project_id,
|
|
46
|
+
dataset_id=dataset_id,
|
|
47
|
+
user_id=user.id,
|
|
48
|
+
required_permissions=ProjectPermissions.READ,
|
|
49
|
+
db=db,
|
|
50
|
+
)
|
|
51
|
+
dataset = output["dataset"]
|
|
52
|
+
|
|
53
|
+
# Get the workflow DB entry
|
|
54
|
+
workflow = await _get_workflow_check_access(
|
|
55
|
+
project_id=project_id,
|
|
56
|
+
workflow_id=workflow_id,
|
|
57
|
+
user_id=user.id,
|
|
58
|
+
required_permissions=ProjectPermissions.READ,
|
|
59
|
+
db=db,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# Check whether there exists a submitted job associated to this
|
|
63
|
+
# workflow/dataset pair. If it does exist, it will be used later.
|
|
64
|
+
# If there are multiple jobs, raise an error.
|
|
65
|
+
res = await db.execute(
|
|
66
|
+
_get_submitted_jobs_statement()
|
|
67
|
+
.where(JobV2.dataset_id == dataset_id)
|
|
68
|
+
.where(JobV2.workflow_id == workflow_id)
|
|
69
|
+
)
|
|
70
|
+
running_job = res.scalars().one_or_none()
|
|
71
|
+
|
|
72
|
+
# Initialize empty dictionary for WorkflowTaskV2 status
|
|
73
|
+
workflow_tasks_status_dict: dict = {}
|
|
74
|
+
|
|
75
|
+
# Lowest priority: read status from DB, which corresponds to jobs that are
|
|
76
|
+
# not running
|
|
77
|
+
history = dataset.history
|
|
78
|
+
for history_item in history:
|
|
79
|
+
wftask_id = history_item["workflowtask"]["id"]
|
|
80
|
+
wftask_status = history_item["status"]
|
|
81
|
+
workflow_tasks_status_dict[wftask_id] = wftask_status
|
|
82
|
+
|
|
83
|
+
if running_job is None:
|
|
84
|
+
# If no job is running, the chronological-last history item is also the
|
|
85
|
+
# positional-last workflow task to be included in the response.
|
|
86
|
+
if len(history) > 0:
|
|
87
|
+
last_valid_wftask_id = history[-1]["workflowtask"]["id"]
|
|
88
|
+
else:
|
|
89
|
+
last_valid_wftask_id = None
|
|
90
|
+
else:
|
|
91
|
+
# If a job is running, then gather more up-to-date information
|
|
92
|
+
|
|
93
|
+
# Mid priority: Set all WorkflowTask's that are part of the running job
|
|
94
|
+
# as "submitted"
|
|
95
|
+
start = running_job.first_task_index
|
|
96
|
+
end = running_job.last_task_index + 1
|
|
97
|
+
|
|
98
|
+
running_job_wftasks = workflow.task_list[start:end]
|
|
99
|
+
running_job_statuses = [
|
|
100
|
+
workflow_tasks_status_dict.get(wft.id, None)
|
|
101
|
+
for wft in running_job_wftasks
|
|
102
|
+
]
|
|
103
|
+
try:
|
|
104
|
+
first_submitted_index = running_job_statuses.index(
|
|
105
|
+
WorkflowTaskStatusType.SUBMITTED
|
|
106
|
+
)
|
|
107
|
+
except ValueError:
|
|
108
|
+
logger.warning(
|
|
109
|
+
f"Job {running_job.id} is submitted but its task list does not"
|
|
110
|
+
f" contain a {WorkflowTaskStatusType.SUBMITTED} task."
|
|
111
|
+
)
|
|
112
|
+
first_submitted_index = 0
|
|
113
|
+
|
|
114
|
+
for wftask in running_job_wftasks[first_submitted_index:]:
|
|
115
|
+
workflow_tasks_status_dict[wftask.id] = (
|
|
116
|
+
WorkflowTaskStatusType.SUBMITTED
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
# The last workflow task that is included in the submitted job is also
|
|
120
|
+
# the positional-last workflow task to be included in the response.
|
|
121
|
+
try:
|
|
122
|
+
last_valid_wftask_id = workflow.task_list[end - 1].id
|
|
123
|
+
except IndexError as e:
|
|
124
|
+
logger.warning(
|
|
125
|
+
f"Handled IndexError in `get_workflowtask_status` ({str(e)})."
|
|
126
|
+
)
|
|
127
|
+
logger.warning(
|
|
128
|
+
"Additional information: "
|
|
129
|
+
f"{running_job.first_task_index=}; "
|
|
130
|
+
f"{running_job.last_task_index=}; "
|
|
131
|
+
f"{len(workflow.task_list)=}; "
|
|
132
|
+
f"{dataset_id=}; "
|
|
133
|
+
f"{workflow_id=}."
|
|
134
|
+
)
|
|
135
|
+
last_valid_wftask_id = None
|
|
136
|
+
logger.warning(f"Now setting {last_valid_wftask_id=}.")
|
|
137
|
+
|
|
138
|
+
# Based on previously-gathered information, clean up the response body
|
|
139
|
+
clean_workflow_tasks_status_dict = {}
|
|
140
|
+
for wf_task in workflow.task_list:
|
|
141
|
+
wf_task_status = workflow_tasks_status_dict.get(wf_task.id)
|
|
142
|
+
if wf_task_status is None:
|
|
143
|
+
# If a wftask ID was not found, ignore it and continue
|
|
144
|
+
continue
|
|
145
|
+
clean_workflow_tasks_status_dict[str(wf_task.id)] = wf_task_status
|
|
146
|
+
if wf_task_status == WorkflowTaskStatusType.FAILED:
|
|
147
|
+
# Starting from the beginning of `workflow.task_list`, stop the
|
|
148
|
+
# first time that you hit a failed job
|
|
149
|
+
break
|
|
150
|
+
if wf_task.id == last_valid_wftask_id:
|
|
151
|
+
# Starting from the beginning of `workflow.task_list`, stop the
|
|
152
|
+
# first time that you hit `last_valid_wftask_id``
|
|
153
|
+
break
|
|
154
|
+
|
|
155
|
+
response_body = LegacyStatusRead(status=clean_workflow_tasks_status_dict)
|
|
156
|
+
return response_body
|
{fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/submit.py
RENAMED
|
@@ -11,7 +11,6 @@ from fastapi import status
|
|
|
11
11
|
from sqlmodel import select
|
|
12
12
|
from sqlmodel import update
|
|
13
13
|
|
|
14
|
-
from fractal_server import __VERSION__
|
|
15
14
|
from fractal_server.app.db import AsyncSession
|
|
16
15
|
from fractal_server.app.db import get_async_db
|
|
17
16
|
from fractal_server.app.models import Profile
|
|
@@ -217,12 +216,11 @@ async def submit_job(
|
|
|
217
216
|
dataset.model_dump_json(exclude={"images", "history"})
|
|
218
217
|
),
|
|
219
218
|
workflow_dump=json.loads(
|
|
220
|
-
workflow.model_dump_json(exclude={"task_list"
|
|
219
|
+
workflow.model_dump_json(exclude={"task_list"})
|
|
221
220
|
),
|
|
222
221
|
project_dump=json.loads(
|
|
223
222
|
project.model_dump_json(exclude={"resource_id"})
|
|
224
223
|
),
|
|
225
|
-
fractal_server_version=__VERSION__,
|
|
226
224
|
**job_create.model_dump(),
|
|
227
225
|
)
|
|
228
226
|
|
|
@@ -14,7 +14,6 @@ from pydantic import BaseModel
|
|
|
14
14
|
from pydantic import ValidationError
|
|
15
15
|
from pydantic import model_validator
|
|
16
16
|
|
|
17
|
-
from fractal_server import __VERSION__
|
|
18
17
|
from fractal_server.app.db import AsyncSession
|
|
19
18
|
from fractal_server.app.db import get_async_db
|
|
20
19
|
from fractal_server.app.models import UserOAuth
|
|
@@ -333,7 +332,6 @@ async def collect_tasks_pip(
|
|
|
333
332
|
action=TaskGroupActivityAction.COLLECT,
|
|
334
333
|
pkg_name=task_group.pkg_name,
|
|
335
334
|
version=task_group.version,
|
|
336
|
-
fractal_server_version=__VERSION__,
|
|
337
335
|
)
|
|
338
336
|
db.add(task_group_activity)
|
|
339
337
|
await db.commit()
|
|
@@ -10,7 +10,6 @@ from fastapi import Response
|
|
|
10
10
|
from fastapi import UploadFile
|
|
11
11
|
from fastapi import status
|
|
12
12
|
|
|
13
|
-
from fractal_server import __VERSION__
|
|
14
13
|
from fractal_server.app.db import AsyncSession
|
|
15
14
|
from fractal_server.app.db import get_async_db
|
|
16
15
|
from fractal_server.app.models import UserOAuth
|
|
@@ -183,7 +182,6 @@ async def collect_task_pixi(
|
|
|
183
182
|
action=TaskGroupActivityAction.COLLECT,
|
|
184
183
|
pkg_name=task_group.pkg_name,
|
|
185
184
|
version=task_group.version,
|
|
186
|
-
fractal_server_version=__VERSION__,
|
|
187
185
|
)
|
|
188
186
|
db.add(task_group_activity)
|
|
189
187
|
await db.commit()
|
|
@@ -5,7 +5,6 @@ from fastapi import HTTPException
|
|
|
5
5
|
from fastapi import Response
|
|
6
6
|
from fastapi import status
|
|
7
7
|
|
|
8
|
-
from fractal_server import __VERSION__
|
|
9
8
|
from fractal_server.app.db import AsyncSession
|
|
10
9
|
from fractal_server.app.db import get_async_db
|
|
11
10
|
from fractal_server.app.models import UserOAuth
|
|
@@ -100,7 +99,6 @@ async def deactivate_task_group(
|
|
|
100
99
|
),
|
|
101
100
|
timestamp_started=get_timestamp(),
|
|
102
101
|
timestamp_ended=get_timestamp(),
|
|
103
|
-
fractal_server_version=__VERSION__,
|
|
104
102
|
)
|
|
105
103
|
db.add(task_group)
|
|
106
104
|
db.add(task_group_activity)
|
|
@@ -116,7 +114,6 @@ async def deactivate_task_group(
|
|
|
116
114
|
pkg_name=task_group.pkg_name,
|
|
117
115
|
version=task_group.version,
|
|
118
116
|
timestamp_started=get_timestamp(),
|
|
119
|
-
fractal_server_version=__VERSION__,
|
|
120
117
|
)
|
|
121
118
|
task_group.active = False
|
|
122
119
|
db.add(task_group)
|
|
@@ -205,7 +202,6 @@ async def reactivate_task_group(
|
|
|
205
202
|
),
|
|
206
203
|
timestamp_started=get_timestamp(),
|
|
207
204
|
timestamp_ended=get_timestamp(),
|
|
208
|
-
fractal_server_version=__VERSION__,
|
|
209
205
|
)
|
|
210
206
|
db.add(task_group)
|
|
211
207
|
db.add(task_group_activity)
|
|
@@ -229,7 +225,6 @@ async def reactivate_task_group(
|
|
|
229
225
|
pkg_name=task_group.pkg_name,
|
|
230
226
|
version=task_group.version,
|
|
231
227
|
timestamp_started=get_timestamp(),
|
|
232
|
-
fractal_server_version=__VERSION__,
|
|
233
228
|
)
|
|
234
229
|
db.add(task_group_activity)
|
|
235
230
|
await db.commit()
|
|
@@ -293,7 +288,6 @@ async def delete_task_group(
|
|
|
293
288
|
pkg_name=task_group.pkg_name,
|
|
294
289
|
version=(task_group.version or "N/A"),
|
|
295
290
|
timestamp_started=get_timestamp(),
|
|
296
|
-
fractal_server_version=__VERSION__,
|
|
297
291
|
)
|
|
298
292
|
db.add(task_group_activity)
|
|
299
293
|
await db.commit()
|
{fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/routes/api/v2/workflowtask.py
RENAMED
|
@@ -193,8 +193,13 @@ async def update_workflowtask(
|
|
|
193
193
|
if not actual_args:
|
|
194
194
|
actual_args = None
|
|
195
195
|
setattr(db_wf_task, key, actual_args)
|
|
196
|
-
|
|
196
|
+
elif key in ["meta_parallel", "meta_non_parallel", "type_filters"]:
|
|
197
197
|
setattr(db_wf_task, key, value)
|
|
198
|
+
else:
|
|
199
|
+
raise HTTPException(
|
|
200
|
+
status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
|
|
201
|
+
detail=f"patch_workflow_task endpoint cannot set {key=}",
|
|
202
|
+
)
|
|
198
203
|
|
|
199
204
|
await db.commit()
|
|
200
205
|
await db.refresh(db_wf_task)
|
|
@@ -29,7 +29,6 @@ class WorkflowRead(BaseModel):
|
|
|
29
29
|
task_list: list[WorkflowTaskRead]
|
|
30
30
|
project: ProjectRead
|
|
31
31
|
timestamp_created: AwareDatetime
|
|
32
|
-
description: str | None
|
|
33
32
|
|
|
34
33
|
@field_serializer("timestamp_created")
|
|
35
34
|
def serialize_datetime(v: datetime) -> str:
|
|
@@ -45,7 +44,6 @@ class WorkflowUpdate(BaseModel):
|
|
|
45
44
|
|
|
46
45
|
name: NonEmptyStr = None
|
|
47
46
|
reordered_workflowtask_ids: ListUniqueNonNegativeInt | None = None
|
|
48
|
-
description: str | None = None
|
|
49
47
|
|
|
50
48
|
|
|
51
49
|
class WorkflowImport(BaseModel):
|
{fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/schemas/v2/workflowtask.py
RENAMED
|
@@ -49,9 +49,6 @@ class WorkflowTaskRead(BaseModel):
|
|
|
49
49
|
task_id: int
|
|
50
50
|
task: TaskRead
|
|
51
51
|
|
|
52
|
-
alias: str | None = None
|
|
53
|
-
description: str | None = None
|
|
54
|
-
|
|
55
52
|
|
|
56
53
|
class WorkflowTaskReadWithWarning(WorkflowTaskRead):
|
|
57
54
|
warning: str | None = None
|
|
@@ -65,8 +62,6 @@ class WorkflowTaskUpdate(BaseModel):
|
|
|
65
62
|
args_non_parallel: WorkflowTaskArgument | None = None
|
|
66
63
|
args_parallel: WorkflowTaskArgument | None = None
|
|
67
64
|
type_filters: TypeFilters = None
|
|
68
|
-
description: str | None = None
|
|
69
|
-
alias: str | None = None
|
|
70
65
|
|
|
71
66
|
|
|
72
67
|
class WorkflowTaskImport(BaseModel):
|
{fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/runner/v2/submit_workflow.py
RENAMED
|
@@ -13,6 +13,7 @@ from typing import Protocol
|
|
|
13
13
|
|
|
14
14
|
from sqlalchemy.orm import Session as DBSyncSession
|
|
15
15
|
|
|
16
|
+
from fractal_server import __VERSION__
|
|
16
17
|
from fractal_server.app.db import DB
|
|
17
18
|
from fractal_server.app.models.v2 import DatasetV2
|
|
18
19
|
from fractal_server.app.models.v2 import JobV2
|
|
@@ -223,6 +224,7 @@ def submit_workflow(
|
|
|
223
224
|
f'Start execution of workflow "{workflow.name}"; '
|
|
224
225
|
f"more logs at {str(log_file_path)}"
|
|
225
226
|
)
|
|
227
|
+
logger.debug(f"fractal_server.__VERSION__: {__VERSION__}")
|
|
226
228
|
logger.debug(f"Resource name: {resource.name}")
|
|
227
229
|
logger.debug(f"Profile name: {profile.name}")
|
|
228
230
|
logger.debug(f"Username: {profile.username}")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fractal-server"
|
|
3
|
-
version = "2.19.
|
|
3
|
+
version = "2.19.0a1"
|
|
4
4
|
description = "Backend component of the Fractal analytics platform"
|
|
5
5
|
authors = [
|
|
6
6
|
{ name="Tommaso Comparin", email="tommaso.comparin@exact-lab.it" },
|
|
@@ -92,7 +92,7 @@ filterwarnings = [
|
|
|
92
92
|
markers = ["container", "ssh", "fails_on_macos", "oauth"]
|
|
93
93
|
|
|
94
94
|
[tool.bumpver]
|
|
95
|
-
current_version = "2.19.
|
|
95
|
+
current_version = "2.19.0a1"
|
|
96
96
|
version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
|
|
97
97
|
commit_message = "bump version {old_version} -> {new_version}"
|
|
98
98
|
commit = true
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__VERSION__ = "2.19.0"
|
fractal_server-2.19.0/fractal_server/migrations/versions/18a26fcdea5d_drop_dataset_history.py
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"""drop dataset.history
|
|
2
|
-
|
|
3
|
-
Revision ID: 18a26fcdea5d
|
|
4
|
-
Revises: 1bf8785755f9
|
|
5
|
-
Create Date: 2026-01-29 10:15:18.467384
|
|
6
|
-
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import sqlalchemy as sa
|
|
10
|
-
from alembic import op
|
|
11
|
-
from sqlalchemy.dialects import postgresql
|
|
12
|
-
|
|
13
|
-
# revision identifiers, used by Alembic.
|
|
14
|
-
revision = "18a26fcdea5d"
|
|
15
|
-
down_revision = "1bf8785755f9"
|
|
16
|
-
branch_labels = None
|
|
17
|
-
depends_on = None
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def upgrade() -> None:
|
|
21
|
-
# ### commands auto generated by Alembic - please adjust! ###
|
|
22
|
-
with op.batch_alter_table("datasetv2", schema=None) as batch_op:
|
|
23
|
-
batch_op.drop_column("history")
|
|
24
|
-
|
|
25
|
-
# ### end Alembic commands ###
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def downgrade() -> None:
|
|
29
|
-
# ### commands auto generated by Alembic - please adjust! ###
|
|
30
|
-
with op.batch_alter_table("datasetv2", schema=None) as batch_op:
|
|
31
|
-
batch_op.add_column(
|
|
32
|
-
sa.Column(
|
|
33
|
-
"history",
|
|
34
|
-
postgresql.JSONB(astext_type=sa.Text()),
|
|
35
|
-
server_default=sa.text("'[]'::json"),
|
|
36
|
-
autoincrement=False,
|
|
37
|
-
nullable=False,
|
|
38
|
-
)
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
# ### end Alembic commands ###
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"""Add description to workflow and description and alias to workflow task
|
|
2
|
-
|
|
3
|
-
Revision ID: 1bf8785755f9
|
|
4
|
-
Revises: 5fb08bf05b14
|
|
5
|
-
Create Date: 2026-01-26 09:03:18.396841
|
|
6
|
-
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import sqlalchemy as sa
|
|
10
|
-
import sqlmodel
|
|
11
|
-
from alembic import op
|
|
12
|
-
|
|
13
|
-
# revision identifiers, used by Alembic.
|
|
14
|
-
revision = "1bf8785755f9"
|
|
15
|
-
down_revision = "5fb08bf05b14"
|
|
16
|
-
branch_labels = None
|
|
17
|
-
depends_on = None
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def upgrade() -> None:
|
|
21
|
-
# ### commands auto generated by Alembic - please adjust! ###
|
|
22
|
-
with op.batch_alter_table("workflowtaskv2", schema=None) as batch_op:
|
|
23
|
-
batch_op.add_column(
|
|
24
|
-
sa.Column(
|
|
25
|
-
"alias", sqlmodel.sql.sqltypes.AutoString(), nullable=True
|
|
26
|
-
)
|
|
27
|
-
)
|
|
28
|
-
batch_op.add_column(
|
|
29
|
-
sa.Column(
|
|
30
|
-
"description", sqlmodel.sql.sqltypes.AutoString(), nullable=True
|
|
31
|
-
)
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
with op.batch_alter_table("workflowv2", schema=None) as batch_op:
|
|
35
|
-
batch_op.add_column(
|
|
36
|
-
sa.Column(
|
|
37
|
-
"description", sqlmodel.sql.sqltypes.AutoString(), nullable=True
|
|
38
|
-
)
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
# ### end Alembic commands ###
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def downgrade() -> None:
|
|
45
|
-
# ### commands auto generated by Alembic - please adjust! ###
|
|
46
|
-
with op.batch_alter_table("workflowv2", schema=None) as batch_op:
|
|
47
|
-
batch_op.drop_column("description")
|
|
48
|
-
|
|
49
|
-
with op.batch_alter_table("workflowtaskv2", schema=None) as batch_op:
|
|
50
|
-
batch_op.drop_column("description")
|
|
51
|
-
batch_op.drop_column("alias")
|
|
52
|
-
|
|
53
|
-
# ### end Alembic commands ###
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"""add fractal_server_version to jobv2 and taskgroupactivityv2
|
|
2
|
-
|
|
3
|
-
Revision ID: cfd13f7954e7
|
|
4
|
-
Revises: 18a26fcdea5d
|
|
5
|
-
Create Date: 2026-01-29 12:33:00.064562
|
|
6
|
-
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import sqlalchemy as sa
|
|
10
|
-
from alembic import op
|
|
11
|
-
|
|
12
|
-
# revision identifiers, used by Alembic.
|
|
13
|
-
revision = "cfd13f7954e7"
|
|
14
|
-
down_revision = "18a26fcdea5d"
|
|
15
|
-
branch_labels = None
|
|
16
|
-
depends_on = None
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def upgrade() -> None:
|
|
20
|
-
# ### commands auto generated by Alembic - please adjust! ###
|
|
21
|
-
with op.batch_alter_table("jobv2", schema=None) as batch_op:
|
|
22
|
-
batch_op.add_column(
|
|
23
|
-
sa.Column(
|
|
24
|
-
"fractal_server_version",
|
|
25
|
-
sa.String(),
|
|
26
|
-
server_default="pre-2.19.0",
|
|
27
|
-
nullable=False,
|
|
28
|
-
)
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
with op.batch_alter_table("taskgroupactivityv2", schema=None) as batch_op:
|
|
32
|
-
batch_op.add_column(
|
|
33
|
-
sa.Column(
|
|
34
|
-
"fractal_server_version",
|
|
35
|
-
sa.String(),
|
|
36
|
-
server_default="pre-2.19.0",
|
|
37
|
-
nullable=False,
|
|
38
|
-
)
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
# ### end Alembic commands ###
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def downgrade() -> None:
|
|
45
|
-
# ### commands auto generated by Alembic - please adjust! ###
|
|
46
|
-
with op.batch_alter_table("taskgroupactivityv2", schema=None) as batch_op:
|
|
47
|
-
batch_op.drop_column("fractal_server_version")
|
|
48
|
-
|
|
49
|
-
with op.batch_alter_table("jobv2", schema=None) as batch_op:
|
|
50
|
-
batch_op.drop_column("fractal_server_version")
|
|
51
|
-
|
|
52
|
-
# ### end Alembic commands ###
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/linkusergroup.py
RENAMED
|
File without changes
|
{fractal_server-2.19.0 → fractal_server-2.19.0a1}/fractal_server/app/models/linkuserproject.py
RENAMED
|
File without changes
|
|
File without changes
|