From: <mi...@us...> - 2012-05-11 21:03:13
|
Revision: 7433 http://docutils.svn.sourceforge.net/docutils/?rev=7433&view=rev Author: milde Date: 2012-05-11 21:03:07 +0000 (Fri, 11 May 2012) Log Message: ----------- Fix [ 3525847 ] UnicodeEncodeError with locale == C and 8-bit char in path argument of `include` directive. Modified Paths: -------------- trunk/docutils/HISTORY.txt trunk/docutils/docutils/parsers/rst/directives/misc.py trunk/docutils/test/alltests.py trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py Modified: trunk/docutils/HISTORY.txt =================================================================== --- trunk/docutils/HISTORY.txt 2012-05-09 15:16:51 UTC (rev 7432) +++ trunk/docutils/HISTORY.txt 2012-05-11 21:03:07 UTC (rev 7433) @@ -16,7 +16,11 @@ Changes Since 0.9 ================= +* docutils/parsers/rst/directives/misc.py + - Fix [ 3525847 ] UnicodeEncodeError with locale == C and 8-bit char + in path argument of `include` directive. + Release 0.9 (2012-05-02) ======================== Modified: trunk/docutils/docutils/parsers/rst/directives/misc.py =================================================================== --- trunk/docutils/docutils/parsers/rst/directives/misc.py 2012-05-09 15:16:51 UTC (rev 7432) +++ trunk/docutils/docutils/parsers/rst/directives/misc.py 2012-05-11 21:03:07 UTC (rev 7433) @@ -73,6 +73,11 @@ error_handler=(self.state.document.settings.\ input_encoding_error_handler), handle_io_errors=None) + except UnicodeEncodeError, error: + raise self.severe(u'Problems with "%s" directive path:\n' + 'Cannot encode input file path "%s" ' + '(wrong locale?).' % + (self.name, SafeString(path))) except IOError, error: raise self.severe(u'Problems with "%s" directive path:\n%s.' % (self.name, ErrorString(error))) Modified: trunk/docutils/test/alltests.py =================================================================== --- trunk/docutils/test/alltests.py 2012-05-09 15:16:51 UTC (rev 7432) +++ trunk/docutils/test/alltests.py 2012-05-11 21:03:07 UTC (rev 7433) @@ -33,8 +33,13 @@ self.encoding = getattr(stream, 'encoding', None) def write(self, string): - self.stream.write(string) - self.file.write(string) + try: + self.stream.write(string) + self.file.write(string) + except UnicodeEncodeError: # Py3k writing to "ascii" stream/file + string = string.encode('raw_unicode_escape').decode('ascii') + self.stream.write(string) + self.file.write(string) def flush(self): self.stream.flush() Modified: trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py =================================================================== --- trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py 2012-05-09 15:16:51 UTC (rev 7432) +++ trunk/docutils/test/test_parsers/test_rst/test_directives/test_include.py 2012-05-11 21:03:07 UTC (rev 7433) @@ -50,6 +50,18 @@ nonexistent_rel = DocutilsTestSupport.utils.relative_path( os.path.join(DocutilsTestSupport.testroot, 'dummy'), nonexistent) +# Different error for path with 8bit chars with locale == C or None: +try: + open(u'\u043c\u0438\u0440.txt') +except UnicodeEncodeError: + errstr_8bit_path = u"""\ +Cannot encode input file path "\u043c\u0438\u0440.txt" (wrong locale?).\ +""" +except: + errstr_8bit_path = u"""\ +InputError: [Errno 2] No such file or directory: '\u043c\u0438\u0440.txt'.\ +""" + totest = {} totest['include'] = [ @@ -414,10 +426,10 @@ <system_message level="4" line="3" source="test data" type="SEVERE"> <paragraph> Problems with "include" directive path: - InputError: [Errno 2] No such file or directory: '\u043c\u0438\u0440.txt'. + %s <literal_block xml:space="preserve"> .. include:: \u043c\u0438\u0440.txt -"""], +""" % errstr_8bit_path], ["""\ Testing errors in included file: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |