Merge pull request #13600 from simonbray/trs-ui

Expose TRS id of imported workflows in the UI
This commit is contained in:
John Chilton
2022-04-04 19:12:02 -04:00
committed by GitHub
4 changed files with 55 additions and 2 deletions
@@ -9,6 +9,17 @@
<font-awesome-icon icon="caret-down" />
<span>{{ workflow.name }}</span>
</b-link>
<font-awesome-icon
v-if="sourceType.includes('trs')"
v-b-tooltip.hover
:title="`Imported from TRS ID (version ${workflow.source_metadata.trs_version_id})`"
icon="check"
style="color: green" />
<font-awesome-icon
v-if="sourceType == 'url'"
v-b-tooltip.hover
:title="`Imported from ${workflow.source_metadata.url}`"
icon="link" />
<p v-if="workflow.description">{{ workflow.description }}</p>
<div v-if="workflow.shared" class="dropdown-menu" aria-labelledby="workflow-dropdown">
<a class="dropdown-item" href="#" @click.prevent="onCopy">
@@ -45,6 +56,10 @@
<span class="fa fa-eye fa-fw mr-1" />
<span>View</span>
</a>
<a v-if="sourceLabel" class="dropdown-item" :href="sourceUrl">
<span class="fa fa-globe fa-fw mr-1" />
<span>{{ sourceLabel }}</span>
</a>
<a class="dropdown-item" href="#" @click.prevent="onDelete">
<span class="fa fa-trash fa-fw mr-1" />
<span>Delete</span>
@@ -85,6 +100,39 @@ export default {
this.workflow.slug
}`;
},
sourceUrl() {
if (this.workflow.source_metadata?.url) {
return this.workflow.source_metadata.url;
} else if (this.workflow.source_metadata?.trs_server) {
if (this.workflow.source_metadata?.trs_server == "dockstore") {
return `https://dockstore.org/workflows${this.workflow.source_metadata.trs_tool_id.slice(9)}`;
} else {
// TODO: add WorkflowHub
return null;
}
} else {
return null;
}
},
sourceLabel() {
if (this.workflow.source_metadata?.url) {
return "View external link";
} else if (this.workflow.source_metadata?.trs_server == "dockstore") {
return "View on Dockstore";
} else {
// TODO: add WorkflowHub
return null;
}
},
sourceType() {
if (this.workflow.source_metadata?.url) {
return "url";
} else if (this.workflow.source_metadata?.trs_server) {
return `trs_${this.workflow.source_metadata?.trs_server}`;
} else {
return "";
}
},
},
created() {
this.root = getAppRoot();
+1
View File
@@ -1295,6 +1295,7 @@ class WorkflowContentsManager(UsesAnnotations):
item["annotation"] = self.get_item_annotation_str(sa_session, stored.user, stored)
item["license"] = workflow.license
item["creator"] = workflow.creator_metadata
item["source_metadata"] = workflow.source_metadata
steps = {}
steps_to_order_index = {}
for step in workflow.steps:
+5 -1
View File
@@ -180,6 +180,7 @@ class WorkflowsAPIController(BaseGalaxyAPIController, UsesStoredWorkflowMixin, U
item["annotations"] = [x.annotation for x in wf.annotations]
item["url"] = url_for("workflow", id=encoded_id)
item["owner"] = wf.user.username
item["source_metadata"] = wf.latest_workflow.source_metadata
item["number_of_steps"] = wf.latest_workflow.step_count
item["show_in_tool_panel"] = False
if user is not None:
@@ -360,10 +361,12 @@ class WorkflowsAPIController(BaseGalaxyAPIController, UsesStoredWorkflowMixin, U
trs_server = payload.get("trs_server")
trs_tool_id = payload.get("trs_tool_id")
trs_version_id = payload.get("trs_version_id")
import_source = None
archive_data = self.app.trs_proxy.get_version_descriptor(trs_server, trs_tool_id, trs_version_id)
else:
try:
archive_data = requests.get(archive_source, timeout=util.DEFAULT_SOCKET_TIMEOUT).text
import_source = "URL"
except Exception:
raise exceptions.MessageException(f"Failed to open URL '{escape(archive_source)}'.")
elif hasattr(archive_file, "file"):
@@ -371,11 +374,12 @@ class WorkflowsAPIController(BaseGalaxyAPIController, UsesStoredWorkflowMixin, U
uploaded_file_name = uploaded_file.name
if os.path.getsize(os.path.abspath(uploaded_file_name)) > 0:
archive_data = util.unicodify(uploaded_file.read())
import_source = "uploaded file"
else:
raise exceptions.MessageException("You attempted to upload an empty file.")
else:
raise exceptions.MessageException("Please provide a URL or file.")
return self.__api_import_from_archive(trans, archive_data, "uploaded file", payload=payload)
return self.__api_import_from_archive(trans, archive_data, import_source, payload=payload)
if "from_history_id" in payload:
from_history_id = payload.get("from_history_id")
@@ -19,7 +19,7 @@ class WorkflowManagementTestCase(SeleniumTestCase):
assert len(table_elements) == 1
new_workflow = table_elements[0].find_element_by_css_selector(".workflow-dropdown")
assert "TestWorkflow1 (imported from uploaded file)" in new_workflow.text, new_workflow.text
assert "TestWorkflow1 (imported from URL)" in new_workflow.text, new_workflow.text
@selenium_test
def test_view(self):