Commit c0279506 authored by Benjamin Peterson's avatar Benjamin Peterson

Merged revisions...

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
........
parent 2146fe26
...@@ -1052,6 +1052,7 @@ Number Object Structures ...@@ -1052,6 +1052,7 @@ Number Object Structures
binaryfunc nb_inplace_add; binaryfunc nb_inplace_add;
binaryfunc nb_inplace_subtract; binaryfunc nb_inplace_subtract;
binaryfunc nb_inplace_multiply; binaryfunc nb_inplace_multiply;
binaryfunc nb_inplace_divide;
binaryfunc nb_inplace_remainder; binaryfunc nb_inplace_remainder;
ternaryfunc nb_inplace_power; ternaryfunc nb_inplace_power;
binaryfunc nb_inplace_lshift; binaryfunc nb_inplace_lshift;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
Regular Expression HOWTO Regular Expression HOWTO
**************************** ****************************
:Author: A.M. Kuchling :Author: A.M. Kuchling <amk@amk.ca>
:Release: 0.05 :Release: 0.05
.. TODO: .. TODO:
......
...@@ -61,14 +61,15 @@ Functions provided: ...@@ -61,14 +61,15 @@ Functions provided:
from contextlib import nested from contextlib import nested
with nested(A, B, C) as (X, Y, Z): with nested(A(), B(), C()) as (X, Y, Z):
do_something() do_something()
is equivalent to this:: is equivalent to this::
with A as X: m1, m2, m3 = A(), B(), C()
with B as Y: with m1 as X:
with C as Z: with m2 as Y:
with m3 as Z:
do_something() do_something()
Note that if the :meth:`__exit__` method of one of the nested context managers Note that if the :meth:`__exit__` method of one of the nested context managers
......
...@@ -561,6 +561,14 @@ are always available. They are listed here in alphabetical order. ...@@ -561,6 +561,14 @@ are always available. They are listed here in alphabetical order.
its :meth:`__next__` method; if the value returned is equal to *sentinel*, its :meth:`__next__` method; if the value returned is equal to *sentinel*,
:exc:`StopIteration` will be raised, otherwise the value will be returned. :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) .. function:: len(s)
......
...@@ -253,6 +253,24 @@ Shell colors: ...@@ -253,6 +253,24 @@ Shell colors:
black 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 Command line usage
^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
......
...@@ -1127,7 +1127,7 @@ For example: ...@@ -1127,7 +1127,7 @@ For example:
string)`` or ``re.search(pattern, string)``. string)`` or ``re.search(pattern, string)``.
:func:`match` has an optional second parameter that gives an index in the 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 = re.compile("o")
>>> pattern.match("dog") # No match as "o" is not at the start of "dog." >>> pattern.match("dog") # No match as "o" is not at the start of "dog."
......
...@@ -196,7 +196,7 @@ The grammar for a replacement field is as follows: ...@@ -196,7 +196,7 @@ The grammar for a replacement field is as follows:
.. productionlist:: sf .. productionlist:: sf
replacement_field: "{" `field_name` ["!" `conversion`] [":" `format_spec`] "}" 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` attribute_name: `identifier`
element_index: `integer` element_index: `integer`
conversion: "r" | "s" | "a" conversion: "r" | "s" | "a"
......
...@@ -600,7 +600,7 @@ of that class. ...@@ -600,7 +600,7 @@ of that class.
Same as equivalent method in the :class:`Document` class. 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. Same as equivalent method in the :class:`Document` class.
......
...@@ -1251,11 +1251,12 @@ Basic customization ...@@ -1251,11 +1251,12 @@ Basic customization
.. index:: single: __len__() (mapping object method) .. index:: single: __len__() (mapping object method)
Called to implement truth value testing, and the built-in operation ``bool()``; Called to implement truth value testing and the built-in operation
should return ``False`` or ``True``. When this method is not defined, ``bool()``; should return ``False`` or ``True``, or their integer equivalents
:meth:`__len__` is called, if it is defined (see below) and ``True`` is returned ``0`` or ``1``. When this method is not defined, :meth:`__len__` is called,
when the length is not zero. If a class defines neither :meth:`__len__` nor if it is defined, and the object is considered true if its result is nonzero.
:meth:`__bool__`, all its instances are considered true. If a class defines neither :meth:`__len__` nor :meth:`__bool__`, all its
instances are considered true.
.. _attribute-access: .. _attribute-access:
......
...@@ -34,6 +34,10 @@ class msvc9compilerTestCase(unittest.TestCase): ...@@ -34,6 +34,10 @@ class msvc9compilerTestCase(unittest.TestCase):
if sys.platform != 'win32': if sys.platform != 'win32':
# this test is only for win32 # this test is only for win32
return return
from distutils.msvccompiler import get_build_version
if get_build_version() < 8.0:
# this test is only for MSVC8.0 or above
return
from distutils.msvc9compiler import Reg from distutils.msvc9compiler import Reg
self.assertRaises(KeyError, Reg.get_value, 'xxx', 'xxx') self.assertRaises(KeyError, Reg.get_value, 'xxx', 'xxx')
......
...@@ -11,6 +11,7 @@ Functions: ...@@ -11,6 +11,7 @@ Functions:
import os import os
import stat import stat
import contextlib
from itertools import filterfalse from itertools import filterfalse
__all__ = ["cmp","dircmp","cmpfiles"] __all__ = ["cmp","dircmp","cmpfiles"]
...@@ -62,15 +63,14 @@ def _sig(st): ...@@ -62,15 +63,14 @@ def _sig(st):
def _do_cmp(f1, f2): def _do_cmp(f1, f2):
bufsize = BUFSIZE bufsize = BUFSIZE
fp1 = open(f1, 'rb') with contextlib.nested(open(f1, 'rb'), open(f2, 'rb')) as (fp1, fp2):
fp2 = open(f2, 'rb') while True:
while True: b1 = fp1.read(bufsize)
b1 = fp1.read(bufsize) b2 = fp2.read(bufsize)
b2 = fp2.read(bufsize) if b1 != b2:
if b1 != b2: return False
return False if not b1:
if not b1: return True
return True
# Directory comparison class. # Directory comparison class.
# #
......
...@@ -61,7 +61,7 @@ PyDoc_STRVAR(lookup__doc__, ...@@ -61,7 +61,7 @@ PyDoc_STRVAR(lookup__doc__,
"lookup(encoding) -> CodecInfo\n\ "lookup(encoding) -> CodecInfo\n\
\n\ \n\
Looks up a codec tuple in the Python codec registry and returns\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 static
PyObject *codec_lookup(PyObject *self, PyObject *args) PyObject *codec_lookup(PyObject *self, PyObject *args)
......
...@@ -458,7 +458,7 @@ tupleindex(PyTupleObject *self, PyObject *args) ...@@ -458,7 +458,7 @@ tupleindex(PyTupleObject *self, PyObject *args)
else if (cmp < 0) else if (cmp < 0)
return NULL; 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; return NULL;
} }
......
...@@ -4785,7 +4785,7 @@ slot_nb_bool(PyObject *self) ...@@ -4785,7 +4785,7 @@ slot_nb_bool(PyObject *self)
PyObject *func, *args; PyObject *func, *args;
static PyObject *bool_str, *len_str; static PyObject *bool_str, *len_str;
int result = -1; int result = -1;
int from_len = 0; int using_len = 0;
func = lookup_maybe(self, "__bool__", &bool_str); func = lookup_maybe(self, "__bool__", &bool_str);
if (func == NULL) { if (func == NULL) {
...@@ -4794,14 +4794,14 @@ slot_nb_bool(PyObject *self) ...@@ -4794,14 +4794,14 @@ slot_nb_bool(PyObject *self)
func = lookup_maybe(self, "__len__", &len_str); func = lookup_maybe(self, "__len__", &len_str);
if (func == NULL) if (func == NULL)
return PyErr_Occurred() ? -1 : 1; return PyErr_Occurred() ? -1 : 1;
from_len = 1; using_len = 1;
} }
args = PyTuple_New(0); args = PyTuple_New(0);
if (args != NULL) { if (args != NULL) {
PyObject *temp = PyObject_Call(func, args, NULL); PyObject *temp = PyObject_Call(func, args, NULL);
Py_DECREF(args); Py_DECREF(args);
if (temp != NULL) { if (temp != NULL) {
if (from_len) { if (using_len) {
/* enforced by slot_nb_len */ /* enforced by slot_nb_len */
result = PyObject_IsTrue(temp); result = PyObject_IsTrue(temp);
} }
...@@ -4810,9 +4810,11 @@ slot_nb_bool(PyObject *self) ...@@ -4810,9 +4810,11 @@ slot_nb_bool(PyObject *self)
} }
else { else {
PyErr_Format(PyExc_TypeError, PyErr_Format(PyExc_TypeError,
"__bool__ should return " "%s should return "
"bool, returned %s", "bool or int, returned %s",
Py_TYPE(temp)->tp_name); (using_len ? "__len__"
: "__bool__"),
Py_TYPE(temp)->tp_name);
result = -1; result = -1;
} }
Py_DECREF(temp); Py_DECREF(temp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment