summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2011-01-30 19:22:38 +0000
committerLars Wirzenius <liw@liw.fi>2011-01-30 19:22:38 +0000
commit6f813f2cdeea3a46175d0a3728a9cf3590f22802 (patch)
treee44dd021985eb76a051fa3e5ca3109daf390f2c3
parentebf5abb9285ae04f18466f22f03d3e074cff309e (diff)
parent86c254a187349ce85fdefbad4a2aeb10c41acda3 (diff)
downloadpython-ttystatus-6f813f2cdeea3a46175d0a3728a9cf3590f22802.tar.gz
Merge changes to write to /dev/tty by default.
-rw-r--r--ttystatus/messager.py22
-rw-r--r--ttystatus/messager_tests.py12
-rw-r--r--ttystatus/status.py9
-rw-r--r--ttystatus/status_tests.py22
4 files changed, 60 insertions, 5 deletions
diff --git a/ttystatus/messager.py b/ttystatus/messager.py
index c322590..ce30e73 100644
--- a/ttystatus/messager.py
+++ b/ttystatus/messager.py
@@ -27,13 +27,17 @@ class Messager(object):
'''Write messages to the terminal.'''
def __init__(self, output=None, period=None):
- self.output = output or sys.stderr
+ self._enabled = True
+ self.output = output or self._open_tty()
self._period = 1.0 if period is None else period
self._last_msg = '' # What did we write last?
self._last_time = 0 # When did we write last?
self._cached_msg = '' # Last message from user, to write() method.
self.set_width(self._get_terminal_width()) # Width of terminal
signal.signal(signal.SIGWINCH, self._sigwinch_handler)
+
+ def _open_tty(self): # pragma: no cover
+ return open('/dev/tty', 'w')
def set_width(self, actual_width):
self.width = actual_width - 1
@@ -72,12 +76,13 @@ class Messager(object):
def _raw_write(self, string):
'''Write raw data if output is terminal.'''
- if self.output.isatty():
+
+ if self._enabled and self.output and self.output.isatty():
try:
self.output.write(string)
- except IOError: # pragma: no cover
- # Ignored on purpose.
self.output.flush()
+ except IOError: # pragma: no cover
+ self._enabled = False
def _overwrite(self, string):
'''Overwrite current message on terminal.'''
@@ -128,3 +133,12 @@ class Messager(object):
'''Finalize output.'''
self._overwrite(self._cached_msg)
self._raw_write('\n')
+
+ def disable(self):
+ '''Disable all output.'''
+ self._enabled = False
+
+ def enable(self):
+ '''Enable output to happen.'''
+ self._enabled = True
+
diff --git a/ttystatus/messager_tests.py b/ttystatus/messager_tests.py
index b57fbaf..1356ae3 100644
--- a/ttystatus/messager_tests.py
+++ b/ttystatus/messager_tests.py
@@ -104,3 +104,15 @@ class MessagerTests(unittest.TestCase):
self.messager.set_width(4)
self.messager.write('foobar')
self.assertEqual(self.output.getvalue(), 'foo')
+
+ def test_disables_output(self):
+ self.messager.disable()
+ self.messager.write('foo')
+ self.assertEqual(self.output.getvalue(), '')
+
+ def test_enables_output(self):
+ self.messager.disable()
+ self.messager.enable()
+ self.messager.write('foo')
+ self.assertEqual(self.output.getvalue(), 'foo')
+
diff --git a/ttystatus/status.py b/ttystatus/status.py
index 6d42ba7..7725e83 100644
--- a/ttystatus/status.py
+++ b/ttystatus/status.py
@@ -85,3 +85,12 @@ class TerminalStatus(object):
def finish(self):
'''Finish status display.'''
self._m.finish()
+
+ def disable(self):
+ '''Disable all output.'''
+ self._m.disable()
+
+ def enable(self):
+ '''Enable output if it has been disabled.'''
+ self._m.enable()
+
diff --git a/ttystatus/status_tests.py b/ttystatus/status_tests.py
index 36716fd..b2b1b04 100644
--- a/ttystatus/status_tests.py
+++ b/ttystatus/status_tests.py
@@ -14,6 +14,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+import StringIO
import unittest
import ttystatus
@@ -22,6 +23,10 @@ import ttystatus
class DummyMessager(object):
width = 80
+
+ def __init__(self):
+ self.written = StringIO.StringIO()
+ self.enabled = True
def clear(self):
pass
@@ -30,13 +35,19 @@ class DummyMessager(object):
return True
def write(self, string):
- pass
+ self.written.write(string)
def notify(self, string):
pass
def finish(self):
pass
+
+ def enable(self):
+ self.enabled = True
+
+ def disable(self):
+ self.enabled = False
class TerminalStatusTests(unittest.TestCase):
@@ -109,3 +120,12 @@ class TerminalStatusTests(unittest.TestCase):
def test_has_finish_method(self):
self.assertEqual(self.ts.finish(), None)
+ def test_disable_calls_messager_disable(self):
+ self.ts.disable()
+ self.assertFalse(self.ts._m.enabled)
+
+ def test_enable_calls_messager_enable(self):
+ self.ts.disable()
+ self.ts.enable()
+ self.assert_(self.ts._m.enabled)
+