/lib/galaxy/model/migrate/versions/0047_job_table_user_id_column.py

https://bitbucket.org/cistrome/cistrome-harvard/ · Python · 84 lines · 74 code · 7 blank · 3 comment · 18 complexity · 46cb9de33aab64722a429ce52418451b MD5 · raw file

  1. """
  2. Add a user_id column to the job table.
  3. """
  4. from sqlalchemy import *
  5. from sqlalchemy.orm import *
  6. from sqlalchemy.exc import *
  7. from migrate import *
  8. from migrate.changeset import *
  9. from galaxy.model.custom_types import *
  10. import datetime
  11. now = datetime.datetime.utcnow
  12. import sys, logging
  13. log = logging.getLogger( __name__ )
  14. log.setLevel(logging.DEBUG)
  15. handler = logging.StreamHandler( sys.stdout )
  16. format = "%(name)s %(levelname)s %(asctime)s %(message)s"
  17. formatter = logging.Formatter( format )
  18. handler.setFormatter( formatter )
  19. log.addHandler( handler )
  20. metadata = MetaData()
  21. def upgrade(migrate_engine):
  22. metadata.bind = migrate_engine
  23. print __doc__
  24. metadata.reflect()
  25. try:
  26. Job_table = Table( "job", metadata, autoload=True )
  27. except NoSuchTableError:
  28. Job_table = None
  29. log.debug( "Failed loading table job" )
  30. if Job_table is not None:
  31. if migrate_engine.name != 'sqlite':
  32. try:
  33. col = Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True, nullable=True )
  34. col.create( Job_table, index_name='ix_job_user_id' )
  35. assert col is Job_table.c.user_id
  36. except Exception, e:
  37. log.debug( "Adding column 'user_id' to job table failed: %s" % ( str( e ) ) )
  38. else:
  39. try:
  40. col = Column( "user_id", Integer, nullable=True)
  41. col.create( Job_table )
  42. assert col is Job_table.c.user_id
  43. except Exception, e:
  44. log.debug( "Adding column 'user_id' to job table failed: %s" % ( str( e ) ) )
  45. try:
  46. cmd = "SELECT job.id AS galaxy_job_id, " \
  47. + "galaxy_session.user_id AS galaxy_user_id " \
  48. + "FROM job " \
  49. + "JOIN galaxy_session ON job.session_id = galaxy_session.id;"
  50. job_users = migrate_engine.execute( cmd ).fetchall()
  51. print "Updating user_id column in job table for ", len( job_users ), " rows..."
  52. print ""
  53. update_count = 0
  54. for row in job_users:
  55. if row.galaxy_user_id:
  56. cmd = "UPDATE job SET user_id = %d WHERE id = %d" % ( int( row.galaxy_user_id ), int( row.galaxy_job_id ) )
  57. update_count += 1
  58. migrate_engine.execute( cmd )
  59. print "Updated the user_id column for ", update_count, " rows in the job table. "
  60. print len( job_users ) - update_count, " rows have no user_id since the value was NULL in the galaxy_session table."
  61. print ""
  62. except Exception, e:
  63. log.debug( "Updating job.user_id column failed: %s" % str( e ) )
  64. def downgrade(migrate_engine):
  65. metadata.bind = migrate_engine
  66. metadata.reflect()
  67. try:
  68. Job_table = Table( "job", metadata, autoload=True )
  69. except NoSuchTableError:
  70. Job_table = None
  71. log.debug( "Failed loading table job" )
  72. if Job_table:
  73. try:
  74. col = Job_table.c.user_id
  75. col.drop()
  76. except Exception, e:
  77. log.debug( "Dropping column 'user_id' from job table failed: %s" % ( str( e ) ) )