Merged revisions 60481,60485,60489-60492,60494-60496,60498-60499,60501-60503,60505-60506,60508-60509,60523-60524,60532,60543,60545,60547-60548,60552,60554,60556-60559,60561-60562,60569,60571-60572,60574,60576-60583,60585-60586,60589,60591,60594-60595,60597-60598,60600-60601,60606-60612,60615,60617,60619-60621,60623-60625,60627-60629,60631,60633,60635,60647,60650,60652,60654,60656,60658-60659,60664-60666,60668-60670,60672,60676,60678,60680-60683,60685-60686,60688,60690,60692-60694,60697-60700,60705-60706,60708,60711,60714,60720,60724-60730,60732,60736,60742,60744,60746,60748,60750-60751,60753,60756-60757,60759-60761,60763-60764,60766,60769-60770,60774-60784,60787-60789,60793,60796,60799-60809,60812-60813,60815-60821,60823-60826,60828-60829,60831-60834,60836,60838-60839,60846-60873 via svnmerge from

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

........
  r60850 | amaury.forgeotdarc | 2008-02-16 01:16:50 +0100 (Sat, 16 Feb 2008) | 3 lines

  mmap.PROT_READ does not exists on win32;
  Skip this test created by r60830.
........
  r60851 | raymond.hettinger | 2008-02-16 02:22:54 +0100 (Sat, 16 Feb 2008) | 1 line

  Add __all__ to logging module.
........
  r60855 | georg.brandl | 2008-02-16 10:37:32 +0100 (Sat, 16 Feb 2008) | 2 lines

  #2120: broken links in advocacy document.
........
  r60860 | amaury.forgeotdarc | 2008-02-16 15:34:57 +0100 (Sat, 16 Feb 2008) | 23 lines

  Crashers of the day: Py_CLEAR must be used when there is a chance that the
  function can be called recursively.
  This was discussed in issue1020188.

  In python codebase, all occurrences of Py_[X]DECREF(xxx->yyy) are suspect,
  except when they appear in tp_new or tp_dealloc functions, or when
  the member cannot be of a user-defined class.
  Note that tp_init is not safe.

  I do have a (crashing) example for every changed line.
  Is it worth adding them to the test suite?

  Example:

  class SpecialStr(str):
      def __del__(self):
          s.close()

  import cStringIO
  s = cStringIO.StringIO(SpecialStr("text"))
  s.close() # Segfault
........
  r60871 | amaury.forgeotdarc | 2008-02-16 21:55:24 +0100 (Sat, 16 Feb 2008) | 3 lines

  Prevent a crash with nested scopes, again caused by calling Py_DECREF when the pointer
  is still present in the containing structure.
........
  r60872 | brett.cannon | 2008-02-17 02:59:18 +0100 (Sun, 17 Feb 2008) | 4 lines

  Move test_logging over to doctest.

  Thanks to Christopher White from GHOP.
........
  r60873 | georg.brandl | 2008-02-17 12:33:38 +0100 (Sun, 17 Feb 2008) | 2 lines

  #2131: note that codecs.open() always opens files in binary mode.
........
This commit is contained in:
Christian Heimes 2008-02-17 13:31:39 +00:00
parent a156e09b19
commit 18c66898b0
11 changed files with 2039 additions and 981 deletions

View File

