galaxy-test-api 25.1.dev0__tar.gz → 25.1.2__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.
Files changed (68) hide show
  1. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/HISTORY.rst +119 -3
  2. {galaxy_test_api-25.1.dev0/galaxy_test_api.egg-info → galaxy_test_api-25.1.2}/PKG-INFO +120 -4
  3. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_dataset_collections.py +149 -0
  4. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_datasets.py +1 -1
  5. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_histories.py +12 -0
  6. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_history_contents.py +1 -1
  7. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_jobs.py +9 -9
  8. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_landing.py +93 -1
  9. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_pages.py +1 -1
  10. galaxy_test_api-25.1.2/galaxy_test/api/test_proxy.py +205 -0
  11. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_tags.py +1 -1
  12. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_tool_data.py +22 -3
  13. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_tool_execute.py +10 -2
  14. galaxy_test_api-25.1.2/galaxy_test/api/test_tool_output_tagging.py +67 -0
  15. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_tools.py +165 -3
  16. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_tours.py +16 -0
  17. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_users.py +2 -2
  18. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_workflows.py +632 -6
  19. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2/galaxy_test_api.egg-info}/PKG-INFO +120 -4
  20. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test_api.egg-info/SOURCES.txt +1 -0
  21. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/setup.cfg +1 -1
  22. galaxy_test_api-25.1.dev0/galaxy_test/api/test_proxy.py +0 -73
  23. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/LICENSE +0 -0
  24. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/MANIFEST.in +0 -0
  25. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/README.rst +0 -0
  26. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/dev-requirements.txt +0 -0
  27. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/__init__.py +0 -0
  28. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/__init__.py +0 -0
  29. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/_framework.py +0 -0
  30. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/conftest.py +0 -0
  31. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/cwl/__init__.py +0 -0
  32. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/embed_test_1.gxwf.yml +0 -0
  33. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/embed_test_1_tool.gxtool.yml +0 -0
  34. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/sharable.py +0 -0
  35. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_authenticate.py +0 -0
  36. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_configuration.py +0 -0
  37. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_container_resolution.py +0 -0
  38. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_datatypes.py +0 -0
  39. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_display_applications.py +0 -0
  40. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_drs.py +0 -0
  41. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_folder_contents.py +0 -0
  42. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_folders.py +0 -0
  43. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_framework.py +0 -0
  44. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_group_roles.py +0 -0
  45. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_group_users.py +0 -0
  46. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_groups.py +0 -0
  47. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_history_contents_provenance.py +0 -0
  48. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_item_tags.py +0 -0
  49. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_libraries.py +0 -0
  50. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_library_contents.py +0 -0
  51. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_licenses.py +0 -0
  52. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_page_revisions.py +0 -0
  53. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_roles.py +0 -0
  54. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_short_term_storage.py +0 -0
  55. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_tools_upload.py +0 -0
  56. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_unprivileged_tools.py +0 -0
  57. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_visualizations.py +0 -0
  58. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_webhooks.py +0 -0
  59. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_workflow_build_module.py +0 -0
  60. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_workflow_extraction.py +0 -0
  61. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_workflows_cwl.py +0 -0
  62. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/api/test_workflows_from_yaml.py +0 -0
  63. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test/py.typed +0 -0
  64. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test_api.egg-info/dependency_links.txt +0 -0
  65. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test_api.egg-info/requires.txt +0 -0
  66. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/galaxy_test_api.egg-info/top_level.txt +0 -0
  67. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/pyproject.toml +0 -0
  68. {galaxy_test_api-25.1.dev0 → galaxy_test_api-25.1.2}/test-requirements.txt +0 -0
@@ -3,11 +3,127 @@ History
3
3
 
4
4
  .. to_doc
5
5
 
6
- ---------
7
- 25.1.dev0
8
- ---------
6
+ -------------------
7
+ 25.1.2 (2026-03-09)
8
+ -------------------
9
+
10
+
11
+ =========
12
+ Bug fixes
13
+ =========
14
+
15
+ * Allow workflow download with missing file source references by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21814 <https://github.com/galaxyproject/galaxy/pull/21814>`_
16
+ * Fix pick_value output inheriting hidden state from input datasets by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21995 <https://github.com/galaxyproject/galaxy/pull/21995>`_
17
+
18
+ -------------------
19
+ 25.1.1 (2026-02-03)
20
+ -------------------
21
+
22
+
23
+ =========
24
+ Bug fixes
25
+ =========
9
26
 
