Fix two issues with non-ASCII characters being written to byte streams.

This commit is contained in:
Georg Brandl 2008-12-15 11:35:27 +01:00
parent 7debd67c23
commit 9e9766a41a
3 changed files with 19 additions and 5 deletions

View File

@ -1,6 +1,11 @@
Release 0.5.1 (in development) Release 0.5.1 (in development)
============================== ==============================
* Don't crash on failing doctests with non-ASCII characters.
* Don't crash on writing status messages and warnings containing
unencodable characters.
* Warn if a doctest extension block doesn't contain any code. * Warn if a doctest extension block doesn't contain any code.
* Fix the handling of ``:param:`` and ``:type:`` doc fields when * Fix the handling of ``:param:`` and ``:type:`` doc fields when

View File

@ -144,13 +144,20 @@ class Sphinx(object):
def warn(self, message): def warn(self, message):
self._warncount += 1 self._warncount += 1
self._warning.write('WARNING: %s\n' % message) try:
self._warning.write('WARNING: %s\n' % message)
except UnicodeEncodeError:
encoding = getattr(self._warning, 'encoding', 'ascii')
self._warning.write(('WARNING: %s\n' % message).encode(encoding, 'replace'))
def info(self, message='', nonl=False): def info(self, message='', nonl=False):
if nonl: try:
self._status.write(message) self._status.write(message)
else: except UnicodeEncodeError:
self._status.write(message + '\n') encoding = getattr(self._status, 'encoding', 'ascii')
self._status.write(message.encode(encoding, 'replace'))
if not nonl:
self._status.write('\n')
self._status.flush() self._status.flush()
# general extensibility interface # general extensibility interface

View File

@ -13,6 +13,7 @@
import re import re
import sys import sys
import time import time
import codecs
import StringIO import StringIO
from os import path from os import path
# circumvent relative import # circumvent relative import
@ -169,7 +170,8 @@ class DocTestBuilder(Builder):
date = time.strftime('%Y-%m-%d %H:%M:%S') date = time.strftime('%Y-%m-%d %H:%M:%S')
self.outfile = file(path.join(self.outdir, 'output.txt'), 'w') self.outfile = codecs.open(path.join(self.outdir, 'output.txt'),
'w', encoding='utf-8')
self.outfile.write('''\ self.outfile.write('''\
Results of doctest builder run on %s Results of doctest builder run on %s
==================================%s ==================================%s