From 03c1cff57626e806b6e761be43dfb4e7d901a2fa Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 1 Aug 2010 22:05:31 +0000 Subject: [PATCH] Merged revisions 83392,83426 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/release27-maint ................ r83392 | georg.brandl | 2010-08-01 10:22:05 +0200 (So, 01 Aug 2010) | 1 line #8471: reset _SpoofOut.buf to an empty string when truncating; if Unicode had been output previously, it had been coerced to a Unicode string, potentially making subsequent prints behave differently or raise UnicodeErrors. ................ r83426 | georg.brandl | 2010-08-01 21:06:51 +0200 (So, 01 Aug 2010) | 27 lines Merged revisions 83370,83372-83374,83384 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r83370 | georg.brandl | 2010-07-31 23:51:48 +0200 (Sa, 31 Jul 2010) | 5 lines #8198: the Helper class should not save the stdin and stdout objects at import time, rather by default use the current streams like the other APIs that output help. ........ r83372 | georg.brandl | 2010-08-01 00:05:54 +0200 (So, 01 Aug 2010) | 1 line #4007: remove *.a and *.so.X.Y files in "make clean". ........ r83373 | georg.brandl | 2010-08-01 00:11:11 +0200 (So, 01 Aug 2010) | 1 line #5147: revert accidental indentation of header constant for MozillaCookieJar. ........ r83374 | georg.brandl | 2010-08-01 00:32:52 +0200 (So, 01 Aug 2010) | 1 line #5146: handle UID THREAD command correctly. ........ r83384 | georg.brandl | 2010-08-01 08:32:55 +0200 (So, 01 Aug 2010) | 1 line Build properties using lambdas. This makes test_pyclbr pass again, because it does not think that input and output are methods anymore. ........ ................ --- Lib/_MozillaCookieJar.py | 6 +++--- Lib/doctest.py | 3 +++ Lib/imaplib.py | 2 +- Lib/pydoc.py | 11 +++++++---- Lib/test/test_doctest.py | 28 +++++++++++++++++++++++++++- Makefile.pre.in | 3 ++- Misc/NEWS | 11 +++++++++++ 7 files changed, 54 insertions(+), 10 deletions(-) diff --git a/Lib/_MozillaCookieJar.py b/Lib/_MozillaCookieJar.py index 4fd6de32cb..00e8bcf981 100644 --- a/Lib/_MozillaCookieJar.py +++ b/Lib/_MozillaCookieJar.py @@ -38,9 +38,9 @@ class MozillaCookieJar(FileCookieJar): """ magic_re = "#( Netscape)? HTTP Cookie File" header = """\ - # Netscape HTTP Cookie File - # http://www.netscape.com/newsref/std/cookie_spec.html - # This is a generated file! Do not edit. +# Netscape HTTP Cookie File +# http://www.netscape.com/newsref/std/cookie_spec.html +# This is a generated file! Do not edit. """ diff --git a/Lib/doctest.py b/Lib/doctest.py index 9accb81bfc..af0d042b96 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -263,6 +263,9 @@ class _SpoofOut(StringIO): StringIO.truncate(self, size) if hasattr(self, "softspace"): del self.softspace + if not self.buf: + # Reset it to an empty string, to make sure it's not unicode. + self.buf = '' # Worst-case linear-time ellipsis matching. def _ellipsis_match(want, got): diff --git a/Lib/imaplib.py b/Lib/imaplib.py index d1f62b0934..8734a84304 100644 --- a/Lib/imaplib.py +++ b/Lib/imaplib.py @@ -751,7 +751,7 @@ class IMAP4: ', '.join(Commands[command]))) name = 'UID' typ, dat = self._simple_command(name, command, *args) - if command in ('SEARCH', 'SORT'): + if command in ('SEARCH', 'SORT', 'THREAD'): name = command else: name = 'FETCH' diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 4d6584b4fc..86a6aa02c1 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -1705,9 +1705,12 @@ class Helper: 'CONTEXTMANAGERS': ('context-managers', 'with'), } - def __init__(self, input, output): - self.input = input - self.output = output + def __init__(self, input=None, output=None): + self._input = input + self._output = output + + input = property(lambda self: self._input or sys.stdin) + output = property(lambda self: self._output or sys.stdout) def __repr__(self): if inspect.stack()[1][3] == '?': @@ -1884,7 +1887,7 @@ Enter any module name to get more help. Or, type "modules spam" to search for modules whose descriptions contain the word "spam". ''') -help = Helper(sys.stdin, sys.stdout) +help = Helper() class Scanner: """A generic tree iterator.""" diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index c332a40b33..f5a328eaad 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -1508,7 +1508,33 @@ source: >>> test = doctest.DocTestParser().get_doctest(s, {}, 's', 's.py', 0) Traceback (most recent call last): ValueError: line 0 of the doctest for s has an option directive on a line with no example: '# doctest: +ELLIPSIS' -""" + + """ + + def test_unicode_output(self): r""" + +Check that unicode output works: + + >>> u'\xe9' + u'\xe9' + +If we return unicode, SpoofOut's buf variable becomes automagically +converted to unicode. This means all subsequent output becomes converted +to unicode, and if the output contains non-ascii characters that failed. +It used to be that this state change carried on between tests, meaning +tests would fail if unicode has been output previously in the testrun. +This test tests that this is no longer so: + + >>> print u'abc' + abc + +And then return a string with non-ascii characters: + + >>> print u'\xe9'.encode('utf-8') + é + + """ + def test_testsource(): r""" Unit tests for `testsource()`. diff --git a/Makefile.pre.in b/Makefile.pre.in index da515be025..0329d67a56 100644 --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -1137,10 +1137,11 @@ pycremoval: find $(srcdir) -name '*.py[co]' -exec rm -f {} ';' clean: pycremoval - find . -name '*.o' -exec rm -f {} ';' + find . -name '*.[oa]' -exec rm -f {} ';' find . -name '*.s[ol]' -exec rm -f {} ';' find $(srcdir)/build -name 'fficonfig.h' -exec rm -f {} ';' || true find $(srcdir)/build -name 'fficonfig.py' -exec rm -f {} ';' || true + find . -name '*.so.[0-9]*.[0-9]*' -exec rm -f {} ';' -rm -f Lib/lib2to3/*Grammar*.pickle profile-removal: diff --git a/Misc/NEWS b/Misc/NEWS index 160cc2388d..e0de7f9ee5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -89,8 +89,19 @@ C-API Library ------- +- Issue #5146: Handle UID THREAD command correctly in imaplib. + +- Issue #5147: Fix the header generated for cookie files written by + http.cookiejar.MozillaCookieJar. + +- Issue #8198: In pydoc, output all help text to the correct stream + when sys.stdout is reassigned. + - Issue #1019882: Fix IndexError when loading certain hotshot stats. +- Issue #8471: In doctest, properly reset the output stream to an empty + string when Unicode was previously output. + - Issue #8397: Raise an error when attempting to mix iteration and regular reads on a BZ2File object, rather than returning incorrect results. -- 2.50.1