27
+ * Sample sheet column fix by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21446 <https://github.com/galaxyproject/galaxy/pull/21446>`_
28
+ * Record input parameter invocation inputs by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21452 <https://github.com/galaxyproject/galaxy/pull/21452>`_
29
+ * Maintain column definitions on map over by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21468 <https://github.com/galaxyproject/galaxy/pull/21468>`_
30
+ * Fix subworkflow runs for disconnected required inputs with defaults by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21488 <https://github.com/galaxyproject/galaxy/pull/21488>`_
31
+ * Fix type annotation for invocation report ``errors`` field by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21508 <https://github.com/galaxyproject/galaxy/pull/21508>`_
32
+ * Fix job cache collection copy by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21558 <https://github.com/galaxyproject/galaxy/pull/21558>`_
33
+ * Fix option propagation for workflow inputs connected to multiple subworkflows by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21712 <https://github.com/galaxyproject/galaxy/pull/21712>`_
34
+ * Fix collection job state not preserved during history export/import by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21716 <https://github.com/galaxyproject/galaxy/pull/21716>`_
10
35
 
36
+ ============
37
+ Enhancements
38
+ ============
39
+
40
+ * Add database operation tool to convert sample sheets to list collections by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21625 <https://github.com/galaxyproject/galaxy/pull/21625>`_
41
+
42
+ -------------------
43
+ 25.1.0 (2025-12-12)
44
+ -------------------
45
+
46
+
47
+ =========
48
+ Bug fixes
49
+ =========
50
+
51
+ * Fix a transiently failing API test. by `@jmchilton <https://github.com/jmchilton>`_ in `#20278 <https://github.com/galaxyproject/galaxy/pull/20278>`_
52
+ * Fix `multiple="true"` data collection map over for shell_command tools by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20859 <https://github.com/galaxyproject/galaxy/pull/20859>`_
53
+ * Fix default conditional test parameters... by `@jmchilton <https://github.com/jmchilton>`_ in `#20942 <https://github.com/galaxyproject/galaxy/pull/20942>`_
54
+ * Test and fix CORS on exceptions by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21105 <https://github.com/galaxyproject/galaxy/pull/21105>`_
55
+ * Fix type annotation in test_run_workflow_use_cached_job_implicit_conv… by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21138 <https://github.com/galaxyproject/galaxy/pull/21138>`_
56
+ * Fix proxy endpoint encoding by `@davelopez <https://github.com/davelopez>`_ in `#21169 <https://github.com/galaxyproject/galaxy/pull/21169>`_
57
+ * Fix optional subworkflow input scheduling bug by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21435 <https://github.com/galaxyproject/galaxy/pull/21435>`_
58
+ * Maintain columns on sample sheet map over by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21436 <https://github.com/galaxyproject/galaxy/pull/21436>`_
59
+
60
+ ============
61
+ Enhancements
62
+ ============
63
+
64
+ * Don't serialize view of item in delete/purge request by `@mvdbeek <https://github.com/mvdbeek>`_ in `#18732 <https://github.com/galaxyproject/galaxy/pull/18732>`_
65
+ * Add tags to output datasets from tool form by `@PlushZ <https://github.com/PlushZ>`_ in `#19225 <https://github.com/galaxyproject/galaxy/pull/19225>`_
66
+ * Implement Sample Sheets by `@jmchilton <https://github.com/jmchilton>`_ in `#19305 <https://github.com/galaxyproject/galaxy/pull/19305>`_
67
+ * Consider collections in on_strings for parameters accepting multiple datasets by `@bernt-matthias <https://github.com/bernt-matthias>`_ in `#19817 <https://github.com/galaxyproject/galaxy/pull/19817>`_
68
+ * Empower Users to More Pragmatically Import Datasets & Collections From Tables by `@jmchilton <https://github.com/jmchilton>`_ in `#20288 <https://github.com/galaxyproject/galaxy/pull/20288>`_
69
+ * Prepare ``ToolBox.dynamic_tool_to_tool()`` for CWL formats by `@nsoranzo <https://github.com/nsoranzo>`_ in `#20364 <https://github.com/galaxyproject/galaxy/pull/20364>`_
70
+ * Test case for using URL-based workflow inputs with implicit conversions. by `@jmchilton <https://github.com/jmchilton>`_ in `#20509 <https://github.com/galaxyproject/galaxy/pull/20509>`_
71
+ * Implement Data Landing Requests by `@jmchilton <https://github.com/jmchilton>`_ in `#20592 <https://github.com/galaxyproject/galaxy/pull/20592>`_
72
+ * Clean up code from pyupgrade by `@nsoranzo <https://github.com/nsoranzo>`_ in `#20642 <https://github.com/galaxyproject/galaxy/pull/20642>`_
73
+ * Add more info to inheritance chain by `@arash77 <https://github.com/arash77>`_ in `#20701 <https://github.com/galaxyproject/galaxy/pull/20701>`_
74
+ * Attempt to reuse previously materialized datasets by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20718 <https://github.com/galaxyproject/galaxy/pull/20718>`_
75
+ * Add configfiles support and various enhancements for user defined tools by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20761 <https://github.com/galaxyproject/galaxy/pull/20761>`_
76
+ * Modernize tools in the filters/ dir by `@natefoo <https://github.com/natefoo>`_ in `#20840 <https://github.com/galaxyproject/galaxy/pull/20840>`_
77
+ * Replace tour_generator webhook with internal API and frontend by `@ahmedhamidawan <https://github.com/ahmedhamidawan>`_ in `#20868 <https://github.com/galaxyproject/galaxy/pull/20868>`_
78
+ * Allow addressing user defined tools in job config by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20932 <https://github.com/galaxyproject/galaxy/pull/20932>`_
79
+ * Limit admin requirement of selected tool data api endpoints by `@guerler <https://github.com/guerler>`_ in `#20949 <https://github.com/galaxyproject/galaxy/pull/20949>`_
80
+ * Allow sending and tracking landing request origin by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20957 <https://github.com/galaxyproject/galaxy/pull/20957>`_
81
+ * Track landing request with invocation by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20960 <https://github.com/galaxyproject/galaxy/pull/20960>`_
82
+ * Use workflow-style payload in data landing request by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21107 <https://github.com/galaxyproject/galaxy/pull/21107>`_
83
+ * Tighter API for tool run tagging. by `@jmchilton <https://github.com/jmchilton>`_ in `#21210 <https://github.com/galaxyproject/galaxy/pull/21210>`_
84
+
85
+ =============
86
+ Other changes
87
+ =============
88
+
89
+ * Merge `release_25.0` into `dev` by `@davelopez <https://github.com/davelopez>`_ in `#20484 <https://github.com/galaxyproject/galaxy/pull/20484>`_
90
+ * Sample Sheet Bug Fixes around Preserving Collection Metadata by `@jmchilton <https://github.com/jmchilton>`_ in `#20749 <https://github.com/galaxyproject/galaxy/pull/20749>`_
91
+ * Validate sample sheet column definitions in workflow definitions on backend. by `@jmchilton <https://github.com/jmchilton>`_ in `#20880 <https://github.com/galaxyproject/galaxy/pull/20880>`_
92
+ * Fix ``TOOL_WITH_SHELL_COMMAND`` import source by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21070 <https://github.com/galaxyproject/galaxy/pull/21070>`_
93
+
94
+ -------------------
95
+ 25.0.4 (2025-11-18)
96
+ -------------------
97
+
98
+
99
+ =========
100
+ Bug fixes
101
+ =========
102
+
103
+ * Fix PUT /api/workflows for user defined tools by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20987 <https://github.com/galaxyproject/galaxy/pull/20987>`_
104
+ * Run landing request state through validator by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21087 <https://github.com/galaxyproject/galaxy/pull/21087>`_
105
+ * Fix workflow run form input restrictions by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21095 <https://github.com/galaxyproject/galaxy/pull/21095>`_
106
+ * Create new datasets when creating skipped database operation tool outputs by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21142 <https://github.com/galaxyproject/galaxy/pull/21142>`_
107
+ * Fix proxy url validation for non-printable characters by `@davelopez <https://github.com/davelopez>`_ in `#21280 <https://github.com/galaxyproject/galaxy/pull/21280>`_
108
+
109
+ ============
110
+ Enhancements
111
+ ============
112
+
113
+ * Use job cache also for implicit conversions by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21021 <https://github.com/galaxyproject/galaxy/pull/21021>`_
114
+ * Harden proxy redirect validation by `@davelopez <https://github.com/davelopez>`_ in `#21185 <https://github.com/galaxyproject/galaxy/pull/21185>`_
115
+
116
+ =============
117
+ Other changes
118
+ =============
119
+
120
+ * Backport `Fix proxy endpoint encoding` by `@davelopez <https://github.com/davelopez>`_ in `#21184 <https://github.com/galaxyproject/galaxy/pull/21184>`_
121
+
122
+ -------------------
123
+ 25.0.3 (2025-09-23)
124
+ -------------------
125
+
126
+ No recorded changes since last release
11
127
 
