+++++++++++
Python News
+++++++++++

(editors: check NEWS.help for information about editing NEWS using ReST.)

What's New in Python 2.6.2
==========================

*Release date: XX-XXX-200X*

Core and Builtins
-----------------

- Issue #3680: Reference cycles created through a dict, set or deque iterator
  did not get collected.

- Issue #4701: PyObject_Hash now implicitly calls PyType_Ready on types
  where the tp_hash and tp_dict slots are both NULL.

- Issue #4764: With io.open, IOError.filename is set when trying to open a
  directory on POSIX systems.

- Issue #4764: IOError.filename is set when trying to open a directory on POSIX
  systems.

- Issue #4759: None is now allowed as the first argument of
  bytearray.translate().  It was always allowed for bytes.translate().

- Issue #4759: fix a segfault for bytearray.translate(x, None).

- Added test case to ensure attempts to read from a file opened for writing
  fail.

- Issue #4597: Fixed several opcodes that weren't always propagating
  exceptions.

- Issue #2467: gc.DEBUG_STATS reported invalid elapsed times. Also, always
  print elapsed times, not only when some objects are uncollectable /
  unreachable. Original patch by Neil Schemenauer.

- Issue #4589: Fixed exception handling when the __exit__ function of a
  context manager returns a value that cannot be converted to a bool.

- Issue #4233: Changed semantic of ``_fileio.FileIO``'s ``close()`` 
  method on file objects with closefd=False. The file descriptor is still
  kept open but the file object behaves like a closed file. The ``FileIO``
  object also got a new readonly attribute ``closefd``.

- Issue #3689: The list reversed iterator now supports __length_hint__
  instead of __len__.  Behavior now matches other reversed iterators.

- Issue #4509: Various issues surrounding resize of bytearray objects to
  which there are buffer exports.

Library
-------

- Issue 4790: The nsmallest() and nlargest() functions in the heapq module
  did unnecessary work in the common case where no key function was specified.

- Issue #3767: Convert Tk object to string in tkColorChooser.

- Issue #3248: Allow placing ScrolledText in a PanedWindow.

- Issue #3954: Fix a potential SystemError in _hotshot.logreader error
  handling.

- Issue #4574: fix a crash in io.IncrementalNewlineDecoder when a carriage
  return encodes to more than one byte in the source encoding (e.g. UTF-16)
  and gets split on a chunk boundary.

- Issue #4223: inspect.getsource() will now correctly display source code
  for packages loaded via zipimport (or any other conformant PEP 302
  loader). Original patch by Alexander Belopolsky.

- Issue #4201: pdb can now access and display source code loaded via
  zipimport (or any other conformant PEP 302 loader). Original patch by
  Alexander Belopolsky.

- Issue #4197: doctests in modules loaded via zipimport (or any other PEP
  302 conformant loader) will now work correctly in most cases (they
  are still subject to the constraints that exist for all code running
  from inside a module loaded via a PEP 302 loader and attempting to
  perform IO operations based on __file__). Original patch by
  Alexander Belopolsky.

- Issues #4082 and #4512: Add runpy support to zipimport in a manner that
  allows backporting to maintenance branches. Original patch by
  Alexander Belopolsky.

- Issue #4616: TarFile.utime(): Restore directory times on Windows.

- Issue #4483: _dbm module now builds on systems with gdbm & gdbm_compat
  libs.

- FileIO's mode attribute now always includes ``"b"``.

Extension Modules
-----------------

- Issue #1040026: Fix os.times result on systems where HZ is incorrect.


What's New in Python 2.6.1
==========================

*Release date: 04-Dec-2008*

Core and Builtins
-----------------

- Issue #3996: On Windows, the PyOS_CheckStack function would cause the
  interpreter to abort ("Fatal Python error: Could not reset the stack!")
  instead of throwing a MemoryError.

- Issue #4367: Python would segfault during compiling when the unicodedata
  module couldn't be imported and \N escapes were present.

- Issue #4348: Some bytearray methods returned that didn't cause any change to
  the bytearray, returned the same bytearray instead of a copy.

- Issue #4317: Fixed a crash in the imageop.rgb2rgb8() function.

- Issue #4230: If ``__getattr__`` is a descriptor, it now functions correctly.

- Issue #4048: The parser module now correctly validates relative imports.

- Issue #4225: ``from __future__ import unicode_literals`` didn't work in an
  exec statement.

- Issue #4176: Fixed a crash when pickling an object which ``__reduce__``
  method does not return iterators for the 4th and 5th items.

- Issue #4209: Enabling unicode_literals and the print_function in the same
  __future__ import didn't work.

- On windows, os.chdir given unicode was not working if GetCurrentDirectoryW
  returned a path longer than MAX_PATH. (But It's doubtful this code path is
  really executed because I cannot move to such directory on win2k)

- Issue #4069: When set.remove(element) is used with a set element, the element
  is temporarily replaced with an equivalent frozenset.  But the eventual
  KeyError would always report the empty frozenset([]) as the missing key. Now
  it correctly refers to the initial element.

- Fixed C99 style comments in several files. Python is now C89 compatible
  again.

Library
-------

- Issue #4795: inspect.isgeneratorfunction() returns False instead of None when
  the function is not a generator.

- Issue #4702: Throwing a DistutilsPlatformError instead of IOError in case 
  no MSVC compiler is found under Windows. Original patch by Philip Jenvey. 

  - Issue #4739: Add pydoc help topics for symbols, so that e.g. help('@')
  works as expected in the interactive environment.

- Issue #4756: zipfile.is_zipfile() now supports file-like objects. Patch by
  Gabriel Genellina.

- Issue #4646: distutils was choking on empty options arg in the setup 
  function. Original patch by Thomas Heller.

- Issue #4400: .pypirc default generated file was broken in distutils.

- Issue #4736: io.BufferedRWPair's closed property now functions properly.

- Issue #3954: Fix a potential SystemError in _hotshot.logreader error
  handling.

- Issue #4163: Use unicode-friendly word splitting in the textwrap functions
  when given an unicode string.

- Issue #4616: TarFile.utime(): Restore directory times on Windows.

- Issue #4084: Fix max, min, max_mag and min_mag Decimal methods to
  give correct results in the case where one argument is a quiet NaN
  and the other is a finite number that requires rounding.

- Issue #1030250: Distutils created directories even when run with the
  --dry-run option.

- Issue #4483: _dbm module now builds on systems with gdbm & gdbm_compat
  libs.

- Issue #4529: fix the parser module's validation of try-except-finally
  statements.

- Issue #4458: getopt.gnu_getopt() now recognizes a single "-" as an argument,
  not a malformed option.

- Added the subprocess.check_output() convenience function to get output
  from a subprocess on success or raise an exception on error.

- Issue #1055234: cgi.parse_header(): Fixed parsing of header parameters to
  support unusual filenames (such as those containing semi-colons) in
  Content-Disposition headers.

- Issue #3741: DISTUTILS_USE_SDK set causes msvc9compiler.py to raise an
  exception.

- Issue #4363: The uuid.uuid1() and uuid.uuid4() functions now work even if
  the ctypes module is not present.

- Issue #4116: Resolve member name conflict in ScrolledCanvas.__init__.

- Issue #3774: Fixed an error when create a Tkinter menu item without command
  and then remove it.

- Fixed a modulefinder crash on certain relative imports.

- Issue #4150: Pdb's "up" command now works for generator frames in post-mortem
  debugging.

- Issue #4092: Return ArgInfo as promised in the documentation from
  inspect.getargvalues.

- Issue #3935: Properly support list subclasses in bisect's C implementation.

- Issue #4014: Don't claim that Python has an Alpha release status, in addition
  to claiming it is Mature.

- Issue #4730: Fixed the cPickle module to handle correctly astral characters
  when protocol 0 is used.

Tools/Demos
-----------

- Issue #4677: add two list comprehension tests to pybench.

Build
-----

- Issues #4728 and #4060: WORDS_BIGEDIAN is now correct in Universal builds.

- Issue #4389: Add icon to the uninstall entry in "add-and-remove-programs".

- Issue #4289: Remove Cancel button from AdvancedDlg.

- Issue #1656675: Register a drop handler for .py* files on Windows.

- Issue #4120: Exclude manifest from extension modules in VS2008.

- Issue #4091: Install pythonxy.dll in system32 again.

- Issue #4018: Disable "for me" installations on Vista.

- Issue #3758: Add ``patchcheck`` build target to .PHONY.

- Issue #4204: Fixed module build errors on FreeBSD 4.

C-API
-----

- Issue #4720: The format for PyArg_ParseTupleAndKeywords can begin with '|'.

- Issue #3632: from the gdb debugger, the 'pyo' macro can now be called when
  the GIL is released, or owned by another thread.

- Issue #4122: On Windows, fix a compilation error when using the
  Py_UNICODE_ISSPACE macro in an extension module.

Extension Modules
-----------------

- Issue #4228: Pack negative values the same way as 2.4 in struct's L format.

- Issue #1040026: Fix os.times result on systems where HZ is incorrect.

- Issues #3167, #3682: Fix test_math failures for log, log10 on Solaris,
  OpenBSD.

- Issue #4365: Add crtassem.h constants to the msvcrt module.

- Issue #4396: The parser module now correctly validates the with statement.


What's New in Python 2.6 final
==============================

*Release date: 01-Oct-2008*

Core and Builtins
-----------------

- Issue #3967: Fixed a crash in the count() and find() methods of string-like
  objects, when the "start" parameter is a huge value.

- Issue #3965: Fixed a crash on Windows when open() is given an invalid
  filename or mode, and the filename is a unicode string.

- Bug #3951: Py_USING_MEMORY_DEBUGGER should not be enabled by default.

Library
-------

- Issue #3965: Allow repeated calls to turtle.Screen, by making it a
  true singleton object.

- Issue #3895: It was possible to crash the interpreter when an external timer
  was used with cProfile that returned an object that could not be converted
  into a float.

- Issue #3950: Made turtle respect scale factors.

- Issue #3547: Fixed ctypes structures bitfields of varying integer
  sizes.

- Issue #3879: A regression in urllib.getproxies_enviroment was fixed.

- Issue #3863: Disabled a unit test of fork being called from a thread
  when running on platforms known to exhibit OS bugs when attempting that.

Build
-----

- Bug #3989: Package the 2to3 script (as 2to3.py) in the Windows
  installer.

- Bug #3887: Package x64 version of CRT for AMD64 Windows binaries.


What's New in Python 2.6 release candidate 2?
=============================================

*Release date: 17-Sep-2008*

Core and Builtins
-----------------

Extension Modules
-----------------

- Security Issue #2: imageop did not validate arguments correctly and could
  segfault as a result.

- Issue #3886: Possible integer overflows in the _hashopenssl module were
  closed.

Tools/Demos
-----------

- Issue #3850: recursion tests in Misc/find_recursion_limit.py can raise
  AttributeError instead of RuntimeError, depending in which C API call
  exactly the recursion limit is exceeded. Consequently, both exception types
  are caught and silenced.

Build
-----

- Issue #3617: Include a licensing statement regarding the Microsoft
  C runtime in the Windows installer.


What's New in Python 2.6 release candidate 1?
=============================================

*Release date: 12-Sep-2008*

Core and Builtins
-----------------

- Issue #3642: Suppress warning in obmalloc when size_t is larger than uint.

- Issue #3743: In a few places, PY_FORMAT_SIZE_T was incorrectly used with
  PyString_FromFormat or PyErr_Format to display size_t values. The macro
  PY_FORMAT_SIZE_T is designed to select the correct format for the OS
  ``printf`` function, whereas PyString_FromFormat has an independent
  implementation and uses "%zd" on all platforms for size_t values.
  This makes a difference on win64, where ``printf`` needs "%Id" to display
  64bit values.

- Issue #3634: _weakref.ref(Exception).__init__() gave invalid return value on
  error.

- Issue #3777: long() applied to a float object now always return a long
  object; previously an int would be returned for small values. the __long__
  method is allowed to return either an int or a long, but the behaviour of
  float objects should not change to respect backward compatibility.

- Issue #3751: str.rpartition would perform a left-partition when called with
  a unicode argument.

- Issue #3683: Fix compilation when --without-threads is given.

- Issue #3668: Fix a memory leak with the "s*" argument parser in
  PyArg_ParseTuple and friends, which occurred when the argument for "s*"
  was correctly parsed but parsing of subsequent arguments failed.

- Issue #2534: speed up isinstance() and issubclass() by 50-70%, so as to
  match Python 2.5 speed despite the __instancecheck__ / __subclasscheck__
  mechanism. In the process, fix a bug where isinstance() and issubclass(),
  when given a tuple of classes as second argument, were looking up
  __instancecheck__ / __subclasscheck__ on the tuple rather than on each
  type object.

- Fix crashes on memory allocation failure found with failmalloc.

- Fix memory leaks found with valgrind and update suppressions file.

- Fix compiler warnings in opt mode which would lead to invalid memory reads.

- Fix problem using wrong name in decimal module reported by pychecker.

- Silenced another compiler warning about a used but not defined
  function 'stringlib_contains_obj'.

- Added warnings on the use of ``__getslice__``, ``__setslice__``, or
  ``__delslice__``.

- Issue #3678: Correctly pass LDFLAGS and LDLAST to the linker on shared
  library targets in the Makefile.

- Issue #1204: The configure script now tests for additional libraries
  that may be required when linking against readline.  This fixes issues
  with x86_64 builds on some platforms (a few Linux flavors and OpenBSD).

C-API
-----

- Aliased PyObject_Bytes to PyObject_Str.

Library
-------

- Issue #3640: Pickling a list or a dict uses less local variables, to reduce
  stack usage in the case of deeply nested objects.

- Issue #3629: Fix sre "bytecode" validator for an end case.

- Issue #3811: The Unicode database was updated to 5.1.

- Issue #3781: Further warnings.catch_warnings() cleanup to prevent
  silent misbehaviour when a single instance is nested in multiple
  with statements, or when the methods are invoked in the wrong order.

- Issue #3809: Fixed spurious 'test.blah' file left behind by test_logging.

- Issue #3781: Clean up the API for warnings.catch_warnings() by having it
  return a list or None rather than a custom object.

- Issue #1638033: Cookie.Morsel gained the httponly attribute.

- Issue #3535: zipfile couldn't read some zip files larger than 2GB.

- Issue #3776: Deprecate the bsddb package for removal in 3.0.

- Issue #3762: platform.architecture() fails if python is lanched via
  its symbolic link.

- Issue #3772: Fixed regression problem in StreamHandler.emit().

- Issue 600362: Relocated parse_qs() and parse_qsl(), from the cgi module
  to the urlparse one.  Added a PendingDeprecationWarning in the old
  module, it will be deprecated in the future.

- Issue #2562: Fix distutils PKG-INFO writing logic to allow having
  non-ascii characters and Unicode in setup.py meta-data.

- Issue #3726: Allow spaces in separators in logging configuration files.

- Issue #3719: platform.architecture() fails if there are spaces in the
  path to the Python binary.

- Issue 3602: Moved test.test_support.catch_warning() to
  warnings.catch_warnings() along with some API cleanup. Expanding the tests
  for catch_warnings() also led to an improvement in the raising of a
  DeprecationWarning related to warnings.warn_explicit().

- The deprecation warnings for the old camelCase threading API were removed.

- logging: fixed lack of use of encoding attribute specified on a stream.

- Silenced a trivial compiler warning in the sqlite module.

- Fixed two format strings in the _collections module.

- Issue #3703: _fileio.FileIO gave unhelpful error message when trying to open a
  directory.

- Issue #3708: os.urandom no longer goes into an infinite loop when passed a
  non-integer floating point number.

- Issue #3110: multiprocessing fails to compiel on solaris 10 due to missing
  SEM_VALUE_MAX.

Extension Modules
-----------------

- Issue #2975: When compiling several extension modules with Visual Studio 2008
  from the same python interpreter, some environment variables would grow
  without limit.

- Issue #3643: Added a few more checks to _testcapi to prevent segfaults by
  exploitation of poor argument checking.

- sqlite3: Changed docstring of iterdump() to mark method as "Non-standard".

- Issue #3103: Reduced globals symbols used by sqlite3 module and made sure all
  remaining ones have "pysqlite_" prefix.

- Issue #3846: Release the GIL during sqlite3_prepare calls. This improves
  concurrent access to the same SQLite database from multiple
  threads/processes.

Tests
-----

- Issue #3781: Add test.test_support.check_warnings() as a convenience
  wrapper for warnings.catch_warnings() that makes it easier to check
  that expected warning messages are being reported.

