Merged revisions 68292,68344,68361,68378,68424,68426,68429-68430,68450,68457,68480-68481,68493,68495,68499,68501,68512,68514-68515 via svnmerge from

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

........
  r68292 | skip.montanaro | 2009-01-04 11:36:58 +0100 (So, 04 Jan 2009) | 3 lines

  If user configures --without-gcc give preference to $CC instead of blindly
  assuming the compiler will be "cc".
........
  r68344 | marc-andre.lemburg | 2009-01-05 20:43:35 +0100 (Mo, 05 Jan 2009) | 7 lines

  Fix #4846 (Py_UNICODE_ISSPACE causes linker error) by moving the declaration
  into the extern "C" section.

  Add a few more comments and apply some minor edits to make the file contents
  fit the original structure again.
........
  r68361 | antoine.pitrou | 2009-01-06 19:34:08 +0100 (Di, 06 Jan 2009) | 3 lines

  Use shutil.rmtree rather than os.rmdir.
........
  r68378 | mark.dickinson | 2009-01-07 18:48:33 +0100 (Mi, 07 Jan 2009) | 2 lines

  Issue #4869: clarify documentation for random.expovariate.
........
  r68424 | benjamin.peterson | 2009-01-09 03:53:35 +0100 (Fr, 09 Jan 2009) | 1 line

  specify what -3 warnings are about
........
  r68426 | benjamin.peterson | 2009-01-09 04:03:05 +0100 (Fr, 09 Jan 2009) | 1 line

  fix spelling
........
  r68429 | benjamin.peterson | 2009-01-09 04:05:14 +0100 (Fr, 09 Jan 2009) | 1 line

  add -3 to manpage
........
  r68430 | benjamin.peterson | 2009-01-09 04:07:27 +0100 (Fr, 09 Jan 2009) | 1 line

  be more specific in -3 option help
........
  r68450 | jeffrey.yasskin | 2009-01-09 17:47:07 +0100 (Fr, 09 Jan 2009) | 3 lines

  Fix issue 4884, preventing a crash in the socket code when python is compiled
  with llvm-gcc and run with a glibc <2.10.
........
  r68457 | kristjan.jonsson | 2009-01-09 21:10:59 +0100 (Fr, 09 Jan 2009) | 1 line

  Issue 3677:  Fix import from UNC paths on Windows.
........
  r68480 | vinay.sajip | 2009-01-10 14:38:04 +0100 (Sa, 10 Jan 2009) | 1 line

  Minor documentation changes cross-referencing NullHandler to the documentation on configuring logging in a library.
........
  r68481 | vinay.sajip | 2009-01-10 14:42:04 +0100 (Sa, 10 Jan 2009) | 1 line

  Corrected an incorrect self-reference.
........
  r68493 | benjamin.peterson | 2009-01-10 18:18:55 +0100 (Sa, 10 Jan 2009) | 1 line

  rewrite verbose conditionals
........
  r68495 | benjamin.peterson | 2009-01-10 18:36:44 +0100 (Sa, 10 Jan 2009) | 1 line

  tp_iter only exists with Py_TPFLAGS_HAVE_ITER #4901
........
  r68499 | mark.dickinson | 2009-01-10 20:14:55 +0100 (Sa, 10 Jan 2009) | 2 lines

  Remove an unnecessary check from test_decimal.
........
  r68501 | vinay.sajip | 2009-01-10 20:22:57 +0100 (Sa, 10 Jan 2009) | 1 line

  Corrected minor typo and added .currentmodule directives to fix missing cross-references.
........
  r68512 | benjamin.peterson | 2009-01-10 23:42:10 +0100 (Sa, 10 Jan 2009) | 1 line

  make tests fail if they can't be imported
........
  r68514 | benjamin.peterson | 2009-01-11 00:41:59 +0100 (So, 11 Jan 2009) | 1 line

  move seealso to a more appropiate place