@ -160,7 +160,7 @@ for "compact":
don't merge cleanly into the overall design scheme (thus, some fans of Classic C
maintain that ANSI C is no longer compact).
(From http://www.catb.org/ esr/jargon/html/C/compact.html)
(From http://www.catb.org/~esr/jargon/html/C/compact.html)
In this sense of the word, Python is quite compact, because the language has
just a few ideas, which are used in lots of places. Take namespaces, for
@ -174,14 +174,14 @@ standard dictionary data type: .keys() returns all the keys, and so forth.
This simplicity arises from Python's development history. The language syntax
derives from different sources; ABC, a relatively obscure teaching language, is
one primary influence, and Modula-3 is another. (For more information about ABC
and Modula-3, consult their respective Web sites at http://www.cwi.nl/
steven/abc/ and http://www.m3.org.) Other features have come from C, Icon,
and Modula-3, consult their respective Web sites at http://www.cwi.nl/~steven/abc/
and http://www.m3.org.) Other features have come from C, Icon,
Algol-68, and even Perl. Python hasn't really innovated very much, but instead
has tried to keep the language small and easy to learn, building on ideas that
have been tried in other languages and found useful.
Simplicity is a virtue that should not be underestimated. It lets you learn the
language more quickly, and then rapidly write code, code that often works the
language more quickly, and then rapidly write code -- code that often works the
first time you run it.
@ -266,7 +266,7 @@ the organizations that use Python.
They're practically nonexistent. Consult the :file:`Misc/COPYRIGHT` file in the
source distribution, or the section :ref:`history-and-license` for the full
language, but it boils down to three conditions.
language, but it boils down to three conditions:
* You have to leave the copyright notice on the software; if you don't include
the source code in a product, you have to put the copyright notice in the

View File

@ -202,7 +202,8 @@ utility functions:
.. function:: open(filename, mode[, encoding[, errors[, buffering]]])
Open an encoded file using the given *mode* and return a wrapped version
providing transparent encoding/decoding.
providing transparent encoding/decoding. The default file mode is ``'r'``
meaning to open the file in read mode.
.. note::
@ -210,6 +211,13 @@ utility functions:
i.e. Unicode objects for most built-in codecs. Output is also codec-dependent
and will usually be Unicode as well.
.. note::
Files are always opened in binary mode, even if no binary mode was
specified. This is done to avoid data loss due to encodings using 8-bit
values. This means that no automatic conversion of ``'\n'`` is done
on reading and writing.
*encoding* specifies the encoding which is to be used for the file.
*errors* may be given to define the error handling. It defaults to ``'strict'``

View File

@ -24,6 +24,10 @@ To use, simply 'import logging' and log away!
"""
import sys, os, time, io, traceback
__all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR',
'FATAL', 'FileHandler', 'Filter', 'Filterer', 'Formatter', 'Handler',
'INFO', 'LogRecord', 'Logger', 'Manager', 'NOTSET', 'PlaceHolder',
'RootLogger', 'StreamHandler', 'WARN', 'WARNING']
try:
import codecs

View File

@ -1,525 +0,0 @@
test_logging
-- log_test0 begin ---------------------------------------------------
CRITICAL:ERR:Message 0
ERROR:ERR:Message 1
CRITICAL:INF:Message 2
ERROR:INF:Message 3
WARNING:INF:Message 4
INFO:INF:Message 5
CRITICAL:INF.UNDEF:Message 6
ERROR:INF.UNDEF:Message 7
WARNING:INF.UNDEF:Message 8
INFO:INF.UNDEF:Message 9
CRITICAL:INF.ERR:Message 10
ERROR:INF.ERR:Message 11
CRITICAL:INF.ERR.UNDEF:Message 12
ERROR:INF.ERR.UNDEF:Message 13
CRITICAL:DEB:Message 14
ERROR:DEB:Message 15
WARNING:DEB:Message 16
INFO:DEB:Message 17
DEBUG:DEB:Message 18
CRITICAL:UNDEF:Message 19
ERROR:UNDEF:Message 20
WARNING:UNDEF:Message 21
INFO:UNDEF:Message 22
CRITICAL:INF.BADPARENT.UNDEF:Message 23
CRITICAL:INF.BADPARENT:Message 24
INFO:INF:Finish up, it's closing time. Messages should bear numbers 0 through 24.
-- log_test0 end ---------------------------------------------------
-- log_test1 begin ---------------------------------------------------
-- setting logging level to 'Boring' -----
Boring:root:This should only be seen at the 'Boring' logging level (or lower)
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower)
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Chatterbox' -----
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower)
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Garrulous' -----
Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower)
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Talkative' -----
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Verbose' -----
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Sociable' -----
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Effusive' -----
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Terse' -----
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Taciturn' -----
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Silent' -----
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- Filtering at handler level to SOCIABLE --
-- setting logging level to 'Boring' -----
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Chatterbox' -----
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Garrulous' -----
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Talkative' -----
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Verbose' -----
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Sociable' -----
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Effusive' -----
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Terse' -----
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Taciturn' -----
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Silent' -----
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- Filtering using GARRULOUS filter --
-- setting logging level to 'Boring' -----
Boring:root:This should only be seen at the 'Boring' logging level (or lower)
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Chatterbox' -----
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Garrulous' -----
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Talkative' -----
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Verbose' -----
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Sociable' -----
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Effusive' -----
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Terse' -----
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Taciturn' -----
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Silent' -----
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- Filtering using specific filter for SOCIABLE, TACITURN --
-- setting logging level to 'Boring' -----
Boring:root:This should only be seen at the 'Boring' logging level (or lower)
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Chatterbox' -----
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Garrulous' -----
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Talkative' -----
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Verbose' -----
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Sociable' -----
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Effusive' -----
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Terse' -----
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Taciturn' -----
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- setting logging level to 'Silent' -----
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
-- log_test1 end ---------------------------------------------------
-- log_test2 begin ---------------------------------------------------
-- logging at DEBUG, nothing should be seen yet --
-- logging at INFO, nothing should be seen yet --
-- logging at WARNING, 3 messages should be seen --
DEBUG:root:Debug message
INFO:root:Info message
WARNING:root:Warn message
-- logging 0 at INFO, messages should be seen every 10 events --
-- logging 1 at INFO, messages should be seen every 10 events --
-- logging 2 at INFO, messages should be seen every 10 events --
-- logging 3 at INFO, messages should be seen every 10 events --
-- logging 4 at INFO, messages should be seen every 10 events --
-- logging 5 at INFO, messages should be seen every 10 events --
-- logging 6 at INFO, messages should be seen every 10 events --
-- logging 7 at INFO, messages should be seen every 10 events --
-- logging 8 at INFO, messages should be seen every 10 events --
-- logging 9 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 0
INFO:root:Info index = 1
INFO:root:Info index = 2
INFO:root:Info index = 3
INFO:root:Info index = 4
INFO:root:Info index = 5
INFO:root:Info index = 6
INFO:root:Info index = 7
INFO:root:Info index = 8
INFO:root:Info index = 9
-- logging 10 at INFO, messages should be seen every 10 events --
-- logging 11 at INFO, messages should be seen every 10 events --
-- logging 12 at INFO, messages should be seen every 10 events --
-- logging 13 at INFO, messages should be seen every 10 events --
-- logging 14 at INFO, messages should be seen every 10 events --
-- logging 15 at INFO, messages should be seen every 10 events --
-- logging 16 at INFO, messages should be seen every 10 events --
-- logging 17 at INFO, messages should be seen every 10 events --
-- logging 18 at INFO, messages should be seen every 10 events --
-- logging 19 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 10
INFO:root:Info index = 11
INFO:root:Info index = 12
INFO:root:Info index = 13
INFO:root:Info index = 14
INFO:root:Info index = 15
INFO:root:Info index = 16
INFO:root:Info index = 17
INFO:root:Info index = 18
INFO:root:Info index = 19
-- logging 20 at INFO, messages should be seen every 10 events --
-- logging 21 at INFO, messages should be seen every 10 events --
-- logging 22 at INFO, messages should be seen every 10 events --
-- logging 23 at INFO, messages should be seen every 10 events --
-- logging 24 at INFO, messages should be seen every 10 events --
-- logging 25 at INFO, messages should be seen every 10 events --
-- logging 26 at INFO, messages should be seen every 10 events --
-- logging 27 at INFO, messages should be seen every 10 events --
-- logging 28 at INFO, messages should be seen every 10 events --
-- logging 29 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 20
INFO:root:Info index = 21
INFO:root:Info index = 22
INFO:root:Info index = 23
INFO:root:Info index = 24
INFO:root:Info index = 25
INFO:root:Info index = 26
INFO:root:Info index = 27
INFO:root:Info index = 28
INFO:root:Info index = 29
-- logging 30 at INFO, messages should be seen every 10 events --
-- logging 31 at INFO, messages should be seen every 10 events --
-- logging 32 at INFO, messages should be seen every 10 events --
-- logging 33 at INFO, messages should be seen every 10 events --
-- logging 34 at INFO, messages should be seen every 10 events --
-- logging 35 at INFO, messages should be seen every 10 events --
-- logging 36 at INFO, messages should be seen every 10 events --
-- logging 37 at INFO, messages should be seen every 10 events --
-- logging 38 at INFO, messages should be seen every 10 events --
-- logging 39 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 30
INFO:root:Info index = 31
INFO:root:Info index = 32
INFO:root:Info index = 33
INFO:root:Info index = 34
INFO:root:Info index = 35
INFO:root:Info index = 36
INFO:root:Info index = 37
INFO:root:Info index = 38
INFO:root:Info index = 39
-- logging 40 at INFO, messages should be seen every 10 events --
-- logging 41 at INFO, messages should be seen every 10 events --
-- logging 42 at INFO, messages should be seen every 10 events --
-- logging 43 at INFO, messages should be seen every 10 events --
-- logging 44 at INFO, messages should be seen every 10 events --
-- logging 45 at INFO, messages should be seen every 10 events --
-- logging 46 at INFO, messages should be seen every 10 events --
-- logging 47 at INFO, messages should be seen every 10 events --
-- logging 48 at INFO, messages should be seen every 10 events --
-- logging 49 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 40
INFO:root:Info index = 41
INFO:root:Info index = 42
INFO:root:Info index = 43
INFO:root:Info index = 44
INFO:root:Info index = 45
INFO:root:Info index = 46
INFO:root:Info index = 47
INFO:root:Info index = 48
INFO:root:Info index = 49
-- logging 50 at INFO, messages should be seen every 10 events --
-- logging 51 at INFO, messages should be seen every 10 events --
-- logging 52 at INFO, messages should be seen every 10 events --
-- logging 53 at INFO, messages should be seen every 10 events --
-- logging 54 at INFO, messages should be seen every 10 events --
-- logging 55 at INFO, messages should be seen every 10 events --
-- logging 56 at INFO, messages should be seen every 10 events --
-- logging 57 at INFO, messages should be seen every 10 events --
-- logging 58 at INFO, messages should be seen every 10 events --
-- logging 59 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 50
INFO:root:Info index = 51
INFO:root:Info index = 52
INFO:root:Info index = 53
INFO:root:Info index = 54
INFO:root:Info index = 55
INFO:root:Info index = 56
INFO:root:Info index = 57
INFO:root:Info index = 58
INFO:root:Info index = 59
-- logging 60 at INFO, messages should be seen every 10 events --
-- logging 61 at INFO, messages should be seen every 10 events --
-- logging 62 at INFO, messages should be seen every 10 events --
-- logging 63 at INFO, messages should be seen every 10 events --
-- logging 64 at INFO, messages should be seen every 10 events --
-- logging 65 at INFO, messages should be seen every 10 events --
-- logging 66 at INFO, messages should be seen every 10 events --
-- logging 67 at INFO, messages should be seen every 10 events --
-- logging 68 at INFO, messages should be seen every 10 events --
-- logging 69 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 60
INFO:root:Info index = 61
INFO:root:Info index = 62
INFO:root:Info index = 63
INFO:root:Info index = 64
INFO:root:Info index = 65
INFO:root:Info index = 66
INFO:root:Info index = 67
INFO:root:Info index = 68
INFO:root:Info index = 69
-- logging 70 at INFO, messages should be seen every 10 events --
-- logging 71 at INFO, messages should be seen every 10 events --
-- logging 72 at INFO, messages should be seen every 10 events --
-- logging 73 at INFO, messages should be seen every 10 events --
-- logging 74 at INFO, messages should be seen every 10 events --
-- logging 75 at INFO, messages should be seen every 10 events --
-- logging 76 at INFO, messages should be seen every 10 events --
-- logging 77 at INFO, messages should be seen every 10 events --
-- logging 78 at INFO, messages should be seen every 10 events --
-- logging 79 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 70
INFO:root:Info index = 71
INFO:root:Info index = 72
INFO:root:Info index = 73
INFO:root:Info index = 74
INFO:root:Info index = 75
INFO:root:Info index = 76
INFO:root:Info index = 77
INFO:root:Info index = 78
INFO:root:Info index = 79
-- logging 80 at INFO, messages should be seen every 10 events --
-- logging 81 at INFO, messages should be seen every 10 events --
-- logging 82 at INFO, messages should be seen every 10 events --
-- logging 83 at INFO, messages should be seen every 10 events --
-- logging 84 at INFO, messages should be seen every 10 events --
-- logging 85 at INFO, messages should be seen every 10 events --
-- logging 86 at INFO, messages should be seen every 10 events --
-- logging 87 at INFO, messages should be seen every 10 events --
-- logging 88 at INFO, messages should be seen every 10 events --
-- logging 89 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 80
INFO:root:Info index = 81
INFO:root:Info index = 82
INFO:root:Info index = 83
INFO:root:Info index = 84
INFO:root:Info index = 85
INFO:root:Info index = 86
INFO:root:Info index = 87
INFO:root:Info index = 88
INFO:root:Info index = 89
-- logging 90 at INFO, messages should be seen every 10 events --
-- logging 91 at INFO, messages should be seen every 10 events --
-- logging 92 at INFO, messages should be seen every 10 events --
-- logging 93 at INFO, messages should be seen every 10 events --
-- logging 94 at INFO, messages should be seen every 10 events --
-- logging 95 at INFO, messages should be seen every 10 events --
-- logging 96 at INFO, messages should be seen every 10 events --
-- logging 97 at INFO, messages should be seen every 10 events --
-- logging 98 at INFO, messages should be seen every 10 events --
-- logging 99 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 90
INFO:root:Info index = 91
INFO:root:Info index = 92
INFO:root:Info index = 93
INFO:root:Info index = 94
INFO:root:Info index = 95
INFO:root:Info index = 96
INFO:root:Info index = 97
INFO:root:Info index = 98
INFO:root:Info index = 99
-- logging 100 at INFO, messages should be seen every 10 events --
-- logging 101 at INFO, messages should be seen every 10 events --
INFO:root:Info index = 100
INFO:root:Info index = 101
-- log_test2 end ---------------------------------------------------
-- log_test3 begin ---------------------------------------------------
Unfiltered...
INFO:a:Info 1
INFO:a.b:Info 2
INFO:a.c:Info 3
INFO:a.b.c:Info 4
INFO:a.b.c.d:Info 5
INFO:a.bb.c:Info 6
INFO:b:Info 7
INFO:b.a:Info 8
INFO:c.a.b:Info 9
INFO:a.bb:Info 10
Filtered with 'a.b'...
INFO:a.b:Info 2
INFO:a.b.c:Info 4
INFO:a.b.c.d:Info 5
-- log_test3 end ---------------------------------------------------
-- log_test4 begin ---------------------------------------------------
config0: ok.
config1: ok.
config2: <type 'AttributeError'>
config3: <type 'KeyError'>
-- log_test4 end ---------------------------------------------------
-- log_test5 begin ---------------------------------------------------
ERROR:root:just testing
<type 'KeyError'>... Don't panic!
-- log_test5 end ---------------------------------------------------
-- logrecv output begin ---------------------------------------------------
ERR -> CRITICAL: Message 0 (via logrecv.tcp.ERR)
ERR -> ERROR: Message 1 (via logrecv.tcp.ERR)
INF -> CRITICAL: Message 2 (via logrecv.tcp.INF)
INF -> ERROR: Message 3 (via logrecv.tcp.INF)
INF -> WARNING: Message 4 (via logrecv.tcp.INF)
INF -> INFO: Message 5 (via logrecv.tcp.INF)
INF.UNDEF -> CRITICAL: Message 6 (via logrecv.tcp.INF.UNDEF)
INF.UNDEF -> ERROR: Message 7 (via logrecv.tcp.INF.UNDEF)
INF.UNDEF -> WARNING: Message 8 (via logrecv.tcp.INF.UNDEF)
INF.UNDEF -> INFO: Message 9 (via logrecv.tcp.INF.UNDEF)
INF.ERR -> CRITICAL: Message 10 (via logrecv.tcp.INF.ERR)
INF.ERR -> ERROR: Message 11 (via logrecv.tcp.INF.ERR)
INF.ERR.UNDEF -> CRITICAL: Message 12 (via logrecv.tcp.INF.ERR.UNDEF)
INF.ERR.UNDEF -> ERROR: Message 13 (via logrecv.tcp.INF.ERR.UNDEF)
DEB -> CRITICAL: Message 14 (via logrecv.tcp.DEB)
DEB -> ERROR: Message 15 (via logrecv.tcp.DEB)
DEB -> WARNING: Message 16 (via logrecv.tcp.DEB)
DEB -> INFO: Message 17 (via logrecv.tcp.DEB)
DEB -> DEBUG: Message 18 (via logrecv.tcp.DEB)
UNDEF -> CRITICAL: Message 19 (via logrecv.tcp.UNDEF)
UNDEF -> ERROR: Message 20 (via logrecv.tcp.UNDEF)
UNDEF -> WARNING: Message 21 (via logrecv.tcp.UNDEF)
UNDEF -> INFO: Message 22 (via logrecv.tcp.UNDEF)
INF.BADPARENT.UNDEF -> CRITICAL: Message 23 (via logrecv.tcp.INF.BADPARENT.UNDEF)
INF.BADPARENT -> CRITICAL: Message 24 (via logrecv.tcp.INF.BADPARENT)
INF -> INFO: Finish up, it's closing time. Messages should bear numbers 0 through 24. (via logrecv.tcp.INF)
-- logrecv output end ---------------------------------------------------

File diff suppressed because it is too large Load Diff

View File

@ -426,6 +426,8 @@ class MmapTests(unittest.TestCase):
anon_mmap(PAGESIZE)
def test_prot_readonly(self):
if not hasattr(mmap, 'PROT_READ'):
return
mapsize = 10
open(TESTFN, "wb").write(b"a"*mapsize)
f = open(TESTFN, "rb")

View File

@ -573,6 +573,13 @@ self.assert_(X.passed)
f(4)()
def testFreeingCell(self):
# Test what happens when a finalizer accesses
# the cell where the object was stored.
class Special:
def __del__(self):
nestedcell_get()
def testNonLocalFunction(self):
def f(x):

View File

@ -709,6 +709,7 @@ Edward Welbourne
Cliff Wells
Rickard Westman
Jeff Wheeler
Christopher White
Mats Wichmann
Truida Wiedijk
Felix Wiemann

View File

@ -1486,7 +1486,7 @@ s_init(PyObject *self, PyObject *args, PyObject *kwds)
return -1;
}
Py_XDECREF(soself->s_format);
Py_CLEAR(soself->s_format);
soself->s_format = o_format;
ret = prepare_s(soself);

View File

@ -566,8 +566,7 @@ newOobject(int size) {
static PyObject *
I_close(Iobject *self, PyObject *unused) {
Py_XDECREF(self->pbuf);
self->pbuf = NULL;
Py_CLEAR(self->pbuf);
self->buf = NULL;
self->pos = self->string_size = 0;

View File

@ -31,13 +31,15 @@ PyCell_Get(PyObject *op)
int
PyCell_Set(PyObject *op, PyObject *obj)
{
PyObject* oldobj;
if (!PyCell_Check(op)) {
PyErr_BadInternalCall();
return -1;
}
Py_XDECREF(((PyCellObject*)op)->ob_ref);
oldobj = PyCell_GET(op);
Py_XINCREF(obj);
PyCell_SET(op, obj);
Py_XDECREF(oldobj);
return 0;
}