- Issue #3796: Some tests functions were not enabled in test_float.

- Issue #3768: Move test_py3kwarn over to the new API for catch_warnings().

Build
-----

- Issue #3833: Use a different upgrade code for Win64 installers.

- Issue #2271: Set SecureCustomProperties so that installation will properly
  use the TARGETDIR even for unprivileged users.

- Allow passing the MSI file name to merge.py.

- Issue #3758: Rename the 'check' target to 'patchcheck' so as to not clash
  with GNU build target guidelines.


What's New in Python 2.6 beta 3?
================================

*Release date: 20-Aug-2008*

Core and Builtins
-----------------

- Issue #1878: Remove Py_TPFLAGS_HAVE_VERSION_TAG from
  Py_TPFLAGS_DEFAULT when not building the core.  This means 3rd party
  extensions do not automatically benefit from the class attribute
  cache; they will have to explicitly add Py_TPFLAGS_HAVE_VERSION_TAG
  to their tp_flags field if they care.  This is a backwards
  compatibility feature; in 3.0, all types will use the cache by
  default.

- Keyword arguments can now follow starred arguments. (``f(a, *args,
  keyword=23)`` is now valid syntax.)

- ctypes function pointers that are COM methods have a boolean True
  value again.

- Issue #3139: Make buffer-interface thread-safe wrt. PyArg_ParseTuple,
  by denying s# to parse objects that have a releasebuffer procedure,
  and introducing s*.

- Issue #3537: Fix an assertion failure when an empty but presized dict
  object was stored in the freelist.

- Issue #1481296: Make long(float('nan')) and int(float('nan')) raise
  ValueError consistently across platforms.

- Issue #3479: On platforms where sizeof(int) is smaller than sizeof(long)
  (64bit Unix, for example), unichr() would truncate its argument and return
  u'\x00' for unichr(2**32). Now it properly raises an OverflowError.

- Apply security patches from Apple.

- Issue #2542: Now that issubclass() may call arbitrary code, ensure that
  PyErr_ExceptionMatches returns 0 when an exception occurs there.

- Issue #1819: function calls with several named parameters are now on
  average 35% faster (as measured by pybench).

- Issue #2378: An unexpected UnboundLocalError or NameError could appear when
  the python debugger steps into a class statement: the free variables (local
  variables defined in an outer scope) would be deleted from the outer scope.

- Issue #2620: Overflow checking when allocating or reallocating memory
  was not always being done properly in some python types and extension
  modules.  PyMem_MALLOC, PyMem_REALLOC, PyMem_NEW and PyMem_RESIZE have
  all been updated to perform better checks and places in the code that
  would previously leak memory on the error path when such an allocation
  failed have been fixed.

Library
-------

- Issue #3612: Added some missing basic types in ctypes.wintypes.

- The methods ``is_in_tuple()``, ``is_vararg()``, and ``is_keywordarg()`` of
  symtable.Symbol have been deprecated for removal in 3.0 and the next release.

- Issue #2234: distutils failed for some versions of the cygwin compiler. The
  version reported by these tools does not necessarily follow the python
  version numbering scheme, so the module is less strict when parsing it.

- Issue #2235: Added Py3k warnings for types which will become unhashable
  under the stricter __hash__ inheritance rules in 3.0. Several types
  which did not meet the rules for hash invariants and were already
  unhashable in 3.0 have now been explicitly flagged as unhashable in
  2.6 as well (collections.Mapping, collections.Set, unittest.TestSuite,
  xml.dom.minidom.NamedNodeMap, numbers.Number, UserList.UserList)

- Update __all__ for cookielib, csv, os, urllib2, and weakref to include things
  imported into the module but exposed as part of the module's API.

- Remove an unneeded import of abc.ABCMeta from 'inspect'.

- Remove unneeded imports of 'sys' and 'warnings' from 'io'.

- Remove unneeded imports of 'warnings' from shelve, filecmp, and dummy_thread.

- Issue #3575: Incremental decoder's decode function now takes bytearray
  by using 's*' instead of 't#'.

- Issue #2222: Fixed reference leak when occured os.rename()
  fails unicode conversion on 2nd parameter. (windows only)

- Issue 2464. urllib2 now supports a malformation in the URL received
  in a redirect.

- Silence the DeprecationWarning raised when importing mimetools in
  BaseHTTPServer, cgi (and rfc822), httplib.

- Issue #2776: fixed small issue when handling an URL with double slash
  after a 302 response in the case of not going through a proxy.

- Issue #2676: in the email package, content-type parsing was hanging on
  pathological input because of quadratic or exponential behaviour of a
  regular expression.

- Issue #3476: binary buffered reading through the new "io" library is now
  thread-safe.

- Silence the DeprecationWarning of rfc822 when it is imported by mimetools
  since mimetools itself is deprecated. Because modules are cached, all
  subsequent imports of rfc822 will not raise a visible DeprecationWarning.

- Issue #3134: shutil referenced undefined WindowsError symbol.

- Issue #1342811: Fix leak in Tkinter.Menu.delete. Commands associated to
  menu entries were not deleted.

- Copied the implementation of reduce() to _functools.reduce() to have a
  version that did not raise a DeprecationWarning under -3.

- Issue #3205: When iterating over a BZ2File fails allocating memory, raise
  a MemoryError rather than silently stop the iteration.

- Issue #3487: sre "bytecode" validator.  Passing invalid "re-bytecode"
  to _sre.compile() will now be rejected.  This should not affect anybody
  since the re.compile() function never generates invalid re-bytecode.

- Issue #3436: Make csv.DictReader's fieldnames attribute a property so that
  upon first access it can be automatically initialized from the csv file if
  it wasn't initialized during instantiation.

- Issue #2338: Create imp.reload() to help with transitioning to Python 3.0 as
  the reload() built-in has been removed.

- Changed code in the following modules/packages to remove warnings raised
  while running under the ``-3`` flag: aifc, asynchat, asyncore, bdb, bsddb,
  ConfigParser, cookielib, csv, difflib, distutils, DocXMLRPCServer, email,
  filecmp, fileinput, inspect, logging, modulefinder, pdb, pickle, profile,
  pstats, pydoc, re, rlcompleter, SimpleXMLRPCServer, shelve, socket,
  subprocess, sqlite3, tarfile, Tkinter, test.test_support, textwrap,
  threading, tokenize, traceback, urlparse, wsgiref, xml, xmlrpclib.

- Issue #3039: Fix tarfile.TarFileCompat.writestr() which always
  raised an AttributeError.

- Issue #2523: Fix quadratic behaviour when read()ing a binary file without
  asking for a specific length. This problem only affected files opened
  using the new "io" module, not the built-in open() function.

- Issue #3449: Update decimal module to use most recent specification
  (v. 1.68) and tests (v. 2.58) from IBM.

- Issue 3437: Bug fix in robotparser parsing of Allow: lines.

- Issue 1592:  Improve error reporting when operations are attempted
  on a closed shelf.

- Deprecate the "ast" parser function aliases.

- Issue #3120: On 64-bit Windows the subprocess module was truncating handles.

- Issue #3303: Fix a crash in locale.strcoll() when calling it with
  invalid arguments.

- Issue #3302: Fix several crashes when calling locale's gettext functions
  with None arguments.

- Issue #3389: Allow resolving dotted names for handlers in logging
  configuration files.

- Deprecate the sunaudio module for removal in Python 3.0.

- Issue #3394: zipfile.writestr sets external attributes when passed a
  file name rather than a ZipInfo instance, so files are extracted with
  mode 0600 rather than 000 under Unix.

- Issue #1857: subprocess.Popen.poll gained an additional _deadstate keyword
  argument in python 2.5, this broke code that subclassed Popen to include its
  own poll method.  Fixed my moving _deadstate to an _internal_poll method.

Build
-----

- Generate the PatternGrammar pickle during "make install".

Documentation
-------------

- Issue #2235: the C API function PyObject_HashNotImplemented and its
  interaction with the tp_hash slot (added in 2.6b2) are now documented

- Issue #643841: The language reference now provides more detailed
  coverage of the lookup process for special methods. The disclaimers
  regarding lack of coverage of new-style classes have also been
  removed, since the coverage is now fairly reasonable.


What's New in Python 2.6 beta 2?
================================

*Release date: 17-Jul-2008*

Core and Builtins
-----------------

