From e0124bd9c3d3af4bd36d9977e0f76da2cf8a1412 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Mon, 9 Mar 2009 21:04:33 +0000 Subject: [PATCH] Merged revisions 69998-69999,70002,70022-70023,70025-70026,70061,70086,70145,70171,70183,70188,70235,70244,70275,70281 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r69998 | benjamin.peterson | 2009-02-26 13:04:40 -0600 (Thu, 26 Feb 2009) | 1 line the startship is rather outdated now ........ r69999 | benjamin.peterson | 2009-02-26 13:05:59 -0600 (Thu, 26 Feb 2009) | 1 line comma ........ r70002 | andrew.kuchling | 2009-02-26 16:34:30 -0600 (Thu, 26 Feb 2009) | 1 line The curses panel library is now supported ........ r70022 | georg.brandl | 2009-02-27 10:23:18 -0600 (Fri, 27 Feb 2009) | 1 line #5361: fix typo. ........ r70023 | georg.brandl | 2009-02-27 10:39:26 -0600 (Fri, 27 Feb 2009) | 1 line #5363: fix cmpfiles() docs. Another instance where a prose description is twice as long as the code. ........ r70025 | georg.brandl | 2009-02-27 10:52:55 -0600 (Fri, 27 Feb 2009) | 1 line #5344: fix punctuation. ........ r70026 | georg.brandl | 2009-02-27 10:59:03 -0600 (Fri, 27 Feb 2009) | 1 line #5365: add quick look conversion table for different time representations. ........ r70061 | hirokazu.yamamoto | 2009-02-28 09:24:00 -0600 (Sat, 28 Feb 2009) | 1 line Binary flag is needed on windows. ........ r70086 | benjamin.peterson | 2009-03-01 21:35:12 -0600 (Sun, 01 Mar 2009) | 1 line fix a silly problem of caching gone wrong #5401 ........ r70145 | benjamin.peterson | 2009-03-03 16:51:57 -0600 (Tue, 03 Mar 2009) | 1 line making the writing more formal ........ r70171 | facundo.batista | 2009-03-04 15:18:17 -0600 (Wed, 04 Mar 2009) | 3 lines Fixed a typo. ........ r70183 | benjamin.peterson | 2009-03-04 18:17:57 -0600 (Wed, 04 Mar 2009) | 1 line add example ........ r70188 | hirokazu.yamamoto | 2009-03-05 03:34:14 -0600 (Thu, 05 Mar 2009) | 1 line Fixed memory leak on failure. ........ r70235 | benjamin.peterson | 2009-03-07 18:21:17 -0600 (Sat, 07 Mar 2009) | 1 line fix funky indentation ........ r70244 | martin.v.loewis | 2009-03-08 09:06:19 -0500 (Sun, 08 Mar 2009) | 2 lines Add Chris Withers. ........ r70275 | georg.brandl | 2009-03-09 11:35:48 -0500 (Mon, 09 Mar 2009) | 2 lines Add missing space. ........ r70281 | benjamin.peterson | 2009-03-09 15:38:56 -0500 (Mon, 09 Mar 2009) | 1 line gzip and bz2 are context managers ........ --- Doc/howto/curses.rst | 2 +- Doc/library/bz2.rst | 5 +++++ Doc/library/filecmp.rst | 23 +++++++++++++++-------- Doc/library/gzip.rst | 7 ++++++- Doc/library/mmap.rst | 4 ++-- Doc/library/stdtypes.rst | 2 +- Doc/library/struct.rst | 2 +- Doc/library/symtable.rst | 6 ++++++ Doc/library/time.rst | 19 +++++++++++++++++++ Doc/whatsnew/2.6.rst | 2 +- Lib/mimetypes.py | 12 ++++++++---- Misc/NEWS | 3 +++ Misc/developers.txt | 5 ++++- Objects/bytearrayobject.c | 10 +++++----- 14 files changed, 77 insertions(+), 25 deletions(-) diff --git a/Doc/howto/curses.rst b/Doc/howto/curses.rst index 1c191adc12c..53ef7deb9d7 100644 --- a/Doc/howto/curses.rst +++ b/Doc/howto/curses.rst @@ -426,7 +426,7 @@ quirks, and provide complete lists of all the functions, attributes, and Because the curses API is so large, some functions aren't supported in the Python interface, not because they're difficult to implement, but because no one has needed them yet. Feel free to add them and then submit a patch. Also, we -don't yet have support for the menus or panels libraries associated with +don't yet have support for the menu library associated with ncurses; feel free to add that. If you write an interesting little program, feel free to contribute it as diff --git a/Doc/library/bz2.rst b/Doc/library/bz2.rst index cde57499266..4808b475565 100644 --- a/Doc/library/bz2.rst +++ b/Doc/library/bz2.rst @@ -58,6 +58,11 @@ Handling of compressed files is offered by the :class:`BZ2File` class. reading. Instances support iteration in the same way as normal :class:`file` instances. + :class:`BZ2File` supports the :keyword:`with` statement. + + .. versionchanged:: 2.7 + Support for the :keyword:`with` statement was added. + .. method:: close() diff --git a/Doc/library/filecmp.rst b/Doc/library/filecmp.rst index 3377d974364..11d74ba770c 100644 --- a/Doc/library/filecmp.rst +++ b/Doc/library/filecmp.rst @@ -31,17 +31,24 @@ The :mod:`filecmp` module defines the following functions: .. function:: cmpfiles(dir1, dir2, common[, shallow]) - Returns three lists of file names: *match*, *mismatch*, *errors*. *match* - contains the list of files match in both directories, *mismatch* includes the - names of those that don't, and *errros* lists the names of files which could not - be compared. Files may be listed in *errors* because the user may lack - permission to read them or many other reasons, but always that the comparison - could not be done for some reason. + Compare the files in the two directories *dir1* and *dir2* whose names are + given by *common*. - The *common* parameter is a list of file names found in both directories. The - *shallow* parameter has the same meaning and default value as for + Returns three lists of file names: *match*, *mismatch*, + *errors*. *match* contains the list of files that match, *mismatch* contains + the names of those that don't, and *errors* lists the names of files which + could not be compared. Files are listed in *errors* if they don't exist in + one of the directories, the user lacks permission to read them or if the + comparison could not be done for some other reason. + + The *shallow* parameter has the same meaning and default value as for :func:`filecmp.cmp`. + For example, ``cmpfiles('a', 'b', ['c', 'd/e'])`` will compare ``a/c`` with + ``b/c`` and ``a/d/e`` with ``b/d/e``. ``'c'`` and ``'d/e'`` will each be in + one of the three returned lists. + + Example:: >>> import filecmp diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst index fa73bba4584..c76bae869e6 100644 --- a/Doc/library/gzip.rst +++ b/Doc/library/gzip.rst @@ -53,7 +53,7 @@ The module defines the following items: ``9`` is slowest and produces the most compression. The default is ``9``. The *mtime* argument is an optional numeric timestamp to be written to - the stream when compressing. All :program:`gzip`compressed streams are + the stream when compressing. All :program:`gzip` compressed streams are required to contain a timestamp. If omitted or ``None``, the current time is used. This module ignores the timestamp when decompressing; however, some programs, such as :program:`gunzip`\ , make use of it. @@ -67,6 +67,11 @@ The module defines the following items: writing as *fileobj*, and retrieve the resulting memory buffer using the :class:`StringIO` object's :meth:`getvalue` method. + :class:`GzipFile` supports the :keyword:`with` statement. + + .. versionchanged:: 2.7 + Support for the :keyword:`with` statement was added. + .. function:: open(filename[, mode[, compresslevel]]) diff --git a/Doc/library/mmap.rst b/Doc/library/mmap.rst index e85a9646f63..ceca29a0102 100644 --- a/Doc/library/mmap.rst +++ b/Doc/library/mmap.rst @@ -93,10 +93,10 @@ To map anonymous memory, -1 should be passed as the fileno along with the length import mmap # write a simple example file - with open("hello.txt", "w") as f: + with open("hello.txt", "wb") as f: f.write("Hello Python!\n") - with open("hello.txt", "r+") as f: + with open("hello.txt", "r+b") as f: # memory-map the file, size 0 means whole file map = mmap.mmap(f.fileno(), 0) # read content via standard file methods diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index eea7364bf55..ec2fe968b73 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -1247,7 +1247,7 @@ The conversion types are: +------------+-----------------------------------------------------+-------+ | ``'o'`` | Signed octal value. | \(1) | +------------+-----------------------------------------------------+-------+ -| ``'u'`` | Obselete type -- it is identical to ``'d'``. | \(7) | +| ``'u'`` | Obsolete type -- it is identical to ``'d'``. | \(7) | +------------+-----------------------------------------------------+-------+ | ``'x'`` | Signed hexadecimal (lowercase). | \(2) | +------------+-----------------------------------------------------+-------+ diff --git a/Doc/library/struct.rst b/Doc/library/struct.rst index 7802fdb1a00..bd8a7a952f0 100644 --- a/Doc/library/struct.rst +++ b/Doc/library/struct.rst @@ -48,7 +48,7 @@ The module defines the following exception and functions: .. function:: unpack_from(fmt, buffer[,offset=0]) - Unpack the *buffer* according to tthe given format. The result is a tuple even + Unpack the *buffer* according to the given format. The result is a tuple even if it contains exactly one item. The *buffer* must contain at least the amount of data required by the format (``len(buffer[offset:])`` must be at least ``calcsize(fmt)``). diff --git a/Doc/library/symtable.rst b/Doc/library/symtable.rst index 28306e67367..9ea3f01b407 100644 --- a/Doc/library/symtable.rst +++ b/Doc/library/symtable.rst @@ -164,6 +164,12 @@ Examining Symbol Tables If the name is used as the target of a function or class statement, this will be true. + For example:: + + >>> table = symtable.symtable("def some_func(): pass", "string", "exec") + >>> table.lookup("some_func").is_namespace() + True + Note that a single name can be bound to multiple objects. If the result is ``True``, the name may also be bound to other objects, like an int or list, that does not introduce a new namespace. diff --git a/Doc/library/time.rst b/Doc/library/time.rst index 0e82b7de2b1..46d972a3f0e 100644 --- a/Doc/library/time.rst +++ b/Doc/library/time.rst @@ -114,6 +114,25 @@ An explanation of some terminology and conventions is in order. :class:`struct_time`, or having elements of the wrong type, a :exc:`TypeError` is raised. +* Use the following functions to convert between time representations: + + +-------------------------+-------------------------+-------------------------+ + | From | To | Use | + +=========================+=========================+=========================+ + | seconds since the epoch | :class:`struct_time` in | :func:`gmtime` | + | | UTC | | + +-------------------------+-------------------------+-------------------------+ + | seconds since the epoch | :class:`struct_time` in | :func:`localtime` | + | | local time | | + +-------------------------+-------------------------+-------------------------+ + | :class:`struct_time` in | seconds since the epoch | :func:`calendar.timegm` | + | UTC | | | + +-------------------------+-------------------------+-------------------------+ + | :class:`struct_time` in | seconds since the epoch | :func:`mktime` | + | local time | | | + +-------------------------+-------------------------+-------------------------+ + + The module defines the following functions and data items: diff --git a/Doc/whatsnew/2.6.rst b/Doc/whatsnew/2.6.rst index 65176097ff9..f0e9eb4c087 100644 --- a/Doc/whatsnew/2.6.rst +++ b/Doc/whatsnew/2.6.rst @@ -274,7 +274,7 @@ structure is:: The expression is evaluated, and it should result in an object that supports the context management protocol (that is, has :meth:`__enter__` and :meth:`__exit__` -methods. +methods). The object's :meth:`__enter__` is called before *with-block* is executed and therefore can run set-up code. It also may return a value that is bound to the diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py index 5812c0c573b..f25e133ebf0 100644 --- a/Lib/mimetypes.py +++ b/Lib/mimetypes.py @@ -237,7 +237,8 @@ def guess_type(url, strict=True): Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. """ - init() + if not inited: + init() return guess_type(url, strict) @@ -254,7 +255,8 @@ def guess_all_extensions(type, strict=True): Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. """ - init() + if not inited: + init() return guess_all_extensions(type, strict) def guess_extension(type, strict=True): @@ -269,7 +271,8 @@ def guess_extension(type, strict=True): Optional `strict' argument when false adds a bunch of commonly found, but non-standard types. """ - init() + if not inited: + init() return guess_extension(type, strict) def add_type(type, ext, strict=True): @@ -284,7 +287,8 @@ def add_type(type, ext, strict=True): list of standard types, else to the list of non-standard types. """ - init() + if not inited: + init() return add_type(type, ext, strict) diff --git a/Misc/NEWS b/Misc/NEWS index 323549e50c9..ad2873589b5 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -220,6 +220,9 @@ Library - configparser now defaults to using an ordered dictionary. +- Issue #5401: Fixed a performance problem in mimetypes when ``from mimetypes + import guess_extension`` was used. + - Issue #1733986: Fixed mmap crash in accessing elements of second map object with same tagname but larger size than first map. (Windows) diff --git a/Misc/developers.txt b/Misc/developers.txt index b4f6c702aad..c32a4e9b562 100644 --- a/Misc/developers.txt +++ b/Misc/developers.txt @@ -17,7 +17,10 @@ the format to accommodate documentation needs as they arise. Permissions History ------------------- -- Tarek Ziadé as given SVN access on Decmeber 21 2008 by NCN, +- Chris Withers was given SVN access on March 8 2009 by MvL, + after recommendation by GvR. + +- Tarek Ziadé was given SVN access on December 21 2008 by NCN, for maintenance of distutils. - Hirokazu Yamamoto was given SVN access on August 12 2008 by MvL, diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c index 868013a8905..428ee57a4d3 100644 --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -249,7 +249,7 @@ PyByteArray_Concat(PyObject *a, PyObject *b) size = va.len + vb.len; if (size < 0) { - return PyErr_NoMemory(); + PyErr_NoMemory(); goto done; } @@ -1019,11 +1019,11 @@ bytes_richcompare(PyObject *self, PyObject *other, int op) static void bytes_dealloc(PyByteArrayObject *self) { - if (self->ob_exports > 0) { - PyErr_SetString(PyExc_SystemError, + if (self->ob_exports > 0) { + PyErr_SetString(PyExc_SystemError, "deallocated bytearray object has exported buffers"); - PyErr_Print(); - } + PyErr_Print(); + } if (self->ob_bytes != 0) { PyMem_Free(self->ob_bytes); }