Warning
This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.
Source code for galaxy.util.create_history_template
"""
Methods to create template for history details recursively.
Used in dataset and history controllers
"""
from galaxy.util import listify
from galaxy.web import url_for
[docs]def render_item(trans, entity, children):
"""
Form HTML template for each item in the history
"""
template = ''
entity_name = entity.__class__.__name__
if entity_name == "HistoryDatasetAssociation":
template = render_item_hda(trans, entity, children)
elif entity_name == "Job":
template = render_item_job(trans, entity, children)
elif entity_name == "WorkflowInvocation":
template = render_item_wf(trans, entity, children)
return template
[docs]def render_item_hda(trans, hda, children):
"""
Render hdas as a id'd stub for js to fill later
"""
template = ''
if hda.copied_from_history_dataset_association:
template = render_hda_copied_from_history(trans, hda, children)
elif hda.copied_from_library_dataset_dataset_association:
template = render_hda_copied_from_library(trans, hda, children)
else:
template = '<div id="hda-' + trans.security.encode_id(hda.id) + '" class="dataset hda state-' + hda.state + '"></div>'
return template
[docs]def render_hda_copied_from_history(trans, hda, children):
"""
Wrap an hda in info about the history from where it was copied
"""
template = ''
id = trans.security.encode_id(hda.id)
history_id = trans.security.encode_id(hda.copied_from_history_dataset_association.history_id)
url = url_for('/histories/view?id=' + history_id)
template = '<div class="copied-from copied-from-history"><div class="header"><div class="copied-from-dataset">'
template += '<span class="light"> Copied from history dataset: </span>'
template += '<span class="bold">' + hda.copied_from_history_dataset_association.name + '</span>'
template += '</div><div class="copied-from-source">'
template += '<span class="light">History: </span>'
template += '<span class="bold">'
template += '<a href="' + url + '">' + hda.copied_from_history_dataset_association.history.name + '</a>'
template += '</span></div></div>'
template += '<div id="hda-' + id + '" class="dataset hda state-' + hda.state + '"></div></div>'
return template
[docs]def render_hda_copied_from_library(trans, hda, children):
"""
Wrap an hda in info about the library from where it was copied
"""
template = ''
id = trans.security.encode_id(hda.id)
folder = hda.copied_from_library_dataset_dataset_association.library_dataset.folder
folder_id = 'F' + trans.security.encode_id(folder.id)
url = url_for('/library/list#folders/' + folder_id)
template = '<div class="copied-from copied-from-library">'
template += '<div class="header">'
template += '<div class="copied-from-dataset">'
template += '<span class="light">Copied from library dataset:</span>'
template += '<span class="bold">' + hda.copied_from_library_dataset_dataset_association.name + '</span>'
template += '</div>'
template += '<div class="copied-from-source">'
template += '<span class="light">Library: </span>'
template += '<span class="bold">'
template += '<a href="' + url + '">' + folder.name + '</a></span></div></div>'
template += '<div id="hda-' + id + '" class="dataset hda state-' + hda.state + '"></div></div>'
return template
[docs]def render_item_job(trans, job, children):
"""
Render a job (as a toolForm) and its children (hdas)
"""
template = ''
template = '<div class="tool toolForm">'
tool = trans.app.toolbox.get_tool(job.tool_id, tool_version=job.tool_version)
if tool:
tool_name = tool.name
tool_desc = tool.description
else:
tool_name = "Unknown tool with id: %s" % job.tool_id
tool_desc = ''
params_object = None
try:
params_object = job.get_param_values(trans.app, ignore_errors=True)
except Exception:
pass
template += '<div class="header"><div class="toolFormTitle"><span class="bold">' + tool_name + '</span>'
template += '<span class="light"> - ' + tool_desc + '</span></div>'
if tool and params_object:
template += '<table class="job-inputs">'
template += inputs_recursive(trans, tool.inputs, params_object, depth=1)
template += '</table>'
else:
template += '<em>No parameter data available</em>'
template += '</div>'
template += '<div class="body toolFormBody">'
child_template = ''
for e, c in reversed(children):
child_template += render_item(trans, e, c)
template += child_template
template += '</div></div>'
return template
[docs]def render_item_wf(trans, wf, children):
"""
Render a workflow and its children (jobs/toolForms)
"""
template = ''
template = '<div class="workflow"><div class="header"><span class="bold">' + wf.workflow.name + '</span>'
template += '<span class="light">- Workflow</span></div><div class="body">'
for e, c in reversed(children):
template += render_item(trans, e, c)
template += '</div></div>'
return template
[docs]def inputs_recursive_indent(text, depth):
"""
Add an indentation depending on the depth in a <tr>
"""
return '<td style="padding-left:' + str((depth - 1) * 10) + 'px">' + text + '</td>'
[docs]def inputs_recursive(trans, input_params, param_values, depth=1, upgrade_messages=None):
"""
Recursive method for tool parameter section
"""
tool_parameter_template = ''
if upgrade_messages is None:
upgrade_messages = {}
for input_index, input in enumerate(input_params.itervalues()):
if input.name in param_values:
if input.type == "repeat":
for i in range(len(param_values[input.name])):
inputs_recursive(trans, input.inputs, param_values[input.name][i], depth=depth + 1)
elif input.type == "section":
tool_parameter_template += '<tr>'
tool_parameter_template += inputs_recursive_indent(text=input.name, depth=depth)
tool_parameter_template += '<td></td></tr>'
inputs_recursive(trans, input.inputs, param_values[input.name], depth=depth + 1, upgrade_messages=upgrade_messages.get(input.name))
elif input.type == "conditional":
try:
current_case = param_values[input.name]['__current_case__']
is_valid = True
except Exception:
current_case = None
is_valid = False
if is_valid:
tool_parameter_template += '<tr>'
tool_parameter_template += inputs_recursive_indent(text=input.test_param.label, depth=depth)
tool_parameter_template += '<td>' + input.cases[current_case].value + '</td><td></td></tr>'
inputs_recursive(trans, input.cases[current_case].inputs, param_values[input.name], depth=depth + 1, upgrade_messages=upgrade_messages.get(input.name))
else:
tool_parameter_template += '<tr>'
tool_parameter_template += inputs_recursive_indent(text=input.name, depth=depth)
tool_parameter_template += '<td><em> The previously used value is no longer valid </em></td><td></td></tr>'
elif input.type == "upload_dataset":
tool_parameter_template += '<tr>'
tool_parameter_template += inputs_recursive_indent(text=input.group_title(param_values), depth=depth)
tool_parameter_template += '<td>' + str(len(param_values[input.name])) + ' uploaded datasets</td><td></td></tr>'
elif input.type == "data":
tool_parameter_template += '<tr>'
tool_parameter_template += inputs_recursive_indent(text=input.label, depth=depth)
tool_parameter_template += '<td>'
for i, element in enumerate(listify(param_values[input.name])):
if i > 0:
tool_parameter_template += ','
if element.history_content_type == "dataset":
hda = element
encoded_id = trans.security.encode_id(hda.id)
dataset_info_url = url_for(controller="dataset", action="show_params", dataset_id=encoded_id)
tool_parameter_template += '<a class="input-dataset-show-params" target="galaxy_main" data-hda-id="' + encoded_id + '"'
tool_parameter_template += 'href="' + dataset_info_url + '">' + str(hda.hid) + ':' + hda.name + '</a>'
else:
tool_parameter_template += str(element.hid) + ':' + element.name
tool_parameter_template += '</td><td></td></tr>'
elif input.visible:
label = input.label if (hasattr(input, "label") and input.label) else input.name
tool_parameter_template += '<tr>'
tool_parameter_template += inputs_recursive_indent(text=label, depth=depth)
tool_parameter_template += '<td>' + input.value_to_display_text(param_values[input.name]) + '</td>'
tool_parameter_template += '<td>' + upgrade_messages.get(input.name, '') + '</td></tr>'
else:
tool_parameter_template += '<tr>'
if input.type == "conditional":
label = input.test_param.label
elif input.type == "repeat":
label = input.label()
else:
label = input.label or input.name
tool_parameter_template += inputs_recursive_indent(text=label, depth=depth)
tool_parameter_template += '<td><em> not used (parameter was added after this job was run)</em></td><td></td></tr>'
return tool_parameter_template