- Issue #3156: Fix inconsistent behavior of the bytearray type: all
  its methods now allow for items objects that can be converted to
  an integer using operator.index().

- Issue #3360: Fix incorrect parsing of '020000000000.0', which
  produced a ValueError instead of giving the correct float.

- Issue #3083: Add alternate (#) formatting for bin, oct, hex output
  for str.format().  This adds the prefix 0b, 0o, or 0x, respectively.

- Issue #3008: the float type has a new instance method 'float.hex'
  and a new class method 'float.fromhex' to convert floating-point
  numbers to and from hexadecimal strings, respectively.

- Issue #2235: __hash__ is once again inherited by default. To allow
  collections.Hashable to remain meaningful in the presence of the
  default hash implementation (object.__hash__), it is now possible
  to explicit block inheritance of hash by setting __hash__=None at
  the Python level, or tp_hash=PyObject_HashNotImplemented at the C
  level.

- Issue #3221: Issue a RuntimeWarning instead of raising SystemError if
  the parent module cannot be found while performing an absolute import.
  This means that an incorrectly defined __package__ attribute will
  now only prevent relative imports in that module rather than causing
  all imports from that module to fail.

- Issue #2517: Allow unicode messages in Exceptions again by correctly
  bypassing the instance dictionary when looking up __unicode__ on
  new-style classes.

- Issue #3242: Fix a crash inside the print statement, if sys.stdout is
  set to a custom object whose write() method happens to install
  another file in sys.stdout.

- Issue #3088: Corrected a race condition in classes derived from
  threading.local: the first member set by a thread could be saved in
  another thread's dictionary.

- Issue #3004: Minor change to slice.indices(): the start and stop
  arguments are now treated identically, making the behaviour easier
  to describe and understand.  For example, slice(None, -10,
  1).indices(9) now returns (0, 0, 1) instead of (0, -1, 1), and
  slice(None, 10, -1).indices(10) returns (9, 9, -1) instead of (9,
  10, -1).

- Issue #3219: Calling a function with repeated keyword arguments,
  f(a=2, a=23), would not cause a syntax error.  This was a regression
  from 2.4 caused by the switch to the new compiler.

- Issue #2862: Make int and float freelist management consistent with
  other freelists.  Changes their CompactFreeList apis into
  ClearFreeList apis and calls them via gc.collect().

Library
-------

- Issue #3554: ctypes.string_at and ctypes.wstring_at did call Python
  api functions without holding the GIL, which could lead to a fatal
  error when they failed.

- Issue #799428: Fix Tkinter.Misc._nametowidget to unwrap Tcl command objects.

- Issue #3395: fix reference in test_multiprocessing to old debugInfo method

- Issue #3312: Fix two crashes in sqlite3.

- Issue #1608818: Fix misbehavior in os.listdir() if readdir() fails.

- Issue #3125: Remove copy_reg in multiprocessing and replace it with
  ForkingPickler.register() to resolve conflict with ctypes.

- Issue #3090: Fixed ARCHFLAGS parsing on OS/X

- Issue #3313: Fixed a crash when a failed dlopen() call does not set
  a valid dlerror() message.

- Issue #3258: Fixed a crash when a ctypes POINTER type to an
  incomplete structure was created.

- Issue #3339: dummy_thread.acquire() should not return None.

- Issue #3285: Fractions from_float() and from_decimal() accept Integral arguments.

- Issue #3301: Bisect module behaved badly when lo was negative.

- Issue #839496: SimpleHTTPServer used to open text files in text mode. This is
  both unnecessary (HTTP allows text content to be sent in several forms) and
  wrong because the actual transmitted size could differ from the
  content-length.  The problem had been corrected in the 2.4 branch, but never
  merged into trunk.

- Issue #2663: add filtering capability to shutil.copytree().

- Issue #1622: Correct interpretation of various ZIP header fields.

- Issue #1526: Allow more than 64k files to be added to Zip64 file.

- Issue #1746: Correct handling of zipfile archive comments (previously
  archives with comments over 4k were flagged as invalid). Allow writing
  Zip files with archives by setting the 'comment' attribute of a ZipFile.

- Issue #449227: The rlcompleter module now adds "(" to callable objects
  when completed.

- Issue #3190: Pydoc now hides the automatic module attribute __package__ (the
  handling is now the same as that of other special attributes like __name__).

- Issue #2885 (partial): The urllib.urlopen() function has been deprecated for
  removal in Python 3.0 in favor of urllib2.urlopen().

- Issue #2113: Fix error in subprocess.Popen if the select system call is
  interrupted by a signal.

- Issue #3309: Fix bz2.BZFile iterator to release its internal lock
  properly when raising an exception due to the bz2file being closed.
  Prevents a deadlock.

- Issue #3094: httplib.HTTPSConnection Host: headers no longer include the
  redundant ":443" port number designation when the connection is using the
  default https port (443).

- Issue #874900: after an os.fork() call the threading module state is cleaned
  up in the child process to prevent deadlock and report proper thread counts
  if the new process uses the threading module.

Tests
-----

- test.test_support.catch_warning now keeps track of all warnings it sees
  and is now better documented. Explicit unit tests for this context manager
  have been added to test_warnings.

Build
-----

- Issue #3215: Build sqlite3 as sqlite3.dll, not sqlite3.pyd.


Documentation
-------------

- Document that robotparser has been renamed to urllib.robotparser in
  Python 3.0.

- Document that urlparse has been renamed to urllib.parse in Python 3.0.

- Document that urllib2 is split across multiple modules and renamed in
  Python 3.0.

- Document that urllib is split across multiple modules and renamed in
  Python 3.0.


What's New in Python 2.6 beta 1?
================================

*Release date: 18-June-2008*

Core and Builtins
-----------------

- Issue #3211: warnings.warn_explicit() did not guard against its 'registry'
  argument being anything other than a dict or None. Also fixed a bug in error
  handling when 'message' and 'category' were both set to None, triggering a
  bus error.

- Issue #3100: Corrected a crash on deallocation of a subclassed weakref which
  holds the last (strong) reference to its referent.

- Add future_builtins.ascii().

- Several set methods now accept multiple arguments:  update(), union(),
  intersection(), intersection_update(), difference(), and difference_update().

- Issue #2898: Added sys.getsizeof() to retrieve size of objects in bytes.

- New environment variable PYTHONIOENCODING.

- Patch #2488: Add sys.maxsize.

- Issue #2353: file.xreadlines() now emits a Py3k warning.

- Issue #2863: generators now have a ``gen.__name__`` attribute that
  equals ``gen.gi_code.co_name``, like ``func.__name___`` that equals
  ``func.func_code.co_name``.  The repr() of a generator now also
  contains this name.

- Issue #2831: enumerate() now has a ``start`` argument.

- Issue #2801: fix bug in the float.is_integer method where a
  ValueError was sometimes incorrectly raised.

- Issue #2790: sys.flags was not properly exposing its bytes_warning
  attribute.

- Issue #2196: hasattr() now lets exceptions which do not inherit
  Exception (KeyboardInterrupt, and SystemExit) propagate instead of
  ignoring them.

- Added checks for integer overflows, contributed by Google. Some are
  only available if asserts are left in the code, in cases where they
  can't be triggered from Python code.


Extension Modules
-----------------
- Issue #1179: [CVE-2007-4965] Integer overflow in imageop module.

- Issue #3116:  marshal.dumps() had quadratic behavior for strings > 32Mb.

- Issue #2138: Add factorial() to the math module.

- The heapq module does comparisons using LT instead of LE.  This
  makes its implementation match that used by list.sort().

- Issue #2819: add full-precision summation function to math module,
  based on Hettinger's ASPN Python Cookbook recipe.

- Issue #2592: delegate nb_index and the floor/truediv slots in
  weakref.proxy.

- Support os.O_ASYNC and fcntl.FASYNC if the constants exist on the
  platform.

- Support for Windows 9x has been removed from the winsound module.

- bsddb module updated to version 4.7.3.
  http://www.jcea.es/programacion/pybsddb.htm#bsddb3-4.7.3. This
  code should be compatible with Python 3.0.

- Issue #2858: Fix potential memory corruption when
  bsddb.db.DBEnv.lock_get and other bsddb.db object constructors
  raised an exception.

- Issue #2669: bsddb/__init__.py iteration no longer silently fails when
  the database has changed size during iteration.  It now raises a
  RuntimeError in the same manner as a dictionary.

- Issue #2870: cmathmodule.c compile error.

