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]}']}
```
Updated the FolderDetails.vue file to replace lowercase component tags with their uppercase counterparts for better adherence to Vue component naming conventions. This change enhances code readability and maintains consistency across the project.
Updated the LibraryDataset.vue file to replace all instances of native button and form input elements with BButton and BFormInput components from Bootstrap Vue. This change enhances the UI consistency and leverages Bootstrap Vue's styling capabilities.
- Updated the textarea component to use BFormTextarea for consistency.
- Added spacing and formatting adjustments for better readability.
- Enhanced the toggle functionality for expanded text display.
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>
Changed the default value of sortDesc from true to false to ensure that the table does not sort in descending order by default. This improves the initial user experience when interacting with the table.
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.
- Simplified BPagination component in LibrariesList.vue by consolidating props.
- Removed aria-controls attribute from BPagination in LibraryFolder.vue for cleaner markup.
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.
fetchCollectionDetails now returns GalaxyApiResult instead of throwing,
which lets collectionElementsStore track errors as ApiError with HTTP
status codes. getCollectionById and getDetailedCollectionById now gate on
existing errors with retry logic for transient statuses (429, 5xx),
matching the pattern from keyedCache and historyStore. Updated all
callers of fetchCollectionDetails and loadHistoryById to handle the new
return types.
getHistoryById triggers loadHistoryById when a history is missing, but if
the fetch fails the error was thrown via rethrowSimple without being
tracked. The computed would re-trigger the fetch on every render, causing
an infinite request loop. Now getHistoryByIdFromServer returns a
GalaxyApiResult instead of throwing, loadHistoryById tracks errors in
historyLoadErrors, and getHistoryById gates on existing errors with retry
logic for transient HTTP status codes (429, 5xx).
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>
Move RETRYABLE_STATUSES, MAX_RETRIES, and isRetryableApiError from
keyedCache.ts into simple-error.ts so they can be reused by other stores
that need the same retry logic. Also add GalaxyApiResult<T> discriminated
union type which makes API errors visible in function signatures instead
of relying on thrown exceptions.
When a dataset fetch fails permanently (e.g. 404 or 403), the view now
displays an error alert instead of spinning forever waiting for data that
will never arrive.
Switches the 12 cache-backed fetch handlers across 6 store/api files
from rethrowSimple to rethrowSimpleWithStatus so that the keyedCache
retry logic can distinguish retryable server errors from permanent
client errors. The cancelWorkflowScheduling handler (a DELETE, not a
cache handler) keeps using rethrowSimple.