diff --git a/lib/galaxy/tools/parameters/basic.py b/lib/galaxy/tools/parameters/basic.py index 2ae9493da80..d0c5c34781b 100644 --- a/lib/galaxy/tools/parameters/basic.py +++ b/lib/galaxy/tools/parameters/basic.py @@ -1900,13 +1900,12 @@ class DataToolParameter(BaseDataToolParameter): rval.append(trans.sa_session.query(trans.app.model.LibraryDatasetDatasetAssociation).get(decoded_id)) else: raise ValueError(f"Unknown input source {single_value['src']} passed to job submission API.") - elif isinstance(single_value, trans.app.model.HistoryDatasetCollectionAssociation): - rval.append(single_value) - elif isinstance(single_value, trans.app.model.DatasetCollectionElement): - rval.append(single_value) - elif isinstance(single_value, trans.app.model.HistoryDatasetAssociation): - rval.append(single_value) - elif isinstance(single_value, trans.app.model.LibraryDatasetDatasetAssociation): + elif isinstance(single_value, ( + trans.app.model.HistoryDatasetCollectionAssociation, + trans.app.model.DatasetCollectionElement, + trans.app.model.HistoryDatasetAssociation, + trans.app.model.LibraryDatasetDatasetAssociation + )): rval.append(single_value) else: if len(str(single_value)) == 16: @@ -1919,7 +1918,7 @@ class DataToolParameter(BaseDataToolParameter): for val in rval: if not isinstance(val, trans.app.model.HistoryDatasetCollectionAssociation): raise ParameterValueError("if collections are supplied to multiple data input parameter, only collections may be used", self.name) - elif isinstance(value, trans.app.model.HistoryDatasetAssociation): + elif isinstance(value, (trans.app.model.HistoryDatasetAssociation, trans.app.model.LibraryDatasetDatasetAssociation)): rval = value elif isinstance(value, dict) and 'src' in value and 'id' in value: if value['src'] == 'hda': diff --git a/lib/galaxy_test/api/test_libraries.py b/lib/galaxy_test/api/test_libraries.py index b185e4091dd..3153bf66239 100644 --- a/lib/galaxy_test/api/test_libraries.py +++ b/lib/galaxy_test/api/test_libraries.py @@ -1,5 +1,4 @@ import json -import time import unittest from galaxy_test.base.populators import ( @@ -340,44 +339,43 @@ class LibrariesApiTestCase(ApiTestCase): container_update_time = container_fetch_response.json()['folder_contents'][0]['update_time'] assert dataset_update_time == container_update_time, container_fetch_response - def test_update_dataset_in_folder(self): - ld = self._create_dataset_in_folder_in_library("ForUpdateDataset", wait=True) - data = {'name': 'updated_name', 'file_ext': 'fastq', 'misc_info': 'updated_info', 'genome_build': 'updated_genome_build'} - create_response = self._patch(f"libraries/datasets/{ld.json()['id']}", data=data) + def _patch_library_dataset(self, library_dataset_id, data): + create_response = self._patch(f"libraries/datasets/{library_dataset_id}", data=data) self._assert_status_code_is(create_response, 200) - self._assert_has_keys(create_response.json(), "name", "file_ext", "misc_info", "genome_build") + ld = create_response.json() + library_id = ld['parent_library_id'] + return self.library_populator.wait_on_library_dataset(library={'id': library_id}, dataset=ld) + + def test_update_dataset_in_folder(self): + ld = self._create_dataset_in_folder_in_library("ForUpdateDataset", content=">seq\nATGC", wait=True).json() + data = {'name': 'updated_name', 'file_ext': 'fasta', 'misc_info': 'updated_info', 'genome_build': 'updated_genome_build'} + ld_updated = self._patch_library_dataset(ld['id'], data) + self._assert_has_keys(ld_updated, "name", "file_ext", "misc_info", "genome_build") def test_update_dataset_tags(self): - ld = self._create_dataset_in_folder_in_library("ForTagtestDataset") + ld = self._create_dataset_in_folder_in_library("ForTagtestDataset", wait=True).json() data = {"tags": ["#Lancelot", "name:Holy Grail", "blue"]} - create_response = self._patch(f"libraries/datasets/{ld.json()['id']}", data=data) - self._assert_status_code_is(create_response, 200) - self._assert_has_keys(create_response.json(), "tags") - assert create_response.json()["tags"] == "name:Lancelot, name:HolyGrail, blue" + ld_updated = self._patch_library_dataset(ld['id'], data) + self._assert_has_keys(ld_updated, "tags") + assert ld_updated["tags"] == "name:Lancelot, name:HolyGrail, blue" def test_invalid_update_dataset_in_folder(self): - ld = self._create_dataset_in_folder_in_library("ForInvalidUpdateDataset") + ld = self._create_dataset_in_folder_in_library("ForInvalidUpdateDataset", wait=True).json() data = {'file_ext': 'nonexisting_type'} - create_response = self._patch(f"libraries/datasets/{ld.json()['id']}", data=data) + create_response = self._patch(f"libraries/datasets/{ld['id']}", data=data) self._assert_status_code_is(create_response, 400) assert 'This Galaxy does not recognize the datatype of:' in create_response.json()['err_msg'] def test_detect_datatype_of_dataset_in_folder(self): - ld = self._create_dataset_in_folder_in_library("ForDetectDataset") - # Wait for metadata job to finish. - time.sleep(2) + ld = self._create_dataset_in_folder_in_library("ForDetectDataset", wait=True).json() data = {'file_ext': 'data'} - create_response = self._patch(f"libraries/datasets/{ld.json()['id']}", data=data) - self._assert_status_code_is(create_response, 200) - self._assert_has_keys(create_response.json(), "file_ext") - assert create_response.json()["file_ext"] == "data" - # Wait for metadata job to finish. - time.sleep(2) + ld_updated = self._patch_library_dataset(ld['id'], data) + self._assert_has_keys(ld_updated, "file_ext") + assert ld_updated["file_ext"] == "data" data = {'file_ext': 'auto'} - create_response = self._patch(f"libraries/datasets/{ld.json()['id']}", data=data) - self._assert_status_code_is(create_response, 200) - self._assert_has_keys(create_response.json(), "file_ext") - assert create_response.json()["file_ext"] == "txt" + ld_updated = self._patch_library_dataset(ld['id'], data) + self._assert_has_keys(ld_updated, "file_ext") + assert ld_updated["file_ext"] == "txt" def test_ldda_collection_import_to_history(self): self._import_to_history(visible=True) @@ -482,13 +480,13 @@ class LibrariesApiTestCase(ApiTestCase): ) return self._post(f"folders/{containing_folder_id}", data=create_data) - def _create_dataset_in_folder_in_library(self, library_name, wait=False): + def _create_dataset_in_folder_in_library(self, library_name, content="1 2 3", wait=False): library = self.library_populator.new_private_library(library_name) folder_response = self._create_folder(library) self._assert_status_code_is(folder_response, 200) folder_id = folder_response.json()[0]['id'] history_id = self.dataset_populator.new_history() - hda_id = self.dataset_populator.new_dataset(history_id, content="1 2 3", wait=wait)['id'] + hda_id = self.dataset_populator.new_dataset(history_id, content=content, wait=wait)['id'] payload = {'from_hda_id': hda_id, 'create_type': 'file', 'folder_id': folder_id} ld = self._post(f"libraries/{folder_id}/contents", payload) return ld diff --git a/lib/galaxy_test/base/populators.py b/lib/galaxy_test/base/populators.py index 9b1b13cc035..9c9081a731e 100644 --- a/lib/galaxy_test/base/populators.py +++ b/lib/galaxy_test/base/populators.py @@ -1742,7 +1742,7 @@ def wait_on_state(state_func: Callable, desc="state", skip_states=None, ok_state return state if skip_states is None: - skip_states = ["running", "queued", "new", "ready", "stop", "stopped"] + skip_states = ["running", "queued", "new", "ready", "stop", "stopped", "setting_metadata"] if ok_states is None: ok_states = ["ok", "scheduled"] try: diff --git a/packages/tool_util/HISTORY.rst b/packages/tool_util/HISTORY.rst index 053ba4ab90e..8123bb92be7 100644 --- a/packages/tool_util/HISTORY.rst +++ b/packages/tool_util/HISTORY.rst @@ -6,7 +6,13 @@ History .. to_doc --------------------- -21.1.2.dev0 +21.1.3.dev0 +--------------------- + + + +--------------------- +21.1.2 (2021-06-23) ---------------------