- Added a threading.Thread.ident property.

Library
-------

- logging.config: Removed out-of-date comment in _install_handlers and
  used issubclass in place of equality comparison of classes.

- Issue #2722: Now the os.getcwd() supports very long path names.

- Issue #2888: Fixed the behaviour of pprint when working with nested
  structures, to match the behaviour of 2.5 and 3.0 (now follows the common
  sense).

- Issue #1817: cgi now correctly handles the querystring on POST requests

- Issue #3136: fileConfig()'s disabling of old loggers is now conditional via
  an optional disable_existing_loggers parameter, but the default value is
  such that the old behaviour is preserved. Thanks to Leandro Lucarella for
  the patch.

- Issue #3126: StreamHandler and FileHandler check before calling "flush" and
  "close" that the stream object has these, using hasattr (thanks to bobf for
  the patch).

- Issue #2912: platform.uname now tries to determine unknown information even if
  os.uname exists.

- The rfc822 module has been deprecated for removal in 3.0.

- The mimetools module has been deprecated for removal in 3.0.

- The ctypes.byref function now takes an optional second parameter
  which allows to specify an offset in bytes for the constructed
  pointer-like object.

- Added the ast module.

- Added the multiprocessing module, PEP 371.

- Factored out the indentation cleaning from inspect.getdoc() into
  inspect.cleandoc() to ease standalone use.

- Issue #1798: Add ctypes calling convention that allows safe access
  to errno.

- Issue #2404: ctypes objects support the new pep3118 buffer interface.

- Patch #2125: Add GetInteger and GetString methods for
  msilib.Record objects.

- Issue #2782: The datetime module's strftime methods now accept
  unicode format strings just as time.strftime always has.

- The sgmllib and htmllib modules have been deprecated for removal
  in Python 3.0.

- Issue #3011: locale module alias table was updated to the latest
  version from the X.org locale.alias file.

- Issue #1797 (partial fix): ctypes NULL function pointers have a
  False boolean value now.

- Issue #2985: Allow 64-bit integer responses (``<i8>``) in XMLRPC
  transfers.

- Issue #2877: The UserString.MutableString class has been removed in
  Python 3.0.

- Do not close external file objects passed to tarfile.open(mode='w:bz2')
  when the TarFile is closed.

- Issue #2959: For consistency with other file-like objects, gzip's
  GzipFile.close() can now be called multiple times without raising
  an exception.

- Issue #1390: Raise ValueError in toxml when an invalid comment would
  otherwise be produced.

- Issue #2914: TimedRotatingFileHandler now takes an optional keyword
  argument "utc" to use UTC time rather than local time.

- Issue #2929: TimedRotatingFileHandler was using the wrong path when
  deleting old log files (filename only instead of full path).

- Issue #1775025: You can now specify zipfile members to open(),
  read() or extract() via a ZipInfo instance.  This allows handling
  duplicate filenames in zipfiles.

- Issue #961805: Fix Text.edit_modified() in Tkinter.

- Issue #1793: Function ctypes.util.find_msvcrt() added that returns
  the name of the C runtime library that Python uses.
  ctypes.util.find_library(name) now call this function when name is
  'm' or 'c'.

- The statvfs module has been deprecated for removal in Python 3.0.

- The sunaudiodev and SUNAUDIODEV modules have been deprecated for
  removal in Python 3.0.

- The WAIT module from IRIX has been deprecated for removal in Python
  3.0.

- The torgb module from IRIX has been deprecated for removal in Python
  3.0.

- The SV module from IRIX has been deprecated for removal in Python
  3.0.

- The readcd module from IRIX has been deprecated for removal in
  Python 3.0.

- The panelparser module from IRIX has been deprecated for removal in
  Python 3.0.

- The panel module from IRIX has been deprecated for removal in Python
  3.0.

- The jpeg module from IRIX has been deprecated for removal in Python
  3.0.

- The IOCTL module from IRIX has been deprecated for removal in Python
  3.0.

- The IN module from IRIX has been deprecated for removal in Python
  3.0.

- The imgfile module from IRIX has been deprecated for removal in
  Python 3.0.

- The GLWS module from IRIX has been deprecated for removal in Python
  3.0.

- The GET module from IRIX has been deprecated for removal in Python
  3.0.

- The fm module from IRIX has been deprecated for removal in Python
  3.0.

- The FL, flp, and fl modules from IRIX have been deprecated for
  removal in Python 3.0.

- The FILE module on IRIX has been deprecated for removal in Python
  3.0.

- The ERRNO module on IRIX has been deprecated for removal in Python
  3.0.

- The DEVICE, GL, gl, and cgen modules (which indirectly includes
  cgensupport) have been deprecated for removal in Python 3.0.

- The CL, CL_old, and cl modules for IRIX have been deprecated for
  removal in Python 3.0.

- The cdplayer module for IRIX has been deprecated for removal in
  Python 3.0.

- The cddb module for IRIX has been deprecated for removal in Python
  3.0.

- The cd and CD modules for IRIX have been deprecated for removal in
  Python 3.0.

- The al and AL modules for IRIX have been deprecated for removal in
  Python 3.0.

- Issue #1713041: fix pprint's handling of maximum depth.

- The timing module has been deprecated for removal in Python 3.0.

- The sv module has been deprecated for removal in Python 3.0.

- The multifile module has been deprecated as per PEP 4.

- The imageop module has been deprecated for removal in Python 3.0.

- Issue #2250: Exceptions raised during evaluation of names in
  rlcompleter's ``Completer.complete()`` method are now caught and
  ignored.

- Issue #2659: Added ``break_on_hyphens`` option to textwrap
  TextWrapper class.

- The mhlib module has been deprecated for removal in Python 3.0.

- The linuxaudiodev module has been deprecated for removal in Python
  3.0.

- The ihooks module has been deprecated for removal in Python 3.0.

- The fpformat module has been deprecated for removal in Python 3.0.

- The dl module has been deprecated for removal in Python 3.0.

- The Canvas module has been deprecated for removal in Python 3.0.

- The compiler package has been deprecated for removal in Python 3.0.

- The Bastion and rexec modules have been deprecated for removal in
  Python 3.0.

- The bsddb185 module has been deprecated for removal in Python 3.0.

- The pure module has been deprecated for removal in Python 3.0.

- Issue #2487: change the semantics of math.ldexp(x, n) when n is too
  large to fit in a C long.  ldexp(x, n) now returns a zero (with
  suitable sign) if n is large and negative; previously, it raised
  OverflowError.

- The toaiff module has been deprecated for removal in Python 3.0.

- The test.testall module has been deprecated for removal in Python
  3.0.

- The new module has been deprecated for removal in Python 3.0.

- The user module has been deprecated for removal in Python 3.0.

- The stringold module has been deprecated for removal in Python 3.0.

- The mutex module has been deprecated for removal in Python 3.0.

- The imputil module has been deprecated for removal in Python 3.0.

- test.test_support.catch_warning() gained a 'record' argument.

- os.path.walk is deprecated in favor of os.walk.

- pdb gained the "until" command.

- The Mac Modules (including Carbon) have been deprecated for removal
  in Python 3.0.

- Library: on MacOS X you can now set ``ARCHFLAGS`` in the shell
  environment to control the '-arch' flags that are used to build
  an extension. This was added for compatibility with Apple's build
  of Python.

- The bundled OSX-specific copy of libbffi is now in sync with the version
  shipped with PyObjC 2.0 and includes support for x86_64 and ppc64 platforms.

- The threading module gained aliases for names that will be removed in the
  3.x series.

Build
-----

- The Windows installer now includes Tk 8.5, bzip2 1.0.5, and SQLite 3.5.9.

- Patch #1722225: Support QNX 6.

- ``Lib/lib-old`` is now added to sys.path.

- On MacOS X it is now possible to install the framework in 64-bit
  mode or even as a 4-way universal binary (that is, PPC, i386,
  PPC64 and x86_64 support in one binary).

  This is controlled by the configure argument ``--with-universal-archs``:

  - ``--with-universal-archs=all``: install 4-way universal

  - ``--with-universal-archs=32-bit``: install 2-way universal, 32-bit (the default)

  - ``--with-universal-archs=64-bit``: install 2-way universal, 64-bit

  This option should be used in combination with ``--enable-universalsdk=``.

  NOTE: 64-bit and 4-way builds are only suppported on Mac OS X 10.5 (or later).


C API
-----

