Use a custom migration operation instead of a RunSQL statement
This commit is contained in:
1 parent
6fe51d2e08
commit
fe6433a065
5 files changed
+47
-12
No files matched your search
@@ -13,4 +13,4 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from .migration_linter import * # noqa
|
from .migration_linter import * # noqa
|
||||||
from .constants import * # noqa
|
from .operations import * # noqa
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
# Can be used to mark ignored migrations.
|
|
||||||
# This is a noop for SQL. Comments would be better.
|
|
||||||
# But comments are stripped by RunSQL
|
|
||||||
IGNORE_MIGRATION = ("SELECT 'dml-ignore'", )
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# Copyright 2018 3YOURMIND GmbH
|
||||||
|
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
from django.db.migrations.operations.base import Operation
|
||||||
|
|
||||||
|
IGNORE_MIGRATION_SQL = "-- dml ignores this migration"
|
||||||
|
|
||||||
|
|
||||||
|
class IgnoreMigration(Operation):
|
||||||
|
|
||||||
|
reversible = True
|
||||||
|
# Must be true to be generated through the sqlmigrate command
|
||||||
|
reduces_to_sql = True
|
||||||
|
|
||||||
|
def state_forwards(self, app_label, state):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def database_forwards(
|
||||||
|
self, app_label, schema_editor, from_state, to_state):
|
||||||
|
schema_editor.execute(IGNORE_MIGRATION_SQL)
|
||||||
|
|
||||||
|
def database_backwards(
|
||||||
|
self, app_label, schema_editor, from_state, to_state):
|
||||||
|
schema_editor.execute(IGNORE_MIGRATION_SQL + "(reversed)")
|
||||||
|
|
||||||
|
def describe(self):
|
||||||
|
return "The Django migration linter will ignore this migration"
|
||||||
@@ -15,7 +15,9 @@
|
|||||||
import re
|
import re
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django_migration_linter.constants import IGNORE_MIGRATION
|
from django_migration_linter.operations import IGNORE_MIGRATION_SQL
|
||||||
|
|
||||||
|
IGNORED_MIGRATION = "IGNORED_MIGRATION"
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -66,8 +68,8 @@ migration_tests = (
|
|||||||
'fn': has_default,
|
'fn': has_default,
|
||||||
'err_msg': ''
|
'err_msg': ''
|
||||||
}, {
|
}, {
|
||||||
'code': 'IGNORED_MIGRATION',
|
'code': IGNORED_MIGRATION,
|
||||||
'fn': lambda sql, **kw: re.search(IGNORE_MIGRATION[0], sql),
|
'fn': lambda sql, **kw: re.search(IGNORE_MIGRATION_SQL, sql),
|
||||||
'err_msg': '',
|
'err_msg': '',
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -79,7 +81,7 @@ def analyse_sql_statements(sql_statements):
|
|||||||
for statement in sql_statements:
|
for statement in sql_statements:
|
||||||
for test in migration_tests:
|
for test in migration_tests:
|
||||||
if test['fn'](statement, errors=errors):
|
if test['fn'](statement, errors=errors):
|
||||||
if test['code'] == 'IGNORED_MIGRATION':
|
if test['code'] == IGNORED_MIGRATION:
|
||||||
logger.info(
|
logger.info(
|
||||||
'Testing {0} -- IGNORING MIGRATION'.format(statement)
|
'Testing {0} -- IGNORING MIGRATION'.format(statement)
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-3
@@ -4,8 +4,7 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
from django.db import migrations
|
from django.db import migrations
|
||||||
|
|
||||||
from django_migration_linter import IGNORE_MIGRATION
|
import django_migration_linter as linter
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
@@ -14,7 +13,7 @@ class Migration(migrations.Migration):
|
|||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.RunSQL(IGNORE_MIGRATION),
|
linter.IgnoreMigration(),
|
||||||
migrations.RenameModel(
|
migrations.RenameModel(
|
||||||
old_name='A',
|
old_name='A',
|
||||||
new_name='B',
|
new_name='B',
|
||||||
|
|||||||
Reference in new issue
Block a user