Merged revisions 64119,64147,64150,64165,64219-64221,64229-64230,64233,64235,64253,64278,64280,64301,64303,64320,64328,64338-64339 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r64119 | andrew.kuchling | 2008-06-11 14:53:14 +0200 (mer., 11 juin 2008) | 1 line

  Note PEP 371 section
........
  r64147 | benjamin.peterson | 2008-06-11 22:04:30 +0200 (mer., 11 juin 2008) | 2 lines

  update ACKS and NEWs for multiprocessing
........
  r64150 | georg.brandl | 2008-06-11 22:28:06 +0200 (mer., 11 juin 2008) | 2 lines

  Can we agree to put dots at entry ends? Thanks.
........
  r64165 | armin.rigo | 2008-06-12 11:50:58 +0200 (jeu., 12 juin 2008) | 3 lines

  Sounds obvious, but I didn't even realize that you can put non-string
  keys in type dictionaries without using this locals() hack.
........
  r64219 | neal.norwitz | 2008-06-13 08:00:46 +0200 (ven., 13 juin 2008) | 1 line

  Check for memory alloc failure
........
  r64220 | neal.norwitz | 2008-06-13 08:02:26 +0200 (ven., 13 juin 2008) | 3 lines

  Fix some memory dealloc problems when exceptions occur.
  It caused: "Fatal Python error: UNREF invalid object" in the DoubleTest.
........
  r64221 | neal.norwitz | 2008-06-13 08:03:25 +0200 (ven., 13 juin 2008) | 3 lines

  Fix typo in method name.  The LT class implemented less than.  The LE class
  should implement less than or equal to (as the code does).
........
  r64229 | georg.brandl | 2008-06-13 15:26:54 +0200 (ven., 13 juin 2008) | 2 lines

  Clarification.
........
  r64230 | robert.schuppenies | 2008-06-13 15:29:37 +0200 (ven., 13 juin 2008) | 2 lines

  Fixed: sys.getsizeof does not take the actual length of the tuples into account.
........
  r64233 | benjamin.peterson | 2008-06-13 17:11:50 +0200 (ven., 13 juin 2008) | 2 lines

  platform.uname now tries to fill empty values even when os.uname is present
........
  r64235 | benjamin.peterson | 2008-06-13 17:41:09 +0200 (ven., 13 juin 2008) | 1 line

  set svn:ignore on multiprocessing
........
  r64253 | andrew.kuchling | 2008-06-13 21:38:18 +0200 (ven., 13 juin 2008) | 1 line

  Typo fixes
........
  r64278 | martin.v.loewis | 2008-06-14 16:24:47 +0200 (sam., 14 juin 2008) | 2 lines

  Disable UAC by default.
........
  r64280 | gregory.p.smith | 2008-06-14 19:34:09 +0200 (sam., 14 juin 2008) | 3 lines

  silence the test when it is skipped on some platforms.  should fix a
  buildbot.
........
  r64301 | georg.brandl | 2008-06-15 21:54:36 +0200 (dim., 15 juin 2008) | 2 lines

  Forward-port new test from r64300.
........
  r64303 | raymond.hettinger | 2008-06-16 03:42:40 +0200 (lun., 16 juin 2008) | 1 line

  Issue 3116: fix quadratic behavior in marshal.dumps().
........
  r64320 | georg.brandl | 2008-06-16 23:00:47 +0200 (lun., 16 juin 2008) | 2 lines

  Add Jesse Noller to the developers list.
........
  r64328 | georg.brandl | 2008-06-17 11:01:35 +0200 (mar., 17 juin 2008) | 2 lines

  Split the HTML index.
........
  r64338 | vinay.sajip | 2008-06-17 13:02:14 +0200 (mar., 17 juin 2008) | 1 line

  Bug #3126: StreamHandler and FileHandler check before calling "flush" and "close" that the stream object has these, using hasattr (thanks to bobf for the patch).
........
  r64339 | vinay.sajip | 2008-06-17 13:04:02 +0200 (mar., 17 juin 2008) | 1 line

  Updated with fix for #3126.
........
This commit is contained in:
Amaury Forgeot d'Arc 2008-06-17 21:11:29 +00:00
parent 6a00b64429
commit 35c8658a74
18 changed files with 123 additions and 52 deletions

View file

