Merged revisions 56782-56847 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/branches/p3yk

................
  r56808 | kurt.kaiser | 2007-08-07 14:15:45 -0700 (Tue, 07 Aug 2007) | 2 lines

  Replace sys.exitfunc call with atexit call
................
  r56835 | thomas.wouters | 2007-08-08 09:20:30 -0700 (Wed, 08 Aug 2007) | 8 lines


  Tests for dict comprehensions I forgot to 'svn add' when committing the
  actual feature.

  I was _sure_ I had checked in these new tests already, but I guess the
  checkin failed and I didn't notice.
................
  r56847 | guido.van.rossum | 2007-08-09 07:03:34 -0700 (Thu, 09 Aug 2007) | 30 lines

  Merged revisions 56760-56846 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r56762 | georg.brandl | 2007-08-06 00:37:58 -0700 (Mon, 06 Aug 2007) | 2 lines

    Place #ifdef Py_USING_UNICODE around decode_unicode().
  ........
    r56763 | georg.brandl | 2007-08-06 00:39:09 -0700 (Mon, 06 Aug 2007) | 2 lines

    Replace unnecessary function call.
  ........
    r56764 | georg.brandl | 2007-08-06 00:52:20 -0700 (Mon, 06 Aug 2007) | 2 lines

    Patch #1765839: add link to https+proxy urllib2 opener.
  ........
    r56797 | georg.brandl | 2007-08-07 00:13:24 -0700 (Tue, 07 Aug 2007) | 2 lines

    Bug #1769002: fix a now-wrong sentence in the tutorial.
  ........
    r56830 | georg.brandl | 2007-08-08 06:03:41 -0700 (Wed, 08 Aug 2007) | 3 lines

    Revert the fix for #1548891, it broke backwards compatibility with arbitrary read buffers.
    Fixes #1730114.
  ........
    r56833 | georg.brandl | 2007-08-08 06:50:02 -0700 (Wed, 08 Aug 2007) | 2 lines

    Fix compilation warning.
  ........
................
This commit is contained in:
Guido van Rossum 2007-08-09 14:26:58 +00:00
parent 34d1928766
commit c76a250f3e
8 changed files with 83 additions and 14 deletions

View File