12
128
  -------------------
13
129
  25.0.2 (2025-08-13)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: galaxy-test-api
3
- Version: 25.1.dev0
3
+ Version: 25.1.2
4
4
  Summary: Galaxy API tests
5
5
  Home-page: https://github.com/galaxyproject/galaxy
6
6
  Author: Galaxy Project and Community
@@ -54,11 +54,127 @@ History
54
54
 
55
55
  .. to_doc
56
56
 
57
- ---------
58
- 25.1.dev0
59
- ---------
57
+ -------------------
58
+ 25.1.2 (2026-03-09)
59
+ -------------------
60
+
61
+
62
+ =========
63
+ Bug fixes
64
+ =========
65
+
66
+ * Allow workflow download with missing file source references by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21814 <https://github.com/galaxyproject/galaxy/pull/21814>`_
67
+ * Fix pick_value output inheriting hidden state from input datasets by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21995 <https://github.com/galaxyproject/galaxy/pull/21995>`_
68
+
69
+ -------------------
70
+ 25.1.1 (2026-02-03)
71
+ -------------------
72
+
73
+
74
+ =========
75
+ Bug fixes
76
+ =========
60
77
 
78
+ * Sample sheet column fix by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21446 <https://github.com/galaxyproject/galaxy/pull/21446>`_
79
+ * Record input parameter invocation inputs by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21452 <https://github.com/galaxyproject/galaxy/pull/21452>`_
80
+ * Maintain column definitions on map over by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21468 <https://github.com/galaxyproject/galaxy/pull/21468>`_
81
+ * Fix subworkflow runs for disconnected required inputs with defaults by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21488 <https://github.com/galaxyproject/galaxy/pull/21488>`_
82
+ * Fix type annotation for invocation report ``errors`` field by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21508 <https://github.com/galaxyproject/galaxy/pull/21508>`_
83
+ * Fix job cache collection copy by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21558 <https://github.com/galaxyproject/galaxy/pull/21558>`_
84
+ * Fix option propagation for workflow inputs connected to multiple subworkflows by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21712 <https://github.com/galaxyproject/galaxy/pull/21712>`_
85
+ * Fix collection job state not preserved during history export/import by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21716 <https://github.com/galaxyproject/galaxy/pull/21716>`_
61
86
 
