[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