@ -95,6 +95,9 @@
# Output file base name for HTML help builder.
htmlhelp_basename = 'python' + release.replace('.', '')
# Split the index
html_split_index = True
# Options for LaTeX output
# ------------------------

View file

@ -636,9 +636,9 @@ Or, where the user fails to pass a value at all::
option involved in the error; be sure to do the same when calling
``parser.error()`` from your application code.
If :mod:`optparse`'s default error-handling behaviour does not suite your needs,
you'll need to subclass OptionParser and override ``exit()`` and/or
:meth:`error`.
If :mod:`optparse`'s default error-handling behaviour does not suit your needs,
you'll need to subclass OptionParser and override its :meth:`exit` and/or
:meth:`error` methods.
.. _optparse-putting-it-all-together:

View file

@ -521,6 +521,21 @@ environment variable.
.. ======================================================================
.. _pep-0371:
PEP 371: The ``multiprocessing`` Package
=====================================================
XXX write this.
.. seealso::
:pep:`371` - Per-user ``site-packages`` Directory
PEP written by Jesse Noller and Richard Oudkerk;
implemented by Jesse Noller.
.. ======================================================================
.. _pep-3101:
PEP 3101: Advanced String Formatting

View file

@ -731,7 +731,7 @@ def flush(self):
"""
Flushes the stream.
"""
if self.stream:
if self.stream and hasattr(self.stream, "flush"):
self.stream.flush()
def emit(self, record):
@ -787,7 +787,8 @@ def close(self):
"""
if self.stream:
self.flush()
self.stream.close()
if hasattr(self.stream, "close"):
self.stream.close()
StreamHandler.close(self)
self.stream = None

View file

@ -1066,23 +1066,30 @@ def uname():
"""
global _uname_cache
no_os_uname = 0
if _uname_cache is not None:
return _uname_cache
processor = ''
# Get some infos from the builtin os.uname API...
try:
system,node,release,version,machine = os.uname()
except AttributeError:
# Hmm, no uname... we'll have to poke around the system then.
system = sys.platform
release = ''
version = ''
node = _node()
machine = ''
processor = ''
use_syscmd_ver = 1
no_os_uname = 1
if no_os_uname or not filter(None, (system, node, release, version, machine)):
# Hmm, no there is either no uname or uname has returned
#'unknowns'... we'll have to poke around the system then.
if no_os_uname:
system = sys.platform
release = ''
version = ''
node = _node()
machine = ''
use_syscmd_ver = 01
# Try win32_ver() on win32 platforms
if system == 'win32':
@ -1093,8 +1100,10 @@ def uname():
# available on Win XP and later; see
# http://support.microsoft.com/kb/888731 and
# http://www.geocities.com/rick_lively/MANUALS/ENV/MSWIN/PROCESSI.HTM
machine = os.environ.get('PROCESSOR_ARCHITECTURE', '')
processor = os.environ.get('PROCESSOR_IDENTIFIER', machine)
if not machine:
machine = os.environ.get('PROCESSOR_ARCHITECTURE', '')
if not processor:
processor = os.environ.get('PROCESSOR_IDENTIFIER', machine)
# Try the 'ver' system command available on some
# platforms
@ -1136,30 +1145,28 @@ def uname():
release,(version,stage,nonrel),machine = mac_ver()
system = 'MacOS'
else:
# System specific extensions
if system == 'OpenVMS':
# OpenVMS seems to have release and version mixed up
if not release or release == '0':
release = version
version = ''
# Get processor information
try:
import vms_lib
except ImportError:
pass
else:
csid, cpu_number = vms_lib.getsyi('SYI$_CPU',0)
if (cpu_number >= 128):
processor = 'Alpha'
else:
processor = 'VAX'
# System specific extensions
if system == 'OpenVMS':
# OpenVMS seems to have release and version mixed up
if not release or release == '0':
release = version
version = ''
# Get processor information
try:
import vms_lib
except ImportError:
pass
else:
# Get processor information from the uname system command
processor = _syscmd_uname('-p','')
csid, cpu_number = vms_lib.getsyi('SYI$_CPU',0)
if (cpu_number >= 128):
processor = 'Alpha'
else:
processor = 'VAX'
if not processor:
# Get processor information from the uname system command
processor = _syscmd_uname('-p','')
# 'unknown' is not really any useful as information; we'll convert
# it to '' which is more portable
#If any unknowns still exist, replace them with ''s, which are more portable
if system == 'unknown':
system = ''
if node == 'unknown':

