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

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

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

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

- 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 regression from 2.4 caused by the
  switch to the new compiler.

Build
-----

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

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 #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.0.
  http://www.jcea.es/programacion/pybsddb.htm#bsddb3-4.7.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.getIdent() method.

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 alias for names that are removed in 3.x.

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

- Bug #1633621: if curses.resizeterm() or curses.resize_term() is
  called, update _curses.LINES, _curses.COLS, curses.LINES and
  curses.COLS.

- Fix an off-by-one bug in locale.strxfrm().

- Fix libffi configure for hppa*-*-linux* | parisc*-*-linux*.

- Build using system ffi library on arm*-linux*.

- Bug #1372: zlibmodule.c: int overflow in PyZlib_decompress

- bsddb module: Fix memory leak when using database cursors on
  databases without a DBEnv.

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