[Zope-Checkins] CVS: Packages/ZPublisher - HTTPResponse.py:1.50

Jeremy Hylton jeremy@zope.com
Mon, 22 Oct 2001 16:07:41 -0400


Update of /cvs-repository/Packages/ZPublisher
In directory cvs.zope.org:/tmp/cvs-serv13840

Modified Files:
	HTTPResponse.py 
Log Message:
Reformatting for readability + minor variable renaming.

Add some comments that make it clear that the traceback object is not
referenced when the function exits.




=== Packages/ZPublisher/HTTPResponse.py 1.49 => 1.50 ===
          
 
-    def format_exception(self,etype,value,tb,limit=None):
+    def format_exception(self, etype, value, tb, limit=None):
         import traceback
         result=['Traceback (innermost last):']
         if limit is None:
@@ -462,15 +462,15 @@
                                    str(locals['__traceback_info__']))
                 except: pass
                 tb = tb.tb_next
-                n = n+1
+                n = n + 1
         result.append(join(traceback.format_exception_only(etype, value),
                            ' '))
         return result
 
-    def _traceback(self,t,v,tb):
-        tb=self.format_exception(t,v,tb,200)
-        tb=join(tb,'\n')
-        tb=self.quoteHTML(tb)
+    def _traceback(self, t, v, tb):
+        tb = self.format_exception(t, v, tb, 200)
+        tb = join(tb, '\n')
+        tb = self.quoteHTML(tb)
         if self.debug_mode: _tbopen, _tbclose = '<PRE>', '</PRE>'
         else:               _tbopen, _tbclose = '<!--',  '-->'
         return "\n%s\n%s\n%s" % (_tbopen, tb, _tbclose)
@@ -586,88 +586,91 @@
                   tag_search=re.compile('[a-zA-Z]>').search,
                   abort=1
                   ):
-        if type(info) is type(()) and len(info)==3: t,v,tb = info
-        else: t,v,tb = sys.exc_info()
+        if type(info) is type(()) and len(info)==3:
+            t, v, tb = info
+        else:
+            t, v, tb = sys.exc_info()
 
-        if t=='Unauthorized' or t == Unauthorized or (
-            isinstance(t, types.ClassType) and issubclass(t, Unauthorized)
-            ):
+        if t == 'Unauthorized' or t == Unauthorized or (
+            isinstance(t, types.ClassType) and issubclass(t, Unauthorized)):
             t = 'Unauthorized'
             self._unauthorized()
 
-        stb=tb
+        stb = tb # note alias between tb and stb
 
         try:
             # Try to capture exception info for bci calls
-            et=translate(str(t),nl2sp)
-            self.setHeader('bobo-exception-type',et)
-            ev=translate(str(v),nl2sp)
-            if find(ev,'<html>') >= 0: ev='bobo exception'
-            self.setHeader('bobo-exception-value',ev[:255])
+            et = translate(str(t), nl2sp)
+            self.setHeader('bobo-exception-type', et)
+            ev = translate(str(v), nl2sp)
+            if find(ev, '<html>') >= 0:
+                ev = 'bobo exception'
+            self.setHeader('bobo-exception-value', ev[:255])
             # Get the tb tail, which is the interesting part:
-            while tb.tb_next is not None: tb=tb.tb_next
-            el=str(tb.tb_lineno)
-            ef=str(tb.tb_frame.f_code.co_filename)
-            self.setHeader('bobo-exception-file',ef)
-            self.setHeader('bobo-exception-line',el)
+            while tb.tb_next is not None:
+                tb = tb.tb_next
+            el = str(tb.tb_lineno)
+            ef = str(tb.tb_frame.f_code.co_filename)
+            self.setHeader('bobo-exception-file', ef)
+            self.setHeader('bobo-exception-line', el)
 
         except:
             # Dont try so hard that we cause other problems ;)
             pass
 
-        tb=stb
-        stb=None
+        tb = stb # original traceback
+        del stb
         self.setStatus(t)
         if self.status >= 300 and self.status < 400:
             if type(v) == types.StringType and absuri_match(v) is not None:
-                if self.status==300: self.setStatus(302)
+                if self.status==300:
+                    self.setStatus(302)
                 self.setHeader('location', v)
-                tb=None
+                tb = None # just one path covered
                 return self
             else:
                 try:
-                    l,b=v
-                    if type(l) == types.StringType and absuri_match(l) is not None:
-                        if self.status==300: self.setStatus(302)
+                    l, b = v
+                    if (type(l) == types.StringType
+                        and absuri_match(l) is not None):
+                        if self.status==300:
+                            self.setStatus(302)
                         self.setHeader('location', l)
                         self.setBody(b)
-                        tb=None
+                        tb = None # one more patch covered
                         return self
-                except: pass
+                except:
+                    pass # tb is not cleared in this case
 
-        b=v
-        if isinstance(b,Exception):
+        b = v
+        if isinstance(b, Exception):
             try:
-                b=str(b)
+                b = str(b)
             except:
-                b='<unprintable %s object>' % type(b).__name__
-        
-        if fatal and t is SystemExit and v.code==0:
-                tb=self.setBody(
-                    (str(t),
-                    'Zope has exited normally.<p>'
-                     + self._traceback(t,v,tb)),
-                     is_error=1)
-        #elif 1: self.setBody(v)
+                b = '<unprintable %s object>' % type(b).__name__
 
+        if fatal and t is SystemExit and v.code == 0:
+            body = self.setBody(
+                (str(t),
+                 'Zope has exited normally.<p>' + self._traceback(t, v, tb)),
+                is_error=1)
         elif type(b) is not types.StringType or tag_search(b) is None:
-            tb=self.setBody(
+            body = self.setBody(
                 (str(t),
-                'Sorry, a site error occurred.<p>'+
-                 self._traceback(t,v,tb)),
+                'Sorry, a site error occurred.<p>'
+                 + self._traceback(t, v, tb)),
                  is_error=1)
-
         elif (lower(strip(b)[:6])=='<html>' or
               lower(strip(b)[:14])=='<!doctype html'):
             # error is an HTML document, not just a snippet of html
-            tb=self.setBody(b + self._traceback(t,'(see above)',tb),
-                is_error=1)
+            body = self.setBody(b + self._traceback(t, '(see above)', tb),
+                              is_error=1)
         else:
-            tb=self.setBody(
-                (str(t), b + self._traceback(t,'(see above)',tb)),
-                 is_error=1)
-
-        return tb
+            body = self.setBody((str(t),
+                               b + self._traceback(t,'(see above)', tb)),
+                              is_error=1)
+        del tb
+        return body
 
     _wrote=None