87
+ ============
88
+ Enhancements
89
+ ============
90
+
91
+ * Add database operation tool to convert sample sheets to list collections by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21625 <https://github.com/galaxyproject/galaxy/pull/21625>`_
92
+
93
+ -------------------
94
+ 25.1.0 (2025-12-12)
95
+ -------------------
96
+
97
+
98
+ =========
99
+ Bug fixes
100
+ =========
101
+
102
+ * Fix a transiently failing API test. by `@jmchilton <https://github.com/jmchilton>`_ in `#20278 <https://github.com/galaxyproject/galaxy/pull/20278>`_
103
+ * Fix `multiple="true"` data collection map over for shell_command tools by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20859 <https://github.com/galaxyproject/galaxy/pull/20859>`_
104
+ * Fix default conditional test parameters... by `@jmchilton <https://github.com/jmchilton>`_ in `#20942 <https://github.com/galaxyproject/galaxy/pull/20942>`_
105
+ * Test and fix CORS on exceptions by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21105 <https://github.com/galaxyproject/galaxy/pull/21105>`_
106
+ * Fix type annotation in test_run_workflow_use_cached_job_implicit_conv… by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21138 <https://github.com/galaxyproject/galaxy/pull/21138>`_
107
+ * Fix proxy endpoint encoding by `@davelopez <https://github.com/davelopez>`_ in `#21169 <https://github.com/galaxyproject/galaxy/pull/21169>`_
108
+ * Fix optional subworkflow input scheduling bug by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21435 <https://github.com/galaxyproject/galaxy/pull/21435>`_
109
+ * Maintain columns on sample sheet map over by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21436 <https://github.com/galaxyproject/galaxy/pull/21436>`_
110
+
111
+ ============
112
+ Enhancements
113
+ ============
114
+
115
+ * Don't serialize view of item in delete/purge request by `@mvdbeek <https://github.com/mvdbeek>`_ in `#18732 <https://github.com/galaxyproject/galaxy/pull/18732>`_
116
+ * Add tags to output datasets from tool form by `@PlushZ <https://github.com/PlushZ>`_ in `#19225 <https://github.com/galaxyproject/galaxy/pull/19225>`_
117
+ * Implement Sample Sheets by `@jmchilton <https://github.com/jmchilton>`_ in `#19305 <https://github.com/galaxyproject/galaxy/pull/19305>`_
118
+ * Consider collections in on_strings for parameters accepting multiple datasets by `@bernt-matthias <https://github.com/bernt-matthias>`_ in `#19817 <https://github.com/galaxyproject/galaxy/pull/19817>`_
119
+ * Empower Users to More Pragmatically Import Datasets & Collections From Tables by `@jmchilton <https://github.com/jmchilton>`_ in `#20288 <https://github.com/galaxyproject/galaxy/pull/20288>`_
120
+ * Prepare ``ToolBox.dynamic_tool_to_tool()`` for CWL formats by `@nsoranzo <https://github.com/nsoranzo>`_ in `#20364 <https://github.com/galaxyproject/galaxy/pull/20364>`_
121
+ * Test case for using URL-based workflow inputs with implicit conversions. by `@jmchilton <https://github.com/jmchilton>`_ in `#20509 <https://github.com/galaxyproject/galaxy/pull/20509>`_
122
+ * Implement Data Landing Requests by `@jmchilton <https://github.com/jmchilton>`_ in `#20592 <https://github.com/galaxyproject/galaxy/pull/20592>`_
123
+ * Clean up code from pyupgrade by `@nsoranzo <https://github.com/nsoranzo>`_ in `#20642 <https://github.com/galaxyproject/galaxy/pull/20642>`_
124
+ * Add more info to inheritance chain by `@arash77 <https://github.com/arash77>`_ in `#20701 <https://github.com/galaxyproject/galaxy/pull/20701>`_
125
+ * Attempt to reuse previously materialized datasets by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20718 <https://github.com/galaxyproject/galaxy/pull/20718>`_
126
+ * Add configfiles support and various enhancements for user defined tools by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20761 <https://github.com/galaxyproject/galaxy/pull/20761>`_
127
+ * Modernize tools in the filters/ dir by `@natefoo <https://github.com/natefoo>`_ in `#20840 <https://github.com/galaxyproject/galaxy/pull/20840>`_
128
+ * Replace tour_generator webhook with internal API and frontend by `@ahmedhamidawan <https://github.com/ahmedhamidawan>`_ in `#20868 <https://github.com/galaxyproject/galaxy/pull/20868>`_
129
+ * Allow addressing user defined tools in job config by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20932 <https://github.com/galaxyproject/galaxy/pull/20932>`_
130
+ * Limit admin requirement of selected tool data api endpoints by `@guerler <https://github.com/guerler>`_ in `#20949 <https://github.com/galaxyproject/galaxy/pull/20949>`_
131
+ * Allow sending and tracking landing request origin by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20957 <https://github.com/galaxyproject/galaxy/pull/20957>`_
132
+ * Track landing request with invocation by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20960 <https://github.com/galaxyproject/galaxy/pull/20960>`_
133
+ * Use workflow-style payload in data landing request by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21107 <https://github.com/galaxyproject/galaxy/pull/21107>`_
134
+ * Tighter API for tool run tagging. by `@jmchilton <https://github.com/jmchilton>`_ in `#21210 <https://github.com/galaxyproject/galaxy/pull/21210>`_
135
+
136
+ =============
137
+ Other changes
138
+ =============
139
+
140
+ * Merge `release_25.0` into `dev` by `@davelopez <https://github.com/davelopez>`_ in `#20484 <https://github.com/galaxyproject/galaxy/pull/20484>`_
141
+ * Sample Sheet Bug Fixes around Preserving Collection Metadata by `@jmchilton <https://github.com/jmchilton>`_ in `#20749 <https://github.com/galaxyproject/galaxy/pull/20749>`_
142
+ * Validate sample sheet column definitions in workflow definitions on backend. by `@jmchilton <https://github.com/jmchilton>`_ in `#20880 <https://github.com/galaxyproject/galaxy/pull/20880>`_
143
+ * Fix ``TOOL_WITH_SHELL_COMMAND`` import source by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21070 <https://github.com/galaxyproject/galaxy/pull/21070>`_
144
+
145
+ -------------------
146
+ 25.0.4 (2025-11-18)
147
+ -------------------
148
+
149
+
150
+ =========
151
+ Bug fixes
152
+ =========
153
+
154
+ * Fix PUT /api/workflows for user defined tools by `@mvdbeek <https://github.com/mvdbeek>`_ in `#20987 <https://github.com/galaxyproject/galaxy/pull/20987>`_
155
+ * Run landing request state through validator by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21087 <https://github.com/galaxyproject/galaxy/pull/21087>`_
156
+ * Fix workflow run form input restrictions by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21095 <https://github.com/galaxyproject/galaxy/pull/21095>`_
157
+ * Create new datasets when creating skipped database operation tool outputs by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21142 <https://github.com/galaxyproject/galaxy/pull/21142>`_
158
+ * Fix proxy url validation for non-printable characters by `@davelopez <https://github.com/davelopez>`_ in `#21280 <https://github.com/galaxyproject/galaxy/pull/21280>`_
159
+
160
+ ============
161
+ Enhancements
162
+ ============
163
+
164
+ * Use job cache also for implicit conversions by `@mvdbeek <https://github.com/mvdbeek>`_ in `#21021 <https://github.com/galaxyproject/galaxy/pull/21021>`_
165
+ * Harden proxy redirect validation by `@davelopez <https://github.com/davelopez>`_ in `#21185 <https://github.com/galaxyproject/galaxy/pull/21185>`_
166
+
167
+ =============
168
+ Other changes
169
+ =============
170
+
171
+ * Backport `Fix proxy endpoint encoding` by `@davelopez <https://github.com/davelopez>`_ in `#21184 <https://github.com/galaxyproject/galaxy/pull/21184>`_
172
+
173
+ -------------------
174
+ 25.0.3 (2025-09-23)
175
+ -------------------
176
+
177
+ No recorded changes since last release
62
178
 
