Warning
This document is for an in-development version 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.model.migrate.versions.0123_add_workflow_request_tables
"""
Migration script for workflow request tables.
"""
from __future__ import print_function
import logging
from sqlalchemy import (
Column,
ForeignKey,
Integer,
MetaData,
String,
Table,
TEXT,
Unicode
)
from galaxy.model.custom_types import (
JSONType,
TrimmedString,
UUIDType
)
from galaxy.model.migrate.versions.util import (
add_column,
create_table,
drop_column,
drop_table
)
log = logging.getLogger(__name__)
metadata = MetaData()
WorkflowRequestInputParameter_table = Table(
"workflow_request_input_parameters", metadata,
Column("id", Integer, primary_key=True),
Column("workflow_invocation_id", Integer, ForeignKey("workflow_invocation.id", onupdate="CASCADE", ondelete="CASCADE")),
Column("name", Unicode(255)),
Column("type", Unicode(255)),
Column("value", TEXT),
)
WorkflowRequestStepState_table = Table(
"workflow_request_step_states", metadata,
Column("id", Integer, primary_key=True),
Column("workflow_invocation_id", Integer, ForeignKey("workflow_invocation.id", onupdate="CASCADE", ondelete="CASCADE")),
Column("workflow_step_id", Integer, ForeignKey("workflow_step.id")),
Column("value", JSONType),
)
WorkflowRequestToInputDatasetAssociation_table = Table(
"workflow_request_to_input_dataset", metadata,
Column("id", Integer, primary_key=True),
Column("name", String(255)),
Column("workflow_invocation_id", Integer, ForeignKey("workflow_invocation.id"), index=True),
Column("workflow_step_id", Integer, ForeignKey("workflow_step.id")),
Column("dataset_id", Integer, ForeignKey("history_dataset_association.id"), index=True),
)
WorkflowRequestToInputDatasetCollectionAssociation_table = Table(
"workflow_request_to_input_collection_dataset", metadata,
Column("id", Integer, primary_key=True),
Column("name", String(255)),
Column("workflow_invocation_id", Integer, ForeignKey("workflow_invocation.id"), index=True),
Column("workflow_step_id", Integer, ForeignKey("workflow_step.id")),
Column("dataset_collection_id", Integer, ForeignKey("history_dataset_collection_association.id"), index=True),
)
TABLES = [
WorkflowRequestInputParameter_table,
WorkflowRequestStepState_table,
WorkflowRequestToInputDatasetAssociation_table,
WorkflowRequestToInputDatasetCollectionAssociation_table,
]
[docs]def upgrade(migrate_engine):
print(__doc__)
metadata.bind = migrate_engine
metadata.reflect()
for table in TABLES:
create_table(table)
History_column = Column("history_id", Integer, ForeignKey("history.id"), nullable=True)
State_column = Column("state", TrimmedString(64))
# TODO: Handle indexes correctly
SchedulerId_column = Column("scheduler", TrimmedString(255))
HandlerId_column = Column("handler", TrimmedString(255))
WorkflowUUID_column = Column("uuid", UUIDType, nullable=True)
add_column(History_column, "workflow_invocation", metadata)
add_column(State_column, "workflow_invocation", metadata)
add_column(SchedulerId_column, "workflow_invocation", metadata, index_nane="id_workflow_invocation_scheduler")
add_column(HandlerId_column, "workflow_invocation", metadata, index_name="id_workflow_invocation_handler")
add_column(WorkflowUUID_column, "workflow_invocation", metadata)
# All previous invocations have been scheduled...
cmd = "UPDATE workflow_invocation SET state = 'scheduled'"
try:
migrate_engine.execute(cmd)
except Exception:
log.exception("failed to update past workflow invocation states.")
WorkflowInvocationStepAction_column = Column("action", JSONType, nullable=True)
add_column(WorkflowInvocationStepAction_column, "workflow_invocation_step", metadata)
[docs]def downgrade(migrate_engine):
metadata.bind = migrate_engine
metadata.reflect()
for table in TABLES:
drop_table(table)
drop_column("state", "workflow_invocation", metadata)
drop_column("scheduler", "workflow_invocation", metadata)
drop_column("uuid", "workflow_invocation", metadata)
drop_column("history_id", "workflow_invocation", metadata)
drop_column("handler", "workflow_invocation", metadata)
drop_column("action", "workflow_invocation_step", metadata)