Merge pull request #2244 from mlavin/21856-migration-checks
Fixed #21856: Allow Empty DATABASES Setting
This commit is contained in:
commit
38b4adc696
|
@ -8,6 +8,7 @@ from .registry import register, run_checks, tag_exists
|
||||||
|
|
||||||
# Import these to force registration of checks
|
# Import these to force registration of checks
|
||||||
import django.core.checks.compatibility.django_1_6_0 # NOQA
|
import django.core.checks.compatibility.django_1_6_0 # NOQA
|
||||||
|
import django.core.checks.migrations # NOQA
|
||||||
import django.core.checks.model_checks # NOQA
|
import django.core.checks.model_checks # NOQA
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
from . import Warning, register
|
||||||
|
|
||||||
|
|
||||||
|
@register('migrations')
|
||||||
|
def check_migrations(app_configs=None, **kwargs):
|
||||||
|
"""
|
||||||
|
Checks to see if the set of migrations on disk matches the
|
||||||
|
migrations in the database. Prints a warning if they don't match.
|
||||||
|
"""
|
||||||
|
from django.db import connections, DEFAULT_DB_ALIAS
|
||||||
|
from django.db.migrations.executor import MigrationExecutor
|
||||||
|
|
||||||
|
errors = []
|
||||||
|
plan = None
|
||||||
|
if settings.DATABASES:
|
||||||
|
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
|
||||||
|
plan = executor.migration_plan(executor.loader.graph.leaf_nodes())
|
||||||
|
if plan:
|
||||||
|
errors.append(
|
||||||
|
Warning(
|
||||||
|
"You have unapplied migrations; "
|
||||||
|
"your app may not work properly until they are applied.",
|
||||||
|
hint="Run 'python manage.py migrate' to apply them.",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
return errors
|
|
@ -10,8 +10,6 @@ import socket
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
from django.core.servers.basehttp import run, get_internal_wsgi_application
|
from django.core.servers.basehttp import run, get_internal_wsgi_application
|
||||||
from django.db import connections, DEFAULT_DB_ALIAS
|
|
||||||
from django.db.migrations.executor import MigrationExecutor
|
|
||||||
from django.utils import autoreload
|
from django.utils import autoreload
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
|
|
||||||
|
@ -101,7 +99,6 @@ class Command(BaseCommand):
|
||||||
|
|
||||||
self.stdout.write("Performing system checks...\n\n")
|
self.stdout.write("Performing system checks...\n\n")
|
||||||
self.validate(display_num_errors=True)
|
self.validate(display_num_errors=True)
|
||||||
self.check_migrations()
|
|
||||||
now = datetime.now().strftime('%B %d, %Y - %X')
|
now = datetime.now().strftime('%B %d, %Y - %X')
|
||||||
if six.PY2:
|
if six.PY2:
|
||||||
now = now.decode('utf-8')
|
now = now.decode('utf-8')
|
||||||
|
@ -146,16 +143,5 @@ class Command(BaseCommand):
|
||||||
self.stdout.write(shutdown_message)
|
self.stdout.write(shutdown_message)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
def check_migrations(self):
|
|
||||||
"""
|
|
||||||
Checks to see if the set of migrations on disk matches the
|
|
||||||
migrations in the database. Prints a warning if they don't match.
|
|
||||||
"""
|
|
||||||
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
|
|
||||||
plan = executor.migration_plan(executor.loader.graph.leaf_nodes())
|
|
||||||
if plan:
|
|
||||||
self.stdout.write(self.style.NOTICE("\nYou have unapplied migrations; your app may not work properly until they are applied."))
|
|
||||||
self.stdout.write(self.style.NOTICE("Run 'python manage.py migrate' to apply them.\n"))
|
|
||||||
|
|
||||||
# Kept for backward compatibility
|
# Kept for backward compatibility
|
||||||
BaseRunserverCommand = Command
|
BaseRunserverCommand = Command
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
# encoding: utf8
|
||||||
|
from django.core import checks
|
||||||
|
from django.core.checks.migrations import check_migrations
|
||||||
|
from django.test import TestCase, override_settings
|
||||||
|
|
||||||
|
from .test_base import MigrationTestBase
|
||||||
|
|
||||||
|
|
||||||
|
class CheckMigrationTests(MigrationTestBase):
|
||||||
|
"""
|
||||||
|
Test checks for unapplied migrations.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"})
|
||||||
|
def test_unapplied(self):
|
||||||
|
"""
|
||||||
|
check_migrations should return a warning when there are unapplied migrations.
|
||||||
|
"""
|
||||||
|
expected = [
|
||||||
|
checks.Warning(
|
||||||
|
"You have unapplied migrations; "
|
||||||
|
"your app may not work properly until they are applied.",
|
||||||
|
hint="Run 'python manage.py migrate' to apply them.",
|
||||||
|
)
|
||||||
|
]
|
||||||
|
errors = check_migrations()
|
||||||
|
self.assertEqual(errors, expected)
|
||||||
|
|
||||||
|
@override_settings(MIGRATION_MODULES={"migrations": "migrations.test_migrations"}, DATABASES={})
|
||||||
|
def test_no_databases(self):
|
||||||
|
"""
|
||||||
|
Migration checks should not consider unapplied migrations if there is
|
||||||
|
no database configured.
|
||||||
|
"""
|
||||||
|
errors = check_migrations()
|
||||||
|
self.assertEqual(errors, [])
|
||||||
|
|
||||||
|
def test_no_unapplied(self):
|
||||||
|
"""
|
||||||
|
No warning should be issued if all migrations have been applied.
|
||||||
|
"""
|
||||||
|
errors = check_migrations()
|
||||||
|
self.assertEqual(errors, [])
|
Loading…
Reference in New Issue