[pypy-svn] r44262 - in pypy/branch/graphserver-dist/dotviewer: . test
arigo at codespeak.net
arigo at codespeak.net
Fri Jun 15 10:04:18 CEST 2007
Author: arigo
Date: Fri Jun 15 10:04:10 2007
New Revision: 44262
Modified:
pypy/branch/graphserver-dist/dotviewer/graphclient.py
pypy/branch/graphserver-dist/dotviewer/graphdisplay.py
pypy/branch/graphserver-dist/dotviewer/graphpage.py
pypy/branch/graphserver-dist/dotviewer/graphparse.py
pypy/branch/graphserver-dist/dotviewer/graphserver.py
pypy/branch/graphserver-dist/dotviewer/msgstruct.py
pypy/branch/graphserver-dist/dotviewer/test/test_interactive.py
Log:
Safer error handling. Fix the display of colors.
Modified: pypy/branch/graphserver-dist/dotviewer/graphclient.py
==============================================================================
--- pypy/branch/graphserver-dist/dotviewer/graphclient.py (original)
+++ pypy/branch/graphserver-dist/dotviewer/graphclient.py Fri Jun 15 10:04:10 2007
@@ -63,6 +63,9 @@
reload(graph_id)
except EOFError:
pass
+ except Exception, e:
+ send_error(io, e)
+ raise
io.close()
def page_messages(page, graph_id):
@@ -88,6 +91,17 @@
if ioerror is not None:
raise ioerror
+def send_error(io, e):
+ try:
+ errmsg = str(e)
+ if errmsg:
+ errmsg = '%s: %s' % (e.__class__.__name__, errmsg)
+ else:
+ errmsg = '%s' % (e.__class__.__name__,)
+ io.sendmsg(msgstruct.CMSG_SAY, errmsg)
+ except Exception:
+ pass
+
def spawn_handler():
gsvar = os.environ.get('GRAPHSERVER')
if not gsvar:
Modified: pypy/branch/graphserver-dist/dotviewer/graphdisplay.py
==============================================================================
--- pypy/branch/graphserver-dist/dotviewer/graphdisplay.py (original)
+++ pypy/branch/graphserver-dist/dotviewer/graphdisplay.py Fri Jun 15 10:04:10 2007
@@ -650,10 +650,13 @@
self.quit()
def process_UserEvent(self, event): # new layout request
- if event.layout is None:
- self.setstatusbar('cannot follow this link')
- else:
- self.setlayout(event.layout)
+ if hasattr(event, 'layout'):
+ if event.layout is None:
+ self.setstatusbar('cannot follow this link')
+ else:
+ self.setlayout(event.layout)
+ elif hasattr(event, 'say'):
+ self.setstatusbar(event.say)
def quit(self):
raise StopIteration
Modified: pypy/branch/graphserver-dist/dotviewer/graphpage.py
==============================================================================
--- pypy/branch/graphserver-dist/dotviewer/graphpage.py (original)
+++ pypy/branch/graphserver-dist/dotviewer/graphpage.py Fri Jun 15 10:04:10 2007
@@ -1,5 +1,5 @@
-class GraphPage:
+class GraphPage(object):
"""Base class for the client-side content of one of the 'pages'
(one graph) sent over to and displayed by the external process.
"""
@@ -27,6 +27,11 @@
import graphclient
graphclient.display_page(self)
+ def display_background(self):
+ "Display a graph page in a background thread."
+ import graphclient, thread
+ thread.start_new_thread(graphclient.display_page, (self,))
+
class DotFileGraphPage(GraphPage):
def compute(self, dotfile):
Modified: pypy/branch/graphserver-dist/dotviewer/graphparse.py
==============================================================================
--- pypy/branch/graphserver-dist/dotviewer/graphparse.py (original)
+++ pypy/branch/graphserver-dist/dotviewer/graphparse.py Fri Jun 15 10:04:10 2007
@@ -101,7 +101,7 @@
color = None
if color is not None:
yield (msgstruct.CMSG_ADD_LINK, word,
- statusbartext, color)
+ statusbartext, color[0], color[1], color[2])
else:
yield (msgstruct.CMSG_ADD_LINK, word, statusbartext)
seen[word] = True
Modified: pypy/branch/graphserver-dist/dotviewer/graphserver.py
==============================================================================
--- pypy/branch/graphserver-dist/dotviewer/graphserver.py (original)
+++ pypy/branch/graphserver-dist/dotviewer/graphserver.py Fri Jun 15 10:04:10 2007
@@ -82,6 +82,8 @@
def cmsg_add_link(self, word, *info):
if len(info) == 1:
info = info[0]
+ elif len(info) >= 4:
+ info = (info[0], info[1:4])
self.newlayout.links[word] = info
def cmsg_stop_graph(self, *rest):
@@ -92,6 +94,10 @@
def cmsg_missing_link(self, *rest):
self.setlayout(None)
+ def cmsg_say(self, errmsg, *rest):
+ from drawgraph import display_async_cmd
+ display_async_cmd(say=errmsg)
+
MESSAGES = {
msgstruct.CMSG_START_GRAPH: cmsg_start_graph,
msgstruct.CMSG_ADD_NODE: cmsg_add_node,
@@ -99,6 +105,7 @@
msgstruct.CMSG_ADD_LINK: cmsg_add_link,
msgstruct.CMSG_STOP_GRAPH: cmsg_stop_graph,
msgstruct.CMSG_MISSING_LINK:cmsg_missing_link,
+ msgstruct.CMSG_SAY: cmsg_say,
}
Modified: pypy/branch/graphserver-dist/dotviewer/msgstruct.py
==============================================================================
--- pypy/branch/graphserver-dist/dotviewer/msgstruct.py (original)
+++ pypy/branch/graphserver-dist/dotviewer/msgstruct.py Fri Jun 15 10:04:10 2007
@@ -10,6 +10,7 @@
CMSG_ADD_LINK = 'l'
CMSG_STOP_GRAPH = ']'
CMSG_MISSING_LINK= 'm'
+CMSG_SAY = 's'
MSG_OK = 'O'
MSG_ERROR = 'E'
@@ -23,6 +24,7 @@
def message(tp, *values):
+ #print >> sys.stderr, tp, values
typecodes = ['']
for v in values:
if type(v) is str:
Modified: pypy/branch/graphserver-dist/dotviewer/test/test_interactive.py
==============================================================================
--- pypy/branch/graphserver-dist/dotviewer/test/test_interactive.py (original)
+++ pypy/branch/graphserver-dist/dotviewer/test/test_interactive.py Fri Jun 15 10:04:10 2007
@@ -135,3 +135,15 @@
del os.environ['GRAPHSERVER']
finally:
os.kill(pid, signal.SIGTERM)
+
+def test_colors():
+ from dotviewer import graphpage, graphclient
+ class MyPage(graphpage.DotFileGraphPage):
+ def compute(self, dotfile):
+ super(MyPage, self).compute(dotfile)
+ self.links = {'v2721': 'Hello world',
+ 'v2720': ('Something green', (0, 192, 0)),
+ }
+ dotfile = udir.join('graph1.dot')
+ page = MyPage(str(dotfile))
+ graphclient.display_page(page)
More information about the pypy-svn
mailing list