[pypy-svn] r17885 - in pypy/dist/pypy: tool translator

pedronis at codespeak.net pedronis at codespeak.net
Mon Sep 26 23:09:27 CEST 2005


Author: pedronis
Date: Mon Sep 26 23:09:24 2005
New Revision: 17885

Modified:
   pypy/dist/pypy/tool/ansi_print.py
   pypy/dist/pypy/translator/translator.py
Log:
tweak ansi_log to suppot the hold behavior on ttys for getflowgraph info

support mapping from keyword to color in ansi_log, now class based -> AnsiLog



Modified: pypy/dist/pypy/tool/ansi_print.py
==============================================================================
--- pypy/dist/pypy/tool/ansi_print.py	(original)
+++ pypy/dist/pypy/tool/ansi_print.py	Mon Sep 26 23:09:24 2005
@@ -4,7 +4,7 @@
 
 import sys
 
-def ansi_print(text, esc, file=None, newline=True):
+def ansi_print(text, esc, file=None, newline=True, flush=False):
     if file is None: file = sys.stderr
     text = text.rstrip()
     if esc and sys.platform != "win32" and file.isatty():
@@ -14,16 +14,44 @@
     if newline:
         text += '\n'
     file.write(text)
+    if flush:
+        file.flush()
 
-def ansi_log(msg): 
-    keywords = list(msg.keywords)
-    if 'bold' in keywords: 
-        keywords.remove('bold')
-        esc = "1"
-    elif 'red' in keywords: 
-        keywords.remove('red')
-        esc = "31"
-    else: 
-        esc = None
-    ansi_print("[%s] %s" %(":".join(keywords), msg.content()), esc)
+
+class AnsiLog:
+
+    def __init__(self, kw_to_color={}, file=None):
+        self.kw_to_color = kw_to_color
+        self.file = file
+
+    def __call__(self, msg):
+        tty = getattr(sys.stderr, 'isatty', lambda: False)()
+        flush = False
+        newline = True
+        keywords = []
+        for kw in msg.keywords:
+            color = self.kw_to_color.get(kw)
+            if color and color not in keywords:
+                keywords.append(color)
+            keywords.append(kw)
+        if 'start' in keywords:
+            if tty:
+                newline = False
+                flush = True
+                keywords.remove('start')
+        elif 'done' in keywords:
+            if tty:
+                print >> sys.stderr
+                return
+        if 'bold' in keywords: 
+            keywords.remove('bold')
+            esc = "1"
+        elif 'red' in keywords: 
+            keywords.remove('red')
+            esc = "31"
+        else: 
+            esc = None
+        ansi_print("[%s] %s" %(":".join(keywords), msg.content()), esc, 
+                   file=self.file, newline=newline, flush=flush)
  
+ansi_log = AnsiLog()

Modified: pypy/dist/pypy/translator/translator.py
==============================================================================
--- pypy/dist/pypy/translator/translator.py	(original)
+++ pypy/dist/pypy/translator/translator.py	Mon Sep 26 23:09:24 2005
@@ -64,7 +64,7 @@
                     func.func_globals.get('__name__', '?'),
                     func.func_code.co_firstlineno,
                     func.__name__)
-                log(descr)
+                log.start(descr)
             assert not self.frozen
             space = FlowObjSpace()
             space.builtins_can_raise_exceptions = self.builtins_can_raise_exceptions



More information about the Pypy-commit mailing list