diff options
author | Lars Wirzenius <liw@liw.fi> | 2011-01-30 19:22:38 +0000 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2011-01-30 19:22:38 +0000 |
commit | 6f813f2cdeea3a46175d0a3728a9cf3590f22802 (patch) | |
tree | e44dd021985eb76a051fa3e5ca3109daf390f2c3 | |
parent | ebf5abb9285ae04f18466f22f03d3e074cff309e (diff) | |
parent | 86c254a187349ce85fdefbad4a2aeb10c41acda3 (diff) | |
download | python-ttystatus-6f813f2cdeea3a46175d0a3728a9cf3590f22802.tar.gz |
Merge changes to write to /dev/tty by default.
-rw-r--r-- | ttystatus/messager.py | 22 | ||||
-rw-r--r-- | ttystatus/messager_tests.py | 12 | ||||
-rw-r--r-- | ttystatus/status.py | 9 | ||||
-rw-r--r-- | ttystatus/status_tests.py | 22 |
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) + |