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

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

What's New in Python 2.7 alpha 1
================================

*Release date: XX-XXX-20XX*

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

- Issue #6990: Fix threading.local subclasses leaving old state around
  after a reference cycle GC which could be recycled by new locals.

- Issue #6300: unicode.encode, unicode.decode, str.decode, and str.encode now
  take keyword arguments.

- Issue #6922: Fix an infinite loop when trying to decode an invalid
  UTF-32 stream with a non-raising error handler like "replace" or "ignore".

- Issue #6713: Improve performance of base 10 int -> string and
  long -> string conversions.

- Issue #1590864: Fix potential deadlock when mixing threads and fork().

- Issue #6844: Do not emit DeprecationWarnings when accessing a "message"
  attribute on exceptions that was set explicitly.

- Issue #6846: Fix bug where bytearray.pop() returns negative integers.

- classmethod no longer checks if its argument is callable.

- Issue #6750: A text file opened with io.open() could duplicate its output
  when writing from multiple threads at the same time.

- Issue #6704: Improve the col_offset in AST for "for" statements with
  a target of tuple unpacking.

- Issue #6707: dir() on an uninitialized module caused a crash.

- Issue #6540: Fixed crash for bytearray.translate() with invalid parameters.

- Issue #6573: set.union() stopped processing inputs if an instance of self
  occurred in the argument chain.

- Issue #1616979: Added the cp720 (Arabic DOS) encoding.

- Issue #6070: On posix platforms import no longer copies the execute bit
  from the .py file to the .pyc file if it is set.  Patch by Marco N.

- Issue #4618: When unicode arguments are passed to print(), the default
  separator and end should be unicode also.

- Issue #6119: Fixed a incorrect Py3k warning about order comparisons of builtin
  functions and methods.

- Issue #6347: Include inttypes.h as well as stdint.h in pyport.h.
  This fixes a build failure on HP-UX: int32_t and uint32_t are
  defined in inttypes.h instead of stdint.h on that platform.

- Issue #4856: Remove checks for win NT.

- Issue #2016: Fixed a crash in a corner case where the dictionary of keyword
  arguments could be modified during the function call setup.

- Removed the ipaddr module.

- Issue #6329: Fixed iteration for memoryview objects (it was being blocked
  because it wasn't recognized as a sequence).

- Issue #6289: Encoding errors from compile() were being masked.

- When no module is given in a relative import, the module field of the
  ImportFrom AST node is now None instead of an empty string.

- Assignment to None using import statements now raises a SyntaxError.

- Issue #4547: When debugging a very large function, it was not always
  possible to update the lineno attribute of the current frame.

- Issue #5330: C functions called with keyword arguments were not reported by
  the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau.

- Issue #5982: staticmethod and classmethod now expose the wrapped
  function with __func__.

- Added support for multiple context managers in the same with-statement.
  Deprecated contextlib.nested() which is no longer needed.

- Issue #6101: A new opcode, SETUP_WITH, has been added to speed up the with
  statement and correctly lookup the __enter__ and __exit__ special methods.

- Issue #5829: complex("1e500") no longer raises OverflowError.  This
  makes it consistent with float("1e500") and interpretation of real
  and imaginary literals.

- Issue #3527: Removed Py_WIN_WIDE_FILENAMES which is not used any more.

- __instancecheck__ and __subclasscheck__ are now completely ignored on classic
  classes and instances.

- Issue #5994: the marshal module now has docstrings.

- Issue #5981: Fix three minor inf/nan issues in float.fromhex:
  (1) inf and nan strings with trailing whitespace were incorrectly
  rejected;  (2) parsing of strings representing infinities and nans
  was locale aware; and (3) the interpretation of fromhex('-nan')
  didn't match that of float('-nan').

- Issue #5920: For float.__format__, change the behavior with the
  empty presentation type (that is, not one of 'e', 'f', 'g', or 'n')
  to be like 'g' but with at least one decimal point and with a
  default precision of 12. Previously, the behavior the same but with
  a default precision of 6.  This more closely matches str(), and
  reduces surprises when adding alignment flags to the empty
  presentation type. This also affects the new complex.__format__ in
  the same way.

- Issue #5890: in subclasses of 'property' the __doc__ attribute was
  shadowed by classtype's, even if it was None.  property now
  inserts the __doc__ into the subclass instance __dict__.

- Issue #4426: The UTF-7 decoder was too strict and didn't accept some legal
  sequences. Patch by Nick Barnes and Victor Stinner.

- Issue #1588: Add complex.__format__. For example,
  format(complex(1, 2./3), '.5') now produces a sensible result.

- Issue #5864: Fix empty format code formatting for floats so that it
  never gives more than the requested number of significant digits.

- Issue #5793: Rationalize isdigit / isalpha / tolower, etc. Includes
  new Py_ISDIGIT / Py_ISALPHA / Py_TOLOWER, etc. in pctypes.h.

- Issue #4971: Fix titlecase for characters that are their own
  titlecase, but not their own uppercase.

- Issue #5835: Deprecate PyOS_ascii_formatd and replace it with
  _PyOS_double_to_string or PyOS_double_to_string.

- Issue #5283: Setting __class__ in __del__ caused a segfault.

- Issue #5816: complex(repr(z)) now recovers z exactly, even when
  z involves nans, infs or negative zeros.

- Implement PEP 378, Format Specifier for Thousands Separator, for
  floats, ints, and longs.

- Issue #5515: 'n' formatting for ints, longs, and floats handles
  leading zero formatting poorly.

- Issue #5772: For float.__format__, don't add a trailing ".0" if
  we're using no type code and we have an exponent.

- Issue #3166: Make long -> float (and int -> float) conversions
  correctly rounded.

- Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on
  some builtin types.

- Issue #1869: fix a couple of minor round() issues.  round(5e15+1)
  was giving 5e15+2; round(-0.0) was losing the sign of the zero.

- Issue #5759: float() didn't call __float__ on str subclasses.

- Issue #5704: the "-3" command-line option now implies "-t".

- Issue #2170: refactored xml.dom.minidom.normalize, increasing both
  its clarity and its speed.

- Issue #2396: the memoryview object was backported from Python 3.1.

- Fix a problem in PyErr_NormalizeException that leads to "undetected errors"
  when hitting the recursion limit under certain circumstances.

- Issue #1665206: Remove the last eager import in _warnings.c and make it lazy.

- Issue #4865: On MacOSX /Library/Python/2.7/site-packages is added to
  the end sys.path, for compatibility with the system install of Python.

- Issue #4688: Add a heuristic so that tuples and dicts containing only
  untrackable objects are not tracked by the garbage collector. This can
  reduce the size of collections and therefore the garbage collection overhead
  on long-running programs, depending on their particular use of datatypes.

- Issue #5512: Rewrite PyLong long division algorithm (x_divrem) to
  improve its performance.  Long divisions and remainder operations
  are now between 50% and 150% faster.

- Issue #4258: Make it possible to use base 2**30 instead of base
  2**15 for the internal representation of integers, for performance
  reasons.  Base 2**30 is enabled by default on 64-bit machines.  Add
  --enable-big-digits option to configure, which overrides the
  default.  Add sys.long_info structseq to provide information about
  the internal format.

- Issue #4034: Fix weird attribute error messages of the traceback object. (As a
  result traceback.__members__ no longer exists.)

- Issue #4474: PyUnicode_FromWideChar now converts characters outside
  the BMP to surrogate pairs, on systems with sizeof(wchar_t) == 4
  and sizeof(Py_UNICODE) == 2.

- Issue #5237: Allow auto-numbered fields in str.format(). For
  example: '{} {}'.format(1, 2) == '1 2'.

- Issue #3652: Make the 'line' argument for warnings.showwarning() a
  requirement.  Means the DeprecationWarning from Python 2.6 can go away.

- Issue #5247: Improve error message when unknown format codes are
  used when using str.format() with str, unicode, long, int, and
  float arguments.

- Running Python with the -3 option now also warns about classic division
  for ints and longs.

- Issue #5260: Long integers now consume less memory:  average
  saving is 2 bytes per long on a 32-bit system and 6 bytes per long
  on a 64-bit system.

- Issue #5186: Reduce hash collisions for objects with no __hash__ method by
  rotating the object pointer by 4 bits to the right.

- Issue #4575: Fix Py_IS_INFINITY macro to work correctly on x87 FPUs:
  it now forces its argument to double before testing for infinity.

- Issue #4978: Passing keyword arguments as unicode strings is now allowed.

- Issue #1242657: the __len__() and __length_hint__() calls in several tools
  were suppressing all exceptions.  These include list(), filter(), map(),
  zip(), and bytearray().

- os.ftruncate raises OSErrors instead of IOErrors for consistency with other os
  functions.

- Issue #4991: Passing invalid file descriptors to io.FileIO now raises an
  OSError.

- Issue #4807: Port the _winreg module to Windows CE.

- Issue #4935: The overflow checking code in the expandtabs() method common
  to str, bytes and bytearray could be optimized away by the compiler, letting
  the interpreter segfault instead of raising an error.

- Issue #3720: Fix a crash when an iterator modifies its class and removes its
  __next__ method.

- Issue #4893: Use NT threading on CE.

- Issue #4915: Port sysmodule to Windows CE.

- Issue #4074: Change the criteria for doing a full garbage collection (i.e.
  collecting the oldest generation) so that allocating lots of objects without
  destroying them does not show quadratic performance. Based on a proposal by
  Martin von Löwis at
  http://mail.python.org/pipermail/python-dev/2008-June/080579.html.

- Issue #4850: Change COUNT_ALLOCS variables to Py_ssize_t.

- Issue #1180193: When importing a module from a .pyc (or .pyo) file with
  an existing .py counterpart, override the co_filename attributes of all
  code objects if the original filename is obsolete (which can happen if the
  file has been renamed, moved, or if it is accessed through different paths).
  Patch by Ziga Seilnacht and Jean-Paul Calderone.

- Issue #4075: Use OutputDebugStringW in Py_FatalError.

- Issue #4797: IOError.filename was not set when _fileio.FileIO failed to open
  file with `str' filename on Windows.

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

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

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

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

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

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

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

- Issue #3439: Add a bit_length method to int and long.

- Issue #2183: Simplify and optimize bytecode for list comprehensions.
  Original patch by Neal Norwitz.

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

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

- Issue #4445: Replace "sizeof(PyStringObject)" with
  "offsetof(PyStringObject, ob_sval) + 1" when allocating memory for
  str instances.  On a typical machine this saves 3 bytes of memory
  (on average) per string allocation.

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

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

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

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

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

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

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

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

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

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

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

- Using ``nonlocal`` as a variable name will now raise a Py3k SyntaxWarning
  because it is a reserved word in 3.x.

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

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

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

- Issue #4748: Lambda generators no longer return a value.

- Issue #3582: Use native TLS functions on Windows

- The re.sub(), re.subn() and re.split() functions now accept a flags parameter.

- Issue #3845: In PyRun_SimpleFileExFlags avoid invalid memory access with
  short file names.

- Issue #1113244: Py_XINCREF, Py_DECREF, Py_XDECREF: Add `do { ... } while (0)'
  to avoid compiler warnings.

- Issue #5705: os.setuid() would not accept values > 2**31-1 but pwd.getpwnam()
  returned them on 64bit platforms.

- Issue #5108: Handle %s like %S and %R in PyUnicode_FromFormatV(): Call
  PyUnicode_DecodeUTF8() once, remember the result and output it in a second
  step. This avoids problems with counting UTF-8 bytes that ignores the effect
  of using the replace error handler in PyUnicode_DecodeUTF8().

- Issue #3739: The unicode-internal encoder now reports the number of characters
  consumed like any other encoder (instead of the number of bytes).

Library
-------

- Issue #6236, #6348: Fix various failures in the `io` module under AIX
  and other platforms, when using a non-gcc compiler. Patch by egreen.

- Issue #6954: Fixed crash when using DISTUTILS_DEBUG flag in Distutils.

- Issue #6851: Fix urllib.urlopen crash on secondairy threads on OSX 10.6

- Issue #4606: Passing 'None' if ctypes argtype is set to POINTER(...)
  does now always result in NULL.

- Issue #5042: ctypes Structure sub-subclass does now initialize
  correctly with base class positional arguments.

- Issue #6938: Fix a TypeError in string formatting of a multiprocessing
  debug message.

- Issue #6635: Fix profiler printing usage message.

- Issue #6856: Add a filter keyword argument to TarFile.add().

- Issue #6163: Fixed HP-UX runtime library dir options in
  distutils.unixcompiler. Initial patch by Sridhar Ratnakumar and
  Michael Haubenwallner.

