diff options
author | Christian Heimes <christian@cheimes.de> | 2008-02-19 14:21:46 (GMT) |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2008-02-19 14:21:46 (GMT) |
commit | 7131fd957d9614b052ee6f7d367e51ae6da9a867 (patch) | |
tree | 798c25092a56b54fba9cf35b4981d721763de35c | |
parent | 5edc1c29eaa44bc48055c285b693a5bb728df002 (diff) | |
download | cpython-7131fd957d9614b052ee6f7d367e51ae6da9a867.zip cpython-7131fd957d9614b052ee6f7d367e51ae6da9a867.tar.gz cpython-7131fd957d9614b052ee6f7d367e51ae6da9a867.tar.bz2 |
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-60849,60852-60854,60856-60859,60861-60870,60874-60878,60880-60892,60894-60898 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r60876 | georg.brandl | 2008-02-17 16:14:10 +0100 (Sun, 17 Feb 2008) | 2 lines
Fix function name.
........
r60877 | facundo.batista | 2008-02-17 17:21:13 +0100 (Sun, 17 Feb 2008) | 4 lines
Now we handle different the backup copy, because of security
issues regarding user/group and permissions. Fixes 1050828.
........
r60878 | facundo.batista | 2008-02-17 19:59:29 +0100 (Sun, 17 Feb 2008) | 4 lines
Issue 2112. mmap does not raises EnvironmentError no more, but
a subclass of it. Thanks John Lenton.
........
r60882 | amaury.forgeotdarc | 2008-02-17 21:56:31 +0100 (Sun, 17 Feb 2008) | 5 lines
Compilation was broken on Windows since the introduction of Advanced String Formatting.
Only PCBuild (vs9) was really tested.
Changes for older compilers were done manually.
........
r60883 | georg.brandl | 2008-02-17 22:18:55 +0100 (Sun, 17 Feb 2008) | 2 lines
#2133: fix HTML color spec.
........
r60884 | facundo.batista | 2008-02-18 04:43:43 +0100 (Mon, 18 Feb 2008) | 5 lines
Issue #1916. Added isgenerator() and isgeneratorfunction() to
inspect.py. Thanks Javi Mansilla for patch review and
corrections.
........
r60885 | facundo.batista | 2008-02-18 13:48:43 +0100 (Mon, 18 Feb 2008) | 4 lines
Issue 1224. Now we support again the double slash in the URL.
Thanks Anthony Lenton.
........
r60887 | eric.smith | 2008-02-18 15:25:02 +0100 (Mon, 18 Feb 2008) | 1 line
Temporarily removed float tests. See issue 1600.
........
r60891 | kristjan.jonsson | 2008-02-18 18:40:47 +0100 (Mon, 18 Feb 2008) | 1 line
Perform correct handling of stack overflow for windows: Catch the correct exception code and reset the overflow condition when handled.
........
-rw-r--r-- | Doc/c-api/tuple.rst | 2 | ||||
-rw-r--r-- | Doc/library/inspect.rst | 12 | ||||
-rw-r--r-- | Lib/SimpleHTTPServer.py | 3 | ||||
-rw-r--r-- | Lib/inspect.py | 52 | ||||
-rwxr-xr-x | Lib/pydoc.py | 2 | ||||
-rw-r--r-- | Lib/test/test_SimpleHTTPServer.py | 41 | ||||
-rw-r--r-- | Lib/test/test_inspect.py | 28 | ||||
-rw-r--r-- | Lib/test/test_mmap.py | 5 | ||||
-rw-r--r-- | Lib/test/test_types.py | 253 | ||||
-rw-r--r-- | Misc/NEWS | 1552 | ||||
-rw-r--r-- | Modules/mmapmodule.c | 5 | ||||
-rw-r--r-- | PC/VC6/pythoncore.dsp | 12 | ||||
-rw-r--r-- | PC/VS7.1/pythoncore.vcproj | 3 | ||||
-rw-r--r-- | Python/pythonrun.c | 10 | ||||
-rwxr-xr-x | Tools/scripts/reindent.py | 40 |
15 files changed, 1979 insertions, 41 deletions
diff --git a/Doc/c-api/tuple.rst b/Doc/c-api/tuple.rst index c0e53fb..245a355 100644 --- a/Doc/c-api/tuple.rst +++ b/Doc/c-api/tuple.rst @@ -106,6 +106,6 @@ Tuple Objects ``*p`` is destroyed. On failure, returns ``-1`` and sets ``*p`` to *NULL*, and raises :exc:`MemoryError` or :exc:`SystemError`. -.. cfunction:: int PyMethod_ClearFreeList(void) +.. cfunction:: int PyTuple_ClearFreeList(void) Clear the free list. Return the total number of freed items. diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst index 5daa496..03ee17f 100644 --- a/Doc/library/inspect.rst +++ b/Doc/library/inspect.rst @@ -26,7 +26,7 @@ Types and members ----------------- The :func:`getmembers` function retrieves the members of an object such as a -class or module. The eleven functions whose names begin with "is" are mainly +class or module. The fifteen functions whose names begin with "is" are mainly provided as convenient choices for the second argument to :func:`getmembers`. They also help you determine when you can expect to find the following special attributes: @@ -229,6 +229,16 @@ attributes: Return true if the object is a Python function or unnamed (:term:`lambda`) function. +.. function:: isgeneratorfunction(object) + + Return true if the object is a Python generator function. + + +.. function:: isgenerator(object) + + Return true if the object is a generator. + + .. function:: istraceback(object) Return true if the object is a traceback. diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py index a1f25be..eea3243 100644 --- a/Lib/SimpleHTTPServer.py +++ b/Lib/SimpleHTTPServer.py @@ -143,7 +143,8 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): """ # abandon query parameters - path = urlparse.urlparse(path)[2] + path = path.split('?',1)[0] + path = path.split('#',1)[0] path = posixpath.normpath(urllib.unquote(path)) words = path.split('/') words = filter(None, words) diff --git a/Lib/inspect.py b/Lib/inspect.py index 074754f..ddd7529 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -7,8 +7,9 @@ It also provides some help for examining source code and class layout. Here are some of the useful functions provided by this module: - ismodule(), isclass(), ismethod(), isfunction(), istraceback(), - isframe(), iscode(), isbuiltin(), isroutine() - check object types + ismodule(), isclass(), ismethod(), isfunction(), isgeneratorfunction(), + isgenerator(), istraceback(), isframe(), iscode(), isbuiltin(), + isroutine() - check object types getmembers() - get members of an object that satisfy a given condition getfile(), getsourcefile(), getsource() - find an object's source code @@ -29,9 +30,20 @@ Here are some of the useful functions provided by this module: __author__ = 'Ka-Ping Yee <ping@lfw.org>' __date__ = '1 Jan 2001' -import sys, os, types, re, dis, imp, tokenize, linecache +import sys +import os +import types +import string +import re +import dis +import imp +import tokenize +import linecache from operator import attrgetter from collections import namedtuple +# These constants are from Include/code.h. +CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS = 0x1, 0x2, 0x4, 0x8 +CO_NESTED, CO_GENERATOR, CO_NOFREE = 0x10, 0x20, 0x40 # ----------------------------------------------------------- type-checking def ismodule(object): @@ -137,6 +149,33 @@ def isfunction(object): __kwdefaults__ dict of keyword only parameters with defaults""" return isinstance(object, types.FunctionType) +def isgeneratorfunction(object): + """Return true if the object is a user-defined generator function. + + Generator function objects provides same attributes as functions. + + See isfunction.__doc__ for attributes listing.""" + if (isfunction(object) or ismethod(object)) and \ + object.__code__.co_flags & CO_GENERATOR: + return True + +def isgenerator(object): + """Return true if the object is a generator. + + Generator objects provide these attributes: + __iter__ defined to support interation over container + close raises a new GeneratorExit exception inside the + generator to terminate the iteration + gi_code code object + gi_frame frame object or possibly None once the generator has + been exhausted + gi_running set to 1 when generator is executing, 0 otherwise + next return the next item from the container + send resumes the generator and "sends" a value that becomes + the result of the current yield-expression + throw used to raise an exception inside the generator""" + return isinstance(object, types.GeneratorType) + def istraceback(object): """Return true if the object is a traceback. @@ -198,6 +237,10 @@ def isroutine(object): or ismethod(object) or ismethoddescriptor(object)) +def isgenerator(object): + """Return true if the object is a generator object.""" + return isinstance(object, types.GeneratorType) + def getmembers(object, predicate=None): """Return all members of an object as (name, value) pairs sorted by name. Optionally, only return members that satisfy a given predicate.""" @@ -670,9 +713,6 @@ def getclasstree(classes, unique=0): return walktree(roots, children, None) # ------------------------------------------------ argument list extraction -# These constants are from Python's compile.h. -CO_OPTIMIZED, CO_NEWLOCALS, CO_VARARGS, CO_VARKEYWORDS = 1, 2, 4, 8 - Arguments = namedtuple('Arguments', 'args, varargs, varkw') def getargs(co): diff --git a/Lib/pydoc.py b/Lib/pydoc.py index c6ec68e..fbad574 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -660,7 +660,7 @@ class HTMLDoc(Doc): contents = self.multicolumn( modules, lambda t: self.modulelink(t[1])) result = result + self.bigsection( - 'Modules', '#fffff', '#aa55cc', contents) + 'Modules', '#ffffff', '#aa55cc', contents) if classes: classlist = [value for (key, value) in classes] diff --git a/Lib/test/test_SimpleHTTPServer.py b/Lib/test/test_SimpleHTTPServer.py new file mode 100644 index 0000000..9d3ad16 --- /dev/null +++ b/Lib/test/test_SimpleHTTPServer.py @@ -0,0 +1,41 @@ +""" +These tests only check url parsing for now. +We don't want to require the 'network' resource. +""" + +import os, unittest +from SimpleHTTPServer import SimpleHTTPRequestHandler +from test import test_support + + +class SocketlessRequestHandler (SimpleHTTPRequestHandler): + def __init__(self): + pass + +class SimpleHTTPRequestHandlerTestCase(unittest.TestCase): + """ Test url parsing """ + def setUp (self): + self.translated = os.getcwd() + self.translated = os.path.join(self.translated, 'filename') + self.handler = SocketlessRequestHandler () + + def test_queryArguments (self): + path = self.handler.translate_path ('/filename') + self.assertEquals (path, self.translated) + path = self.handler.translate_path ('/filename?foo=bar') + self.assertEquals (path, self.translated) + path = self.handler.translate_path ('/filename?a=b&spam=eggs#zot') + self.assertEquals (path, self.translated) + + def test_startWithDoubleSlash (self): + path = self.handler.translate_path ('//filename') + self.assertEquals (path, self.translated) + path = self.handler.translate_path ('//filename?foo=bar') + self.assertEquals (path, self.translated) + + +def test_main(): + test_support.run_unittest(SimpleHTTPRequestHandlerTestCase) + +if __name__ == "__main__": + test_main() diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 75e66ed..35a3b06 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -13,10 +13,10 @@ from test import inspect_fodder2 as mod2 # Functions tested in this suite: # ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode, -# isbuiltin, isroutine, getmembers, getdoc, getfile, getmodule, -# getsourcefile, getcomments, getsource, getclasstree, getargspec, -# getargvalues, formatargspec, formatargvalues, currentframe, stack, trace -# isdatadescriptor +# isbuiltin, isroutine, isgenerator, isgeneratorfunction, getmembers, +# getdoc, getfile, getmodule, getsourcefile, getcomments, getsource, +# getclasstree, getargspec, getargvalues, formatargspec, formatargvalues, +# currentframe, stack, trace, isdatadescriptor modfile = mod.__file__ if modfile.endswith(('c', 'o')): @@ -41,23 +41,33 @@ git = mod.StupidGit() class IsTestBase(unittest.TestCase): predicates = set([inspect.isbuiltin, inspect.isclass, inspect.iscode, inspect.isframe, inspect.isfunction, inspect.ismethod, - inspect.ismodule, inspect.istraceback]) + inspect.ismodule, inspect.istraceback, + inspect.isgenerator, inspect.isgeneratorfunction]) def istest(self, predicate, exp): obj = eval(exp) self.failUnless(predicate(obj), '%s(%s)' % (predicate.__name__, exp)) for other in self.predicates - set([predicate]): + if predicate == inspect.isgeneratorfunction and\ + other == inspect.isfunction: + continue self.failIf(other(obj), 'not %s(%s)' % (other.__name__, exp)) +def generator_function_example(self): + for i in range(2): + yield i + class TestPredicates(IsTestBase): - def test_thirteen(self): + def test_fifteen(self): count = len([x for x in dir(inspect) if x.startswith('is')]) - # Doc/lib/libinspect.tex claims there are 13 such functions - expected = 13 + # This test is here for remember you to update Doc/library/inspect.rst + # which claims there are 15 such functions + expected = 15 err_msg = "There are %d (not %d) is* functions" % (count, expected) self.assertEqual(count, expected, err_msg) + def test_excluding_predicates(self): self.istest(inspect.isbuiltin, 'sys.exit') self.istest(inspect.isbuiltin, '[].append') @@ -70,6 +80,8 @@ class TestPredicates(IsTestBase): self.istest(inspect.ismodule, 'mod') self.istest(inspect.istraceback, 'tb') self.istest(inspect.isdatadescriptor, 'collections.defaultdict.default_factory') + self.istest(inspect.isgenerator, '(x for x in range(2))') + self.istest(inspect.isgeneratorfunction, 'generator_function_example') if hasattr(types, 'GetSetDescriptorType'): self.istest(inspect.isgetsetdescriptor, 'type(tb.tb_frame).f_locals') diff --git a/Lib/test/test_mmap.py b/Lib/test/test_mmap.py index 08f60f8..fdd75ab 100644 --- a/Lib/test/test_mmap.py +++ b/Lib/test/test_mmap.py @@ -435,6 +435,11 @@ class MmapTests(unittest.TestCase): self.assertRaises(TypeError, m.write, "foo") + def test_error(self): + self.assert_(issubclass(mmap.error, EnvironmentError)) + self.assert_("mmap.error" in str(mmap.error)) + + def test_main(): run_unittest(MmapTests) diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py index 0014323..f82fe30 100644 --- a/Lib/test/test_types.py +++ b/Lib/test/test_types.py @@ -63,15 +63,15 @@ class TypesTests(unittest.TestCase): try: 5 / 0 except ZeroDivisionError: pass - else: self.fail("5 / 0L didn't raise ZeroDivisionError") + else: self.fail("5 / 0 didn't raise ZeroDivisionError") try: 5 // 0 except ZeroDivisionError: pass - else: self.fail("5 // 0L didn't raise ZeroDivisionError") + else: self.fail("5 // 0 didn't raise ZeroDivisionError") try: 5 % 0 except ZeroDivisionError: pass - else: self.fail("5 % 0L didn't raise ZeroDivisionError") + else: self.fail("5 % 0 didn't raise ZeroDivisionError") def test_numeric_types(self): if 0 != 0 or 0 != 0.0 or 0 != 0.0: self.fail('mixed comparisons') @@ -80,7 +80,7 @@ class TypesTests(unittest.TestCase): self.fail('int/long/float value not equal') # calling built-in types without argument must return 0 if int() != 0: self.fail('int() does not return 0') - if int() != 0: self.fail('long() does not return 0L') + if int() != 0: self.fail('long() does not return 0') if float() != 0.0: self.fail('float() does not return 0.0') if int(1.9) == 1 == int(1.1) and int(-1.1) == -1 == int(-1.9): pass else: self.fail('int() does not round properly') @@ -203,6 +203,251 @@ class TypesTests(unittest.TestCase): self.assertRaises(TypeError, type, 1, 2) self.assertRaises(TypeError, type, 1, 2, 3, 4) + def test_int__format__(self): + def test(i, format_spec, result): + # just make sure I'm not accidentally checking longs + assert type(i) == int + assert type(format_spec) == str + self.assertEqual(i.__format__(format_spec), result) + + test(123456789, 'd', '123456789') + test(123456789, 'd', '123456789') + + test(1, 'c', '\01') + + # sign and aligning are interdependent + test(1, "-", '1') + test(-1, "-", '-1') + test(1, "-3", ' 1') + test(-1, "-3", ' -1') + test(1, "+3", ' +1') + test(-1, "+3", ' -1') + test(1, " 3", ' 1') + test(-1, " 3", ' -1') + test(1, " ", ' 1') + test(-1, " ", '-1') + + # hex + test(3, "x", "3") + test(3, "X", "3") + test(1234, "x", "4d2") + test(-1234, "x", "-4d2") + test(1234, "8x", " 4d2") + test(-1234, "8x", " -4d2") + test(1234, "x", "4d2") + test(-1234, "x", "-4d2") + test(-3, "x", "-3") + test(-3, "X", "-3") + test(int('be', 16), "x", "be") + test(int('be', 16), "X", "BE") + test(-int('be', 16), "x", "-be") + test(-int('be', 16), "X", "-BE") + + # octal + test(3, "o", "3") + test(-3, "o", "-3") + test(65, "o", "101") + test(-65, "o", "-101") + test(1234, "o", "2322") + test(-1234, "o", "-2322") + test(1234, "-o", "2322") + test(-1234, "-o", "-2322") + test(1234, " o", " 2322") + test(-1234, " o", "-2322") + test(1234, "+o", "+2322") + test(-1234, "+o", "-2322") + + # binary + test(3, "b", "11") + test(-3, "b", "-11") + test(1234, "b", "10011010010") + test(-1234, "b", "-10011010010") + test(1234, "-b", "10011010010") + test(-1234, "-b", "-10011010010") + test(1234, " b", " 10011010010") + test(-1234, " b", "-10011010010") + test(1234, "+b", "+10011010010") + test(-1234, "+b", "-10011010010") + + # make sure these are errors + + # precision disallowed + self.assertRaises(ValueError, 3 .__format__, "1.3") + # sign not allowed with 'c' + self.assertRaises(ValueError, 3 .__format__, "+c") + # format spec must be string + self.assertRaises(TypeError, 3 .__format__, None) + self.assertRaises(TypeError, 3 .__format__, 0) + + # ensure that only int and float type specifiers work + for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] + + [chr(x) for x in range(ord('A'), ord('Z')+1)]): + if not format_spec in 'bcdoxXeEfFgGn%': + self.assertRaises(ValueError, 0 .__format__, format_spec) + self.assertRaises(ValueError, 1 .__format__, format_spec) + self.assertRaises(ValueError, (-1) .__format__, format_spec) + + # ensure that float type specifiers work; format converts + # the int to a float + for format_spec in 'eEfFgGn%': + for value in [0, 1, -1, 100, -100, 1234567890, -1234567890]: + self.assertEqual(value.__format__(format_spec), + float(value).__format__(format_spec)) + + def test_long__format__(self): + def test(i, format_spec, result): + # make sure we're not accidentally checking ints + assert type(i) == int + assert type(format_spec) == str + self.assertEqual(i.__format__(format_spec), result) + + test(10**100, 'd', '1' + '0' * 100) + test(10**100+100, 'd', '1' + '0' * 97 + '100') + + test(123456789, 'd', '123456789') + test(123456789, 'd', '123456789') + + # sign and aligning are interdependent + test(1, "-", '1') + test(-1, "-", '-1') + test(1, "-3", ' 1') + test(-1, "-3", ' -1') + test(1, "+3", ' +1') + test(-1, "+3", ' -1') + test(1, " 3", ' 1') + test(-1, " 3", ' -1') + test(1, " ", ' 1') + test(-1, " ", '-1') + + test(1, 'c', '\01') + + # hex + test(3, "x", "3") + test(3, "X", "3") + test(1234, "x", "4d2") + test(-1234, "x", "-4d2") + test(1234, "8x", " 4d2") + test(-1234, "8x", " -4d2") + test(1234, "x", "4d2") + test(-1234, "x", "-4d2") + test(-3, "x", "-3") + test(-3, "X", "-3") + + # octal + test(3, "o", "3") + test(-3, "o", "-3") + test(65, "o", "101") + test(-65, "o", "-101") + test(1234, "o", "2322") + test(-1234, "o", "-2322") + test(1234, "-o", "2322") + test(-1234, "-o", "-2322") + test(1234, " o", " 2322") + test(-1234, " o", "-2322") + test(1234, "+o", "+2322") + test(-1234, "+o", "-2322") + + # binary + test(3, "b", "11") + test(-3, "b", "-11") + test(1234, "b", "10011010010") + test(-1234, "b", "-10011010010") + test(1234, "-b", "10011010010") + test(-1234, "-b", "-10011010010") + test(1234, " b", " 10011010010") + test(-1234, " b", "-10011010010") + test(1234, "+b", "+10011010010") + test(-1234, "+b", "-10011010010") + + # make sure these are errors + + # precision disallowed + self.assertRaises(ValueError, 3 .__format__, "1.3") + # sign not allowed with 'c' + self.assertRaises(ValueError, 3 .__format__, "+c") + # format spec must be string + self.assertRaises(TypeError, 3 .__format__, None) + self.assertRaises(TypeError, 3 .__format__, 0) + + # ensure that only int and float type specifiers work + for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] + + [chr(x) for x in range(ord('A'), ord('Z')+1)]): + if not format_spec in 'bcdoxXeEfFgGn%': + self.assertRaises(ValueError, 0 .__format__, format_spec) + self.assertRaises(ValueError, 1 .__format__, format_spec) + self.assertRaises(ValueError, (-1) .__format__, format_spec) + + # ensure that float type specifiers work; format converts + # the long to a float + for format_spec in 'eEfFgGn%': + for value in [0, 1, -1, 100, -100, 1234567890, -1234567890]: + self.assertEqual(value.__format__(format_spec), + float(value).__format__(format_spec)) + + def test_float__format__(self): + # these should be rewritten to use both format(x, spec) and + # x.__format__(spec) + + def test(f, format_spec, result): + assert type(f) == float + assert type(format_spec) == str + self.assertEqual(f.__format__(format_spec), result) + + test(0.0, 'f', '0.000000') + + # the default is 'g', except for empty format spec + test(0.0, '', '0.0') + test(0.01, '', '0.01') + test(0.01, 'g', '0.01') + + test( 1.0, ' g', ' 1') + test(-1.0, ' g', '-1') + test( 1.0, '+g', '+1') + test(-1.0, '+g', '-1') + test(1.1234e200, 'g', '1.1234e+200') + test(1.1234e200, 'G', '1.1234E+200') + + + test(1.0, 'f', '1.000000') + + test(-1.0, 'f', '-1.000000') + + test( 1.0, ' f', ' 1.000000') + test(-1.0, ' f', '-1.000000') + test( 1.0, '+f', '+1.000000') + test(-1.0, '+f', '-1.000000') + test(1.1234e200, 'f', '1.1234e+200') + test(1.1234e200, 'F', '1.1234e+200') + + # temporarily removed. see issue 1600 + # test( 1.0, 'e', '1.000000e+00') + # test(-1.0, 'e', '-1.000000e+00') + # test( 1.0, 'E', '1.000000E+00') + # test(-1.0, 'E', '-1.000000E+00') + # test(1.1234e20, 'e', '1.123400e+20') + # test(1.1234e20, 'E', '1.123400E+20') + + # % formatting + test(-1.0, '%', '-100.000000%') + + # format spec must be string + self.assertRaises(TypeError, 3.0.__format__, None) + self.assertRaises(TypeError, 3.0.__format__, 0) + + # other format specifiers shouldn't work on floats, + # in particular int specifiers + for format_spec in ([chr(x) for x in range(ord('a'), ord('z')+1)] + + [chr(x) for x in range(ord('A'), ord('Z')+1)]): + if not format_spec in 'eEfFgGn%': + self.assertRaises(ValueError, format, 0.0, format_spec) + self.assertRaises(ValueError, format, 1.0, format_spec) + self.assertRaises(ValueError, format, -1.0, format_spec) + self.assertRaises(ValueError, format, 1e100, format_spec) + self.assertRaises(ValueError, format, -1e100, format_spec) + self.assertRaises(ValueError, format, 1e-100, format_spec) + self.assertRaises(ValueError, format, -1e-100, format_spec) + + def test_main(): run_unittest(TypesTests) @@ -97,18 +97,1570 @@ Core and Builtins of PyString. +<<<<<<< .working +======= +- Issue #1402: Fix a crash on exit, when another thread is still running, and + if the deallocation of its frames somehow calls the PyGILState_Ensure() / + PyGILState_Release() functions. + +- Expose the Py_Py3kWarningFlag as sys.py3kwarning. + +- Issue #1445: Fix a SystemError when accessing the ``cell_contents`` + attribute of an empty cell object. + +- Issue #1460: The utf-7 incremental decoder did not accept truncated input. + It now correctly saves its state between chunks of data. + +- Patch #1739468: Directories and zipfiles containing a __main__.py file can + now be directly executed by passing their name to the interpreter. The + directory/zipfile is automatically inserted as the first entry in sys.path. + +- Issue #1265: Fix a problem with sys.settrace, if the tracing function uses a + generator expression when at the same time the executed code is closing a + paused generator. + +- sets and frozensets now have an isdisjoint() method. + +- optimize the performance of builtin.sum(). + +- Fix warnings found by the new version of the Coverity checker. + +- The enumerate() builtin function is no longer bounded to sequences smaller + than LONG_MAX. Formerly, it raised an OverflowError. Now, automatically + shifts from ints to longs. + +- Issue #1686386: Tuple's tp_repr did not take into account the possibility of + having a self-referential tuple, which is possible from C code. Nor did + object's tp_str consider that a type's tp_str could do something that could + lead to an inifinite recursion. Py_ReprEnter() and Py_EnterRecursiveCall(), + respectively, fixed the issues. + +- Issue #1164: It was possible to trigger deadlock when using the 'print' + statement to write to a file since the GIL was not released as needed. Now + PyObject_Print() does the right thing along with various tp_print + implementations of the built-in types and those in the collections module. + +- Issue #1147: Exceptions were directly allowing string exceptions in their + throw() method even though string exceptions no longer allowed. + +- Issue #1096: Prevent a segfault from getting the repr of a very deeply nested + list by using the recursion counter. + +- Issue #1202533: Fix infinite recursion calls triggered by calls to + PyObject_Call() never calling back out to Python code to trigger recursion + depth updates/checks. Required the creation of a static RuntimeError + instance in case normalizing an exception put the recursion check value past + its limit. Fixes crashers infinite_rec_(1|2|4|5).py. + +- Patch #1031213: Decode source line in SyntaxErrors back to its original source + encoding. + +- Patch #1673759: add a missing overflow check when formatting floats + with %G. + +- Prevent expandtabs() on string and unicode objects from causing a segfault + when a large width is passed on 32-bit platforms. + +- Bug #1733488: Fix compilation of bufferobject.c on AIX. + +- Bug #1722485: remove docstrings again when running with -OO. + +- Add new attribute names for function objects. All the func_* become + __*__ attributes. (Some already existed, e.g., __doc__ and __name__.) + +- Add -3 option to the interpreter to warn about features that are + deprecated and will be changed/removed in Python 3.0. + +- Patch #1686487: you can now pass any mapping after '**' in function + calls. + +- except clauses may now be spelled either "except E, target:" or + "except E as target:". This is to provide forwards compatibility with + Python 3.0. + +- Deprecate BaseException.message as per PEP 352. + +- Bug #1303614: don't expose object's __dict__ when the dict is + inherited from a builtin base. + +- When __slots__ are set to a unicode string, make it work the same as + setting a plain string, ie don't expand to single letter identifiers. + +- Request #1191699: Slices can now be pickled. + +- Request #1193128: str.translate() now allows a None argument for + translations that only remove characters without re-mapping the + remaining characters. + +- Patch #1682205: a TypeError while unpacking an iterable is no longer + masked by a generic one with the message "unpack non-sequence". + +- Remove unused file Python/fmod.c. + +- Bug #1683368: The object.__init__() and object.__new__() methods are + now stricter in rejecting excess arguments. The only time when + either allows excess arguments is when it is not overridden and the + other one is. For backwards compatibility, when both are + overridden, it is a deprecation warning (for now; maybe a Py3k + warning later). Also, type.__init__() insists on the same signature + as supported by type.__new__(). + +- Patch #1675423: PyComplex_AsCComplex() now tries to convert an object + to complex using its __complex__() method before falling back to the + __float__() method. Therefore, the functions in the cmath module now + can operate on objects that define a __complex__() method. + +- Patch #1623563: allow __class__ assignment for classes with __slots__. + The old and the new class are still required to have the same slot names. + +- Patch #1642547: Fix an error/crash when encountering syntax errors in + complex if statements. + +- Patch #1462488: Python no longer segfaults when ``object.__reduce_ex__()`` + is called with an object that is faking its type. + +- Patch #1680015: Don't modify __slots__ tuple if it contains an unicode + name. + +- Patch #1444529: the builtin compile() now accepts keyword arguments. + +- Bug #1678647: write a newline after printing an exception in any + case, even when converting the value to a string failed. + +- The dir() function has been extended to call the __dir__() method on + its argument, if it exists. If not, it will work like before. This allows + customizing the output of dir() in the presence of a __getattr__(). + +- Patch #922167: Python no longer segfaults when faced with infinitely + self-recursive reload() calls (as reported by bug #742342). + +- Patch #1675981: remove unreachable code from ``type.__new__()`` method. + +- Patch #1491866: change the complex() constructor to allow parthensized + forms. This means complex(repr(x)) now works instead of raising a + ValueError. + +- Patch #703779: unset __file__ in __main__ after running a file. This + makes the filenames the warning module prints much more sensible when + a PYTHONSTARTUP file is used. + +- Variant of patch #697613: don't exit the interpreter on a SystemExit + exception if the -i command line option or PYTHONINSPECT environment + variable is given, but break into the interactive interpreter just like + on other exceptions or normal program exit. + +- Patch #1638879: don't accept strings with embedded NUL bytes in long(). + +- Bug #1674503: close the file opened by execfile() in an error condition. + +- Patch #1674228: when assigning a slice (old-style), check for the + sq_ass_slice instead of the sq_slice slot. + +- When printing an unraisable error, don't print exceptions. before the name. + This duplicates the behavior whening normally printing exceptions. + +- Bug #1653736: Properly discard third argument to slot_nb_inplace_power. + +- PEP 352: Raising a string exception now triggers a TypeError. Attempting to + catch a string exception raises DeprecationWarning. + +- Bug #1377858: Fix the segfaulting of the interpreter when an object created + a weakref on itself during a __del__ call for new-style classes (classic + classes still have the bug). + +- Bug #1579370: Make PyTraceBack_Here use the current thread, not the + frame's thread state. + +- patch #1630975: Fix crash when replacing sys.stdout in sitecustomize.py + +- Prevent seg fault on shutdown which could occur if an object + raised a warning. + +- Bug #1566280: Explicitly invoke threading._shutdown from Py_Main, + to avoid relying on atexit. + +- Bug #1590891: random.randrange don't return correct value for big number + +- Patch #1586791: Better exception messages for some operations on strings, + tuples and lists. + +- Bug #1067760: Deprecate passing floats to file.seek. + +- Bug #1591996: Correctly forward exception in instance_contains(). + +- Bug #1588287: fix invalid assertion for `1,2` in debug builds. + +- Bug #1576657: when setting a KeyError for a tuple key, make sure that + the tuple isn't used as the "exception arguments tuple". + +- Bug #1565514, SystemError not raised on too many nested blocks. + +- Bug #1576174: WindowsError now displays the windows error code + again, no longer the posix error code. + +- Patch #1549049: Support long values in structmember, issue warnings + if the assigned value for structmember fields gets truncated. + +- Update the peephole optimizer to remove more dead code (jumps after returns) + and inline unconditional jumps to returns. + +- Bug #1545497: when given an explicit base, int() did ignore NULs + embedded in the string to convert. + +- Bug #1569998: break inside a try statement (outside a loop) is now + recognized and rejected. + +- list.pop(x) accepts any object x following the __index__ protocol. + +- A number of places, including integer negation and absolute value, + were fixed to not rely on undefined behaviour of the C compiler + anymore. + +- Bug #1566800: make sure that EnvironmentError can be called with any + number of arguments, as was the case in Python 2.4. + +- Patch #1567691: super() and new.instancemethod() now don't accept + keyword arguments any more (previously they accepted them, but didn't + use them). + +- Fix a bug in the parser's future statement handling that led to "with" + not being recognized as a keyword after, e.g., this statement: + from __future__ import division, with_statement + +- Bug #1557232: fix seg fault with def f((((x)))) and def f(((x),)). + +- Fix %zd string formatting on Mac OS X so it prints negative numbers. + +- Allow exception instances to be directly sliced again. + +- Bug #1551432: Exceptions do not define an explicit __unicode__ method. This + allows calling unicode() on exceptions classes directly to succeed. + +- Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack. + Also make sure that every exception class has __module__ set to + 'exceptions'. + +- Bug #1550983: emit better error messages for erroneous relative + imports (if not in package and if beyond toplevel package). + +- Overflow checking code in integer division ran afoul of new gcc + optimizations. Changed to be more standard-conforming. + +- Patch #1542451: disallow continue anywhere under a finally. + +- Patch #1546288: fix seg fault in dict_equal due to ref counting bug. + +- The return tuple from str.rpartition(sep) is (tail, sep, head) where + head is the original string if sep was not found. + +- Bug #1520864: unpacking singleton tuples in list comprehensions and + generator expressions (x for x, in ... ) works again. Fixing this problem + required changing the .pyc magic number. This means that .pyc files + generated before 2.5c2 will be regenerated. + +- ``with`` and ``as`` are now keywords. + +- Bug #1664966: Fix crash in exec if Unicode filename can't be decoded. + +- Issue #1537: Changed GeneratorExit's base class from Exception to + BaseException. + +- Fix Issue #1703448: A joined thread could show up in the + threading.enumerate() list after the join() for a brief period until + it actually exited. + + +Library +------- + +- Issue #1916. Added isgenerator() and isgeneratorfunction() to inspect.py. + +- #1224: Fixed bad url parsing when path begins with double slash. + +- ctypes instances that are not or do not contain pointers can now be + pickled. + +- Patch #1966: Break infinite loop in httplib when the servers + implements the chunked encoding incorrectly. + +- Rename rational.py to fractions.py and the rational.Rational class + to fractions.Fraction, to avoid the name clash with the abstract + base class numbers.Rational. See discussion in issue #1682. + +- The pickletools module now provides an optimize() function + that eliminates unused PUT opcodes from a pickle string. + +- #2021: Allow tempfile.NamedTemporaryFile and SpooledTemporaryFile + to be used in with statements by correctly supporting the context + management protocol. + +- #1979: Add rich comparisons to Decimal, and make Decimal comparisons + involving a NaN follow the IEEE 754 standard. + +- #2004: tarfile.py: Use mode 0700 for temporary directories and default + permissions for missing directories. + +- #175006: The debugger used to skip the condition of a "while" statement + after the first iteration. Now it correctly steps on the expression, and + breakpoints on the "while" statement are honored on each loop. + +- #1765140: add an optional delay argument to FileHandler and its + subclasses. Defaults to false (existing behaviour), but if true, + defers opening the file until the first call to emit(). + +- The pprint module now supports sets and frozensets. + +- #1221598: add optional callbacks to ftplib.FTP's storbinary() and + storlines() methods. (Contributed by Phil Schwartz) + +- #1715: include sub-extension modules in pydoc's text output. + +- #1836: fix an off-by-one bug in TimedRotatingHandler's rollover + time calculation. + +- #1021: fix a bug to allow basicConfig to accept NOTSET as a level. + +- #932563: add LoggerAdapter convenience class to make it easier to add + contextual information in logging output. + +- #1760556: fix a bug to avoid FileHandler throwing an exception in + flush(). + +- Bug #1530959: distutils' build command now uses different build directory + when building extension modules against versions of Python compiled + with ``--with-pydebug``. + +- #1555501: move plistlib from plat-mac directory to general library. + +- #1269: fix a bug in pstats.add_callers() and add a unit test file for + pstats. + +- #1669: don't allow shutil.rmtree() to be called on a symlink to a + directory. + +- #1664522: in urllib, don't read non-existing directories in ftp mode, + returning a 0-byte file -- raise an IOError instead. + +- #856047: respect the ``no_proxy`` environment variable when using the + ``http_proxy`` etc. environment variables in urllib. + +- #1178141: add a getcode() method to the addinfourls that urllib.open() + returns so that you can retrieve the HTTP status code. + +- Issue #1003: Fix zipfile decryption check, it would fail zip files + with extended local headers. + +- #1189216: Fix the zipfile module to work on archives with headers + past the 2**31 byte boundary. + +- #1336: fix a race condition in subprocess.Popen if the garbage + collector kicked in at the wrong time that would cause the process + to hang when the child wrote to stderr. + +- #1146: fix how textwrap breaks a long word that would start in the + last column of a line. + +- #1693149: trace.py --ignore-module - accept multiple comma-separated + modules to be given. + +- #1822: MIMEMultipart.is_multipart() behaves correctly for a just-created + (and empty) instance. Thanks Jonathan Share. + +- #1861: Added an attribute to the sched module which returns an ordered + list of upcoming events (displayed as named tuples). + +- #1837: The queue module now also supports a LIFO queue and a priority queue. + +- Patch #1048820: Add insert-mode editing to curses.textpad.Textbox + (patch by Stefan Wehr). Also, fix an off-by-one bug in + Textbox.gather(). + +- Issue #1831: ctypes now raises a TypeError if conflicting positional + and named arguments are passed to a Structure or Union initializer. + When too many positional arguments are passed, also a TypeError is + raised instead of a ValueError. + +- Convert the internal ctypes array type cache to a WeakValueDict so + that array types do not live longer than needed. + +- Issue #1786: pdb should use its own stdin/stdout around an exec call + and when creating a recursive instance. + +- Issue #1698398 Zipfile.printdir() crashed because the format string + expected a tuple type of length six instead of time.struct_time object. + +- Issue #1780: The Decimal constructor now accepts arbitrary leading + and trailing whitespace when constructing from a string. + Context.create_decimal no longer accepts trailing newlines. + +- Decimal.as_tuple(), difflib.find_longest_match() and inspect functions + that returned a tuple now return a named tuple. + +- Doctest now returns results as a named tuple for readability: + (0, 7) --> TestResults(failed=0, attempted=7) + +- Issue #846388. re.match is interruptible now, which is particularly + good for long regular expression matches. + +- pyexpat, patch #1137: allow setting buffer_size attribute + on Parser objects to set the character data buffer size. + +- Issue #1757: The hash of a Decimal instance is no longer affected by + the current context. + +- Patch #467924: add ZipFile.extract() and ZipFile.extractall() in the + zipfile module. + +- Issue #1646: Make socket support the TIPC protocol. + +- Bug #1742: return os.curdir from os.path.relpath() if both arguments are + equal instead of raising an exception. + +- Patch #1637: fix urlparse for URLs like 'http://x.com?arg=/foo'. + +- Patch #1698: allow '@' in username parsed by urlparse.py. + +- Issue #1735: TarFile.extractall() now correctly sets directory permissions + and times. + +- Bug #1713: posixpath.ismount() claims symlink to a mountpoint is a mountpoint. + +- Bug #1687: Fxed plistlib.py restricts <integer> to Python int when writing + +- Issue #1700: Regular expression inline flags incorrectly handle certain + unicode characters. + +- Issue #1689: PEP 3141, numeric abstract base classes. + +- Tk issue #1851526: Return results from Python callbacks to Tcl as + Tcl objects. + +- Issue #1642: Fix segfault in ctypes when trying to delete attributes. + +- Issue #1727780: Support loading pickles of random.Random objects created + on 32-bit systems on 64-bit systems, and vice versa. As a consequence + of the change, Random pickles created by Python 2.6 cannot be loaded + in Python 2.5. + +- Issue #1455: The distutils package now supports VS 2005 and VS 2008 for + both the msvccompiler and cygwincompiler. + +- Issue #1531: tarfile.py: Read fileobj from the current offset, do not + seek to the start. + +- Issue #1534: Added a dictionary sys.float_info with information about the + internal floating point type to the sys module. + +- Issue 1429818: patch for trace and doctest modules so they play nicely + together. + +- doctest made a bad assumption that a package's __loader__.get_data() + method used universal newlines. + +- Issue #1705170: contextlib.contextmanager was still swallowing + StopIteration in some cases. This should no longer happen. + +- Issue #1292: On alpha, arm, ppc, and s390 linux systems the + --with-system-ffi configure option defaults to "yes". + +- IN module for FreeBSD 8 is added and preexisting FreeBSD 6 and 7 + files are updated. + +- Issues #1181, #1287: unsetenv() is now called when the os.environ.pop() + and os.environ.clear() methods are used. + +- ctypes will now work correctly on 32-bit systems when Python is + configured with --with-system-ffi. + +- Patch #1203: ctypes now does work on OS X when Python is built with + --disable-toolbox-glue. + +- collections.deque() now supports a "maxlen" argument. + +- itertools.count() is no longer bounded to LONG_MAX. Formerly, it raised + an OverflowError. Now, automatically shifts from ints to longs. + +- Patch #1541463: optimize performance of cgi.FieldStorage operations. + +- Decimal is fully updated to the latest Decimal Specification (v1.66). + +- Bug #1153: repr.repr() now doesn't require set and dictionary items + to be orderable to properly represent them. + +- A 'c_longdouble' type was added to the ctypes module. + +- Bug #1709599: Run test_1565150 only if the file system is NTFS. + +- When encountering a password-protected robots.txt file the RobotFileParser + no longer prompts interactively for a username and password (bug 813986). + +- TarFile.__init__() no longer fails if no name argument is passed and + the fileobj argument has no usable name attribute (e.g. StringIO). + +- The functools module now provides 'reduce', for forward compatibility + with Python 3000. + +- Server-side SSL support and cert verification added, by Bill Janssen. + +- socket.ssl deprecated; use new ssl module instead. + +- uuid creation is now threadsafe. + +- EUC-KR codec now handles the cheot-ga-keut composed make-up hangul + syllables. + +- GB18030 codec now can encode additional two-byte characters that + are missing in GBK. + +- Add new codecs for UTF-32, UTF-32-LE and UTF-32-BE. + +- Bug #1704793: Return UTF-16 pair if unicodedata.lookup cannot + represent the result in a single character. + +- Bug #978833: Close https sockets by releasing the _ssl object. + +- Change location of the package index to pypi.python.org/pypi + +- Bug #1701409: Fix a segfault in printing ctypes.c_char_p and + ctypes.c_wchar_p when they point to an invalid location. As a + sideeffect the representation of these instances has changed. + +- tarfile.py: Added "exclude" keyword argument to TarFile.add(). + +- Bug #1734723: Fix repr.Repr() so it doesn't ignore the maxtuple attribute. + +- The urlopen function of urllib2 now has an optional timeout parameter (note + that it actually works with HTTP, HTTPS, FTP and FTPS connections). + +- In ftplib, the FTP.ntransfercmd method, when in passive mode, now uses + the socket.create_connection function, using the timeout specified at + connection time. + +- Bug #1728403: Fix a bug that CJKCodecs StreamReader hangs when it + reads a file that ends with incomplete sequence and sizehint argument + for .read() is specified. + +- Bug #1730389: Change time.strptime() to use ``\s+`` instead of ``\s*`` when + matching spaces in the specified format argument. + +- SF 1668596/1720897: distutils now copies data files + even if package_dir is empty. + +- sha now raises a DeprecationWarning upon import. + +- md5 now raises a DeprecationWarning upon import. + +- Issue1385: The hmac module now computes the correct hmac when using hashes + with a block size other than 64 bytes (such as sha384 and sha512). + +- mimify now raises a DeprecationWarning upon import. + +- MimeWriter now raises a DeprecationWarning upon import. + +- tarfile.py: Improved unicode support. Unicode input names are now + officially supported. Added "errors" argument to the TarFile class. + +- urllib.ftpwrapper class now accepts an optional timeout. + +- shlex.split() now has an optional "posix" parameter. + +- The posixfile module now raises a DeprecationWarning. + +- Remove the gopherlib module. This also leads to the removal of gopher + support in urllib/urllib2. + +- Fix bug in marshal where bad data would cause a segfault due to + lack of an infinite recursion check. + +- Removed plat-freebsd2 and plat-freebsd3 directories (and IN.py in + the directories). + +- HTML-escape the plain traceback in cgitb's HTML output, to prevent + the traceback inadvertently or maliciously closing the comment and + injecting HTML into the error page. + +- The popen2 module and os.popen* are deprecated. Use the subprocess module. + +- Added an optional credentials argument to SMTPHandler, for use with SMTP + servers which require authentication. + +- Patch #1695948: Added optional timeout parameter to SocketHandler. + +- Bug #1652788: Minor fix for currentframe. + +- Patch #1598415: Added WatchedFileHandler to better support external + log file rotation using e.g. newsyslog or logrotate. This handler is + only useful in Unix/Linux environments. + +- Bug #1706381: Specifying the SWIG option "-c++" in the setup.py file + (as opposed to the command line) will now write file names ending in + ".cpp" too. + +- As specified in RFC 2616, an HTTP response like 2xx indicates that + the client's request was successfully received, understood, and accepted. + Now in these cases no error is raised in urllib (issue #1177) and urllib2. + +- Bug #1290505: time.strptime's internal cache of locale information is now + properly recreated when the locale is changed. + +- Patch #1685563: remove (don't add) duplicate paths in distutils.MSVCCompiler. + +- Added a timeout parameter to the constructor of other protocols + (telnetlib, ftplib, smtplib and poplib). This is second part of the + work started with create_connection() and timeout in httplib, and + closes patch #723312. + +- Patch #1676823: Added create_connection() to socket.py, which may be + called with a timeout, and use it from httplib (whose HTTPConnection + and HTTPSConnection now accept an optional timeout). + +- Bug #978833: Revert r50844, as it broke _socketobject.dup. + +- Bug #1675967: re patterns pickled with Python 2.4 and earlier can + now be unpickled with Python 2.5 and newer. + +- Patch #1630118: add a SpooledTemporaryFile class to tempfile.py. + +- Patch #1273829: os.walk() now has a "followlinks" parameter. If set to + True (which is not the default), it visits symlinks pointing to + directories. + +- Bug #1681228: the webbrowser module now correctly uses the default + GNOME or KDE browser, depending on whether there is a session of one + of those present. Also, it tries the Windows default browser before + trying Mozilla variants. + +- Patch #1339796: add a relpath() function to os.path. + +- Patch #1681153: the wave module now closes a file object it opened if + initialization failed. + +- Bug #767111: fix long-standing bug in urllib which caused an + AttributeError instead of an IOError when the server's response didn't + contain a valid HTTP status line. + +- Patch #957650: "%var%" environment variable references are now properly + expanded in ntpath.expandvars(), also "~user" home directory references + are recognized and handled on Windows. + +- Patch #1429539: pdb now correctly initializes the __main__ module for + the debugged script, which means that imports from __main__ work + correctly now. + +- The nonobvious commands.getstatus() function is now deprecated. + +- Patch #1393667: pdb now has a "run" command which restarts the debugged + Python program, optionally with different arguments. + +- Patch #1649190: Adding support for _Bool to ctypes as c_bool. + +- Patch #1530482: add pydoc.render_doc() which returns the documentation + for a thing instead of paging it to stdout, which pydoc.doc() does. + +- Patch #1533909: the timeit module now accepts callables in addition to + strings for the code to time and the setup code. Also added two + convenience functions for instantiating a Timer and calling its methods. + +- Patch #1537850: tempfile.NamedTemporaryFile now has a "delete" parameter + which can be set to False to prevent the default delete-on-close + behavior. + +- Patch #1581073: add a flag to textwrap that prevents the dropping of + whitespace while wrapping. + +- Patch #1603688: ConfigParser.SafeConfigParser now checks values that + are set for invalid interpolation sequences that would lead to errors + on reading back those values. + +- Added support for the POSIX.1-2001 (pax) format to tarfile.py. Extended + and cleaned up the test suite. Added a new testtar.tar. + +- Patch #1449244: Support Unicode strings in + email.message.Message.{set_charset,get_content_charset}. + +- Patch #1542681: add entries for "with", "as" and "CONTEXTMANAGERS" to + pydoc's help keywords. + +- Patch #1555098: use str.join() instead of repeated string + concatenation in robotparser. + +- Patch #1635454: the csv.DictWriter class now includes the offending + field names in its exception message if you try to write a record with + a dictionary containing fields not in the CSV field names list. + +- Patch #1668100: urllib2 now correctly raises URLError instead of + OSError if accessing a local file via the file:// protocol fails. + +- Patch #1677862: Require a space or tab after import in .pth files. + +- Patch #1192590: Fix pdb's "ignore" and "condition" commands so they trap + the IndexError caused by passing in an invalid breakpoint number. + +- Patch #1599845: Add an option to disable the implicit calls to server_bind() + and server_activate() in the constructors for TCPServer, SimpleXMLRPCServer + and DocXMLRPCServer. + +- Bug #1531963: Make SocketServer.TCPServer's server_address always + be equal to calling getsockname() on the server's socket. Fixed by + patch #1545011. + +- Patch #742598: Add .timeout attribute to SocketServer that calls + .handle_timeout() when no requests are received. + +- Bug #1651235: When a tuple was passed to a ctypes function call, + Python would crash instead of raising an error. + +- Bug #1646630: ctypes.string_at(buf, 0) and ctypes.wstring_at(buf, 0) + returned string up to the first NUL character. + +- Patch #957003: Implement smtplib.LMTP. + +- Patch #1481079: add support for HTTP_REFERER to CGIHTTPServer. + +- Patch #1675424: Added tests for uncovered code in the zipfile module. + The KeyError raised by Zipfile.getinfo for nonexistent names now has + a descriptive message. + +- Bug #1115886: os.path.splitext('.cshrc') gives now ('.cshrc', ''). + +- unittest now verifies more of its assumptions. In particular, TestCase + and TestSuite subclasses (not instances) are no longer accepted in + TestSuite.addTest(). This should cause no incompatibility since it + never made sense with ordinary subclasses -- the failure just occurred + later, with a more cumbersome exception. + +- Patch #787789: allow to pass custom TestRunner instances to unittest's + main() function. + +- Patches #1550273, #1550272: fix a few bugs in unittest and add a + comprehensive test suite for the module. + +- Patch #1001604: glob.glob() now returns unicode filenames if it was + given a unicode argument and os.listdir() returns unicode filenames. + +- Patch #1673619: setup.py identifies extension modules it doesn't know how + to build and those it knows how to build but that fail to build. + +- Patch #912410: Replace HTML entity references for attribute values + in HTMLParser. + +- Patch #1663234: you can now run doctest on test files and modules + using "python -m doctest [-v] filename ...". + +- Patch #1121142: Implement ZipFile.open. + +- Taught setup.py how to locate Berkeley DB on Macs using MacPorts. + +- Added heapq.merge() for merging sorted input streams. + +- Added collections.namedtuple() for assigning field names to tuples. + +- Added itertools.izip_longest(). + +- Have the encoding package's search function dynamically import using absolute + import semantics. + +- Patch #1647484: Renamed GzipFile's filename attribute to name. + +- Patch #1517891: Mode 'a' for ZipFile now creates the file if it + doesn't exist. + +- Patch #698833: Support file decryption in zipfile. + +- Patch #685268: Consider a package's __path__ in imputil. + +- Patch 1463026: Support default namespace in XMLGenerator. + +- Patch 1571379: Make trace's --ignore-dir facility work in the face of + relative directory names. + +- Bug #1600860: Search for shared python library in LIBDIR, + not lib/python/config, on "linux" and "gnu" systems. + +- Patch #1652681: tarfile.py: create nonexistent files in append mode and + allow appending to empty files. + +- Bug #1124861: Automatically create pipes if GetStdHandle fails in + subprocess. + +- Patch #1634778: add missing encoding aliases for iso8859_15 and + iso8859_16. + +- Patch #1638243: the compiler package is now able to correctly compile + a with statement; previously, executing code containing a with statement + compiled by the compiler package crashed the interpreter. + +- Bug #1643943: Fix time.strptime's support for the %U directive. + +- Patch #1507247: tarfile.py: use current umask for intermediate + directories. + +- Patch #1627441: close sockets properly in urllib2. + +- Bug #494589: make ntpath.expandvars behave according to its docstring. + +- Changed platform module API python_version_tuple() to actually + return a tuple (it used to return a list). + +- Added new platform module APIs python_branch(), python_revision(), + python_implementation() and linux_distribution(). + +- Added support for IronPython and Jython to the platform module. + +- The sets module has been deprecated. Use the built-in set/frozenset types + instead. + +- Bug #1610795: make ctypes.util.find_library work on BSD systems. + +- Fixes for 64-bit Windows: In ctypes.wintypes, correct the + definitions of HANDLE, WPARAM, LPARAM data types. Make + parameterless foreign function calls work. + +- The version number of the ctypes package changed to "1.1.0". + +- Bug #1627575: logging: Added _open() method to FileHandler which can + be used to reopen files. The FileHandler instance now saves the + encoding (which can be None) in an attribute called "encoding". + +- Bug #411881: logging.handlers: bare except clause removed from + SMTPHandler.emit. Now, only ImportError is trapped. + +- Bug #411881: logging.handlers: bare except clause removed from + SocketHandler.createSocket. Now, only socket.error is trapped. + +- Bug #411881: logging: bare except clause removed from LogRecord.__init__. + Now, only ValueError, TypeError and AttributeError are trapped. + +- Patch #1504073: Fix tarfile.open() for mode "r" with a fileobj argument. + +- Patch #1182394 from Shane Holloway: speed up HMAC.hexdigest. + +- Patch #1262036: Prevent TarFiles from being added to themselves under + certain conditions. + +- Patch #1230446: tarfile.py: fix ExFileObject so that read() and tell() + work correctly together with readline(). + +- Patch #1484695: The tarfile module now raises a HeaderError exception + if a buffer given to frombuf() is invalid. + +- Bug #1503765: Fix a problem in logging.config with spaces in comma- + separated lists read from logging config files. + +- Patch #1604907: Fix problems in logging.handlers caused at logging shutdown + when syslog handlers fail to initialize because of syslogd problems. + +- Patch #1608267: fix a race condition in os.makedirs() if the directory + to be created is already there. + +- Patch #1610437: fix a tarfile bug with long filename headers. + +- Patch #1371075: Make ConfigParser accept optional dict type + for ordering, sorting, etc. + +- Bug #1563807: _ctypes built on AIX fails with ld ffi error. + +- Bug #1598620: A ctypes Structure cannot contain itself. + +- Patch #1070046: Marshal new-style objects like InstanceType + in xmlrpclib. + +- cStringIO.truncate(-1) now raises an IOError, like StringIO and + regular files. + +- Patch #1472877: Fix Tix subwidget name resolution. + +- Patch #1594554: Always close a tkSimpleDialog on ok(), even + if an exception occurs. + +- Patch #1538878: Don't make tkSimpleDialog dialogs transient if + the parent window is withdrawn. + +- Bug #1597824: return the registered function from atexit.register() + to facilitate usage as a decorator. + +- Patch #1360200: Use unmangled_version RPM spec field to deal with + file name mangling. + +- Patch #1359217: Process 2xx response in an ftplib transfer + that precedes an 1xx response. + +- Patch #1355023: support whence argument for GzipFile.seek. + +- Patch #1065257: Support passing open files as body in + HTTPConnection.request(). + +- Bug #1569790: mailbox.py: Maildir.get_folder() and MH.get_folder() + weren't passing the message factory on to newly created Maildir/MH + objects. + +- Patch #1514543: mailbox.py: In the Maildir class, report errors if there's + a filename clash instead of possibly losing a message. (Patch by David + Watson.) + +- Patch #1514544: Try to ensure that messages/indexes have been physically + written to disk after calling .flush() or .close(). (Patch by David + Watson.) + +- Patch #1592250: Add elidge argument to Tkinter.Text.search. + +- Patch #838546: Make terminal become controlling in pty.fork() + +- Patch #1351744: Add askyesnocancel helper for tkMessageBox. + +- Patch #1060577: Extract list of RPM files from spec file in + bdist_rpm + +- Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders. + +- Patch #1583880: fix tarfile's problems with long names and posix/ + GNU modes. + +- Bug #1586448: the compiler module now emits the same bytecode for + list comprehensions as the builtin compiler, using the LIST_APPEND + opcode. + +- Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and + fix all codecs file wrappers to work correctly with the "with" + statement (bug #1586513). + +- Lib/modulefinder.py now handles absolute and relative imports + correctly. + +- Patch #1567274: Support SMTP over TLS. + +- Patch #1560695: Add .note.GNU-stack to ctypes' sysv.S so that + ctypes isn't considered as requiring executable stacks. + +- ctypes callback functions only support 'fundamental' data types as + result type. Raise an error when something else is used. This is a + partial fix for Bug #1574584. + +- Fix turtle so that time.sleep is imported for the entire library. Allows + the demo2 function to be executed on its own instead of only when the + module is run as a script. + +- Bug #813342: Start the IDLE subprocess with -Qnew if the parent + is started with that option. + +- Bug #1565150: Fix subsecond processing for os.utime on Windows. + +- Support for MSVC 8 was added to bdist_wininst. + +- Bug #1446043: correctly raise a LookupError if an encoding name given + to encodings.search_function() contains a dot. + +- Bug #1560617: in pyclbr, return full module name not only for classes, + but also for functions. + +- Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes + keep_blank_values and strict_parsing keyword arguments. + +- Bug #1566602: correct failure of posixpath unittest when $HOME ends + with a slash. + +- Bug #1565661: in webbrowser, split() the command for the default + GNOME browser in case it is a command with args. + +- Made the error message for time.strptime when the data data and format do + match be more clear. + +- Fix a bug in traceback.format_exception_only() that led to an error + being raised when print_exc() was called without an exception set. + In version 2.4, this printed "None", restored that behavior. + +- Make webbrowser.BackgroundBrowser usable in Windows (it wasn't because + the close_fds arg to subprocess.Popen is not supported). + +- Reverted patch #1504333 to sgmllib because it introduced an infinite loop. + +- Patch #1553314: Fix the inspect.py slowdown that was hurting IPython & SAGE + by adding smarter caching in inspect.getmodule() + +- Fix missing import of the types module in logging.config. + +- Patch #1550886: Fix decimal module context management implementation + to match the localcontext() example from PEP 343. + +- Bug #1545341: The 'classifier' keyword argument to the Distutils setup() + function now accepts tuples as well as lists. + +- Bug #1541863: uuid.uuid1 failed to generate unique identifiers + on systems with low clock resolution. + +- Bug #1531862: Do not close standard file descriptors in subprocess. + +- idle: Honor the "Cancel" action in the save dialog (Debian bug #299092). + +- Fix utf-8-sig incremental decoder, which didn't recognise a BOM when the + first chunk fed to the decoder started with a BOM, but was longer than 3 bytes. + +- The implementation of UnicodeError objects has been simplified (start and end + attributes are now stored directly as Py_ssize_t members). + +- Issue829951: In the smtplib module, SMTP.starttls() now complies with + RFC 3207 and forgets any knowledge obtained from the server not obtained + from the TLS negotiation itself. Patch contributed by Bill Fenner. + +- Issue1339: The smtplib.SMTP class has been refactored a bit such + that the SMTP.starttls() caller no longer needs to call ehlo() + beforehand. SMTP.starttls() now raises an exception of the server + does not claim to support starttls. Adds the SMTP.ehlo_or_helo_if_needed() + method. Patch contributed by Bill Fenner. + + +>>>>>>> .merge-right.r60891 Extension Modules ----------------- <<<<<<< .working +<<<<<<< .working - Issue #1762972: Readded the reload() function as imp.reload() ======= +======= +- #2112: mmap.error is now a subclass of EnvironmentError and not a + direct EnvironmentError + +>>>>>>> .merge-right.r60878 - Bug #2111: mmap segfaults when trying to write a block opened with PROT_READ - #2063: correct order of utime and stime in os.times() result on Windows. >>>>>>> .merge-right.r60845 +<<<<<<< .working +======= +- Updated ``big5hkscs`` codec to the HKSCS revision of 2004. + +- #1940: make it possible to use curses.filter() before curses.initscr() + as the documentation says. + +- Backport of _fileio module from Python 3.0. + +- #1087741: mmap.mmap is now a class, not a factory function. It is also + subclassable now. + +- Patch #1648: added ``sys.getprofile()`` and ``sys.gettrace()``. + +- Patch #1663329: added ``os.closerange()`` function to quickly close a range + of file descriptors without considering errors. + +- Patch 976880: ``mmap`` objects now have an ``rfind`` method that + works as expected. ``mmap.find`` also takes an optional ``end`` + parameter. + +- _winreg's HKEY object has gained __enter__ and __exit__ methods to support + the context manager protocol. The _winreg module also gained a new function + ``ExpandEnvironmentStrings`` to expand REG_EXPAND_SZ keys. + +- itertools.starmap() now accepts any iterable input. Previously, it required + the function inputs to be tuples. + +- Issue #1646: Make socket support TIPC. The socket module now has support + for TIPC under Linux, see http://tipc.sf.net/ for more information. + +- Added interface for Windows' WSAIoctl to socket object and added an example + for a simple network sniffer. + +- Bug #1301: Bad assert in _tkinter fixed. + +- Added bdist_wininst executable for VS 2008. + +- Bug #1604: collections.deque.__init__(iterable) now clears any prior contents + before adding elements from the iterable. This fix brings the behavior into + line with that for list.__init__(). + +- Added wide char functions to msvcrt module: getwch, getwche, putwch and + ungetwch. The functions accept or return unicode. + +- os.access now returns True on Windows for any existing directory. + +- Added warnpy3k function to the warnings module. + +- Marshal.dumps() now expects exact type matches for int, long, float, complex, + tuple, list, dict, set, and frozenset. Formerly, it would silently miscode + subclasses of those types. Now, it raises a ValueError instead. + +- Patch #1388440: Add set_completion_display_matches_hook and + get_completion_type to readline. + +- Bug #1649098: Avoid declaration of zero-sized array declaration in + structure. + +- Removed the rgbimg module; been deprecated since Python 2.5. + +- Bug #1721309: prevent bsddb module from freeing random memory. + +- Bug #1233: fix bsddb.dbshelve.DBShelf append method to work as + intended for RECNO databases. + +- pybsddb.sf.net Bug #477182: Load the database flags at database open + time so that opening a database previously created with the DB_DUP or + DB_DUPSORT flag set will keep the proper behavior on subsequent opens. + Specifically: dictionary assignment to a DB object will replace all + values for a given key when the database allows duplicate values. + DB users should use DB.put(k, v) when they want to store duplicates; not + DB[k] = v. + +- Add the bsddb.db.DBEnv.lock_id_free method. + +- Bug #1686475: Support stat'ing open files on Windows again. + +- Patch #1185447: binascii.b2a_qp() now correctly quotes binary characters + with ASCII value less than 32. Also, it correctly quotes dots only if + they occur on a single line, as opposed to the previous behavior of + quoting dots if they are the second character of any line. + +- Bug #1622896: fix a rare corner case where the bz2 module raised an + error in spite of a succesful compression. + +- Patch #1654417: make operator.{get,set,del}slice use the full range + of Py_ssize_t. + +- Patch #1646728: datetime.fromtimestamp fails with negative + fractional times. With unittest. + +- Patch #1490190: posixmodule now includes os.chflags() and os.lchflags() + functions on platforms where the underlying system calls are available. + +- Patch #1494140: Add documentation for the new struct.Struct object. + +- Patch #1432399: Support the HCI protocol for bluetooth sockets + +- Patch #1657276: Make NETLINK_DNRTMSG conditional. + +- Bug #1653736: Complain about keyword arguments to time.isoformat. + +- Bug #1486663: don't reject keyword arguments for subclasses of builtin + types. + +- Patch #1610575: The struct module now supports the 't' code, for + C99 _Bool. + +- Patch #1635058: ensure that htonl and friends never accept or + return negative numbers, per the underlying C implementation. + +- Patch #1544279: Improve thread-safety of the socket module by moving + the sock_addr_t storage out of the socket object. + +- Patch #1019808: fix bug that causes an incorrect error to be returned + when a socket timeout is set and a connection attempt fails. + +- Speed up function calls into the math module. + +- Bug #1588217: don't parse "= " as a soft line break in binascii's + a2b_qp() function, instead leave it in the string as quopri.decode() + does. + +- Bug #1599782: Fix segfault on bsddb.db.DB().type(). + +- Bug #1567666: Emulate GetFileAttributesExA for Win95. + +- Patch #1576166: Support os.utime for directories on Windows NT+. + +- Patch #1572724: fix typo ('=' instead of '==') in _msi.c. + +- Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault + when encoding non-BMP unicode characters. + +- Bug #1556784: allow format strings longer than 127 characters in + datetime's strftime function. + +- Fix itertools.count(n) to work with negative numbers again. + +- RLIMIT_SBSIZE was added to the resource module where available. + +- Bug #1551427: fix a wrong NULL pointer check in the win32 version + of os.urandom(). + +- Bug #1548092: fix curses.tparm seg fault on invalid input. + +- Patch #1114: fix curses module compilation on 64-bit AIX, & possibly + other 64-bit LP64 platforms where attr_t is not the same size as a long. + (Contributed by Luke Mewburn.) + +- Bug #1550714: fix SystemError from itertools.tee on negative value for n. + +- Fixed a few bugs on cjkcodecs: + - gbk and gb18030 codec now handle U+30FB KATAKANA MIDDLE DOT correctly. + - iso2022_jp_2 codec now encodes into G0 for KS X 1001, GB2312 + codepoints to conform the standard. + - iso2022_jp_3 and iso2022_jp_2004 codec can encode JIS X 0213:2 + codepoints now. + +- Bug #1552726: in readline.c, avoid repeatedly polling in interactive + mode by only placing a timeout on the select() if an input hook has + been defined. This prevents an interactive Python from waking up 10 + times per second. Patch by Richard Boulton. + +- fixed a bug with bsddb.DB.stat: the flags and txn keyword arguments + were transposed. + +- Added support for linking the bsddb module against BerkeleyDB 4.5.x + and 4.6.x. + +- Bug #1633621: if curses.resizeterm() or curses.resize_term() is called, + update _curses.LINES, _curses.COLS, curses.LINES and curses.COLS. + +- Fix an off-by-one bug in locale.strxfrm(). + +- Fix libffi configure for hppa*-*-linux* | parisc*-*-linux*. + +- Build using system ffi library on arm*-linux*. + +- Bug #1372: zlibmodule.c: int overflow in PyZlib_decompress + +- bsddb module: Fix memory leak when using database cursors on + databases without a DBEnv. + +Tests +----- + +- Refactor test_logging to use doctest. + +- Refactor test_profile and test_cprofile to use the same code to profile. + +- Make test_runpy reentrant by fixing _check_module to clear out any module + being tested. Was causing an error by __import__ doing a reload on the + second run and thus suppressing bytecode recreation. + +- Capture socket connection resets and timeouts in test_socket_ssl and + test_urllib2net and raise test.test_support.ResourceDenied. + +- Patch #1559413: Fix test_cmd_line if sys.executable contains a space. + +- Added test.test_support.TransientResource which is a context manager to + surround calls to resources that are not guaranteed to work even if + test.test_support.requires says that the resource should exist. + +- Added a test for slicing of an exception. + +- Added test.test_support.EnvironmentVarGuard. It's a class that provides a + context manager so that one can temporarily set or unset environment + variables. + +- Added some tests for modulefinder. + +- Converted test_imp to use unittest. + +- Fix bsddb test_basics.test06_Transactions to check the version + number properly. + +- test.test_support.catch_warning is a new context manager that can be used + to catch the warnings issued by the warning framework. + + +Tools +----- + +- Tools/scripts/reindent.py now creates the backup file using shutil.copy + to preserve user/group and permissions. Added also a --nobackup option + to not create the backup if the user is concerned regarding this. Check + issue 1050828 for more details. + +- Tools/scripts/win_add2path.py was added. The simple script modifes the + PATH environment var of the HKCU tree and adds the python bin and script + directory. + +- Tools/18n/pygettext.py was added to the list of scripts installed by + Tools/scripts/setup.py (tracker item 642309). + +- Added IronPython and Jython support to pybench (part of which + was patch #1563844) + +- Made some minor changes to pybench output to allow the user + to see which Python version is running pybench + +- Added support for the new platform module feature + platform.python_implementation(); this will now be saved + in the benchmark pickle + + +Documentation +------------- + +- RFE #1765140: Updated documentation on FileHandler and subclasses to + include new optional delay argument. + +- Bug #932563: Added section on getting contextual information into logging + output, and added documentation for the new LoggerAdapter class. + +- Bug #1295: Added information about caching of formatted exception + information in the LogRecord by Formatter.format(). + +- Bug #1637365: add subsection about "__name__ == __main__" to the + Python tutorial. + +- Patch #1698768: updated the "using Python on the Mac" intro. + +- Bug #1569057: Document that calling file.next() when the file is open for + writing is undefined. + +- Patch #1489771: the syntax rules in Python Reference Manual were + updated to reflect the current Python syntax. + +- Patch #1686451: Fix return type for + PySequence_{Count,Index,Fast_GET_SIZE}. + +- Patch #1679379: add documentation for fnmatch.translate(). + +- Bug #1629566: clarify the docs on the return values of parsedate() + and parsedate_tz() in email.utils and rfc822. + +- Patch #1671450: add a section about subclassing builtin types to the + "extending and embedding" tutorial. + +- Bug #1629125: fix wrong data type (int -> Py_ssize_t) in PyDict_Next + docs. + +- Bug #1565919: document set types in the Language Reference. + +- Bug #1546052: clarify that PyString_FromString(AndSize) copies the + string pointed to by its parameter. + +- Bug #1566663: remove obsolete example from datetime docs. + +- Bug #1541682: Fix example in the "Refcount details" API docs. + Additionally, remove a faulty example showing PySequence_SetItem applied + to a newly created list object and add notes that this isn't a good idea. + + +Tools/Demos +----------- + +- Patch #1552024: add decorator support to unparse.py demo script. + +- Make auto-generated python.vim file list built-ins and exceptions in + alphatbetical order. Makes output more deterministic and easier to tell if + the file is stale or not. + +- Bug #1546372: Fixed small bugglet in pybench that caused a missing + file not to get reported properly. + + +Build +----- + +- Have the search path for building extensions follow the declared order in + $CPPFLAGS and $LDFLAGS when adding directories from those environment + variables. + +- Bug #1983: Added a check to pyport to verify that sizeof(pid_t) is + smaller or equal sizeof(long). + +- Bug #1234: Fixed semaphore errors on AIX 5.2 + +- Issue #1726: Remove Python/atof.c from PCBuild/pythoncore.vcproj + +- Removed PCbuild8/ directory and added a new build directory for VS 2005 + based on the VS 2008 build directory to PC/VS8.0. The script + PCbuild/vs8to9.py was added to sync changes from PCbuild to PC/VS8.0. + +- Moved PCbuild/ directory for VS 2003 to PC/VS7.1 and renamed PCBuild9/ + directory to PCBuild/. + +- Bug #1699: Define _BSD_SOURCE only on OpenBSD. + +- Bug #1608: use -fwrapv when GCC supports it. This is important, + newer GCC versions may optimize away overflow buffer overflow checks + without this option! + +- Patch #1418: Make the AC_REPLACE_FUNCS object files actually work. + +- Add a FAST_LOOPS build option that speeds-up looping by trading away + periodic threadstate and signal checking in tight loops. By default, + this option is turned-off. It should only be enabled in debugged, + performance critical applications. + +- Patch #786737: Allow building in a tree of symlinks pointing to + a readonly source. + +- Bug #1737210: Change Manufacturer of Windows installer to PSF. + +- Bug #1746880: Correctly install DLLs into system32 folder on Win64. + +- Define _BSD_SOURCE, to get access to POSIX extensions on OpenBSD 4.1+. + +- Stop supporting AtheOS and cause a build error in configure for the platform. + +- Bug #1655392: don't add -L/usr/lib/pythonX.Y/config to the LDFLAGS + returned by python-config if Python was built with --enable-shared + because that prevented the shared library from being used. + +- Patch #1569798: fix a bug in distutils when building Python from a + directory within sys.exec_prefix. + +- Bug #1675511: Use -Kpic instead of -xcode=pic32 on Solaris/x86. + +- Disable _XOPEN_SOURCE on NetBSD 1.x. + +- configure now checks whether gcc supports the PyArg_ParseTuple format + attribute. + +- Bug #1578513: Cross compilation was broken by a change to configure. + Repair so that it's back to how it was in 2.4.3. + +- Patch #1576954: Update VC6 build directory; remove redundant + files in VC7. + +- Bug #1568842: Fix test for uintptr_t. + +- Patch #1540470, for OpenBSD 4.0. + +- Fix build failure on kfreebsd and on the hurd. + +- Fix the build of the library reference in info format. + +- Allow Emacs 22 for building the documentation in info format. + +- Makefile.pre.in(buildbottest): Run an optional script pybuildbot.identify + to include some information about the build environment. + + +C API +----- + +- Unified naming convention for free lists and their limits. All free lists + in Object/ are named ``free_list``, the counter ``numfree`` and the upper + limit is a macro ``PyName_MAXFREELIST`` inside an #ifndef block. + +- ``PySet_Add()`` can now modify a newly created frozenset. Similarly to + ``PyTuple_SetItem``, it can be used to populate a brand new frozenset; but + it does not steal a reference to the added item. + +- Added ``PySet_Check()`` and ``PyFrozenSet_Check()`` to the set API. + +- Backport of PyUnicode_FromString(), _FromStringAndSize(), _Format and + _FormatV from Python 3.0. Made PyLong_AsSsize_t and PyLong_FromSsize_t + public functions. + +- Patch #1720595: add T_BOOL to the range of structmember types. + +- Issue #1534: Added ``PyFloat_GetMax()``, ``PyFloat_GetMin()`` and + ``PyFloat_GetInfo()`` to the float API. + +- Issue #1521: On 64bit platforms, using PyArgs_ParseTuple with the t# of w# + format code incorrectly truncated the length to an int, even when + PY_SSIZE_T_CLEAN is set. The str.decode method used to return incorrect + results with huge strings. + +- Issue #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE + and Py_REFCNT. + +- PEP 3123: Provide forward compatibility with Python 3.0, while keeping + backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size, and + PyVarObject_HEAD_INIT. + +- Py_ssize_t fields work in structmember when HAVE_LONG_LONG is not defined. + +- Patch #1733960: Allow T_LONGLONG to accept ints. + +- T_PYSSIZET can now be used in PyMemberDef lists for Py_ssize_t members. + +- Added a new API function ``PyImport_ImportModuleNoBlock``. + +- Bug #1637022: Prefix AST symbols with _Py_. + +- Fix some leftovers from the conversion from int to Py_ssize_t + (relevant to strings and sequences of more than 2**31 items). + +- Make _PyGILState_NoteThreadState() static, it was not used anywhere + outside of pystate.c and should not be necessary. + +- ``PyImport_Import`` and ``PyImport_ImportModule`` now always do absolute + imports. In earlier versions they might have used relative imports under + some conditions. + +- Added case insensitive comparison methods ``PyOS_stricmp(char*, char*)`` + and ``PyOS_strnicmp(char*, char*, Py_ssize_t)``. + +- Bug #1542693: remove semi-colon at end of PyImport_ImportModuleEx macro + so it can be used as an expression. + + +Windows +------- + +- Patch #1706: Drop support for Win9x, WinME and NT4. Python now requires + Windows 2000 or greater. The _WINVER and NTDDI_VERSION macros are set to + Win2k for x86/32bit builds and WinXP for AMD64 builds. + +- Conditionalize definition of _CRT_SECURE_NO_DEPRECATE + and _CRT_NONSTDC_NO_DEPRECATE. + +- Bug #1216: Restore support for Visual Studio 2002. + + +Mac +--- + +- cfmfile now raises a DeprecationWarning. + +- buildtools now raises a DeprecationWarning. + +- Removed the macfs module. It had been deprecated since Python 2.5. This + lead to the deprecation of macostools.touched() as it relied solely on macfs + and was a no-op under OS X. + + +What's New in Python 2.5 release candidate 1? +============================================= + +*Release date: 17-AUG-2006* + +Core and builtins +----------------- + +- Unicode objects will no longer raise an exception when being + compared equal or unequal to a string and a UnicodeDecodeError + exception occurs, e.g. as result of a decoding failure. + + Instead, the equal (==) and unequal (!=) comparison operators will + now issue a UnicodeWarning and interpret the two objects as + unequal. The UnicodeWarning can be filtered as desired using + the warning framework, e.g. silenced completely, turned into an + exception, logged, etc. + + Note that compare operators other than equal and unequal will still + raise UnicodeDecodeError exceptions as they've always done. + +- Fix segfault when doing string formatting on subclasses of long. + +- Fix bug related to __len__ functions using values > 2**32 on 64-bit machines + with new-style classes. + +- Fix bug related to __len__ functions returning negative values with + classic classes. + +- Patch #1538606, Fix __index__() clipping. There were some problems + discovered with the API and how integers that didn't fit into Py_ssize_t + were handled. This patch attempts to provide enough alternatives + to effectively use __index__. + +- Bug #1536021: __hash__ may now return long int; the final hash + value is obtained by invoking hash on the long int. + +- Bug #1536786: buffer comparison could emit a RuntimeWarning. + +- Bug #1535165: fixed a segfault in input() and raw_input() when + sys.stdin is closed. + +- On Windows, the PyErr_Warn function is now exported from + the Python dll again. + +- Bug #1191458: tracing over for loops now produces a line event + on each iteration. Fixing this problem required changing the .pyc + magic number. This means that .pyc files generated before 2.5c1 + will be regenerated. + +- Bug #1333982: string/number constants were inappropriately stored + in the byte code and co_consts even if they were not used, ie + immediately popped off the stack. + +- Fixed a reference-counting problem in property(). + + +>>>>>>> .merge-right.r60878 Library ------- diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index b77dda5..469c531 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -1326,7 +1326,10 @@ initmmap(void) dict = PyModule_GetDict(module); if (!dict) return; - mmap_module_error = PyExc_EnvironmentError; + mmap_module_error = PyErr_NewException("mmap.error", + PyExc_EnvironmentError , NULL); + if (mmap_module_error == NULL) + return; PyDict_SetItemString(dict, "error", mmap_module_error); PyDict_SetItemString(dict, "mmap", (PyObject*) &mmap_object_type); #ifdef PROT_EXEC diff --git a/PC/VC6/pythoncore.dsp b/PC/VC6/pythoncore.dsp index 858619c..9c815c6 100644 --- a/PC/VC6/pythoncore.dsp +++ b/PC/VC6/pythoncore.dsp @@ -125,6 +125,10 @@ SOURCE=..\..\Modules\_codecsmodule.c # End Source File
# Begin Source File
+SOURCE=..\..\Modules\_collectionsmodule.c
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Modules\_csv.c
# End Source File
# Begin Source File
@@ -349,6 +353,14 @@ SOURCE=..\..\Objects\floatobject.c # End Source File
# Begin Source File
+SOURCE=..\..\Python\formatter_string.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\Python\formatter_unicode.c
+# End Source File
+# Begin Source File
+
SOURCE=..\..\Objects\frameobject.c
# End Source File
# Begin Source File
diff --git a/PC/VS7.1/pythoncore.vcproj b/PC/VS7.1/pythoncore.vcproj index a7a0f04..e252981 100644 --- a/PC/VS7.1/pythoncore.vcproj +++ b/PC/VS7.1/pythoncore.vcproj @@ -515,6 +515,9 @@ RelativePath="..\..\Objects\floatobject.c"> </File> <File + RelativePath="..\..\Python\formatter_unicode.c"> + </File> + <File RelativePath="..\..\Objects\frameobject.c"> </File> <File diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 2ceea2e..6af7aec 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -1899,8 +1899,14 @@ PyOS_CheckStack(void) not enough space left on the stack */ alloca(PYOS_STACK_MARGIN * sizeof(void*)); return 0; - } __except (EXCEPTION_EXECUTE_HANDLER) { - /* just ignore all errors */ + } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ? + EXCEPTION_EXECUTE_HANDLER : + EXCEPTION_CONTINUE_SEARCH) { + int errcode = _resetstkoflw(); + if (errcode) + { + Py_FatalError("Could not reset the stack!"); + } } return 1; } diff --git a/Tools/scripts/reindent.py b/Tools/scripts/reindent.py index 33ee4b7..11cb30a 100755 --- a/Tools/scripts/reindent.py +++ b/Tools/scripts/reindent.py @@ -4,10 +4,11 @@ """reindent [-d][-r][-v] [ path ... ] --d (--dryrun) Dry run. Analyze, but don't make any changes to, files. --r (--recurse) Recurse. Search for all .py files in subdirectories too. --v (--verbose) Verbose. Print informative msgs; else no output. --h (--help) Help. Print this usage information and exit. +-d (--dryrun) Dry run. Analyze, but don't make any changes to, files. +-r (--recurse) Recurse. Search for all .py files in subdirectories too. +-n (--nobackup) No backup. Does not make a ".bak" file before reindenting. +-v (--verbose) Verbose. Print informative msgs; else no output. +-h (--help) Help. Print this usage information and exit. Change Python (.py) files to use 4-space indents and no hard tab characters. Also trim excess spaces and tabs from ends of lines, and remove empty lines @@ -31,17 +32,23 @@ resulting .py file won't change it again). The hard part of reindenting is figuring out what to do with comment lines. So long as the input files get a clean bill of health from tabnanny.py, reindent should do a good job. + +The backup file is a copy of the one that is being reindented. The ".bak" +file is generated with shutil.copy(), but some corner cases regarding +user/group and permissions could leave the backup file more readable that +you'd prefer. You can always use the --nobackup option to prevent this. """ __version__ = "1" import tokenize -import os +import os, shutil import sys -verbose = 0 -recurse = 0 -dryrun = 0 +verbose = 0 +recurse = 0 +dryrun = 0 +makebackup = True def usage(msg=None): if msg is not None: @@ -57,10 +64,10 @@ def errprint(*args): def main(): import getopt - global verbose, recurse, dryrun + global verbose, recurse, dryrun, makebackup try: - opts, args = getopt.getopt(sys.argv[1:], "drvh", - ["dryrun", "recurse", "verbose", "help"]) + opts, args = getopt.getopt(sys.argv[1:], "drnvh", + ["dryrun", "recurse", "nobackup", "verbose", "help"]) except getopt.error as msg: usage(msg) return @@ -69,6 +76,8 @@ def main(): dryrun += 1 elif o in ('-r', '--recurse'): recurse += 1 + elif o in ('-n', '--nobackup'): + makebackup = False elif o in ('-v', '--verbose'): verbose += 1 elif o in ('-h', '--help'): @@ -112,11 +121,10 @@ def check(file): print("But this is a dry run, so leaving it alone.") if not dryrun: bak = file + ".bak" - if os.path.exists(bak): - os.remove(bak) - os.rename(file, bak) - if verbose: - print("renamed", file, "to", bak) + if makebackup: + shutil.copyfile(file, bak) + if verbose: + print("backed up", file, "to", bak) f = open(file, "w") r.write(f) f.close() |