63
179
  -------------------
64
180
  25.0.2 (2025-08-13)
@@ -16,6 +16,7 @@ from galaxy_test.base.decorators import requires_new_user
16
16
  from galaxy_test.base.populators import (
17
17
  DatasetCollectionPopulator,
18
18
  DatasetPopulator,
19
+ skip_without_tool,
19
20
  )
20
21
  from ._framework import ApiTestCase
21
22
 
@@ -427,6 +428,154 @@ class TestDatasetCollectionsApi(ApiTestCase):
427
428
  assert row_1[0] == 45
428
429
  # TODO: test case where column definition does not match supplied data
429
430
 
431
+ @skip_without_tool("cat1")
432
+ def test_sample_sheet_map_over_preserves_columns(self, history_id):
433
+ """Test that mapping cat1 over a sample sheet preserves columns metadata."""
434
+ # Create a sample sheet collection with columns metadata
435
+ contents = [
436
+ ("sample1", "content1"),
437
+ ("sample2", "content2"),
438
+ ("sample3", "content3"),
439
+ ]
440
+ sample_sheet_identifiers = self.dataset_collection_populator.list_identifiers(history_id, contents)
441
+ payload = dict(
442
+ name="test sample sheet",
443
+ instance_type="history",
444
+ history_id=history_id,
445
+ element_identifiers=sample_sheet_identifiers,
446
+ collection_type="sample_sheet",
447
+ column_definitions=[
448
+ {"type": "int", "name": "replicate", "optional": False},
449
+ {"type": "string", "name": "condition", "optional": False},
450
+ ],
451
+ rows={
452
+ "sample1": [1, "control"],
453
+ "sample2": [2, "treatment"],
454
+ "sample3": [3, "control"],
455
+ },
456
+ )
457
+ create_response = self._post("dataset_collections", payload, json=True)
458
+ sample_sheet = self._check_create_response(create_response)
459
+ hdca_id = sample_sheet["id"]
460
+
461
+ # Verify the input sample sheet has columns metadata
462
+ input_elements = sample_sheet["elements"]
463
+ assert len(input_elements) == 3
464
+ assert input_elements[0]["columns"] == [1, "control"]
465
+ assert input_elements[1]["columns"] == [2, "treatment"]
466
+ assert input_elements[2]["columns"] == [3, "control"]
467
+
468
+ # Run cat1 on the sample sheet collection in batch mode (mapping over it)
469
+ inputs = {
470
+ "input1": {"batch": True, "values": [{"src": "hdca", "id": hdca_id}]},
471
+ }
472
+ run = self.dataset_populator.run_tool("cat1", inputs=inputs, history_id=history_id)
473
+ self.dataset_populator.wait_for_history_jobs(history_id)
474
+
475
+ # Get the implicit output collection
476
+ implicit_collections = run["implicit_collections"]
477
+ assert len(implicit_collections) == 1, f"Expected 1 implicit collection, got {len(implicit_collections)}"
478
+ output_collection = implicit_collections[0]
479
+
480
+ # Fetch the full collection details including elements
481
+ collection_details = self.dataset_populator.get_history_collection_details(
482
+ history_id, content_id=output_collection["id"]
483
+ )
484
+ assert collection_details["column_definitions"] == sample_sheet["column_definitions"]
485
+
486
+ # Verify that the output collection preserved the columns metadata
487
+ output_elements = collection_details["elements"]
488
+ assert len(output_elements) == 3, f"Expected 3 output elements, got {len(output_elements)}"
489
+
490
+ # Check that columns metadata was preserved for each element
491
+ self._assert_has_keys(output_elements[0], "columns")
492
+ assert output_elements[0]["columns"] == [
493
+ 1,
494
+ "control",
495
+ ], f"Expected [1, 'control'], got {output_elements[0]['columns']}"
496
+ assert output_elements[0]["element_identifier"] == "sample1"
497
+
498
+ self._assert_has_keys(output_elements[1], "columns")
499
+ assert output_elements[1]["columns"] == [
500
+ 2,
501
+ "treatment",
502
+ ], f"Expected [2, 'treatment'], got {output_elements[1]['columns']}"
503
+ assert output_elements[1]["element_identifier"] == "sample2"
504
+
505
+ self._assert_has_keys(output_elements[2], "columns")
506
+ assert output_elements[2]["columns"] == [
507
+ 3,
508
+ "control",
509
+ ], f"Expected [3, 'control'], got {output_elements[2]['columns']}"
510
+ assert output_elements[2]["element_identifier"] == "sample3"
511
+
512
+ def test_copy_sample_sheet_collection(self, history_id):
513
+ """Test that copying a sample sheet collection preserves columns metadata."""
514
+ # Create a sample sheet collection with columns metadata
515
+ contents = [
516
+ ("sample1", "content1"),
517
+ ("sample2", "content2"),
518
+ ]
519
+ sample_sheet_identifiers = self.dataset_collection_populator.list_identifiers(history_id, contents)
520
+ payload = dict(
521
+ name="original sample sheet",
522
+ instance_type="history",
523
+ history_id=history_id,
524
+ element_identifiers=sample_sheet_identifiers,
525
+ collection_type="sample_sheet",
526
+ column_definitions=[
527
+ {"type": "int", "name": "replicate", "optional": False},
528
+ {"type": "string", "name": "condition", "optional": False},
529
+ ],
530
+ rows={
531
+ "sample1": [1, "control"],
532
+ "sample2": [2, "treatment"],
533
+ },
534
+ )
535
+ create_response = self._post("dataset_collections", payload, json=True)
536
+ original_collection = self._check_create_response(create_response)
537
+ original_hdca_id = original_collection["id"]
538
+
539
+ # Verify the original sample sheet has columns metadata
540
+ original_elements = original_collection["elements"]
541
+ assert len(original_elements) == 2
542
+ assert original_elements[0]["columns"] == [1, "control"]
543
+ assert original_elements[1]["columns"] == [2, "treatment"]
544
+
545
+ # Copy the collection using the new copy_collection method
546
+ copy_response = self.dataset_collection_populator.copy_collection(
547
+ history_id, original_hdca_id, copy_elements=True, wait=False
548
+ )
549
+ copied_collection = copy_response.json()
550
+
551
+ # Fetch the full details of the copied collection
552
+ copied_collection_details = self.dataset_populator.get_history_collection_details(
553
+ history_id, content_id=copied_collection["id"]
554
+ )
555
+
556
+ # Verify the copied collection has the same columns metadata
557
+ copied_elements = copied_collection_details["elements"]
558
+ assert len(copied_elements) == 2, f"Expected 2 elements, got {len(copied_elements)}"
559
+
560
+ # Check that columns metadata was preserved for each element
561
+ self._assert_has_keys(copied_elements[0], "columns")
562
+ assert copied_elements[0]["columns"] == [
563
+ 1,
564
+ "control",
565
+ ], f"Expected [1, 'control'], got {copied_elements[0]['columns']}"
566
+ assert copied_elements[0]["element_identifier"] == "sample1"
567
+
568
+ self._assert_has_keys(copied_elements[1], "columns")
569
+ assert copied_elements[1]["columns"] == [
570
+ 2,
571
+ "treatment",
572
+ ], f"Expected [2, 'treatment'], got {copied_elements[1]['columns']}"
573
+ assert copied_elements[1]["element_identifier"] == "sample2"
574
+
575
+ # Verify column definitions are preserved
576
+ assert copied_collection_details["column_definitions"] == original_collection["column_definitions"]
577
+ assert copied_collection_details["collection_type"] == "sample_sheet"
578
+
430
579
  def test_workbook_download(self):
