Loading client/src/components/Workflow/WorkflowDropdown.vue +3 −3 Original line number Diff line number Diff line Loading @@ -101,9 +101,9 @@ export default { return `${getAppRoot()}workflows/${this.workflow.id}/invocations`; }, urlViewShared() { return `${getAppRoot()}workflow/display_by_username_and_slug?username=${this.workflow.owner}&slug=${ this.workflow.slug }`; return `${getAppRoot()}workflow/display_by_username_and_slug?username=${ this.workflow.owner }&slug=${encodeURIComponent(this.workflow.slug)}`; }, readOnly() { return !!this.workflow.shared; Loading lib/galaxy/datatypes/interval.py +4 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ from galaxy.datatypes.util.gff_util import ( parse_gff3_attributes, parse_gff_attributes, ) from galaxy.model import DatasetInstance from galaxy.util import compression_utils from . import ( data, Loading Loading @@ -167,10 +168,11 @@ class Interval(Tabular): else: empty_line_count += 1 def displayable(self, dataset): def displayable(self, dataset: DatasetInstance): try: return ( dataset.has_data() not dataset.dataset.purged and dataset.has_data() and dataset.state == dataset.states.OK and dataset.metadata.columns > 0 and dataset.metadata.data_lines != 0 Loading lib/galaxy/datatypes/tabular.py +4 −2 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ from galaxy.datatypes.sniff import ( iter_headers, validate_tabular, ) from galaxy.model import DatasetInstance from galaxy.util import compression_utils from . import dataproviders Loading Loading @@ -90,10 +91,11 @@ class TabularData(data.Text): if dataset.metadata.comment_lines: dataset.blurb = f"{dataset.blurb}, {util.commaify(str(dataset.metadata.comment_lines))} comments" def displayable(self, dataset): def displayable(self, dataset: DatasetInstance): try: return ( dataset.has_data() not dataset.dataset.purged and dataset.has_data() and dataset.state == dataset.states.OK and dataset.metadata.columns > 0 and dataset.metadata.data_lines != 0 Loading lib/galaxy/webapps/galaxy/controllers/dataset.py +55 −48 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ from galaxy.managers.hdas import ( HDAManager, ) from galaxy.managers.histories import HistoryManager from galaxy.model import Dataset from galaxy.model.item_attrs import ( UsesAnnotations, UsesItemRatings, Loading Loading @@ -147,17 +148,27 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE except Exception: data = None if not data: raise paste.httpexceptions.HTTPRequestRangeNotSatisfiable(f"Invalid reference dataset id: {str(hda_id)}.") raise web.httpexceptions.HTTPNotFound(f"Invalid reference dataset id: {str(hda_id)}.") if not self._can_access_dataset(trans, data): return trans.show_error_message("You are not allowed to access this dataset") if data.purged: return trans.show_error_message("The dataset you are attempting to view has been purged.") if data.deleted and not (trans.user_is_admin or (data.history and trans.get_user() == data.history.user)): elif data.deleted and not (trans.user_is_admin or (data.history and trans.get_user() == data.history.user)): return trans.show_error_message("The dataset you are attempting to view has been deleted.") if data.state == trans.model.Dataset.states.UPLOAD: elif data.state == Dataset.states.UPLOAD: return trans.show_error_message( "Please wait until this dataset finishes uploading before attempting to view it." ) elif data.state == Dataset.states.DISCARDED: return trans.show_error_message("The dataset you are attempting to view has been discarded.") elif data.state == Dataset.states.DEFERRED: return trans.show_error_message( "The dataset you are attempting to view has deferred data. You can only use this dataset as input for jobs." ) elif data.state == Dataset.states.PAUSED: return trans.show_error_message( "The dataset you are attempting to view is in paused state. One of the inputs for the job that creates this dataset has failed." ) return data @web.expose Loading Loading @@ -563,11 +574,9 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE @web.expose def display_by_username_and_slug(self, trans, username, slug, filename=None, preview=True): """Display dataset by username and slug; because datasets do not yet have slugs, the slug is the dataset's id.""" id = slug decoded_id = self.decode_id(id) dataset = self.hda_manager.get_accessible(decoded_id, trans.user) dataset = self.hda_manager.error_if_uploading(dataset) if dataset: dataset = self._check_dataset(trans, slug) if not isinstance(dataset, trans.app.model.DatasetInstance): return dataset # Filename used for composite types. if filename: return self.display(trans, dataset_id=slug, filename=filename) Loading Loading @@ -610,8 +619,6 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE num_ratings=num_ratings, first_chunk=first_chunk, ) else: raise web.httpexceptions.HTTPNotFound() @web.expose def get_item_content_async(self, trans, id): Loading lib/galaxy/webapps/galaxy/services/dataset_collections.py +8 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ from pydantic import ( BaseModel, Extra, Field, ValidationError, ) from galaxy import exceptions Loading Loading @@ -254,4 +255,10 @@ class DatasetCollectionsService(ServiceBase, UsesLibraryMixinItems): return result rval = [serialize_element(el) for el in contents] try: return DatasetCollectionContentElements.parse_obj(rval) except ValidationError: log.exception( f"Serializing DatasetCollectionContentsElements failed. Collection is populated: {hdca.collection.populated}" ) raise Loading
client/src/components/Workflow/WorkflowDropdown.vue +3 −3 Original line number Diff line number Diff line Loading @@ -101,9 +101,9 @@ export default { return `${getAppRoot()}workflows/${this.workflow.id}/invocations`; }, urlViewShared() { return `${getAppRoot()}workflow/display_by_username_and_slug?username=${this.workflow.owner}&slug=${ this.workflow.slug }`; return `${getAppRoot()}workflow/display_by_username_and_slug?username=${ this.workflow.owner }&slug=${encodeURIComponent(this.workflow.slug)}`; }, readOnly() { return !!this.workflow.shared; Loading
lib/galaxy/datatypes/interval.py +4 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ from galaxy.datatypes.util.gff_util import ( parse_gff3_attributes, parse_gff_attributes, ) from galaxy.model import DatasetInstance from galaxy.util import compression_utils from . import ( data, Loading Loading @@ -167,10 +168,11 @@ class Interval(Tabular): else: empty_line_count += 1 def displayable(self, dataset): def displayable(self, dataset: DatasetInstance): try: return ( dataset.has_data() not dataset.dataset.purged and dataset.has_data() and dataset.state == dataset.states.OK and dataset.metadata.columns > 0 and dataset.metadata.data_lines != 0 Loading
lib/galaxy/datatypes/tabular.py +4 −2 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ from galaxy.datatypes.sniff import ( iter_headers, validate_tabular, ) from galaxy.model import DatasetInstance from galaxy.util import compression_utils from . import dataproviders Loading Loading @@ -90,10 +91,11 @@ class TabularData(data.Text): if dataset.metadata.comment_lines: dataset.blurb = f"{dataset.blurb}, {util.commaify(str(dataset.metadata.comment_lines))} comments" def displayable(self, dataset): def displayable(self, dataset: DatasetInstance): try: return ( dataset.has_data() not dataset.dataset.purged and dataset.has_data() and dataset.state == dataset.states.OK and dataset.metadata.columns > 0 and dataset.metadata.data_lines != 0 Loading
lib/galaxy/webapps/galaxy/controllers/dataset.py +55 −48 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ from galaxy.managers.hdas import ( HDAManager, ) from galaxy.managers.histories import HistoryManager from galaxy.model import Dataset from galaxy.model.item_attrs import ( UsesAnnotations, UsesItemRatings, Loading Loading @@ -147,17 +148,27 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE except Exception: data = None if not data: raise paste.httpexceptions.HTTPRequestRangeNotSatisfiable(f"Invalid reference dataset id: {str(hda_id)}.") raise web.httpexceptions.HTTPNotFound(f"Invalid reference dataset id: {str(hda_id)}.") if not self._can_access_dataset(trans, data): return trans.show_error_message("You are not allowed to access this dataset") if data.purged: return trans.show_error_message("The dataset you are attempting to view has been purged.") if data.deleted and not (trans.user_is_admin or (data.history and trans.get_user() == data.history.user)): elif data.deleted and not (trans.user_is_admin or (data.history and trans.get_user() == data.history.user)): return trans.show_error_message("The dataset you are attempting to view has been deleted.") if data.state == trans.model.Dataset.states.UPLOAD: elif data.state == Dataset.states.UPLOAD: return trans.show_error_message( "Please wait until this dataset finishes uploading before attempting to view it." ) elif data.state == Dataset.states.DISCARDED: return trans.show_error_message("The dataset you are attempting to view has been discarded.") elif data.state == Dataset.states.DEFERRED: return trans.show_error_message( "The dataset you are attempting to view has deferred data. You can only use this dataset as input for jobs." ) elif data.state == Dataset.states.PAUSED: return trans.show_error_message( "The dataset you are attempting to view is in paused state. One of the inputs for the job that creates this dataset has failed." ) return data @web.expose Loading Loading @@ -563,11 +574,9 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE @web.expose def display_by_username_and_slug(self, trans, username, slug, filename=None, preview=True): """Display dataset by username and slug; because datasets do not yet have slugs, the slug is the dataset's id.""" id = slug decoded_id = self.decode_id(id) dataset = self.hda_manager.get_accessible(decoded_id, trans.user) dataset = self.hda_manager.error_if_uploading(dataset) if dataset: dataset = self._check_dataset(trans, slug) if not isinstance(dataset, trans.app.model.DatasetInstance): return dataset # Filename used for composite types. if filename: return self.display(trans, dataset_id=slug, filename=filename) Loading Loading @@ -610,8 +619,6 @@ class DatasetInterface(BaseUIController, UsesAnnotations, UsesItemRatings, UsesE num_ratings=num_ratings, first_chunk=first_chunk, ) else: raise web.httpexceptions.HTTPNotFound() @web.expose def get_item_content_async(self, trans, id): Loading
lib/galaxy/webapps/galaxy/services/dataset_collections.py +8 −1 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ from pydantic import ( BaseModel, Extra, Field, ValidationError, ) from galaxy import exceptions Loading Loading @@ -254,4 +255,10 @@ class DatasetCollectionsService(ServiceBase, UsesLibraryMixinItems): return result rval = [serialize_element(el) for el in contents] try: return DatasetCollectionContentElements.parse_obj(rval) except ValidationError: log.exception( f"Serializing DatasetCollectionContentsElements failed. Collection is populated: {hdca.collection.populated}" ) raise