Code

Ticket #3349: 3349_r11897.diff

File 3349_r11897.diff, 9.8 KB (added by andrewbadr, 4 years ago)
Line 
1Index: django/conf/__init__.py
2===================================================================
3--- django/conf/__init__.py     (revision 11897)
4+++ django/conf/__init__.py     (working copy)
5@@ -11,6 +11,7 @@
6 import time     # Needed for Windows
7 
8 from django.conf import global_settings
9+from django.core.exceptions import wrap_and_raise
10 from django.utils.functional import LazyObject
11 from django.utils import importlib
12 
13@@ -72,7 +73,7 @@
14         try:
15             mod = importlib.import_module(self.SETTINGS_MODULE)
16         except ImportError, e:
17-            raise ImportError, "Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)
18+            wrap_and_raise(ImportError("Could not import settings '%s' (Is it on sys.path? Does it have syntax errors?): %s" % (self.SETTINGS_MODULE, e)))
19 
20         # Settings that should be converted into tuples if they're mistakenly entered
21         # as strings.
22Index: django/core/urlresolvers.py
23===================================================================
24--- django/core/urlresolvers.py (revision 11897)
25+++ django/core/urlresolvers.py (working copy)
26@@ -11,7 +11,7 @@
27 
28 from django.http import Http404
29 from django.conf import settings
30-from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist
31+from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist, wrap_and_raise
32 from django.utils.datastructures import MultiValueDict
33 from django.utils.encoding import iri_to_uri, force_unicode, smart_str
34 from django.utils.functional import memoize
35@@ -135,10 +135,10 @@
36             self._callback = get_callable(self._callback_str)
37         except ImportError, e:
38             mod_name, _ = get_mod_func(self._callback_str)
39-            raise ViewDoesNotExist, "Could not import %s. Error was: %s" % (mod_name, str(e))
40+            wrap_and_raise(ViewDoesNotExist("Could not import %s. Error was: %s" % (mod_name, str(e))))
41         except AttributeError, e:
42             mod_name, func_name = get_mod_func(self._callback_str)
43-            raise ViewDoesNotExist, "Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e))
44+            wrap_and_raise(ViewDoesNotExist("Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e))))
45         return self._callback
46     callback = property(_get_callback)
47 
48Index: django/core/handlers/base.py
49===================================================================
50--- django/core/handlers/base.py        (revision 11897)
51+++ django/core/handlers/base.py        (working copy)
52@@ -2,6 +2,7 @@
53 
54 from django import http
55 from django.core import signals
56+from django.core.exceptions import wrap_and_raise
57 from django.utils.encoding import force_unicode
58 from django.utils.importlib import import_module
59 
60@@ -34,7 +35,7 @@
61             try:
62                 dot = middleware_path.rindex('.')
63             except ValueError:
64-                raise exceptions.ImproperlyConfigured, '%s isn\'t a middleware module' % middleware_path
65+                wrap_and_raise(exceptions.ImproperlyConfigured('%s isn\'t a middleware module' % middleware_path))
66             mw_module, mw_classname = middleware_path[:dot], middleware_path[dot+1:]
67             try:
68                 mod = import_module(mw_module)
69Index: django/core/exceptions.py
70===================================================================
71--- django/core/exceptions.py   (revision 11897)
72+++ django/core/exceptions.py   (working copy)
73@@ -35,3 +35,19 @@
74 class ValidationError(Exception):
75     """An error while validating data."""
76     pass
77+
78+def wrap_and_raise(new_exception):
79+    """
80+    Call from an except: block to raise a new exception, while keeping
81+    the traceback info from the source exception.
82+   
83+    new_exception is be the Exception (or subclass) instance to raise.
84+    """
85+    import sys
86+    exc_class, exc, tb = sys.exc_info()
87+
88+    if issubclass(exc_class, Exception):
89+        raise new_exception.__class__, new_exception, tb
90+    else:
91+        raise new_exception
92+
93Index: django/contrib/auth/__init__.py
94===================================================================
95--- django/contrib/auth/__init__.py     (revision 11897)
96+++ django/contrib/auth/__init__.py     (working copy)
97@@ -1,6 +1,6 @@
98 import datetime
99 from warnings import warn
100-from django.core.exceptions import ImproperlyConfigured
101+from django.core.exceptions import ImproperlyConfigured, wrap_and_raise
102 from django.utils.importlib import import_module
103 
104 SESSION_KEY = '_auth_user_id'
105@@ -13,7 +13,7 @@
106     try:
107         mod = import_module(module)
108     except ImportError, e:
109-        raise ImproperlyConfigured, 'Error importing authentication backend %s: "%s"' % (module, e)
110+        wrap_and_raise(ImproperlyConfigured('Error importing authentication backend %s: "%s"' % (module, e)))
111     except ValueError, e:
112         raise ImproperlyConfigured, 'Error importing authentication backends. Is AUTHENTICATION_BACKENDS a correctly defined list or tuple?'
113     try:
114Index: django/template/__init__.py
115===================================================================
116--- django/template/__init__.py (revision 11897)
117+++ django/template/__init__.py (working copy)
118@@ -52,6 +52,7 @@
119 from inspect import getargspec
120 
121 from django.conf import settings
122+from django.core.exceptions import wrap_and_raise
123 from django.template.context import Context, RequestContext, ContextPopException
124 from django.utils.importlib import import_module
125 from django.utils.itercompat import is_iterable
126@@ -970,7 +971,7 @@
127         try:
128             mod = import_module(module_name)
129         except ImportError, e:
130-            raise InvalidTemplateLibrary("Could not load template library from %s, %s" % (module_name, e))
131+            wrap_and_raise(InvalidTemplateLibrary("Could not load template library from %s, %s" % (module_name, e)))
132         try:
133             lib = mod.register
134             libraries[module_name] = lib
135Index: django/template/loaders/app_directories.py
136===================================================================
137--- django/template/loaders/app_directories.py  (revision 11897)
138+++ django/template/loaders/app_directories.py  (working copy)
139@@ -7,7 +7,7 @@
140 import sys
141 
142 from django.conf import settings
143-from django.core.exceptions import ImproperlyConfigured
144+from django.core.exceptions import ImproperlyConfigured, wrap_and_raise
145 from django.template import TemplateDoesNotExist
146 from django.template.loader import BaseLoader
147 from django.utils._os import safe_join
148@@ -20,7 +20,7 @@
149     try:
150         mod = import_module(app)
151     except ImportError, e:
152-        raise ImproperlyConfigured, 'ImportError %s: %s' % (app, e.args[0])
153+        wrap_and_raise(ImproperlyConfigured('ImportError %s: %s' % (app, e.args[0])))
154     template_dir = os.path.join(os.path.dirname(mod.__file__), 'templates')
155     if os.path.isdir(template_dir):
156         app_template_dirs.append(template_dir.decode(fs_encoding))
157Index: django/template/defaulttags.py
158===================================================================
159--- django/template/defaulttags.py      (revision 11897)
160+++ django/template/defaulttags.py      (working copy)
161@@ -13,6 +13,7 @@
162 from django.template import get_library, Library, InvalidTemplateLibrary
163 from django.template.smartif import IfParser, Literal
164 from django.conf import settings
165+from django.core.exceptions import wrap_and_raise
166 from django.utils.encoding import smart_str, smart_unicode
167 from django.utils.itercompat import groupby
168 from django.utils.safestring import mark_safe
169@@ -924,8 +925,8 @@
170             lib = get_library("django.templatetags.%s" % taglib)
171             parser.add_library(lib)
172         except InvalidTemplateLibrary, e:
173-            raise TemplateSyntaxError("'%s' is not a valid tag library: %s" %
174-                                      (taglib, e))
175+            wrap_and_raise(TemplateSyntaxError("'%s' is not a valid tag library: %s" %
176+                                      (taglib, e)))
177     return LoadNode()
178 load = register.tag(load)
179 
180Index: django/template/context.py
181===================================================================
182--- django/template/context.py  (revision 11897)
183+++ django/template/context.py  (working copy)
184@@ -1,4 +1,4 @@
185-from django.core.exceptions import ImproperlyConfigured
186+from django.core.exceptions import ImproperlyConfigured, wrap_and_raise
187 from django.utils.importlib import import_module
188 
189 # Cache of actual callables.
190@@ -123,7 +123,7 @@
191             try:
192                 mod = import_module(module)
193             except ImportError, e:
194-                raise ImproperlyConfigured('Error importing request processor module %s: "%s"' % (module, e))
195+                wrap_and_raise(ImproperlyConfigured('Error importing request processor module %s: "%s"' % (module, e)))
196             try:
197                 func = getattr(mod, attr)
198             except AttributeError:
199Index: django/template/loader.py
200===================================================================
201--- django/template/loader.py   (revision 11897)
202+++ django/template/loader.py   (working copy)
203@@ -20,7 +20,7 @@
204 # Python eggs) sets is_usable to False if the "pkg_resources" module isn't
205 # installed, because pkg_resources is necessary to read eggs.
206 
207-from django.core.exceptions import ImproperlyConfigured
208+from django.core.exceptions import ImproperlyConfigured, wrap_and_raise
209 from django.template import Origin, Template, Context, TemplateDoesNotExist, add_to_builtins
210 from django.utils.importlib import import_module
211 from django.conf import settings
212@@ -81,7 +81,7 @@
213         try:
214             mod = import_module(module)
215         except ImportError:
216-            raise ImproperlyConfigured('Error importing template source loader %s: "%s"' % (loader, e))
217+            wrap_and_raise(ImproperlyConfigured('Error importing template source loader %s: "%s"' % (loader, e)))
218         try:
219             TemplateLoader = getattr(mod, attr)
220         except AttributeError, e: