mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge pull request #13600 from simonbray/trs-ui
Expose TRS id of imported workflows in the UI
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user