From a28e7028f99701c4f216dfbe4fcdf5f00cfee7e0 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Sat, 9 Jan 2010 18:53:06 +0000 Subject: Merged revisions 77185-77188,77262,77313,77317,77331-77333,77337-77338 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r77185 | andrew.kuchling | 2009-12-31 10:17:05 -0600 (Thu, 31 Dec 2009) | 1 line Add some items ........ r77186 | benjamin.peterson | 2009-12-31 10:28:24 -0600 (Thu, 31 Dec 2009) | 1 line update expat comment ........ r77187 | andrew.kuchling | 2009-12-31 10:38:53 -0600 (Thu, 31 Dec 2009) | 1 line Add various items ........ r77188 | benjamin.peterson | 2009-12-31 10:49:37 -0600 (Thu, 31 Dec 2009) | 1 line add another advancement ........ r77262 | andrew.kuchling | 2010-01-02 19:15:21 -0600 (Sat, 02 Jan 2010) | 1 line Add a few items ........ r77313 | benjamin.peterson | 2010-01-04 18:04:19 -0600 (Mon, 04 Jan 2010) | 1 line add a test about hashing array.array ........ r77317 | georg.brandl | 2010-01-05 12:14:52 -0600 (Tue, 05 Jan 2010) | 1 line Add Stefan. ........ r77331 | georg.brandl | 2010-01-06 11:43:06 -0600 (Wed, 06 Jan 2010) | 1 line Small fixes to test_cmd: fix signature of do_shell, remove duplicate import, add option to run the custom Cmd class. ........ r77332 | georg.brandl | 2010-01-06 12:02:16 -0600 (Wed, 06 Jan 2010) | 7 lines #5991: let completion for the "help" command include help topics. This also simplifies the Cmd.get_names() method implementation; it was written at a time where dir() didn't consider base class attributes. ........ r77333 | georg.brandl | 2010-01-06 12:26:08 -0600 (Wed, 06 Jan 2010) | 1 line #5950: document that zip files with comments are unsupported in zipimport. ........ r77337 | r.david.murray | 2010-01-06 21:09:08 -0600 (Wed, 06 Jan 2010) | 3 lines Add -W to the 'basics', 'opt', and 'all' test runs so that we get verbose information if a failure happens. ........ r77338 | r.david.murray | 2010-01-06 22:04:28 -0600 (Wed, 06 Jan 2010) | 2 lines Fix inadvertent checkin of debug line. ........ --- Doc/library/zipimport.rst | 2 + Doc/whatsnew/2.7.rst | 95 ++++++++++++++++++++++++++++++++++++----------- Lib/cmd.py | 18 ++++----- Lib/test/test_cmd.py | 11 ++++-- Lib/test/test_hashlib.py | 9 +++++ Misc/build.sh | 6 +-- Misc/developers.txt | 3 ++ setup.py | 12 +++--- 8 files changed, 111 insertions(+), 45 deletions(-) diff --git a/Doc/library/zipimport.rst b/Doc/library/zipimport.rst index 1b23b4c..a0dbc76 100644 --- a/Doc/library/zipimport.rst +++ b/Doc/library/zipimport.rst @@ -26,6 +26,8 @@ Any files may be present in the ZIP archive, but only files :file:`.py` and corresponding :file:`.pyc` or :file:`.pyo` file, meaning that if a ZIP archive doesn't contain :file:`.pyc` files, importing may be rather slow. +ZIP archives with an archive comment are currently not supported. + .. seealso:: `PKZIP Application Note `_ diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst index 2814915..be58df3 100644 --- a/Doc/whatsnew/2.7.rst +++ b/Doc/whatsnew/2.7.rst @@ -264,7 +264,9 @@ Some smaller changes made to the core Python language are: Windows, and on Unix platforms using the gcc, icc, or suncc compilers. There may be a small number of platforms where correct operation of this code cannot be guaranteed, so the code is not - used on such systems. + used on such systems. You can find out which code is being used + by checking :data:`sys.float_repr_style`, which will be ``short`` + if the new code is in use and ``legacy`` if it isn't. Implemented by Eric Smith and Mark Dickinson, using David Gay's :file:`dtoa.c` library; :issue:`7117`. @@ -358,6 +360,11 @@ Some smaller changes made to the core Python language are: on the :exc:`IOError` exception when trying to open a directory on POSIX platforms. (Noted by Jan Kaliszewski; :issue:`4764`.) +* The Python tokenizer now translates line endings itself, so the + :func:`compile` built-in function can now accept code using any + line-ending convention. Additionally, it no longer requires that the + code end in a newline. + * Extra parentheses in function definitions are illegal in Python 3.x, meaning that you get a syntax error from ``def f((x)): pass``. In Python3-warning mode, Python 2.7 will now warn about this odd usage. @@ -433,6 +440,8 @@ Several performance enhancements have been added: Various benchmarks show speedups of between 50% and 150% for long integer divisions and modulo operations. (Contributed by Mark Dickinson; :issue:`5512`.) + Bitwise operations are also significantly faster (initial patch by + Gregory Smith; :issue:`1087418`). * The implementation of ``%`` checks for the left-side operand being a Python string and special-cases it; this results in a 1-3% @@ -444,6 +453,16 @@ Several performance enhancements have been added: faster bytecode. (Patch by Antoine Pitrou, back-ported to 2.7 by Jeffrey Yasskin; :issue:`4715`.) +* Converting an integer or long integer to a decimal string was made + faster by special-casing base 10 instead of using a generalized + conversion function that supports arbitrary bases. + (Patch by Gawain Bolton; :issue:`6713`.) + +* The :meth:`rindex`, :meth:`rpartition`, and :meth:`rsplit` methods + of string objects now uses a fast reverse-search algorithm instead of + a character-by-character scan. This is often faster by a factor of 10. + (Added by Florent Xicluna; :issue:`7462`.) + * The :mod:`pickle` and :mod:`cPickle` modules now automatically intern the strings used for attribute names, reducing memory usage of the objects resulting from unpickling. (Contributed by Jake @@ -453,11 +472,6 @@ Several performance enhancements have been added: nearly halving the time required to pickle them. (Contributed by Collin Winter; :issue:`5670`.) -* Converting an integer or long integer to a decimal string was made - faster by special-casing base 10 instead of using a generalized - conversion function that supports arbitrary bases. - (Patch by Gawain Bolton; :issue:`6713`.) - .. ====================================================================== New and Improved Modules @@ -602,6 +616,10 @@ changes, or look through the Subversion logs for all the details. XXX link to file:///MacDev/svn.python.org/python-trunk/Doc/build/html/distutils/examples.html#reading-the-metadata (Contributed by Tarek Ziade; :issue:`7457`.) + :file:`setup.py` files will now accept a :option:`--no-user-cfg` switch + to skip reading the :file:`~/.pydistutils.cfg` file. (Suggested by + by Michael Hoffman, and implemented by Paul Winkler; :issue:`1180`.) + * The :class:`Fraction` class now accepts two rational numbers as arguments to its constructor. (Implemented by Mark Dickinson; :issue:`5812`.) @@ -625,14 +643,6 @@ changes, or look through the Subversion logs for all the details. recorded in a gzipped file by providing an optional timestamp to the constructor. (Contributed by Jacques Frechet; :issue:`4272`.) -* The :mod:`hashlib` module was inconsistent about accepting - input as a Unicode object or an object that doesn't support - the buffer protocol. The behavior was different depending on - whether :mod:`hashlib` was using an external OpenSSL library - or its built-in implementations. Python 2.7 makes the - behavior consistent, always rejecting such objects by raising a - :exc:`TypeError`. (Fixed by Gregory P. Smith; :issue:`3745`.) - * The default :class:`HTTPResponse` class used by the :mod:`httplib` module now supports buffering, resulting in much faster reading of HTTP responses. (Contributed by Kristjan Valur Jonsson; :issue:`4879`.) @@ -745,6 +755,10 @@ changes, or look through the Subversion logs for all the details. to store data. (Contributed by Tarek Ziade; :issue:`6693`.) +* The :mod:`socket` module's :class:`SSL` objects now support the + buffer API, which fixed a test suite failure. (Fixed by Antoine Pitrou; + :issue:`7133`.) + * The :mod:`SocketServer` module's :class:`TCPServer` class now has a :attr:`disable_nagle_algorithm` class attribute. The default value is False; if overridden to be True, @@ -858,6 +872,10 @@ GvR worked on merging them into Python's version of :mod:`unittest`. whether the two values evaluate to the same object or not. (Added by Michael Foord; :issue:`2578`.) +* :meth:`assertIsInstance` and :meth:`assertNotIsInstance` check whether + the resulting object is an instance of a particular class, or of + one of a tuple of classes. (Added by Georg Brandl; :issue:`7031`.) + * :meth:`assertGreater`, :meth:`assertGreaterEqual`, :meth:`assertLess`, and :meth:`assertLessEqual` compare two quantities. @@ -1025,6 +1043,11 @@ Changes to Python's build process and to the C API include: a :ctype:`long`, an *overflow* flag is set and returned to the caller. (Contributed by Case Van Horsen; :issue:`7528`.) +* New function: stemming from the rewrite of string-to-float conversion, + a new :cfunc:`PyOS_string_to_double` function was added. The old + :cfunc:`PyOS_ascii_strtod` and :cfunc:`PyOS_ascii_atof` functions + are now deprecated. + * New macros: the Python header files now define the following macros: :cmacro:`Py_ISALNUM`, :cmacro:`Py_ISALPHA`, @@ -1067,10 +1090,30 @@ Changes to Python's build process and to the C API include: (Fixed by Thomas Wouters; :issue:`1590864`.) +* The :cfunc:`Py_Finalize` function now calls the internal + :func:`threading._shutdown` function; this prevents some exceptions from + being raised when an interpreter shuts down. + (Patch by Adam Olsen; :issue:`1722344`.) + * Global symbols defined by the :mod:`ctypes` module are now prefixed with ``Py``, or with ``_ctypes``. (Implemented by Thomas Heller; :issue:`3102`.) +* New configure option: the :option:`--with-system-expat` switch allows + building the :mod:`pyexpat` module to use the system Expat library. + (Contributed by Arfrever Frehtes Taifersar Arahesis; :issue:`7609`.) + +* New configure option: Compiling Python with the + :option:`--with-valgrind` option will now disable the pymalloc + allocator, which is difficult for the Valgrind to analyze correctly. + Valgrind will therefore be better at detecting memory leaks and + overruns. (Contributed by James Henstridge; :issue:`2422`.) + +* New configure option: you can now supply no arguments to + :option:`--with-dbmliborder=` in order to build none of the various + DBM modules. (Added by Arfrever Frehtes Taifersar Arahesis; + :issue:`6491`.) + * The :program:`configure` script now checks for floating-point rounding bugs on certain 32-bit Intel chips and defines a :cmacro:`X87_DOUBLE_ROUNDING` preprocessor definition. No code currently uses this definition, @@ -1083,11 +1126,6 @@ Changes to Python's build process and to the C API include: * The build process now supports Subversion 1.7. (Contributed by Arfrever Frehtes Taifersar Arahesis; :issue:`6094`.) -* Compiling Python with the :option:`--with-valgrind` option will now - disable the pymalloc allocator, which is difficult for the Valgrind to - analyze correctly. Valgrind will therefore be better at detecting - memory leaks and overruns. (Contributed by James Henstridge; :issue:`2422`.) - .. ====================================================================== @@ -1139,12 +1177,14 @@ Other Changes and Fixes The :option:`-r` option also reports the seed that was used (Added by Collin Winter.) -* The :file:`regrtest.py` script now takes a :option:`-j` switch - that takes an integer specifying how many tests run in parallel. This +* Another :file:`regrtest.py` switch is :option:`-j`, which + takes an integer specifying how many tests run in parallel. This allows reducing the total runtime on multi-core machines. This option is compatible with several other options, including the :option:`-R` switch which is known to produce long runtimes. - (Added by Antoine Pitrou, :issue:`6152`.) + (Added by Antoine Pitrou, :issue:`6152`.) This can also be used + with a new :option:`-F` switch that runs selected tests in a loop + until they fail. (Added by Antoine Pitrou; :issue:`7312`.) .. ====================================================================== @@ -1175,6 +1215,17 @@ that may require changes to your code: nothing when a negative length is requested, as other file-like objects do. (:issue:`7348`). +For C extensions: + +* C extensions that use integer format codes with the ``PyArg_Parse*`` + family of functions will now raise a :exc:`TypeError` exception + instead of triggering a :exc:`DeprecationWarning` (:issue:`5080`). + +* Use the new :cfunc:`PyOS_string_to_double` function instead of the old + :cfunc:`PyOS_ascii_strtod` and :cfunc:`PyOS_ascii_atof` functions, + which are now deprecated. + + .. ====================================================================== diff --git a/Lib/cmd.py b/Lib/cmd.py index 6f34e04..8976988 100644 --- a/Lib/cmd.py +++ b/Lib/cmd.py @@ -278,19 +278,15 @@ class Cmd: return None def get_names(self): - # Inheritance says we have to look in class and - # base classes; order is not important. - names = [] - classes = [self.__class__] - while classes: - aclass = classes.pop(0) - if aclass.__bases__: - classes = classes + list(aclass.__bases__) - names = names + dir(aclass) - return names + # This method used to pull in base class attributes + # at a time dir() didn't do it yet. + return dir(self.__class__) def complete_help(self, *args): - return self.completenames(*args) + commands = set(self.completenames(*args)) + topics = set(a[5:] for a in self.get_names() + if a.startswith('help_' + args[0])) + return list(commands | topics) def do_help(self, arg): if arg: diff --git a/Lib/test/test_cmd.py b/Lib/test/test_cmd.py index e2b3022..f102fe0 100644 --- a/Lib/test/test_cmd.py +++ b/Lib/test/test_cmd.py @@ -60,15 +60,17 @@ class samplecmdclass(cmd.Cmd): >>> mycmd.completenames("12") [] >>> mycmd.completenames("help") - ['help', 'help'] + ['help'] Test for the function complete_help(): >>> mycmd.complete_help("a") ['add'] >>> mycmd.complete_help("he") - ['help', 'help'] + ['help'] >>> mycmd.complete_help("12") [] + >>> sorted(mycmd.complete_help("")) + ['add', 'exit', 'help', 'shell'] Test for the function do_help(): >>> mycmd.do_help("testet") @@ -144,7 +146,7 @@ class samplecmdclass(cmd.Cmd): def complete_command(self): print("complete command") - def do_shell(self): + def do_shell(self, s): pass def do_add(self, s): @@ -171,6 +173,7 @@ def test_main(verbose=None): support.run_doctest(test_cmd, verbose) def test_coverage(coverdir): + import trace tracer=trace.Trace(ignoredirs=[sys.prefix, sys.exec_prefix,], trace=0, count=1) tracer.run('reload(cmd);test_main()') @@ -181,5 +184,7 @@ def test_coverage(coverdir): if __name__ == "__main__": if "-c" in sys.argv: test_coverage('/tmp/cmd.cover') + elif "-i" in sys.argv: + samplecmdclass().cmdloop() else: test_main() diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index 2857737..7d58da9 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -6,8 +6,10 @@ # Licensed to PSF under a Contributor Agreement. # +import array import hashlib from io import StringIO +import itertools import sys try: import threading @@ -93,6 +95,13 @@ class HashLibTestCase(unittest.TestCase): super(HashLibTestCase, self).__init__(*args, **kwargs) + def test_hash_array(self): + a = array.array("b", range(10)) + constructors = self.constructors_to_test.values() + for cons in itertools.chain.from_iterable(constructors): + c = cons(a) + c.hexdigest() + def test_unknown_hash(self): try: hashlib.new('spam spam spam spam spam') diff --git a/Misc/build.sh b/Misc/build.sh index 8bd2635..782fe59 100755 --- a/Misc/build.sh +++ b/Misc/build.sh @@ -214,7 +214,7 @@ if [ $err = 0 -a "$BUILD_DISABLED" != "yes" ]; then ## make and run basic tests F=make-test.out start=`current_time` - $PYTHON $REGRTEST_ARGS -u urlfetch >& build/$F + $PYTHON $REGRTEST_ARGS -W -u urlfetch >& build/$F NUM_FAILURES=`count_failures build/$F` place_summary_first build/$F update_status "Testing basics ($NUM_FAILURES failures)" "$F" $start @@ -222,7 +222,7 @@ if [ $err = 0 -a "$BUILD_DISABLED" != "yes" ]; then F=make-test-opt.out start=`current_time` - $PYTHON -O $REGRTEST_ARGS -u urlfetch >& build/$F + $PYTHON -O $REGRTEST_ARGS -W -u urlfetch >& build/$F NUM_FAILURES=`count_failures build/$F` place_summary_first build/$F update_status "Testing opt ($NUM_FAILURES failures)" "$F" $start @@ -245,7 +245,7 @@ if [ $err = 0 -a "$BUILD_DISABLED" != "yes" ]; then start=`current_time` ## skip curses when running from cron since there's no terminal ## skip sound since it's not setup on the PSF box (/dev/dsp) - $PYTHON $REGRTEST_ARGS -uall -x test_curses test_linuxaudiodev test_ossaudiodev $_ALWAYS_SKIP >& build/$F + $PYTHON $REGRTEST_ARGS -W -uall -x test_curses test_linuxaudiodev test_ossaudiodev &_ALWAYS_SKIP >& build/$F NUM_FAILURES=`count_failures build/$F` place_summary_first build/$F update_status "Testing all except curses and sound ($NUM_FAILURES failures)" "$F" $start diff --git a/Misc/developers.txt b/Misc/developers.txt index 25d5324..65b59f7 100644 --- a/Misc/developers.txt +++ b/Misc/developers.txt @@ -20,6 +20,9 @@ for details. When the agreement is signed, please note it in this log. Permissions History ------------------- +- Stefan Krah was given SVN access on January 5 2010 by GFB, at + suggestion of Mark Dickinson, for work on the decimal module. + - Doug Hellmann was given SVN access on September 19 2009 by GFB, at suggestion of Jesse Noller, for documentation work. diff --git a/setup.py b/setup.py index c1397d7..0f7a1dc 100644 --- a/setup.py +++ b/setup.py @@ -1108,12 +1108,12 @@ class PyBuildExt(build_ext): # Interface to the Expat XML parser # - # Expat was written by James Clark and is now maintained by a - # group of developers on SourceForge; see www.libexpat.org for - # more information. The pyexpat module was written by Paul - # Prescod after a prototype by Jack Jansen. The Expat source - # is included in Modules/expat/. Usage of a system - # shared libexpat.so/expat.dll is not advised. + # Expat was written by James Clark and is now maintained by a group of + # developers on SourceForge; see www.libexpat.org for more information. + # The pyexpat module was written by Paul Prescod after a prototype by + # Jack Jansen. The Expat source is included in Modules/expat/. Usage + # of a system shared libexpat.so is possible with --with-system-expat + # cofigure option. # # More information on Expat can be found at www.libexpat.org. # -- cgit v0.12