- Issue #6857: Default format() alignment should be '>' for Decimal
  instances.

- Issue #6795: int(Decimal('nan')) now raises ValueError instead of
  returning NaN or raising InvalidContext.  Also, fix infinite recursion
  in long(Decimal('nan')).

- Issue #6850: Fix bug in Decimal._parse_format_specifier for formats
  with no type specifier.

- Issue #4937: plat-mac/bundlebuilder revers to non-existing version.plist

- Issue #6838: Use a list to accumulate the value instead of
  repeatedly concatenating strings in httplib's
  HTTPResponse._read_chunked providing a significant speed increase
  when downloading large files servend with a Transfer-Encoding of 'chunked'.

- Issue #5275: In Cookie's Cookie.load(), properly handle non-string arguments
  as documented.

- Issue #2666: Handle BROWSER environment variable properly for unknown browser
  names in the webbrowser module.

- Issue #6054: Do not normalize stored pathnames in tarfile.

- Issue #6794: Fix Decimal.compare_total and Decimal.compare_total_mag: NaN
  payloads are now ordered by integer value rather than lexicographically.

- Issue #6693: New functions in site.py to get user/global site packages paths.

- The thread.lock type now supports weak references.

- Issue #1356969: Add missing info methods in Tix.HList.

- Issue #1522587: New constants and methods for the Tix.Grid widget.

- Issue #1250469: Fix the return value of Tix.PanedWindow.panes.

- Issue #1119673: Do not override Tkinter.Text methods when creating a
  ScrolledText.

- Issue #6665: Fix fnmatch to properly match filenames with newlines in them.

- Issue #1135: Add the XView and YView mix-ins to avoid duplicating
  the xview* and yview* methods.

- Issue #6629: Fix a data corruption issue in the new `io` package, which could
  occur when writing to a BufferedRandom object (e.g. a file opened in "rb+" or
  "wb+" mode) after having buffered a certain amount of data for reading. This
  bug was not present in the pure Python implementation.

- Issue #4660: If a multiprocessing.JoinableQueue.put() was preempted, it was
  possible to get a spurious 'task_done() called too many times' error.

- Issue #1628205: Socket file objects returned by socket.socket.makefile() now
  properly handles EINTR within the read, readline, write & flush methods.
  The socket.sendall() method now properly handles interrupted system calls.

- Issue #6595: The Decimal constructor now allows arbitrary Unicode
  decimal digits in input, as recommended by the standard.  Previously
  it was restricted to accepting [0-9].

- Issue #6511: ZipFile now raises BadZipfile (instead of an IOError) when
  opening an empty or very small file.

- Issue #6553: Fixed a crash in cPickle.load(), when given a file-like object
  containing incomplete data.

- Issue #6545: Removed assert statements in distutils.Extension, so the
  behavior is similar when used with -O.

- unittest has been split up into a package.  All old names should still work.

- Issue #6431: Make Fraction type return NotImplemented when it doesn't
  know how to handle a comparison without loss of precision.  Also add
  correct handling of infinities and nans for comparisons with float.

- Issue #6415: Fixed warnings.warn segfault on bad formatted string.

- Issue #6466: now distutils.cygwinccompiler and distutils.emxccompiler
  uses the same refactored function to get gcc/ld/dllwrap versions numbers.
  It's `distutils.util.get_compiler_versions`. Added deprecation warnings
  for the obsolete get_versions() functions.

- Issue #6433: fixed issues with multiprocessing.pool.map hanging on empty list

- Issue #6314: logging: Extra checks on the "level" argument in more places.

- Issue #2622: Fixed an ImportError when importing email.messsage from a
  standalone application built with py2exe or py2app.

- Issue #6455: Fixed test_build_ext under win32.

- Issue #6377: Enabled the compiler option, and deprecate its usage as an
  attribute.

- Issue #6413: Fixed the log level in distutils.dist for announce.

- Issue #3392: The subprocess communicate() method no longer fails in select()
  when file descriptors are large; communicate() now uses poll() when possible.

- Issue #6403: Fixed package path usage in build_ext.

- Issues #5155, 5313, 5331: multiprocessing.Process._bootstrap was
  unconditionally calling "os.close(sys.stdin.fileno())" resulting in file
  descriptor errors

- Issue #6365: Distutils build_ext inplace mode was copying the compiled
  extension in a subdirectory if the extension name had dots.

- Issue #6344: Fixed a crash of mmap.read() when passed a negative argument.

- Issue #5230: pydoc would report no documentation found if a module generated
  a 'not found' import error when loaded; it now reports the import errors.
  Thanks to Lucas Prado Melo for initial fix and collaboration on the tests.

- Issue #6314: logging.basicConfig() performs extra checks on the "level"
  argument.

- Issue #6164: Added an AIX specific linker argument in Distutils
  unixcompiler. Original patch by Sridhar Ratnakumar.

- Issue #6274: Fixed possible file descriptors leak in subprocess.py

- Issue #6189: Restored compatibility of subprocess.py with Python 2.2.

- Issue #6287: Added the license field in Distutils documentation.

- Issue #6286: Now Distutils upload command is based on urllib2 instead of
  httplib, allowing the usage of http_proxy.

- Issue #6271: mmap tried to close invalid file handle (-1) when annonymous.
  (On Unix)

- Issue #6215: All bug fixes and enhancements from the Python 3.1 io library
  (including the fast C implementation) have been backported to the standard
  ``io`` module.

- Issue #6258: Support AMD64 in bdist_msi.

- Issue #5262: Fixed bug in next rollover time computation in
  TimedRotatingFileHandler.

- Issue #6263: Fixed syntax error in distutils.cygwincompiler.

- Issue #5201: distutils.sysconfig.parse_makefile() now understands `$$`
  in Makefiles. This prevents compile errors when using syntax like:
  `LDFLAGS='-rpath=\$$LIB:/some/other/path'`. Patch by Floris Bruynooghe.

- Issue #5767: Removed sgmlop support from xmlrpclib.

- Issue #6131: test_modulefinder leaked when run after test_distutils.
  Patch by Hirokazu Yamamoto.

- Issue #6048: Now Distutils uses the tarfile module in archive_util.

- Issue #5150: IDLE's format menu now has an option to strip trailing
  whitespace.

- Issue #6121: pydoc now ignores leading and trailing spaces in the
  argument to the 'help' function.

- In unittest, using a skipping decorator on a class is now equivalent to
  skipping every test on the class.  The ClassTestSuite class has been removed.

- Issue #6050: Don't fail extracting a directory from a zipfile if
  the directory already exists.

- Issue #5311: bdist_msi can now build packages that do not depend on a
  specific Python version.

- Issue #1309352: fcntl now converts its third arguments to a C `long` rather
  than an int, which makes some operations possible under 64-bit Linux (e.g.
  DN_MULTISHOT with F_NOTIFY).

- Issue #1424152: Fix for httplib, urllib2 to support SSL while working through
  proxy. Original patch by Christopher Li, changes made by Senthil Kumaran.

- Issue #1983: Fix functions taking or returning a process identifier to use
  the dedicated C type ``pid_t`` instead of a C ``int``. Some platforms have
  a process identifier type wider than the standard C integer type.

- Issue #4066: smtplib.SMTP_SSL._get_socket now correctly returns the socket.
  Patch by Farhan Ahmad, test by Marcin Bachry.

- Issue #6062: In distutils, fixed the package option of build_ext. Feedback
  and tests on pywin32 by Tim Golden.

- Issue #6053: Fixed distutils tests on win32. patch by Hirokazu Yamamoto.

- Issue #6046: Fixed the library extension when distutils build_ext is used
  inplace. Initial patch by Roumen Petrov.

- Issue #6041: Now distutils `sdist` and `register` commands use `check` as a
  subcommand.

- Issue #2116: Weak references and weak dictionaries now support copy()ing and
  deepcopy()ing.

- Issue #1655: Make imaplib IPv6-capable. Patch by Derek Morr.

- Issue #5918: Fix a crash in the parser module.

- Issue #1664: Make nntplib IPv6-capable. Patch by Derek Morr.

- Issue #6022: a test file was created in the current working directory by
  test_get_outputs in Distutils.

- Issue #4050: inspect.findsource/getsource now raise an IOError if the 'source'
  file is a binary.  Patch by Brodie Rao, tests by Daniel Diniz.

- Issue #5977: distutils build_ext.get_outputs was not taking into account the
  inplace option. Initial patch by kxroberto.

- Issue #5984: distutils.command.build_ext.check_extensions_list checks were broken
  for old-style extensions.

- Issue #5971: StreamHandler.handleError now swallows IOErrors which occur when
  trying to print a traceback.

- Issue #5976: Fixed Distutils test_check_environ.

- Issue #5900: Ensure RUNPATH is added to extension modules with RPATH if GNU
  ld is used. Original patch by Floris Bruynooghe.

- Issue #5941: Distutils build_clib command was not working anymore because
  of an incomplete costumization of the archiver command. Added ARFLAGS in the
  Makefile besides AR and make Distutils use it. Original patch by David
  Cournapeau.

- Issue 5955: aifc's close method did not close the file it wrapped,
  now it does.  This also means getfp method now returns the real fp.

- Issue #4875: On win32, ctypes.util.find_library does no longer
  return directories.

- Issue #5142: Add the ability to skip modules while stepping to pdb.

- Issue #1309567: Fix linecache behavior of stripping subdirectories when
  looking for files given by a relative filename.

- Issue #5692: In :class:`zipfile.Zipfile`, fix wrong path calculation when
  extracting a file to the root directory.

- Issue #5913: os.listdir() should fail for empty path on windows.

- Issue #5084: unpickling now interns the attribute names of pickled objects,
  saving memory and avoiding growth in size of subsequent pickles. Proposal
  and original patch by Jake McGuire.

- Issue #3002: ``shutil.copyfile()`` and ``shutil.copytree()`` now raise an
  error when a named pipe is encountered, rather than blocking infinitely.

- Issue #3959: The ipaddr module has been added to the standard library.
  Contributed by Google.

- Issue #2245: aifc now skips chunk types it doesn't recognize, per spec.

- Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive
  anymore.

- Issue #4305: ctypes should now build again on mipsel-linux-gnu

- Issue #1734234: Massively speedup ``unicodedata.normalize()`` when the
  string is already in normalized form, by performing a quick check beforehand.
  Original patch by Rauli Ruohonen.

- Issue #5853: calling a function of the mimetypes module from several threads
  at once could hit the recursion limit if the mimetypes database hadn't been
  initialized before.

- Issue #5854: Updated __all__ to include some missing names and remove some
  names which should not be exported.

- Issue #5810: Fixed Distutils test_build_scripts so it uses
  sysconfig.get_config_vars.

- Issue #4951: Fixed failure in test_httpservers.

- Issue #3102:  All global symbols that the _ctypes extension defines
  are now prefixed with 'Py' or '_ctypes'.

- Issue #5041: ctypes does now allow pickling wide character.

- Issue #5812: For the two-argument form of the Fraction constructor,
  Fraction(m, n), m and n are permitted to be arbitrary Rational
  instances.

- Issue #5812: Fraction('1e6') is valid: more generally, any string
  that's valid for float() is now valid for Fraction(), with the
  exception of strings representing NaNs and infinities.

- Issue #5795: Fixed test_distutils failure on Debian ppc.

- Issue #5768: Fixed bug in Unicode output logic and test case for same.

- Issue #1161031: fix readwrite select flag handling: POLLPRI now
  results in a handle_expt_event call, not handle_read_event, and POLLERR
  and POLLNVAL now call handle_close, not handle_expt_event.  Also,
  dispatcher now has an 'ignore_log_types' attribute for suppressing
  log messages, which is set to 'warning' by default.

- Issue #5607: fixed Distutils test_get_platform for Mac OS X fat binaries.

- Issue #5741: don't disallow "%%" (which is an escape for "%") when setting
  a value in SafeConfigParser.

- Issue #5732: added a new command in Distutils: check.

- Issue #5731: Distutils bdist_wininst no longer worked on non-Windows
  platforms. Initial patch by Paul Moore.

- Issue #2254: Fix CGIHTTPServer information disclosure.  Relative paths are
  now collapsed within the url properly before looking in cgi_directories.

- Issue #5095: Added bdist_msi to the list of bdist supported formats.
  Initial fix by Steven Bethard.

- Issue #1491431: Fixed distutils.filelist.glob_to_re for edge cases.
  Initial fix by Wayne Davison.

- Issue #5693: TestSuite.__iter__ can now be consistently overridden in subclasses.

- Issue #5694: removed spurious test output in Distutils (test_clean).

- Issue #5471: Fix os.path.expanduser() for $HOME set to '/'.

