From 5cb86beae23b23790a2e9fe652ad407536f38694 Mon Sep 17 00:00:00 2001 From: Toshio Kuratomi Date: Sat, 25 Aug 2012 07:59:25 -0700 Subject: [PATCH] Further fix of places in the code that use__import__ --- docutils-__import__-fixes2.patch | 66 +++++++ docutils-__import__-tests.patch | 300 +++++++++++++++++++++++++++++++ python-docutils.spec | 14 +- 3 files changed, 375 insertions(+), 5 deletions(-) create mode 100644 docutils-__import__-fixes2.patch create mode 100644 docutils-__import__-tests.patch diff --git a/docutils-__import__-fixes2.patch b/docutils-__import__-fixes2.patch new file mode 100644 index 0000000..91505ea --- /dev/null +++ b/docutils-__import__-fixes2.patch @@ -0,0 +1,66 @@ +Index: docutils/readers/__init__.py +=================================================================== +--- docutils/readers/__init__.py.orig ++++ docutils/readers/__init__.py +@@ -106,5 +106,8 @@ def get_reader_class(reader_name): + reader_name = reader_name.lower() + if reader_name in _reader_aliases: + reader_name = _reader_aliases[reader_name] +- module = __import__(reader_name, globals(), locals(), level=1) ++ try: ++ module = __import__(reader_name, globals(), locals(), level=0) ++ except ImportError: ++ module = __import__(reader_name, globals(), locals(), level=1) + return module.Reader +Index: docutils/parsers/__init__.py +=================================================================== +--- docutils/parsers/__init__.py.orig ++++ docutils/parsers/__init__.py +@@ -46,5 +46,8 @@ def get_parser_class(parser_name): + parser_name = parser_name.lower() + if parser_name in _parser_aliases: + parser_name = _parser_aliases[parser_name] +- module = __import__(parser_name, globals(), locals(), level=1) ++ try: ++ module = __import__(parser_name, globals(), locals(), level=0) ++ except ImportError: ++ module = __import__(parser_name, globals(), locals(), level=1) + return module.Parser +Index: docutils/languages/__init__.py +=================================================================== +--- docutils/languages/__init__.py.orig ++++ docutils/languages/__init__.py +@@ -30,9 +30,12 @@ def get_language(language_code, reporter + if tag in _languages: + return _languages[tag] + try: +- module = __import__(tag, globals(), locals(), level=1) ++ module = __import__(tag, globals(), locals(), level=0) + except ImportError: +- continue ++ try: ++ module = __import__(tag, globals(), locals(), level=1) ++ except ImportError: ++ continue + _languages[tag] = module + return module + if reporter is not None: +Index: docutils/parsers/rst/languages/__init__.py +=================================================================== +--- docutils/parsers/rst/languages/__init__.py.orig ++++ docutils/parsers/rst/languages/__init__.py +@@ -25,9 +25,12 @@ def get_language(language_code): + if tag in _languages: + return _languages[tag] + try: +- module = __import__(tag, globals(), locals(), level=1) ++ module = __import__(tag, globals(), locals(), level=0) + except ImportError: +- continue ++ try: ++ module = __import__(tag, globals(), locals(), level=1) ++ except ImportError: ++ continue + _languages[tag] = module + return module + return None diff --git a/docutils-__import__-tests.patch b/docutils-__import__-tests.patch new file mode 100644 index 0000000..8262be6 --- /dev/null +++ b/docutils-__import__-tests.patch @@ -0,0 +1,300 @@ +Index: test/local-reader.py +=================================================================== +--- /dev/null ++++ test/local-reader.py +@@ -0,0 +1,20 @@ ++# -*- coding: utf-8 -*- ++# $Id: local-writer.py 7500 2012-08-22 19:38:14Z grubert $ ++# Authors: Engelbert Gruber ++# Toshio Kuratomi ++# Copyright: This module is put into the public domain. ++ ++""" ++mini-reader to test get_reader_class with local reader ++""" ++ ++import docutils ++from docutils import readers ++ ++class Reader(readers.Reader): ++ ++ supported = ('dummy',) ++ """Formats this reader supports.""" ++ ++ document = None ++ """A document tree.""" +Index: test/test_readers/test_get_reader_class.py +=================================================================== +--- /dev/null ++++ test/test_readers/test_get_reader_class.py +@@ -0,0 +1,32 @@ ++#! /usr/bin/env python ++ ++# $Id: test_get_writer_class.py 7500 2012-08-22 19:38:14Z grubert $ ++# Author: grubert abadger1999 ++# Maintainer: docutils-develop@lists.sourceforge.net ++# Copyright: This module has been placed in the public domain. ++ ++""" ++test get_reader_class ++""" ++ ++from __init__ import DocutilsTestSupport ++from docutils.readers import get_reader_class ++ ++class GetReaderClassTestCase(DocutilsTestSupport.StandardTestCase): ++ ++ def test_registered_reader(self): ++ rdr = get_reader_class('pep') ++ # raises ImportError on failure ++ ++ def test_bogus_reader(self): ++ self.assertRaises(ImportError, ++ get_reader_class, 'nope') ++ ++ def test_local_reader(self): ++ # requires local-reader.py in test directory (testroot) ++ wr = get_reader_class('local-reader') ++ ++if __name__ == '__main__': ++ import unittest ++ unittest.main() ++ +Index: test/local-parser.py +=================================================================== +--- /dev/null ++++ test/local-parser.py +@@ -0,0 +1,21 @@ ++# -*- coding: utf-8 -*- ++# $Id: local-writer.py 7500 2012-08-22 19:38:14Z grubert $ ++# Authors: Engelbert Gruber ++# Toshio Kuratomi ++# Copyright: This module is put into the public domain. ++ ++""" ++mini-reader to test get_reader_class with local reader ++""" ++ ++from docutils import parsers ++ ++class Parser(parsers.Parser): ++ ++ supported = ('dummy',) ++ """Formats this reader supports.""" ++ ++ def parser(self, inputstring, document): ++ self.setup_parse(inputstring, document) ++ document = dict() ++ self.finish_parse() +Index: test/test_parsers/test_get_parser_class.py +=================================================================== +--- /dev/null ++++ test/test_parsers/test_get_parser_class.py +@@ -0,0 +1,32 @@ ++#! /usr/bin/env python ++ ++# $Id: test_get_writer_class.py 7500 2012-08-22 19:38:14Z grubert $ ++# Author: grubert abadger1999 ++# Maintainer: docutils-develop@lists.sourceforge.net ++# Copyright: This module has been placed in the public domain. ++ ++""" ++test get_parser_class ++""" ++ ++from __init__ import DocutilsTestSupport ++from docutils.parsers import get_parser_class ++ ++class GetParserClassTestCase(DocutilsTestSupport.StandardTestCase): ++ ++ def test_registered_parser(self): ++ rdr = get_parser_class('rst') ++ # raises ImportError on failure ++ ++ def test_bogus_parser(self): ++ self.assertRaises(ImportError, ++ get_parser_class, 'nope') ++ ++ def test_local_parser(self): ++ # requires local-parser.py in test directory (testroot) ++ wr = get_parser_class('local-parser') ++ ++if __name__ == '__main__': ++ import unittest ++ unittest.main() ++ +Index: test/test_language.py +=================================================================== +--- test/test_language.py.orig ++++ test/test_language.py +@@ -53,6 +53,11 @@ class LanguageTestSuite(DocutilsTestSupp + # test language tag normalization: + self.languages += ['en_gb', 'en_US', 'en-CA', 'de-DE', 'de-AT-1901', + 'pt-BR', 'pt-foo-BR'] ++ # test that locally created language files are also loaded. ++ # requires local_dummy_lang.py in test directory (testroot) ++ # The local_dummy_lang.py contains all the fields from both ++ # the docutils language tags and the parser.rst language tags ++ self.languages += ['local_dummy_lang'] + + def generateTests(self): + for language in self.languages: +Index: test/local_dummy_lang.py +=================================================================== +--- /dev/null ++++ test/local_dummy_lang.py +@@ -0,0 +1,154 @@ ++# $Id: en.py 4564 2006-05-21 20:44:42Z wiemann $ ++# Author: David Goodger ++# Copyright: This module has been placed in the public domain. ++ ++# New language mappings are welcome. Before doing a new translation, please ++# read . Two files must be ++# translated for each language: one in docutils/languages, the other in ++# docutils/parsers/rst/languages. ++ ++""" ++English-language mappings for language-dependent features of Docutils. ++""" ++ ++__docformat__ = 'reStructuredText' ++ ++labels = { ++ # fixed: language-dependent ++ 'author': 'dummy Author', ++ 'authors': 'dummy Authors', ++ 'organization': 'dummy Organization', ++ 'address': 'dummy Address', ++ 'contact': 'dummy Contact', ++ 'version': 'dummy Version', ++ 'revision': 'dummy Revision', ++ 'status': 'dummy Status', ++ 'date': 'dummy Date', ++ 'copyright': 'dummy Copyright', ++ 'dedication': 'dummy Dedication', ++ 'abstract': 'dummy Abstract', ++ 'attention': 'dummy Attention!', ++ 'caution': 'dummy Caution!', ++ 'danger': 'dummy !DANGER!', ++ 'error': 'dummy Error', ++ 'hint': 'dummy Hint', ++ 'important': 'dummy Important', ++ 'note': 'dummy Note', ++ 'tip': 'dummy Tip', ++ 'warning': 'dummy Warning', ++ 'contents': 'dummy Contents'} ++"""Mapping of node class name to label text.""" ++ ++bibliographic_fields = { ++ # language-dependent: fixed ++ 'dummy author': 'author', ++ 'dummy authors': 'authors', ++ 'dummy organization': 'organization', ++ 'dummy address': 'address', ++ 'dummy contact': 'contact', ++ 'dummy version': 'version', ++ 'dummy revision': 'revision', ++ 'dummy status': 'status', ++ 'dummy date': 'date', ++ 'dummy copyright': 'copyright', ++ 'dummy dedication': 'dedication', ++ 'dummy abstract': 'abstract'} ++"""English (lowcased) to canonical name mapping for bibliographic fields.""" ++ ++author_separators = [';', ','] ++"""List of separator strings for the 'Authors' bibliographic field. Tried in ++order.""" ++ ++directives = { ++ # language-dependent: fixed ++ 'dummy attention': 'attention', ++ 'dummy caution': 'caution', ++ 'dummy code': 'code', ++ 'dummy code-block': 'code', ++ 'dummy sourcecode': 'code', ++ 'dummy danger': 'danger', ++ 'dummy error': 'error', ++ 'dummy hint': 'hint', ++ 'dummy important': 'important', ++ 'dummy note': 'note', ++ 'dummy tip': 'tip', ++ 'dummy warning': 'warning', ++ 'dummy admonition': 'admonition', ++ 'dummy sidebar': 'sidebar', ++ 'dummy topic': 'topic', ++ 'dummy line-block': 'line-block', ++ 'dummy parsed-literal': 'parsed-literal', ++ 'dummy rubric': 'rubric', ++ 'dummy epigraph': 'epigraph', ++ 'dummy highlights': 'highlights', ++ 'dummy pull-quote': 'pull-quote', ++ 'dummy compound': 'compound', ++ 'dummy container': 'container', ++ #'dummy questions': 'questions', ++ 'dummy table': 'table', ++ 'dummy csv-table': 'csv-table', ++ 'dummy list-table': 'list-table', ++ #'dummy qa': 'questions', ++ #'dummy faq': 'questions', ++ 'dummy meta': 'meta', ++ 'dummy math': 'math', ++ #'dummy imagemap': 'imagemap', ++ 'dummy image': 'image', ++ 'dummy figure': 'figure', ++ 'dummy include': 'include', ++ 'dummy raw': 'raw', ++ 'dummy replace': 'replace', ++ 'dummy unicode': 'unicode', ++ 'dummy date': 'date', ++ 'dummy class': 'class', ++ 'dummy role': 'role', ++ 'dummy default-role': 'default-role', ++ 'dummy title': 'title', ++ 'dummy contents': 'contents', ++ 'dummy sectnum': 'sectnum', ++ 'dummy section-numbering': 'sectnum', ++ 'dummy header': 'header', ++ 'dummy footer': 'footer', ++ #'dummy footnotes': 'footnotes', ++ #'dummy citations': 'citations', ++ 'dummy target-notes': 'target-notes', ++ 'dummy restructuredtext-test-directive': 'restructuredtext-test-directive'} ++"""English name to registered (in directives/__init__.py) directive name ++mapping.""" ++ ++roles = { ++ # language-dependent: fixed ++ 'dummy abbreviation': 'abbreviation', ++ 'dummy ab': 'abbreviation', ++ 'dummy acronym': 'acronym', ++ 'dummy ac': 'acronym', ++ 'dummy code': 'code', ++ 'dummy index': 'index', ++ 'dummy i': 'index', ++ 'dummy subscript': 'subscript', ++ 'dummy sub': 'subscript', ++ 'dummy superscript': 'superscript', ++ 'dummy sup': 'superscript', ++ 'dummy title-reference': 'title-reference', ++ 'dummy title': 'title-reference', ++ 'dummy t': 'title-reference', ++ 'dummy pep-reference': 'pep-reference', ++ 'dummy pep': 'pep-reference', ++ 'dummy rfc-reference': 'rfc-reference', ++ 'dummy rfc': 'rfc-reference', ++ 'dummy emphasis': 'emphasis', ++ 'dummy strong': 'strong', ++ 'dummy literal': 'literal', ++ 'dummy math': 'math', ++ 'dummy named-reference': 'named-reference', ++ 'dummy anonymous-reference': 'anonymous-reference', ++ 'dummy footnote-reference': 'footnote-reference', ++ 'dummy citation-reference': 'citation-reference', ++ 'dummy substitution-reference': 'substitution-reference', ++ 'dummy target': 'target', ++ 'dummy uri-reference': 'uri-reference', ++ 'dummy uri': 'uri-reference', ++ 'dummy url': 'uri-reference', ++ 'dummy raw': 'raw',} ++"""Mapping of English role names to canonical role names for interpreted text. ++""" diff --git a/python-docutils.spec b/python-docutils.spec index 584b8cb..dc54664 100644 --- a/python-docutils.spec +++ b/python-docutils.spec @@ -11,7 +11,7 @@ Name: python-%{srcname} Version: 0.10 -Release: 0.5.20120824svn7502%{?dist} +Release: 0.6.20120824svn7502%{?dist} Summary: System for processing plaintext documentation Group: Development/Languages @@ -25,8 +25,9 @@ URL: http://docutils.sourceforge.net # python setup.py sdist # The tarball is in dist/docutils-VERSION.tar.gz Source0: %{srcname}-%{version}.tar.gz -#Patch0: docutils-__import__-tests.patch -#Patch1: docutils-__import__-fixes.patch +# Submitted upstream: https://sourceforge.net/tracker/index.php?func=detail&aid=3560841&group_id=38414&atid=422030 +Patch0: docutils-__import__-tests.patch +Patch1: docutils-__import__-fixes2.patch # Disable some tests known to fail with Python 3.3 # Bug reports filed upstream as: @@ -87,8 +88,8 @@ This package contains the module, ported to run under python3. %prep %setup -q -n %{srcname}-%{version} -#patch0 -p0 -#patch1 -p0 +%patch0 -p0 +%patch1 -p0 %patch100 -p1 -b .disable-failing-tests # Remove shebang from library files @@ -170,6 +171,9 @@ rm -rf %{buildroot} %endif %changelog +* Sat Aug 25 2012 Toshio Kuratomi - 0.10-0.6.20120824svn7502 +- Further fix of places in the code that use__import__ + * Fri Aug 24 2012 Toshio Kuratomi - 0.10-0.5.20120824svn7502 - Rebase to new snapshot with some fixes integrated - Reenable one test that I can't replicate the failure with.