[py-svn] r57331 - py/trunk/py/misc
hpk at codespeak.net
hpk at codespeak.net
Sat Aug 16 19:51:21 CEST 2008
Author: hpk
Date: Sat Aug 16 19:51:21 2008
New Revision: 57331
Modified:
py/trunk/py/misc/terminal_helper.py
Log:
port 57330 (which accidentally went to the branch)
Modified: py/trunk/py/misc/terminal_helper.py
==============================================================================
--- py/trunk/py/misc/terminal_helper.py (original)
+++ py/trunk/py/misc/terminal_helper.py Sat Aug 16 19:51:21 2008
@@ -1,132 +1,14 @@
"""
-Helper functions for writing to terminals and files.
+(DEPRECATED) use py.io.TerminalWriter
"""
-
import sys, os
import py
-def get_terminal_width():
- try:
- import termios,fcntl,struct
- call = fcntl.ioctl(0,termios.TIOCGWINSZ,"\000"*8)
- height,width = struct.unpack( "hhhh", call ) [:2]
- terminal_width = width
- except (SystemExit, KeyboardInterrupt), e:
- raise
- except:
- # FALLBACK
- terminal_width = int(os.environ.get('COLUMNS', 80))-1
- return terminal_width
-
-terminal_width = get_terminal_width()
-
-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():
- if not isinstance(esc, tuple):
- esc = (esc,)
- text = (''.join(['\x1b[%sm' % cod for cod in esc]) +
- text +
- '\x1b[0m') # ANSI color code "reset"
- if newline:
- text += '\n'
- file.write(text)
- if flush:
- file.flush()
-
-class Out(object):
- tty = False
- def __init__(self, file):
- self.file = py.io.dupfile(file)
- self.fullwidth = get_terminal_width()
-
- def sep(self, sepchar, title=None, fullwidth=None):
- if not fullwidth:
- fullwidth = self.fullwidth
- # the goal is to have the line be as long as possible
- # under the condition that len(line) <= fullwidth
- if title is not None:
- # we want 2 + 2*len(fill) + len(title) <= fullwidth
- # i.e. 2 + 2*len(sepchar)*N + len(title) <= fullwidth
- # 2*len(sepchar)*N <= fullwidth - len(title) - 2
- # N <= (fullwidth - len(title) - 2) // (2*len(sepchar))
- N = (fullwidth - len(title) - 2) // (2*len(sepchar))
- fill = sepchar * N
- line = "%s %s %s" % (fill, title, fill)
- else:
- # we want len(sepchar)*N <= fullwidth
- # i.e. N <= fullwidth // len(sepchar)
- line = sepchar * (fullwidth // len(sepchar))
- # in some situations there is room for an extra sepchar at the right,
- # in particular if we consider that with a sepchar like "_ " the
- # trailing space is not important at the end of the line
- if len(line) + len(sepchar.rstrip()) <= fullwidth:
- line += sepchar.rstrip()
- self.line(line)
-
-class TerminalOut(Out):
- tty = True
- def __init__(self, file):
- super(TerminalOut, self).__init__(file)
-
- def sep(self, sepchar, title=None):
- super(TerminalOut, self).sep(sepchar, title,
- self.terminal_width)
-
- def write(self, s):
- self.file.write(str(s))
- self.file.flush()
-
- def line(self, s=''):
- if s:
- self.file.write(s + '\n')
- else:
- self.file.write('\n')
- self.file.flush()
-
- def xxxrewrite(self, s=''):
- #self.write('\x1b[u%s' % s) - this escape sequence does
- # strange things, or nothing at all, on various terminals.
- # XXX what is it supposed to do in the first place??
- self.write(s)
-
-class FileOut(Out):
- def write(self, s):
- self.file.write(str(s))
- self.file.flush()
-
- def line(self, s=''):
- if s:
- self.file.write(str(s) + '\n')
- else:
- self.file.write('\n')
- self.file.flush()
-
- def xxxrewrite(self, s=''):
- self.write(s)
-
-def getout(file):
- # XXX investigate further into terminal output, this is not enough
- #
- if file is None:
- file = py.std.sys.stdout
- elif hasattr(file, 'send'):
- file = WriteFile(file.send)
- elif callable(file):
- file = WriteFile(file)
- if hasattr(file, 'isatty') and file.isatty():
- return TerminalOut(file)
- else:
- return FileOut(file)
-
-class WriteFile(object):
- def __init__(self, writemethod):
- self.write = writemethod
- def flush(self):
- return
+py.std.warnings.warn("py.__.misc.terminal_helper is deprecated, use py.io.TerminalWriter",
+ DeprecationWarning, stacklevel=2)
+
+from py.__.io.terminalwriter import get_terminal_width, terminal_width, ansi_print
More information about the pytest-commit
mailing list