mirror of
https://github.com/django/django.git
synced 2025-11-26 21:51:57 +00:00
Got rid of AppConfig._stub. As a side effect, app_cache.app_configs now only contains entries for applications that are in INSTALLED_APPS, which is a good thing and will allow dramatic simplifications (which I will perform in the next commit). That required adjusting all methods that iterate on app_configs without checking the "installed" flag, hence the large changes in get_model[s]. Introduced AppCache.all_models to store models: - while the app cache is being populated and a suitable app config object to register models isn't available yet; - for applications that aren't in INSTALLED_APPS since they don't have an app config any longer. Replaced get_model(seed_cache=False) by registered_model() which can be kept simple and safe to call at any time, and removed the seed_cache argument to get_model[s]. There's no replacement for that private API. Allowed non-master app caches to go through populate() as it is now safe to do so. They were introduced in 1.7 so backwards compatibility isn't a concern as long as the migrations framework keeps working.
43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
from collections import OrderedDict
|
|
|
|
from django.utils._os import upath
|
|
|
|
|
|
class AppConfig(object):
|
|
"""
|
|
Class representing a Django application and its configuration.
|
|
"""
|
|
|
|
def __init__(self, name, app_module, models_module):
|
|
# Full Python path to the application eg. 'django.contrib.admin'.
|
|
# This is the value that appears in INSTALLED_APPS.
|
|
self.name = name
|
|
|
|
# Last component of the Python path to the application eg. 'admin'.
|
|
# This value must be unique across a Django project.
|
|
self.label = name.rpartition(".")[2]
|
|
|
|
# Root module eg. <module 'django.contrib.admin' from
|
|
# 'django/contrib/admin/__init__.pyc'>.
|
|
self.app_module = app_module
|
|
|
|
# Module containing models eg. <module 'django.contrib.admin.models'
|
|
# from 'django/contrib/admin/models.pyc'>. None if the application
|
|
# doesn't have a models module.
|
|
self.models_module = models_module
|
|
|
|
# Mapping of lower case model names to model classes.
|
|
# Populated by calls to AppCache.register_model().
|
|
self.models = OrderedDict()
|
|
|
|
# Whether the app is in INSTALLED_APPS or was automatically created
|
|
# when one of its models was imported.
|
|
self.installed = app_module is not None
|
|
|
|
# Filesystem path to the application directory eg.
|
|
# u'/usr/lib/python2.7/dist-packages/django/contrib/admin'.
|
|
# This is a unicode object on Python 2 and a str on Python 3.
|
|
self.path = upath(app_module.__path__[0]) if app_module is not None else None
|
|
|
|
def __repr__(self):
|
|
return '<AppConfig: %s>' % self.label
|