- Add ``PyType_Modified()`` as a public API to clear the type cache.

- The PyBytes functions have been renamed to PyByteArray.

- The PyString functions have been renamed to PyBytes. A batch of
  defines were added so that the linker still sees the original
  PyString names.


What's New in Python 2.6 alpha 3?
=================================

*Release date: 08-May-2008*

Core and builtins
-----------------

- Issue #2719: backported the ``next()`` builtin from Python 3.

- Issue #2681: The octal literal ``0o8`` was incorrecly acctepted. Now
  it properly raises a SyntaxError.

- Issue #2617: Reserved -J and -X arguments for Jython, IronPython and
  other implementations of Python.

- Implemented PEP 370: Per user site-packages directory.

Extension Modules
-----------------

- Issue #2670: Fix a failure in urllib2.build_opener(), when passed
  two handlers that derive the same default base class.

- Added kill, terminate and send_signal(sig) to subprocess.Popen.

- Added phase(z) -> phi, polar(z) -> r, phi and rect(r, phi) -> z to
  the cmath module.

- Four new methods were added to the math and cmath modules: acosh,
  asinh, atanh and log1p.

- zlib.decompressobj().flush(value) no longer crashes the interpreter
  when passed a value less than or equal to zero.

- Issue #1631171: Re-implement the 'warnings' module in C (the
  original Python code has been kept as backup). This will allow for
  using the 'warning's machinery in such places as the parser where
  use of pure Python code is not possible.  Both the ``showarning()``
  and ``formatwarning()`` gain an optional 'line' argument which is
  not called by default for backwards-compatibility reasons. Setting
  ``warnings.showwarning()`` to an implementation that lacks support
  for the ``line`` argument will raise a DeprecationWarning.

Library
-------

- The audiodev module has been deprecated for removal in Python 3.0.

- Issue #2750: Add the 'json' package. Based on simplejson 1.9 and
  contributed by Bob Ippolito.

- Issue #1734346: Support Unicode file names for zipfiles.

- Issue #2581: distutils: Vista UAC/elevation support for
  bdist_wininst.

- Issue #2635: Fix bug in 'fix_sentence_endings' textwrap.fill option,
  where an extra space was added after a word containing (but not
  ending in) '.', '!' or '?'.

- Add from_buffer() and from_buffer_copy() class methods to ctypes
  data types.

- Issue #2682: ctypes callback functions no longer contain a cyclic
  reference to themselves.

- The getpass module has been improved on Unix.  It now uses /dev/tty
  by default and uses stderr instead of stdout.  A GetPassWarning is
  issued when input echo cannot be controlled.

- Issue #2014: Allow XML-RPC datetime objects to have dates before
  1900-01-01.

- Issue #2439: Added new function pkgutil.get_data(), which is a
  convenience wrapper for the PEP 302 get_data() API.

- Issue #2616: The ctypes.pointer() and ctypes.POINTER() functions are
  now implemented in C for better performance.

- Issue #2408: The ``_types`` module, which was used as in
  implementation detail of the public ``types`` module, has been
  removed and replaced by pure python code.

- Issue #2513: distutils on Windows is now capable of cross-compiling
  extension modules between 32 and 64 bit platforms.  See the distutls
  build documentation for more information.

- Issue #815646: Individual file objects may now be used from multiple
  threads at once without fear of crashing the Python interpreter.  If
  file.close() is called while an object is in use by another thread
  an IOError exception will be raised and the file will not be closed.

- The bundled libffi copy is now in sync with the recently released
  libffi3.0.5 version, apart from some small changes to
  Modules/_ctypes/libffi/configure.ac.

- Issue #2385: distutils.core.run_script() makes __file__ available,
  so the controlled environment will more closely mirror the typical
  script environment.  This supports setup.py scripts that refer to
  data files.

Tests
-----