- Issue #1326077: fix the formatting of SyntaxErrors by the traceback module.

- Issue #1726172: fix IndexError in the case of and empty response in ftplib.

- Issue #2625: added missing iteritems() call to the for loop in
  mailbox.MH.get_message().

- Issue #5585: Add the ability to call an initializer to mulitiprocessing.manager
  so that users can install custom handlers/etc.

- Issue #3551: Patch multiprocessing to raise a proper exception if the size of the
  object when writefile is called causes a ERROR_NO_SYSTEM_RESOURCES. Added docs
  to note the limitation

- unittest.assertNotEqual() now uses the inequality operator (!=) instead
  of the equality operator.

- Issue #6001: Test discovery for unittest. Implemented in
  unittest.TestLoader.discover and from the command line.

- Issue #5679: The methods unittest.TestCase.addCleanup and doCleanups were added.
  addCleanup allows you to add cleanup functions that will be called
  unconditionally (after setUp if setUp fails, otherwise after tearDown). This
  allows for much simpler resource allocation and deallocation during tests.

- Issue #3379: unittest.main now takes an optional exit argument. If False main
  doesn't call sys.exit allowing it to be used from the interactive interpreter.

- Issue #5995: unittest.main now takes an optional verbosity argument allowing
  test modules to be run with a higher than default verbosity.

- Issue #5995: A fix to allow you to run "python -m unittest test_module" or
  "python -m unittest test_module.TestClass" from the command line.

- Issue #5728: unittest.TestResult has new startTestRun and stopTestRun methods;
  called immediately before and after a test run.

- Issue #5663: better failure messages for unittest asserts. Default assertTrue
  and assertFalse messages are now useful. TestCase has a longMessage attribute.
  This defaults to False, but if set to True useful error messages are shown in
  addition to explicit messages passed to assert methods.

- Issue #3110: Add additional protect around SEM_VALUE_MAX for multiprocessing

- In Pdb, prevent the reassignment of __builtin__._ by sys.displayhook on
  printing out values.

- Issue #4572: added SEEK_* symbolic constants to io module.

- Issue #1665206 (partially): Move imports in cgitb to the top of the module
  instead of performing them in functions. Helps prevent import deadlocking in
  threads.

- Issue #5647: MutableSet.__iand__() no longer mutates self during iteration.

- Actually make the SimpleXMLRPCServer CGI handler work.

- Issue #2522: locale.format now checks its first argument to ensure it has
  been passed only one pattern, avoiding mysterious errors where it appeared
  that it was failing to do localization.

- Issue #5583: Added optional Extensions in Distutils. Initial patch by Georg
  Brandl.

- Issue #5619: Multiprocessing children disobey the debug flag and causes
  popups on windows buildbots. Patch applied to work around this issue.

- Issue #5632: Thread.ident was None for the main thread and threads not created
  with the threading module.

- Issue #5400: Added patch for multiprocessing on netbsd compilation/support

- Issue #5387: Fixed mmap.move crash by integer overflow.

- Issue #5261: Patch multiprocessing's semaphore.c to support context
  manager use: "with multiprocessing.Lock()" works now.

- Issue #5177: Multiprocessing's SocketListener class now uses
  socket.SO_REUSEADDR on all connections so that the user no longer needs
  to wait 120 seconds for the socket to expire.

