Fix the errors like the following with FastAPI 0.132.0:
```
FAILED lib/galaxy_test/api/test_workflows.py::TestWorkflowsApi::test_run_runtime_parameters_after_pause - AssertionError: Request status code (400) was not expected value 200. Body was {'err_msg': "Input should be a valid dictionary or object to extract fields from in ('body',)", 'err_code': 400008, 'validation_errors': ['{"type": "model_attributes_type", "loc": ["body"], "msg": "Input should be a valid dictionary or object to extract fields from", "input": [123, 34, 97, 99, 116, 105, 111, 110, 34, 58, 32, 116, 114, 117, 101, 125]}']}
```
The Celery data fetch path (setup_fetch_data -> fetch_data ->
set_job_metadata -> finish_job) bypassed quota checks that the
traditional job runner path enforced via JobWrapper.enqueue().
This caused users over their disk quota to still be able to
fetch remote data when Celery task execution was enabled.
Add _pause_job_if_over_quota() call in setup_fetch_data after
object store IDs are assigned, matching the traditional path.
Propagate the paused state through the task chain so downstream
tasks (fetch_data, set_job_metadata, finish_job) gracefully
short-circuit when the job has been paused.
Fixes#21642
The workflow engine failed to map flat list/sample_sheet collections over
paired_or_unpaired tool inputs. The API tool execution path worked because
it explicitly translates paired_or_unpaired to single_datasets and wraps
elements in PromoteCollectionElementToCollectionAdapter. The workflow path
was missing both steps.
Two fixes in workflow/modules.py:
- _find_collections_to_match: translate paired_or_unpaired subcollection
type to single_datasets for flat collections (mirrors basic.py:2675)
- ToolModule.execute callback: wrap flat DCEs in adapter when mapping
type is single_datasets
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Updated the index reference in the `populate_library_folder_from_import_dir` method to correctly select datasets by using `row_index` instead of `rowindex`. This change ensures that the correct dataset is selected during the export process in the library tests.
- Introduced a wait for the dataset picker to ensure it is visible before interaction.
- Updated the sort selector method to use the new g-table sortable class for improved functionality.
- Added a sleep for UX rendering after selecting items from the history modal.
Remove `default` and positional `None` arguments from `Field()` calls
inside `Annotated[]` types, which trigger warnings in Pydantic v2.
The default values are moved to field assignments (`= None`) at the
usage sites instead.
For type aliases used as generic parameters (NotRequired), the concrete
subclasses now override fields with explicit defaults to preserve the
original optional behavior.
create() now uses admin API to ensure user exists instead of
navigating to /user/create Mako form. login() establishes browser
session via PUT /api_internal/login using page.evaluate(fetch(...))
to share Playwright's cookie context.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tool_shed/webapp/api/ is dead code — Phase 0 removed all route
registration. Zero imports reference the package. -1497 lines.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use configured tool_shed_url instead of deprecated web.url_for() which
returns a placeholder string in ASGI/FastAPI mode.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DataMetaFilter.filter_options() returned empty list when the referenced
dataset was missing or invalid, hiding all options. Now returns all
options (matching existing behavior when metadata is unset). Also
preserve other_values context in populate_model.py exception handlers.
Fixes#21904
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Initialize `parameters`, `template_macro_params`, `_macro_paths`, and
`ports` in `Tool.__init__` so they always exist as attributes. Update
`ToolParameterBundle` protocol to reflect that `parameters` may be
`None`. Replace defensive `hasattr`/`getattr` patterns with direct
attribute access and `None` comparisons.
Fixes https://github.com/galaxyproject/galaxy/issues/21843
- Changed the selector for libraries list in navigation.yml to '#g-table-libraries_list' for consistency with GTable.
- Updated the element selection in navigates_galaxy.py to use the new GTable structure, ensuring proper handling of empty rows.
gxformat2 0.22.0 natively handles content_source/content_id in
from_galaxy_native export and URL strings in run: fields during
import. This removes the _to_format2_with_preserved_links placeholder
workaround and the client_convert=False requirement for URL subworkflow
imports.
When enabled, subworkflow steps whose subworkflow has source_metadata
(URL or TRS origin) will emit content_source/content_id references
instead of embedding the full subworkflow, enabling roundtrip
import/export. Supports both .ga and format2 export styles.
Enable workflow import (.ga and gxformat2) where subworkflow steps
reference external workflows via URL, TRS URL, or TRS ID instead of
embedding the full subworkflow definition inline.
New `content_source` field on subworkflow steps declares resolution
strategy: "url" for HTTP/HTTPS/base64 URLs, "trs_url" for TRS API
URLs, "trs_id" for TRS server + tool ID + version. Fallback URL
detection from content_id supports gxformat2 `run:` references
without content_source.
Source metadata (url, trs_tool_id, etc.) is preserved on each fetched
subworkflow. Cycle prevention via resolving_urls frozenset threaded
through the build chain.