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.0043_visualization_sharing_tagging_annotating
"""
Migration script to create tables and columns for sharing visualizations.
"""
from __future__ import print_function
import logging
from sqlalchemy import (
Boolean,
Column,
ForeignKey,
Index,
Integer,
MetaData,
Table,
TEXT,
Unicode
)
from galaxy.model.migrate.versions.util import (
add_column,
add_index,
create_table,
drop_column,
drop_table,
engine_false
)
log = logging.getLogger(__name__)
metadata = MetaData()
# Sharing visualizations.
VisualizationUserShareAssociation_table = Table("visualization_user_share_association", metadata,
Column("id", Integer, primary_key=True),
Column("visualization_id", Integer, ForeignKey("visualization.id"), index=True),
Column("user_id", Integer, ForeignKey("galaxy_user.id"), index=True))
# Tagging visualizations.
VisualizationTagAssociation_table = Table("visualization_tag_association", metadata,
Column("id", Integer, primary_key=True),
Column("visualization_id", Integer, ForeignKey("visualization.id"), index=True),
Column("tag_id", Integer, ForeignKey("tag.id"), index=True),
Column("user_id", Integer, ForeignKey("galaxy_user.id"), index=True),
Column("user_tname", Unicode(255), index=True),
Column("value", Unicode(255), index=True),
Column("user_value", Unicode(255), index=True))
# Annotating visualizations.
VisualizationAnnotationAssociation_table = Table(
"visualization_annotation_association", metadata,
Column("id", Integer, primary_key=True),
Column("visualization_id", Integer, ForeignKey("visualization.id"), index=True),
Column("user_id", Integer, ForeignKey("galaxy_user.id"), index=True),
Column("annotation", TEXT),
Index('ix_visualization_annotation_association_annotation', 'annotation', mysql_length=200),
)
TABLES = [
VisualizationUserShareAssociation_table,
VisualizationTagAssociation_table,
VisualizationAnnotationAssociation_table
]
[docs]def upgrade(migrate_engine):
print(__doc__)
metadata.bind = migrate_engine
metadata.reflect()
for table in TABLES:
create_table(table)
# Add columns & create indices for supporting sharing to visualization table.
Visualization_table = Table("visualization", metadata, autoload=True)
deleted_column = Column("deleted", Boolean, default=False, index=True)
add_column(deleted_column, Visualization_table, metadata, index_name="ix_visualization_deleted")
try:
# Fill column with default value.
cmd = "UPDATE visualization SET deleted = %s" % engine_false(migrate_engine)
migrate_engine.execute(cmd)
except Exception:
log.exception("Updating column 'deleted' of table 'visualization' failed.")
importable_column = Column("importable", Boolean, default=False, index=True)
add_column(importable_column, Visualization_table, metadata, index_name='ix_visualization_importable')
try:
# Fill column with default value.
cmd = "UPDATE visualization SET importable = %s" % engine_false(migrate_engine)
migrate_engine.execute(cmd)
except Exception:
log.exception("Updating column 'importable' of table 'visualization' failed.")
slug_column = Column("slug", TEXT)
add_column(slug_column, Visualization_table, metadata)
# Index needs to be added separately because MySQL cannot index a TEXT/BLOB
# column without specifying mysql_length
add_index('ix_visualization_slug', Visualization_table, 'slug')
published_column = Column("published", Boolean, index=True)
add_column(published_column, Visualization_table, metadata, index_name='ix_visualization_published')
try:
# Fill column with default value.
cmd = "UPDATE visualization SET published = %s" % engine_false(migrate_engine)
migrate_engine.execute(cmd)
except Exception:
log.exception("Updating column 'published' of table 'visualization' failed.")
[docs]def downgrade(migrate_engine):
metadata.bind = migrate_engine
metadata.reflect()
Visualization_table = Table("visualization", metadata, autoload=True)
drop_column('deleted', Visualization_table)
drop_column('importable', Visualization_table)
drop_column('slug', Visualization_table)
drop_column('published', Visualization_table)
for table in TABLES:
drop_table(table)