[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