- Issue #2550: The approach used by client/server code for obtaining
  ports to listen on in network-oriented tests has been refined in an
  effort to facilitate running multiple instances of the entire
  regression test suite in parallel without issue.
  test_support.bind_port() has been fixed such that it will always
  return a unique port -- which wasn't always the case with the
  previous implementation, especially if socket options had been set
  that affected address reuse (i.e. SO_REUSEADDR, SO_REUSEPORT).  The
  new implementation of bind_port() will actually raise an exception
  if it is passed an AF_INET/SOCK_STREAM socket with either the
  SO_REUSEADDR or SO_REUSEPORT socket option set.  Furthermore, if
  available, bind_port() will set the SO_EXCLUSIVEADDRUSE option on
  the socket it's been passed.  This currently only applies to
  Windows.  This option prevents any other sockets from binding to the
  host/port we've bound to, thus removing the possibility of the
  'non-deterministic' behaviour, as Microsoft puts it, that occurs
  when a second SOCK_STREAM socket binds and accepts to a host/port
  that's already been bound by another socket.  The optional preferred
  port parameter to bind_port() has been removed.  Under no
  circumstances should tests be hard coding ports!

  test_support.find_unused_port() has also been introduced, which will
  pass a temporary socket object to bind_port() in order to obtain an
  unused port.  The temporary socket object is then closed and
  deleted, and the port is returned.  This method should only be used
  for obtaining an unused port in order to pass to an external program
  (i.e. the -accept [port] argument to openssl's s_server mode) or as
  a parameter to a server-oriented class that doesn't give you direct
  access to the underlying socket used.

  Finally, test_support.HOST has been introduced, which should be used
  for the host argument of any relevant socket calls (i.e. bind and
  connect).

  The following tests were updated to following the new conventions:
    test_socket, test_smtplib, test_asyncore, test_ssl, test_httplib,
    test_poplib, test_ftplib, test_telnetlib, test_socketserver,
    test_asynchat and test_socket_ssl.

  It is now possible for multiple instances of the regression test
  suite to run in parallel without issue.

Build
-----

- Issue #1496032: On alpha, use -mieee when gcc is the compiler.

- Issue #2544: On HP-UX systems, use 'gcc -shared' for linking when
  gcc is used as compiler.

- Issue #2573: On MacOS X it is now possible to install the framework
  with a different name using --with-framework-name=NAME.

C API
-----

- Added implementation of copysign, acosh, asinh, atanh and log1p to
  the new files Include/pymath.h and Python/pymath.h for platforms
  which provide the functions through their libm. The files also
  contains several helpers and constants for math.

- Added a new convenience macro, PyErr_WarnPy3k, for issuing Py3k warnings.


What's New in Python 2.6 alpha 2?
=================================

*Release date: 02-Apr-2008*

Core and builtins
-----------------

- Issue #1733757: The interpreter would hang on shutdown if the
  tracing function set by sys.settrace is still active and happens to
  call threading.currentThread().

- Patch #1442: properly report exceptions when the PYTHONSTARTUP file
  cannot be executed.

- The compilation of a class nested in another class used to leak one
  reference on the outer class name.

- Patch #1810: compile() can now compile _ast trees as returned by
  ``compile(..., PyCF_ONLY_AST)``.

- Patch #2426: Added sqlite3.Connection.iterdump method to allow easy
  dumping of databases.  Contributed by Paul Kippes at PyCon 2008.

- Patch #2477: Added from __future__ import unicode_literals.

- Added backport of bytearray type.

- Issue #2355: add Py3k warning for buffer().

- Issue #1477: With narrow Unicode builds, the unicode escape sequence
  \Uxxxxxxxx did not accept values outside the Basic Multilingual
  Plane.  This affected raw unicode literals and the
  'raw-unicode-escape' codec.  Now UTF-16 surrogates are generated in
  this case, like normal unicode literals and the 'unicode-escape'
  codec.

- Issue #2348: add Py3k warning for file.softspace.

- Issue #2346/#2347: add Py3k warnings for __methods__ and
  __members__.

- Issue #2358: Add a Py3k warning on sys.exc_clear() usage.

- Issue #2400: Allow relative imports to "import *".

- Issue #1745: Backport print function with ``from __future__ import
  print_function``.

- Issue #2332: add new attribute names for instance method objects.
  The two changes are: im_self -> __self__ and im_func -> __func__

- Issue #2379: Raise a Py3K warning for __getitem__ or __getslice__ on
  exception instances.

- Issue #2371: Add a Py3k warning when catching an exception that
  doesn't derive from BaseException.

- Issue #2341: Add a Py3k warning when raising an exception that
  doesn't derive from BaseException.

- Issue #2321: use pymalloc for unicode object string data to reduce
  memory usage in some circumstances.

- PEP 3127: octal literals now start with "0o". Old-style octal
  literals are still valid. There are binary literals with a prefix of
  "0b".  This also affects int(x, 0).

- Issue #2359: Adding deprecation warnings for array.{read,write}.

- Issue #1779871: GNU gcc can now build Python on OS X because the
  flags -Wno-long-double, -no-cpp-precomp, and -mno-fused-madd are no
  longer passed.

- Add a warning when asserting a non-empty tuple which is always true.

- Issue #2179: speed up with statement execution by storing the exit
  method on the stack instead of in a temporary variable (patch by
  Jeffrey Yaskin)

- Issue #2238: Some syntax errors in *args and **kwargs expressions
  could give bogus error messages.

- Issue #2143: Fix embedded readline() hang on SSL socket EOF.

Extension Modules
-----------------

- Patch #2240: Implement signal.setitimer and signal.getitimer.

Library
-------

- Issue #2315: logging.handlers: TimedRotatingFileHandler now accounts
  for daylight savings time in calculating the next rollover.

- Issue #2316: logging.handlers: TimedRotatingFileHandler now
  calculates rollovers correctly even when nothing is logged for a
  while.

- Issue #2317: logging.handlers: TimedRotatingFileHandler now uses
  improved logic for removing old files.

- Issue #2495: tokenize.untokenize now inserts a space between two
  consecutive string literals; previously, ["" ""] was rendered as
  [""""], which is incorrect python code.

- Issue #2248: return the result of the QUIT command. from
  SMTP.quit().

- Backport of Python 3.0's io module.

- Issue #2482: Make sure that the coefficient of a Decimal is always
  stored as a str instance, not as a unicode instance.  This ensures
  that str(Decimal) is always an instance of str.

- Issue #2478: fix failure of decimal.Decimal(0).sqrt()

- Issue #2432: give DictReader the dialect and line_num attributes
  advertised in the docs.

- Issue #2460: Make Ellipsis object copyable.

- Issue #1681432: Add triangular distribution to the random module

- Issue #2136: urllib2's auth handler now allows single-quoted realms
  in the WWW-Authenticate header.

- Issue #2434: Enhanced platform.win32_ver() to also work on Python
  installation which do not have the win32all package installed.

- Added support to platform.uname() to also report the machine and
  processor information on Windows XP and later. As a result,
  platform.machine() and platform.processor() will report this
  information as well.

- The library implementing the 2to3 conversion, lib2to3, was added to
  the standard distribution.

- Issue #1747858: Fix chown to work with large uid's and gid's on
  64-bit platforms.

- Issue #1202: zlib.crc32 and zlib.adler32 no longer return different
  values on 32-bit vs. 64-bit python interpreters.  Both were correct,
  but they now both return a signed integer object for consistency.

- Issue #1158: add %f format (fractions of a second represented as
  microseconds) to datetime objects.  Understood by both strptime and
  strftime.

- Issue #705836: struct.pack(">f", x) now raises OverflowError on all
  platforms when x is too large to fit into an IEEE 754 float;
  previously it only raised OverflowError on non IEEE 754 platforms.

- Issues #2166, #1741 and #1531505: now distutils deals with HOME
  correctly under win32

- Patch #1858: distutils: added multiple server support in .pypirc

- Issue #1106316: pdb.post_mortem()'s parameter, "traceback", is now
  optional: it defaults to the traceback of the exception that is
  currently being handled (is mandatory to be in the middle of an
  exception, otherwise it raises ValueError).

- Issue #1193577: A .shutdown() method has been added to SocketServers
  which terminates the .serve_forever() loop.

- Issue #2220: handle rlcompleter attribute match failure more
  gracefully.

- Issue #2225: py_compile, when executed as a script, now returns a
  non- zero status code if not all files could be compiled
  successfully.

- Bug #1725737: In distutils' sdist, exclude RCS, CVS etc. also in the
  root directory, and also exclude .hg, .git, .bzr, and _darcs.

- Issue #1872: The struct module typecode for _Bool has been changed
  from 't' to '?'.

- The bundled libffi copy is now in sync with the recently released
  libffi3.0.4 version, apart from some small changes to
  Modules/_ctypes/libffi/configure.ac.  On OS X, preconfigured libffi
  files are used.  On all linux systems the --with-system-ffi
  configure option defaults to "yes".

- Issue #1577: shutil.move() now calls os.rename() if the destination
  is a directory instead of copying-then-remove-source.

Tests
-----

- test_nis no longer fails when test.test_support.verbose is true and
  NIS is not set up on the testing machine.

- Output comparison tests are no longer supported.

- Rewrite test_errno to use unittest and no longer be a no-op.

- GHOP 234: Convert test_extcall to doctest.

- GHOP 290: Convert test_dbm and test_dummy_threading to unittest.

- GHOP 293: Convert test_strftime, test_getargs, and test_pep247 to
  unittest.

- Issue #2055: Convert test_fcntl to unittest.

- Issue 1960: Convert test_gdbm to unittest.

- GHOP 294: Convert test_contains, test_crypt, and test_select to
  unittest.

- GHOP 238: Convert test_tokenize to use doctest.

- GHOP 237: Rewrite test_thread using unittest.

- Patch #2232: os.tmpfile might fail on Windows if the user has no
  permission to create files in the root directory.

Build
-----

- A new script 2to3 is now installed, to run the 2.x to 3.x converter.

- Python/memmove.c and Python/strerror.c have been removed; both
  functions are in the C89 standard library.

- Patch #2284: Add -x64 option to rt.bat.

C API
-----

- Patch #2477: Added PyParser_ParseFileFlagsEx() and
  PyParser_ParseStringFlagsFilenameEx().


What's New in Python 2.6 alpha 1?
=================================

*Release date: 29-Feb-2008*

Core and builtins
-----------------

- Issue #2051: pyc and pyo files are no longer created with permission
  644. The mode is now inherited from the py file.

- Issue #2067: file.__exit__() now calls subclasses' close() method.

- Patch #1759: Backport of PEP 3129 class decorators.

- Issue #1881: An internal parser limit has been increased. Also see
  issue 215555 for a discussion.

- Added the future_builtins module, which contains hex() and oct().
  These are the PEP 3127 version of these functions, designed to be
  compatible with the hex() and oct() builtins from Python 3.0.  They
  differ slightly in their output formats from the existing, unchanged
  Python 2.6 builtins.  The expected usage of the future_builtins
  module is:
    from future_builtins import hex, oct

- Issue #1600: Modifed PyOS_ascii_formatd to use at most 2 digit
  exponents for exponents with absolute value < 100.  Follows C99
  standard.  This is a change on Windows, which would use 3 digits.
  Also, added 'n' to the formats that PyOS_ascii_formatd understands,
  so that any alterations it does to the resulting string will be
  available in stringlib/formatter.h (for float.__format__).

- Implemented PEP 3101, Advanced String Formatting.  This adds a new
  builtin format(); a format() method for str and unicode; a
  __format__() method to object, str, unicode, int, long, float, and
  datetime; the class string.Formatter; and the C API
  PyObject_Format().

- Fixed several potential crashes, all caused by specially crafted
  __del__ methods exploiting objects in temporarily inconsistent
  state.

- Issue #2115: Important speedup in setting __slot__ attributes.  Also
  prevent a possible crash: an Abstract Base Class would try to access
  a slot on a registered virtual subclass.

- Fixed repr() and str() of complex numbers with infinity or nan as
  real or imaginary part.

- Clear all free lists during a gc.collect() of the highest generation
  in order to allow pymalloc to free more arenas. Python may give back
  memory to the OS earlier.

- Issue #2045: Fix an infinite recursion triggered when printing a
  subclass of collections.defaultdict, if its default_factory is set
  to a bound method.

- Fixed a minor memory leak in dictobject.c. The content of the free
  list was not freed on interpreter shutdown.

- Limit free list of method and builtin function objects to 256
  entries each.

- Patch #1953: Added ``sys._compact_freelists()`` and the C API
  functions ``PyInt_CompactFreeList`` and ``PyFloat_CompactFreeList``
  to compact the internal free lists of pre-allocted ints and floats.

- Issue #1983: Fixed return type of fork(), fork1() and forkpty()
  calls.  Python expected the return type int but the fork familie
  returns pi_t.

- Issue #1678380: Fix a bug that identifies 0j and -0j when they
  appear in the same code unit.

- Issue #2025: Add tuple.count() and tuple.index() methods to comply
  with the collections.Sequence API.

- Patch #1970 by Antoine Pitrou: Speedup unicode whitespace and
  linebreak detection

- Added ``PyType_ClearCache()`` and ``sys._clear_type_cache`` to clear
  the internal lookup cache for ref leak tests.

- Patch #1473257: generator objects gain a gi_code attribute. This is
  the same object as the func_code attribute of the function that
  produced the generator.

- Issue #1920: "while 0" statements were completely removed by the
  compiler, even in the presence of an "else" clause, which is
  supposed to be run when the condition is false. Now the compiler
  correctly emits bytecode for the "else" suite.

- A few crashers fixed: weakref_in_del.py (issue #1377858);
  loosing_dict_ref.py (issue #1303614, test67.py);
  borrowed_ref_[34].py (not in tracker).

- Issue #1069410: The "can't load dll" message box on Windows is
  suppressed while an extension is loaded by calling SetErrorMode in
  dynload_win.c. The error is still reported properly.

- Issue #1915: Python compiles with --enable-unicode=no again. However
  several extension methods and modules do not work without unicode
  support.

- Issue #1882: when compiling code from a string, encoding cookies in the
  second line of code were not always recognized correctly.

- Issue #1679: "0x" was taken as a valid integer literal.

- Issue #1865: ``bytes`` as an alias for ``str`` and b"" as an alias "" were
  added.

- sys.float_info / PyFloat_GetInfo: The floating point information
  object was converted from a dict to a specialized structseq object.

- Patch #1816: Added sys.flags structseq. It exposes the status of
  most command line arguments and PYTHON* environment variables.

- Objects/structseq.c: Implemented new structseq representation. The
  patch makes structseqs (e.g. the return value of os.stat) more
  readable.

- Patch #1700288: added a type attribute cache that caches method
  accesses, resulting in speedups in heavily object-oriented code.

- Bug #1776: __import__() no longer accepts filenames on any platform.
  The first parameter to __import__() must be a valid module name.

- Patch #1668: renamed THREADDEBUG envvar to PYTHONTHREADDEBUG.

- Patch #602345: Add -B command line option, PYTHONDONTWRITEBYTECODE
  envvar and sys.dont_write_bytecode attribute. All these can be set
  to forbid Python to attempt to write compiled bytecode files.

- Improve some exception messages when Windows fails to load an
  extension module. Now we get for example '%1 is not a valid Win32
  application' instead of 'error code 193'.

- Bug #1481296: Fixed long(float('nan')) != 0L.

- Issue #1640: Added math.isinf(x), math.isnan(x) and math.copysign(x,
  y) functions.

- Issue #1635: Platform independent creation and representation of NaN
  and INF. float("nan"), float("inf") and float("-inf") now work on
  every platform with IEEE 754 semantics.

- Compiler now generates simpler and faster code for dictionary
  literals.  The oparg for BUILD_MAP now indicates an estimated
  dictionary size.  There is a new opcode, STORE_MAP, for adding
  entries to the dictionary.

- Issue #1638: %zd configure test fails on Linux.

- Issue #1620: New property decorator syntax was modifying the
  decorator in place instead of creating a new decorator object.

- Issue #1538: Avoid copying string in split/rsplit if the split char
  is not found.

- Issue #1553: An erroneous __length_hint__ can make list() raise a
  SystemError.

- PEP 366: Allow explicit relative imports when executing modules
  inside packages with the -m switch via a new module level
  __package__ attribute.

- 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.

- Issue #1733488: Fix compilation of bufferobject.c on AIX.

- Issue #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.

- Issue #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.

- 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
-------

- Patch #2274: Add heapq.heappushpop().

- Add inspect.isabstract(object) to fix bug #2223

- Add a __format__ method to Decimal, to support PEP 3101.

- Add a timing parameter when using trace.Trace to print out
  timestamps.

- Issue #1627: httplib now ignores negative Content-Length headers.

- Issue #900744: If an invalid chunked-encoding header is sent by a
  server, httplib will now raise IncompleteRead and close the
  connection instead of raising ValueError.

- Issue #1492: The content type of BaseHTTPServer error messages can
  now be overridden.

- Issue #1781: ConfigParser now does not let you add the "default" section
  (ignore-case)

- Removed uses of dict.has_key() from distutils, and uses of
  callable() from copy_reg.py, so the interpreter now starts up
  without warnings when '-3' is given.  More work like this needs to
  be done in the rest of the stdlib.

- Issue #1916: added isgenerator() and isgeneratorfunction() to
  inspect.py.

- Issue #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.

- Patch #2021: Allow tempfile.NamedTemporaryFile and
  SpooledTemporaryFile to be used in with statements by correctly
  supporting the context management protocol.

- Patch #1979: Add rich comparisons to Decimal, and make Decimal
  comparisons involving a NaN follow the IEEE 754 standard.

- Issue #2004: tarfile.py: Use mode 0700 for temporary directories and
  default permissions for missing directories.

- Issue #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.

- Issue #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.

- Issue #1221598: add optional callbacks to ftplib.FTP's storbinary()
  and storlines() methods.  (Contributed by Phil Schwartz)

- Issue #1715: include sub-extension modules in pydoc's text output.

- Issue #1836: fix an off-by-one bug in TimedRotatingHandler's
  rollover time calculation.

- Issue #1021: fix a bug to allow basicConfig to accept NOTSET as a
  level.

- Issue #932563: add LoggerAdapter convenience class to make it easier
  to add contextual information in logging output.

- Issue #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``.

- Issue #1555501: move plistlib from plat-mac directory to general
  library.

- Issue #1269: fix a bug in pstats.add_callers() and add a unit test
  file for pstats.

- Issue #1669: don't allow shutil.rmtree() to be called on a symlink
  to a directory.

- Issue #1664522: in urllib, don't read non-existing directories in
  ftp mode, returning a 0-byte file -- raise an IOError instead.

- Issue #856047: respect the ``no_proxy`` environment variable when
  using the ``http_proxy`` etc. environment variables in urllib.

- Issue #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.

- Issue #1189216: Fix the zipfile module to work on archives with
  headers past the 2**31 byte boundary.

- Issue #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.

- Issue #1146: fix how textwrap breaks a long word that would start in
  the last column of a line.

- Issue #1693149: trace.py --ignore-module - accept multiple
  comma-separated modules to be given.

- Issue #1822: MIMEMultipart.is_multipart() behaves correctly for a
  just-created (and empty) instance. Thanks Jonathan Share.

- Issue #1861: Added an attribute to the sched module which returns an
  ordered list of upcoming events (displayed as named tuples).

- Issue #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:q re.match is interruptible now, which is particularly
  good for long regular expression matches.

- Patch #1137: allow setting buffer_size attribute on pyexpat 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.

- Added itertools.product() which forms the Cartesian product of the
  input iterables.

- Added itertools.combinations() and itertools.permutations().

- 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.

- Bugs #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.

- Issue #1385: 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 elide 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).

- Issue #829951: 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.

- Issue #1339: 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.

- Patch #1089358: Add signal.siginterrupt, a wrapper around
  siginterrupt(3).

Extension Modules
-----------------

- Patch #1657: added select.epoll and select.kqueue.

- Patch #1506171: added operator.methodcaller().

- Patch #1826: operator.attrgetter() now supports dotted attribute paths.

- Patch #1957: syslogmodule: Release GIL when calling syslog(3).

- Bug #2112: mmap.error is now a subclass of EnvironmentError and not
  a direct EnvironmentError.

- Bug #2111: mmap segfaults when trying to write a block opened with
  PROT_READ.

- Bug #2063: correct order of utime and stime in os.times() result on
  Windows.

- Patch #1736: Fix file name handling of _msi.FCICreate.

- Updated ``big5hkscs`` codec to the HKSCS revision of 2004.

- Issue #1940: make it possible to use curses.filter() before
  curses.initscr() as the documentation says.

- Backport of _fileio module from Python 3.0.

- Patch #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.

- itertools.chain() now has an alternate constructor,
  chain.from_iterable().

- 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,
  4.6.x and 4.7.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.

- The sqlite3 module was updated to pysqlite 2.4.1.

Tests
-----

- Refactor test_logging to use unittest.

- 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.

----

**(For information about older versions, consult the HISTORY file.)**
