Skip to content

Commit

Permalink
Made the AppConfig API marginally more consistent.
Browse files Browse the repository at this point in the history
Eliminated the app_ prefix that was more confusing than useful.
  • Loading branch information
aaugustin committed Dec 26, 2013
1 parent fec5330 commit ce1bc2c
Show file tree
Hide file tree
Showing 6 changed files with 15 additions and 12 deletions.
17 changes: 10 additions & 7 deletions django/apps/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ class AppConfig(object):
Class representing a Django application and its configuration.
"""

def __init__(self, app_name):
def __init__(self, app_name, app_module):
# Full Python path to the application eg. 'django.contrib.admin'.
self.name = app_name

# Root module for the application eg. <module 'django.contrib.admin'
# from 'django/contrib/admin/__init__.pyc'>.
self.app_module = import_module(app_name)
self.module = app_module

# The following attributes could be defined at the class level in a
# subclass, hence the test-and-set pattern.
Expand All @@ -39,7 +39,7 @@ def __init__(self, app_name):
# egg. Otherwise it's a unicode on Python 2 and a str on Python 3.
if not hasattr(self, 'path'):
try:
self.path = upath(self.app_module.__path__[0])
self.path = upath(app_module.__path__[0])
except AttributeError:
self.path = None

Expand All @@ -63,7 +63,7 @@ def create(cls, entry):
try:
# If import_module succeeds, entry is a path to an app module.
# Otherwise, entry is a path to an app config class or an error.
import_module(entry)
module = import_module(entry)

except ImportError:
# Raise the original exception when entry cannot be a path to an
Expand All @@ -88,12 +88,15 @@ def create(cls, entry):
raise ImproperlyConfigured(
"%r must supply a name attribute." % entry)

# Ensure app_names points to a valid module.
app_module = import_module(app_name)

# Entry is a path to an app config class.
return cls(app_name)
return cls(app_name, app_module)

else:
# Entry is a path to an app module.
return cls(entry)
return cls(entry, module)

def import_models(self, all_models):
# Dictionary of models for this app, primarily maintained in the
Expand All @@ -102,6 +105,6 @@ def import_models(self, all_models):
# imported, which may happen before populate_models() runs.
self.models = all_models

if module_has_submodule(self.app_module, MODELS_MODULE_NAME):
if module_has_submodule(self.module, MODELS_MODULE_NAME):
models_module_name = '%s.%s' % (self.name, MODELS_MODULE_NAME)
self.models_module = import_module(models_module_name)
2 changes: 1 addition & 1 deletion django/contrib/comments/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def get_comment_app():
except LookupError:
raise ImproperlyConfigured("The COMMENTS_APP (%r) "
"must be in INSTALLED_APPS" % settings.COMMENTS_APP)
return app_config.app_module
return app_config.module

def get_comment_app_name():
"""
Expand Down
2 changes: 1 addition & 1 deletion django/core/management/commands/migrate.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def handle(self, *args, **options):
# Import the 'management' module within each installed app, to register
# dispatcher events.
for app_config in apps.get_app_configs():
if module_has_submodule(app_config.app_module, "management"):
if module_has_submodule(app_config.module, "management"):
import_module('.management', app_config.name)

# Get the database we're operating from
Expand Down
2 changes: 1 addition & 1 deletion django/test/simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ def get_tests(app_config):
except ImportError:
# Couldn't import tests.py. Was it due to a missing file, or
# due to an import error in a tests.py that actually exists?
if not module_has_submodule(app_config.app_module, TEST_MODULE):
if not module_has_submodule(app_config.module, TEST_MODULE):
test_module = None
else:
# The module exists, so there must be an import error in the test
Expand Down
2 changes: 1 addition & 1 deletion django/utils/module_loading.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ def autodiscover_modules(*args, **kwargs):
# Decide whether to bubble up this error. If the app just
# doesn't have an admin module, we can ignore the error
# attempting to import it, otherwise we want it to bubble up.
if module_has_submodule(app_config.app_module, module_to_search):
if module_has_submodule(app_config.module, module_to_search):
raise


Expand Down
2 changes: 1 addition & 1 deletion docs/ref/applications.txt
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ Read-only attributes
It may be ``None`` if the application isn't stored in a directory, for
instance if it's loaded from an egg.

.. attribute:: AppConfig.app_module
.. attribute:: AppConfig.module

Root module for the application, e.g. ``<module 'django.contrib.admin' from
'django/contrib/admin/__init__.pyc'>``.
Expand Down

0 comments on commit ce1bc2c

Please sign in to comment.