From 0f637bdd2e7207a4d553214d82e20c6cf5f0930c Mon Sep 17 00:00:00 2001 From: Maxime Beauchemin Date: Thu, 24 Mar 2016 14:50:19 -0700 Subject: [PATCH] Fixing issues around fk nullable=False on audit fields --- .../versions/763d4b211ec9_fixing_audit_fk.py | 164 ++++++++++++++++++ dashed/models.py | 4 +- 2 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 dashed/migrations/versions/763d4b211ec9_fixing_audit_fk.py diff --git a/dashed/migrations/versions/763d4b211ec9_fixing_audit_fk.py b/dashed/migrations/versions/763d4b211ec9_fixing_audit_fk.py new file mode 100644 index 0000000000..21557536e9 --- /dev/null +++ b/dashed/migrations/versions/763d4b211ec9_fixing_audit_fk.py @@ -0,0 +1,164 @@ +"""fixing audit fk + +Revision ID: 763d4b211ec9 +Revises: d2424a248d63 +Create Date: 2016-03-24 14:13:44.817723 + +""" + +# revision identifiers, used by Alembic. +revision = '763d4b211ec9' +down_revision = 'd2424a248d63' + +from alembic import op +import sqlalchemy as sa + + +def upgrade(): + op.alter_column('columns', 'changed_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('columns', 'created_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('css_templates', 'changed_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('css_templates', 'created_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('dashboards', 'changed_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('dashboards', 'created_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('datasources', 'changed_by_fk', + existing_type=sa.INTEGER(), + nullable=True) + op.alter_column('datasources', 'changed_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('datasources', 'created_by_fk', + existing_type=sa.INTEGER(), + nullable=True) + op.alter_column('datasources', 'created_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('dbs', 'changed_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('dbs', 'created_on', + existing_type=sa.DATETIME(), + nullable=True) + op.add_column('metrics', sa.Column('changed_by_fk', sa.Integer(), nullable=True)) + op.add_column('metrics', sa.Column('changed_on', sa.DateTime(), nullable=True)) + op.add_column('metrics', sa.Column('created_by_fk', sa.Integer(), nullable=True)) + op.add_column('metrics', sa.Column('created_on', sa.DateTime(), nullable=True)) + op.create_foreign_key(None, 'metrics', 'ab_user', ['changed_by_fk'], ['id']) + op.create_foreign_key(None, 'metrics', 'ab_user', ['created_by_fk'], ['id']) + op.alter_column('slices', 'changed_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('slices', 'created_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('sql_metrics', 'changed_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('sql_metrics', 'created_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('table_columns', 'changed_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('table_columns', 'created_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('tables', 'changed_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('tables', 'created_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('url', 'changed_on', + existing_type=sa.DATETIME(), + nullable=True) + op.alter_column('url', 'created_on', + existing_type=sa.DATETIME(), + nullable=True) + + +def downgrade(): + op.alter_column('url', 'created_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('url', 'changed_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('tables', 'created_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('tables', 'changed_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('table_columns', 'created_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('table_columns', 'changed_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('sql_metrics', 'created_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('sql_metrics', 'changed_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('slices', 'created_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('slices', 'changed_on', + existing_type=sa.DATETIME(), + nullable=False) + op.drop_constraint(None, 'metrics', type_='foreignkey') + op.drop_constraint(None, 'metrics', type_='foreignkey') + op.drop_column('metrics', 'created_on') + op.drop_column('metrics', 'created_by_fk') + op.drop_column('metrics', 'changed_on') + op.drop_column('metrics', 'changed_by_fk') + op.alter_column('dbs', 'created_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('dbs', 'changed_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('datasources', 'created_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('datasources', 'created_by_fk', + existing_type=sa.INTEGER(), + nullable=False) + op.alter_column('datasources', 'changed_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('datasources', 'changed_by_fk', + existing_type=sa.INTEGER(), + nullable=False) + op.alter_column('dashboards', 'created_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('dashboards', 'changed_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('css_templates', 'created_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('css_templates', 'changed_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('columns', 'created_on', + existing_type=sa.DATETIME(), + nullable=False) + op.alter_column('columns', 'changed_on', + existing_type=sa.DATETIME(), + nullable=False) diff --git a/dashed/models.py b/dashed/models.py index 878b5f99f3..db43ab9354 100644 --- a/dashed/models.py +++ b/dashed/models.py @@ -1080,7 +1080,7 @@ class Log(Model): return wrapper -class DruidMetric(Model): +class DruidMetric(Model, AuditMixinNullable): """ORM object referencing Druid metrics for a datasource""" @@ -1105,7 +1105,7 @@ class DruidMetric(Model): return obj -class DruidColumn(Model): +class DruidColumn(Model, AuditMixinNullable): """ORM model for storing Druid datasource column metadata"""