summaryrefslogtreecommitdiff
path: root/django/core/management
diff options
context:
space:
mode:
authorJacob Kaplan-Moss <jacob@jacobian.org>2009-03-18 16:55:59 +0000
committerJacob Kaplan-Moss <jacob@jacobian.org>2009-03-18 16:55:59 +0000
commitc485e236bd7e5ea40c64b2fe54d85dbb15b2fd39 (patch)
treefc5e86abf39b69181b2084f5c39038f1811b6b44 /django/core/management
parentee2f04d79e5bca55637b9bb3301618738a4e342a (diff)
Fixed #8193: all dynamic imports in Django are now done correctly. I know this because Brett Cannon borrowed the time machine and brought Python 2.7's '`importlib` back for inclusion in Django. Thanks for the patch-from-the-future, Brett!
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10088 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/core/management')
-rw-r--r--django/core/management/__init__.py16
-rw-r--r--django/core/management/commands/flush.py3
-rw-r--r--django/core/management/commands/startapp.py3
-rw-r--r--django/core/management/commands/startproject.py3
-rw-r--r--django/core/management/commands/syncdb.py3
5 files changed, 15 insertions, 13 deletions
diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py
index ec5ea19c98..4b40009e76 100644
--- a/django/core/management/__init__.py
+++ b/django/core/management/__init__.py
@@ -5,6 +5,7 @@ import imp
import django
from django.core.management.base import BaseCommand, CommandError, handle_default_options
+from django.utils.importlib import import_module
# For backwards compatibility: get_version() used to be in this module.
get_version = django.get_version
@@ -63,8 +64,8 @@ def load_command_class(app_name, name):
class instance. All errors raised by the import process
(ImportError, AttributeError) are allowed to propagate.
"""
- return getattr(__import__('%s.management.commands.%s' % (app_name, name),
- {}, {}, ['Command']), 'Command')()
+ module = import_module('%s.management.commands.%s' % (app_name, name))
+ return module.Command()
def get_commands():
"""
@@ -104,12 +105,9 @@ def get_commands():
# Find the project directory
try:
from django.conf import settings
- project_directory = setup_environ(
- __import__(
- settings.SETTINGS_MODULE, {}, {},
- (settings.SETTINGS_MODULE.split(".")[-1],)
- ), settings.SETTINGS_MODULE
- )
+ module = import_module(settings.SETTINGS_MODULE.split('.', 1)[0])
+ project_directory = setup_environ(module,
+ settings.SETTINGS_MODULE)
except (AttributeError, EnvironmentError, ImportError):
project_directory = None
@@ -328,7 +326,7 @@ def setup_environ(settings_mod, original_settings_path=None):
# Import the project module. We add the parent directory to PYTHONPATH to
# avoid some of the path errors new users can have.
sys.path.append(os.path.join(project_directory, os.pardir))
- project_module = __import__(project_name, {}, {}, [''])
+ project_module = import_module(project_name)
sys.path.pop()
return project_directory
diff --git a/django/core/management/commands/flush.py b/django/core/management/commands/flush.py
index f0df69204b..5d8a36e7a2 100644
--- a/django/core/management/commands/flush.py
+++ b/django/core/management/commands/flush.py
@@ -1,5 +1,6 @@
from django.core.management.base import NoArgsCommand, CommandError
from django.core.management.color import no_style
+from django.utils.importlib import import_module
from optparse import make_option
class Command(NoArgsCommand):
@@ -23,7 +24,7 @@ class Command(NoArgsCommand):
# dispatcher events.
for app_name in settings.INSTALLED_APPS:
try:
- __import__(app_name + '.management', {}, {}, [''])
+ import_module('.management', app_name)
except ImportError:
pass
diff --git a/django/core/management/commands/startapp.py b/django/core/management/commands/startapp.py
index a81c427142..13d64834a6 100644
--- a/django/core/management/commands/startapp.py
+++ b/django/core/management/commands/startapp.py
@@ -1,6 +1,7 @@
import os
from django.core.management.base import copy_helper, CommandError, LabelCommand
+from django.utils.importlib import import_module
class Command(LabelCommand):
help = "Creates a Django app directory structure for the given app name in the current directory."
@@ -26,7 +27,7 @@ class Command(LabelCommand):
# Check that the app_name cannot be imported.
try:
- __import__(app_name)
+ import_module(app_name)
except ImportError:
pass
else:
diff --git a/django/core/management/commands/startproject.py b/django/core/management/commands/startproject.py
index 540a64d2ea..712e43da83 100644
--- a/django/core/management/commands/startproject.py
+++ b/django/core/management/commands/startproject.py
@@ -1,4 +1,5 @@
from django.core.management.base import copy_helper, CommandError, LabelCommand
+from django.utils.importlib import import_module
import os
import re
from random import choice
@@ -20,7 +21,7 @@ class Command(LabelCommand):
# Check that the project_name cannot be imported.
try:
- __import__(project_name)
+ import_module(project_name)
except ImportError:
pass
else:
diff --git a/django/core/management/commands/syncdb.py b/django/core/management/commands/syncdb.py
index dbef7a6a95..fe51d45bb3 100644
--- a/django/core/management/commands/syncdb.py
+++ b/django/core/management/commands/syncdb.py
@@ -1,5 +1,6 @@
from django.core.management.base import NoArgsCommand
from django.core.management.color import no_style
+from django.utils.importlib import import_module
from optparse import make_option
import sys
@@ -30,7 +31,7 @@ class Command(NoArgsCommand):
# dispatcher events.
for app_name in settings.INSTALLED_APPS:
try:
- __import__(app_name + '.management', {}, {}, [''])
+ import_module('.management', app_name)
except ImportError, exc:
# This is slightly hackish. We want to ignore ImportErrors
# if the "management" module itself is missing -- but we don't