431
580
  xlsx_file = self.dataset_collection_populator.download_workbook(
432
581
  "sample_sheet",
@@ -672,7 +672,7 @@ class TestDatasetsApi(ApiTestCase):
672
672
  history_id, output_hda_id, stop_job=True, use_query_params=use_query_params
673
673
  )
674
674
  self._assert_status_code_is_ok(delete_response)
675
- deleted_hda = delete_response.json()
675
+ deleted_hda = self.dataset_populator.get_history_dataset_details(history_id, content_id=output_hda_id)
676
676
  assert deleted_hda["deleted"], deleted_hda
677
677
 
678
678
  # The job should be cancelled
@@ -729,6 +729,18 @@ class ImportExportTests(BaseHistories):
729
729
  history_id=imported_history_id, hid=1, assert_ok=False, hda_checker=check_failed, job_checker=check_failed
730
730
  )
731
731
 
732
+ # Also check collection state is preserved - regression test for issue #20450
733
+ imported_collection = self.dataset_populator.get_history_collection_details(
734
+ history_id=imported_history_id,
735
+ history_content_type="dataset_collection",
736
+ assert_ok=False,
737
+ )
738
+ assert "job_state_summary" in imported_collection, imported_collection
739
+ assert imported_collection["job_state_summary"].get("error", 0) == 1, (
740
+ f"Expected error count of 1 after import, got {imported_collection['job_state_summary']}. "
741
+ "Collection job state was not preserved during history export/import (issue #20450)."
742
+ )
743
+
732
744
  def test_import_metadata_regeneration(self):
