Commit 46b9dd30 authored by Karen Tracey's avatar Karen Tracey
Browse files

[1.1.X] Fixed #11696: Changed app loading code so that it does not swallow...

[1.1.X] Fixed #11696: Changed app loading code so that it does not swallow import errors that used to be (prior to r10088) raised. 

r12950 from trunk.


git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12951 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent bf5d71f2
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ from django.core.exceptions import ImproperlyConfigured
from django.utils.datastructures import SortedDict
from django.utils.importlib import import_module

import imp
import sys
import os
import threading
@@ -70,8 +71,9 @@ class AppCache(object):
        """
        self.handled[app_name] = None
        self.nesting_level += 1
        app_module = import_module(app_name)
        try:
            models = import_module('.models', app_name)
            imp.find_module('models', app_module.__path__)
        except ImportError:
            self.nesting_level -= 1
            if can_postpone:
@@ -81,6 +83,7 @@ class AppCache(object):
                # populate).
                self.postponed.append(app_name)
            return None
        models = import_module('.models', app_name)
        self.nesting_level -= 1
        if models not in self.app_store:
            self.app_store[models] = len(self.app_store)
+0 −0

Empty file added.

+1 −0
Original line number Diff line number Diff line
from django.db import modelz
+27 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ from django import conf, bin, get_version
from django.conf import settings

class AdminScriptTestCase(unittest.TestCase):
    def write_settings(self, filename, apps=None, is_dir=False):
    def write_settings(self, filename, apps=None, is_dir=False, sdict=None):
        test_dir = os.path.dirname(os.path.dirname(__file__))
        if is_dir:
            settings_dir = os.path.join(test_dir,filename)
@@ -41,6 +41,10 @@ class AdminScriptTestCase(unittest.TestCase):
        if apps:
            settings_file.write("INSTALLED_APPS = %s\n" % apps)

        if sdict:
            for k, v in sdict.items():
                settings_file.write("%s = %s\n" % (k, v))

        settings_file.close()

    def remove_settings(self, filename, is_dir=False):
@@ -953,6 +957,28 @@ class ManageMultipleSettings(AdminScriptTestCase):
        self.assertNoOutput(out)
        self.assertOutput(err, "Unknown command: 'noargs_command'")


class ManageValidateImportErrorsReported(AdminScriptTestCase):
    def tearDown(self):
        self.remove_settings('settings.py')

    def test_nonexistent_app(self):
        "manage.py validate reports an error on a non-existent app in INSTALLED_APPS"
        self.write_settings('settings.py', apps=['admin_scriptz.broken_app'], sdict={'USE_I18N': False})
        args = ['validate']
        out, err = self.run_manage(args)
        self.assertNoOutput(out)
        self.assertOutput(err, 'No module named admin_scriptz.broken_app')

    def test_broken_app(self):
        "manage.py validate reports an ImportError if an app's models.py raises one on import"
        self.write_settings('settings.py', apps=['admin_scripts.broken_app'])
        args = ['validate']
        out, err = self.run_manage(args)
        self.assertNoOutput(out)
        self.assertOutput(err, 'ImportError')
       

##########################################################################
# COMMAND PROCESSING TESTS
# Check that user-space commands are correctly handled - in particular,