View file

@ -27,10 +27,9 @@ class Base(object):
class Base2(object):
mykey = 'from Base2'
class X(Base):
# you can't add a non-string key to X.__dict__, but it can be
# there from the beginning :-)
locals()[MyKey()] = 5
# you can't add a non-string key to X.__dict__, but it can be
# there from the beginning :-)
X = type('X', (Base,), {MyKey(): 5})
print(X.mykey)
# I get a segfault, or a slightly wrong assertion error in a debug build.

View file

@ -335,6 +335,7 @@ def testLambdef(self):
self.assertEquals(l5(1, 2), 5)
self.assertEquals(l5(1, 2, 3), 6)
check_syntax_error(self, "lambda x: x = 2")
check_syntax_error(self, "lambda (None,): None")
l6 = lambda x, y, *, k=20: x+y+k
self.assertEquals(l6(1,2), 1+2+20)
self.assertEquals(l6(1,2,k=10), 1+2+10)

View file

@ -211,10 +211,11 @@ def __lt__(self, other):
class LE:
def __init__(self, x):
self.x = x
def __lt__(self, other):
def __le__(self, other):
return self.x >= other.x
data = [random.random() for i in range(100)]
target = sorted(data, reverse=True)
print("HASATTR", hasattr(LE(0), "__lt__"), LE(0).__lt__)
self.assertEqual(hsort(data, LT), target)
self.assertEqual(hsort(data, LE), target)

View file

@ -8,6 +8,7 @@
import sys
ISBIGENDIAN = sys.byteorder == "big"
IS32BIT = sys.maxsize == 0x7fffffff
del sys
try:
@ -580,6 +581,11 @@ def test_bool(self):
for c in [b'\x01', b'\x7f', b'\xff', b'\x0f', b'\xf0']:
self.assertTrue(struct.unpack('>?', c)[0])
if IS32BIT:
def test_crasher(self):
self.assertRaises(MemoryError, struct.pack, "357913941b", "a")
def test_main():
run_unittest(StructTest)

View file

@ -520,6 +520,9 @@ def test_specialtypes(self):
self.check_sizeof(32768, h + self.align(2) + 2)
self.check_sizeof(32768*32768-1, h + self.align(2) + 2)
self.check_sizeof(32768*32768, h + self.align(2) + 4)
# tuple
self.check_sizeof((), h)
self.check_sizeof((1,2,3), h + 3*p)
def test_main():

View file

@ -486,6 +486,7 @@ Samuel Nicolary
Gustavo Niemeyer
Oscar Nierstrasz
Hrvoje Niksic
Jesse Noller
Bill Noon
Stefan Norberg
Tim Northover
@ -502,6 +503,7 @@ Jason Orendorff
Douglas Orr
Denis S. Otkidach
Michael Otteneder
R. M. Oudkerk
Russel Owen
Ondrej Palkovsky
Mike Pall
@ -673,6 +675,7 @@ Steven Taschuk
Monty Taylor
Amy Taylor
Tobias Thelen
James Thomas
Robin Thomas
Eric Tiedemann
Tracy Tims

View file

@ -17,6 +17,9 @@ the format to accommodate documentation needs as they arise.
Permissions History
-------------------
- Jesse Noller was given SVN access on 16 June 2008 by Georg Brandl,
for work on the multiprocessing module.
- Gregor Lingl was given SVN access on 10 June 2008 by MvL,
for work on the turtle module.

View file

@ -1815,6 +1815,8 @@ buffer_info(PyObject *self, PyObject *arg)
return NULL;
}
shape = PyTuple_New(dict->ndim);
if (shape == NULL)
return NULL;
for (i = 0; i < (int)dict->ndim; ++i)
PyTuple_SET_ITEM(shape, i, PyLong_FromSsize_t(dict->shape[i]));

View file

@ -1383,6 +1383,12 @@ prepare_s(PyStructObject *self)
}
}
/* check for overflow */
if ((len + 1) > (PY_SSIZE_T_MAX / sizeof(formatcode))) {
PyErr_NoMemory();
return -1;
}
self->s_size = size;
self->s_len = len;
codes = PyMem_MALLOC((len + 1) * sizeof(formatcode));

