From 6e603ebf38f00589fcc1bf38584824e80f4e4397 Mon Sep 17 00:00:00 2001 From: Toshio Kuratomi Date: Jul 21 2012 03:08:02 +0000 Subject: Fix for https://bugzilla.redhat.com/show_bug.cgi?id=786867 --- diff --git a/docutils-0.8.1-unicode.patch b/docutils-0.8.1-unicode.patch new file mode 100644 index 0000000..7b311e1 --- /dev/null +++ b/docutils-0.8.1-unicode.patch @@ -0,0 +1,30 @@ +Index: docutils-0.8.1/docutils/parsers/rst/directives/misc.py +=================================================================== +--- docutils-0.8.1.orig/docutils/parsers/rst/directives/misc.py ++++ docutils-0.8.1/docutils/parsers/rst/directives/misc.py +@@ -10,6 +10,7 @@ import sys + import os.path + import re + import time ++import locale + from docutils import io, nodes, statemachine, utils + from docutils.error_reporting import SafeString, ErrorString + from docutils.parsers.rst import Directive, convert_directive_function +@@ -426,6 +427,17 @@ class Date(Directive): + 'a substitution definition.' % self.name) + format = '\n'.join(self.content) or '%Y-%m-%d' + text = time.strftime(format) ++ if sys.version_info< (3, 0): ++ try: ++ text = unicode(text, locale.getpreferredencoding()) ++ except UnicodeError: ++ try: ++ text = unicode(text, 'utf-8') ++ except UnicodeError: ++ # Fallback to something that can decode all bytes to ++ # something. Alternative fallback would be to decode ++ # with errors='replace' ++ text = unicode(text, 'latin-1') + return [nodes.Text(text)] + + diff --git a/docutils-backport-0.9.1-py2.7.3-prettyprint-test-fix.patch b/docutils-backport-0.9.1-py2.7.3-prettyprint-test-fix.patch new file mode 100644 index 0000000..1632c74 --- /dev/null +++ b/docutils-backport-0.9.1-py2.7.3-prettyprint-test-fix.patch @@ -0,0 +1,184 @@ +--- docutils/test/test_writers/test_docutils_xml.py 2009/04/01 20:00:21 5889 ++++ docutils/test/test_writers/test_docutils_xml.py 2011/12/20 09:36:10 7266 +@@ -10,24 +10,44 @@ + + from __init__ import DocutilsTestSupport + ++import sys + import docutils + import docutils.core +-from docutils._compat import b + ++# sample strings: + +-class DocutilsXMLTestCase(DocutilsTestSupport.StandardTestCase): +- +- input = b("""\ ++source = u"""\ + Test + + ---------- + +-Test. \xc3\xa4\xc3\xb6\xc3\xbc\xe2\x82\xac""") +- xmldecl = b('\n') +- doctypedecl = b('\n') +- generatedby = b('\n' % docutils.__version__) +- bodynormal = b('TestTest. \xe4\xf6\xfc€') +- bodynewlines = b("""\ ++Test. \xe4\xf6\xfc\u20ac""" ++ ++xmldecl = u""" ++""" ++ ++doctypedecl = u"""\ ++ ++""" ++ ++generatedby = u'\n' % docutils.__version__ ++ ++bodynormal = u"""\ ++Test\ ++Test. \xe4\xf6\xfc€\ ++""" ++ ++bodynewlines = u"""\ ++ ++Test ++ ++Test. \xe4\xf6\xfc€ ++ ++""" ++ ++bodynewlines_old = u"""\ + + + Test +@@ -37,8 +57,17 @@ + Test. \xe4\xf6\xfc€ + + +-""") +- bodyindents = b("""\ ++""" ++ ++bodyindents = u"""\ ++ ++ Test ++ ++ Test. \xe4\xf6\xfc€ ++ ++""" ++ ++bodyindents_old = u"""\ + + + Test +@@ -48,36 +77,78 @@ + Test. \xe4\xf6\xfc€ + + +-""") ++""" ++ ++# New formatting introduced in versions 2.7.3 and 3.2.3 on 2011-11-18 ++# to fix http://bugs.python.org/issue4147 ++# (Some distributions ship also earlier versions with this patch.) ++if (sys.version_info < (2, 7, 3) or ++ sys.version_info[0] == 3 and sys.version_info < (3, 2, 3)): ++ whitespace_fix = False ++else: ++ whitespace_fix = True ++ ++def publish_xml(settings): ++ return docutils.core.publish_string(source=source.encode('utf8'), ++ reader_name='standalone', ++ writer_name='docutils_xml', ++ settings_overrides=settings) ++ ++ ++class DocutilsXMLTestCase(DocutilsTestSupport.StandardTestCase): ++ ++ settings = {'input_encoding': 'utf8', ++ 'output_encoding': 'iso-8859-1', ++ '_disable_config': 1} + + def test_publish(self): +- settings = {'input_encoding': 'utf8', +- 'output_encoding': 'iso-8859-1', +- '_disable_config': 1} +- for settings['newlines'] in 0, 1: +- for settings['indents'] in 0, 1: +- for settings['xml_declaration'] in 0, 1: +- for settings['doctype_declaration'] in 0, 1: +- +- expected = b('') +- if settings['xml_declaration']: +- expected += self.xmldecl +- if settings['doctype_declaration']: +- expected += self.doctypedecl +- expected += self.generatedby +- if settings['indents']: +- expected += self.bodyindents +- elif settings['newlines']: +- expected += self.bodynewlines +- else: +- expected += self.bodynormal +- +- self.assertEqual(docutils.core.publish_string +- (source=self.input, +- reader_name='standalone', +- writer_name='docutils_xml', +- settings_overrides=settings), +- expected) ++ for self.settings['xml_declaration'] in True, False: ++ for self.settings['doctype_declaration'] in True, False: ++ expected = u'' ++ if self.settings['xml_declaration']: ++ expected += xmldecl ++ if self.settings['doctype_declaration']: ++ expected += doctypedecl ++ expected += generatedby ++ expected += bodynormal ++ result = publish_xml(self.settings) ++ self.assertEqual(result, expected.encode('latin1')) ++ ++ def test_publish_indents(self): ++ self.settings['indents'] = True ++ self.settings['newlines'] = False ++ self.settings['xml_declaration'] = False ++ self.settings['doctype_declaration'] = False ++ result = publish_xml(self.settings) ++ ++ # New formatting introduced in versions 2.7.3 and 3.2.3 ++ if whitespace_fix: ++ expected = (generatedby + bodyindents).encode('latin1') ++ else: ++ expected = (generatedby + bodyindents_old).encode('latin1') ++ # Some distributions patch also earlier versions: ++ if (result != expected and not whitespace_fix): ++ expected = (generatedby + bodyindents).encode('latin1') ++ ++ self.assertEqual(result, expected) ++ ++ def test_publish_newlines(self): ++ self.settings['newlines'] = True ++ self.settings['indents'] = False ++ self.settings['xml_declaration'] = False ++ self.settings['doctype_declaration'] = False ++ result = publish_xml(self.settings) ++ ++ # New formatting introduced in versions 2.7.3 and 3.2.3 ++ if whitespace_fix: ++ expected = (generatedby + bodynewlines).encode('latin1') ++ else: ++ expected = (generatedby + bodynewlines_old).encode('latin1') ++ # Some distributions patch also earlier versions: ++ if (result != expected and not whitespace_fix): ++ expected = (generatedby + bodynewlines).encode('latin1') ++ ++ self.assertEqual(result, expected) + + + if __name__ == '__main__': diff --git a/python-docutils.spec b/python-docutils.spec index 7ff7990..9a70c38 100644 --- a/python-docutils.spec +++ b/python-docutils.spec @@ -11,7 +11,7 @@ Name: python-%{srcname} Version: 0.8.1 -Release: 2%{?dist} +Release: 3%{?dist} Summary: System for processing plaintext documentation Group: Development/Languages @@ -29,6 +29,11 @@ Source0: http://downloads.sourceforge.net/docutils/%{srcname}-%{version}. Patch0: docutils-missing-import.patch # Submitted upstream Patch1: docutils-unicode-traceback.patch +# Another patch -- submitted against 0.9.1 +Patch2: docutils-0.8.1-unicode.patch +# Backport 0.9.1 fix for unittest w/ py-2.7.3 +Patch3: docutils-backport-0.9.1-py2.7.3-prettyprint-test-fix.patch + BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch @@ -80,6 +85,8 @@ This package contains the module, ported to run under python3. %patch0 -p0 -b .exc %patch1 -p1 -b .enc +%patch2 -p1 -b .unic +%patch3 -p1 -b py2.7.3 # Remove shebang from library files for file in docutils/_string_template_compat.py docutils/math/{__init__.py,latex2mathml.py}; do @@ -181,6 +188,9 @@ rm -rf %{buildroot} %{python3_sitelib}/* %changelog +* Fri Jul 20 2012 Toshio Kuratomi - 0.8.1-3 +- Fix for https://bugzilla.redhat.com/show_bug.cgi?id=786867 + * Mon Jan 30 2012 Toshio Kuratomi - 0.8.1-2 - Fix a unicode traceback https://bugzilla.redhat.com/show_bug.cgi?id=785622