[Python-checkins] r70509 - in python/branches/release30-maint: Doc/c-api/typeobj.rst Doc/howto/regex.rst Doc/library/contextlib.rst Doc/library/functions.rst Doc/library/idle.rst Doc/library/re.rst Doc/library/string.rst Doc/library/xml.dom.rst Doc/reference/datamodel.rst Lib/filecmp.py Lib/queue.py Modules/_codecsmodule.c Objects/tupleobject.c Objects/typeobject.c
benjamin.peterson
python-checkins at python.org
Sat Mar 21 18:44:11 CET 2009
Author: benjamin.peterson
Date: Sat Mar 21 18:44:10 2009
New Revision: 70509
Log:
Merged revisions 70507-70508 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
r70507 | benjamin.peterson | 2009-03-21 12:31:58 -0500 (Sat, 21 Mar 2009) | 75 lines
Merged revisions 70342,70385-70387,70389-70390,70392-70393,70395,70400,70405-70406,70418,70438,70464,70468 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r70342 | georg.brandl | 2009-03-13 14:03:58 -0500 (Fri, 13 Mar 2009) | 1 line
#5486: typos.
........
r70385 | benjamin.peterson | 2009-03-15 09:38:55 -0500 (Sun, 15 Mar 2009) | 1 line
fix tuple.index() error message #5495
........
r70386 | georg.brandl | 2009-03-15 16:32:06 -0500 (Sun, 15 Mar 2009) | 1 line
#5496: fix docstring of lookup().
........
r70387 | georg.brandl | 2009-03-15 16:37:16 -0500 (Sun, 15 Mar 2009) | 1 line
#5493: clarify __nonzero__ docs.
........
r70389 | georg.brandl | 2009-03-15 16:43:38 -0500 (Sun, 15 Mar 2009) | 1 line
Fix a small nit in the error message if bool() falls back on __len__ and it returns the wrong type: it would tell the user that __nonzero__ should return bool or int.
........
r70390 | georg.brandl | 2009-03-15 16:44:43 -0500 (Sun, 15 Mar 2009) | 1 line
#5491: clarify nested() semantics.
........
r70392 | georg.brandl | 2009-03-15 16:46:00 -0500 (Sun, 15 Mar 2009) | 1 line
#5488: add missing struct member.
........
r70393 | georg.brandl | 2009-03-15 16:47:42 -0500 (Sun, 15 Mar 2009) | 1 line
#5478: fix copy-paste oversight in function signature.
........
r70395 | georg.brandl | 2009-03-15 16:51:48 -0500 (Sun, 15 Mar 2009) | 1 line
#5276: document IDLESTARTUP and .Idle.py.
........
r70400 | georg.brandl | 2009-03-15 16:59:37 -0500 (Sun, 15 Mar 2009) | 3 lines
Fix markup in re docs and give a mail address in regex howto, so that
the recommendation to send suggestions to the author can be followed.
........
r70405 | georg.brandl | 2009-03-15 17:11:07 -0500 (Sun, 15 Mar 2009) | 7 lines
Move the previously local import of threading to module level.
This is cleaner and avoids lockups in obscure cases where a Queue
is instantiated while the import lock is already held by another thread.
OKed by Tim Peters.
........
r70406 | hirokazu.yamamoto | 2009-03-15 17:43:14 -0500 (Sun, 15 Mar 2009) | 1 line
Added skip for old MSVC.
........
r70418 | georg.brandl | 2009-03-16 14:42:03 -0500 (Mon, 16 Mar 2009) | 1 line
Add token markup.
........
r70438 | benjamin.peterson | 2009-03-17 15:29:51 -0500 (Tue, 17 Mar 2009) | 1 line
I thought this was begging for an example
........
r70464 | benjamin.peterson | 2009-03-18 15:58:09 -0500 (Wed, 18 Mar 2009) | 1 line
a much better example
........
r70468 | benjamin.peterson | 2009-03-18 22:04:31 -0500 (Wed, 18 Mar 2009) | 1 line
close files after comparing them
........
................
r70508 | benjamin.peterson | 2009-03-21 12:36:10 -0500 (Sat, 21 Mar 2009) | 1 line
port the queue change r70405
................
Modified:
python/branches/release30-maint/ (props changed)
python/branches/release30-maint/Doc/c-api/typeobj.rst
python/branches/release30-maint/Doc/howto/regex.rst
python/branches/release30-maint/Doc/library/contextlib.rst
python/branches/release30-maint/Doc/library/functions.rst
python/branches/release30-maint/Doc/library/idle.rst
python/branches/release30-maint/Doc/library/re.rst
python/branches/release30-maint/Doc/library/string.rst
python/branches/release30-maint/Doc/library/xml.dom.rst
python/branches/release30-maint/Doc/reference/datamodel.rst
python/branches/release30-maint/Lib/filecmp.py
python/branches/release30-maint/Lib/queue.py
python/branches/release30-maint/Modules/_codecsmodule.c
python/branches/release30-maint/Objects/tupleobject.c
python/branches/release30-maint/Objects/typeobject.c
Modified: python/branches/release30-maint/Doc/c-api/typeobj.rst
==============================================================================
--- python/branches/release30-maint/Doc/c-api/typeobj.rst (original)
+++ python/branches/release30-maint/Doc/c-api/typeobj.rst Sat Mar 21 18:44:10 2009
@@ -1052,6 +1052,7 @@
binaryfunc nb_inplace_add;
binaryfunc nb_inplace_subtract;
binaryfunc nb_inplace_multiply;
+ binaryfunc nb_inplace_divide;
binaryfunc nb_inplace_remainder;
ternaryfunc nb_inplace_power;
binaryfunc nb_inplace_lshift;
Modified: python/branches/release30-maint/Doc/howto/regex.rst
==============================================================================
--- python/branches/release30-maint/Doc/howto/regex.rst (original)
+++ python/branches/release30-maint/Doc/howto/regex.rst Sat Mar 21 18:44:10 2009
@@ -4,7 +4,7 @@
Regular Expression HOWTO
****************************
-:Author: A.M. Kuchling
+:Author: A.M. Kuchling <amk at amk.ca>
:Release: 0.05
.. TODO:
Modified: python/branches/release30-maint/Doc/library/contextlib.rst
==============================================================================
--- python/branches/release30-maint/Doc/library/contextlib.rst (original)
+++ python/branches/release30-maint/Doc/library/contextlib.rst Sat Mar 21 18:44:10 2009
@@ -61,14 +61,15 @@
from contextlib import nested
- with nested(A, B, C) as (X, Y, Z):
+ with nested(A(), B(), C()) as (X, Y, Z):
do_something()
is equivalent to this::
- with A as X:
- with B as Y:
- with C as Z:
+ m1, m2, m3 = A(), B(), C()
+ with m1 as X:
+ with m2 as Y:
+ with m3 as Z:
do_something()
Note that if the :meth:`__exit__` method of one of the nested context managers
Modified: python/branches/release30-maint/Doc/library/functions.rst
==============================================================================
--- python/branches/release30-maint/Doc/library/functions.rst (original)
+++ python/branches/release30-maint/Doc/library/functions.rst Sat Mar 21 18:44:10 2009
@@ -560,6 +560,14 @@
its :meth:`__next__` method; if the value returned is equal to *sentinel*,
:exc:`StopIteration` will be raised, otherwise the value will be returned.
+ One useful application of the second form of :func:`iter` is to read lines of
+ a file until a certain line is reached. The following example reads a file
+ until ``"STOP"`` is reached: ::
+
+ with open("mydata.txt") as fp:
+ for line in iter(fp.readline, "STOP"):
+ process_line(line)
+
.. function:: len(s)
Modified: python/branches/release30-maint/Doc/library/idle.rst
==============================================================================
--- python/branches/release30-maint/Doc/library/idle.rst (original)
+++ python/branches/release30-maint/Doc/library/idle.rst Sat Mar 21 18:44:10 2009
@@ -253,6 +253,24 @@
black
+Startup
+-------
+
+Upon startup with the ``-s`` option, IDLE will execute the file referenced by
+the environment variables :envvar:`IDLESTARTUP` or :envvar:`PYTHONSTARTUP`.
+Idle first checks for ``IDLESTARTUP``; if ``IDLESTARTUP`` is present the file
+referenced is run. If ``IDLESTARTUP`` is not present, Idle checks for
+``PYTHONSTARTUP``. Files referenced by these environment variables are
+convenient places to store functions that are used frequently from the Idle
+shell, or for executing import statements to import common modules.
+
+In addition, ``Tk`` also loads a startup file if it is present. Note that the
+Tk file is loaded unconditionally. This additional file is ``.Idle.py`` and is
+looked for in the user's home directory. Statements in this file will be
+executed in the Tk namespace, so this file is not useful for importing functions
+to be used from Idle's Python shell.
+
+
Command line usage
^^^^^^^^^^^^^^^^^^
Modified: python/branches/release30-maint/Doc/library/re.rst
==============================================================================
--- python/branches/release30-maint/Doc/library/re.rst (original)
+++ python/branches/release30-maint/Doc/library/re.rst Sat Mar 21 18:44:10 2009
@@ -1114,7 +1114,7 @@
string)`` or ``re.search(pattern, string)``.
:func:`match` has an optional second parameter that gives an index in the string
-where the search is to start:
+where the search is to start::
>>> pattern = re.compile("o")
>>> pattern.match("dog") # No match as "o" is not at the start of "dog."
Modified: python/branches/release30-maint/Doc/library/string.rst
==============================================================================
--- python/branches/release30-maint/Doc/library/string.rst (original)
+++ python/branches/release30-maint/Doc/library/string.rst Sat Mar 21 18:44:10 2009
@@ -196,7 +196,7 @@
.. productionlist:: sf
replacement_field: "{" `field_name` ["!" `conversion`] [":" `format_spec`] "}"
- field_name: (`identifier` | `integer`) ("." `attribute_name` | "[" element_index "]")*
+ field_name: (`identifier` | `integer`) ("." `attribute_name` | "[" `element_index` "]")*
attribute_name: `identifier`
element_index: `integer`
conversion: "r" | "s" | "a"
Modified: python/branches/release30-maint/Doc/library/xml.dom.rst
==============================================================================
--- python/branches/release30-maint/Doc/library/xml.dom.rst (original)
+++ python/branches/release30-maint/Doc/library/xml.dom.rst Sat Mar 21 18:44:10 2009
@@ -600,7 +600,7 @@
Same as equivalent method in the :class:`Document` class.
-.. method:: Element.getElementsByTagNameNS(tagName)
+.. method:: Element.getElementsByTagNameNS(namespaceURI, localName)
Same as equivalent method in the :class:`Document` class.
Modified: python/branches/release30-maint/Doc/reference/datamodel.rst
==============================================================================
--- python/branches/release30-maint/Doc/reference/datamodel.rst (original)
+++ python/branches/release30-maint/Doc/reference/datamodel.rst Sat Mar 21 18:44:10 2009
@@ -1248,11 +1248,12 @@
.. index:: single: __len__() (mapping object method)
- Called to implement truth value testing, and the built-in operation ``bool()``;
- should return ``False`` or ``True``. When this method is not defined,
- :meth:`__len__` is called, if it is defined (see below) and ``True`` is returned
- when the length is not zero. If a class defines neither :meth:`__len__` nor
- :meth:`__bool__`, all its instances are considered true.
+ Called to implement truth value testing and the built-in operation
+ ``bool()``; should return ``False`` or ``True``, or their integer equivalents
+ ``0`` or ``1``. When this method is not defined, :meth:`__len__` is called,
+ if it is defined, and the object is considered true if its result is nonzero.
+ If a class defines neither :meth:`__len__` nor :meth:`__bool__`, all its
+ instances are considered true.
.. _attribute-access:
Modified: python/branches/release30-maint/Lib/filecmp.py
==============================================================================
--- python/branches/release30-maint/Lib/filecmp.py (original)
+++ python/branches/release30-maint/Lib/filecmp.py Sat Mar 21 18:44:10 2009
@@ -11,6 +11,7 @@
import os
import stat
+import contextlib
from itertools import filterfalse
__all__ = ["cmp","dircmp","cmpfiles"]
@@ -62,15 +63,14 @@
def _do_cmp(f1, f2):
bufsize = BUFSIZE
- fp1 = open(f1, 'rb')
- fp2 = open(f2, 'rb')
- while True:
- b1 = fp1.read(bufsize)
- b2 = fp2.read(bufsize)
- if b1 != b2:
- return False
- if not b1:
- return True
+ with contextlib.nested(open(f1, 'rb'), open(f2, 'rb')) as (fp1, fp2):
+ while True:
+ b1 = fp1.read(bufsize)
+ b2 = fp2.read(bufsize)
+ if b1 != b2:
+ return False
+ if not b1:
+ return True
# Directory comparison class.
#
Modified: python/branches/release30-maint/Lib/queue.py
==============================================================================
--- python/branches/release30-maint/Lib/queue.py (original)
+++ python/branches/release30-maint/Lib/queue.py Sat Mar 21 18:44:10 2009
@@ -1,6 +1,10 @@
"""A multi-producer, multi-consumer queue."""
from time import time as _time
+try:
+ import threading as _threading
+except ImportError:
+ import dummy_threading as _threading
from collections import deque
import heapq
@@ -20,26 +24,22 @@
If maxsize is <= 0, the queue size is infinite.
"""
def __init__(self, maxsize=0):
- try:
- import threading
- except ImportError:
- import dummy_threading as threading
self.maxsize = maxsize
self._init(maxsize)
# mutex must be held whenever the queue is mutating. All methods
# that acquire mutex must release it before returning. mutex
# is shared between the three conditions, so acquiring and
# releasing the conditions also acquires and releases mutex.
- self.mutex = threading.Lock()
+ self.mutex = _threading.Lock()
# Notify not_empty whenever an item is added to the queue; a
# thread waiting to get is notified then.
- self.not_empty = threading.Condition(self.mutex)
+ self.not_empty = _threading.Condition(self.mutex)
# Notify not_full whenever an item is removed from the queue;
# a thread waiting to put is notified then.
- self.not_full = threading.Condition(self.mutex)
+ self.not_full = _threading.Condition(self.mutex)
# Notify all_tasks_done whenever the number of unfinished tasks
# drops to zero; thread waiting to join() is notified to resume
- self.all_tasks_done = threading.Condition(self.mutex)
+ self.all_tasks_done = _threading.Condition(self.mutex)
self.unfinished_tasks = 0
def task_done(self):
Modified: python/branches/release30-maint/Modules/_codecsmodule.c
==============================================================================
--- python/branches/release30-maint/Modules/_codecsmodule.c (original)
+++ python/branches/release30-maint/Modules/_codecsmodule.c Sat Mar 21 18:44:10 2009
@@ -61,7 +61,7 @@
"lookup(encoding) -> CodecInfo\n\
\n\
Looks up a codec tuple in the Python codec registry and returns\n\
-a tuple of function (or a CodecInfo object).");
+a CodecInfo object.");
static
PyObject *codec_lookup(PyObject *self, PyObject *args)
Modified: python/branches/release30-maint/Objects/tupleobject.c
==============================================================================
--- python/branches/release30-maint/Objects/tupleobject.c (original)
+++ python/branches/release30-maint/Objects/tupleobject.c Sat Mar 21 18:44:10 2009
@@ -458,7 +458,7 @@
else if (cmp < 0)
return NULL;
}
- PyErr_SetString(PyExc_ValueError, "tuple.index(x): x not in list");
+ PyErr_SetString(PyExc_ValueError, "tuple.index(x): x not in tuple");
return NULL;
}
Modified: python/branches/release30-maint/Objects/typeobject.c
==============================================================================
--- python/branches/release30-maint/Objects/typeobject.c (original)
+++ python/branches/release30-maint/Objects/typeobject.c Sat Mar 21 18:44:10 2009
@@ -4785,7 +4785,7 @@
PyObject *func, *args;
static PyObject *bool_str, *len_str;
int result = -1;
- int from_len = 0;
+ int using_len = 0;
func = lookup_maybe(self, "__bool__", &bool_str);
if (func == NULL) {
@@ -4794,14 +4794,14 @@
func = lookup_maybe(self, "__len__", &len_str);
if (func == NULL)
return PyErr_Occurred() ? -1 : 1;
- from_len = 1;
- }
+ using_len = 1;
+ }
args = PyTuple_New(0);
if (args != NULL) {
PyObject *temp = PyObject_Call(func, args, NULL);
Py_DECREF(args);
if (temp != NULL) {
- if (from_len) {
+ if (using_len) {
/* enforced by slot_nb_len */
result = PyObject_IsTrue(temp);
}
@@ -4810,9 +4810,11 @@
}
else {
PyErr_Format(PyExc_TypeError,
- "__bool__ should return "
- "bool, returned %s",
- Py_TYPE(temp)->tp_name);
+ "%s should return "
+ "bool or int, returned %s",
+ (using_len ? "__len__"
+ : "__bool__"),
+ Py_TYPE(temp)->tp_name);
result = -1;
}
Py_DECREF(temp);
More information about the Python-checkins
mailing list