Remove check_migrations from the runserver command and use the new checks framework to check for unapplied migrations. Don't check for migrations if the DATABASES setting is empty.

This commit is contained in:
mlavin 2014-02-08 08:50:01 -05:00
parent b041850853
commit 0ac13ecceb
3 changed files with 32 additions and 14 deletions

View File

@ -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__ = [

View File

@ -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

View File

@ -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