summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAymeric Augustin <aymeric.augustin@m4x.org>2015-08-29 13:26:00 +0200
committerAymeric Augustin <aymeric.augustin@m4x.org>2015-08-29 23:13:12 +0200
commit2b08b364889d47502a121cd07c69937b94003904 (patch)
tree1619dbff8855ced0d9524001687dffaed17403be
parentcc14d51ee8325c82665cb98af4dfe49aab565d52 (diff)
[1.8.x] Made the autoreloader survive all exceptions.
Refs #24704. Backport of b79fc11d73 from master
-rw-r--r--django/utils/autoreload.py3
-rw-r--r--tests/utils_tests/test_autoreload.py16
2 files changed, 17 insertions, 2 deletions
diff --git a/django/utils/autoreload.py b/django/utils/autoreload.py
index a07fb04abf..61804ee7fe 100644
--- a/django/utils/autoreload.py
+++ b/django/utils/autoreload.py
@@ -227,8 +227,7 @@ def check_errors(fn):
global _exception
try:
fn(*args, **kwargs)
- except (ImportError, IndentationError, NameError, SyntaxError,
- TypeError, AttributeError):
+ except Exception:
_exception = sys.exc_info()
et, ev, tb = _exception
diff --git a/tests/utils_tests/test_autoreload.py b/tests/utils_tests/test_autoreload.py
index 181ee02b96..30010f2945 100644
--- a/tests/utils_tests/test_autoreload.py
+++ b/tests/utils_tests/test_autoreload.py
@@ -169,3 +169,19 @@ class TestFilenameGenerator(TestCase):
with self.assertRaises(SyntaxError):
autoreload.check_errors(import_module)('test_syntax_error')
self.assertFileFoundOnlyNew(filename)
+
+ def test_check_errors_catches_all_exceptions(self):
+ """
+ Since Python may raise arbitrary exceptions when importing code,
+ check_errors() must catch Exception, not just some subclasses.
+ """
+ dirname = tempfile.mkdtemp()
+ filename = os.path.join(dirname, 'test_exception.py')
+ self.addCleanup(shutil.rmtree, dirname)
+ with open(filename, 'w') as f:
+ f.write("raise Exception")
+
+ with extend_sys_path(dirname):
+ with self.assertRaises(Exception):
+ autoreload.check_errors(import_module)('test_exception')
+ self.assertFileFound(filename)