summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-06-30 13:55:43 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-06-30 13:55:43 (GMT)
commite6c910e9537d405a11377a478556731b4eaec419 (patch)
tree2c8e4faafe9da3f52de933940ff0f1e085ea6274
parentdc9b1ea02eba907ae48cea682a49c5df34d0e19e (diff)
downloadcpython-e6c910e9537d405a11377a478556731b4eaec419.zip
cpython-e6c910e9537d405a11377a478556731b4eaec419.tar.gz
cpython-e6c910e9537d405a11377a478556731b4eaec419.tar.bz2
Issue #12451: pydoc.synopsis() now reads the encoding cookie if available, to
read the Python script from the right encoding.
-rwxr-xr-xLib/pydoc.py9
-rw-r--r--Lib/test/test_pydoc.py13
-rw-r--r--Misc/NEWS3
3 files changed, 20 insertions, 5 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index 2391013e..1619446 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -57,16 +57,17 @@ Richard Chamberlain, for the first implementation of textdoc.
# the current directory is changed with os.chdir(), an incorrect
# path will be displayed.
-import os
-import sys
import builtins
import imp
-import io
import inspect
+import io
+import os
import pkgutil
import platform
import re
+import sys
import time
+import tokenize
import warnings
from collections import deque
from reprlib import Repr
@@ -227,7 +228,7 @@ def synopsis(filename, cache={}):
if lastupdate < mtime:
info = inspect.getmoduleinfo(filename)
try:
- file = open(filename)
+ file = tokenize.open(filename)
except IOError:
# module can't be opened, so skip it
return None
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index 08ba86e..a8f9fbfc 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -16,7 +16,7 @@ from io import StringIO
from collections import namedtuple
from contextlib import contextmanager
from test.support import TESTFN, forget, rmtree, EnvironmentVarGuard, \
- reap_children, captured_output, captured_stdout
+ reap_children, captured_output, captured_stdout, unlink
from test import pydoc_mod
@@ -389,6 +389,17 @@ class PydocDocTest(unittest.TestCase):
self.assertIn('_replace', helptext)
self.assertIn('_asdict', helptext)
+ def test_synopsis(self):
+ self.addCleanup(unlink, TESTFN)
+ for encoding in ('ISO-8859-1', 'UTF-8'):
+ with open(TESTFN, 'w', encoding=encoding) as script:
+ if encoding != 'UTF-8':
+ print('#coding: {}'.format(encoding), file=script)
+ print('"""line 1: h\xe9', file=script)
+ print('line 2: hi"""', file=script)
+ synopsis = pydoc.synopsis(TESTFN, {})
+ self.assertEqual(synopsis, 'line 1: h\xe9')
+
class TestDescriptions(unittest.TestCase):
diff --git a/Misc/NEWS b/Misc/NEWS
index 9419f67..086c8da 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -25,6 +25,9 @@ Core and Builtins
Library
-------
+- Issue #12451: pydoc.synopsis() now reads the encoding cookie if available,
+ to read the Python script from the right encoding.
+
- Issue #12451: distutils now opens the setup script in binary mode to read the
encoding cookie, instead of opening it in UTF-8.