- Adjusted _tkinter to compile without warnings when WITH_THREAD is not
  defined (part of issue #5035).

- Issue #5561: Removed the sys.version_info shortcuts from platform's
  python_version() and python_version_tuple() since they produced different
  output compared to previous Python versions.

- Issue #1034053: unittest now supports skipping tests and expected failures.

- The unittest.TestCase.assertRaises() method now returns a context manager when
  not given a callable so that code to be tested can be written inline using
  a with statement.

- The unittest.TestCase.assertEqual() now displays the differences in lists,
  tuples, dicts and sets on failure.  Many new handy type and comparison
  specific assert* methods have been added that fail with error messages
  actually useful for debugging.  Contributed in part by Google.  [Issue #2578]

- Issue #5068: Fixed the tarfile._BZ2Proxy.read() method that would loop
  forever on incomplete input. That caused tarfile.open() to hang when used
  with mode 'r' or 'r:bz2' and a fileobj argument that contained no data or
  partial bzip2 compressed data.

- Issue #5536: urllib.urlretrieve makes sure to close the file it's writing to
  even if an exception occurs.

- Issue #5381: Added object_pairs_hook to the json module.  This allows
  OrderedDicts to be built by the decoder.

- Issue #2110: Add support for thousands separator and 'n' type
  specifier to Decimal.__format__

- Fix Decimal.__format__ bug that swapped the meanings of the '<' and
  '>' alignment characters.

- Issue #1222: locale.format() bug when the thousands separator is a space
  character.

- Issue #5472: Fixed distutils.test_util tear down. Original patch by
  Tim Golden.

- collections.deque() objects now have a read-only attribute called maxlen.

- Issue #2638: Show a window constructed with tkSimpleDialog.Dialog only after
  it is has been populated and properly configured in order to prevent
  window flashing.

- Issue #4792: Prevent a segfault in _tkinter by using the
  guaranteed to be safe interp argument given to the PythonCmd in place of
  the Tcl interpreter taken from a PythonCmd_ClientData.

- Issue #5193: Guarantee that Tkinter.Text.search returns a string.

- Issue #5394: removed > 2.3 syntax from distutils.msvc9compiler.
  Original patch by Akira Kitada.

- Issue #5385: Fixed mmap crash after resize failure on windows.

- Issue #5179: Fixed subprocess handle leak on failure on windows.

- PEP 372:  Added collections.OrderedDict().

- The _asdict() for method for namedtuples now returns an OrderedDict().

- The configparser module now defaults to using an ordered dictionary.

- Issue #4308: httplib.IncompleteRead's repr doesn't include all of the data all
  ready received.

- Issue #5401: Fixed a performance problem in mimetypes when ``from mimetypes
  import guess_extension`` was used.

- Issue #1733986: Fixed mmap crash in accessing elements of second map object
  with same tagname but larger size than first map. (Windows)

- Issue #5386: mmap.write_byte didn't check map size, so it could cause buffer
  overrun.

- Issue #1533164: Installed but not listed *.pyo was breaking Distutils
  bdist_rpm command.

- Issue #5378: added --quiet option to Distutils bdist_rpm command.

- Issue #5052: make Distutils compatible with 2.3 again.

- Deprecated methods of symtable.Symbol have been removed: is_keywordarg(),
  is_vararg(), and is_in_tuple().

- Issue #5316: Fixed buildbot failures introduced by multiple inheritance
  in Distutils tests.

- Issue #5287: Add exception handling around findCaller() call to help out
  IronPython.

- Issue #5282: Fixed mmap resize on 32bit windows and unix. When offset > 0,
  The file was resized to wrong size.

- Issue #5292: Fixed mmap crash on its boundary access m[len(m)].

- Issue #2279: distutils.sdist.add_defaults now add files
  from the package_data and the data_files metadata.

- Issue #5257: refactored all tests in distutils, so they use
  support.TempdirManager, to avoid writing in the tests directory.

- Issue #4524: distutils build_script command failed with --with-suffix=3.
  Initial patch by Amaury Forgeot d'Arc.

- Issue #2461: added tests for distutils.util

- Issue #1008086: Fixed socket.inet_aton() to always return 4 bytes even on
  LP64 platforms (most 64-bit Linux, bsd, unix systems).

- Issue #5203: Fixed ctypes segfaults when passing a unicode string to a
  function without argtypes (only occurs if HAVE_USABLE_WCHAR_T is false).

- Issue #3386: distutils.sysconfig.get_python_lib prefix argument was ignored
  under NT and OS2. Patch by Philip Jenvey.

- Issue #5128: Make compileall properly inspect bytecode to determine if needs
  to be recreated. This avoids a timing hole thanks to the old reliance on the
  ctime of the files involved.

- Issue #5122: Synchronize tk load failure check to prevent a potential
  deadlock.

- Issue #1818: collections.namedtuple() now supports a keyword argument
  'rename' which lets invalid fieldnames be automatically converted to
  positional names in the form, _1, _2, ...

- Issue #4890: Handle empty text search pattern in Tkinter.Text.search.

- Issue #5170: Fixed Unicode output bug in logging and added test case.
  This is a regression which did not occur in 2.5.

- Issue #4512 (part 2): Promote ``ZipImporter._get_filename()`` to be a
  public documented method ``ZipImporter.get_filename()``.

- Issue #4195: The ``runpy`` module (and the ``-m`` switch) now support
  the execution of packages by looking for and executing a ``__main__``
  submodule when a package name is supplied. Initial patch by Andi
  Vajda.

- Issue #1731706: Call Tcl_ConditionFinalize for Tcl_Conditions that will
  not be used again (this requires Tcl/Tk 8.3.1), also fix a memory leak in
  Tkapp_Call when calling from a thread different than the one that created
  the Tcl interpreter. Patch by Robert Hancock.

- Issue #1520877: Now distutils.sysconfig reads $AR from the
  environment/Makefile. Patch by Douglas Greiman.

- Issue #4285: Change sys.version_info to be a named tuple. Patch by
  Ross Light.

- Issue #1276768: The verbose option was not used in the code of
  distutils.file_util and distutils.dir_util.

- Issue #5132: Fixed trouble building extensions under Solaris with
  --enabled-shared activated. Initial patch by Dave Peterson.

- Issue #1581476: Always use the Tcl global namespace when calling into Tcl.

- Issue #2047: shutil.move() could believe that its destination path was
  inside its source path if it began with the same letters (e.g. "src" vs.
  "src.new").

- Issue #4920:  Fixed .next() vs .__next__() issues in the ABCs for
  Iterator and MutableSet.

- Added the ttk module. See issue #2983: Ttk support for Tkinter.

- Issue #5021:  doctest.testfile() did not create __name__ and
  collections.namedtuple() relied on __name__ being defined.

- Backport importlib from Python 3.1. Only the import_module() function has
  been backported to help facilitate transitions from 2.7 to 3.1.

- Issue #1885: distutils. When running sdist with --formats=tar,gztar
  the tar file was overriden by the gztar one.

- Issue #4863: distutils.mwerkscompiler has been removed.

- Added a new itertools functions:  combinations_with_replacement()
  and compress().

- Issue #5032:  added a step argument to itertools.count() and
  allowed non-integer arguments.

- Fix and properly document the multiprocessing module's logging
  support, expose the internal levels and provide proper usage
  examples.

- Issue #1672332: fix unpickling of subnormal floats, which was
  producing a ValueError on some platforms.

- Issue #3881: Help Tcl to load even when started through the
  unreadable local symlink to "Program Files" on Vista.

- Issue #4710: Extract directories properly in the zipfile module;
  allow adding directories to a zipfile.

- Issue #3807: _multiprocessing build fails when configure is passed
  --without-threads argument. When this occurs, _multiprocessing will
  be disabled, and not compiled.

- Issue #5008: When a file is opened in append mode with the new IO library,
  do an explicit seek to the end of file (so that e.g. tell() returns the
  file size rather than 0). This is consistent with the behaviour of the
  traditional 2.x file object.

- Issue #5013: Fixed a bug in FileHandler which occurred when the delay
  parameter was set.

- Issue #4998: The memory saving effect of __slots__ had been lost on Fractions
  which inherited from numbers.py which did not have __slots__ defined.  The
  numbers hierarchy now has its own __slots__ declarations.

- Issue #3321: _multiprocessing.Connection() doesn't check handle; added checks
  for *nix machines for negative handles and large int handles. Without this check
  it is possible to segfault the interpreter.

- Issue #4449: AssertionError in mp_benchmarks.py, caused by an underlying issue
  in sharedctypes.py.

- Issue #1225107: inspect.isclass() returned True for instances with a custom
  __getattr__.

- Issue #3997: zipfiles generated with more than 65536 files could not be
  opened with other applications.

- Issue #1162154: inspect.getmembers() now skips attributes that raise
  AttributeError, e.g. a __slots__ attribute which has not been set.

- Issue #1696199: Add collections.Counter() for rapid and convenient
  counting.

- Issue #3860: GzipFile and BZ2File now support the context manager protocol.

- Issue #4272: Add an optional argument to the GzipFile constructor to override
  the timestamp in the gzip stream. The default value remains the current time.
  The information can be used by e.g. gunzip when decompressing. Patch by
  Jacques Frechet.

- Restore Python 2.3 compatibility for decimal.py.

- Issue #1702551: distutils sdist was not excluding VCS directories under
  Windows. Inital solution by Guy Dalberto.

- The _tkinter module functions "createfilehandler", "deletefilehandler",
  "createtimerhandler", "mainloop", "dooneevent" and "quit" have been
  deprecated for removal in 3.x

- Issue #4796: Added Decimal.from_float() and Context.create_decimal_from_float()
  to the decimal module.

- Issue #4812: add missing underscore prefix to some internal-use-only
  constants in the decimal module.  (Dec_0 becomes _Dec_0, etc.)

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

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

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

- Fractions.from_float() no longer loses precision for integers too big to
  cast as floats.

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

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

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

- Issue #4444: Allow assertRaises() to be used as a context handler, so that
  the code under test can be written inline if more practical.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- Issue #4384: Added logging integration with warnings module using
  captureWarnings(). This change includes a NullHandler which does nothing;
  it will be of use to library developers who want to avoid the "No handlers
  could be found for logger XXX" message which can appear if the library user
  doesn't configure logging.

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

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

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

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

- httplib.HTTPConnection.putheader() now accepts an arbitrary number of values
  for any header, matching what the documentation has claimed for a while.

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

- Fixed a modulefinder crash on certain relative imports.

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

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

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

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

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

- Issue #1594: MacOS.GetCreatorAndType now always returns a big-endian result,
  to be consistent with Apple tools.

- Issue #900949: plat-mac/videoreader.py no longer relies on a non-existing
  module.

- Issue #16278952: plat-mac/videoreader.py now correctly imports MediaDescr

- Issue #1737832 : plat-mac/EasyDialog.py no longer uses the broken aepack
  module.

- Issue #1149804: macostools.mkdirs now even works when another process
  creates one of the needed subdirectories.

- Issue #900506: added --no-zipimport flag to the bundlebuilder script

- Issue #841800: bundlebuilder now works with 'python -O'

- Issue #4861: ctypes.util.find_library(): Robustify. Fix library detection on
  biarch systems. Try to rely on ldconfig only, without using objdump and gcc.

- Issue #5104: The socket module now raises OverflowError when 16-bit port and
  protocol numbers are supplied outside the allowed 0-65536 range on bind()
  and getservbyport().

- Issue #999042: The Python compiler now handles explict global statements
  correctly (should be assigned using STORE_GLOBAL opcode).

- Issue #2703: SimpleXMLRPCDispatcher.__init__: Provide default values for
  new arguments introduced in 2.5.

- Issue #5828 (Invalid behavior of unicode.lower): Fixed bogus logic in
  makeunicodedata.py and regenerated the Unicode database (This fixes
  u'\u1d79'.lower() == '\x00').

- Windows locale mapping updated to Vista.

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

- Ttk demos added in Demo/tkinter/ttk/

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

Build
-----

- Add 2 new options to ``--with-universal-archs`` on MacOSX: 
  ``intel`` builds a distribution with ``i386`` and ``x86_64`` architectures,
  while ``3-way`` builds a distribution with the ``ppc``, ``i386`` 
  and ``x86_64`` architectures. 
  
- Issue #6802: Fix build issues on MacOSX 10.6

- Issue #6244: Allow detect_tkinter to look for Tcl/Tk 8.6.

- Issue 5390: Add uninstall icon independent of whether file
  extensions are installed.

- Issue 5809: Specifying both --enable-framework and --enable-shared is
  an error. Configure now explicity tells you about this.

- Issue #3585: Add pkg-config support. It creates a python-2.7.pc file
  and a python.pc symlink in the $(LIBDIR)/pkgconfig directory. Patch by
  Clinton Roy.

- Issue #6094: Build correctly with Subversion 1.7.

- Issue #5847: Remove -n switch on "Edit with IDLE" menu item.

- Issue #5726: Make Modules/ld_so_aix return the actual exit code of the
  linker, rather than always exit successfully. Patch by Floris Bruynooghe.

- Issue #4587: Add configure option --with-dbmliborder=db1:db2:... to specify
  the order that backends for the dbm extension are checked.

- Link the shared python library with $(MODLIBS).

- Issue #5134: Silence compiler warnings when compiling sqlite with VC++.

- Issue #4494: Fix build with Py_NO_ENABLE_SHARED on Windows.

- Issue #4895: Use _strdup on Windows CE.

- Issue #4472: "configure --enable-shared" now works on OSX

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

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

- Issue #4289: Remove Cancel button from AdvancedDlg.

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

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

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

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

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

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

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

- Issue #6556: Fixed the Distutils configuration files location explanation
  for Windows.

- Issue #6801 : symmetric_difference_update also accepts |.
  Thanks to Carl Chenet. 

C-API
-----

- Issue #6624: PyArg_ParseTuple with "s" format when parsing argument with 
  NULL: Bogus TypeError detail string.

- Issue #5954: Add a PyFrame_GetLineNumber() function to replace most uses of
  PyCode_Addr2Line().

- Issue #5959: Add a PyCode_NewEmpty() function to create a new empty code
  object at a specified file, function, and line number.

- Issue #1419652: Change the first argument to PyImport_AppendInittab() to
  ``const char *`` as the string is stored beyond the call.

- Some PyBytes_* aliases have been removed because they don't exist in 3.x.

- Issue #5175: PyLong_AsUnsignedLongLong now raises OverflowError
  for negative arguments.  Previously, it raised TypeError.

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

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

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

- Issue #4293: Py_AddPendingCall is now thread safe and can be used for
  asynchronous notifications to python from any thread.  Documentation added.

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

- Issue #3366: Add gamma function to math module.

- Issue #6823: Allow time.strftime() to accept a tuple with a isdst field
  outside of the range of [-1, 1] by normalizing the value to within that
  range.

- Issue #6877: Make it possible to link the readline extension to libedit
  on OSX.

- Issue #6944: Fix a SystemError when socket.getnameinfo() was called
  with something other than a tuple as first argument.

- Issue #6865: Fix reference counting issue in the initialization of the pwd
  module.

- Issue #6848: Fix curses module build failure on OS X 10.6.

- Fix a segfault in expat when given a specially crafted input lead to the
  tokenizer not stopping.

- Issue #6561: '\d' in a regex now matches only characters with
  Unicode category 'Nd' (Number, Decimal Digit).  Previously it also
  matched characters with category 'No'.

- Issue #1523: Remove deprecated overflow wrapping for struct.pack
  with an integer format code ('bBhHiIlLqQ').  Packing an out-of-range
  integer now consistently raises struct.error.

- Issues #1530559, #1741130: Fix various struct.pack inconsistencies
  for the integer formats ('bBhHiIlLqQ').  In the following, '*'
  represents any of '=', '<', '>'.

    - Packing a float now always gives a Deprecation Warning.
      Previously it only warned for 'I', 'L', '*B', '*H', '*I', '*L'.

    - If x is not an int, long or float, then packing x will always
      result in struct.error.  Previously an x with an __int__ method
      could be packed by 'b', 'B', 'h', 'H', 'i', 'l', '*b', '*h'
      ,'*i', '*l', and an x with a __long__ method could be packed by
      'q', 'Q', '*q', '*Q'; for x with neither __int__ nor __long__,
      TypeError used to be raised (with a confusing error message) for
      'I', 'L', '*B', '*H', '*I', '*L', and struct.error in other cases.

- Issue #4873: Fix resource leaks in error cases of pwd and grp.

- Issue #4751: For hashlib algorithms provided by OpenSSL, the Python
  GIL is now released during computation on data lengths >= 2048 bytes.

- Issue #3745: Fix hashlib to always reject unicode and non buffer-api
  supporting objects as input no matter how it was compiled (built in
  implementations or external openssl library).

- Issue #4397: Fix occasional test_socket failure on OS X.

- Issue #4279: Fix build of parsermodule under Cygwin.

- Issue #4051: Prevent conflict of UNICODE macros in cPickle.

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

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

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

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

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

- Issue #5228: Make functools.partial objects can now be pickled.

Tests
-----

- Issue #6806: test_platform failed under OS X 10.6.0 because ``sw_ver`` leaves
  off the trailing 0 in the version number.

- Issue #5450: Moved tests involving loading tk from Lib/test/test_tcl to
  Lib/lib-tk/test/test_tkinter/test_loadtk. With this, these tests demonstrate
  the same behaviour as test_ttkguionly (and now also test_tk) which is to
  skip the tests if DISPLAY is defined but can't be used.

- Issue #6152: New option '-j'/'--multiprocess' for regrtest allows running
  regression tests in parallel, shortening the total runtime.

- Issue #5354: New test support function import_fresh_module() makes
  it easy to import both normal and optimised versions of modules.
  test_heapq and test_warnings have been adjusted to use it, tests for
  other modules with both C and Python implementations in the stdlib
  can be adjusted to use it over time.

- Fix test_warnings to no longer reset the warnings filter.

- Fix test_logging to no longer reset the warnings filter.

- Issue #5635: Fix running test_sys with tracing enabled.

- regrtest no longer treats ImportError as equivalent to SkipTest.  Imports
  that should cause a test to be skipped are now done using import_module
  from test support, which does the conversion.

- Issue #5083: New 'gui' resource for regrtest.

- Issue #5837: Certain sequences of calls to set() and unset() for
  support.EnvironmentVarGuard objects restored the environment variables
  incorrectly on __exit__.

- Issue #2389: Array objects are now pickled in a portable manner.


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

*Release date: 01-Oct-2008*

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

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

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

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

Library
-------

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

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

- Issue #3950: Made turtle respect scale factors.

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

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

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

Build
-----

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

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


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

*Release date: 17-Sep-2008*

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

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

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

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

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

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

Build
-----

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


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

*Release date: 12-Sep-2008*

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

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

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

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

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

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

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

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

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

- Fix crashes on memory allocation failure found with failmalloc.

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

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

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

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

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

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

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

C-API
-----

- Aliased PyObject_Bytes to PyObject_Str.

Library
-------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- Silenced a trivial compiler warning in the sqlite module.

- Fixed two format strings in the _collections module.

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

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

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

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

- Issue #4301: Patch the logging module to add processName support, remove
  _check_logger_class from multiprocessing.

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

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

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

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

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

Tests
-----

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

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

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

Build
-----

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

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

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

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


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

*Release date: 20-Aug-2008*

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

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

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

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

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

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

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

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

- Apply security patches from Apple.

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

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

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

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

Library
-------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- Issue #3134: shutil referenced undefined WindowsError symbol.

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

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

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

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

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

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

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

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

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

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

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

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

- Deprecate the "ast" parser function aliases.

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

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

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

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

- Deprecate the sunaudio module for removal in Python 3.0.

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

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

Build
-----

- Generate the PatternGrammar pickle during "make install".

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

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

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


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

*Release date: 17-Jul-2008*

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

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

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

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

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

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

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

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

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

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

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

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

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

Library
-------

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

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

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

- Issue #3312: Fix two crashes in sqlite3.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tests
-----

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

Build
-----

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


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

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

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

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

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


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

*Release date: 18-June-2008*

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

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

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

- Add future_builtins.ascii().

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

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

- New environment variable PYTHONIOENCODING.

- Patch #2488: Add sys.maxsize.

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

- Issue #2870: cmathmodule.c compile error.

- Added a threading.Thread.ident property.

Library
-------

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

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

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

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

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

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

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

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

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

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

- Added the ast module.

- Added the multiprocessing module, PEP 371.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- pdb gained the "until" command.

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

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

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

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

Build
-----

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

- Patch #1722225: Support QNX 6.

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

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

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

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

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

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

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

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


C API
-----

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

- The PyBytes functions have been renamed to PyByteArray.

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


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

*Release date: 08-May-2008*

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

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

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

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

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

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

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

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

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

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

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

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

Library
-------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tests
-----

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

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

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

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

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

Build
-----

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

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

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

C API
-----

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

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


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

*Release date: 02-Apr-2008*

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

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

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

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

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

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

- Patch #2477: Added from __future__ import unicode_literals.

- Added backport of bytearray type.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Library
-------

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

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

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

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

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

- Backport of Python 3.0's io module.

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

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

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

- Issue #2460: Make Ellipsis object copyable.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tests
-----

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

- Output comparison tests are no longer supported.

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

- GHOP 234: Convert test_extcall to doctest.

- GHOP 290: Convert test_dbm and test_dummy_threading to unittest.

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

- Issue #2055: Convert test_fcntl to unittest.

- Issue 1960: Convert test_gdbm to unittest.

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

- GHOP 238: Convert test_tokenize to use doctest.

- GHOP 237: Rewrite test_thread using unittest.

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

Build
-----

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

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

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

C API
-----

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


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

*Release date: 29-Feb-2008*

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- Patch #1668: renamed THREADDEBUG envvar to PYTHONTHREADDEBUG.

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

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

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

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

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

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

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

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

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

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

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

- Issue #1402: Fix a crash on exit, when another thread is still
  running, and if the deallocation of its frames somehow calls the
  PyGILState_Ensure() / PyGILState_Release() functions.

- Expose the Py_Py3kWarningFlag as sys.py3kwarning.

- Issue #1445: Fix a SystemError when accessing the ``cell_contents``
  attribute of an empty cell object.

- Issue #1460: The utf-7 incremental decoder did not accept truncated
  input.  It now correctly saves its state between chunks of data.

- Patch #1739468: Directories and zipfiles containing a __main__.py
  file can now be directly executed by passing their name to the
  interpreter. The directory/zipfile is automatically inserted as the
  first entry in sys.path.

- Issue #1265: Fix a problem with sys.settrace, if the tracing
  function uses a generator expression when at the same time the
  executed code is closing a paused generator.

- sets and frozensets now have an isdisjoint() method.

- optimize the performance of builtin.sum().

- Fix warnings found by the new version of the Coverity checker.

- The enumerate() builtin function is no longer bounded to sequences
  smaller than LONG_MAX.  Formerly, it raised an OverflowError.  Now,
  automatically shifts from ints to longs.

- Issue #1686386: Tuple's tp_repr did not take into account the
  possibility of having a self-referential tuple, which is possible
  from C code.  Nor did object's tp_str consider that a type's tp_str
  could do something that could lead to an inifinite recursion.
  Py_ReprEnter() and Py_EnterRecursiveCall(), respectively, fixed the
  issues.

- Issue #1164: It was possible to trigger deadlock when using the
  'print' statement to write to a file since the GIL was not released
  as needed.  Now PyObject_Print() does the right thing along with
  various tp_print implementations of the built-in types and those in
  the collections module.

- Issue #1147: Exceptions were directly allowing string exceptions in
  their throw() method even though string exceptions no longer
  allowed.

- Issue #1096: Prevent a segfault from getting the repr of a very
  deeply nested list by using the recursion counter.

- Issue #1202533: Fix infinite recursion calls triggered by calls to
  PyObject_Call() never calling back out to Python code to trigger
  recursion depth updates/checks.  Required the creation of a static
  RuntimeError instance in case normalizing an exception put the
  recursion check value past its limit.  Fixes crashers
  infinite_rec_(1|2|4|5).py.

- Patch #1031213: Decode source line in SyntaxErrors back to its
  original source encoding.

- Patch #1673759: add a missing overflow check when formatting floats
  with %G.

- Prevent expandtabs() on string and unicode objects from causing a
  segfault when a large width is passed on 32-bit platforms.

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

- Issue #1722485: remove docstrings again when running with -OO.

- Add new attribute names for function objects.  All the func_* become
  __*__ attributes.  (Some already existed, e.g., __doc__ and
  __name__.)

- Add -3 option to the interpreter to warn about features that are
  deprecated and will be changed/removed in Python 3.0.

- Patch #1686487: you can now pass any mapping after '**' in function
  calls.

- except clauses may now be spelled either "except E, target:" or
  "except E as target:". This is to provide forwards compatibility
  with Python 3.0.

- Deprecate BaseException.message as per PEP 352.

- Issue #1303614: don't expose object's __dict__ when the dict is
  inherited from a builtin base.

- When __slots__ are set to a unicode string, make it work the same as
  setting a plain string, ie don't expand to single letter identifiers.

- Request #1191699:  Slices can now be pickled.

- Request #1193128:  str.translate() now allows a None argument for
  translations that only remove characters without re-mapping the
  remaining characters.

- Patch #1682205: a TypeError while unpacking an iterable is no longer
  masked by a generic one with the message "unpack non-sequence".

- Remove unused file Python/fmod.c.

- Bug #1683368: The object.__init__() and object.__new__() methods are
  now stricter in rejecting excess arguments.  The only time when
  either allows excess arguments is when it is not overridden and the
  other one is.  For backwards compatibility, when both are
  overridden, it is a deprecation warning (for now; maybe a Py3k
  warning later).  Also, type.__init__() insists on the same signature
  as supported by type.__new__().

- Patch #1675423: PyComplex_AsCComplex() now tries to convert an
  object to complex using its __complex__() method before falling back
  to the __float__() method. Therefore, the functions in the cmath
  module now can operate on objects that define a __complex__()
  method.

- Patch #1623563: allow __class__ assignment for classes with
  __slots__.  The old and the new class are still required to have the
  same slot names.

- Patch #1642547: Fix an error/crash when encountering syntax errors
  in complex if statements.

- Patch #1462488: Python no longer segfaults when
  ``object.__reduce_ex__()`` is called with an object that is faking
  its type.

- Patch #1680015: Don't modify __slots__ tuple if it contains an
  unicode name.

- Patch #1444529: the builtin compile() now accepts keyword arguments.

- Bug #1678647: write a newline after printing an exception in any
  case, even when converting the value to a string failed.

- The dir() function has been extended to call the __dir__() method on
  its argument, if it exists. If not, it will work like before. This
  allows customizing the output of dir() in the presence of a
  __getattr__().

- Patch #922167: Python no longer segfaults when faced with infinitely
  self-recursive reload() calls (as reported by bug #742342).

- Patch #1675981: remove unreachable code from ``type.__new__()``
  method.

- Patch #1491866: change the complex() constructor to allow
  parthensized forms. This means complex(repr(x)) now works instead of
  raising a ValueError.

- Patch #703779: unset __file__ in __main__ after running a file. This
  makes the filenames the warning module prints much more sensible
  when a PYTHONSTARTUP file is used.

- Variant of patch #697613: don't exit the interpreter on a SystemExit
  exception if the -i command line option or PYTHONINSPECT environment
  variable is given, but break into the interactive interpreter just
  like on other exceptions or normal program exit.

- Patch #1638879: don't accept strings with embedded NUL bytes in
  long().

- Bug #1674503: close the file opened by execfile() in an error
  condition.

- Patch #1674228: when assigning a slice (old-style), check for the
  sq_ass_slice instead of the sq_slice slot.

- When printing an unraisable error, don't print exceptions. before
  the name.  This duplicates the behavior whening normally printing
  exceptions.

- Bug #1653736: Properly discard third argument to
  slot_nb_inplace_power.

- PEP 352: Raising a string exception now triggers a TypeError.
  Attempting to catch a string exception raises DeprecationWarning.

- Bug #1377858: Fix the segfaulting of the interpreter when an object
  created a weakref on itself during a __del__ call for new-style
  classes (classic classes still have the bug).

- Bug #1579370: Make PyTraceBack_Here use the current thread, not the
  frame's thread state.

- patch #1630975: Fix crash when replacing sys.stdout in
  sitecustomize.py.

- Prevent seg fault on shutdown which could occur if an object raised
  a warning.

- Bug #1566280: Explicitly invoke threading._shutdown from Py_Main, to
  avoid relying on atexit.

- Bug #1590891: random.randrange don't return correct value for big
  number.

- Patch #1586791: Better exception messages for some operations on
  strings, tuples and lists.

- Bug #1067760: Deprecate passing floats to file.seek.

- Bug #1591996: Correctly forward exception in instance_contains().

- Bug #1588287: fix invalid assertion for `1,2` in debug builds.

- Bug #1576657: when setting a KeyError for a tuple key, make sure
  that the tuple isn't used as the "exception arguments tuple".

- Bug #1565514: SystemError not raised on too many nested blocks.

- Bug #1576174: WindowsError now displays the windows error code
  again, no longer the posix error code.

- Patch #1549049: Support long values in structmember, issue warnings
  if the assigned value for structmember fields gets truncated.

- Update the peephole optimizer to remove more dead code (jumps after
  returns) and inline unconditional jumps to returns.

- Bug #1545497: when given an explicit base, int() did ignore NULs
  embedded in the string to convert.

- Bug #1569998: break inside a try statement (outside a loop) is now
  recognized and rejected.

- list.pop(x) accepts any object x following the __index__ protocol.

- A number of places, including integer negation and absolute value,
  were fixed to not rely on undefined behaviour of the C compiler
  anymore.

- Bug #1566800: make sure that EnvironmentError can be called with any
  number of arguments, as was the case in Python 2.4.

- Patch #1567691: super() and new.instancemethod() now don't accept
  keyword arguments any more (previously they accepted them, but
  didn't use them).

- Fix a bug in the parser's future statement handling that led to
  "with" not being recognized as a keyword after, e.g., this
  statement: from __future__ import division, with_statement

- Bug #1557232: fix seg fault with def f((((x)))) and def f(((x),)).

- Fix %zd string formatting on Mac OS X so it prints negative numbers.

- Allow exception instances to be directly sliced again.

- Bug #1551432: Exceptions do not define an explicit __unicode__
  method.  This allows calling unicode() on exceptions classes
  directly to succeed.

- Bug #1542051: Exceptions now correctly call PyObject_GC_UnTrack.
  Also make sure that every exception class has __module__ set to
  'exceptions'.

- Bug #1550983: emit better error messages for erroneous relative
  imports (if not in package and if beyond toplevel package).

- Overflow checking code in integer division ran afoul of new gcc
  optimizations.  Changed to be more standard-conforming.

- Patch #1542451: disallow continue anywhere under a finally.

- Patch #1546288: fix seg fault in dict_equal due to ref counting bug.

- The return tuple from str.rpartition(sep) is (tail, sep, head) where
  head is the original string if sep was not found.

- Bug #1520864: unpacking singleton tuples in list comprehensions and
  generator expressions (x for x, in ... ) works again.  Fixing this
  problem required changing the .pyc magic number.  This means that
  .pyc files generated before 2.5c2 will be regenerated.

- ``with`` and ``as`` are now keywords.

- Bug #1664966: Fix crash in exec if Unicode filename can't be
  decoded.

- Issue #1537: Changed GeneratorExit's base class from Exception to
  BaseException.

- Issue #1703448: A joined thread could show up in the
  threading.enumerate() list after the join() for a brief period until
  it actually exited.


Library
-------

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

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

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

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

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

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

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

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

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

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

- Issue #1224: Fixed bad url parsing when path begins with double
  slash.

- ctypes instances that are not or do not contain pointers can now be
  pickled.

- Patch #1966: Break infinite loop in httplib when the servers
  implements the chunked encoding incorrectly.

- Rename rational.py to fractions.py and the rational.Rational class
  to fractions.Fraction, to avoid the name clash with the abstract
  base class numbers.Rational.  See discussion in issue #1682.

- The pickletools module now provides an optimize() function that
  eliminates unused PUT opcodes from a pickle string.

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

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

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

- Issue #175006: The debugger used to skip the condition of a "while"
  statement after the first iteration. Now it correctly steps on the
  expression, and breakpoints on the "while" statement are honored on
  each loop.

- Issue #1765140: add an optional delay argument to FileHandler and
  its subclasses. Defaults to false (existing behaviour), but if true,
  defers opening the file until the first call to emit().

- The pprint module now supports sets and frozensets.

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

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

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

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

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

- Issue #1760556: fix a bug to avoid FileHandler throwing an exception
  in flush().

- Bug #1530959: distutils' build command now uses different build
  directory when building extension modules against versions of Python
  compiled with ``--with-pydebug``.

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

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

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

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

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

- Issue #1178141: add a getcode() method to the addinfourls that
  urllib.open() returns so that you can retrieve the HTTP status code.

- Issue #1003: Fix zipfile decryption check, it would fail zip files
  with extended local headers.

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

- Issue #1336: fix a race condition in subprocess.Popen if the garbage
  collector kicked in at the wrong time that would cause the process
  to hang when the child wrote to stderr.

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

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

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

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

- Issue #1837: The queue module now also supports a LIFO queue and a
  priority queue.

- Patch #1048820: Add insert-mode editing to curses.textpad.Textbox
  (patch by Stefan Wehr).  Also, fix an off-by-one bug in
  Textbox.gather().

- Issue #1831: ctypes now raises a TypeError if conflicting positional
  and named arguments are passed to a Structure or Union initializer.
  When too many positional arguments are passed, also a TypeError is
  raised instead of a ValueError.

- Convert the internal ctypes array type cache to a WeakValueDict so
  that array types do not live longer than needed.

- Issue #1786: pdb should use its own stdin/stdout around an exec call
  and when creating a recursive instance.

- Issue #1698398: ZipFile.printdir() crashed because the format string
  expected a tuple type of length six instead of time.struct_time
  object.

- Issue #1780: The Decimal constructor now accepts arbitrary leading
  and trailing whitespace when constructing from a string.
  Context.create_decimal no longer accepts trailing newlines.

- Decimal.as_tuple(), difflib.find_longest_match() and inspect
  functions that returned a tuple now return a named tuple.

- Doctest now returns results as a named tuple for readability:
      (0, 7) --> TestResults(failed=0, attempted=7)

- Issue #846388:q re.match is interruptible now, which is particularly
  good for long regular expression matches.

- Patch #1137: allow setting buffer_size attribute on pyexpat Parser
  objects to set the character data buffer size.

- Issue #1757: The hash of a Decimal instance is no longer affected by
  the current context.

- Patch #467924: add ZipFile.extract() and ZipFile.extractall() in the
  zipfile module.

- Issue #1646: Make socket support the TIPC protocol.

- Bug #1742: return os.curdir from os.path.relpath() if both arguments
  are equal instead of raising an exception.

- Patch #1637: fix urlparse for URLs like 'http://x.com?arg=/foo'.

- Patch #1698: allow '@' in username parsed by urlparse.py.

- Issue #1735: TarFile.extractall() now correctly sets directory
  permissions and times.

- Bug #1713: posixpath.ismount() claims symlink to a mountpoint is a mountpoint.

- Bug #1687: Fxed plistlib.py restricts <integer> to Python int when
  writing

- Issue #1700: Regular expression inline flags incorrectly handle
  certain unicode characters.

- Issue #1689: PEP 3141, numeric abstract base classes.

- Tk issue #1851526: Return results from Python callbacks to Tcl as
  Tcl objects.

- Issue #1642: Fix segfault in ctypes when trying to delete attributes.

- Issue #1727780: Support loading pickles of random.Random objects
  created on 32-bit systems on 64-bit systems, and vice versa. As a
  consequence of the change, Random pickles created by Python 2.6
  cannot be loaded in Python 2.5.

- Issue #1455: The distutils package now supports VS 2005 and VS 2008
  for both the msvccompiler and cygwincompiler.

- Issue #1531: tarfile.py: Read fileobj from the current offset, do
  not seek to the start.

- Issue #1534: Added a dictionary sys.float_info with information
  about the internal floating point type to the sys module.

- Issue #1429818: patch for trace and doctest modules so they play
  nicely together.

- doctest made a bad assumption that a package's __loader__.get_data()
  method used universal newlines.

- Issue #1705170: contextlib.contextmanager was still swallowing
  StopIteration in some cases. This should no longer happen.

- Issue #1292: On alpha, arm, ppc, and s390 linux systems the
  --with-system-ffi configure option defaults to "yes".

- IN module for FreeBSD 8 is added and preexisting FreeBSD 6 and 7
  files are updated.

- Issues #1181, #1287: unsetenv() is now called when the
  os.environ.pop() and os.environ.clear() methods are used.

- ctypes will now work correctly on 32-bit systems when Python is
  configured with --with-system-ffi.

- Patch #1203: ctypes now does work on OS X when Python is built with
  --disable-toolbox-glue.

- collections.deque() now supports a "maxlen" argument.

- itertools.count() is no longer bounded to LONG_MAX.  Formerly, it
  raised an OverflowError.  Now, automatically shifts from ints to
  longs.

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

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

- Patch #1541463: optimize performance of cgi.FieldStorage operations.

- Decimal is fully updated to the latest Decimal Specification
  (v1.66).

- Bug #1153: repr.repr() now doesn't require set and dictionary items
  to be orderable to properly represent them.

- A 'c_longdouble' type was added to the ctypes module.

- Bug #1709599: Run test_1565150 only if the file system is NTFS.

- When encountering a password-protected robots.txt file the
  RobotFileParser no longer prompts interactively for a username and
  password (bug 813986).

- TarFile.__init__() no longer fails if no name argument is passed and
  the fileobj argument has no usable name attribute (e.g. StringIO).

- The functools module now provides 'reduce', for forward
  compatibility with Python 3000.

- Server-side SSL support and cert verification added, by Bill
  Janssen.

- socket.ssl deprecated; use new ssl module instead.

- uuid creation is now threadsafe.

- EUC-KR codec now handles the cheot-ga-keut composed make-up hangul
  syllables.

- GB18030 codec now can encode additional two-byte characters that are
  missing in GBK.

- Add new codecs for UTF-32, UTF-32-LE and UTF-32-BE.

- Bug #1704793: Return UTF-16 pair if unicodedata.lookup cannot
  represent the result in a single character.

- Bug #978833: Close https sockets by releasing the _ssl object.

- Change location of the package index to pypi.python.org/pypi

- Bug #1701409: Fix a segfault in printing ctypes.c_char_p and
  ctypes.c_wchar_p when they point to an invalid location.  As a
  sideeffect the representation of these instances has changed.

- tarfile.py: Added "exclude" keyword argument to TarFile.add().

- Bug #1734723: Fix repr.Repr() so it doesn't ignore the maxtuple
  attribute.

- The urlopen function of urllib2 now has an optional timeout
  parameter (note that it actually works with HTTP, HTTPS, FTP and
  FTPS connections).

- In ftplib, the FTP.ntransfercmd method, when in passive mode, now
  uses the socket.create_connection function, using the timeout
  specified at connection time.

- Bug #1728403: Fix a bug that CJKCodecs StreamReader hangs when it
  reads a file that ends with incomplete sequence and sizehint
  argument for .read() is specified.

- Bug #1730389: Change time.strptime() to use ``\s+`` instead of
  ``\s*`` when matching spaces in the specified format argument.

- Bugs #1668596/#1720897: distutils now copies data files even if
  package_dir is empty.

- sha now raises a DeprecationWarning upon import.

- md5 now raises a DeprecationWarning upon import.

- Issue #1385: The hmac module now computes the correct hmac when
  using hashes with a block size other than 64 bytes (such as sha384
  and sha512).

- mimify now raises a DeprecationWarning upon import.

- MimeWriter now raises a DeprecationWarning upon import.

- tarfile.py: Improved unicode support. Unicode input names are now
  officially supported. Added "errors" argument to the TarFile class.

- urllib.ftpwrapper class now accepts an optional timeout.

- shlex.split() now has an optional "posix" parameter.

- The posixfile module now raises a DeprecationWarning.

- Remove the gopherlib module.  This also leads to the removal of
  gopher support in urllib/urllib2.

- Fix bug in marshal where bad data would cause a segfault due to lack
  of an infinite recursion check.

- Removed plat-freebsd2 and plat-freebsd3 directories (and IN.py in
  the directories).

- HTML-escape the plain traceback in cgitb's HTML output, to prevent
  the traceback inadvertently or maliciously closing the comment and
  injecting HTML into the error page.

- The popen2 module and os.popen* are deprecated.  Use the subprocess
  module.

- Added an optional credentials argument to SMTPHandler, for use with
  SMTP servers which require authentication.

- Patch #1695948: Added optional timeout parameter to SocketHandler.

- Bug #1652788: Minor fix for currentframe.

- Patch #1598415: Added WatchedFileHandler to better support external
  log file rotation using e.g. newsyslog or logrotate. This handler is
  only useful in Unix/Linux environments.

- Bug #1706381: Specifying the SWIG option "-c++" in the setup.py file
  (as opposed to the command line) will now write file names ending in
  ".cpp" too.

- As specified in RFC 2616, an HTTP response like 2xx indicates that
  the client's request was successfully received, understood, and
  accepted.  Now in these cases no error is raised in urllib (issue
  #1177) and urllib2.

- Bug #1290505: time.strptime's internal cache of locale information
  is now properly recreated when the locale is changed.

- Patch #1685563: remove (don't add) duplicate paths in
  distutils.MSVCCompiler.

- Added a timeout parameter to the constructor of other protocols
  (telnetlib, ftplib, smtplib and poplib). This is second part of the
  work started with create_connection() and timeout in httplib, and
  closes patch #723312.

- Patch #1676823: Added create_connection() to socket.py, which may be
  called with a timeout, and use it from httplib (whose HTTPConnection
  and HTTPSConnection now accept an optional timeout).

- Bug #978833: Revert r50844, as it broke _socketobject.dup.

- Bug #1675967: re patterns pickled with Python 2.4 and earlier can
  now be unpickled with Python 2.5 and newer.

- Patch #1630118: add a SpooledTemporaryFile class to tempfile.py.

- Patch #1273829: os.walk() now has a "followlinks" parameter. If set
  to True (which is not the default), it visits symlinks pointing to
  directories.

- Bug #1681228: the webbrowser module now correctly uses the default
  GNOME or KDE browser, depending on whether there is a session of one
  of those present. Also, it tries the Windows default browser before
  trying Mozilla variants.

- Patch #1339796: add a relpath() function to os.path.

- Patch #1681153: the wave module now closes a file object it opened if
  initialization failed.

- Bug #767111: fix long-standing bug in urllib which caused an
  AttributeError instead of an IOError when the server's response
  didn't contain a valid HTTP status line.

- Patch #957650: "%var%" environment variable references are now
  properly expanded in ntpath.expandvars(), also "~user" home
  directory references are recognized and handled on Windows.

- Patch #1429539: pdb now correctly initializes the __main__ module
  for the debugged script, which means that imports from __main__ work
  correctly now.

- The nonobvious commands.getstatus() function is now deprecated.

- Patch #1393667: pdb now has a "run" command which restarts the
  debugged Python program, optionally with different arguments.

- Patch #1649190: Adding support for _Bool to ctypes as c_bool.

- Patch #1530482: add pydoc.render_doc() which returns the
  documentation for a thing instead of paging it to stdout, which
  pydoc.doc() does.

- Patch #1533909: the timeit module now accepts callables in addition
  to strings for the code to time and the setup code. Also added two
  convenience functions for instantiating a Timer and calling its
  methods.

- Patch #1537850: tempfile.NamedTemporaryFile now has a "delete"
  parameter which can be set to False to prevent the default
  delete-on-close behavior.

- Patch #1581073: add a flag to textwrap that prevents the dropping of
  whitespace while wrapping.

- Patch #1603688: ConfigParser.SafeConfigParser now checks values that
  are set for invalid interpolation sequences that would lead to
  errors on reading back those values.

- Added support for the POSIX.1-2001 (pax) format to
  tarfile.py. Extended and cleaned up the test suite. Added a new
  testtar.tar.

- Patch #1449244: Support Unicode strings in
  email.message.Message.{set_charset,get_content_charset}.

- Patch #1542681: add entries for "with", "as" and "CONTEXTMANAGERS"
  to pydoc's help keywords.

- Patch #1555098: use str.join() instead of repeated string
  concatenation in robotparser.

- Patch #1635454: the csv.DictWriter class now includes the offending
  field names in its exception message if you try to write a record
  with a dictionary containing fields not in the CSV field names list.

- Patch #1668100: urllib2 now correctly raises URLError instead of
  OSError if accessing a local file via the file:// protocol fails.

- Patch #1677862: Require a space or tab after import in .pth files.

- Patch #1192590: Fix pdb's "ignore" and "condition" commands so they
  trap the IndexError caused by passing in an invalid breakpoint
  number.

- Patch #1599845: Add an option to disable the implicit calls to
  server_bind() and server_activate() in the constructors for
  TCPServer, SimpleXMLRPCServer and DocXMLRPCServer.

- Bug #1531963: Make SocketServer.TCPServer's server_address always be
  equal to calling getsockname() on the server's socket. Fixed by
  patch #1545011.

- Patch #742598: Add .timeout attribute to SocketServer that calls
  .handle_timeout() when no requests are received.

- Bug #1651235: When a tuple was passed to a ctypes function call,
  Python would crash instead of raising an error.

- Bug #1646630: ctypes.string_at(buf, 0) and ctypes.wstring_at(buf, 0)
  returned string up to the first NUL character.

- Patch #957003: Implement smtplib.LMTP.

- Patch #1481079: add support for HTTP_REFERER to CGIHTTPServer.

- Patch #1675424: Added tests for uncovered code in the zipfile
  module.  The KeyError raised by Zipfile.getinfo for nonexistent
  names now has a descriptive message.

- Bug #1115886: os.path.splitext('.cshrc') gives now ('.cshrc', '').

- unittest now verifies more of its assumptions. In particular,
  TestCase and TestSuite subclasses (not instances) are no longer
  accepted in TestSuite.addTest(). This should cause no
  incompatibility since it never made sense with ordinary subclasses
  -- the failure just occurred later, with a more cumbersome
  exception.

- Patch #787789: allow to pass custom TestRunner instances to
  unittest's main() function.

- Patches #1550273, #1550272: fix a few bugs in unittest and add a
  comprehensive test suite for the module.

- Patch #1001604: glob.glob() now returns unicode filenames if it was
  given a unicode argument and os.listdir() returns unicode filenames.

- Patch #1673619: setup.py identifies extension modules it doesn't
  know how to build and those it knows how to build but that fail to
  build.

- Patch #912410: Replace HTML entity references for attribute values
  in HTMLParser.

- Patch #1663234: you can now run doctest on test files and modules
  using "python -m doctest [-v] filename ...".

- Patch #1121142: Implement ZipFile.open.

- Taught setup.py how to locate Berkeley DB on Macs using MacPorts.

- Added heapq.merge() for merging sorted input streams.

- Added collections.namedtuple() for assigning field names to tuples.

- Added itertools.izip_longest().

- Have the encoding package's search function dynamically import using
  absolute import semantics.

- Patch #1647484: Renamed GzipFile's filename attribute to name.

- Patch #1517891: Mode 'a' for ZipFile now creates the file if it
  doesn't exist.

- Patch #698833: Support file decryption in zipfile.

- Patch #685268: Consider a package's __path__ in imputil.

- Patch #1463026: Support default namespace in XMLGenerator.

- Patch #1571379: Make trace's --ignore-dir facility work in the face
  of relative directory names.

- Bug #1600860: Search for shared python library in LIBDIR, not
  lib/python/config, on "linux" and "gnu" systems.

- Patch #1652681: tarfile.py: create nonexistent files in append mode
  and allow appending to empty files.

- Bug #1124861: Automatically create pipes if GetStdHandle fails in
  subprocess.

- Patch #1634778: add missing encoding aliases for iso8859_15 and
  iso8859_16.

- Patch #1638243: the compiler package is now able to correctly
  compile a with statement; previously, executing code containing a
  with statement compiled by the compiler package crashed the
  interpreter.

- Bug #1643943: Fix time.strptime's support for the %U directive.

- Patch #1507247: tarfile.py: use current umask for intermediate
  directories.

- Patch #1627441: close sockets properly in urllib2.

- Bug #494589: make ntpath.expandvars behave according to its
  docstring.

- Changed platform module API python_version_tuple() to actually
  return a tuple (it used to return a list).

- Added new platform module APIs python_branch(), python_revision(),
  python_implementation() and linux_distribution().

- Added support for IronPython and Jython to the platform module.

- The sets module has been deprecated.  Use the built-in set/frozenset
  types instead.

- Bug #1610795: make ctypes.util.find_library work on BSD systems.

- Fixes for 64-bit Windows: In ctypes.wintypes, correct the
  definitions of HANDLE, WPARAM, LPARAM data types.  Make
  parameterless foreign function calls work.

- The version number of the ctypes package changed to "1.1.0".

- Bug #1627575: logging: Added _open() method to FileHandler which can
  be used to reopen files. The FileHandler instance now saves the
  encoding (which can be None) in an attribute called "encoding".

- Bug #411881: logging.handlers: bare except clause removed from
  SMTPHandler.emit. Now, only ImportError is trapped.

- Bug #411881: logging.handlers: bare except clause removed from
  SocketHandler.createSocket. Now, only socket.error is trapped.

- Bug #411881: logging: bare except clause removed from
  LogRecord.__init__.  Now, only ValueError, TypeError and
  AttributeError are trapped.

- Patch #1504073: Fix tarfile.open() for mode "r" with a fileobj
  argument.

- Patch #1182394 from Shane Holloway: speed up HMAC.hexdigest.

- Patch #1262036: Prevent TarFiles from being added to themselves
  under certain conditions.

- Patch #1230446: tarfile.py: fix ExFileObject so that read() and
  tell() work correctly together with readline().

- Patch #1484695: The tarfile module now raises a HeaderError
  exception if a buffer given to frombuf() is invalid.

- Bug #1503765: Fix a problem in logging.config with spaces in comma-
  separated lists read from logging config files.

- Patch #1604907: Fix problems in logging.handlers caused at logging
  shutdown when syslog handlers fail to initialize because of syslogd
  problems.

- Patch #1608267: fix a race condition in os.makedirs() if the
  directory to be created is already there.

- Patch #1610437: fix a tarfile bug with long filename headers.

- Patch #1371075: Make ConfigParser accept optional dict type for
  ordering, sorting, etc.

- Bug #1563807: _ctypes built on AIX fails with ld ffi error.

- Bug #1598620: A ctypes Structure cannot contain itself.

- Patch #1070046: Marshal new-style objects like InstanceType in
  xmlrpclib.

- cStringIO.truncate(-1) now raises an IOError, like StringIO and
  regular files.

- Patch #1472877: Fix Tix subwidget name resolution.

- Patch #1594554: Always close a tkSimpleDialog on ok(), even if an
  exception occurs.

- Patch #1538878: Don't make tkSimpleDialog dialogs transient if the
  parent window is withdrawn.

- Bug #1597824: return the registered function from atexit.register()
  to facilitate usage as a decorator.

- Patch #1360200: Use unmangled_version RPM spec field to deal with
  file name mangling.

- Patch #1359217: Process 2xx response in an ftplib transfer that
  precedes an 1xx response.

- Patch #1355023: support whence argument for GzipFile.seek.

- Patch #1065257: Support passing open files as body in
  HTTPConnection.request().

- Bug #1569790: mailbox.py: Maildir.get_folder() and MH.get_folder()
  weren't passing the message factory on to newly created Maildir/MH
  objects.

- Patch #1514543: mailbox.py: In the Maildir class, report errors if
  there's a filename clash instead of possibly losing a message.
  (Patch by David Watson.)

- Patch #1514544: Try to ensure that messages/indexes have been
  physically written to disk after calling .flush() or
  .close(). (Patch by David Watson.)

- Patch #1592250: Add elide argument to Tkinter.Text.search.

- Patch #838546: Make terminal become controlling in pty.fork().

- Patch #1351744: Add askyesnocancel helper for tkMessageBox.

- Patch #1060577: Extract list of RPM files from spec file in
  bdist_rpm.

- Bug #1586613: fix zlib and bz2 codecs' incremental en/decoders.

- Patch #1583880: fix tarfile's problems with long names and posix/
  GNU modes.

- Bug #1586448: the compiler module now emits the same bytecode for
  list comprehensions as the builtin compiler, using the LIST_APPEND
  opcode.

- Fix codecs.EncodedFile which did not use file_encoding in 2.5.0, and
  fix all codecs file wrappers to work correctly with the "with"
  statement (bug #1586513).

- Lib/modulefinder.py now handles absolute and relative imports
  correctly.

- Patch #1567274: Support SMTP over TLS.

- Patch #1560695: Add .note.GNU-stack to ctypes' sysv.S so that ctypes
  isn't considered as requiring executable stacks.

- ctypes callback functions only support 'fundamental' data types as
  result type.  Raise an error when something else is used.  This is a
  partial fix for Bug #1574584.

- Fix turtle so that time.sleep is imported for the entire library.
  Allows the demo2 function to be executed on its own instead of only
  when the module is run as a script.

- Bug #813342: Start the IDLE subprocess with -Qnew if the parent is
  started with that option.

- Bug #1565150: Fix subsecond processing for os.utime on Windows.

- Support for MSVC 8 was added to bdist_wininst.

- Bug #1446043: correctly raise a LookupError if an encoding name
  given to encodings.search_function() contains a dot.

- Bug #1560617: in pyclbr, return full module name not only for
  classes, but also for functions.

- Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes
  keep_blank_values and strict_parsing keyword arguments.

- Bug #1566602: correct failure of posixpath unittest when $HOME ends
  with a slash.

- Bug #1565661: in webbrowser, split() the command for the default
  GNOME browser in case it is a command with args.

- Made the error message for time.strptime when the data and
  format do match be more clear.

- Fix a bug in traceback.format_exception_only() that led to an error
  being raised when print_exc() was called without an exception set.
  In version 2.4, this printed "None", restored that behavior.

- Make webbrowser.BackgroundBrowser usable in Windows (it wasn't
  because the close_fds arg to subprocess.Popen is not supported).

- Reverted patch #1504333 to sgmllib because it introduced an infinite
  loop.

- Patch #1553314: Fix the inspect.py slowdown that was hurting IPython
  & SAGE by adding smarter caching in inspect.getmodule()

- Fix missing import of the types module in logging.config.

- Patch #1550886: Fix decimal module context management implementation
  to match the localcontext() example from PEP 343.

- Bug #1545341: The 'classifier' keyword argument to the Distutils
  setup() function now accepts tuples as well as lists.

- Bug #1541863: uuid.uuid1 failed to generate unique identifiers on
  systems with low clock resolution.

- Bug #1531862: Do not close standard file descriptors in subprocess.

- idle: Honor the "Cancel" action in the save dialog (Debian bug
  #299092).

- Fix utf-8-sig incremental decoder, which didn't recognise a BOM when
  the first chunk fed to the decoder started with a BOM, but was
  longer than 3 bytes.

- The implementation of UnicodeError objects has been simplified
  (start and end attributes are now stored directly as Py_ssize_t
  members).

- Issue #829951: In the smtplib module, SMTP.starttls() now complies
  with RFC 3207 and forgets any knowledge obtained from the server not
  obtained from the TLS negotiation itself.  Patch contributed by Bill
  Fenner.

- Issue #1339: The smtplib.SMTP class has been refactored a bit such
  that the SMTP.starttls() caller no longer needs to call ehlo()
  beforehand.  SMTP.starttls() now raises an exception of the server
  does not claim to support starttls.  Adds the
  SMTP.ehlo_or_helo_if_needed() method.  Patch contributed by Bill
  Fenner.

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

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

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

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

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

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

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

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

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

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

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

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

- Backport of _fileio module from Python 3.0.

- Patch #1087741: mmap.mmap is now a class, not a factory function. It
  is also subclassable now.

- Patch #1648: added ``sys.getprofile()`` and ``sys.gettrace()``.

- Patch #1663329: added ``os.closerange()`` function to quickly close
  a range of file descriptors without considering errors.

- Patch #976880: ``mmap`` objects now have an ``rfind`` method that
  works as expected.  ``mmap.find`` also takes an optional ``end``
  parameter.

- _winreg's HKEY object has gained __enter__ and __exit__ methods to
  support the context manager protocol.  The _winreg module also
  gained a new function ``ExpandEnvironmentStrings`` to expand
  REG_EXPAND_SZ keys.

- itertools.starmap() now accepts any iterable input. Previously, it
  required the function inputs to be tuples.

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

- Issue #1646: Make socket support TIPC. The socket module now has
  support for TIPC under Linux, see http://tipc.sf.net/ for more
  information.

- Added interface for Windows' WSAIoctl to socket object and added an
  example for a simple network sniffer.

- Bug #1301: Bad assert in _tkinter fixed.

- Added bdist_wininst executable for VS 2008.

- Bug #1604: collections.deque.__init__(iterable) now clears any prior
  contents before adding elements from the iterable.  This fix brings
  the behavior into line with that for list.__init__().

- Added wide char functions to msvcrt module: getwch, getwche, putwch
  and ungetwch. The functions accept or return unicode.

- os.access now returns True on Windows for any existing directory.

- Added warnpy3k function to the warnings module.

- Marshal.dumps() now expects exact type matches for int, long, float,
  complex, tuple, list, dict, set, and frozenset.  Formerly, it would
  silently miscode subclasses of those types.  Now, it raises a
  ValueError instead.

- Patch #1388440: Add set_completion_display_matches_hook and
  get_completion_type to readline.

- Bug #1649098: Avoid declaration of zero-sized array declaration in
  structure.

- Removed the rgbimg module; been deprecated since Python 2.5.

- Bug #1721309: prevent bsddb module from freeing random memory.

- Bug #1233: fix bsddb.dbshelve.DBShelf append method to work as
  intended for RECNO databases.

- pybsddb.sf.net Bug #477182: Load the database flags at database open
  time so that opening a database previously created with the DB_DUP
  or DB_DUPSORT flag set will keep the proper behavior on subsequent
  opens.  Specifically: dictionary assignment to a DB object will
  replace all values for a given key when the database allows
  duplicate values.  DB users should use DB.put(k, v) when they want
  to store duplicates; not DB[k] = v.

- Add the bsddb.db.DBEnv.lock_id_free method.

- Bug #1686475: Support stat'ing open files on Windows again.

- Patch #1185447: binascii.b2a_qp() now correctly quotes binary
  characters with ASCII value less than 32. Also, it correctly quotes
  dots only if they occur on a single line, as opposed to the previous
  behavior of quoting dots if they are the second character of any
  line.

- Bug #1622896: fix a rare corner case where the bz2 module raised an
  error in spite of a succesful compression.

- Patch #1654417: make operator.{get,set,del}slice use the full range
  of Py_ssize_t.

- Patch #1646728: datetime.fromtimestamp fails with negative
  fractional times.  With unittest.

- Patch #1490190: posixmodule now includes os.chflags() and
  os.lchflags() functions on platforms where the underlying system
  calls are available.

- Patch #1494140: Add documentation for the new struct.Struct object.

- Patch #1432399: Support the HCI protocol for bluetooth sockets

- Patch #1657276: Make NETLINK_DNRTMSG conditional.

- Bug #1653736: Complain about keyword arguments to time.isoformat.

- Bug #1486663: don't reject keyword arguments for subclasses of
  builtin types.

- Patch #1610575: The struct module now supports the 't' code, for C99
  _Bool.

- Patch #1635058: ensure that htonl and friends never accept or return
  negative numbers, per the underlying C implementation.

- Patch #1544279: Improve thread-safety of the socket module by moving
  the sock_addr_t storage out of the socket object.

- Patch #1019808: fix bug that causes an incorrect error to be
  returned when a socket timeout is set and a connection attempt
  fails.

- Speed up function calls into the math module.

- Bug #1588217: don't parse "= " as a soft line break in binascii's
  a2b_qp() function, instead leave it in the string as quopri.decode()
  does.

- Bug #1599782: Fix segfault on bsddb.db.DB().type().

- Bug #1567666: Emulate GetFileAttributesExA for Win95.

- Patch #1576166: Support os.utime for directories on Windows NT+.

- Patch #1572724: fix typo ('=' instead of '==') in _msi.c.

- Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
  when encoding non-BMP unicode characters.

- Bug #1556784: allow format strings longer than 127 characters in
  datetime's strftime function.

- Fix itertools.count(n) to work with negative numbers again.

- RLIMIT_SBSIZE was added to the resource module where available.

- Bug #1551427: fix a wrong NULL pointer check in the win32 version of
  os.urandom().

- Bug #1548092: fix curses.tparm seg fault on invalid input.

- Patch #1114: fix curses module compilation on 64-bit AIX, & possibly
  other 64-bit LP64 platforms where attr_t is not the same size as a
  long.  (Contributed by Luke Mewburn.)

- Bug #1550714: fix SystemError from itertools.tee on negative value
  for n.

- Fixed a few bugs on cjkcodecs:
  - gbk and gb18030 codec now handle U+30FB KATAKANA MIDDLE DOT
    correctly.
  - iso2022_jp_2 codec now encodes into G0 for KS X 1001, GB2312
    codepoints to conform the standard.
  - iso2022_jp_3 and iso2022_jp_2004 codec can encode JIS X 0213:2
    codepoints now.

- Bug #1552726: in readline.c, avoid repeatedly polling in interactive
  mode by only placing a timeout on the select() if an input hook has
  been defined.  This prevents an interactive Python from waking up 10
  times per second.  Patch by Richard Boulton.

- fixed a bug with bsddb.DB.stat: the flags and txn keyword arguments
  were transposed.

- Added support for linking the bsddb module against BerkeleyDB 4.5.x,
  4.6.x and 4.7.x.

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

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

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

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

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

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

- The sqlite3 module was updated to pysqlite 2.4.1.

Tests
-----

- Refactor test_logging to use unittest.

- Refactor test_profile and test_cprofile to use the same code to
  profile.

- Make test_runpy reentrant by fixing _check_module to clear out any
  module being tested.  Was causing an error by __import__ doing a
  reload on the second run and thus suppressing bytecode recreation.

- Capture socket connection resets and timeouts in test_socket_ssl and
  test_urllib2net and raise test.test_support.ResourceDenied.

- Patch #1559413: Fix test_cmd_line if sys.executable contains a
  space.

- Added test.test_support.TransientResource which is a context manager
  to surround calls to resources that are not guaranteed to work even
  if test.test_support.requires says that the resource should exist.

- Added a test for slicing of an exception.

- Added test.test_support.EnvironmentVarGuard.  It's a class that
  provides a context manager so that one can temporarily set or unset
  environment variables.

- Added some tests for modulefinder.

- Converted test_imp to use unittest.

- Fix bsddb test_basics.test06_Transactions to check the version
  number properly.

- test.test_support.catch_warning is a new context manager that can be
  used to catch the warnings issued by the warning framework.

Tools
-----

- Tools/scripts/reindent.py now creates the backup file using
  shutil.copy to preserve user/group and permissions. Added also a
  --nobackup option to not create the backup if the user is concerned
  regarding this.  Check issue 1050828 for more details.

- Tools/scripts/win_add2path.py was added. The simple script modifes
  the PATH environment var of the HKCU tree and adds the python bin
  and script directory.

- Tools/18n/pygettext.py was added to the list of scripts installed by
  Tools/scripts/setup.py (tracker item 642309).

- Added IronPython and Jython support to pybench (part of which was
  patch #1563844).

- Made some minor changes to pybench output to allow the user to see
  which Python version is running pybench.

- Added support for the new platform module feature
  platform.python_implementation(); this will now be saved in the
  benchmark pickle.


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

- RFE #1765140: Updated documentation on FileHandler and subclasses to
  include new optional delay argument.

- Bug #932563: Added section on getting contextual information into
  logging output, and added documentation for the new LoggerAdapter
  class.

- Bug #1295: Added information about caching of formatted exception
  information in the LogRecord by Formatter.format().

- Bug #1637365: add subsection about "__name__ == __main__" to the
  Python tutorial.

- Patch #1698768: updated the "using Python on the Mac" intro.

- Bug #1569057: Document that calling file.next() when the file is
  open for writing is undefined.

- Patch #1489771: the syntax rules in Python Reference Manual were
  updated to reflect the current Python syntax.

- Patch #1686451: Fix return type for
  PySequence_{Count,Index,Fast_GET_SIZE}.

- Patch #1679379: add documentation for fnmatch.translate().

- Bug #1629566: clarify the docs on the return values of parsedate()
  and parsedate_tz() in email.utils and rfc822.

- Patch #1671450: add a section about subclassing builtin types to the
  "extending and embedding" tutorial.

- Bug #1629125: fix wrong data type (int -> Py_ssize_t) in PyDict_Next
  docs.

- Bug #1565919: document set types in the Language Reference.

- Bug #1546052: clarify that PyString_FromString(AndSize) copies the
  string pointed to by its parameter.

- Bug #1566663: remove obsolete example from datetime docs.

- Bug #1541682: Fix example in the "Refcount details" API docs.
  Additionally, remove a faulty example showing PySequence_SetItem
  applied to a newly created list object and add notes that this isn't
  a good idea.


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

- Patch #1552024: add decorator support to unparse.py demo script.

- Make auto-generated python.vim file list built-ins and exceptions in
  alphatbetical order.  Makes output more deterministic and easier to
  tell if the file is stale or not.

- Bug #1546372: Fixed small bugglet in pybench that caused a missing
  file not to get reported properly.


Build
-----

- Have the search path for building extensions follow the declared
  order in $CPPFLAGS and $LDFLAGS when adding directories from those
  environment variables.

- Bug #1983: Added a check to pyport to verify that sizeof(pid_t) is
  smaller or equal sizeof(long).

- Bug #1234: Fixed semaphore errors on AIX 5.2

- Issue #1726: Remove Python/atof.c from PCBuild/pythoncore.vcproj.

- Removed PCbuild8/ directory and added a new build directory for VS
  2005 based on the VS 2008 build directory to PC/VS8.0. The script
  PCbuild/vs8to9.py was added to sync changes from PCbuild to
  PC/VS8.0.

- Moved PCbuild/ directory for VS 2003 to PC/VS7.1 and renamed
  PCBuild9/ directory to PCBuild/.

- Bug #1699: Define _BSD_SOURCE only on OpenBSD.

- Bug #1608: use -fwrapv when GCC supports it.  This is important,
  newer GCC versions may optimize away overflow buffer overflow checks
  without this option!

- Patch #1418: Make the AC_REPLACE_FUNCS object files actually work.

- Add a FAST_LOOPS build option that speeds-up looping by trading away
  periodic threadstate and signal checking in tight loops.  By
  default, this option is turned-off.  It should only be enabled in
  debugged, performance critical applications.

- Patch #786737: Allow building in a tree of symlinks pointing to a
  readonly source.

- Bug #1737210: Change Manufacturer of Windows installer to PSF.

- Bug #1746880: Correctly install DLLs into system32 folder on Win64.

- Define _BSD_SOURCE, to get access to POSIX extensions on OpenBSD
  4.1+.

- Stop supporting AtheOS and cause a build error in configure for the
  platform.

- Bug #1655392: don't add -L/usr/lib/pythonX.Y/config to the LDFLAGS
  returned by python-config if Python was built with --enable-shared
  because that prevented the shared library from being used.

- Patch #1569798: fix a bug in distutils when building Python from a
  directory within sys.exec_prefix.

- Bug #1675511: Use -Kpic instead of -xcode=pic32 on Solaris/x86.

- Disable _XOPEN_SOURCE on NetBSD 1.x.

- configure now checks whether gcc supports the PyArg_ParseTuple
  format attribute.

- Bug #1578513: Cross compilation was broken by a change to configure.
  Repair so that it's back to how it was in 2.4.3.

- Patch #1576954: Update VC6 build directory; remove redundant files
  in VC7.

- Bug #1568842: Fix test for uintptr_t.

- Patch #1540470: for OpenBSD 4.0.

- Fix build failure on kfreebsd and on the hurd.

- Fix the build of the library reference in info format.

- Allow Emacs 22 for building the documentation in info format.

- Makefile.pre.in(buildbottest): Run an optional script
  pybuildbot.identify to include some information about the build
  environment.


C API
-----

- Unified naming convention for free lists and their limits. All free
  lists in Object/ are named ``free_list``, the counter ``numfree``
  and the upper limit is a macro ``PyName_MAXFREELIST`` inside an
  #ifndef block.

- ``PySet_Add()`` can now modify a newly created frozenset.  Similarly
  to ``PyTuple_SetItem``, it can be used to populate a brand new
  frozenset; but it does not steal a reference to the added item.

- Added ``PySet_Check()`` and ``PyFrozenSet_Check()`` to the set API.

- Backport of PyUnicode_FromString(), _FromStringAndSize(), _Format
  and _FormatV from Python 3.0. Made PyLong_AsSsize_t and
  PyLong_FromSsize_t public functions.

- Patch #1720595: add T_BOOL to the range of structmember types.

- Issue #1534: Added ``PyFloat_GetMax()``, ``PyFloat_GetMin()`` and
  ``PyFloat_GetInfo()`` to the float API.

- Issue #1521: On 64bit platforms, using PyArgs_ParseTuple with the t#
  of w# format code incorrectly truncated the length to an int, even
  when PY_SSIZE_T_CLEAN is set.  The str.decode method used to return
  incorrect results with huge strings.

- Issue #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE,
  Py_TYPE and Py_REFCNT.

- PEP 3123: Provide forward compatibility with Python 3.0, while
  keeping backwards compatibility. Add Py_Refcnt, Py_Type, Py_Size,
  and PyVarObject_HEAD_INIT.

- Py_ssize_t fields work in structmember when HAVE_LONG_LONG is not
  defined.

- Patch #1733960: Allow T_LONGLONG to accept ints.

- T_PYSSIZET can now be used in PyMemberDef lists for Py_ssize_t members.

- Added a new API function ``PyImport_ImportModuleNoBlock``.

- Bug #1637022: Prefix AST symbols with _Py_.

- Fix some leftovers from the conversion from int to Py_ssize_t
  (relevant to strings and sequences of more than 2**31 items).

- Make _PyGILState_NoteThreadState() static, it was not used anywhere
  outside of pystate.c and should not be necessary.

- ``PyImport_Import`` and ``PyImport_ImportModule`` now always do
  absolute imports. In earlier versions they might have used relative
  imports under some conditions.

- Added case insensitive comparison methods ``PyOS_stricmp(char*,
  char*)`` and ``PyOS_strnicmp(char*, char*, Py_ssize_t)``.

- Bug #1542693: remove semi-colon at end of PyImport_ImportModuleEx
  macro so it can be used as an expression.


Windows
-------

- Patch #1706: Drop support for Win9x, WinME and NT4. Python now
  requires Windows 2000 or greater. The _WINVER and NTDDI_VERSION
  macros are set to Win2k for x86/32bit builds and WinXP for AMD64
  builds.

- Conditionalize definition of _CRT_SECURE_NO_DEPRECATE and
  _CRT_NONSTDC_NO_DEPRECATE.

- Bug #1216: Restore support for Visual Studio 2002.


Mac
---

- cfmfile now raises a DeprecationWarning.

- buildtools now raises a DeprecationWarning.

- Removed the macfs module.  It had been deprecated since Python 2.5.
  This lead to the deprecation of macostools.touched() as it relied
  solely on macfs and was a no-op under OS X.

----

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