From 46a3a9f46ebda4cb49e73d2edf5cdb5851d98a9f Mon Sep 17 00:00:00 2001 From: grubert Date: Sun, 26 Aug 2012 15:42:37 +0000 Subject: [PATCH] Fix [3559988] and [3560841] __import__ local writer, reader, languages and parsers for Python 2.7 up. git-svn-id: https://docutils.svn.sourceforge.net/svnroot/docutils/trunk@7503 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/HISTORY.txt | 2 ++ docutils/THANKS.txt | 1 + docutils/docutils/languages/__init__.py | 7 +++++-- docutils/docutils/parsers/__init__.py | 5 ++++- docutils/docutils/parsers/rst/languages/__init__.py | 7 +++++-- docutils/docutils/readers/__init__.py | 5 ++++- docutils/test/test_language.py | 5 +++++ 7 files changed, 26 insertions(+), 6 deletions(-) diff --git a/docutils/HISTORY.txt b/docutils/HISTORY.txt index 83f18da8f..eec20a1b6 100644 --- a/docutils/HISTORY.txt +++ b/docutils/HISTORY.txt @@ -22,6 +22,8 @@ Changes Since 0.9.1 - ``docutils/math``, ``docutils/error_reporting.py``, and ``docutils/urischemes.py`` moved to the utils package. - Fix [3541369] Relative __import__ also with Python 3.3. + - Fix [3559988] and [3560841] __import__ local writer, reader, languages + and parsers for Python 2.7 up. * docutils/io.py diff --git a/docutils/THANKS.txt b/docutils/THANKS.txt index e97e53617..9db7d1e09 100644 --- a/docutils/THANKS.txt +++ b/docutils/THANKS.txt @@ -110,6 +110,7 @@ donations, tasty treats, and related projects: * Panjunyong * Patrick K. O'Brien * Michel Pelletier +* Toshio Kuratomi * Sam Penrose * Tim Peters * Pearu Peterson diff --git a/docutils/docutils/languages/__init__.py b/docutils/docutils/languages/__init__.py index 57d3ec205..c3d6c05a6 100644 --- a/docutils/docutils/languages/__init__.py +++ b/docutils/docutils/languages/__init__.py @@ -30,9 +30,12 @@ def get_language(language_code, reporter=None): 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: diff --git a/docutils/docutils/parsers/__init__.py b/docutils/docutils/parsers/__init__.py index 341e358f5..d7b8068e3 100644 --- a/docutils/docutils/parsers/__init__.py +++ b/docutils/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 diff --git a/docutils/docutils/parsers/rst/languages/__init__.py b/docutils/docutils/parsers/rst/languages/__init__.py index 5a151e456..9730efcd0 100644 --- a/docutils/docutils/parsers/rst/languages/__init__.py +++ b/docutils/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/docutils/readers/__init__.py b/docutils/docutils/readers/__init__.py index e3e6fb56a..c2e4ce6c1 100644 --- a/docutils/docutils/readers/__init__.py +++ b/docutils/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 diff --git a/docutils/test/test_language.py b/docutils/test/test_language.py index a7c0d5666..0410a0777 100755 --- a/docutils/test/test_language.py +++ b/docutils/test/test_language.py @@ -53,6 +53,11 @@ class LanguageTestSuite(DocutilsTestSupport.CustomTestSuite): # 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: -- 2.11.4.GIT