Skip to content

Commit

Permalink
Normalized exceptions raised by AppConfig.create.
Browse files Browse the repository at this point in the history
It raises ImportError whenever an entry in INSTALLED_APPS points
(directly or indirectly via AppConfig.name) to a non-existing module
and ImproperlyConfigured in all other cases.

Catching ImportError and re-raising ImproperlyConfigured tends to make
circular imports more difficult to diagnose.
  • Loading branch information
aaugustin committed Dec 26, 2013
1 parent ce1bc2c commit b355e98
Showing 1 changed file with 16 additions and 5 deletions.
21 changes: 16 additions & 5 deletions django/apps/base.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from importlib import import_module

from django.core.exceptions import ImproperlyConfigured
from django.utils.module_loading import import_by_path, module_has_submodule
from django.utils.module_loading import module_has_submodule
from django.utils._os import upath


Expand Down Expand Up @@ -66,13 +66,24 @@ def create(cls, entry):
module = import_module(entry)

except ImportError:
# Avoid django.utils.module_loading.import_by_path because it
# masks errors -- it reraises ImportError as ImproperlyConfigured.
mod_path, _, cls_name = entry.rpartition('.')

# Raise the original exception when entry cannot be a path to an
# app config class. Since module names are allowable here, the
# standard exception message from import_by_path is unsuitable.
if '.' not in entry:
# app config class.
if not mod_path:
raise

cls = import_by_path(entry)
mod = import_module(mod_path)
try:
cls = getattr(mod, cls_name)
except AttributeError:
# Emulate the error that "from <mod_path> import <cls_name>"
# would raise when <mod_path> exists but not <cls_name>, with
# more context (Python just says "cannot import name ...").
raise ImportError(
"cannot import name %r from %r" % (cls_name, mod_path))

# Check for obvious errors. (This check prevents duck typing, but
# it could be removed if it became a problem in practice.)
Expand Down

0 comments on commit b355e98

Please sign in to comment.