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

mwh at codespeak.net mwh at codespeak.net
Fri Jun 4 17:48:44 CEST 2004


Author: mwh
Date: Fri Jun  4 17:48:43 2004
New Revision: 4920

Modified:
   pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py
   pypy/branch/src-newobjectmodel/pypy/tool/tb_server/server.py
Log:
support for parameters in the url
we don't like it much yet


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 17:48:43 2004
@@ -4,13 +4,29 @@
 from std.magic import dyncode
 
 import traceback
+import cgi
 
 views = TBRequestHandler.views
 
+class URL(object):
+    attrs='scm','netloc','path','params','query','fragment'
+    attrindex = dict(zip(attrs, range(len(attrs))))
+    # XXX authentication part is not parsed
+
+    def __init__(self, string='', **kw):
+        from urlparse import urlparse
+        for name,value in zip(self.attrs, urlparse(string, 'http')):
+            setattr(self, name, value)
+        self.__dict__.update(kw)
+
+
 class Renderer:
-    def render(self, args):
+    def render(self, path):
+        url = URL(path)
+        args = url.path.split('/')[2:]
+        query = cgi.parse_qs(url.query)
         try:
-            inner = self.render_self(args)
+            inner = self.render_self(args, query)
         except:
             import sys, traceback
             lines = traceback.format_exception(*sys.exc_info())
@@ -33,14 +49,15 @@
         views[self.name] = self
         self.exc = exc
         
-    def render_self(self, args):
+    def render_self(self, args, query):
         lines = html.pre()
         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='/file' + filename + '#' + str(lineno)).to_unicode().encode('utf-8'),
+                html.a(filename, href=link).to_unicode().encode('utf-8'),
                 lineno, name))
             lines.append('        '+dyncode.getline(filename, lineno).lstrip())
         lines.append(xml.escape(
@@ -52,17 +69,22 @@
     return html.a(name=str(lineno))
 
 class FileSystemView(Renderer):
-    def render_self(self, args):
+    def render_self(self, args, query):        
         fname = '/' + '/'.join(args)
         lines = html.table()
         i = 1
+        print query
+        hilite = int(query.get('line', [-1])[0])
         for line in open(fname):
+            if i == hilite:
+                kws = {'style': 'font-weight: bold;'}
+            else:
+                kws = {}
             row = html.tr(
-                html.td(html.a("%03d" % i, name=str(i)), 
-                        style='text-align: left;'),
+                html.td(html.a("%03d" % i, name=str(i))),
                 html.td(
-                    html.pre(xml.escape(line)[:-1]),
-                        #style="white-space: pre; font-family: monospace;"
+                    html.pre(xml.escape(line)[:-1],
+                             **kws),
                 ), 
             )
             lines.append(row) 

Modified: pypy/branch/src-newobjectmodel/pypy/tool/tb_server/server.py
==============================================================================
--- pypy/branch/src-newobjectmodel/pypy/tool/tb_server/server.py	(original)
+++ pypy/branch/src-newobjectmodel/pypy/tool/tb_server/server.py	Fri Jun  4 17:48:43 2004
@@ -13,13 +13,12 @@
             global server_thread
             server_thread = None
             raise SystemExit
-        parts = [x for x in self.path.split('/') if x]
+        i = self.path.find('/', 1)
+        parts = self.path[1:].split('/', 1)
         if not parts:
-            tb_name = 'traceback' 
-            args = []
+            tp_name = 'traceback'
         else:
             tb_name = parts[0]
-            args = parts[1:]
         if not self.views.has_key(tb_name):
             self.send_response(404)
             self.send_header("Content-Type", "text/plain")
@@ -27,7 +26,7 @@
             self.wfile.write('traceback named %r not found' % tb_name)
         else:
             tbview = self.views[tb_name]
-            s = tbview.render(args) 
+            s = tbview.render(self.path) 
             self.send_response(200)
             self.send_header("Content-Type", "text/html; charset=utf-8")
             self.end_headers()



More information about the Pypy-commit mailing list