........
  r68515 | benjamin.peterson | 2009-01-11 00:49:08 +0100 (So, 11 Jan 2009) | 1 line

  macos 9 isn't supported
........
This commit is contained in:
Georg Brandl 2009-01-14 00:00:17 +00:00
parent a1b22ce68c
commit c04c2890c7
17 changed files with 103 additions and 53 deletions

View File

@ -743,7 +743,7 @@ set.
:attr:`__weakref__`, the type inherits its :attr:`tp_weaklistoffset` from its :attr:`__weakref__`, the type inherits its :attr:`tp_weaklistoffset` from its
base type. base type.
The next two fields only exist if the :const:`Py_TPFLAGS_HAVE_CLASS` flag bit is The next two fields only exist if the :const:`Py_TPFLAGS_HAVE_ITER` flag bit is
set. set.

View File

@ -121,7 +121,7 @@ Another useful feature of the logging API is the ability to produce different
messages at different log levels. This allows you to instrument your code with messages at different log levels. This allows you to instrument your code with
debug messages, for example, but turning the log level down so that those debug debug messages, for example, but turning the log level down so that those debug
messages are not written for your production system. The default levels are messages are not written for your production system. The default levels are
``CRITICAL``, ``ERROR``, ``WARNING``, ``INFO``, ``DEBUG`` and ``UNSET``. ``CRITICAL``, ``ERROR``, ``WARNING``, ``INFO``, ``DEBUG`` and ``NOTSET``.
The logger, handler, and log message call each specify a level. The log message The logger, handler, and log message call each specify a level. The log message
is only emitted if the handler and logger are configured to emit messages of is only emitted if the handler and logger are configured to emit messages of
@ -422,6 +422,8 @@ You can see that the config file approach has a few advantages over the Python
code approach, mainly separation of configuration and code and the ability of code approach, mainly separation of configuration and code and the ability of
noncoders to easily modify the logging properties. noncoders to easily modify the logging properties.
.. _library-config:
Configuring Logging for a Library Configuring Logging for a Library
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -524,6 +526,8 @@ provided:
#. :class:`FileHandler` instances send error messages to disk files. #. :class:`FileHandler` instances send error messages to disk files.
.. currentmodule:: logging.handlers
#. :class:`BaseRotatingHandler` is the base class for handlers that rotate log #. :class:`BaseRotatingHandler` is the base class for handlers that rotate log
files at a certain point. It is not meant to be instantiated directly. Instead, files at a certain point. It is not meant to be instantiated directly. Instead,
use :class:`RotatingFileHandler` or :class:`TimedRotatingFileHandler`. use :class:`RotatingFileHandler` or :class:`TimedRotatingFileHandler`.
@ -553,7 +557,12 @@ provided:
#. :class:`HTTPHandler` instances send error messages to an HTTP server using #. :class:`HTTPHandler` instances send error messages to an HTTP server using
either ``GET`` or ``POST`` semantics. either ``GET`` or ``POST`` semantics.
The :class:`NullHandler`, :class:`StreamHandler` and :class:`FileHandler` #. :class:`WatchedFileHandler` instances watch the file they are logging to. If
the file changes, it is closed and reopened using the file name. This handler
is only useful on Unix-like systems; Windows does not support the underlying
mechanism used.
The :class:`StreamHandler` and :class:`FileHandler`
classes are defined in the core logging package. The other handlers are classes are defined in the core logging package. The other handlers are
defined in a sub- module, :mod:`logging.handlers`. (There is also another defined in a sub- module, :mod:`logging.handlers`. (There is also another
sub-module, :mod:`logging.config`, for configuration functionality.) sub-module, :mod:`logging.config`, for configuration functionality.)
@ -1601,6 +1610,9 @@ sends logging output to a disk file. It inherits the output functionality from
Outputs the record to the file. Outputs the record to the file.
See :ref:`library-config` for more information on how to use
:class:`NullHandler`.
WatchedFileHandler WatchedFileHandler
^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^

