Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Populated the app registry earlier at startup.

Refs #1796, #21676.
  • Loading branch information...
commit 0d2c8ff2be733c7cc83a023bbafe0258faa5603c 1 parent d6dc88c
@aaugustin aaugustin authored
View
7 django/core/management/__init__.py
@@ -41,6 +41,9 @@ def find_management_module(app_name):
Raises ImportError if the management module cannot be found for any reason.
"""
+ # TODO: this method is only called from get_commands() which has already
+ # imported the application module at that point.
+
parts = app_name.split('.')
parts.append('management')
parts.reverse()
@@ -108,7 +111,7 @@ def get_commands():
# Find the installed apps
try:
- settings.INSTALLED_APPS
+ installed_apps = settings.INSTALLED_APPS
except ImproperlyConfigured:
# Still useful for commands that do not require functional
# settings, like startproject or help.
@@ -118,6 +121,8 @@ def get_commands():
# avoid catching ImproperlyConfigured errors that aren't caused
# by the absence of a settings module.
from django.apps import apps
+ apps.populate_apps(installed_apps)
+ apps.populate_models()
app_configs = apps.get_app_configs()
app_names = [app_config.name for app_config in app_configs]
View
8 django/core/management/base.py
@@ -344,11 +344,9 @@ def handle(self, *app_labels, **options):
from django.apps import apps
if not app_labels:
raise CommandError("Enter at least one application label.")
- # Populate models and don't use only_with_models_module=True when
- # calling get_app_config() to tell apart missing apps from apps
- # without a model module -- which can't be supported with the legacy
- # API since it passes the models module to handle_app().
- apps.populate_models()
+ # Don't use only_with_models_module=True in get_app_config() to tell
+ # apart missing apps from apps without a model module -- which can't
+ # be supported with the legacy API since it passes the models module.
try:
app_configs = [apps.get_app_config(app_label) for app_label in app_labels]
except (LookupError, ImportError) as e:
View
8 django/core/management/commands/shell.py
@@ -1,6 +1,7 @@
+from optparse import make_option
import os
+
from django.core.management.base import NoArgsCommand
-from optparse import make_option
class Command(NoArgsCommand):
@@ -64,11 +65,6 @@ def run_shell(self, shell=None):
raise ImportError
def handle_noargs(self, **options):
- # XXX: (Temporary) workaround for ticket #1796: force early loading of all
- # models from installed apps.
- from django.apps import apps
- apps.populate_models()
-
use_plain = options.get('plain', False)
no_startup = options.get('no_startup', False)
interface = options.get('interface', None)
View
7 django/core/wsgi.py
@@ -1,3 +1,5 @@
+from django.apps import apps
+from django.conf import settings
from django.core.handlers.wsgi import WSGIHandler
@@ -10,4 +12,9 @@ def get_wsgi_application():
case the internal WSGI implementation changes or moves in the future.
"""
+ # Configure the settings (this happens automatically on the first access).
+ # Populate the app registry.
+ apps.populate_apps(settings.INSTALLED_APPS)
+ apps.populate_models()
+
return WSGIHandler()
Please sign in to comment.
Something went wrong with that request. Please try again.