Skip to content

Commit

Permalink
#169 Added ignore migration for schema from configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
jssuzanne committed Apr 9, 2021
1 parent 7eab0d0 commit 399a135
Show file tree
Hide file tree
Showing 3 changed files with 401 additions and 21 deletions.
2 changes: 2 additions & 0 deletions anyblok/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -802,6 +802,8 @@ def add_configuration_file(parser):
action='store_true')
parser.add_argument('--ignore-migration-for-models', nargs="+",
help="Models to ignore migration")
parser.add_argument('--ignore-migration-for-schemas', nargs="+",
help="Schemas to ignore migration")
parser.add_argument('--isolation-level',
default="READ_COMMITTED",
choices=["SERIALIZABLE", "REPEATABLE_READ",
Expand Down
57 changes: 36 additions & 21 deletions anyblok/migration.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,10 @@ class MigrationReport:
"""

def ignore_migration_for(self, table, default=None):
def ignore_migration_for(self, schema, table, default=None):
if schema in self.ignore_migration_for_schema_from_configuration:
return True

if table in self.ignore_migration_for_table_from_configuration:
return True

Expand Down Expand Up @@ -112,8 +115,8 @@ def init_add_table(self, diff):

def init_add_column(self, diff):
self.raise_if_withoutautomigration()
_, _, table, column = diff
if self.ignore_migration_for(table) is True:
_, schema, table, column = diff
if self.ignore_migration_for(schema, table) is True:
return True

self.log_names.append('Add %s.%s' % (table, column.name))
Expand Down Expand Up @@ -156,7 +159,8 @@ def can_remove_check_constraints(self, name):

def init_remove_constraint(self, diff):
_, constraint = diff
if self.ignore_migration_for(constraint.table.name) is True:
if self.ignore_migration_for(constraint.table.schema,
constraint.table.name) is True:
return True

self.log_names.append('Drop constraint %s on %s' % (
Expand All @@ -182,7 +186,8 @@ def can_remove_index(self, name):
def init_add_index(self, diff):
self.raise_if_withoutautomigration()
_, constraint = diff
if self.ignore_migration_for(constraint.table.name) is True:
if self.ignore_migration_for(constraint.table.schema,
constraint.table.name) is True:
return True # pragma: no cover

columns = [x.name for x in constraint.columns]
Expand All @@ -194,7 +199,8 @@ def init_add_index(self, diff):

def init_remove_index(self, diff):
_, index = diff
if self.ignore_migration_for(index.table.name) is True:
if self.ignore_migration_for(index.table.schema,
index.table.name) is True:
return True

self.log_names.append('Drop index %s on %s' % (index.name,
Expand All @@ -207,13 +213,15 @@ def init_remove_index(self, diff):
def init_add_fk(self, diff):
self.raise_if_withoutautomigration()
_, fk = diff
if self.ignore_migration_for(fk.table.name) is True:
if self.ignore_migration_for(fk.table.schema, fk.table.name) is True:
return True

from_ = []
to_ = []
for column in fk.columns:
if column.name in self.ignore_migration_for(fk.table.name, []):
if column.name in self.ignore_migration_for(
fk.table.schema, fk.table.name, []
):
return True

for fk_ in column.foreign_keys:
Expand All @@ -225,11 +233,13 @@ def init_add_fk(self, diff):

def init_remove_fk(self, diff):
_, fk = diff
if self.ignore_migration_for(fk.table.name) is True:
if self.ignore_migration_for(fk.table.schema, fk.table.name) is True:
return True

for column in fk.columns:
if column.name in self.ignore_migration_for(fk.table.name, []):
if column.name in self.ignore_migration_for(
fk.table.schema, fk.table.name, []
):
return True

for fk_ in column.foreign_keys:
Expand All @@ -244,7 +254,7 @@ def init_remove_fk(self, diff):
def init_add_ck(self, diff):
self.raise_if_withoutautomigration()
_, table, ck = diff
if self.ignore_migration_for(table) is True:
if self.ignore_migration_for(ck.table.schema, table) is True:
return True

if ck.table.schema:
Expand All @@ -255,7 +265,7 @@ def init_add_ck(self, diff):

def init_remove_ck(self, diff):
_, table, ck = diff
if self.ignore_migration_for(table) is True:
if self.ignore_migration_for(ck['schema'], table) is True:
return True

if ck['schema']:
Expand All @@ -274,12 +284,14 @@ def init_add_constraint(self, diff):
_, constraint = diff
columns = []

if self.ignore_migration_for(constraint.table.name) is True:
if self.ignore_migration_for(constraint.table.schema,
constraint.table.name) is True:
return True

for column in constraint.columns:
columns.append(column.name)
if column.name in self.ignore_migration_for(constraint.table.name,
if column.name in self.ignore_migration_for(constraint.table.schema,
constraint.table.name,
[]):
return True

Expand All @@ -297,7 +309,8 @@ def can_remove_column(self):

def init_remove_column(self, diff):
column = diff[3]
if self.ignore_migration_for(column.table.name) is True:
if self.ignore_migration_for(column.table.schema,
column.table.name) is True:
return True

msg = "Drop Column %s.%s" % (column.table.name,
Expand Down Expand Up @@ -365,10 +378,10 @@ def init_remove_table(self, diff):
return True

def init_modify_type(self, diff):
if self.ignore_migration_for(diff[2]) is True:
if self.ignore_migration_for(diff[1], diff[2]) is True:
return True

if diff[3] in self.ignore_migration_for(diff[2], []):
if diff[3] in self.ignore_migration_for(diff[1], diff[2], []):
return True

selected_plugin = self.get_plugin_for(diff[5], diff[6])
Expand All @@ -382,10 +395,10 @@ def init_modify_type(self, diff):
return False

def init_modify_nullable(self, diff):
if self.ignore_migration_for(diff[2]) is True:
if self.ignore_migration_for(diff[1], diff[2]) is True:
return True

if diff[3] in self.ignore_migration_for(diff[2], []):
if diff[3] in self.ignore_migration_for(diff[1], diff[2], []):
return True

table = "%s.%s" % diff[1:3] if diff[1] else diff[2]
Expand All @@ -394,10 +407,10 @@ def init_modify_nullable(self, diff):
return False

def init_modify_server_default(self, diff):
if self.ignore_migration_for(diff[2]) is True:
if self.ignore_migration_for(diff[1], diff[2]) is True:
return True

if diff[3] in self.ignore_migration_for(diff[2], []):
if diff[3] in self.ignore_migration_for(diff[1], diff[2], []):
return True

table = "%s.%s" % diff[1:3] if diff[1] else diff[2]
Expand Down Expand Up @@ -464,6 +477,8 @@ def __init__(self, migration, diffs):
self.migration.loaded_namespaces[x].is_sql
)
]
self.ignore_migration_for_schema_from_configuration = return_list(
Configuration.get('ignore_migration_for_schemas'))

mappers = {
'add_schema': self.init_add_schema,
Expand Down
Loading

0 comments on commit 399a135

Please sign in to comment.