From 13f959b50185bc664497d95f3d370aa9aad34365 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Wed, 6 Oct 2010 08:35:38 +0000 Subject: Merged revisions 83561,83563,83565-83566,83569,83571,83574-83575,83580,83584,83599,83612,83659,83977,84015-84018,84020,84141 via svnmerge from svn+ssh://svn.python.org/python/branches/py3k ........ r83561 | georg.brandl | 2010-08-02 22:17:50 +0200 (Mo, 02 Aug 2010) | 1 line #4280: remove outdated "versionchecker" tool. ........ r83563 | georg.brandl | 2010-08-02 22:21:21 +0200 (Mo, 02 Aug 2010) | 1 line #9037: add example how to raise custom exceptions from C code. ........ r83565 | georg.brandl | 2010-08-02 22:27:20 +0200 (Mo, 02 Aug 2010) | 1 line #9111: document that do_help() looks at docstrings. ........ r83566 | georg.brandl | 2010-08-02 22:30:57 +0200 (Mo, 02 Aug 2010) | 1 line #9019: remove false (in 3k) claim about Headers updates. ........ r83569 | georg.brandl | 2010-08-02 22:39:35 +0200 (Mo, 02 Aug 2010) | 1 line #7797: be explicit about bytes-oriented interface of base64 functions. ........ r83571 | georg.brandl | 2010-08-02 22:44:34 +0200 (Mo, 02 Aug 2010) | 1 line Clarify that abs() is not a namespace. ........ r83574 | georg.brandl | 2010-08-02 22:47:56 +0200 (Mo, 02 Aug 2010) | 1 line #6867: epoll.register() returns None. ........ r83575 | georg.brandl | 2010-08-02 22:52:10 +0200 (Mo, 02 Aug 2010) | 1 line #9238: zipfile does handle archive comments. ........ r83580 | georg.brandl | 2010-08-02 23:02:36 +0200 (Mo, 02 Aug 2010) | 1 line #8119: fix copy-paste error. ........ r83584 | georg.brandl | 2010-08-02 23:07:14 +0200 (Mo, 02 Aug 2010) | 1 line #9457: fix documentation links for 3.2. ........ r83599 | georg.brandl | 2010-08-02 23:51:18 +0200 (Mo, 02 Aug 2010) | 1 line #9061: warn that single quotes are never escaped. ........ r83612 | georg.brandl | 2010-08-03 00:59:44 +0200 (Di, 03 Aug 2010) | 1 line Fix unicode literal. ........ r83659 | georg.brandl | 2010-08-03 14:06:29 +0200 (Di, 03 Aug 2010) | 1 line Terminology fix: exceptions are raised, except in generator.throw(). ........ r83977 | georg.brandl | 2010-08-13 17:10:49 +0200 (Fr, 13 Aug 2010) | 1 line Fix copy-paste error. ........ r84015 | georg.brandl | 2010-08-14 17:44:34 +0200 (Sa, 14 Aug 2010) | 1 line Add some maintainers. ........ r84016 | georg.brandl | 2010-08-14 17:46:15 +0200 (Sa, 14 Aug 2010) | 1 line Wording fix. ........ r84017 | georg.brandl | 2010-08-14 17:46:59 +0200 (Sa, 14 Aug 2010) | 1 line Typo fix. ........ r84018 | georg.brandl | 2010-08-14 17:48:49 +0200 (Sa, 14 Aug 2010) | 1 line Typo fix. ........ r84020 | georg.brandl | 2010-08-14 17:57:20 +0200 (Sa, 14 Aug 2010) | 1 line Fix format. ........ r84141 | georg.brandl | 2010-08-17 16:11:59 +0200 (Di, 17 Aug 2010) | 1 line Markup nits. ........ --- Doc/c-api/init.rst | 2 +- Doc/c-api/unicode.rst | 2 +- Doc/extending/extending.rst | 21 +++++++- Doc/faq/library.rst | 4 +- Doc/library/base64.rst | 30 +++++------ Doc/library/bdb.rst | 2 +- Doc/library/cgi.rst | 4 ++ Doc/library/cmd.rst | 10 ++-- Doc/library/doctest.rst | 8 +-- Doc/library/email.errors.rst | 2 +- Doc/library/html.parser.rst | 2 +- Doc/library/linecache.rst | 2 +- Doc/library/mmap.rst | 10 ++-- Doc/library/parser.rst | 14 +++--- Doc/library/pyexpat.rst | 4 +- Doc/library/smtplib.rst | 6 +-- Doc/library/string.rst | 2 +- Doc/library/sys.rst | 2 +- Doc/library/urllib.parse.rst | 10 ++-- Doc/library/wsgiref.rst | 4 +- Doc/library/xml.sax.reader.rst | 2 +- Doc/library/zipfile.rst | 7 +-- Doc/tutorial/classes.rst | 2 +- Doc/whatsnew/2.4.rst | 2 +- Modules/selectmodule.c | 5 +- README | 6 +-- Tools/scripts/win_add2path.py | 2 +- Tools/versioncheck/README | 41 --------------- Tools/versioncheck/_checkversion.py | 16 ------ Tools/versioncheck/checkversions.py | 52 ------------------- Tools/versioncheck/pyversioncheck.py | 97 ------------------------------------ configure.in | 2 +- 32 files changed, 93 insertions(+), 282 deletions(-) delete mode 100644 Tools/versioncheck/README delete mode 100644 Tools/versioncheck/_checkversion.py delete mode 100644 Tools/versioncheck/checkversions.py delete mode 100644 Tools/versioncheck/pyversioncheck.py diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst index c694abd..ae5d028 100644 --- a/Doc/c-api/init.rst +++ b/Doc/c-api/init.rst @@ -959,7 +959,7 @@ Python-level trace functions in previous versions. .. cvar:: int PyTrace_C_EXCEPTION The value for the *what* parameter to :ctype:`Py_tracefunc` functions when a C - function has thrown an exception. + function has raised an exception. .. cvar:: int PyTrace_C_RETURN diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst index 4db7671..50cc3a3 100644 --- a/Doc/c-api/unicode.rst +++ b/Doc/c-api/unicode.rst @@ -653,7 +653,7 @@ These are the UTF-7 codec APIs: *s*. Return *NULL* if an exception was raised by the codec. -.. cfunction:: PyObject* PyUnicode_DecodeUTF8Stateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed) +.. cfunction:: PyObject* PyUnicode_DecodeUTF7Stateful(const char *s, Py_ssize_t size, const char *errors, Py_ssize_t *consumed) If *consumed* is *NULL*, behave like :cfunc:`PyUnicode_DecodeUTF7`. If *consumed* is not *NULL*, trailing incomplete UTF-7 base-64 sections will not diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst index 497180a..af983b3 100644 --- a/Doc/extending/extending.rst +++ b/Doc/extending/extending.rst @@ -219,9 +219,28 @@ needed to ensure that it will not be discarded, causing :cdata:`SpamError` to become a dangling pointer. Should it become a dangling pointer, C code which raises the exception could cause a core dump or other unintended side effects. -We discuss the use of PyMODINIT_FUNC as a function return type later in this +We discuss the use of ``PyMODINIT_FUNC`` as a function return type later in this sample. +The :exc:`spam.error` exception can be raised in your extension module using a +call to :cfunc:`PyErr_SetString` as shown below:: + + static PyObject * + spam_system(PyObject *self, PyObject *args) + { + const char *command; + int sts; + + if (!PyArg_ParseTuple(args, "s", &command)) + return NULL; + sts = system(command); + if (sts < 0) { + PyErr_SetString(SpamError, "System command failed"); + return NULL; + } + return PyLong_FromLong(sts); + } + .. _backtoexample: diff --git a/Doc/faq/library.rst b/Doc/faq/library.rst index aa698e4..2d35b11 100644 --- a/Doc/faq/library.rst +++ b/Doc/faq/library.rst @@ -674,8 +674,8 @@ Yes. Here's a simple example that uses urllib.request:: '/cgi-bin/some-cgi-script', data=qs) msg, hdrs = req.read(), req.info() -Note that in general for a percent-encoded POST operations, query strings must be -quoted by using :func:`urllib.parse.urlencode`. For example to send name="Guy Steele, +Note that in general for percent-encoded POST operations, query strings must be +quoted using :func:`urllib.parse.urlencode`. For example to send name="Guy Steele, Jr.":: >>> import urllib.parse diff --git a/Doc/library/base64.rst b/Doc/library/base64.rst index 651f889..e282ea0 100644 --- a/Doc/library/base64.rst +++ b/Doc/library/base64.rst @@ -24,7 +24,7 @@ The modern interface provides: .. function:: b64encode(s, altchars=None) - Encode a string use Base64. + Encode a byte string use Base64. *s* is the string to encode. Optional *altchars* must be a string of at least length 2 (additional characters are ignored) which specifies an alternative @@ -32,54 +32,54 @@ The modern interface provides: generate URL or filesystem safe Base64 strings. The default is ``None``, for which the standard Base64 alphabet is used. - The encoded string is returned. + The encoded byte string is returned. .. function:: b64decode(s, altchars=None) - Decode a Base64 encoded string. + Decode a Base64 encoded byte string. *s* is the string to decode. Optional *altchars* must be a string of at least length 2 (additional characters are ignored) which specifies the alternative alphabet used instead of the ``+`` and ``/`` characters. - The decoded string is returned. A :exc:`TypeError` is raised if *s* were + The decoded byte string is returned. A :exc:`TypeError` is raised if *s* were incorrectly padded or if there are non-alphabet characters present in the string. .. function:: standard_b64encode(s) - Encode string *s* using the standard Base64 alphabet. + Encode byte string *s* using the standard Base64 alphabet. .. function:: standard_b64decode(s) - Decode string *s* using the standard Base64 alphabet. + Decode byte string *s* using the standard Base64 alphabet. .. function:: urlsafe_b64encode(s) - Encode string *s* using a URL-safe alphabet, which substitutes ``-`` instead of + Encode byte string *s* using a URL-safe alphabet, which substitutes ``-`` instead of ``+`` and ``_`` instead of ``/`` in the standard Base64 alphabet. The result can still contain ``=``. .. function:: urlsafe_b64decode(s) - Decode string *s* using a URL-safe alphabet, which substitutes ``-`` instead of + Decode byte string *s* using a URL-safe alphabet, which substitutes ``-`` instead of ``+`` and ``_`` instead of ``/`` in the standard Base64 alphabet. .. function:: b32encode(s) - Encode a string using Base32. *s* is the string to encode. The encoded string + Encode a byte string using Base32. *s* is the string to encode. The encoded string is returned. .. function:: b32decode(s, casefold=False, map01=None) - Decode a Base32 encoded string. + Decode a Base32 encoded byte string. *s* is the string to decode. Optional *casefold* is a flag specifying whether a lowercase alphabet is acceptable as input. For security purposes, the default @@ -92,27 +92,27 @@ The modern interface provides: digit 0 is always mapped to the letter O). For security purposes the default is ``None``, so that 0 and 1 are not allowed in the input. - The decoded string is returned. A :exc:`TypeError` is raised if *s* were + The decoded byte string is returned. A :exc:`TypeError` is raised if *s* were incorrectly padded or if there are non-alphabet characters present in the string. .. function:: b16encode(s) - Encode a string using Base16. + Encode a byte string using Base16. - *s* is the string to encode. The encoded string is returned. + *s* is the string to encode. The encoded byte string is returned. .. function:: b16decode(s, casefold=False) - Decode a Base16 encoded string. + Decode a Base16 encoded byte string. *s* is the string to decode. Optional *casefold* is a flag specifying whether a lowercase alphabet is acceptable as input. For security purposes, the default is ``False``. - The decoded string is returned. A :exc:`TypeError` is raised if *s* were + The decoded byte string is returned. A :exc:`TypeError` is raised if *s* were incorrectly padded or if there are non-alphabet characters present in the string. diff --git a/Doc/library/bdb.rst b/Doc/library/bdb.rst index 3d7e41b..d3c6981 100644 --- a/Doc/library/bdb.rst +++ b/Doc/library/bdb.rst @@ -108,7 +108,7 @@ The :mod:`bdb` module also defines two classes: * ``"exception"``: An exception has occurred. * ``"c_call"``: A C function is about to be called. * ``"c_return"``: A C function has returned. - * ``"c_exception"``: A C function has thrown an exception. + * ``"c_exception"``: A C function has raised an exception. For the Python events, specialized functions (see below) are called. For the C events, no action is taken. diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst index 1b112a6..734031d 100644 --- a/Doc/library/cgi.rst +++ b/Doc/library/cgi.rst @@ -330,6 +330,10 @@ algorithms implemented in this module in other circumstances. :func:`~xml.sax.saxutils.quoteattr` function in the :mod:`xml.sax.saxutils` module instead. + If the value to be quoted might include single- or double-quote characters, + or both, consider using the :func:`quoteattr` function in the + :mod:`xml.sax.saxutils` module instead. + .. _cgi-security: diff --git a/Doc/library/cmd.rst b/Doc/library/cmd.rst index d27dbae..d789270 100644 --- a/Doc/library/cmd.rst +++ b/Doc/library/cmd.rst @@ -76,11 +76,13 @@ A :class:`Cmd` instance has the following methods: are the beginning and ending indexes of the prefix text, which could be used to provide different completion depending upon which position the argument is in. - All subclasses of :class:`Cmd` inherit a predefined :meth:`do_help`. This + All subclasses of :class:`Cmd` inherit a predefined :meth:`do_help`. This method, called with an argument ``'bar'``, invokes the corresponding method - :meth:`help_bar`. With no argument, :meth:`do_help` lists all available help - topics (that is, all commands with corresponding :meth:`help_\*` methods), and - also lists any undocumented commands. + :meth:`help_bar`, and if that is not present, prints the docstring of + :meth:`do_bar`, if available. With no argument, :meth:`do_help` lists all + available help topics (that is, all commands with corresponding + :meth:`help_\*` methods or commands that have docstrings), and also lists any + undocumented commands. .. method:: Cmd.onecmd(str) diff --git a/Doc/library/doctest.rst b/Doc/library/doctest.rst index 2cf5fdc..baf77ac 100644 --- a/Doc/library/doctest.rst +++ b/Doc/library/doctest.rst @@ -1657,7 +1657,7 @@ There are two exceptions that may be raised by :class:`DebugRunner` instances: .. exception:: DocTestFailure(test, example, got) - An exception thrown by :class:`DocTestRunner` to signal that a doctest example's + An exception raised by :class:`DocTestRunner` to signal that a doctest example's actual output did not match its expected output. The constructor arguments are used to initialize the member variables of the same names. @@ -1681,9 +1681,9 @@ There are two exceptions that may be raised by :class:`DebugRunner` instances: .. exception:: UnexpectedException(test, example, exc_info) - An exception thrown by :class:`DocTestRunner` to signal that a doctest example - raised an unexpected exception. The constructor arguments are used to - initialize the member variables of the same names. + An exception raised by :class:`DocTestRunner` to signal that a doctest + example raised an unexpected exception. The constructor arguments are used + to initialize the member variables of the same names. :exc:`UnexpectedException` defines the following member variables: diff --git a/Doc/library/email.errors.rst b/Doc/library/email.errors.rst index 2bd3ae4..e907c51 100644 --- a/Doc/library/email.errors.rst +++ b/Doc/library/email.errors.rst @@ -17,7 +17,7 @@ The following exception classes are defined in the :mod:`email.errors` module: .. exception:: MessageParseError() - This is the base class for exceptions thrown by the :class:`~email.parser.Parser` + This is the base class for exceptions raised by the :class:`~email.parser.Parser` class. It is derived from :exc:`MessageError`. diff --git a/Doc/library/html.parser.rst b/Doc/library/html.parser.rst index c38cf2a..2bc6555 100644 --- a/Doc/library/html.parser.rst +++ b/Doc/library/html.parser.rst @@ -145,7 +145,7 @@ An exception is defined as well: Method called when an unrecognized SGML declaration is read by the parser. The *data* parameter will be the entire contents of the declaration inside the ```` markup. It is sometimes useful to be be overridden by a - derived class; the base class implementation throws an :exc:`HTMLParseError`. + derived class; the base class implementation raises an :exc:`HTMLParseError`. .. method:: HTMLParser.handle_pi(data) diff --git a/Doc/library/linecache.rst b/Doc/library/linecache.rst index 146cb27..688e297 100644 --- a/Doc/library/linecache.rst +++ b/Doc/library/linecache.rst @@ -16,7 +16,7 @@ The :mod:`linecache` module defines the following functions: .. function:: getline(filename, lineno, module_globals=None) - Get line *lineno* from file named *filename*. This function will never throw an + Get line *lineno* from file named *filename*. This function will never raise an exception --- it will return ``''`` on errors (the terminating newline character will be included for lines that are found). diff --git a/Doc/library/mmap.rst b/Doc/library/mmap.rst index bb4a515..5001d4f 100644 --- a/Doc/library/mmap.rst +++ b/Doc/library/mmap.rst @@ -165,7 +165,7 @@ To map anonymous memory, -1 should be passed as the fileno along with the length Copy the *count* bytes starting at offset *src* to the destination index *dest*. If the mmap was created with :const:`ACCESS_READ`, then calls to - move will throw a :exc:`TypeError` exception. + move will raise a :exc:`TypeError` exception. .. method:: read(num) @@ -191,7 +191,7 @@ To map anonymous memory, -1 should be passed as the fileno along with the length Resizes the map and the underlying file, if any. If the mmap was created with :const:`ACCESS_READ` or :const:`ACCESS_COPY`, resizing the map will - throw a :exc:`TypeError` exception. + raise a :exc:`TypeError` exception. .. method:: rfind(sub[, start[, end]]) @@ -226,7 +226,7 @@ To map anonymous memory, -1 should be passed as the fileno along with the length Write the bytes in *bytes* into memory at the current position of the file pointer; the file position is updated to point after the bytes that were written. If the mmap was created with :const:`ACCESS_READ`, then - writing to it will throw a :exc:`TypeError` exception. + writing to it will raise a :exc:`TypeError` exception. .. method:: write_byte(byte) @@ -234,6 +234,4 @@ To map anonymous memory, -1 should be passed as the fileno along with the length Write the the integer *byte* into memory at the current position of the file pointer; the file position is advanced by ``1``. If the mmap was created with :const:`ACCESS_READ`, then writing to it will - throw a :exc:`TypeError` exception. - - + raise a :exc:`TypeError` exception. diff --git a/Doc/library/parser.rst b/Doc/library/parser.rst index 5aad938..b79e8d3 100644 --- a/Doc/library/parser.rst +++ b/Doc/library/parser.rst @@ -115,7 +115,7 @@ and ``'exec'`` forms. The :func:`expr` function parses the parameter *source* as if it were an input to ``compile(source, 'file.py', 'eval')``. If the parse succeeds, an ST object is created to hold the internal parse tree representation, otherwise an - appropriate exception is thrown. + appropriate exception is raised. .. function:: suite(source) @@ -123,7 +123,7 @@ and ``'exec'`` forms. The :func:`suite` function parses the parameter *source* as if it were an input to ``compile(source, 'file.py', 'exec')``. If the parse succeeds, an ST object is created to hold the internal parse tree representation, otherwise an - appropriate exception is thrown. + appropriate exception is raised. .. function:: sequence2st(sequence) @@ -133,9 +133,9 @@ and ``'exec'`` forms. to the Python grammar and all nodes are valid node types in the host version of Python, an ST object is created from the internal representation and returned to the called. If there is a problem creating the internal representation, or - if the tree cannot be validated, a :exc:`ParserError` exception is thrown. An + if the tree cannot be validated, a :exc:`ParserError` exception is raised. An ST object created this way should not be assumed to compile correctly; normal - exceptions thrown by compilation may still be initiated when the ST object is + exceptions raised by compilation may still be initiated when the ST object is passed to :func:`compilest`. This may indicate problems not related to syntax (such as a :exc:`MemoryError` exception), but may also be due to constructs such as the result of parsing ``del f(0)``, which escapes the Python parser but is @@ -260,8 +260,8 @@ function for information about the exceptions it can raise. .. exception:: ParserError Exception raised when a failure occurs within the parser module. This is - generally produced for validation failures rather than the built in - :exc:`SyntaxError` thrown during normal parsing. The exception argument is + generally produced for validation failures rather than the built-in + :exc:`SyntaxError` raised during normal parsing. The exception argument is either a string describing the reason of the failure or a tuple containing a sequence causing the failure from a parse tree passed to :func:`sequence2st` and an explanatory string. Calls to :func:`sequence2st` need to be able to @@ -269,7 +269,7 @@ function for information about the exceptions it can raise. will only need to be aware of the simple string values. Note that the functions :func:`compilest`, :func:`expr`, and :func:`suite` may -throw exceptions which are normally thrown by the parsing and compilation +raise exceptions which are normally thrown by the parsing and compilation process. These include the built in exceptions :exc:`MemoryError`, :exc:`OverflowError`, :exc:`SyntaxError`, and :exc:`SystemError`. In these cases, these exceptions carry all the meaning normally associated with them. diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst index 6fe60ad..30a98fc 100644 --- a/Doc/library/pyexpat.rst +++ b/Doc/library/pyexpat.rst @@ -430,7 +430,7 @@ otherwise stated. Called if the XML document hasn't been declared as being a standalone document. This happens when there is an external subset or a reference to a parameter entity, but the XML declaration does not set standalone to ``yes`` in an XML - declaration. If this handler returns ``0``, then the parser will throw an + declaration. If this handler returns ``0``, then the parser will raise an :const:`XML_ERROR_NOT_STANDALONE` error. If this handler is not set, no exception is raised by the parser for this condition. @@ -447,7 +447,7 @@ otherwise stated. responsible for creating the sub-parser using ``ExternalEntityParserCreate(context)``, initializing it with the appropriate callbacks, and parsing the entity. This handler should return an integer; if it - returns ``0``, the parser will throw an + returns ``0``, the parser will raise an :const:`XML_ERROR_EXTERNAL_ENTITY_HANDLING` error, otherwise parsing will continue. diff --git a/Doc/library/smtplib.rst b/Doc/library/smtplib.rst index fe3e14e..9303c3e 100644 --- a/Doc/library/smtplib.rst +++ b/Doc/library/smtplib.rst @@ -285,9 +285,9 @@ An :class:`SMTP` instance has the following methods: and ESMTP options suppressed. This method will return normally if the mail is accepted for at least one - recipient. Otherwise it will throw an exception. That is, if this method does - not throw an exception, then someone should get your mail. If this method does - not throw an exception, it returns a dictionary, with one entry for each + recipient. Otherwise it will raise an exception. That is, if this method does + not raise an exception, then someone should get your mail. If this method does + not raise an exception, it returns a dictionary, with one entry for each recipient that was refused. Each entry contains a tuple of the SMTP error code and the accompanying error message sent by the server. diff --git a/Doc/library/string.rst b/Doc/library/string.rst index 46907aa..dd04e32 100644 --- a/Doc/library/string.rst +++ b/Doc/library/string.rst @@ -163,7 +163,7 @@ implementation as the built-in :meth:`format` method. the format string (integers for positional arguments, and strings for named arguments), and a reference to the *args* and *kwargs* that was passed to vformat. The set of unused args can be calculated from these - parameters. :meth:`check_unused_args` is assumed to throw an exception if + parameters. :meth:`check_unused_args` is assumed to raise an exception if the check fails. .. method:: format_field(value, format_spec) diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index 5d40d5e..b1044c8 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -762,7 +762,7 @@ always available. A C function has returned. *arg* is ``None``. ``'c_exception'`` - A C function has thrown an exception. *arg* is ``None``. + A C function has raised an exception. *arg* is ``None``. Note that as an exception is propagated down the chain of callers, an ``'exception'`` event is generated at each level. diff --git a/Doc/library/urllib.parse.rst b/Doc/library/urllib.parse.rst index 37ddea0..3cf4376 100644 --- a/Doc/library/urllib.parse.rst +++ b/Doc/library/urllib.parse.rst @@ -48,11 +48,11 @@ The :mod:`urllib.parse` module defines the following functions: >>> o.geturl() 'http://www.cwi.nl:80/%7Eguido/Python.html' - If the scheme value is not specified, urlparse following the syntax - specifications from RFC 1808, expects the netloc value to start with '//', - Otherwise, it is not possible to distinguish between net_loc and path - component and would classify the indistinguishable component as path as in - a relative url. + If the scheme value is not specified, urlparse expects the netloc value to + start with '//', following the syntax specifications from :rfc:`1808`. + Otherwise, it is not possible to distinguish between netloc and path + components, and would the indistinguishable component would be classified + as the path as in a relative URL. >>> from urlparse import urlparse >>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html') diff --git a/Doc/library/wsgiref.rst b/Doc/library/wsgiref.rst index 803db26..4ac8df7 100644 --- a/Doc/library/wsgiref.rst +++ b/Doc/library/wsgiref.rst @@ -187,9 +187,7 @@ manipulation of WSGI response headers using a mapping-like interface. .. class:: Headers(headers) Create a mapping-like object wrapping *headers*, which must be a list of header - name/value tuples as described in :pep:`333`. Any changes made to the new - :class:`Headers` object will directly update the *headers* list it was created - with. + name/value tuples as described in :pep:`333`. :class:`Headers` objects support typical mapping operations including :meth:`__getitem__`, :meth:`get`, :meth:`__setitem__`, :meth:`setdefault`, diff --git a/Doc/library/xml.sax.reader.rst b/Doc/library/xml.sax.reader.rst index fb91389..6683da1 100644 --- a/Doc/library/xml.sax.reader.rst +++ b/Doc/library/xml.sax.reader.rst @@ -154,7 +154,7 @@ The :class:`XMLReader` interface supports the following methods: Allow an application to set the locale for errors and warnings. SAX parsers are not required to provide localization for errors and warnings; if - they cannot support the requested locale, however, they must throw a SAX + they cannot support the requested locale, however, they must raise a SAX exception. Applications may request a locale change in the middle of a parse. diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst index f414853..7c4721d 100644 --- a/Doc/library/zipfile.rst +++ b/Doc/library/zipfile.rst @@ -12,10 +12,8 @@ advanced use of this module will require an understanding of the format, as defined in `PKZIP Application Note `_. -This module does not currently handle multi-disk ZIP files, or ZIP files -which have appended comments (although it correctly handles comments -added to individual archive members---for which see the :ref:`zipinfo-objects` -documentation). It can handle ZIP files that use the ZIP64 extensions +This module does not currently handle multi-disk ZIP files. +It can handle ZIP files that use the ZIP64 extensions (that is ZIP files that are more than 4 GByte in size). It supports decryption of encrypted files in ZIP archives, but it currently cannot create an encrypted file. Decryption is extremely slow as it is @@ -64,7 +62,6 @@ The module defines the following items: Returns ``True`` if *filename* is a valid ZIP file based on its magic number, otherwise returns ``False``. *filename* may be a file or file-like object too. - This module does not currently handle ZIP files which have appended comments. .. versionchanged:: 3.1 Support for file and file-like objects. diff --git a/Doc/tutorial/classes.rst b/Doc/tutorial/classes.rst index 4c0c85a..a774979 100644 --- a/Doc/tutorial/classes.rst +++ b/Doc/tutorial/classes.rst @@ -65,7 +65,7 @@ Let's begin with some definitions. A *namespace* is a mapping from names to objects. Most namespaces are currently implemented as Python dictionaries, but that's normally not noticeable in any way (except for performance), and it may change in the future. Examples of -namespaces are: the set of built-in names (functions such as :func:`abs`, and +namespaces are: the set of built-in names (containing functions such as :func:`abs`, and built-in exception names); the global names in a module; and the local names in a function invocation. In a sense the set of attributes of an object also form a namespace. The important thing to know about namespaces is that there is diff --git a/Doc/whatsnew/2.4.rst b/Doc/whatsnew/2.4.rst index 27e412e..fadde50 100644 --- a/Doc/whatsnew/2.4.rst +++ b/Doc/whatsnew/2.4.rst @@ -1066,7 +1066,7 @@ complete list of changes, or look through the CVS logs for all the details. deprecated APIs and removes support for Python versions earlier than 2.3. The 3.0 version of the package uses a new incremental parser for MIME messages, available in the :mod:`email.FeedParser` module. The new parser doesn't require - reading the entire message into memory, and doesn't throw exceptions if a + reading the entire message into memory, and doesn't raise exceptions if a message is malformed; instead it records any problems in the :attr:`defect` attribute of the message. (Developed by Anthony Baxter, Barry Warsaw, Thomas Wouters, and others.) diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c index ebfbb9c..3da910c 100644 --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -915,10 +915,9 @@ pyepoll_register(pyEpoll_Object *self, PyObject *args, PyObject *kwds) } PyDoc_STRVAR(pyepoll_register_doc, -"register(fd[, eventmask]) -> bool\n\ +"register(fd[, eventmask]) -> None\n\ \n\ -Registers a new fd or modifies an already registered fd. register() returns\n\ -True if a new fd was registered or False if the event mask for fd was modified.\n\ +Registers a new fd or modifies an already registered fd.\n\ fd is the target file descriptor of the operation.\n\ events is a bit set composed of the various EPOLL constants; the default\n\ is EPOLL_IN | EPOLL_OUT | EPOLL_PRI.\n\ diff --git a/README b/README index c1b00cc..e374627 100644 --- a/README +++ b/README @@ -55,7 +55,7 @@ What's New We try to have a comprehensive overview of the changes in the "What's New in Python 3.1" document, found at - http://docs.python.org/dev/3.1/whatsnew/3.1.html + http://docs.python.org/3.1/whatsnew/3.1.html For a more detailed change log, read Misc/NEWS (though this file, too, is incomplete, and also doesn't list anything merged in from the 2.7 @@ -70,7 +70,7 @@ Documentation Documentation for Python 3.1 is online, updated twice a day: - http://docs.python.org/dev/3.1/ + http://docs.python.org/3.1/ All documentation is also available online at the Python web site (http://docs.python.org/, see below). It is available online for @@ -91,7 +91,7 @@ used, and backported versions of certain key Python 3.x features. A source-to-source translation tool, "2to3", can take care of the mundane task of converting large amounts of source code. It is not a complete solution but is complemented by the deprecation warnings in 2.6. See -http://docs.python.org/dev/py3k/library/2to3.html for more information. +http://docs.python.org/py3k/library/2to3.html for more information. Testing diff --git a/Tools/scripts/win_add2path.py b/Tools/scripts/win_add2path.py index b024789..9259b44 100644 --- a/Tools/scripts/win_add2path.py +++ b/Tools/scripts/win_add2path.py @@ -15,7 +15,7 @@ import winreg HKCU = winreg.HKEY_CURRENT_USER ENV = "Environment" PATH = "PATH" -DEFAULT = u"%PATH%" +DEFAULT = "%PATH%" def modify(): pythonpath = os.path.dirname(os.path.normpath(sys.executable)) diff --git a/Tools/versioncheck/README b/Tools/versioncheck/README deleted file mode 100644 index 1dd2eca..0000000 --- a/Tools/versioncheck/README +++ /dev/null @@ -1,41 +0,0 @@ -This is versioncheck 1.0, a first stab at automatic checking of versions of -Python extension packages installed on your system. - -The basic idea is that each package contains a _checkversion.py -somewhere, probably at the root level of the package. In addition, each -package maintainer makes a file available on the net, through ftp or -http, which contains the version number of the most recent distribution -and some readable text explaining the differences with previous -versions, where to download the package, etc. - -The checkversions.py script walks through the installed Python tree (or -through a tree of choice), and runs each _checkversion.py script. These -scripts retrieve the current-version file over the net, compares version -numbers and tells the user about new versions of packages available. - -A boilerplate for the _checkversion.py file can be found here. Replace -package name, version and the URL of the version-check file and put it in -your distribution. In stead of a single URL you can also specify a list -of URLs. Each of these will be checked in order until one is available, -this is handy for distributions that live in multiple places. Put the -primary distribution site (the most up-to-date site) before others. -The script is read and executed with exec(), not imported, and the current -directory is the checkversion directory, so be careful with globals, -importing, etc. - -The version-check file consists of an rfc822-style header followed by -plaintext. The only header field checked currently is -'Current-Version:', which should contain te current version and is -matched against the string contained in the _checkversion.py script. -The rest of the file is human-readable text and presented to the user if -there is a version mismatch. It should contain at the very least a URL -of either the current distribution or a webpage describing it. - -Pycheckversion.py is the module that does the actual checking of versions. -It should be fine where it is, it is imported by checkversion before anything -else is done, but if imports fail you may want to move it to somewhere -along sys.path. - - Jack Jansen, CWI, 23-Dec-97. - - diff --git a/Tools/versioncheck/_checkversion.py b/Tools/versioncheck/_checkversion.py deleted file mode 100644 index 7b3bb50..0000000 --- a/Tools/versioncheck/_checkversion.py +++ /dev/null @@ -1,16 +0,0 @@ -"""This file (which is sourced, not imported) checks the version of the -"versioncheck" package. It is also an example of how to format your own -_checkversion.py file""" - -import pyversioncheck - -_PACKAGE="versioncheck" -_VERSION="1.0" -_URL="http://www.cwi.nl/~jack/versioncheck/curversion.txt" - -try: - _myverbose=VERBOSE -except NameError: - _myverbose=1 - -pyversioncheck.versioncheck(_PACKAGE, _URL, _VERSION, verbose=_myverbose) diff --git a/Tools/versioncheck/checkversions.py b/Tools/versioncheck/checkversions.py deleted file mode 100644 index f110cac..0000000 --- a/Tools/versioncheck/checkversions.py +++ /dev/null @@ -1,52 +0,0 @@ -"""Checkversions - recursively search a directory (default: sys.prefix) -for _checkversion.py files, and run each of them. This will tell you of -new versions available for any packages you have installed.""" - -import os -import getopt -import sys -import pyversioncheck - -CHECKNAME="_checkversion.py" - -VERBOSE=1 - -USAGE="""Usage: checkversions [-v verboselevel] [dir ...] -Recursively examine a tree (default: sys.prefix) and for each package -with a _checkversion.py file compare the installed version against the current -version. - -Values for verboselevel: -0 - Minimal output, one line per package -1 - Also print descriptions for outdated packages (default) -2 - Print information on each URL checked -3 - Check every URL for packages with multiple locations""" - -def check1dir(dummy, dir, files): - if CHECKNAME in files: - fullname = os.path.join(dir, CHECKNAME) - try: - exec(open(fullname).read()) - except: - print('** Exception in', fullname) - -def walk1tree(tree): - os.walk(tree, check1dir, None) - -def main(): - global VERBOSE - try: - options, arguments = getopt.getopt(sys.argv[1:], 'v:') - except getopt.error: - print(USAGE) - sys.exit(1) - for o, a in options: - if o == '-v': - VERBOSE = int(a) - if not arguments: - arguments = [sys.prefix] - for dir in arguments: - walk1tree(dir) - -if __name__ == '__main__': - main() diff --git a/Tools/versioncheck/pyversioncheck.py b/Tools/versioncheck/pyversioncheck.py deleted file mode 100644 index 250d49d..0000000 --- a/Tools/versioncheck/pyversioncheck.py +++ /dev/null @@ -1,97 +0,0 @@ -"""pyversioncheck - Module to help with checking versions""" -import urllib.request -import email -import sys - -# Verbose options -VERBOSE_SILENT=0 # Single-line reports per package -VERBOSE_NORMAL=1 # Single-line reports per package, more info if outdated -VERBOSE_EACHFILE=2 # Report on each URL checked -VERBOSE_CHECKALL=3 # Check each URL for each package - -# Test directory -## urllib bug: _TESTDIR="ftp://ftp.cwi.nl/pub/jack/python/versiontestdir/" -_TESTDIR="http://www.cwi.nl/~jack/versiontestdir/" - -def versioncheck(package, url, version, verbose=0): - ok, newversion, fp = checkonly(package, url, version, verbose) - if verbose > VERBOSE_NORMAL: - return ok - if ok < 0: - print('%s: No correctly formatted current version file found'%(package)) - elif ok == 1: - print('%s: up-to-date (version %s)'%(package, version)) - else: - print('%s: version %s installed, version %s found:' % \ - (package, version, newversion)) - if verbose > VERBOSE_SILENT: - while 1: - line = fp.readline() - if not line: break - sys.stdout.write('\t'+line) - return ok - -def checkonly(package, url, version, verbose=0): - if verbose >= VERBOSE_EACHFILE: - print('%s:'%package) - if isinstance(url, str): - ok, newversion, fp = _check1version(package, url, version, verbose) - else: - for u in url: - ok, newversion, fp = _check1version(package, u, version, verbose) - if ok >= 0 and verbose < VERBOSE_CHECKALL: - break - return ok, newversion, fp - -def _check1version(package, url, version, verbose=0): - if verbose >= VERBOSE_EACHFILE: - print(' Checking %s'%url) - try: - fp = urllib.request.urlopen(url) - except IOError as arg: - if verbose >= VERBOSE_EACHFILE: - print(' Cannot open:', arg) - return -1, None, None - msg = email.message_from_file(fp) - newversion = msg.get('current-version') - if not newversion: - if verbose >= VERBOSE_EACHFILE: - print(' No "Current-Version:" header in URL or URL not found') - return -1, None, None - version = version.lower().strip() - newversion = newversion.lower().strip() - if version == newversion: - if verbose >= VERBOSE_EACHFILE: - print(' Version identical (%s)'%newversion) - return 1, version, fp - else: - if verbose >= VERBOSE_EACHFILE: - print(' Versions different (installed: %s, new: %s)'% \ - (version, newversion)) - return 0, newversion, fp - - -def _test(): - print('--- TEST VERBOSE=1') - print('--- Testing existing and identical version file') - versioncheck('VersionTestPackage', _TESTDIR+'Version10.txt', '1.0', verbose=1) - print('--- Testing existing package with new version') - versioncheck('VersionTestPackage', _TESTDIR+'Version11.txt', '1.0', verbose=1) - print('--- Testing package with non-existing version file') - versioncheck('VersionTestPackage', _TESTDIR+'nonexistent.txt', '1.0', verbose=1) - print('--- Test package with 2 locations, first non-existing second ok') - versfiles = [_TESTDIR+'nonexistent.txt', _TESTDIR+'Version10.txt'] - versioncheck('VersionTestPackage', versfiles, '1.0', verbose=1) - print('--- TEST VERBOSE=2') - print('--- Testing existing and identical version file') - versioncheck('VersionTestPackage', _TESTDIR+'Version10.txt', '1.0', verbose=2) - print('--- Testing existing package with new version') - versioncheck('VersionTestPackage', _TESTDIR+'Version11.txt', '1.0', verbose=2) - print('--- Testing package with non-existing version file') - versioncheck('VersionTestPackage', _TESTDIR+'nonexistent.txt', '1.0', verbose=2) - print('--- Test package with 2 locations, first non-existing second ok') - versfiles = [_TESTDIR+'nonexistent.txt', _TESTDIR+'Version10.txt'] - versioncheck('VersionTestPackage', versfiles, '1.0', verbose=2) - -if __name__ == '__main__': - _test() diff --git a/configure.in b/configure.in index 0cd5514..6587bee 100644 --- a/configure.in +++ b/configure.in @@ -2463,7 +2463,7 @@ then fi AC_MSG_RESULT($with_doc_strings) -# Check for Python-specific malloc support +# Check if eval loop should use timestamp counter profiling AC_MSG_CHECKING(for --with-tsc) AC_ARG_WITH(tsc, [ --with(out)-tsc enable/disable timestamp counter profile], [ -- cgit v0.12