Merge "Heal script: Drop fks before operating on columns"

This commit is contained in:
Jenkins 2014-08-29 16:25:23 +00:00 committed by Gerrit Code Review
commit acc4e1a3af

View File

@ -73,8 +73,8 @@ def heal():
diff1 = autogen.compare_metadata(mc, models_metadata) diff1 = autogen.compare_metadata(mc, models_metadata)
# Alembic does not contain checks for foreign keys. Because of that it # Alembic does not contain checks for foreign keys. Because of that it
# checks separately. # checks separately.
diff2 = check_foreign_keys(models_metadata) added_fks, dropped_fks = check_foreign_keys(models_metadata)
diff = diff1 + diff2 diff = dropped_fks + diff1 + added_fks
# For each difference run command # For each difference run command
for el in diff: for el in diff:
execute_alembic_command(el) execute_alembic_command(el)
@ -205,7 +205,8 @@ def add_key(fk):
def check_foreign_keys(metadata): def check_foreign_keys(metadata):
# This methods checks foreign keys that tables contain in models with # This methods checks foreign keys that tables contain in models with
# foreign keys that are in db. # foreign keys that are in db.
diff = [] added_fks = []
dropped_fks = []
bind = op.get_bind() bind = op.get_bind()
insp = sqlalchemy.engine.reflection.Inspector.from_engine(bind) insp = sqlalchemy.engine.reflection.Inspector.from_engine(bind)
# Get all tables from db # Get all tables from db
@ -224,15 +225,15 @@ def check_foreign_keys(metadata):
model_tables[table].foreign_keys) model_tables[table].foreign_keys)
fk_models_set = set(fk_models.keys()) fk_models_set = set(fk_models.keys())
for key in (fk_db_set - fk_models_set): for key in (fk_db_set - fk_models_set):
diff.append(('drop_key', fk_db[key], table)) dropped_fks.append(('drop_key', fk_db[key], table))
LOG.info(_("Detected removed foreign key %(fk)r on " LOG.info(_("Detected removed foreign key %(fk)r on "
"table %(table)r"), {'fk': fk_db[key], 'table': table}) "table %(table)r"), {'fk': fk_db[key], 'table': table})
for key in (fk_models_set - fk_db_set): for key in (fk_models_set - fk_db_set):
diff.append(('add_key', fk_models[key])) added_fks.append(('add_key', fk_models[key]))
LOG.info(_("Detected added foreign key for column %(fk)r on table " LOG.info(_("Detected added foreign key for column %(fk)r on table "
"%(table)r"), {'fk': fk_models[key].column.name, "%(table)r"), {'fk': fk_models[key].column.name,
'table': table}) 'table': table})
return diff return (added_fks, dropped_fks)
def check_if_table_exists(table): def check_if_table_exists(table):