[pypy-svn] r4922 - pypy/branch/src-newobjectmodel/pypy/tool/tb_server

mwh at codespeak.net mwh at codespeak.net
Fri Jun 4 18:20:12 CEST 2004


Author: mwh
Date: Fri Jun  4 18:20:12 2004
New Revision: 4922

Modified:
   pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py
Log:
less grotty options support


Modified: pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py	(original)
+++ pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py	Fri Jun  4 18:20:12 2004
@@ -5,6 +5,7 @@
 
 import traceback
 import cgi
+import urllib
 
 views = TBRequestHandler.views
 
@@ -18,15 +19,22 @@
         for name,value in zip(self.attrs, urlparse(string, 'http')):
             setattr(self, name, value)
         self.__dict__.update(kw)
+        self.query = cgi.parse_qs(self.query)
 
+    def link_with_options(self, *kw):
+        nq = self.query.copy()
+        nq.update(kw)
+        query = urllib.urlencode(nq)
+        from urlparse import urlunparse
+        return urlunparse(self.scm, self.netloc, self.path,
+                          self.params, query, self.fragment)
 
 class Renderer:
     def render(self, path):
         url = URL(path)
         args = url.path.split('/')[2:]
-        query = cgi.parse_qs(url.query)
         try:
-            inner = self.render_self(args, query)
+            inner = self.render_self(url, args)
         except:
             import sys, traceback
             lines = traceback.format_exception(*sys.exc_info())
@@ -49,32 +57,45 @@
         views[self.name] = self
         self.exc = exc
         
-    def render_self(self, args, query):
-        lines = html.pre()
+    def render_self(self, url, args):
+        lines = html.div()
+        opts = {}
+        for k in url.query:
+            ent, opt = k.split(':')
+            val = int(url.query[k][0])
+            opts.setdefault(ent, {})[opt] = val
+            
+        i = 0
         for tb in dyncode.listtb(self.exc[2]):
-            filename = tb.tb_frame.f_code.co_filename 
-            lineno = tb.tb_lineno
-            name = tb.tb_frame.f_code.co_name
-            link = '/file' + filename + '?line=' + str(lineno) + '#' + str(lineno)
-            lines.append('  File "%s", line %d, in %s\n'%(
-                html.a(filename, href=link).to_unicode().encode('utf-8'),
-                lineno, name))
-            lines.append('        '+dyncode.getline(filename, lineno).lstrip())
-        lines.append(xml.escape(
-            ''.join(traceback.format_exception_only(self.exc[0], self.exc[1]))))
+            lines.append(self.render_tb(url, tb, i,
+                                        **opts.get('entry' + str(i), {})))
+            
+        lines.append(html.pre(xml.escape(
+            ''.join(traceback.format_exception_only(self.exc[0], self.exc[1])))))
         return lines
 
+    def render_tb(self, url, tb, i, showlocals=0):
+        lines = html.pre()
+        filename = tb.tb_frame.f_code.co_filename 
+        lineno = tb.tb_lineno
+        name = tb.tb_frame.f_code.co_name
+        link = '/file' + filename + '?line=' + str(lineno) + '#' + str(lineno)
+        lines.append('  File "%s", line %d, in %s\n'%(
+            html.a(filename, href=link).to_unicode().encode('utf-8'),
+            lineno, name))
+        lines.append('        '+dyncode.getline(filename, lineno).lstrip())
+        return lines
+        
 
 def ln(lineno):
     return html.a(name=str(lineno))
 
 class FileSystemView(Renderer):
-    def render_self(self, args, query):        
+    def render_self(self, url, args):
         fname = '/' + '/'.join(args)
         lines = html.table()
         i = 1
-        print query
-        hilite = int(query.get('line', [-1])[0])
+        hilite = int(url.query.get('line', [-1])[0])
         for line in open(fname):
             if i == hilite:
                 kws = {'style': 'font-weight: bold;'}



More information about the Pypy-commit mailing list