fractal-server 2.17.1a0__tar.gz → 2.17.1a1__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.17.1a0 → fractal_server-2.17.1a1}/PKG-INFO +1 -1
- fractal_server-2.17.1a1/fractal_server/__init__.py +1 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/__init__.py +0 -1
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/security.py +1 -14
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/project.py +1 -4
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/task_group.py +1 -4
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/shutdown.py +23 -19
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/config/_main.py +1 -1
- fractal_server-2.17.1a1/fractal_server/migrations/versions/45fbb391d7af_make_resource_id_fk_non_nullable.py +46 -0
- fractal_server-2.17.1a1/fractal_server/migrations/versions/49d0856e9569_drop_table.py +63 -0
- fractal_server-2.17.1a1/fractal_server/migrations/versions/7673fe18c05d_remove_project_dir_server_default.py +29 -0
- fractal_server-2.17.1a1/fractal_server/migrations/versions/caba9fb1ea5e_drop_useroauth_user_settings_id.py +49 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/pyproject.toml +3 -3
- fractal_server-2.17.1a0/fractal_server/__init__.py +0 -1
- fractal_server-2.17.1a0/fractal_server/app/models/user_settings.py +0 -37
- fractal_server-2.17.1a0/fractal_server/data_migrations/2_17_0.py +0 -339
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/LICENSE +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/README.md +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/__main__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/alembic.ini +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/db/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/linkusergroup.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/linkuserproject.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/accounting.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/dataset.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/history.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/job.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/profile.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/resource.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/task.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/workflow.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/workflowtask.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/_aux_functions.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/accounting.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/impersonate.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/job.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/profile.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/project.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/resource.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/task.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/task_group.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/admin/v2/task_group_lifecycle.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/_aux_functions.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/_aux_functions_history.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/_aux_functions_task_lifecycle.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/_aux_functions_task_version_update.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/_aux_functions_tasks.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/_aux_task_group_disambiguation.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/dataset.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/history.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/images.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/job.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/pre_submission_checks.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/project.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/status_legacy.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/submit.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/task.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/task_collection.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/task_collection_custom.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/task_collection_pixi.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/task_group.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/task_group_lifecycle.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/task_version_update.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/workflow.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/workflow_import.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/api/v2/workflowtask.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/auth/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/auth/_aux_auth.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/auth/current_user.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/auth/group.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/auth/login.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/auth/oauth.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/auth/register.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/auth/router.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/auth/users.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/aux/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/aux/_job.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/aux/_runner.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/aux/validate_user_profile.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/routes/pagination.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/user.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/user_group.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/accounting.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/dataset.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/dumps.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/history.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/job.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/manifest.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/profile.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/project.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/resource.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/status_legacy.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/task.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/task_collection.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/task_group.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/workflow.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/schemas/v2/workflowtask.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/security/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/security/signup_email.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/config/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/config/_data.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/config/_database.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/config/_email.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/config/_oauth.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/config/_settings_config.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/data_migrations/README.md +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/data_migrations/tools.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/exceptions.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/gunicorn_fractal.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/images/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/images/models.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/images/status_tools.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/images/tools.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/logger.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/main.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/env.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/naming_convention.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/034a469ec2eb_task_groups.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/091b01f51f88_add_usergroup_and_linkusergroup_table.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/0f5f85bb2ae7_add_pre_pinned_packages.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/19eca0dd47a9_user_settings_project_dir.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/1a83a5260664_rename.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/1eac13a26c83_drop_v1_tables.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/316140ff7ee1_remove_usersettings_cache_dir.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/47351f8c7ebc_drop_dataset_filters.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/4c308bcaea2b_add_task_args_schema_and_task_args_.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/4cedeb448a53_workflowtask_foreign_keys_not_nullables.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/501961cfcd85_remove_link_between_v1_and_v2_tasks_.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/50a13d6138fd_initial_schema.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/5bf02391cfef_v2.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/70e77f1c38b0_add_applyworkflow_first_task_index_and_.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/71eefd1dd202_add_slurm_accounts.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/791ce783d3d8_add_indices.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/83bc2ad3ffcc_2_17_0.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/84bf0fffde30_add_dumps_to_applyworkflow.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/8e8f227a3e36_update_taskv2_post_2_7_0.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/8f79bd162e35_add_docs_info_and_docs_link_to_task_.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/94a47ea2d3ff_remove_cache_dir_slurm_user_and_slurm_.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/969d84257cac_add_historyrun_task_id.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/97f444d47249_add_applyworkflow_project_dump.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/981d588fe248_add_executor_error_log.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/99ea79d9e5d2_add_dataset_history.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/9c5ae74c9b98_add_user_settings_table.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/9db60297b8b2_set_ondelete.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/9fd26a2b0de4_add_workflow_timestamp_created.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/a7f4d6137b53_add_workflow_dump_to_applyworkflow.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/af1ef1c83c9b_add_accounting_tables.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/af8673379a5c_drop_old_filter_columns.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/b1e7f7a1ff71_task_group_for_pixi.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/b3ffb095f973_json_to_jsonb.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/c90a7c76e996_job_id_in_history_run.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/d256a7379ab8_taskgroup_activity_and_venv_info_to_.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/d4fe3708d309_make_applyworkflow_workflow_dump_non_.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/da2cb2ac4255_user_group_viewer_paths.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/db09233ad13a_split_filters_and_keep_old_columns.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/e75cac726012_make_applyworkflow_start_timestamp_not_.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/e81103413827_add_job_type_filters.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/efa89c30e0a4_add_project_timestamp_created.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/f37aceb45062_make_historyunit_logfile_required.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/f384e1c0cf5d_drop_task_default_args_columns.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/migrations/versions/fbce16ff4e47_new_history_items.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/py.typed +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/components.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/config/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/config/_local.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/config/_slurm.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/config/slurm_mem_to_MB.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/exceptions.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/base_runner.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/call_command_wrapper.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/local/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/local/get_local_config.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/local/runner.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_common/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_common/_batching.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_common/_job_states.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_common/base_slurm_runner.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_common/get_slurm_config.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_common/remote.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_common/slurm_config.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_common/slurm_job_task_models.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_ssh/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_ssh/run_subprocess.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_ssh/runner.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_ssh/tar_commands.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_sudo/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_sudo/_subprocess_run_as_user.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/executors/slurm_sudo/runner.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/filenames.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/set_start_and_last_task_index.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/task_files.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/_local.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/_slurm_ssh.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/_slurm_sudo.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/db_tools.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/deduplicate_list.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/merge_outputs.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/runner.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/runner_functions.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/submit_workflow.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/v2/task_interface.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/runner/versions.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/ssh/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/ssh/_fabric.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/string_tools.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/syringe.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/config/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/config/_pixi.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/config/_python.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/utils.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/local/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/local/_utils.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/local/collect.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/local/collect_pixi.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/local/deactivate.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/local/deactivate_pixi.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/local/delete.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/local/reactivate.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/local/reactivate_pixi.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/ssh/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/ssh/_pixi_slurm_ssh.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/ssh/_utils.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/ssh/collect.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/ssh/collect_pixi.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/ssh/deactivate.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/ssh/deactivate_pixi.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/ssh/delete.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/ssh/reactivate.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/ssh/reactivate_pixi.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/templates/1_create_venv.sh +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/templates/2_pip_install.sh +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/templates/3_pip_freeze.sh +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/templates/4_pip_show.sh +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/templates/5_get_venv_size_and_file_number.sh +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/templates/6_pip_install_from_freeze.sh +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/templates/pixi_1_extract.sh +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/templates/pixi_2_install.sh +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/templates/pixi_3_post_install.sh +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/utils_background.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/utils_database.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/utils_package_names.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/utils_pixi.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/utils_python_interpreter.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/tasks/v2/utils_templates.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/types/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/types/validators/__init__.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/types/validators/_common_validators.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/types/validators/_filter_validators.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/types/validators/_workflow_task_arguments_validators.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/urls.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/utils.py +0 -0
- {fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/zip_tools.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__VERSION__ = "2.17.1a1"
|
|
@@ -95,24 +95,11 @@ class UserOAuth(SQLModel, table=True):
|
|
|
95
95
|
ondelete="RESTRICT",
|
|
96
96
|
)
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
project_dir: str = Field(
|
|
100
|
-
sa_column=Column(
|
|
101
|
-
String,
|
|
102
|
-
server_default="/PLACEHOLDER",
|
|
103
|
-
nullable=False,
|
|
104
|
-
)
|
|
105
|
-
)
|
|
98
|
+
project_dir: str
|
|
106
99
|
slurm_accounts: list[str] = Field(
|
|
107
100
|
sa_column=Column(ARRAY(String), server_default="{}"),
|
|
108
101
|
)
|
|
109
102
|
|
|
110
|
-
# TODO-2.17.1: remove
|
|
111
|
-
user_settings_id: int | None = Field(
|
|
112
|
-
foreign_key="user_settings.id",
|
|
113
|
-
default=None,
|
|
114
|
-
)
|
|
115
|
-
|
|
116
103
|
|
|
117
104
|
class UserGroup(SQLModel, table=True):
|
|
118
105
|
"""
|
|
@@ -15,10 +15,7 @@ class ProjectV2(SQLModel, table=True):
|
|
|
15
15
|
id: int | None = Field(default=None, primary_key=True)
|
|
16
16
|
name: str
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
resource_id: int | None = Field(
|
|
20
|
-
foreign_key="resource.id", default=None, ondelete="RESTRICT"
|
|
21
|
-
)
|
|
18
|
+
resource_id: int = Field(foreign_key="resource.id", ondelete="RESTRICT")
|
|
22
19
|
timestamp_created: datetime = Field(
|
|
23
20
|
default_factory=get_timestamp,
|
|
24
21
|
sa_column=Column(DateTime(timezone=True), nullable=False),
|
{fractal_server-2.17.1a0 → fractal_server-2.17.1a1}/fractal_server/app/models/v2/task_group.py
RENAMED
|
@@ -42,10 +42,7 @@ class TaskGroupV2(SQLModel, table=True):
|
|
|
42
42
|
user_group_id: int | None = Field(
|
|
43
43
|
foreign_key="usergroup.id", default=None, ondelete="SET NULL"
|
|
44
44
|
)
|
|
45
|
-
|
|
46
|
-
resource_id: int | None = Field(
|
|
47
|
-
foreign_key="resource.id", default=None, ondelete="RESTRICT"
|
|
48
|
-
)
|
|
45
|
+
resource_id: int = Field(foreign_key="resource.id", ondelete="RESTRICT")
|
|
49
46
|
|
|
50
47
|
origin: str
|
|
51
48
|
pkg_name: str
|
|
@@ -12,44 +12,48 @@ from fractal_server.syringe import Inject
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
async def cleanup_after_shutdown(*, jobsV2: list[int], logger_name: str):
|
|
15
|
+
settings = Inject(get_settings)
|
|
15
16
|
logger = get_logger(logger_name)
|
|
16
17
|
logger.info("Cleanup function after shutdown")
|
|
17
|
-
|
|
18
|
+
stm_objects = (
|
|
18
19
|
select(JobV2)
|
|
19
20
|
.where(JobV2.id.in_(jobsV2))
|
|
20
21
|
.where(JobV2.status == JobStatusTypeV2.SUBMITTED)
|
|
21
22
|
)
|
|
23
|
+
stm_ids = (
|
|
24
|
+
select(JobV2.id)
|
|
25
|
+
.where(JobV2.id.in_(jobsV2))
|
|
26
|
+
.where(JobV2.status == JobStatusTypeV2.SUBMITTED)
|
|
27
|
+
)
|
|
22
28
|
|
|
23
29
|
async for session in get_async_db():
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
for job in
|
|
30
|
+
# Write shutdown file for all jobs
|
|
31
|
+
jobs = (await session.execute(stm_objects)).scalars().all()
|
|
32
|
+
for job in jobs:
|
|
27
33
|
_write_shutdown_file(job=job)
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
# Wait for completion of all job - with a timeout
|
|
36
|
+
interval = settings.FRACTAL_GRACEFUL_SHUTDOWN_TIME / 20
|
|
31
37
|
t_start = time.perf_counter()
|
|
32
38
|
while (
|
|
33
39
|
time.perf_counter() - t_start
|
|
34
|
-
)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
if len(jobsV2_db) == 0:
|
|
40
|
-
logger.info(
|
|
41
|
-
"All jobs associated to this app are "
|
|
42
|
-
"either done or failed. Exit."
|
|
43
|
-
)
|
|
40
|
+
) <= settings.FRACTAL_GRACEFUL_SHUTDOWN_TIME:
|
|
41
|
+
job_ids = (await session.execute(stm_ids)).scalars().all()
|
|
42
|
+
if len(job_ids) == 0:
|
|
43
|
+
logger.info("All jobs are either done or failed. Exit.")
|
|
44
44
|
return
|
|
45
45
|
else:
|
|
46
|
-
logger.info(f"Some jobs are still 'submitted' {
|
|
46
|
+
logger.info(f"Some jobs are still 'submitted': {job_ids=}")
|
|
47
|
+
logger.info(f"Wait {interval:.4f} seconds before next check.")
|
|
48
|
+
time.sleep(interval)
|
|
47
49
|
logger.info(
|
|
48
50
|
"Graceful shutdown reached its maximum time, "
|
|
49
|
-
"but some jobs are still submitted"
|
|
51
|
+
"but some jobs are still submitted."
|
|
50
52
|
)
|
|
51
53
|
|
|
52
|
-
|
|
54
|
+
# Mark jobs as failed and update their logs.
|
|
55
|
+
jobs = (await session.execute(stm_objects)).scalars().all()
|
|
56
|
+
for job in jobs:
|
|
53
57
|
job.status = "failed"
|
|
54
58
|
job.log = (job.log or "") + "\nJob stopped due to app shutdown\n"
|
|
55
59
|
session.add(job)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""Make resource_id FK non-nullable
|
|
2
|
+
|
|
3
|
+
Revision ID: 45fbb391d7af
|
|
4
|
+
Revises: caba9fb1ea5e
|
|
5
|
+
Create Date: 2025-11-11 16:39:12.813766
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
import sqlalchemy as sa
|
|
9
|
+
from alembic import op
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "45fbb391d7af"
|
|
14
|
+
down_revision = "caba9fb1ea5e"
|
|
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("projectv2", schema=None) as batch_op:
|
|
22
|
+
batch_op.alter_column(
|
|
23
|
+
"resource_id", existing_type=sa.INTEGER(), nullable=False
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
with op.batch_alter_table("taskgroupv2", schema=None) as batch_op:
|
|
27
|
+
batch_op.alter_column(
|
|
28
|
+
"resource_id", existing_type=sa.INTEGER(), nullable=False
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# ### end Alembic commands ###
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def downgrade() -> None:
|
|
35
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
36
|
+
with op.batch_alter_table("taskgroupv2", schema=None) as batch_op:
|
|
37
|
+
batch_op.alter_column(
|
|
38
|
+
"resource_id", existing_type=sa.INTEGER(), nullable=True
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
with op.batch_alter_table("projectv2", schema=None) as batch_op:
|
|
42
|
+
batch_op.alter_column(
|
|
43
|
+
"resource_id", existing_type=sa.INTEGER(), nullable=True
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""Drop table
|
|
2
|
+
|
|
3
|
+
Revision ID: 49d0856e9569
|
|
4
|
+
Revises: 45fbb391d7af
|
|
5
|
+
Create Date: 2025-11-11 16:39:41.497832
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
import sqlalchemy as sa
|
|
9
|
+
from alembic import op
|
|
10
|
+
from sqlalchemy.dialects import postgresql
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "49d0856e9569"
|
|
14
|
+
down_revision = "45fbb391d7af"
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade() -> None:
|
|
20
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
21
|
+
op.drop_table("user_settings")
|
|
22
|
+
# ### end Alembic commands ###
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def downgrade() -> None:
|
|
26
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
27
|
+
op.create_table(
|
|
28
|
+
"user_settings",
|
|
29
|
+
sa.Column("id", sa.INTEGER(), autoincrement=True, nullable=False),
|
|
30
|
+
sa.Column(
|
|
31
|
+
"slurm_accounts",
|
|
32
|
+
postgresql.JSONB(astext_type=sa.Text()),
|
|
33
|
+
server_default=sa.text("'[]'::json"),
|
|
34
|
+
autoincrement=False,
|
|
35
|
+
nullable=False,
|
|
36
|
+
),
|
|
37
|
+
sa.Column(
|
|
38
|
+
"ssh_host", sa.VARCHAR(), autoincrement=False, nullable=True
|
|
39
|
+
),
|
|
40
|
+
sa.Column(
|
|
41
|
+
"ssh_username", sa.VARCHAR(), autoincrement=False, nullable=True
|
|
42
|
+
),
|
|
43
|
+
sa.Column(
|
|
44
|
+
"ssh_private_key_path",
|
|
45
|
+
sa.VARCHAR(),
|
|
46
|
+
autoincrement=False,
|
|
47
|
+
nullable=True,
|
|
48
|
+
),
|
|
49
|
+
sa.Column(
|
|
50
|
+
"ssh_tasks_dir", sa.VARCHAR(), autoincrement=False, nullable=True
|
|
51
|
+
),
|
|
52
|
+
sa.Column(
|
|
53
|
+
"ssh_jobs_dir", sa.VARCHAR(), autoincrement=False, nullable=True
|
|
54
|
+
),
|
|
55
|
+
sa.Column(
|
|
56
|
+
"slurm_user", sa.VARCHAR(), autoincrement=False, nullable=True
|
|
57
|
+
),
|
|
58
|
+
sa.Column(
|
|
59
|
+
"project_dir", sa.VARCHAR(), autoincrement=False, nullable=True
|
|
60
|
+
),
|
|
61
|
+
sa.PrimaryKeyConstraint("id", name=op.f("pk_user_settings")),
|
|
62
|
+
)
|
|
63
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Remove project_dir server_default
|
|
2
|
+
|
|
3
|
+
Revision ID: 7673fe18c05d
|
|
4
|
+
Revises: 49d0856e9569
|
|
5
|
+
Create Date: 2025-11-11 16:50:20.079193
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
from alembic import op
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
# revision identifiers, used by Alembic.
|
|
12
|
+
revision = "7673fe18c05d"
|
|
13
|
+
down_revision = "49d0856e9569"
|
|
14
|
+
branch_labels = None
|
|
15
|
+
depends_on = None
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def upgrade() -> None:
|
|
19
|
+
"""
|
|
20
|
+
Remove `server_default` for `project_dir` column - see
|
|
21
|
+
https://alembic.sqlalchemy.org/en/latest/ops.html#alembic.operations.Operations.alter_column.params.server_default
|
|
22
|
+
"""
|
|
23
|
+
with op.batch_alter_table("user_oauth") as batch_op:
|
|
24
|
+
batch_op.alter_column("project_dir", server_default=None)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def downgrade() -> None:
|
|
28
|
+
with op.batch_alter_table("user_oauth") as batch_op:
|
|
29
|
+
batch_op.alter_column("project_dir", server_default="/PLACEHOLDER")
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Drop UserOAuth.user_settings_id
|
|
2
|
+
|
|
3
|
+
Revision ID: caba9fb1ea5e
|
|
4
|
+
Revises: 83bc2ad3ffcc
|
|
5
|
+
Create Date: 2025-11-11 16:38:27.243693
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
import sqlalchemy as sa
|
|
9
|
+
from alembic import op
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "caba9fb1ea5e"
|
|
14
|
+
down_revision = "83bc2ad3ffcc"
|
|
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("user_oauth", schema=None) as batch_op:
|
|
22
|
+
batch_op.drop_constraint(
|
|
23
|
+
batch_op.f("fk_user_oauth_user_settings_id_user_settings"),
|
|
24
|
+
type_="foreignkey",
|
|
25
|
+
)
|
|
26
|
+
batch_op.drop_column("user_settings_id")
|
|
27
|
+
|
|
28
|
+
# ### end Alembic commands ###
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def downgrade() -> None:
|
|
32
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
33
|
+
with op.batch_alter_table("user_oauth", schema=None) as batch_op:
|
|
34
|
+
batch_op.add_column(
|
|
35
|
+
sa.Column(
|
|
36
|
+
"user_settings_id",
|
|
37
|
+
sa.INTEGER(),
|
|
38
|
+
autoincrement=False,
|
|
39
|
+
nullable=True,
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
batch_op.create_foreign_key(
|
|
43
|
+
batch_op.f("fk_user_oauth_user_settings_id_user_settings"),
|
|
44
|
+
"user_settings",
|
|
45
|
+
["user_settings_id"],
|
|
46
|
+
["id"],
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
# ### end Alembic commands ###
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "fractal-server"
|
|
3
|
-
version = "2.17.
|
|
3
|
+
version = "2.17.1a1"
|
|
4
4
|
description = "Backend component of the Fractal analytics platform"
|
|
5
5
|
authors = [
|
|
6
6
|
{ name="Tommaso Comparin", email="tommaso.comparin@exact-lab.it" },
|
|
@@ -94,7 +94,7 @@ filterwarnings = [
|
|
|
94
94
|
markers = ["container", "ssh", "fails_on_macos", "oauth"]
|
|
95
95
|
|
|
96
96
|
[tool.bumpver]
|
|
97
|
-
current_version = "2.17.
|
|
97
|
+
current_version = "2.17.1a1"
|
|
98
98
|
version_pattern = "MAJOR.MINOR.PATCH[PYTAGNUM]"
|
|
99
99
|
commit_message = "bump version {old_version} -> {new_version}"
|
|
100
100
|
commit = true
|
|
@@ -130,5 +130,5 @@ POSTGRES_USER="postgres"
|
|
|
130
130
|
POSTGRES_PASSWORD="postgres"
|
|
131
131
|
POSTGRES_DB="fractal_test"
|
|
132
132
|
FRACTAL_API_MAX_JOB_LIST_LENGTH=1
|
|
133
|
-
FRACTAL_GRACEFUL_SHUTDOWN_TIME=
|
|
133
|
+
FRACTAL_GRACEFUL_SHUTDOWN_TIME=0.05
|
|
134
134
|
FRACTAL_DEFAULT_GROUP_NAME="All"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__VERSION__ = "2.17.1a0"
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
from sqlalchemy import Column
|
|
2
|
-
from sqlalchemy.dialects.postgresql import JSONB
|
|
3
|
-
from sqlmodel import Field
|
|
4
|
-
from sqlmodel import SQLModel
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
# TODO-2.17.1: Drop `UserSettings`
|
|
8
|
-
class UserSettings(SQLModel, table=True):
|
|
9
|
-
"""
|
|
10
|
-
Comprehensive list of user settings.
|
|
11
|
-
|
|
12
|
-
Attributes:
|
|
13
|
-
id: ID of database object
|
|
14
|
-
slurm_accounts:
|
|
15
|
-
List of SLURM accounts, to be used upon Fractal job submission.
|
|
16
|
-
ssh_host: SSH-reachable host where a SLURM client is available.
|
|
17
|
-
ssh_username: User on `ssh_host`.
|
|
18
|
-
ssh_private_key_path: Path of private SSH key for `ssh_username`.
|
|
19
|
-
slurm_user: Local user, to be impersonated via `sudo -u`
|
|
20
|
-
project_dir: Folder where `slurm_user` can write.
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
__tablename__ = "user_settings"
|
|
24
|
-
|
|
25
|
-
id: int | None = Field(default=None, primary_key=True)
|
|
26
|
-
slurm_accounts: list[str] = Field(
|
|
27
|
-
sa_column=Column(JSONB, server_default="[]", nullable=False)
|
|
28
|
-
)
|
|
29
|
-
ssh_host: str | None = None
|
|
30
|
-
ssh_username: str | None = None
|
|
31
|
-
ssh_private_key_path: str | None = None
|
|
32
|
-
|
|
33
|
-
slurm_user: str | None = None
|
|
34
|
-
project_dir: str | None = None
|
|
35
|
-
|
|
36
|
-
ssh_tasks_dir: str | None = None
|
|
37
|
-
ssh_jobs_dir: str | None = None
|