/lib/galaxy/model/migrate/versions/0043_visualization_sharing_tagging_annotating.py

https://bitbucket.org/cistrome/cistrome-harvard/ · Python · 200 lines · 143 code · 33 blank · 24 comment · 39 complexity · ab3eaba33266b6533fc5b47971648409 MD5 · raw file

  1. """
  2. Migration script to create tables and columns for sharing visualizations.
  3. """
  4. from sqlalchemy import *
  5. from sqlalchemy.orm import *
  6. from migrate import *
  7. from migrate.changeset import *
  8. import logging
  9. log = logging.getLogger( __name__ )
  10. metadata = MetaData()
  11. # Sharing visualizations.
  12. VisualizationUserShareAssociation_table = Table( "visualization_user_share_association", metadata,
  13. Column( "id", Integer, primary_key=True ),
  14. Column( "visualization_id", Integer, ForeignKey( "visualization.id" ), index=True ),
  15. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True )
  16. )
  17. # Tagging visualizations.
  18. VisualizationTagAssociation_table = Table( "visualization_tag_association", metadata,
  19. Column( "id", Integer, primary_key=True ),
  20. Column( "visualization_id", Integer, ForeignKey( "visualization.id" ), index=True ),
  21. Column( "tag_id", Integer, ForeignKey( "tag.id" ), index=True ),
  22. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  23. Column( "user_tname", Unicode(255), index=True),
  24. Column( "value", Unicode(255), index=True),
  25. Column( "user_value", Unicode(255), index=True) )
  26. # Annotating visualizations.
  27. VisualizationAnnotationAssociation_table = Table( "visualization_annotation_association", metadata,
  28. Column( "id", Integer, primary_key=True ),
  29. Column( "visualization_id", Integer, ForeignKey( "visualization.id" ), index=True ),
  30. Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
  31. Column( "annotation", TEXT, index=False ) )
  32. def upgrade(migrate_engine):
  33. metadata.bind = migrate_engine
  34. print __doc__
  35. db_session = scoped_session( sessionmaker( bind=migrate_engine, autoflush=False, autocommit=True ) )
  36. metadata.reflect()
  37. Visualiation_table = Table( "visualization", metadata, autoload=True )
  38. # Create visualization_user_share_association table.
  39. try:
  40. VisualizationUserShareAssociation_table.create()
  41. except Exception, e:
  42. print "Creating visualization_user_share_association table failed: %s" % str( e )
  43. log.debug( "Creating visualization_user_share_association table failed: %s" % str( e ) )
  44. # Get default boolean value 'false' so that columns can be initialized.
  45. if migrate_engine.name == 'mysql' or migrate_engine.name == 'sqlite':
  46. default_false = "0"
  47. elif migrate_engine.name == 'postgresql':
  48. default_false = "false"
  49. # Add columns & create indices for supporting sharing to visualization table.
  50. deleted_column = Column( "deleted", Boolean, default=False, index=True )
  51. importable_column = Column( "importable", Boolean, default=False, index=True )
  52. slug_column = Column( "slug", TEXT )
  53. published_column = Column( "published", Boolean, index=True )
  54. try:
  55. # Add column.
  56. deleted_column.create( Visualiation_table, index_name = "ix_visualization_deleted")
  57. assert deleted_column is Visualiation_table.c.deleted
  58. # Fill column with default value.
  59. cmd = "UPDATE visualization SET deleted = %s" % default_false
  60. db_session.execute( cmd )
  61. except Exception, e:
  62. print "Adding deleted column to visualization table failed: %s" % str( e )
  63. log.debug( "Adding deleted column to visualization table failed: %s" % str( e ) )
  64. try:
  65. # Add column.
  66. importable_column.create( Visualiation_table, index_name='ix_visualization_importable')
  67. assert importable_column is Visualiation_table.c.importable
  68. # Fill column with default value.
  69. cmd = "UPDATE visualization SET importable = %s" % default_false
  70. db_session.execute( cmd )
  71. except Exception, e:
  72. print "Adding importable column to visualization table failed: %s" % str( e )
  73. log.debug( "Adding importable column to visualization table failed: %s" % str( e ) )
  74. try:
  75. slug_column.create( Visualiation_table )
  76. assert slug_column is Visualiation_table.c.slug
  77. except Exception, e:
  78. print "Adding slug column to visualization table failed: %s" % str( e )
  79. log.debug( "Adding slug column to visualization table failed: %s" % str( e ) )
  80. try:
  81. if migrate_engine.name == 'mysql':
  82. # Have to create index manually.
  83. cmd = "CREATE INDEX ix_visualization_slug ON visualization ( slug ( 100 ) )"
  84. db_session.execute( cmd )
  85. else:
  86. i = Index( "ix_visualization_slug", Visualiation_table.c.slug )
  87. i.create()
  88. except Exception, e:
  89. print "Adding index 'ix_visualization_slug' failed: %s" % str( e )
  90. log.debug( "Adding index 'ix_visualization_slug' failed: %s" % str( e ) )
  91. try:
  92. # Add column.
  93. published_column.create( Visualiation_table, index_name='ix_visualization_published')
  94. assert published_column is Visualiation_table.c.published
  95. # Fill column with default value.
  96. cmd = "UPDATE visualization SET published = %s" % default_false
  97. db_session.execute( cmd )
  98. except Exception, e:
  99. print "Adding published column to visualization table failed: %s" % str( e )
  100. log.debug( "Adding published column to visualization table failed: %s" % str( e ) )
  101. # Create visualization_tag_association table.
  102. try:
  103. VisualizationTagAssociation_table.create()
  104. except Exception, e:
  105. print str(e)
  106. log.debug( "Creating visualization_tag_association table failed: %s" % str( e ) )
  107. # Create visualization_annotation_association table.
  108. try:
  109. VisualizationAnnotationAssociation_table.create()
  110. except Exception, e:
  111. print str(e)
  112. log.debug( "Creating visualization_annotation_association table failed: %s" % str( e ) )
  113. # Need to create index for visualization annotation manually to deal with errors.
  114. try:
  115. if migrate_engine.name == 'mysql':
  116. # Have to create index manually.
  117. cmd = "CREATE INDEX ix_visualization_annotation_association_annotation ON visualization_annotation_association ( annotation ( 100 ) )"
  118. db_session.execute( cmd )
  119. else:
  120. i = Index( "ix_visualization_annotation_association_annotation", VisualizationAnnotationAssociation_table.c.annotation )
  121. i.create()
  122. except Exception, e:
  123. print "Adding index 'ix_visualization_annotation_association_annotation' failed: %s" % str( e )
  124. log.debug( "Adding index 'ix_visualization_annotation_association_annotation' failed: %s" % str( e ) )
  125. def downgrade(migrate_engine):
  126. metadata.bind = migrate_engine
  127. metadata.reflect()
  128. Visualiation_table = Table( "visualization", metadata, autoload=True )
  129. # Drop visualization_user_share_association table.
  130. try:
  131. VisualizationUserShareAssociation_table.drop()
  132. except Exception, e:
  133. print str(e)
  134. log.debug( "Dropping visualization_user_share_association table failed: %s" % str( e ) )
  135. # Drop columns for supporting sharing from visualization table.
  136. try:
  137. Visualiation_table.c.deleted.drop()
  138. except Exception, e:
  139. print "Dropping deleted column from visualization table failed: %s" % str( e )
  140. log.debug( "Dropping deleted column from visualization table failed: %s" % str( e ) )
  141. try:
  142. Visualiation_table.c.importable.drop()
  143. except Exception, e:
  144. print "Dropping importable column from visualization table failed: %s" % str( e )
  145. log.debug( "Dropping importable column from visualization table failed: %s" % str( e ) )
  146. try:
  147. Visualiation_table.c.slug.drop()
  148. except Exception, e:
  149. print "Dropping slug column from visualization table failed: %s" % str( e )
  150. log.debug( "Dropping slug column from visualization table failed: %s" % str( e ) )
  151. try:
  152. Visualiation_table.c.published.drop()
  153. except Exception, e:
  154. print "Dropping published column from visualization table failed: %s" % str( e )
  155. log.debug( "Dropping published column from visualization table failed: %s" % str( e ) )
  156. # Drop visualization_tag_association table.
  157. try:
  158. VisualizationTagAssociation_table.drop()
  159. except Exception, e:
  160. print str(e)
  161. log.debug( "Dropping visualization_tag_association table failed: %s" % str( e ) )
  162. # Drop visualization_annotation_association table.
  163. try:
  164. VisualizationAnnotationAssociation_table.drop()
  165. except Exception, e:
  166. print str(e)
  167. log.debug( "Dropping visualization_annotation_association table failed: %s" % str( e ) )