733
745
  if self.task_based:
734
746
  raise SkipTest("skipping test_import_metadata_regeneration for task based...")
@@ -692,7 +692,7 @@ class TestHistoryContentsApi(ApiTestCase):
692
692
  assert not dataset_collection["deleted"]
693
693
 
694
694
  delete_response = self._delete(collection_url)
695
- self._assert_status_code_is(delete_response, 200)
695
+ self._assert_status_code_is_ok(delete_response)
696
696
 
697
697
  show_response = self._get(collection_url)
698
698
  dataset_collection = show_response.json()
@@ -736,7 +736,7 @@ steps:
736
736
  output = run_response["outputs"][0]
737
737
  # Delete second jobs input while second job is waiting for first job
738
738
  delete_response = self._delete(f"histories/{history_id}/contents/{hda1['id']}")
739
- self._assert_status_code_is(delete_response, 200)
739
+ self._assert_status_code_is_ok(delete_response)
740
740
  self.dataset_populator.wait_for_history_jobs(history_id, assert_ok=False)
741
741
  dataset_details = self._get(f"histories/{history_id}/contents/{output['id']}").json()
742
742
  assert dataset_details["state"] == "paused"
@@ -773,11 +773,11 @@ steps:
773
773
  self._search(search_payload, expected_search_count=1)
