Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/sphinx-doc/sphinx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTakeshi KOMIYA <i.tkomiya@gmail.com>2018-09-22 16:54:15 +0300
committerTakeshi KOMIYA <i.tkomiya@gmail.com>2018-09-22 16:54:15 +0300
commitdc44b0d2a9c52b5c12843cb1a0a6e0aea3c7f4d2 (patch)
treeee090ebec55c1aa6c5b9e19bfbad1ae0bbfb8abe /sphinx/util/pycompat.py
parent490e4aed4145659dab000e86269bd7a3dc686318 (diff)
parentb4fab4bf115af984a82b9c509decc0d1c5fe1c41 (diff)
Merge branch 'master' into HEAD
Diffstat (limited to 'sphinx/util/pycompat.py')
-rw-r--r--sphinx/util/pycompat.py129
1 files changed, 34 insertions, 95 deletions
diff --git a/sphinx/util/pycompat.py b/sphinx/util/pycompat.py
index dc5a666b7..a33a832c8 100644
--- a/sphinx/util/pycompat.py
+++ b/sphinx/util/pycompat.py
@@ -9,10 +9,12 @@
:license: BSD, see LICENSE for details.
"""
-import codecs
import sys
+from html import escape as htmlescape # NOQA
+from io import TextIOWrapper # NOQA
+from textwrap import indent # type: ignore # NOQA
-from six import PY3, text_type, exec_
+from six import text_type, exec_
if False:
# For type annotation
@@ -25,114 +27,51 @@ NoneType = type(None)
# Python 2/3 compatibility
# prefix for Unicode strings
-if PY3:
- u = ''
-else:
- u = 'u'
-
-
-# TextIOWrapper
-if PY3:
- from io import TextIOWrapper
-else:
- def TextIOWrapper(stream, encoding):
- # type: (file, str) -> Any
- return codecs.lookup(encoding or 'ascii')[2](stream)
+u = ''
# sys_encoding: some kind of default system encoding; should be used with
# a lenient error handler
-if PY3:
- sys_encoding = sys.getdefaultencoding()
-else:
- sys_encoding = __import__('locale').getpreferredencoding()
+sys_encoding = sys.getdefaultencoding()
# terminal_safe(): safely encode a string for printing to the terminal
-if PY3:
- def terminal_safe(s):
- # type: (unicode) -> unicode
- return s.encode('ascii', 'backslashreplace').decode('ascii')
-else:
- def terminal_safe(s):
- # type: (unicode) -> unicode
- return s.encode('ascii', 'backslashreplace')
+def terminal_safe(s):
+ # type: (unicode) -> unicode
+ return s.encode('ascii', 'backslashreplace').decode('ascii')
# convert_with_2to3():
-if PY3:
- # support for running 2to3 over config files
- def convert_with_2to3(filepath):
- # type: (unicode) -> unicode
- from lib2to3.refactor import RefactoringTool, get_fixers_from_package
- from lib2to3.pgen2.parse import ParseError
- fixers = get_fixers_from_package('lib2to3.fixes')
- refactoring_tool = RefactoringTool(fixers)
- source = refactoring_tool._read_python_source(filepath)[0]
- try:
- tree = refactoring_tool.refactor_string(source, 'conf.py')
- except ParseError as err:
- # do not propagate lib2to3 exceptions
- lineno, offset = err.context[1]
- # try to match ParseError details with SyntaxError details
- raise SyntaxError(err.msg, (filepath, lineno, offset, err.value))
- return text_type(tree)
-else:
- # no need to refactor on 2.x versions
- convert_with_2to3 = None
-
-
-# htmlescape()
-if PY3:
- from html import escape as htmlescape
-else:
- from cgi import escape as htmlescape # NOQA
-
-
-# UnicodeMixin
-if PY3:
- class UnicodeMixin:
- """Mixin class to handle defining the proper __str__/__unicode__
- methods in Python 2 or 3."""
-
- def __str__(self):
- return self.__unicode__()
-else:
- class UnicodeMixin:
- """Mixin class to handle defining the proper __str__/__unicode__
- methods in Python 2 or 3."""
-
- def __str__(self):
- # type: () -> str
- return self.__unicode__().encode('utf8') # type: ignore
-
-
-# indent()
-if PY3:
- from textwrap import indent
-else:
- # backport from python3
- def indent(text, prefix, predicate=None):
- # type: (unicode, unicode, Callable) -> unicode
- if predicate is None:
- def predicate(line):
- # type: (unicode) -> unicode
- return line.strip()
-
- def prefixed_lines():
- # type: () -> Generator
- for line in text.splitlines(True):
- yield (prefix + line if predicate(line) else line)
- return ''.join(prefixed_lines())
+# support for running 2to3 over config files
+def convert_with_2to3(filepath):
+ # type: (unicode) -> unicode
+ from lib2to3.refactor import RefactoringTool, get_fixers_from_package
+ from lib2to3.pgen2.parse import ParseError
+ fixers = get_fixers_from_package('lib2to3.fixes')
+ refactoring_tool = RefactoringTool(fixers)
+ source = refactoring_tool._read_python_source(filepath)[0]
+ try:
+ tree = refactoring_tool.refactor_string(source, 'conf.py')
+ except ParseError as err:
+ # do not propagate lib2to3 exceptions
+ lineno, offset = err.context[1]
+ # try to match ParseError details with SyntaxError details
+ raise SyntaxError(err.msg, (filepath, lineno, offset, err.value))
+ return text_type(tree)
+
+
+class UnicodeMixin:
+ """Mixin class to handle defining the proper __str__/__unicode__
+ methods in Python 2 or 3."""
+
+ def __str__(self):
+ return self.__unicode__()
def execfile_(filepath, _globals, open=open):
# type: (unicode, Any, Callable) -> None
from sphinx.util.osutil import fs_encoding
- # get config source -- 'b' is a no-op under 2.x, while 'U' is
- # ignored under 3.x (but 3.x compile() accepts \r\n newlines)
- mode = 'rb' if PY3 else 'rbU'
- with open(filepath, mode) as f:
+ with open(filepath, 'rb') as f:
source = f.read()
# compile to a code object, handle syntax errors