[pypy-svn] r4903 - in pypy/branch/src-newobjectmodel: . pypy/tool/tb_server
hpk at codespeak.net
hpk at codespeak.net
Fri Jun 4 15:13:42 CEST 2004
Author: hpk
Date: Fri Jun 4 15:13:41 2004
New Revision: 4903
Added:
pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py
Modified:
pypy/branch/src-newobjectmodel/ (props changed)
pypy/branch/src-newobjectmodel/pypy/tool/tb_server/ (props changed)
pypy/branch/src-newobjectmodel/pypy/tool/tb_server/server.py (contents, props changed)
Log:
- added xpy for the time being
- tb-rendering is more designed now ... more to follow
Added: pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py
==============================================================================
--- (empty file)
+++ pypy/branch/src-newobjectmodel/pypy/tool/tb_server/render.py Fri Jun 4 15:13:41 2004
@@ -0,0 +1,34 @@
+from pypy.tool.tb_server.server import TBRequestHandler
+from xpy import html, xml
+import traceback
+
+views = TBRequestHandler.views
+###
+class TracebackView:
+ def __init__(self, tb):
+ self.name = 'traceback%d' % len(views)
+ views[self.name] = self
+ self.tb = tb
+
+ def render(self, args):
+ tag = html.html(
+ html.head(),
+ html.body(
+ self.render_tb(args)
+ )
+ )
+ return tag.to_unicode()
+
+ def render_tb(self, args):
+ try:
+ return self.render_tb_really(args)
+ except:
+ import sys, traceback
+ lines = traceback.format_tb(sys.exc_info()[2])
+ return html.pre(
+ xml.escape(''.join(['Internal Rendering Error, traceback follows\n'] + lines)))
+
+ def render_tb_really(self, args):
+ raise ValueError
+
+
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 15:13:41 2004
@@ -2,20 +2,36 @@
import threading
import sys
-global content
-content = ''
server_thread = None
+server_port = None
class TBRequestHandler(BaseHTTPRequestHandler):
+ views = {}
+
def do_GET(self):
if self.path == '/quit':
global server_thread
server_thread = None
raise SystemExit
- self.send_response(200)
- self.send_header("Content-Type", "text/plain")
- self.end_headers()
- self.wfile.write(content)
+ parts = [x for x in self.path.split('/') if x]
+ if not parts:
+ tb_name = 'traceback'
+ args = []
+ 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")
+ self.end_headers()
+ self.wfile.write('traceback named %r not found' % tb_name)
+ else:
+ tbview = self.views[tb_name]
+ s = tbview.render(args)
+ self.send_response(200)
+ self.send_header("Content-Type", "text/html ; charset=utf-8")
+ self.end_headers()
+ self.wfile.write(unicode(s).encode('utf8'))
def log_message(self, format, *args):
pass
@@ -29,6 +45,7 @@
HTTPServer.handle_error(self, request, client_address)
def serve():
+ import socket
port = 8080
while 1:
try:
@@ -68,10 +85,9 @@
stop()
def publish_tb(tb):
- import traceback
- s = traceback.format_tb(tb)
- global content
- content = ''.join(s)
+ from pypy.tool.tb_server.render import TracebackView
+ x = TracebackView(tb)
+ print "traceback is at http://localhost:%d/%s" % (server_port, x.name)
if __name__ == "__main__":
t = main()
More information about the Pypy-commit
mailing list