Loading lib/galaxy/model/__init__.py +10 −3 Original line number Diff line number Diff line Loading @@ -4285,10 +4285,17 @@ class DatasetCollection(Dictifiable, UsesAnnotations, RepresentById): raise Exception("Each dataset collection must define a collection type.") def __getitem__(self, key): get_by_attribute = "element_index" if isinstance(key, int) else "element_identifier" if isinstance(key, int): try: return self.elements[key] except IndexError: pass else: # This might be a peformance issue for large collection, but we don't use this a lot for element in self.elements: if getattr(element, get_by_attribute) == key: if element.element_identifier == key: return element get_by_attribute = "element_index" if isinstance(key, int) else "element_identifier" error_message = f"Dataset collection has no {get_by_attribute} with key {key}." raise KeyError(error_message) Loading test/unit/data/test_galaxy_mapping.py +13 −0 Original line number Diff line number Diff line Loading @@ -275,6 +275,19 @@ class MappingTests(BaseModelTestCase): library_dataset_collection = model.LibraryDatasetCollectionAssociation(collection=dataset_collection) tag_and_test(library_dataset_collection, model.LibraryDatasetCollectionTagAssociation, "tagged_library_dataset_collections") def test_collection_get_interface(self): model = self.model u = model.User(email="mary@example.com", password="password") h1 = model.History(name="History 1", user=u) d1 = model.HistoryDatasetAssociation(extension="txt", history=h1, create_dataset=True, sa_session=model.session) c1 = model.DatasetCollection(collection_type="list") elements = 100 dces = [model.DatasetCollectionElement(collection=c1, element=d1, element_identifier=f"{i}", element_index=i) for i in range(elements)] self.persist(u, h1, d1, c1, *dces, flush=False, expunge=False) model.session.flush() for i in range(elements): assert c1[i] == dces[i] def test_collections_in_histories(self): model = self.model Loading Loading
lib/galaxy/model/__init__.py +10 −3 Original line number Diff line number Diff line Loading @@ -4285,10 +4285,17 @@ class DatasetCollection(Dictifiable, UsesAnnotations, RepresentById): raise Exception("Each dataset collection must define a collection type.") def __getitem__(self, key): get_by_attribute = "element_index" if isinstance(key, int) else "element_identifier" if isinstance(key, int): try: return self.elements[key] except IndexError: pass else: # This might be a peformance issue for large collection, but we don't use this a lot for element in self.elements: if getattr(element, get_by_attribute) == key: if element.element_identifier == key: return element get_by_attribute = "element_index" if isinstance(key, int) else "element_identifier" error_message = f"Dataset collection has no {get_by_attribute} with key {key}." raise KeyError(error_message) Loading
test/unit/data/test_galaxy_mapping.py +13 −0 Original line number Diff line number Diff line Loading @@ -275,6 +275,19 @@ class MappingTests(BaseModelTestCase): library_dataset_collection = model.LibraryDatasetCollectionAssociation(collection=dataset_collection) tag_and_test(library_dataset_collection, model.LibraryDatasetCollectionTagAssociation, "tagged_library_dataset_collections") def test_collection_get_interface(self): model = self.model u = model.User(email="mary@example.com", password="password") h1 = model.History(name="History 1", user=u) d1 = model.HistoryDatasetAssociation(extension="txt", history=h1, create_dataset=True, sa_session=model.session) c1 = model.DatasetCollection(collection_type="list") elements = 100 dces = [model.DatasetCollectionElement(collection=c1, element=d1, element_identifier=f"{i}", element_index=i) for i in range(elements)] self.persist(u, h1, d1, c1, *dces, flush=False, expunge=False) model.session.flush() for i in range(elements): assert c1[i] == dces[i] def test_collections_in_histories(self): model = self.model Loading