Skip to content

Commit

Permalink
magic-removal: elimated 'module._MODELS' and replaced with a register…
Browse files Browse the repository at this point in the history
… function,

so that setting 'app_label' is all that's needed for models in different files.


git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2278 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
spookylukey committed Feb 5, 2006
1 parent adc562d commit 6a90f49
Show file tree
Hide file tree
Showing 6 changed files with 14 additions and 16 deletions.
2 changes: 1 addition & 1 deletion django/contrib/admin/views/doc.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ def model_detail(request, app_label, model_name):
except ImproperlyConfigured:
raise Http404, "App %r not found" % app_label
model = None
for m in app_mod._MODELS:
for m in models.get_models(app_mod):
if m._meta.object_name.lower() == model_name:
model = m
break
Expand Down
2 changes: 1 addition & 1 deletion django/core/management.py
Original file line number Diff line number Diff line change
Expand Up @@ -438,7 +438,7 @@ def get_admin_index(app):
app_label = app_models[0]._meta.app_label
output.append('{%% if perms.%s %%}' % app_label)
output.append('<div class="module"><h2>%s</h2><table>' % app_label.title())
for klass in mod._MODELS:
for klass in app_models:
if klass._meta.admin:
output.append(MODULE_TEMPLATE % {
'app': app_label,
Expand Down
4 changes: 2 additions & 2 deletions django/db/models/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from django.db.models.options import Options, AdminOptions
from django.db import connection, backend
from django.db.models import signals
from django.db.models.loading import register_models
from django.dispatch import dispatcher
from django.core.exceptions import ObjectDoesNotExist
from django.utils.functional import curry
Expand Down Expand Up @@ -46,8 +47,7 @@ def __new__(cls, name, bases, attrs):

new_class._prepare()

# Populate the _MODELS member on the module the class is in.
model_module.__dict__.setdefault('_MODELS', []).append(new_class)
register_models(new_class._meta.app_label, new_class)
return new_class

def cmp_cls(x, y):
Expand Down
16 changes: 6 additions & 10 deletions django/db/models/loading.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
__all__ = ('get_apps', 'get_app', 'get_models', 'get_model', 'register_models')

_app_list = None # Cache of installed apps.
_app_models = {} # Dictionary of models against app module name

def get_apps():
"Returns a list of all installed modules that contain models."
Expand Down Expand Up @@ -33,11 +34,11 @@ def get_models(app_mod=None):
returns a list of all installed models.
"""
if app_mod:
return getattr(app_mod, '_MODELS', ())
return _app_models.get(app_mod.__name__.split('.')[-2], ())
else:
model_list = []
for app_mod in get_apps():
model_list.extend(getattr(app_mod, '_MODELS', ()))
model_list.extend(get_models(app_mod))
return model_list

def get_model(app_label, model_name):
Expand All @@ -51,13 +52,8 @@ def get_model(app_label, model_name):
model._meta.app_label == app_label:
return model

def register_models(app_mod, *models):
def register_models(app_label, *models):
"""
Use this from an app's models.py module to register imported Model classes
as belonging to the app. e.g.:
register_models(sys.modules[__name__], Article, Reporter)
Register a set of models as belonging to an app.
"""
if not hasattr(app_mod, '_MODELS'):
app_mod._MODELS = []
app_mod._MODELS.extend(models)
_app_models.setdefault(app_label, []).extend(models)
2 changes: 1 addition & 1 deletion django/db/models/options.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ def get_ordered_objects(self):
if not hasattr(self, '_ordered_objects'):
objects = []
# TODO
#for klass in get_app(self.app_label)._MODELS:
#for klass in get_models(get_app(self.app_label)):
# opts = klass._meta
# if opts.order_with_respect_to and opts.order_with_respect_to.rel \
# and self == opts.order_with_respect_to.rel.to._meta:
Expand Down
4 changes: 3 additions & 1 deletion tests/runtests.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env python

import os, re, sys, time, traceback
import django.db.models

# doctest is included in the same package as this module, because this testing
# framework uses features only available in the Python 2.4 version of doctest,
Expand Down Expand Up @@ -142,7 +143,8 @@ def run_tests(self):

# Run the API tests.
p = doctest.DocTestParser()
test_namespace = dict([(m._meta.object_name, m) for m in mod._MODELS])
test_namespace = dict([(m._meta.object_name, m) \
for m in django.db.models.get_models(mod)])
dtest = p.get_doctest(mod.API_TESTS, test_namespace, model_name, None, None)
# Manually set verbose=False, because "-v" command-line parameter
# has side effects on doctest TestRunner class.
Expand Down

0 comments on commit 6a90f49

Please sign in to comment.