View File

@ -210,9 +210,11 @@ be found in any statistics text.
.. function:: expovariate(lambd) .. function:: expovariate(lambd)
Exponential distribution. *lambd* is 1.0 divided by the desired mean. (The Exponential distribution. *lambd* is 1.0 divided by the desired
parameter would be called "lambda", but that is a reserved word in Python.) mean. It should be nonzero. (The parameter would be called
Returned values range from 0 to positive infinity. "lambda", but that is a reserved word in Python.) Returned values
range from 0 to positive infinity if *lambd* is positive, and from
negative infinity to 0 if *lambd* is negative.
.. function:: gammavariate(alpha, beta) .. function:: gammavariate(alpha, beta)

View File

@ -566,6 +566,10 @@ always available.
.. versionchanged:: 2.3 .. versionchanged:: 2.3
Unicode strings are no longer ignored. Unicode strings are no longer ignored.
.. seealso::
Module :mod:`site` This describes how to use .pth files to extend
:data:`sys.path`.
.. data:: platform .. data:: platform
@ -583,7 +587,6 @@ always available.
Windows ``'win32'`` Windows ``'win32'``
Windows/Cygwin ``'cygwin'`` Windows/Cygwin ``'cygwin'``
Mac OS X ``'darwin'`` Mac OS X ``'darwin'``
Mac OS 9 ``'mac'``
OS/2 ``'os2'`` OS/2 ``'os2'``
OS/2 EMX ``'os2emx'`` OS/2 EMX ``'os2emx'``
RiscOS ``'riscos'`` RiscOS ``'riscos'``
@ -869,10 +872,3 @@ always available.
first three characters of :const:`version`. It is provided in the :mod:`sys` first three characters of :const:`version`. It is provided in the :mod:`sys`
module for informational purposes; modifying this value has no effect on the module for informational purposes; modifying this value has no effect on the
registry keys used by Python. Availability: Windows. registry keys used by Python. Availability: Windows.
.. seealso::
Module :mod:`site`
This describes how to use .pth files to extend ``sys.path``.

View File

@ -356,7 +356,8 @@ Miscellaneous options
.. cmdoption:: -3 .. cmdoption:: -3
Warn about Python 3.x incompatibilities. Among these are: Warn about Python 3.x incompatibilities which cannot be fixed trivially by
:ref:`2to3 <2to3-reference>`. Among these are:
* :meth:`dict.has_key` * :meth:`dict.has_key`
* :func:`apply` * :func:`apply`

View File