@ -541,7 +541,9 @@ steps to setting up a `Basic Authentication`_ handler : ::
.. note::
Currently ``urllib2`` *does not* support fetching of ``https``
locations through a proxy. This can be a problem.
locations through a proxy. However, this can be enabled by extending
urllib2 as shown in the recipe [#]_.
Sockets and Layers
==================
@ -596,3 +598,6 @@ This document was reviewed and revised by John Lee.
is set to use the proxy, which urllib2 picks up on. In order to test
scripts with a localhost server, I have to prevent urllib2 from using
the proxy.
.. [#] urllib2 opener for SSL proxy (CONNECT method): `ASPN Cookbook Recipe
<http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/456195>`_.

View File

@ -78,6 +78,10 @@ Unlike the memory files implemented by the \refmodule{StringIO}
module, those provided by this module are not able to accept Unicode
strings that cannot be encoded as plain \ASCII{} strings.
Calling \function{StringIO()} with a Unicode string parameter populates
the object with the buffer representation of the Unicode string, instead of
encoding the string.
Another difference from the \refmodule{StringIO} module is that calling
\function{StringIO()} with a string parameter creates a read-only object.
Unlike an object created without a string parameter, it does not have

View File

@ -2942,15 +2942,14 @@ which the current module is a submodule), the \keyword{import}
statement looks for a top-level module with the given name.
When packages are structured into subpackages (as with the
\module{sound} package in the example), there's no shortcut to refer
to submodules of sibling packages - the full name of the subpackage
must be used. For example, if the module
\module{sound.filters.vocoder} needs to use the \module{echo} module
in the \module{sound.effects} package, it can use \code{from
sound.effects import echo}.
\module{sound} package in the example), you can use absolute
imports to refer to submodules of siblings packages.
For example, if the module \module{sound.filters.vocoder} needs to
use the \module{echo} module in the \module{sound.effects} package,
it can use \code{from sound.effects import echo}.
Starting with Python 2.5, in addition to the implicit relative imports
described above, you can write explicit relative imports with the
described above, you can also write explicit relative imports with the
\code{from module import name} form of import statement. These explicit
relative imports use leading dots to indicate the current and parent
packages involved in the relative import. From the \module{surround}

View File

@ -193,14 +193,16 @@ def flush_stdout():
"""XXX How to do this now?"""
def exit():
"""Exit subprocess, possibly after first deleting sys.exitfunc
"""Exit subprocess, possibly after first clearing exit functions.
If config-main.cfg/.def 'General' 'delete-exitfunc' is True, then any
sys.exitfunc will be removed before exiting. (VPython support)
functions registered with atexit will be removed before exiting.
(VPython support)
"""
if no_exitfunc:
del sys.exitfunc
import atexit
atexit._clear()
sys.exit(0)
class MyRPCServer(rpc.RPCServer):

View File

@ -428,7 +428,7 @@ class SGMLParser(markupbase.ParserBase):
if replacement is None:
self.unknown_entityref(name)
else:
self.handle_data(self.convert_entityref(name))
self.handle_data(replacement)
# Example -- handle data, should be overridden
def handle_data(self, data):

View File

@ -0,0 +1,54 @@
doctests = """
>>> k = "old value"
>>> { k: None for k in range(10) }
{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None}
>>> k
'old value'
>>> { k: k+10 for k in range(10) }
{0: 10, 1: 11, 2: 12, 3: 13, 4: 14, 5: 15, 6: 16, 7: 17, 8: 18, 9: 19}
>>> g = "Global variable"
>>> { k: g for k in range(10) }
{0: 'Global variable', 1: 'Global variable', 2: 'Global variable', 3: 'Global variable', 4: 'Global variable', 5: 'Global variable', 6: 'Global variable', 7: 'Global variable', 8: 'Global variable', 9: 'Global variable'}
>>> { k: v for k in range(10) for v in range(10) if k == v }
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
>>> { k: v for v in range(10) for k in range(v*9, v*10) }
{9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, 38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6, 55: 6, 56: 6, 57: 6, 58: 6, 59: 6, 63: 7, 64: 7, 65: 7, 66: 7, 67: 7, 68: 7, 69: 7, 72: 8, 73: 8, 74: 8, 75: 8, 76: 8, 77: 8, 78: 8, 79: 8, 81: 9, 82: 9, 83: 9, 84: 9, 85: 9, 86: 9, 87: 9, 88: 9, 89: 9}
>>> { x: y for y, x in ((1, 2), (3, 4)) } = 5 # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
SyntaxError: ...
>>> { x: y for y, x in ((1, 2), (3, 4)) } += 5 # doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
SyntaxError: ...
"""
__test__ = {'doctests' : doctests}
def test_main(verbose=None):
import sys
from test import test_support
from test import test_dictcomps
test_support.run_doctest(test_dictcomps, verbose)
# verify reference counting
if verbose and hasattr(sys, "gettotalrefcount"):
import gc
counts = [None] * 5
for i in range(len(counts)):
test_support.run_doctest(test_dictcomps, verbose)
gc.collect()
counts[i] = sys.gettotalrefcount()
print(counts)
if __name__ == "__main__":
test_main(verbose=True)

View File

@ -664,8 +664,11 @@ newIobject(PyObject *s) {
char *buf;
Py_ssize_t size;
if (PyObject_AsCharBuffer(s, (const char **)&buf, &size) != 0)
return NULL;
if (PyObject_AsReadBuffer(s, (const void **)&buf, &size)) {
PyErr_Format(PyExc_TypeError, "expected read buffer, %.200s found",
s->ob_type->tp_name);
return NULL;
}
self = PyObject_New(Iobject, &Itype);
if (!self) return NULL;

View File

@ -3112,6 +3112,7 @@ decode_utf8(const char **sPtr, const char *end, char* encoding)
return v;
}
#ifdef Py_USING_UNICODE
static PyObject *
decode_unicode(const char *s, size_t len, int rawmode, const char *encoding)
{
@ -3174,6 +3175,7 @@ decode_unicode(const char *s, size_t len, int rawmode, const char *encoding)
Py_XDECREF(u);
return v;
}
#endif
/* s is a Python string literal, including the bracketing quote characters,
* and r &/or u prefixes (if any), and embedded escape sequences (if any).