View file

@ -421,6 +421,9 @@ newarrayobject(PyTypeObject *type, Py_ssize_t size, struct arraydescr *descr)
if (op == NULL) {
return NULL;
}
op->ob_descr = descr;
op->allocated = size;
op->weakreflist = NULL;
Py_SIZE(op) = size;
if (size <= 0) {
op->ob_item = NULL;
@ -428,13 +431,10 @@ newarrayobject(PyTypeObject *type, Py_ssize_t size, struct arraydescr *descr)
else {
op->ob_item = PyMem_NEW(char, nbytes);
if (op->ob_item == NULL) {
PyObject_Del(op);
Py_DECREF(op);
return PyErr_NoMemory();
}
}
op->ob_descr = descr;
op->allocated = size;
op->weakreflist = NULL;
op->ob_exports = 0;
return (PyObject *) op;
}
@ -808,11 +808,15 @@ array_do_extend(arrayobject *self, PyObject *bb)
"can only extend with array of same kind");
return -1;
}
if ((Py_SIZE(self) > PY_SSIZE_T_MAX - Py_SIZE(b)) ||
((Py_SIZE(self) + Py_SIZE(b)) > PY_SSIZE_T_MAX / self->ob_descr->itemsize)) {
PyErr_NoMemory();
return -1;
}
size = Py_SIZE(self) + Py_SIZE(b);
PyMem_RESIZE(self->ob_item, char, size*self->ob_descr->itemsize);
if (self->ob_item == NULL) {
PyObject_Del(self);
PyErr_NoMemory();
PyErr_NoMemory();
return -1;
}
memcpy(self->ob_item + Py_SIZE(self)*self->ob_descr->itemsize,

View file

@ -683,13 +683,25 @@ tuple_getnewargs(PyTupleObject *v)
}
static PyObject *
tuple_sizeof(PyTupleObject *self)
{
Py_ssize_t res;
res = PyTuple_Type.tp_basicsize + Py_SIZE(self) * sizeof(PyObject *);
return PyLong_FromSsize_t(res);
}
PyDoc_STRVAR(index_doc,
"T.index(value, [start, [stop]]) -> integer -- return first index of value");
PyDoc_STRVAR(count_doc,
"T.count(value) -> integer -- return number of occurrences of value");
PyDoc_STRVAR(sizeof_doc,
"T.__sizeof__() -- size of T in memory, in bytes");
static PyMethodDef tuple_methods[] = {
{"__getnewargs__", (PyCFunction)tuple_getnewargs, METH_NOARGS},
{"__sizeof__", (PyCFunction)tuple_sizeof, METH_NOARGS, sizeof_doc},
{"index", (PyCFunction)tupleindex, METH_VARARGS, index_doc},
{"count", (PyCFunction)tuplecount, METH_O, count_doc},
{NULL, NULL} /* sentinel */

View file

@ -70,7 +70,7 @@ w_more(int c, WFILE *p)
size = PyBytes_Size(p->str);
newsize = size + size + 1024;
if (newsize > 32*1024*1024) {
newsize = size + 1024*1024;
newsize = size + (size >> 3); /* 12.5% overallocation */
}
if (_PyBytes_Resize(&p->str, newsize) != 0) {
p->ptr = p->end = NULL;

View file

@ -284,7 +284,8 @@ def add_stream(db, name, path):
def init_database(name, schema,
ProductName, ProductCode, ProductVersion,
Manufacturer):
Manufacturer,
request_uac = False):
try:
os.unlink(name)
except OSError:
@ -306,7 +307,11 @@ def init_database(name, schema,
si.SetProperty(PID_AUTHOR, Manufacturer)
si.SetProperty(PID_TEMPLATE, msi_type)
si.SetProperty(PID_REVNUMBER, gen_uuid())
si.SetProperty(PID_WORDCOUNT, 2) # long file names, compressed, original media
if request_uac:
wc = 2 # long file names, compressed, original media
else:
wc = 2 | 8 # +never invoke UAC
si.SetProperty(PID_WORDCOUNT, wc)
si.SetProperty(PID_PAGECOUNT, 200)
si.SetProperty(PID_APPNAME, "Python MSI Library")
# XXX more properties