diff options
author | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2008-09-04 07:31:21 (GMT) |
---|---|---|
committer | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2008-09-04 07:31:21 (GMT) |
commit | 65d66e100649e28637616d34a54ba528fe1a4100 (patch) | |
tree | 6efdae571f881c03dc9bf8959acafb6971d0fad4 /Lib | |
parent | a0b7444f68ae5478f5553dcddea7ff44f283b25b (diff) | |
download | cpython-65d66e100649e28637616d34a54ba528fe1a4100.zip cpython-65d66e100649e28637616d34a54ba528fe1a4100.tar.gz cpython-65d66e100649e28637616d34a54ba528fe1a4100.tar.bz2 |
Issue #3772: Fixed regression problem in StreamHandler.emit().
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/logging/__init__.py | 2 | ||||
-rw-r--r-- | Lib/test/test_logging.py | 28 |
2 files changed, 28 insertions, 2 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index 9026ef3..7b790d2 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -757,7 +757,7 @@ class StreamHandler(Handler): self.stream.write(fs % msg) else: try: - if hasattr(self.stream, 'encoding'): + if getattr(self.stream, 'encoding', None) is not None: self.stream.write(fs % msg.encode(self.stream.encoding)) else: self.stream.write(fs % msg) diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 6ed8ca2..5d2b5fd 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -859,6 +859,31 @@ class MemoryTest(BaseTest): ('foo', 'DEBUG', '3'), ]) +class EncodingTest(BaseTest): + def test_encoding_plain_file(self): + # In Python 2.x, a plain file object is treated as having no encoding. + log = logging.getLogger("test") + fn = tempfile.mktemp(".log") + # the non-ascii data we write to the log. + data = "foo\x80" + try: + handler = logging.FileHandler(fn) + log.addHandler(handler) + try: + # write non-ascii data to the log. + log.warning(data) + finally: + log.removeHandler(handler) + handler.close() + # check we wrote exactly those bytes, ignoring trailing \n etc + f = open(fn) + try: + self.failUnlessEqual(f.read().rstrip(), data) + finally: + f.close() + finally: + if os.path.isfile(fn): + os.remove(fn) # Set the locale to the platform-dependent default. I have no idea # why the test does this, but in any case we save the current locale @@ -867,7 +892,8 @@ class MemoryTest(BaseTest): def test_main(): run_unittest(BuiltinLevelsTest, BasicFilterTest, CustomLevelsAndFiltersTest, MemoryHandlerTest, - ConfigFileTest, SocketHandlerTest, MemoryTest) + ConfigFileTest, SocketHandlerTest, MemoryTest, + EncodingTest) if __name__ == "__main__": test_main() |