Improve visualizations migration

This commit is contained in:
Arik Fraimovich
2014-02-09 16:40:26 +02:00
parent 7bf391e772
commit c40cf2e7e8

View File

@@ -1,5 +1,4 @@
import json
import peewee
from playhouse.migrate import Migrator
from redash import db
from redash import models
@@ -16,34 +15,36 @@ if __name__ == '__main__':
with db.database.transaction():
migrator = Migrator(db.database)
print "Adding visualization_id to widgets:"
field = models.Widget.visualization
field.null = True
migrator.add_column(models.Widget, models.Widget.visualization, 'visualization_id')
print 'Creating TABLE visualizations for all queries...'
for query in models.Query.select():
vis = models.Visualization(query=query, name="Table",
description=query.description,
description=query.description or "",
type="TABLE", options="{}")
vis.save()
print 'Creating COHORT visualizations for all queries named like %cohort%...'
for query in models.Query.select().where(peewee.fn.Icontains(models.Query.name)=="cohort"):
for query in models.Query.select().where(models.Query.name ** "%cohort%"):
vis = models.Visualization(query=query, name="Cohort",
description=query.description,
description=query.description or "",
type="COHORT", options="{}")
vis.save()
print 'Create visualization for all widgets (unless exists already):'
for widget in models.Widget.select():
print 'Processing widget id: %d:' % widget.id
query = widget.query
vis_type = widget.type.upper()
if vis_type == 'GRID':
vis_type = 'TABLE'
vis = query.visualizations.where(type=vis_type).first()
query = models.Query.get_by_id(widget.query_id)
vis = query.visualizations.where(models.Visualization.type == vis_type).first()
if vis:
print '... visualization type (%s) found.' % vis_type
widget.visualization = vis[0]
widget.visualization = vis
widget.save()
else:
vis_name = vis_type.title()
@@ -53,7 +54,7 @@ if __name__ == '__main__':
vis_options = json.dumps(vis_options)
vis = models.Visualization(query=query, name=vis_name,
description=query.description,
description=query.description or "",
type=vis_type, options=vis_options)
print '... Created visualization for type: %s' % vis_type
@@ -61,4 +62,9 @@ if __name__ == '__main__':
widget.visualization = vis
widget.save()
db.close_db(None)
with db.database.transaction():
migrator = Migrator(db.database)
print "Setting visualization_id as not null..."
migrator.set_nullable(models.Widget, models.Widget.visualization, False)
db.close_db(None)