774
774
  # Now we delete the original input HDA that was used -- we should still be able to find the job
775
775
  delete_respone = self._delete(f"histories/{history_id}/contents/{dataset_id}")
776
- self._assert_status_code_is(delete_respone, 200)
776
+ self._assert_status_code_is_ok(delete_respone)
777
777
  self._search(search_payload, expected_search_count=1)
778
778
  # Now we also delete the copy -- we shouldn't find a job
779
779
  delete_respone = self._delete(f"histories/{new_history_id}/contents/{new_dataset_id}")
780
- self._assert_status_code_is(delete_respone, 200)
780
+ self._assert_status_code_is_ok(delete_respone)
781
781
  self._search(search_payload, expected_search_count=0)
782
782
 
783
783
  @pytest.mark.require_new_history
@@ -803,7 +803,7 @@ steps:
803
803
  tool_response = self._job_search(tool_id="cat1", history_id=history_id, inputs=inputs)
804
804
  output_id = tool_response.json()["outputs"][0]["id"]
805
805
  delete_respone = self._delete(f"histories/{history_id}/contents/{output_id}")
806
- self._assert_status_code_is(delete_respone, 200)
806
+ self._assert_status_code_is_ok(delete_respone)
807
807
  search_payload = self._search_payload(history_id=history_id, tool_id="cat1", inputs=inputs)
808
808
  self._search(search_payload, expected_search_count=0)
809
809
 
@@ -847,7 +847,7 @@ steps:
847
847
  # and use the correct input job definition, the job should not be found
848
848
  output_id = tool_response.json()["outputs"][0]["id"]
849
849
  delete_respone = self._delete(f"histories/{history_id}/contents/{output_id}")
850
- self._assert_status_code_is(delete_respone, 200)
850
+ self._assert_status_code_is_ok(delete_respone)
851
851
  search_payload = self._search_payload(history_id=history_id, tool_id="multi_data_param", inputs=inputs)
852
852
  self._search(search_payload, expected_search_count=0)
853
853
 
@@ -863,14 +863,14 @@ steps:
863
863
  output_id = tool_response.json()["outputs"][0]["id"]
864
864
  # We delete a single tool output, no job should be returned
865
865
  delete_respone = self._delete(f"histories/{history_id}/contents/{output_id}")
866
- self._assert_status_code_is(delete_respone, 200)
866
+ self._assert_status_code_is_ok(delete_respone)
867
867
  search_payload = self._search_payload(history_id=history_id, tool_id="collection_creates_list", inputs=inputs)
868
868
  self._search(search_payload, expected_search_count=0)
869
869
  tool_response = self._job_search(tool_id="collection_creates_list", history_id=history_id, inputs=inputs)
870
870
  output_collection_id = tool_response.json()["output_collections"][0]["id"]
871
871
  # We delete a collection output, no job should be returned
872
872
  delete_respone = self._delete(f"histories/{history_id}/contents/dataset_collections/{output_collection_id}")
873
- self._assert_status_code_is(delete_respone, 200)
873
+ self._assert_status_code_is_ok(delete_respone)
874
874
  search_payload = self._search_payload(history_id=history_id, tool_id="collection_creates_list", inputs=inputs)
875
875
  self._search(search_payload, expected_search_count=0)
876
876
 
@@ -902,11 +902,11 @@ steps:
902
902
  self._search(search_payload, expected_search_count=1)
903
903
  # Now we delete the original input HDCA that was used -- we should still be able to find the job
904
904
  delete_respone = self._delete(f"histories/{history_id}/contents/dataset_collections/{list_id_a}")
905
- self._assert_status_code_is(delete_respone, 200)
905
+ self._assert_status_code_is_ok(delete_respone)
906
906
  self._search(search_payload, expected_search_count=1)
907
907
  # Now we also delete the copy -- we shouldn't find a job
908
908
  delete_respone = self._delete(f"histories/{history_id}/contents/dataset_collections/{new_list_a}")
909
- self._assert_status_code_is(delete_respone, 200)
909
+ self._assert_status_code_is_ok(delete_respone)
910
910
  self._search(search_payload, expected_search_count=0)
911
911
 
912
912
  @pytest.mark.require_new_history