diff --git a/lib/galaxy/managers/collections.py b/lib/galaxy/managers/collections.py index c6ec546125a..df5820e3b58 100644 --- a/lib/galaxy/managers/collections.py +++ b/lib/galaxy/managers/collections.py @@ -268,7 +268,11 @@ class DatasetCollectionManager: if recursive: for dataset in dataset_collection_instance.collection.dataset_instances: - self.hda_manager.error_unless_owner(dataset, user=trans.get_user(), current_history=trans.history) + try: + self.hda_manager.error_unless_owner(dataset, user=trans.get_user(), current_history=trans.history) + except hdas.HistoryDatasetAssociationNoHistoryException: + log.info("Cannot delete HistoryDatasetAssociation {}, HistoryDatasetAssociation has no associated History, cannot verify owner".format(dataset.id)) + continue if not dataset.deleted: dataset.deleted = True diff --git a/lib/galaxy/managers/hdas.py b/lib/galaxy/managers/hdas.py index 9d6569d0f7d..ba917988b06 100644 --- a/lib/galaxy/managers/hdas.py +++ b/lib/galaxy/managers/hdas.py @@ -24,6 +24,10 @@ from galaxy.managers import ( log = logging.getLogger(__name__) +class HistoryDatasetAssociationNoHistoryException(Exception): + pass + + class HDAManager(datasets.DatasetAssociationManager, secured.OwnableManagerMixin, taggable.TaggableManagerMixin, @@ -69,9 +73,11 @@ class HDAManager(datasets.DatasetAssociationManager, """ Use history to see if current user owns HDA. """ - history = hda.history if self.user_manager.is_admin(user, trans=kwargs.get("trans", None)): return True + history = hda.history + if history is None: + raise HistoryDatasetAssociationNoHistoryException # allow anonymous user to access current history # TODO: some dup here with historyManager.is_owner but prevents circ import # TODO: awkward kwarg (which is my new band name); this may not belong here - move to controller?