summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@haypocalc.com>2011-06-30 13:58:29 (GMT)
committerVictor Stinner <victor.stinner@haypocalc.com>2011-06-30 13:58:29 (GMT)
commit319672e8a6ca3239573340dfb3d8fa46f7f53f0c (patch)
treedfa4fb2be5e97b5f633597861537cb1c5ced2a6e
parent0b5e049ea01f7b0506a8fe596f1d79e2350fc9a4 (diff)
parente6c910e9537d405a11377a478556731b4eaec419 (diff)
downloadcpython-319672e8a6ca3239573340dfb3d8fa46f7f53f0c.zip
cpython-319672e8a6ca3239573340dfb3d8fa46f7f53f0c.tar.gz
cpython-319672e8a6ca3239573340dfb3d8fa46f7f53f0c.tar.bz2
(merge 3.2) 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 89d00a3..a39962e 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -51,16 +51,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
@@ -221,7 +222,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 7d17a98..db118ca 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
@@ -395,6 +395,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 aa09eee..0fb693a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -200,6 +200,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.