generalize to source_metadata column and set for url uploads;

add new column to test_model_mapping
This commit is contained in:
Simon Bray
2022-02-16 11:54:00 +01:00
parent 380d370b6d
commit e906565108
5 changed files with 40 additions and 32 deletions
+18 -17
View File
@@ -524,16 +524,18 @@ class WorkflowContentsManager(UsesAnnotations):
workflow.reports_config = data["report"]
workflow.license = data.get("license")
workflow.creator_metadata = data.get("creator")
if hasattr(workflow_state_resolution_options, "trs_tool_id") and hasattr(
workflow_state_resolution_options, "trs_version_id"
):
if workflow_state_resolution_options.trs_tool_id and workflow_state_resolution_options.trs_version_id:
workflow.trs_tool_id = workflow_state_resolution_options.trs_tool_id
workflow.trs_version_id = workflow_state_resolution_options.trs_version_id
workflow_state_resolution_options.trs_tool_id, workflow_state_resolution_options.trs_version_id = (
None,
None,
) # so trs_id is not set for subworkflows
if hasattr(workflow_state_resolution_options, "archive_source"):
if workflow_state_resolution_options.archive_source:
source_metadata = {}
if workflow_state_resolution_options.archive_source == "trs_tool":
source_metadata["trs_tool_id"] = workflow_state_resolution_options.trs_tool_id
source_metadata["trs_version_id"] = workflow_state_resolution_options.trs_version_id
source_metadata["trs_server"] = workflow_state_resolution_options.trs_server
elif not workflow_state_resolution_options.archive_source.startswith("file://"): # URL import
source_metadata["url"] = workflow_state_resolution_options.archive_source
workflow_state_resolution_options.archive_source = None # so trs_id is not set for subworkflows
workflow.source_metadata = source_metadata
# Assume no errors until we find a step that has some
workflow.has_errors = False
@@ -859,8 +861,7 @@ class WorkflowContentsManager(UsesAnnotations):
data["report"] = workflow.reports_config or {}
data["license"] = workflow.license
data["creator"] = workflow.creator_metadata
data["trs_tool_id"] = workflow.trs_tool_id
data["trs_version_id"] = workflow.trs_version_id
data["source_metadata"] = workflow.source_metadata
data["annotation"] = self.get_item_annotation_str(trans.sa_session, trans.user, stored) or ""
output_label_index = set()
@@ -1100,10 +1101,8 @@ class WorkflowContentsManager(UsesAnnotations):
data["creator"] = workflow.creator_metadata
if workflow.license:
data["license"] = workflow.license
if workflow.trs_tool_id:
data["trs_tool_id"] = workflow.trs_tool_id
if workflow.trs_version_id:
data["trs_version_id"] = workflow.trs_version_id
if workflow.source_metadata:
data["source_metadata"] = workflow.source_metadata
# For each step, rebuild the form and encode the state
for step in workflow.steps:
# Load from database representation
@@ -1654,9 +1653,11 @@ class WorkflowCreateOptions(WorkflowStateResolutionOptions):
tool_panel_section_mapping: Dict = {}
shed_tool_conf: Optional[str] = None
# for workflows imported by trs id
# for workflows imported by archive source
archive_source: str = ""
trs_tool_id: str = ""
trs_version_id: str = ""
trs_server: str = ""
@property
def is_importable(self):
+1 -2
View File
@@ -6608,8 +6608,7 @@ class Workflow(Base, Dictifiable, RepresentById):
reports_config = Column(MutableJSONType)
creator_metadata = Column(MutableJSONType)
license = Column(TEXT)
trs_tool_id = Column(TEXT)
trs_version_id = Column(TEXT)
source_metadata = Column(MutableJSONType)
uuid = Column(UUIDType, nullable=True)
steps = relationship(
@@ -1,5 +1,5 @@
"""
Migration script for adding trs_id column to workflow table.
Migration script for adding source_metadata column to workflow table.
"""
import logging
@@ -7,9 +7,9 @@ import logging
from sqlalchemy import (
Column,
MetaData,
Text,
)
from galaxy.model.custom_types import JSONType
from galaxy.model.migrate.versions.util import (
add_column,
drop_column,
@@ -24,16 +24,12 @@ def upgrade(migrate_engine):
metadata.bind = migrate_engine
metadata.reflect()
trs_tool_id_column = Column("trs_tool_id", Text)
add_column(trs_tool_id_column, "workflow", metadata)
trs_version_id_column = Column("trs_version_id", Text)
add_column(trs_version_id_column, "workflow", metadata)
source_metadata_column = Column("source_metadata", JSONType)
add_column(source_metadata_column, "workflow", metadata)
def downgrade(migrate_engine):
metadata.bind = migrate_engine
metadata.reflect()
drop_column("trs_tool_id", "workflow", metadata)
drop_column("trs_version_id", "workflow", metadata)
drop_column("source_metadata", "workflow", metadata)
+13 -4
View File
@@ -645,6 +645,15 @@ steps:
other_import_response = self.__import_workflow(workflow_id)
self._assert_status_code_is(other_import_response, 403)
def test_url_import(self):
url = "https://raw.githubusercontent.com/galaxyproject/galaxy/release_19.09/test/base/data/test_workflow_1.ga"
workflow_id = self._post("workflows", data={"archive_source": url}).json()["id"]
workflow = self._download_workflow(workflow_id)
assert "TestWorkflow1" in workflow["name"]
assert (
workflow.get("source_metadata").get("url") == url
) # disappearance of source_metadata on modification is tested in test_trs_import
def test_trs_import(self):
trs_payload = {
"archive_source": "trs_tool",
@@ -655,8 +664,8 @@ steps:
workflow_id = self._post("workflows", data=trs_payload).json()["id"]
original_workflow = self._download_workflow(workflow_id)
assert "Test Workflow" in original_workflow["name"]
assert original_workflow.get("trs_tool_id") == trs_payload["trs_tool_id"]
assert original_workflow.get("trs_version_id") == trs_payload["trs_version_id"]
assert original_workflow.get("source_metadata").get("trs_tool_id") == trs_payload["trs_tool_id"]
assert original_workflow.get("source_metadata").get("trs_version_id") == trs_payload["trs_version_id"]
# refactor workflow and check that the trs id is removed
actions = [
@@ -664,12 +673,12 @@ steps:
]
self.workflow_populator.refactor_workflow(workflow_id, actions)
refactored_workflow = self._download_workflow(workflow_id)
assert refactored_workflow.get("trs_tool_id") is None
assert refactored_workflow.get("source_metadata") is None
# reupload original_workflow and check that the trs id is removed
reuploaded_workflow_id = self.workflow_populator.create_workflow(original_workflow)
reuploaded_workflow = self._download_workflow(reuploaded_workflow_id)
assert reuploaded_workflow.get("trs_tool_id") is None
assert reuploaded_workflow.get("source_metadata") is None
def test_anonymous_published(self):
def anonymous_published_workflows():
@@ -5356,6 +5356,7 @@ class TestWorkflow(BaseTest):
reports_config = "b"
creator_metadata = "c"
license = "d"
source_metadata = "e"
uuid = uuid4()
obj = cls_()
@@ -5369,6 +5370,7 @@ class TestWorkflow(BaseTest):
obj.reports_config = reports_config
obj.creator_metadata = creator_metadata
obj.license = license
obj.source_metadata = source_metadata
obj.uuid = uuid
with dbcleanup(session, obj) as obj_id:
@@ -5384,6 +5386,7 @@ class TestWorkflow(BaseTest):
assert stored_obj.reports_config == reports_config
assert stored_obj.creator_metadata == creator_metadata
assert stored_obj.license == license
assert stored_obj.source_metadata == source_metadata
assert stored_obj.uuid == uuid
def test_relationships(self, session, cls_, stored_workflow, workflow, workflow_step_factory):