@ -709,6 +709,15 @@ typedef struct fd_set {
#define Py_FORMAT_PARSETUPLE(func,p1,p2) #define Py_FORMAT_PARSETUPLE(func,p1,p2)
#endif #endif
/*
* Specify alignment on compilers that support it.
*/
#if defined(__GNUC__) && __GNUC__ >= 3
#define Py_ALIGNED(x) __attribute__((aligned(x)))
#else
#define Py_ALIGNED(x)
#endif
/* Eliminate end-of-loop code not reached warnings from SunPro C /* Eliminate end-of-loop code not reached warnings from SunPro C
* when using do{...}while(0) macros * when using do{...}while(0) macros
*/ */

View File

@ -130,6 +130,10 @@ typedef unsigned int Py_UCS4;
typedef unsigned long Py_UCS4; typedef unsigned long Py_UCS4;
#endif #endif
/* Py_UNICODE is the native Unicode storage format (code unit) used by
Python and represents a single Unicode element in the Unicode
type. */
typedef PY_UNICODE_TYPE Py_UNICODE; typedef PY_UNICODE_TYPE Py_UNICODE;
/* --- UCS-2/UCS-4 Name Mangling ------------------------------------------ */ /* --- UCS-2/UCS-4 Name Mangling ------------------------------------------ */
@ -350,12 +354,12 @@ typedef PY_UNICODE_TYPE Py_UNICODE;
#else #else
/* Since splitting on whitespace is an important use case, and whitespace /* Since splitting on whitespace is an important use case, and
in most situations is solely ASCII whitespace, we optimize for the common whitespace in most situations is solely ASCII whitespace, we
case by using a quick look-up table with an inlined check. optimize for the common case by using a quick look-up table
*/ _Py_ascii_whitespace (see below) with an inlined check.
PyAPI_DATA(const unsigned char) _Py_ascii_whitespace[];
*/
#define Py_UNICODE_ISSPACE(ch) \ #define Py_UNICODE_ISSPACE(ch) \
((ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch)) ((ch) < 128U ? _Py_ascii_whitespace[(ch)] : _PyUnicode_IsWhitespace(ch))
@ -389,13 +393,14 @@ PyAPI_DATA(const unsigned char) _Py_ascii_whitespace[];
#define Py_UNICODE_COPY(target, source, length) \ #define Py_UNICODE_COPY(target, source, length) \
Py_MEMCPY((target), (source), (length)*sizeof(Py_UNICODE)) Py_MEMCPY((target), (source), (length)*sizeof(Py_UNICODE))
#define Py_UNICODE_FILL(target, value, length) do\ #define Py_UNICODE_FILL(target, value, length) \
{Py_ssize_t i_; Py_UNICODE *t_ = (target); Py_UNICODE v_ = (value);\ do {Py_ssize_t i_; Py_UNICODE *t_ = (target); Py_UNICODE v_ = (value);\
for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\ for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\
} while (0) } while (0)
/* check if substring matches at given offset. the offset must be /* Check if substring matches at given offset. the offset must be
valid, and the substring must not be empty */ valid, and the substring must not be empty */
#define Py_UNICODE_MATCH(string, offset, substring) \ #define Py_UNICODE_MATCH(string, offset, substring) \
((*((string)->str + (offset)) == *((substring)->str)) && \ ((*((string)->str + (offset)) == *((substring)->str)) && \
((*((string)->str + (offset) + (substring)->length-1) == *((substring)->str + (substring)->length-1))) && \ ((*((string)->str + (offset) + (substring)->length-1) == *((substring)->str + (substring)->length-1))) && \
@ -405,8 +410,6 @@ PyAPI_DATA(const unsigned char) _Py_ascii_whitespace[];
extern "C" { extern "C" {
#endif #endif
PyAPI_FUNC(int) PyUnicode_ClearFreeList(void);
/* --- Unicode Type ------------------------------------------------------- */ /* --- Unicode Type ------------------------------------------------------- */
typedef struct { typedef struct {
@ -605,6 +608,17 @@ PyAPI_FUNC(Py_ssize_t) PyUnicode_AsWideChar(
PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal); PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal);
/* --- Free-list management ----------------------------------------------- */
/* Clear the free list used by the Unicode implementation.
This can be used to release memory used for objects on the free
list back to the Python memory allocator.
*/
PyAPI_FUNC(int) PyUnicode_ClearFreeList(void);
/* === Builtin Codecs ===================================================== /* === Builtin Codecs =====================================================
Many of these APIs take two arguments encoding and errors. These Many of these APIs take two arguments encoding and errors. These
@ -1323,6 +1337,10 @@ PyAPI_FUNC(PyObject *) _PyUnicode_XStrip(
/* === Characters Type APIs =============================================== */ /* === Characters Type APIs =============================================== */
/* Helper array used by Py_UNICODE_ISSPACE(). */
PyAPI_DATA(const unsigned char) _Py_ascii_whitespace[];
/* These should not be used directly. Use the Py_UNICODE_IS* and /* These should not be used directly. Use the Py_UNICODE_IS* and
Py_UNICODE_TO* macros instead. Py_UNICODE_TO* macros instead.

View File

@ -67,9 +67,6 @@ def get_tests(package, mask, verbosity, exclude=()):
if verbosity > 1: if verbosity > 1:
print >> sys.stderr, "Skipped %s: %s" % (modname, detail) print >> sys.stderr, "Skipped %s: %s" % (modname, detail)
continue continue
except Exception, detail:
print >> sys.stderr, "Warning: could not import %s: %s" % (modname, detail)
continue
for name in dir(mod): for name in dir(mod):
if name.startswith("_"): if name.startswith("_"):
continue continue

View File

@ -413,9 +413,11 @@ class Random(_random.Random):
def expovariate(self, lambd): def expovariate(self, lambd):
"""Exponential distribution. """Exponential distribution.
lambd is 1.0 divided by the desired mean. (The parameter would be lambd is 1.0 divided by the desired mean. It should be
called "lambda", but that is a reserved word in Python.) Returned nonzero. (The parameter would be called "lambda", but that is
values range from 0 to positive infinity. a reserved word in Python.) Returned values range from 0 to
positive infinity if lambd is positive, and from negative
infinity to 0 if lambd is negative.
""" """
# lambd: rate lambd = 1/mean # lambd: rate lambd = 1/mean

View File

@ -168,7 +168,6 @@ def outside_decNumber_bounds(v, context):
-context.Emin > DEC_MAX_MATH): -context.Emin > DEC_MAX_MATH):
return True return True
if not v._is_special and v and ( if not v._is_special and v and (
len(v._int) > DEC_MAX_MATH or
v.adjusted() > DEC_MAX_MATH or v.adjusted() > DEC_MAX_MATH or
v.adjusted() < 1-2*DEC_MAX_MATH): v.adjusted() < 1-2*DEC_MAX_MATH):
return True return True

View File

@ -269,7 +269,7 @@ func_filename = func.func_code.co_filename
if os.path.exists(file_name): if os.path.exists(file_name):
os.remove(file_name) os.remove(file_name)
if os.path.exists(self.dir_name): if os.path.exists(self.dir_name):
os.rmdir(self.dir_name) shutil.rmtree(self.dir_name)
def import_module(self): def import_module(self):
ns = globals() ns = globals()

View File

@ -54,6 +54,9 @@ python \- an interpreted, interactive, object-oriented programming language
[ [
.B \-x .B \-x
] ]
[
.B \-3
]
.br .br
[ [
.B \-c .B \-c
@ -236,6 +239,9 @@ is thus equivalent to an omitted line number.
Skip the first line of the source. This is intended for a DOS Skip the first line of the source. This is intended for a DOS
specific hack only. Warning: the line numbers in error messages will specific hack only. Warning: the line numbers in error messages will
be off by one! be off by one!
.TP
.B \-3
Warn about Python 3.x incompatibilities that 2to3 cannot trivially fix.
.SH INTERPRETER INTERFACE .SH INTERPRETER INTERFACE
The interpreter interface resembles that of the UNIX shell: when The interpreter interface resembles that of the UNIX shell: when
called with standard input connected to a tty device, it prompts for called with standard input connected to a tty device, it prompts for

View File

@ -86,7 +86,7 @@ static char *usage_3 = "\
-x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\ -x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\
"; ";
static char *usage_4 = "\ static char *usage_4 = "\
-3 : warn about Python 3.x incompatibilities\n\ -3 : warn about Python 3.x incompatibilities that 2to3 cannot trivially fix\n\
file : program read from script file\n\ file : program read from script file\n\
- : program read from stdin (default; interactive mode if a tty)\n\ - : program read from stdin (default; interactive mode if a tty)\n\
arg ...: arguments passed to program in sys.argv[1:]\n\n\ arg ...: arguments passed to program in sys.argv[1:]\n\n\

View File

@ -3334,7 +3334,11 @@ socket_gethostbyaddr(PyObject *self, PyObject *args)
#ifdef HAVE_GETHOSTBYNAME_R_3_ARG #ifdef HAVE_GETHOSTBYNAME_R_3_ARG
struct hostent_data data; struct hostent_data data;
#else #else
char buf[16384]; /* glibcs up to 2.10 assume that the buf argument to
gethostbyaddr_r is 8-byte aligned, which at least llvm-gcc
does not ensure. The attribute below instructs the compiler
to maintain this alignment. */
char buf[16384] Py_ALIGNED(8);
int buf_len = (sizeof buf) - 1; int buf_len = (sizeof buf) - 1;
int errnop; int errnop;
#endif #endif

View File

@ -3199,24 +3199,11 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
return -1; return -1;
} else { } else {
#ifndef RISCOS #ifndef RISCOS
#ifndef MS_WINDOWS
struct stat statbuf; struct stat statbuf;
int rv; int rv;
rv = stat(path, &statbuf); rv = stat(path, &statbuf);
#ifdef MS_WINDOWS
/* MS Windows stat() chokes on paths like C:\path\. Try to
* recover *one* time by stripping off a trailing slash or
* backslash. http://bugs.python.org/issue1293
*/
if (rv != 0 && pathlen <= MAXPATHLEN &&
(path[pathlen-1] == '/' || path[pathlen-1] == '\\')) {
char mangled[MAXPATHLEN+1];
strcpy(mangled, path);
mangled[pathlen-1] = '\0';
rv = stat(mangled, &statbuf);
}
#endif
if (rv == 0) { if (rv == 0) {
/* it exists */ /* it exists */
if (S_ISDIR(statbuf.st_mode)) { if (S_ISDIR(statbuf.st_mode)) {
@ -3226,7 +3213,24 @@ NullImporter_init(NullImporter *self, PyObject *args, PyObject *kwds)
return -1; return -1;
} }
} }
#else #else /* MS_WINDOWS */
DWORD rv;
/* see issue1293 and issue3677:
* stat() on Windows doesn't recognise paths like
* "e:\\shared\\" and "\\\\whiterab-c2znlh\\shared" as dirs.
*/
rv = GetFileAttributesA(path);
if (rv != INVALID_FILE_ATTRIBUTES) {
/* it exists */
if (rv & FILE_ATTRIBUTE_DIRECTORY) {
/* it's a directory */
PyErr_SetString(PyExc_ImportError,
"existing directory");
return -1;
}
}
#endif
#else /* RISCOS */
if (object_exists(path)) { if (object_exists(path)) {
/* it exists */ /* it exists */
if (isdir(path)) { if (isdir(path)) {

View File

@ -62,12 +62,12 @@ def docs_modified(file_paths):
@status("Misc/ACKS updated", modal=True) @status("Misc/ACKS updated", modal=True)
def credit_given(file_paths): def credit_given(file_paths):
"""Check if Misc/ACKS has been changed.""" """Check if Misc/ACKS has been changed."""
return True if 'Misc/ACKS' in file_paths else False return 'Misc/ACKS' in file_paths
@status("Misc/NEWS updated", modal=True) @status("Misc/NEWS updated", modal=True)
def reported_news(file_paths): def reported_news(file_paths):
"""Check if Misc/NEWS has been changed.""" """Check if Misc/NEWS has been changed."""
return True if 'Misc/NEWS' in file_paths else False return 'Misc/NEWS' in file_paths
def main(): def main():

View File

@ -407,7 +407,7 @@ AC_ARG_WITH(gcc,
AC_HELP_STRING(--without-gcc,never use gcc), AC_HELP_STRING(--without-gcc,never use gcc),
[ [
case $withval in case $withval in
no) CC=cc no) CC=${CC:-cc}
without_gcc=yes;; without_gcc=yes;;
yes) CC=gcc yes) CC=gcc
without_gcc=no;; without_gcc=no;;