Fix re-run with DCE inputs

This commit is contained in:
mvdbeek
2023-05-09 11:04:18 +02:00
parent 13514a76a6
commit c14db55910
3 changed files with 43 additions and 10 deletions
+11 -6
View File
@@ -424,12 +424,12 @@ const View = Backbone.View.extend({
const select_options = { hda: [], hdca: [] };
_.each(options, (items, src) => {
_.each(items, (item) => {
self._patchValue(item);
self._patchValue(item, src);
const current_src = item.src || src;
const addOption = !this.model.attributes.tag || item.tags.includes(this.model.attributes.tag);
if (addOption) {
select_options[current_src].push({
hid: item.hid,
hid: item.hid || Infinity, // if we got no hid we have a "Selected" item
keep: item.keep,
label: `${item.hid || "Selected"}: ${item.name}`,
value: item.id,
@@ -455,7 +455,12 @@ const View = Backbone.View.extend({
list.push(value.id);
});
// sniff first suitable field type from config list
const src = new_value.values[0].src;
let src = new_value.values[0].src;
if (src === "dce") {
src =
this.cache[`dce${new_value.values[0].id}_hda`]?.src ||
this.cache[`dce${new_value.values[0].id}_hdca`]?.src;
}
const multiple = new_value.values.length > 1;
for (let i = 0; i < this.config.length; i++) {
const field = this.fields[i];
@@ -480,11 +485,11 @@ const View = Backbone.View.extend({
/** Library datasets are displayed and selected together with history datasets,
Dataset collection elements are displayed together with history dataset collections **/
_patchValue: function (v) {
const patchTo = { ldda: "hda", dce: "hdca" };
_patchValue: function (v, src) {
const patchTo = { ldda: "hda", dce: src };
if (v.values) {
_.each(v.values, (v) => {
this._patchValue(v);
this._patchValue(v, src);
});
} else if (patchTo[v.src]) {
v.origin = v.src;
+1 -3
View File
@@ -520,9 +520,7 @@ class GalaxyRBACAgent(RBACAgent):
return True
def can_access_collection(
self, user_roles: List[galaxy.model.Role], collection: galaxy.model.DatasetCollection
):
def can_access_collection(self, user_roles: List[galaxy.model.Role], collection: galaxy.model.DatasetCollection):
action_tuples = collection.dataset_action_tuples
if not self.can_access_datasets(user_roles, action_tuples):
return False
+31 -1
View File
@@ -2092,6 +2092,9 @@ class DataToolParameter(BaseDataToolParameter):
elif single_value["src"] == "ldda":
decoded_id = trans.security.decode_id(single_value["id"])
rval.append(trans.sa_session.query(LibraryDatasetDatasetAssociation).get(decoded_id))
elif single_value["src"] == "dce":
decoded_id = trans.security.decode_id(single_value["id"])
rval.append(trans.sa_session.query(DatasetCollectionElement).get(decoded_id))
else:
raise ValueError(f"Unknown input source {single_value['src']} passed to job submission API.")
elif isinstance(
@@ -2127,6 +2130,9 @@ class DataToolParameter(BaseDataToolParameter):
elif value["src"] == "hdca":
decoded_id = trans.security.decode_id(value["id"])
rval.append(trans.sa_session.query(HistoryDatasetCollectionAssociation).get(decoded_id))
elif value["src"] == "dce":
decoded_id = trans.security.decode_id(value["id"])
rval.append(trans.sa_session.query(DatasetCollectionElement).get(decoded_id))
else:
raise ValueError(f"Unknown input source {value['src']} passed to job submission API.")
elif str(value).startswith("__collection_reduce__|"):
@@ -2280,6 +2286,28 @@ class DataToolParameter(BaseDataToolParameter):
value["map_over_type"] = subcollection_type
return list.append(value)
def append_dce(dce):
if dce.hda:
# well this isn't good, but what's the alternative ?
# we should be precise about what we're (re-)running here.
key = "hda"
else:
key = "hdca"
d["options"][key].append(
{
"id": trans.security.encode_id(dce.id),
"name": dce.element_identifier,
"src": "dce",
"tags": [],
"keep": True,
}
)
# append DCE
if isinstance(other_values.get(self.name), DatasetCollectionElement):
dce = other_values[self.name]
append_dce(dce)
# add datasets
hda_list = util.listify(other_values.get(self.name))
# Prefetch all at once, big list of visible, non-deleted datasets.
@@ -2299,6 +2327,8 @@ class DataToolParameter(BaseDataToolParameter):
else:
hda_state = "unavailable"
append(d["options"]["hda"], hda, f"({hda_state}) {hda.name}", "hda", True)
elif isinstance(hda, DatasetCollectionElement):
append_dce(hda)
# add dataset collections
dataset_collection_matcher = dataset_matcher_factory.dataset_collection_matcher(dataset_matcher)
@@ -2460,7 +2490,7 @@ class DataCollectionToolParameter(BaseDataToolParameter):
# append DCE
if isinstance(other_values.get(self.name), DatasetCollectionElement):
dce = other_values[self.name]
d["options"]["dce"].append(
d["options"]["hdca"].append(
{
"id": trans.security.encode_id(dce.id),
"hid": None,