Issue #12451: pydoc.synopsis() now reads the encoding cookie if available, to

read the Python script from the right encoding.
This commit is contained in:
Victor Stinner 2011-06-30 15:55:43 +02:00
parent dc9b1ea02e
commit e6c910e953
3 changed files with 20 additions and 5 deletions

View File

@ -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

View File

@ -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):

View File

@ -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.