mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge branch 'release_22.05' into dev
This commit is contained in:
@@ -45,7 +45,7 @@
|
||||
@onUpdateFavorites="onUpdateFavorites">
|
||||
<template v-slot:body>
|
||||
<FormDisplay
|
||||
:id="formConfig.id"
|
||||
:id="toolId"
|
||||
:inputs="formConfig.inputs"
|
||||
:validation-scroll-to="validationScrollTo"
|
||||
@onChange="onChange"
|
||||
@@ -170,6 +170,12 @@ export default {
|
||||
toolName() {
|
||||
return this.formConfig.name;
|
||||
},
|
||||
toolId() {
|
||||
// ensure version is included in tool id, otherwise form inputs are
|
||||
// not re-rendered when versions change.
|
||||
const { id, version } = this.formConfig;
|
||||
return id.endsWith(version) ? id : `${id}/${version}`;
|
||||
},
|
||||
tooltip() {
|
||||
return `Execute: ${this.formConfig.name} (${this.formConfig.version})`;
|
||||
},
|
||||
|
||||
@@ -101,9 +101,9 @@ export default {
|
||||
return `/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;
|
||||
|
||||
@@ -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,
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
@@ -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
|
||||
@@ -563,55 +574,51 @@ 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:
|
||||
# Filename used for composite types.
|
||||
if filename:
|
||||
return self.display(trans, dataset_id=slug, filename=filename)
|
||||
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)
|
||||
|
||||
truncated, dataset_data = self.hda_manager.text_data(dataset, preview)
|
||||
dataset.annotation = self.get_item_annotation_str(trans.sa_session, dataset.history.user, dataset)
|
||||
truncated, dataset_data = self.hda_manager.text_data(dataset, preview)
|
||||
dataset.annotation = self.get_item_annotation_str(trans.sa_session, dataset.history.user, dataset)
|
||||
|
||||
# If dataset is chunkable, get first chunk.
|
||||
first_chunk = None
|
||||
if dataset.datatype.CHUNKABLE:
|
||||
first_chunk = dataset.datatype.get_chunk(trans, dataset, 0)
|
||||
# If dataset is chunkable, get first chunk.
|
||||
first_chunk = None
|
||||
if dataset.datatype.CHUNKABLE:
|
||||
first_chunk = dataset.datatype.get_chunk(trans, dataset, 0)
|
||||
|
||||
# If data is binary or an image, stream without template; otherwise, use display template.
|
||||
# TODO: figure out a way to display images in display template.
|
||||
if (
|
||||
isinstance(dataset.datatype, datatypes.binary.Binary)
|
||||
or isinstance(dataset.datatype, datatypes.images.Image)
|
||||
or isinstance(dataset.datatype, datatypes.text.Html)
|
||||
):
|
||||
trans.response.set_content_type(dataset.get_mime())
|
||||
return open(dataset.file_name, "rb")
|
||||
else:
|
||||
# Get rating data.
|
||||
user_item_rating = 0
|
||||
if trans.get_user():
|
||||
user_item_rating = self.get_user_item_rating(trans.sa_session, trans.get_user(), dataset)
|
||||
if user_item_rating:
|
||||
user_item_rating = user_item_rating.rating
|
||||
else:
|
||||
user_item_rating = 0
|
||||
ave_item_rating, num_ratings = self.get_ave_item_rating_data(trans.sa_session, dataset)
|
||||
|
||||
return trans.fill_template_mako(
|
||||
"/dataset/display.mako",
|
||||
item=dataset,
|
||||
item_data=dataset_data,
|
||||
truncated=truncated,
|
||||
user_item_rating=user_item_rating,
|
||||
ave_item_rating=ave_item_rating,
|
||||
num_ratings=num_ratings,
|
||||
first_chunk=first_chunk,
|
||||
)
|
||||
# If data is binary or an image, stream without template; otherwise, use display template.
|
||||
# TODO: figure out a way to display images in display template.
|
||||
if (
|
||||
isinstance(dataset.datatype, datatypes.binary.Binary)
|
||||
or isinstance(dataset.datatype, datatypes.images.Image)
|
||||
or isinstance(dataset.datatype, datatypes.text.Html)
|
||||
):
|
||||
trans.response.set_content_type(dataset.get_mime())
|
||||
return open(dataset.file_name, "rb")
|
||||
else:
|
||||
raise web.httpexceptions.HTTPNotFound()
|
||||
# Get rating data.
|
||||
user_item_rating = 0
|
||||
if trans.get_user():
|
||||
user_item_rating = self.get_user_item_rating(trans.sa_session, trans.get_user(), dataset)
|
||||
if user_item_rating:
|
||||
user_item_rating = user_item_rating.rating
|
||||
else:
|
||||
user_item_rating = 0
|
||||
ave_item_rating, num_ratings = self.get_ave_item_rating_data(trans.sa_session, dataset)
|
||||
|
||||
return trans.fill_template_mako(
|
||||
"/dataset/display.mako",
|
||||
item=dataset,
|
||||
item_data=dataset_data,
|
||||
truncated=truncated,
|
||||
user_item_rating=user_item_rating,
|
||||
ave_item_rating=ave_item_rating,
|
||||
num_ratings=num_ratings,
|
||||
first_chunk=first_chunk,
|
||||
)
|
||||
|
||||
@web.expose
|
||||
def get_item_content_async(self, trans, id):
|
||||
|
||||
@@ -9,6 +9,7 @@ from pydantic import (
|
||||
BaseModel,
|
||||
Extra,
|
||||
Field,
|
||||
ValidationError,
|
||||
)
|
||||
|
||||
from galaxy import exceptions
|
||||
@@ -254,4 +255,10 @@ class DatasetCollectionsService(ServiceBase, UsesLibraryMixinItems):
|
||||
return result
|
||||
|
||||
rval = [serialize_element(el) for el in contents]
|
||||
return DatasetCollectionContentElements.parse_obj(rval)
|
||||
try:
|
||||
return DatasetCollectionContentElements.parse_obj(rval)
|
||||
except ValidationError:
|
||||
log.exception(
|
||||
f"Serializing DatasetCollectionContentsElements failed. Collection is populated: {hdca.collection.populated}"
|
||||
)
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user