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

What's New in Python 2.7.7?
===========================

*Release date: XXXX-XX-XX*

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

- Issue #19638: Fix possible crash / undefined behaviour from huge (more than 2
  billion characters) input strings in _Py_dg_strtod.

Library
-------

- Issue #19878: Fix segfault in bz2 module after calling __init__ twice with
  non-existent filename. Initial patch by Vajrasky Kok.

- Issue #16373: Prevent infinite recursion for ABC Set class comparisons.

- Issue #19138: doctest's IGNORE_EXCEPTION_DETAIL now allows a match when
  no exception detail exists (no colon following the exception's name, or
  a colon does follow but no text follows the colon).

- Issue #16231: Fixed pickle.Pickler to only fallback to its default pickling
  behaviour when Pickler.persistent_id returns None, but not for any other
  false values.  This allows false values other than None to be used as
  persistent IDs.  This behaviour is consistent with cPickle.

- Issue #11508: Fixed uuid.getnode() and uuid.uuid1() on environment with
  virtual interface.  Original patch by Kent Frazier.

- Issue #11489: JSON decoder now accepts lone surrogates.

- Fix test.test_support.bind_port() to not cause an error when Python was
  compiled on a system with SO_REUSEPORT defined in the headers but run on
  a system with an OS kernel that does not support that new socket option.

- Issue #19633: Fixed writing not compressed 16- and 32-bit wave files on
  big-endian platforms.

- Issue #19449: in csv's writerow, handle non-string keys when generating the
  error message that certain keys are not in the 'fieldnames' list.

- Issue #12853: Fix NameError in distutils.command.upload.

- Issue #19523: Closed FileHandler leak which occurred when delay was set.

- Issue #1575020: Fixed support of 24-bit wave files on big-endian platforms.

- Issue #19480: HTMLParser now accepts all valid start-tag names as defined
  by the HTML5 standard.

- Issue #17827: Add the missing documentation for ``codecs.encode`` and
  ``codecs.decode``.

- Issue #6157: Fixed Tkinter.Text.debug().  Original patch by Guilherme Polo.

- Issue #6160: The bbox() method of tkinter.Spinbox now returns a tuple of
  integers instead of a string.  Based on patch by Guilherme Polo.

- Issue #19286: Directories in ``package_data`` are no longer added to
  the filelist, preventing failure outlined in the ticket.

Tests
-----

- Issue #19595: Re-enabled a long-disabled test in test_winsound.

- Issue #19588: Fixed tests in test_random that were silently skipped most
  of the time.  Patch by Julian Gindi.

- Issue #17883: Tweak test_tcl testLoadWithUNC to skip the test in the
  event of a permission error on Windows and to properly report other
  skip conditions.

- Issue #17883: Backported _is_gui_available() in test.test_support to
  avoid hanging Windows buildbots on test_ttk_guionly.

- Issue #18702: All skipped tests now reported as skipped.

- Issue #19085: Added basic tests for all tkinter widget options.

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

- Issue #18840: Introduce the json module in the tutorial, and deemphasize
  the pickle module.

- Issue #19795: Improved markup of True/False constants.


Whats' New in Python 2.7.6?
===========================

*Release date: 2013-11-10*

Library
-------

- Issue #19435: Fix directory traversal attack on CGIHttpRequestHandler.

IDLE
----

- Issue #19426: Fixed the opening of Python source file with specified encoding.

Tests
-----

- Issue #19457: Fixed xmlcharrefreplace tests on wide build when tests are
  loaded from .py[co] files.

Build
-----

- Issue #15663: Revert OS X installer built-in Tcl/Tk support for 2.7.6.
  Some third-party projects, such as Matplotlib and PIL/Pillow,
  depended on being able to build with Tcl and Tk frameworks in
  /Library/Frameworks.


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

*Release date: 2013-10-26*

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

- Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
  Python executable and not removed by the linker's optimizer.

- Issue #19279: UTF-7 decoder no more produces illegal unicode strings.

- Issue #18739: Fix an inconsistency between math.log(n) and math.log(long(n));
  the results could be off from one another by a ulp or two.

- Issue #13461: Fix a crash in the "replace" error handler on 64-bit platforms.
  Patch by Yogesh Chaudhari.

- Issue #15866: The xmlcharrefreplace error handler no more produces two XML
  entities for a non-BMP character on narrow build.

- Issue #18184: PyUnicode_FromFormat() and PyUnicode_FromFormatV() now raise
  OverflowError when an argument of %c format is out of range.

- Issue #18137: Detect integer overflow on precision in float.__format__()
  and complex.__format__().

- Issue #18038: SyntaxError raised during compilation sources with illegal
  encoding now always contains an encoding name.

- Issue #18019: Fix crash in the repr of dictionaries containing their own
  views.

- Issue #18427: str.replace could crash the interpreter with huge strings.

Library
-------

- Issue #19393: Fix symtable.symtable function to not be confused when there are
  functions or classes named "top".

- Issue #19327: Fixed the working of regular expressions with too big charset.

- Issue #19350: Increasing the test coverage of macurl2path. Patch by Colin
  Williams.

- Issue #19352: Fix unittest discovery when a module can be reached
  through several paths (e.g. under Debian/Ubuntu with virtualenv).

- Issue #15207: Fix mimetypes to read from correct part of Windows registry
  Original patch by Dave Chambers

- Issue #8964: fix platform._sys_version to handle IronPython 2.6+.
  Patch by Martin Matusiak.

- Issue #16038: CVE-2013-1752: ftplib: Limit amount of data read by
  limiting the call to readline().  Original patch by Michał
  Jastrzębski and Giampaolo Rodola.

- Issue #19276: Fixed the wave module on 64-bit big-endian platforms.

- Issue #18458: Prevent crashes with newer versions of libedit.  Its readline
  emulation has changed from 0-based indexing to 1-based like gnu readline.
  Original patch by Ronald Oussoren.

- Issue #18919: If the close() method of a writer in the sunau or wave module
  failed, second invocation of close() and destructor no more raise an
  exception.  Second invocation of close() on sunau writer now has no effects.
  The aifc module now accepts lower case of names of the 'ulaw' and 'alaw'
  codecs.

- Issue #19131: The aifc module now correctly reads and writes sampwidth of
  compressed streams.

- Issue #19158:  a rare race in BoundedSemaphore could allow .release() too
  often.

- Issue #18037: 2to3 now escapes '\u' and '\U' in native strings.

- Issue #19137: The pprint module now correctly formats empty set and frozenset
  and instances of set and frozenset subclasses.

- Issue #16040: CVE-2013-1752: nntplib: Limit maximum line lengths to 2048 to
  prevent readline() calls from consuming too much memory.  Patch by Jyrki
  Pulliainen.

- Issue #12641: Avoid passing "-mno-cygwin" to the mingw32 compiler, except
  when necessary.  Patch by Oscar Benjamin.

- Properly initialize all fields of a SSL object after allocation.

- Issue #4366: Fix building extensions on all platforms when --enable-shared
  is used.

- Issue #18950: Fix miscellaneous bugs in the sunau module.
  Au_read.readframes() now updates current file position and reads correct
  number of frames from multichannel stream.  Au_write.writeframesraw() now
  correctly updates current file position.  Au_read and Au_write now correctly
  work with file object if start file position is not a zero.

- Issue #18050: Fixed an incompatibility of the re module with Python 2.7.3
  and older binaries.

- Issue #19037: The mailbox module now makes all changes to maildir files
  before moving them into place, to avoid race conditions with other programs
  that may be accessing the maildir directory.

- Issue #14984: On POSIX systems, when netrc is called without a filename
  argument (and therefore is reading the user's $HOME/.netrc file), it now
  enforces the same security rules as typical ftp clients: the .netrc file must
  be owned by the user that owns the process and must not be readable by any
  other user.

- Issue #17324: Fix http.server's request handling case on trailing '/'. Patch
  contributed by Vajrasky Kok.

- Issue #19018: The heapq.merge() function no longer suppresses IndexError
  in the underlying iterables.

- Issue #18784: The uuid module no more attempts to load libc via ctypes.CDLL,
  if all necessary functions are already found in libuuid.
  Patch by Evgeny Sologubov.

- Issue #14971: unittest test discovery no longer gets confused when a function
  has a different __name__ than its name in the TestCase class dictionary.

- Issue #18672: Fixed format specifiers for Py_ssize_t in debugging output in
  the _sre module.

- Issue #18830: inspect.getclasstree() no more produces duplicated entries even
  when input list contains duplicates.

- Issue #18909: Fix _tkinter.tkapp.interpaddr() on Windows 64-bit, don't cast
  64-bit pointer to long (32 bits).

- Issue #18876: The FileIO.mode attribute now better reflects the actual mode
  under which the file was opened.  Patch by Erik Bray.

- Issue #18851: Avoid a double close of subprocess pipes when the child
  process fails starting.

- Issue #18418: After fork(), reinit all threads states, not only active ones.
  Patch by A. Jesse Jiryu Davis.

- Issue #11973: Fix a problem in kevent. The flags and fflags fields are now
  properly handled as unsigned.

- Issue #16809: Fixed some tkinter incompabilities with Tcl/Tk 8.6.

- Issue #16809: Tkinter's splitlist() and split() methods now accept Tcl_Obj
  argument.

- Issue #17119: Fixed integer overflows when processing large Unicode strings
  and tuples in the tkinter module.

- Issue #15233: Python now guarantees that callables registered with the atexit
  module will be called in a deterministic order.

- Issue #18747: Re-seed OpenSSL's pseudo-random number generator after fork.
  A pthread_atfork() parent handler is used to seed the PRNG with pid, time
  and some stack data.

- Issue #8865: Concurrent invocation of select.poll.poll() now raises a
  RuntimeError exception.  Patch by Christian Schubert.

- Issue #13461: Fix a crash in the TextIOWrapper.tell method on 64-bit
  platforms.  Patch by Yogesh Chaudhari.

- Issue #18777: The ssl module now uses the new CRYPTO_THREADID API of
  OpenSSL 1.0.0+ instead of the deprecated CRYPTO id callback function.

- Issue #18768: Correct doc string of RAND_edg(). Patch by Vajrasky Kok.

- Issue #18178: Fix ctypes on BSD. dlmalloc.c was compiled twice which broke
  malloc weak symbols.

- Issue #18709: Fix CVE-2013-4238. The SSL module now handles NULL bytes
  inside subjectAltName correctly. Formerly the module has used OpenSSL's
  GENERAL_NAME_print() function to get the string represention of ASN.1
  strings for ``rfc822Name`` (email), ``dNSName`` (DNS) and
  ``uniformResourceIdentifier`` (URI).

- Issue #18756: Improve error reporting in os.urandom() when the failure
  is due to something else than /dev/urandom not existing (for example,
  exhausting the file descriptor limit).

- Fix tkinter regression introduced by the security fix in issue #16248.

- Issue #18676: Change 'positive' to 'non-negative' in queue.py put and get
  docstrings and ValueError messages. Patch by Zhongyue Luo

- Issue #17998: Fix an internal error in regular expression engine.

- Issue #17557: Fix os.getgroups() to work with the modified behavior of
  getgroups(2) on OS X 10.8.  Original patch by Mateusz Lenik.

- Issue #18455: multiprocessing should not retry connect() with same socket.

- Issue #18513: Fix behaviour of cmath.rect w.r.t. signed zeros on OS X 10.8 +
  gcc.

- Issue #18101: Tcl.split() now process Unicode strings nested in a tuple as it
  do with byte strings.

- Issue #18347: ElementTree's html serializer now preserves the case of
  closing tags.

- Issue #17261: Ensure multiprocessing's proxies use proper address.

- Issue #17097: Make multiprocessing ignore EINTR.

- Issue #18155: The csv module now correctly handles csv files that use
  a delimiter character that has a special meaning in regexes, instead of
  throwing an exception.

- Issue #18135: ssl.SSLSocket.write() now raises an OverflowError if the input
  string in longer than 2 gigabytes. The ssl module does not support partial
  write.

- Issue #18167: cgi.FieldStorage no longer fails to handle multipart/form-data
  when \r\n appears at end of 65535 bytes without other newlines.

- Issue #17403: urllib.parse.robotparser normalizes the urls before adding to
  ruleline. This helps in handling certain types invalid urls in a conservative
  manner. Patch contributed by Mher Movsisyan.

- Implement inequality on weakref.WeakSet.

- Issue #17981: Closed socket on error in SysLogHandler.

- Issue #18015: Fix unpickling of 2.7.3 and 2.7.4 namedtuples.

- Issue #17754: Make ctypes.util.find_library() independent of the locale.

- Fix typos in the multiprocessing module.

- Issue #17269: Workaround for socket.getaddrinfo crash on MacOS X
  with port None or "0" and flags AI_NUMERICSERV.

- Issue #18080: When building a C extension module on OS X, if the compiler
  is overriden with the CC environment variable, use the new compiler as
  the default for linking if LDSHARED is not also overriden.  This restores
  Distutils behavior introduced in 2.7.3 and inadvertently dropped in 2.7.4.

- Issue #18071: C extension module builds on OS X could fail with TypeError
  if the Xcode command line tools were not installed.

- Issue #18113: Fixed a refcount leak in the curses.panel module's
  set_userptr() method.  Reported by Atsuo Ishimoto.

- Issue #18849: Fixed a Windows-specific tempfile bug where collision with an
  existing directory caused mkstemp and related APIs to fail instead of
  retrying. Report and fix by Vlad Shcherbina.

- Issue #19400: Prevent extension module build failures with Xcode 5 on OS X
  10.8+ when using a universal Python that included a PPC architecture,
  such as with a python.org 32-bit-only binary installer.

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

- Issue #18873: 2to3 and the findnocoding.py script now detect Python source
  code encoding only in comment lines.

- Issue #18817: Fix a resource warning in Lib/aifc.py demo.

- Issue #18439: Make patchcheck work on Windows for ACKS, NEWS.

- Issue #18448: Fix a typo in Demo/newmetaclasses/Eiffel.py.

- Issue #12990: The "Python Launcher" on OSX could not launch python scripts
  that have paths that include wide characters.

Build
-----

- Issue #16067: Add description into MSI file to replace installer's temporary name.

- Issue #18256: Compilation fix for recent AIX releases.  Patch by
  David Edelsohn.

- Issue #18098: The deprecated OS X Build Applet.app fails to build on
  OS X 10.8 systems because the Apple-deprecated QuickDraw headers have
  been removed from Xcode 4.  Skip building it in this case.

- Issue #1584: Provide options to override default search paths for
  Tcl and Tk when building _tkinter.

- Issue #15663: Tcl/Tk 8.5.15 is now included with the OS X 10.6+
  64-bit/32-bit installer for 10.6+.  It is no longer necessary
  to install a third-party version of Tcl/Tk 8.5 to work around the
  problems in the Apple-supplied Tcl/Tk 8.5 shipped in OS X 10.6
  and later releases.

- Issue #19019: Change the OS X installer build script to use CFLAGS instead
  of OPT for special build options.  By setting OPT, some compiler-specific
  options like -fwrapv were overridden and thus not used, which could result
  in broken interpreters when building with clang.

IDLE
----

- Issue #18873: IDLE now detects Python source code encoding only in comment
  lines.

- Issue #18988: The "Tab" key now works when a word is already autocompleted.

- Issue #18489: Add tests for SearchEngine. Original patch by Phil Webster.

- Issue #18429: Format / Format Paragraph, now works when comment blocks
  are selected. As with text blocks, this works best when the selection
  only includes complete lines.

- Issue #18226: Add docstrings and unittests for FormatParagraph.py.
  Original patches by Todd Rovito and Phil Webster.

- Issue #18279: Format - Strip trailing whitespace no longer marks a file as
  changed when it has not been changed. This fix followed the addition of a
  test file originally written by Phil Webster (the issue's main goal).

- Issue #18539: Calltips now work for float default arguments.

- Issue #7136: In the Idle File menu, "New Window" is renamed "New File".
  Patch by Tal Einat, Roget Serwy, and Todd Rovito.

- Issue #8515: Set __file__ when run file in IDLE.
  Initial patch by Bruce Frederiksen.

- Issue #5492: Avoid traceback when exiting IDLE caused by a race condition.

- Issue #17511: Keep IDLE find dialog open after clicking "Find Next".
  Original patch by Sarah K.

- Issue #15392: Create a unittest framework for IDLE.
  Preliminary patch by Rajagopalasarma Jayakrishnan
  See Lib/idlelib/idle_test/README.txt for how to run Idle tests.

- Issue #14146: Highlight source line while debugging on Windows.

- Issue #17532: Always include Options menu for IDLE on OS X.
  Patch by Guilherme Simões.

Tests
-----

- Issue #18919: Added tests for the sunau module.  Unified and extended tests
  for audio modules: aifc, sunau and wave.

- Issue #18792: Use "127.0.0.1" or "::1" instead of "localhost" as much as
  possible, since "localhost" goes through a DNS lookup under recent Windows
  versions.

- Issue #18357: add tests for dictview set difference.
  Patch by Fraser Tweedale.

- Issue #11185: Fix test_wait4 under AIX.  Patch by Sébastien Sablé.

- Issue #18094: test_uuid no more reports skipped tests as passed.

- Issue #11995: test_pydoc doesn't import all sys.path modules anymore.

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

- Issue #18758: Fixed and improved cross-references.

- Issue #18718: datetime documentation contradictory on leap second support.

- Issue #17701: Improving strftime documentation.

- Issue #17844: Refactor a documentation of Python specific encodings.
  Add links to encoders and decoders for binary-to-binary codecs.


What's New in Python 2.7.5?
===========================

*Release date: 2013-05-12*

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

- Issue #15535: Fixed regression in the pickling of named tuples by
  removing the __dict__ property introduced in 2.7.4.

- Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3,
  such as was shipped with Centos 5 and Mac OS X 10.4.

- Issue #17703: Fix a regression where an illegal use of Py_DECREF() after
  interpreter finalization can cause a crash.

- Issue #16447: Fixed potential segmentation fault when setting __name__ on a
  class.

- Issue #17610: Don't rely on non-standard behavior of the C qsort() function.

Library
-------

- Issue #17979: Fixed the re module in build with --disable-unicode.

- Issue #17606: Fixed support of encoded byte strings in the XMLGenerator
 .characters() and ignorableWhitespace() methods.  Original patch by Sebastian
  Ortiz Vasquez.

- Issue #16601: Restarting iteration over tarfile no more continues from where
  it left off.  Patch by Michael Birtwell.

- Issue 16584: in filecomp._cmp, catch IOError as well as os.error.
  Patch by Till Maas.

- Issue #17926: Fix dbm.__contains__ on 64-bit big-endian machines.

- Issue #19267: Fix support of multibyte encoding (ex: UTF-16) in the logging
  module.

- Issue #17918: When using SSLSocket.accept(), if the SSL handshake failed
  on the new socket, the socket would linger indefinitely.  Thanks to
  Peter Saveliev for reporting.

- Issue #17289: The readline module now plays nicer with external modules
  or applications changing the rl_completer_word_break_characters global
  variable.  Initial patch by Bradley Froehle.

- Issue #12181: select module: Fix struct kevent definition on OpenBSD 64-bit
  platforms. Patch by Federico Schwindt.

- Issue #14173: Avoid crashing when reading a signal handler during
  interpreter shutdown.

- Issue #16316: mimetypes now recognizes the .xz and .txz (.tar.xz) extensions.

- Issue #17192: Restore the patch for Issue #10309 which was ommitted
  in 2.7.4 when updating the bundled version of libffi used by ctypes.

- Issue #17843: Removed test data file that was triggering false-positive virus
  warnings with certain antivirus software.

- Issue #17353: Plistlib emitted empty data tags with deeply nested datastructures

- Issue #11714: Use 'with' statements to assure a Semaphore releases a
  condition variable.  Original patch by Thomas Rachel.

- Issue #17795: Reverted backwards-incompatible change in SysLogHandler with
  Unix domain sockets.

- Issue #17555: Fix ForkAwareThreadLock so that size of after fork
  registry does not grow exponentially with generation of process.

- Issue #17710: Fix cPickle raising a SystemError on bogus input.

- Issue #17341: Include the invalid name in the error messages from re about
  invalid group names.

- Issue #17016: Get rid of possible pointer wraparounds and integer overflows
  in the re module.  Patch by Nickolai Zeldovich.

- Issue #17536: Add to webbrowser's browser list: xdg-open, gvfs-open,
  www-browser, x-www-browser, chromium browsers, iceweasel, iceape.

- Issue #17656: Fix extraction of zip files with unicode member paths.

- Issue #17666: Fix reading gzip files with an extra field.

- Issue #13150, #17512: sysconfig no longer parses the Makefile and config.h
  files when imported, instead doing it at build time.  This makes importing
  sysconfig faster and reduces Python startup time by 20%.

- Issue #13163: Rename operands in smtplib.SMTP._get_socket to correct names;
  fixes otherwise misleading output in tracebacks and when when debug is on.

- Issue #17526: fix an IndexError raised while passing code without filename to
  inspect.findsource().  Initial patch by Tyler Doyle.

Build
-----

- Issue #17547: In configure, explicitly pass -Wformat for the benefit for GCC
  4.8.

- Issue #17682: Add the _io module to Modules/Setup.dist (commented out).

- Issue #17086: Search the include and library directories provided by the
  compiler.

Tests
-----

- Issue #17928: Fix test_structmembers on 64-bit big-endian machines.

- Issue #17883: Fix buildbot testing of Tkinter on Windows.
  Patch by Zachary Ware.

- Issue #7855: Add tests for ctypes/winreg for issues found in IronPython.
  Initial patch by Dino Viehland.

- Issue #17712: Fix test_gdb failures on Ubuntu 13.04.

- Issue #17065: Use process-unique key for winreg tests to avoid failures if
  test is run multiple times in parallel (eg: on a buildbot host).

IDLE
----

- Issue #17838: Allow sys.stdin to be reassigned.

- Issue #14735: Update IDLE docs to omit "Control-z on Windows".

- Issue #17585: Fixed IDLE regression. Now closes when using exit() or quit().

- Issue #17657: Show full Tk version in IDLE's about dialog.
  Patch by Todd Rovito.

- Issue #17613: Prevent traceback when removing syntax colorizer in IDLE.

- Issue #1207589: Backwards-compatibility patch for right-click menu in IDLE.

- Issue #16887: IDLE now accepts Cancel in tabify/untabify dialog box.

- Issue #14254: IDLE now handles readline correctly across shell restarts.

- Issue #17614: IDLE no longer raises exception when quickly closing a file.

- Issue #6698: IDLE now opens just an editor window when configured to do so.

- Issue #8900: Using keyboard shortcuts in IDLE to open a file no longer
  raises an exception.

- Issue #6649: Fixed missing exit status in IDLE. Patch by Guilherme Polo.

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

- Issue #15940: Specify effect of locale on time functions.

- Issue #6696: add documentation for the Profile objects, and improve
  profile/cProfile docs.  Patch by Tom Pinckney.


What's New in Python 2.7.4?
===========================

*Release date: 2013-04-06*

Build
-----

- Issue #17550: Fix the --enable-profiling configure switch.

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

- Issue #15801 (again): With string % formatting, relax the type check for a
  mapping such that any type with a __getitem__ can be used on the right hand
  side.

IDLE
----

- Issue #17625: In IDLE, close the replace dialog after it is used.

Tests
-----

- Issue #17835: Fix test_io when the default OS pipe buffer size is larger
  than one million bytes.

- Issue #17531: Fix tests that thought group and user ids were always the int
  type. Also, always allow -1 as a valid group and user id.

- Issue #17533: Fix test_xpickle with older versions of Python 2.5.

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

- Issue 17538: Document XML vulnerabilties


What's New in Python 2.7.4 release candidate 1
==============================================

*Release date: 2013-03-23*

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

- Issue #10211: Buffer objects expose the new buffer interface internally

- Issue #16445: Fixed potential segmentation fault when deleting an exception
  message.

- Issue #17275: Corrected class name in init error messages of the C version of
  BufferedWriter and BufferedRandom.

- Issue #7963: Fixed misleading error message that issued when object is
  called without arguments.

- Issue #5308: Raise ValueError when marshalling too large object (a sequence
  with size >= 2**31), instead of producing illegal marshal data.

- Issue #17043: The unicode-internal decoder no longer read past the end of
  input buffer.

- Issue #16979: Fix error handling bugs in the unicode-escape-decode decoder.

- Issue #10156: In the interpreter's initialization phase, unicode globals
  are now initialized dynamically as needed.

- Issue #16975: Fix error handling bug in the escape-decode decoder.

- Issue #14850: Now a charmap decoder treats U+FFFE as "undefined mapping"
  in any mapping, not only in a Unicode string.

- Issue #11461: Fix the incremental UTF-16 decoder. Original patch by
  Amaury Forgeot d'Arc.

- Issue #16367: Fix FileIO.readall() on Windows for files larger than 2 GB.

- Issue #15516: Fix a bug in PyString_FromFormat where it failed to properly
  ignore errors from a __int__() method.

- Issue #16839: Fix a segfault when calling unicode() on a classic class early
  in interpreter initialization.

- Issue #16761: Calling ``int()`` and ``long()`` with *base* argument only
  now raises TypeError.

- Issue #16759: Support the full DWORD (unsigned long) range in Reg2Py
  when retrieving a REG_DWORD value. This corrects functions like
  winreg.QueryValueEx that may have been returning truncated values.

- Issue #14420: Support the full DWORD (unsigned long) range in Py2Reg
  when passed a REG_DWORD value. Fixes ValueError in winreg.SetValueEx when
  given a long.

- Issue #13863: Work around buggy 'fstat' implementation on Windows / NTFS that
  lead to incorrect timestamps (off by one hour) being stored in .pyc files on
  some systems.

- Issue #16602: When a weakref's target was part of a long deallocation
  chain, the object could remain reachable through its weakref even though
  its refcount had dropped to zero.

- Issue #9011: Fix hacky AST code that modified the CST when compiling
  a negated numeric literal.

- Issue #16306: Fix multiple error messages when unknown command line
  parameters where passed to the interpreter.  Patch by Hieu Nguyen.

- Issue #15379: Fix passing of non-BMP characters as integers for the charmap
  decoder (already working as unicode strings).  Patch by Serhiy Storchaka.

- Issue #16453: Fix equality testing of dead weakref objects.

- Issue #9535: Fix pending signals that have been received but not yet
  handled by Python to not persist after os.fork() in the child process.

- Issue #15001: fix segfault on "del sys.modules['__main__']". Patch by Victor
  Stinner.

- Issue #5057: the peepholer no longer optimizes subscription on unicode
  literals (e.g. u'foo'[0]) in order to produce compatible pyc files between
  narrow and wide builds.

- Issue #8401: assigning an int to a bytearray slice (e.g. b[3:4] = 5) now
  raises an error.

- Issue #14700: Fix buggy overflow checks for large width and precision
  in string formatting operations.

- Issue #16345: Fix an infinite loop when ``fromkeys`` on a dict subclass
  received a nonempty dict from the constructor.

- Issue #6074: Ensure cached bytecode files can always be updated by the
  user that created them, even when the source file is read-only.

- Issue #14783: Improve int() and long() docstrings and switch docstrings for
  unicode(), slice(), range(), and xrange() to use multi-line signatures.

- Issue #16030: Fix overflow bug in computing the `repr` of an xrange object
  with large start, step or length.

- Issue #16029: Fix overflow bug occurring when pickling xranges with large
  start, step or length.

- Issue #16037: Limit httplib's _read_status() function to work around broken
  HTTP servers and reduce memory usage. It's actually a backport of a Python
  3.2 fix. Thanks to Adrien Kunysz.

- Issue #16588: Silence unused-but-set warnings in Python/thread_pthread

- Issue #13992: The trashcan mechanism is now thread-safe.  This eliminates
  sporadic crashes in multi-thread programs when several long deallocator
  chains ran concurrently and involved subclasses of built-in container
  types.

- Issue #15801: Make sure mappings passed to '%' formatting are actually
  subscriptable.

- Issue #15604: Update uses of PyObject_IsTrue() to check for and handle
  errors correctly.  Patch by Serhiy Storchaka.

- Issue #14579: Fix error handling bug in the utf-16 decoder.  Patch by
  Serhiy Storchaka.

- Issue #15368: An issue that caused bytecode generation to be
  non-deterministic when using randomized hashing (-R) has been fixed.

- Issue #15897: zipimport.c doesn't check return value of fseek().
  Patch by Felipe Cruz.

- Issue #16369: Global PyTypeObjects not initialized with PyType_Ready(...).

- Issue #15033: Fix the exit status bug when modules invoked using -m switch,
  return the proper failure return value (1). Patch contributed by Jeff Knupp.

- Issue #12268: File readline, readlines and read() methods no longer lose
  data when an underlying read system call is interrupted.  IOError is no
  longer raised due to a read system call returning EINTR from within these
  methods.

- Issue #13512: Create ~/.pypirc securely (CVE-2011-4944).  Initial patch by
  Philip Jenvey, tested by Mageia and Debian.

- Issue #7719: Make distutils ignore ``.nfs*`` files instead of choking later
  on.  Initial patch by SilentGhost and Jeff Ramnani.

- Issue #10053: Don't close FDs when FileIO.__init__ fails. Loosely based on
  the work by Hirokazu Yamamoto.

- Issue #14775: Fix a potential quadratic dict build-up due to the garbage
  collector repeatedly trying to untrack dicts.

- Issue #14494: Fix __future__.py and its documentation to note that
  absolute imports are the default behavior in 3.0 instead of 2.7.
  Patch by Sven Marnach.

- Issue #14761: Fix potential leak on an error case in the import machinery.

- Issue #14699: Fix calling the classmethod descriptor directly.

- Issue #11603 (again): Setting __repr__ to __str__ now raises a RuntimeError
  when repr() or str() is called on such an object.

- Issue #14658: Fix binding a special method to a builtin implementation of a
  special method with a different name.

- Issue #14612: Fix jumping around with blocks by setting f_lineno.

- Issue #13889: Check and (if necessary) set FPU control word before calling
  any of the dtoa.c string <-> float conversion functions, on MSVC builds of
  Python.  This fixes issues when embedding Python in a Delphi app.

- Issue #14505: Fix file descriptor leak when deallocating file objects
  created with PyFile_FromString().

- Issue #14474: Save and restore exception state in thread.start_new_thread()
  while writing error message if the thread leaves a unhandled exception.

- Issue #13019: Fix potential reference leaks in bytearray.extend().  Patch
  by Suman Saha.

- Issue #14378: Fix compiling ast.ImportFrom nodes with a "__future__" string as
  the module name that was not interned.

- Issue #14331: Use significantly less stack space when importing modules by
  allocating path buffers on the heap instead of the stack.

- Issue #14334: Prevent in a segfault in type.__getattribute__ when it was not
  passed strings. Also fix segfaults in the __getattribute__ and __setattr__
  methods of old-style classes.

- Issue #14161: fix the __repr__ of file objects to escape the file name.

- Issue #1469629: Allow cycles through an object's __dict__ slot to be
  collected. (For example if ``x.__dict__ is x``).

- Issue #13521: dict.setdefault() now does only one lookup for the given key,
  making it "atomic" for many purposes.  Patch by Filip Gruszczyński.

- Issue #1602133: on Mac OS X a shared library build (``--enable-shared``)
  now fills the ``os.environ`` variable correctly.

- Issue #10538: When using the "s*" code with PyArg_ParseTuple() to fill a
  Py_buffer structure with data from an object supporting only the old
  PyBuffer interface, a reference to the source objects is now properly added
  to the Py_buffer.obj member.

Library
-------

- Issue #12718: Fix interaction with winpdb overriding __import__ by setting
  importer attribute on BaseConfigurator instance.

- Issue #17521: Corrected non-enabling of logger following two calls to
  fileConfig().

- Issue #17508: Corrected MemoryHandler configuration in dictConfig() where
  the target handler wasn't configured first.

- Issue #10212: cStringIO and struct.unpack support new buffer objects.

- Issue #12098: multiprocessing on Windows now starts child processes
  using the same sys.flags as the current process.  Initial patch by
  Sergey Mezentsev.

- Issue #8862: Fixed curses cleanup when getkey is interrputed by a signal.

- Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN,
  retry the select() loop instead of bailing out.  This is because select()
  can incorrectly report a socket as ready for reading (for example, if it
  received some data with an invalid checksum).

- Issue #1285086: Get rid of the refcounting hack and speed up urllib.unquote().

- Issue #17368: Fix an off-by-one error in the Python JSON decoder that caused
  a failure while decoding empty object literals when object_pairs_hook was
  specified.

- Issue #17278: Fix a crash in heapq.heappush() and heapq.heappop() when
  the list is being resized concurrently.

- Issue #17018: Make Process.join() retry if os.waitpid() fails with EINTR.

- Issue #14720: sqlite3: Convert datetime microseconds correctly.
  Patch by Lowe Thiderman.

- Issue #17225: JSON decoder now counts columns in the first line starting
  with 1, as in other lines.

- Issue #7842: backported fix for py_compile.compile() syntax error handling.

- Issue #13153: Tkinter functions now raise TclError instead of ValueError when
  a unicode argument contains non-BMP character.

- Issue #9669: Protect re against infinite loops on zero-width matching in
  non-greedy repeat.  Patch by Matthew Barnett.

- Issue #13169: The maximal repetition number in a regular expression has been
  increased from 65534 to 2147483647 (on 32-bit platform) or 4294967294 (on
  64-bit).

- Issue #16743: Fix mmap overflow check on 32 bit Windows.

- Issue #11311: StringIO.readline(0) now returns an empty string as all other
  file-like objects.

- Issue #16800: tempfile.gettempdir() no longer left temporary files when
  the disk is full.  Original patch by Amir Szekely.

- Issue #13555: cPickle now supports files larger than 2 GiB.

- Issue #17052: unittest discovery should use self.testLoader.

- Issue #4591: Uid and gid values larger than 2**31 are supported now.

- Issue #17141: random.vonmisesvariate() no more hangs for large kappas.

- Issue #17149: Fix random.vonmisesvariate to always return results in
  the range [0, 2*math.pi].

- Issue #1470548: XMLGenerator now works with UTF-16 and UTF-32 encodings.

- Issue #6975: os.path.realpath() now correctly resolves multiple nested
  symlinks on POSIX platforms.

- Issue #7358: cStringIO.StringIO now supports writing to and reading from
  a stream larger than 2 GiB on 64-bit systems.

- Issue #10355: In SpooledTemporaryFile class mode and name properties and
  xreadlines method now work for unrolled files.  encoding and newlines
  properties now removed as they have no sense and always produced
  AttributeError.

- Issue #16686: Fixed a lot of bugs in audioop module.  Fixed crashes in
  avgpp(), maxpp() and ratecv().  Fixed an integer overflow in add(), bias(),
  and ratecv().  reverse(), lin2lin() and ratecv() no more lose precision for
  32-bit samples.  max() and rms() no more returns a negative result and
  various other functions now work correctly with 32-bit sample -0x80000000.

- Issue #17073: Fix some integer overflows in sqlite3 module.

- Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple
  parses nested mutating sequence.

- Issue #5289: Fix ctypes.util.find_library on Solaris.

- Issue #17106: Fix a segmentation fault in io.TextIOWrapper when an underlying
  stream or a decoder produces data of an unexpected type (i.e. when
  io.TextIOWrapper initialized with text stream or use bytes-to-bytes codec).

- Issue #13994: Add compatibility alias in distutils.ccompiler for
  distutils.sysconfig.customize_compiler.

- Issue #15633: httplib.HTTPResponse is now mark closed when the server
  sends less than the advertised Content-Length.

- Issue #15881: Fixed atexit hook in multiprocessing.

- Issue #14340: Upgrade the embedded expat library to version 2.1.0.

- Issue #11159: SAX parser now supports unicode file names.

- Issue #6972: The zipfile module no longer overwrites files outside of
  its destination path when extracting malicious zip files.

- Issue #17049: Localized calendar methods now return unicode if a locale
  includes an encoding and the result string contains month or weekday (was
  regression from Python 2.6).

- Issue #4844: ZipFile now raises BadZipfile when opens a ZIP file with an
  incomplete "End of Central Directory" record.  Original patch by Guilherme
  Polo and Alan McIntyre.

- Issue #15505: `unittest.installHandler` no longer assumes SIGINT handler is
  set to a callable object.

- Issue #17051: Fix a memory leak in os.path.isdir() on Windows. Patch by
  Robert Xiao.

- Issue #13454: Fix a crash when deleting an iterator created by itertools.tee()
  if all other iterators were very advanced before.

- Issue #16992: On Windows in signal.set_wakeup_fd, validate the file
  descriptor argument.

- Issue #15861: tkinter now correctly works with lists and tuples containing
  strings with whitespaces, backslashes or unbalanced braces.

- Issue #10527: Use poll() instead of select() for multiprocessing pipes.

- Issue #9720: zipfile now writes correct local headers for files larger than
  4 GiB.

- Issue #13899: \A, \Z, and \B now correctly match the A, Z, and B literals
  when used inside character classes (e.g. '[\A]').  Patch by Matthew Barnett.

- Issue #16398: Optimize deque.rotate() so that it only moves pointers
  and doesn't touch the underlying data with increfs and decrefs.

- Issue #15109: Fix regression in sqlite3's iterdump method where it would
  die with an encoding error if the database contained string values
  containing non-ASCII.  (Regression was introduced by fix for 9750).

- Issue #15545: Fix regression in sqlite3's iterdump method where it was
  failing if the connection used a row factory (such as sqlite3.Row) that
  produced unsortable objects. (Regression was introduced by fix for 9750).

- Issue #16828: Fix error incorrectly raised by bz2.compress(''). Patch by
  Martin Packman.

- Issue #9586: Redefine SEM_FAILED on MacOSX to keep compiler happy.

- Issue #10527: make multiprocessing use poll() instead of select() if available.

- Issue #16485: Now file descriptors are closed if file header patching failed
  on closing an aifc file.

- Issue #12065: connect_ex() on an SSL socket now returns the original errno
  when the socket's timeout expires (it used to return None).

- Issue #16713: Fix the parsing of tel url with params using urlparse module.

- Issue #16443: Add docstrings to regular expression match objects.
  Patch by Anton Kasyanov.

- Issue #8853: Allow port to be of type long for socket.getaddrinfo().

- Issue #16597: In buffered and text IO, call close() on the underlying stream
  if invoking flush() fails.

- Issue #15701: Fix HTTPError info method call to return the headers information.

- Issue #16646: ftplib.FTP.makeport() might lose socket error details.
  (patch by Serhiy Storchaka)

- Issue #16626: Fix infinite recursion in glob.glob() on Windows when the
  pattern contains a wildcard in the drive or UNC path.  Patch by Serhiy
  Storchaka.

- Issue #16298: In HTTPResponse.read(), close the socket when there is no
  Content-Length and the incoming stream is finished.  Patch by Eran
  Rundstein.

- Issue #16248: Disable code execution from the user's home directory by
  tkinter when the -E flag is passed to Python.  Patch by Zachary Ware.

- Issue #16628: Fix a memory leak in ctypes.resize().

- Issue #13614: Fix setup.py register failure with invalid rst in description.
  Patch by Julien Courteau and Pierre Paul Lefebvre.

- Issue #10182: The re module doesn't truncate indices to 32 bits anymore.
  Patch by Serhiy Storchaka.

- Issue #16573: In 2to3, treat enumerate() like a consuming call, so superfluous
  list() calls aren't added to filter(), map(), and zip() which are directly
  passed enumerate().

- Issue #1160: Fix compiling large regular expressions on UCS2 builds.
  Patch by Serhiy Storchaka.

- Issue #14313: zipfile now raises NotImplementedError when the compression
  type is unknown.

- Issue #16408: Fix file descriptors not being closed in error conditions
  in the zipfile module.  Patch by Serhiy Storchaka.

- Issue #16327: The subprocess module no longer leaks file descriptors
  used for stdin/stdout/stderr pipes to the child when fork() fails.

- Issue #14396: Handle the odd rare case of waitpid returning 0 when not
  expected in subprocess.Popen.wait().

- Issue #16411: Fix a bug where zlib.decompressobj().flush() might try to access
  previously-freed memory. Patch by Serhiy Storchaka.

- Issue #16350: zlib.decompressobj().decompress() now accumulates data from
  successive calls after EOF in unused_data, instead of only saving the argument
  to the last call. decompressobj().flush() now correctly sets unused_data and
  unconsumed_tail. A bug in the handling of MemoryError when setting the
  unconsumed_tail attribute has also been fixed. Patch by Serhiy Storchaka.

- Issue #12759: sre_parse now raises a proper error when the name of the group
  is missing.  Initial patch by Serhiy Storchaka.

- Issue #16152: fix tokenize to ignore whitespace at the end of the code when
  no newline is found.  Patch by Ned Batchelder.

- Issue #16230: Fix a crash in select.select() when one the lists changes
  size while iterated on.  Patch by Serhiy Storchaka.

- Issue #16228: Fix a crash in the json module where a list changes size
  while it is being encoded.  Patch by Serhiy Storchaka.

- Issue #14897: Enhance error messages of struct.pack and
  struct.pack_into. Patch by Matti Mäki.

- Issue #12890: cgitb no longer prints spurious <p> tags in text
  mode when the logdir option is specified.

- Issue #14398: Fix size truncation and overflow bugs in the bz2 module.

- Issue #5148: Ignore 'U' in mode given to gzip.open() and gzip.GzipFile().

- Issue #16220: wsgiref now always calls close() on an iterable response.
  Patch by Brent Tubbs.

- Issue #16461: Wave library should be able to deal with 4GB wav files,
  and sample rate of 44100 Hz.

- Issue #16176: Properly identify Windows 8 via platform.platform()

- Issue #15756: subprocess.poll() now properly handles errno.ECHILD to
  return a returncode of 0 when the child has already exited or cannot
  be waited on.

- Issue #12376: Pass on parameters in TextTestResult.__init__ super call

- Issue #15222: Insert blank line after each message in mbox mailboxes

- Issue #16013: Fix CSV Reader parsing issue with ending quote characters.
  Patch by Serhiy Storchaka.

- Issue #15421: fix an OverflowError in Calendar.itermonthdates() after
  datetime.MAXYEAR.  Patch by Cédric Krier.

- Issue #15970: xml.etree.ElementTree now serializes correctly the empty HTML
  elements 'meta' and 'param'.

- Issue #15676: Now "mmap" check for empty files before doing the
  offset check.  Patch by Steven Willis.

- Issue #15340: Fix importing the random module when /dev/urandom cannot
  be opened.  This was a regression caused by the hash randomization patch.

- Issue #15841: The readable(), writable() and seekable() methods of
  io.BytesIO and io.StringIO objects now raise ValueError when the object has
  been closed.  Patch by Alessandro Moura.

- Issue #16112: platform.architecture does not correctly escape argument to
  /usr/bin/file.  Patch by David Benjamin.

- Issue #12776,#11839: call argparse type function (specified by add_argument)
  only once. Before, the type function was called twice in the case where the
  default was specified and the argument was given as well.  This was
  especially problematic for the FileType type, as a default file would always
  be opened, even if a file argument was specified on the command line.

- Issue #15906: Fix a regression in argparse caused by the preceding change,
  when action='append', type='str' and default=[].

- Issue #13370: Ensure that ctypes works on Mac OS X when Python is
  compiled using the clang compiler

- Issue #15544: Fix Decimal.__float__ to work with payload-carrying NaNs.

- Issue #15199: Fix JavaScript's default MIME type to application/javascript.
  Patch by Bohuslav Kabrda.

- Issue #15477: In cmath and math modules, add workaround for platforms whose
  system-supplied log1p function doesn't respect signs of zeros.

- Issue #11062: Fix adding a message from file to Babyl mailbox.

- Issue #15646: Prevent equivalent of a fork bomb when using
  multiprocessing on Windows without the "if __name__ == '__main__'"
  idiom.

- Issue #15567: Fix NameError when running threading._test

- Issue #15424: Add a __sizeof__ implementation for array objects.
  Patch by Ludwig Hähne.

- Issue #15538: Fix compilation of the getnameinfo() / getaddrinfo()
  emulation code.  Patch by Philipp Hagemeister.

- Issue #12288: Consider '0' and '0.0' as valid initialvalue
  for tkinter SimpleDialog.

- Issue #15489: Add a __sizeof__ implementation for BytesIO objects.
  Patch by Serhiy Storchaka.

- Issue #15469: Add a __sizeof__ implementation for deque objects.
  Patch by Serhiy Storchaka.

- Issue #15487: Add a __sizeof__ implementation for buffered I/O objects.
  Patch by Serhiy Storchaka.

- Issue #15512: Add a __sizeof__ implementation for parser.
  Patch by Serhiy Storchaka.

- Issue #15402: An issue in the struct module that caused sys.getsizeof to
  return incorrect results for struct.Struct instances has been fixed.
  Initial patch by Serhiy Storchaka.

- Issue #15232: when mangle_from is True, email.Generator now correctly mangles
  lines that start with 'From ' that occur in a MIME preamble or epilog.

- Issue #13922: argparse no longer incorrectly strips '--'s that appear
  after the first one.

- Issue #12353: argparse now correctly handles null argument values.

- Issue #6493: An issue in ctypes on Windows that caused structure bitfields
  of type ctypes.c_uint32 and width 32 to incorrectly be set has been fixed.

- Issue #14635: telnetlib will use poll() rather than select() when possible
  to avoid failing due to the select() file descriptor limit.

- Issue #15247: FileIO now raises an error when given a file descriptor
  pointing to a directory.

- Issue #14591: Fix bug in Random.jumpahead that could produce an invalid
  Mersenne Twister state on 64-bit machines.

- Issue #5346: Preserve permissions of mbox, MMDF and Babyl mailbox
  files on flush().

- Issue #15219: Fix a reference leak when hashlib.new() is called with
  invalid parameters.

- Issue #9559: If messages were only added, a new file is no longer
  created and renamed over the old file when flush() is called on an
  mbox, MMDF or Babyl mailbox.

- Issue #14653: email.utils.mktime_tz() no longer relies on system
  mktime() when timezone offest is supplied.

- Issue #6056: Make multiprocessing use setblocking(True) on the
  sockets it uses.  Original patch by J Derek Wilson.

- Issue #15101: Make pool finalizer avoid joining current thread.

- Issue #15054: A bug in tokenize.tokenize that caused string literals
  with 'b' and 'br' prefixes to be incorrectly tokenized has been fixed.
  Patch by Serhiy Storchaka.

- Issue #15036: Mailbox no longer throws an error if a flush is done
  between operations when removing or changing multiple items in mbox,
  MMDF, or Babyl mailboxes.

- Issue #10133: Make multiprocessing deallocate buffer if socket read
  fails.  Patch by Hallvard B Furuseth.

- Issue #13854: Make multiprocessing properly handle non-integer
  non-string argument to SystemExit.

- Issue #12157: Make pool.map() empty iterables correctly.  Initial
  patch by mouad.

- Issue #14036: Add an additional check to validate that port in urlparse does
  not go in illegal range and returns None.

- Issue #14888: Fix misbehaviour of the _md5 module when called on data
  larger than 2**32 bytes.

- Issue #15908: Fix misbehaviour of the sha1 module when called on data
  larger than 2**32 bytes.

- Issue #15910: Fix misbehaviour of _md5 and sha1 modules when "updating"
  on data larger than 2**32 bytes.

- Issue #14875: Use float('inf') instead of float('1e66666') in the json module.

- Issue #14572: Prevent build failures with pre-3.5.0 versions of
  sqlite3, such as was shipped with Centos 5 and Mac OS X 10.4.

- Issue #14426: Correct the Date format in Expires attribute of Set-Cookie
  Header in Cookie.py.

- Issue #14721: Send proper header, Content-length: 0 when the body is an empty
  string ''. Initial Patch contributed by Arve Knudsen.

- Issue #14072: Fix parsing of 'tel' URIs in urlparse by making the check for
  ports stricter.

- Issue #9374: Generic parsing of query and fragment portions of url for any
  scheme. Supported both by RFC3986 and RFC2396.

- Issue #14798: Fix the functions in pyclbr to raise an ImportError
  when the first part of a dotted name is not a package. Patch by
  Xavier de Gaye.

- Issue #14832: fixed the order of the argument references in the error
  message produced by unittest's assertItemsEqual.

- Issue #14829: Fix bisect issues under 64-bit Windows.

- Issue #14777: tkinter may return undecoded UTF-8 bytes as a string when
  accessing the Tk clipboard.  Modify clipboad_get() to first request type
  UTF8_STRING when no specific type is requested in an X11 windowing
  environment, falling back to the current default type STRING if that fails.
  Original patch by Thomas Kluyver.

- Issue #12541: Be lenient with quotes around Realm field with HTTP Basic
  Authentation in urllib2.

- Issue #14662: Prevent shutil failures on OS X when destination does not
  support chflag operations.  Patch by Hynek Schlawack.

- Issue #14157: Fix time.strptime failing without a year on February 29th.
  Patch by Hynek Schlawack.

- Issue #14768: os.path.expanduser('~/a') doesn't works correctly when HOME is '/'.

- Issue #13183: Fix pdb skipping frames after hitting a breakpoint and running
  step.  Patch by Xavier de Gaye.

- Issue #14664: It is now possible to use @unittest.skip{If,Unless} on a
  test class that doesn't inherit from TestCase (i.e. a mixin).

- Issue #14160: TarFile.extractfile() failed to resolve symbolic links when
  the links were not located in an archive subdirectory.

- Issue #14638: pydoc now treats non-string __name__ values as if they
  were missing, instead of raising an error.

- Issue #13684: Fix httplib tunnel issue of infinite loops for certain sites
  which send EOF without trailing \r\n.

- Issue #14308: Fix an exception when a "dummy" thread is in the threading
  module's active list after a fork().

- Issue #14538: HTMLParser can now parse correctly start tags that contain
  a bare '/'.

- Issue #14452: SysLogHandler no longer inserts a UTF-8 BOM into the message.

- Issue #13496: Fix potential overflow in bisect.bisect algorithm when applied
  to a collection of size > sys.maxsize / 2.

- Issue #14399: zipfile now recognizes that the archive has been modified even
  if only the comment is changed.  As a consequence of this fix, ZipFile is now
  a new style class.

- Issue #7978: SocketServer now restarts the select() call when EINTR is
  returned.  This avoids crashing the server loop when a signal is received.
  Patch by Jerzy Kozera.

- Issue #10340: asyncore - properly handle EINVAL in dispatcher constructor on
  OSX; avoid to call handle_connect in case of a disconnected socket which
  was not meant to connect.

- Issue #12757: Fix the skipping of doctests when python is run with -OO so
  that it works in unittest's verbose mode as well as non-verbose mode.

- Issue #13694: asynchronous connect in asyncore.dispatcher does not set addr
  attribute.

- Issue #10484: Fix the CGIHTTPServer's PATH_INFO handling problem.

- Issue #11199: Fix the with urllib which hangs on particular ftp urls.

- Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under
  Windows when the child process has already exited.

- Issue #14195: An issue that caused weakref.WeakSet instances to incorrectly
  return True for a WeakSet instance 'a' in both 'a < a' and 'a > a' has been
  fixed.

- Issue #14159: Fix the len() of weak sets to return a better approximation
  when some objects are dead or dying.  Moreover, the implementation is now
  O(1) rather than O(n).

- Issue #2945: Make the distutils upload command aware of bdist_rpm products.

- Issue #6884: Fix long-standing bugs with MANIFEST.in parsing in distutils
  on Windows.

- Issue #16441: Avoid excessive memory usage working with large gzip
  files using the gzip module.

- Issue #15782: Prevent compile errors of OS X Carbon modules _Fm, _Qd, and
  _Qdoffs when compiling with an SDK of 10.7 or later.  The OS X APIs they
  wrap have long been deprecated and have now been removed with 10.7.
  These modules were already empty for 64-bit builds and have been removed
  in Python 3.

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

- Issue #17477: Update the bsddb module to pybsddb 5.3.0, supporting
  db-5.x, and dropping support for db-4.1 and db-4.2.

- Issue #17192: Update the ctypes module's libffi to v3.0.13.  This
  specifically addresses a stack misalignment issue on x86 and issues on
  some more recent platforms.

- Issue #12268: The io module file object write methods no longer abort early
  when a write system calls is interrupted (EINTR).

- Fix the leak of a dict in the time module when used in an embedded
  interpreter that is repeatedly initialized and shutdown and reinitialized.

- Issue #12268: File readline, readlines and read or readall methods
  no longer lose data when an underlying read system call is interrupted
  within an io module object.  IOError is no longer raised due to a read
  system call returning EINTR from within these methods.

- Issue #16012: Fix a regression in pyexpat. The parser's UseForeignDTD()
  method doesn't require an argument again.

- Issue #13590: OS X Xcode 4 - improve support for universal extension modules
  In particular, fix extension module build failures when trying to use
  32-bit-only installer Pythons on systems with Xcode 4 (currently
  OS X 10.8, 10.7, and optionally 10.6).
  * Backport 3.3.0 fixes to 2.7 branch (for release in 2.7.4)
  * Since Xcode 4 removes ppc support, extension module builds now
    check for ppc compiler support and by default remove ppc and
    ppc64 archs when they are not available.
  * Extension module builds now revert to using system installed
    headers and libs (/usr and /System/Library) if the SDK used
    to build the interpreter is not installed or has moved.
  * Try to avoid building extension modules with deprecated
    and problematic Apple llvm-gcc compiler.  If original compiler
    is not available, use clang instead by default.

IDLE
----

- IDLE was displaying spurious SystemExit tracebacks when running scripts
  that terminated by raising SystemExit (i.e. unittest and turtledemo).

- Issue #9290: In IDLE the sys.std* streams now implement io.TextIOBase
  interface and support all mandatory methods and properties.

- Issue #16829: IDLE printing no longer fails if there are spaces or other
  special characters in the file path.

- Issue #16819: IDLE method completion now correctly works for unicode literals.

- Issue #16504: IDLE now catches SyntaxErrors raised by tokenizer. Patch by
  Roger Serwy.

- Issue #1207589: Add Cut/Copy/Paste items to IDLE right click Context Menu
  Patch by Todd Rovito.

- Issue #13052: Fix IDLE crashing when replace string in Search/Replace dialog
  ended with '\'. Patch by Roger Serwy.

- Issue #9803: Don't close IDLE on saving if breakpoint is open.
  Patch by Roger Serwy.

- Issue #14958: Change IDLE systax highlighting to recognize all string and byte
  literals currently supported in Python 2.7.

- Issue #14962: Update text coloring in IDLE shell window after changing
  options.  Patch by Roger Serwy.

- Issue #10997: Prevent a duplicate entry in IDLE's "Recent Files" menu.

- Issue #12510: Attempting to get invalid tooltip no longer closes IDLE.
  Original patch by Roger Serwy.

- Issue #10365: File open dialog now works instead of crashing
  even when parent window is closed. Patch by Roger Serwy.

- Issue #14876: Use user-selected font for highlight configuration.
  Patch by Roger Serwy.

- Issue #14409: IDLE now properly executes commands in the Shell window
  when it cannot read the normal config files on startup and
  has to use the built-in default key bindings.
  There was previously a bug in one of the defaults.

- Issue #3573: IDLE hangs when passing invalid command line args
  (directory(ies) instead of file(s)) (Patch by Guilherme Polo)

- Issue #5219: Prevent event handler cascade in IDLE.

Tests
-----

- Issue #16702: test_urllib2_localnet tests now correctly ignores proxies for
  localhost tests.

- Issue #13447: Add a test file to host regression tests for bugs in the
  scripts found in the Tools directory.

- Issue #11420: make test suite pass with -B/DONTWRITEBYTECODE set.
  Initial patch by Thomas Wouters.

- Issue #17299: Add test coverage for cPickle with file objects and general IO
  objects.  Original patch by Aman Shah.

- Issue #11963: remove human verification from test_parser and test_subprocess.

- Issue #17249: convert a test in test_capi to use unittest and reap threads.

- We now run both test_email.py and test_email_renamed.py when running the
  test_email regression test.  test_email_renamed contains some tests that
  test_email does not.

- Issue #17041: Fix testing when Python is configured with the
  --without-doc-strings option.

- Issue #15539: Added regression tests for Tools/scripts/pindent.py.

- Issue #15324: Fix regrtest parsing of --fromfile and --randomize options.

- Issue #16618: Add more regression tests for glob.
  Patch by Serhiy Storchaka.

- Issue #16664: Add regression tests for glob's behaviour concerning entries
  starting with a ".".  Patch by Sebastian Kreft.

- Issue #15747: ZFS always returns EOPNOTSUPP when attempting to set the
  UF_IMMUTABLE flag (via either chflags or lchflags); refactor affected
  tests in test_posix.py to account for this.

- Issue #16549: Add tests for json.tools.  Initial patch by Berker Peksag
  and Serhiy Storchaka.

- Issue #16559: Add more tests for the json module, including some from the
  official test suite at json.org.  Patch by Serhiy Storchaka.

- Issue #16274: Fix test_asyncore on Solaris.  Patch by Giampaolo Rodola'.

- Issue #15040: Close files in mailbox tests for PyPy compatibility.
  Original patch by Matti Picus.

- Issue #15802: Fix test logic in TestMaildir.test_create_tmp. Patch
  by Serhiy Storchaka.

- Issue #15765: Extend a previous fix to Solaris and OpenBSD for quirky
  getcwd() behaviour (issue #9185) to NetBSD as well.

- Issue #15615: Add some tests for the json module's handling of invalid
  input data.  Patch by Kushal Das.

- Issue #15496: Add directory removal helpers for tests on Windows.
  Patch by Jeremy Kloth.

- Issue #15043: test_gdb is now skipped entirely if gdb security settings
  block loading of the gdb hooks

- Issue #14589: Update certificate chain for sha256.tbs-internet.com, fixing
  a test failure in test_ssl.

- Issue #16698: Skip posix test_getgroups when built with OS X
  deployment target prior to 10.6.

- Issue #17111: Prevent test_surrogates (test_fileio) failure on OS X 10.4.

Build
-----

- Issue #17425: Build against openssl 0.9.8y on Windows.

- Issue #16004: Add `make touch`.

- Issue #5033: Fix building of the sqlite3 extension module when the
  SQLite library version has "beta" in it. Patch by Andreas Pelme.

- Issue #17228: Fix building without pymalloc.

- Issue #17086: Backport the patches from the 3.3 branch to cross-build
  the package.

- Issue #3754: fix typo in pthread AC_CACHE_VAL.

- Issue #17029: Let h2py search the multiarch system include directory.

- Issue #16953: Fix socket module compilation on platforms with
  HAVE_BROKEN_POLL. Patch by Jeffrey Armstrong.

- Issue #16836: Enable IPv6 support even if IPv6 is disabled on the build host.

- Issue #15923: fix a mistake in asdl_c.py that resulted in a TypeError after
  2801bf875a24 (see #15801).

- Issue #11715: Fix multiarch detection without having Debian development
  tools (dpkg-dev) installed.

- Issue #15819: Make sure we can build Python out-of-tree from a readonly
  source directory.  (Somewhat related to Issue #9860.)

- Issue #15822: Ensure 2to3 grammar pickles are properly installed.

- Issue #15560: Fix building _sqlite3 extension on OS X with an SDK.

- Issue #8847: Disable COMDAT folding in Windows PGO builds.

- Issue #14018: Fix OS X Tcl/Tk framework checking when using OS X SDKs.

- Issue #16256: OS X installer now sets correct permissions for doc directory.

- Issue #8767: Restore building with --disable-unicode.
  Patch by Stefano Taschini.

- Build against bzip2 1.0.6 and openssl 0.9.8x on Windows.

- Issue #14557: Fix extensions build on HP-UX. Patch by Adi Roiban.

- Issue #14437: Fix building the _io module under Cygwin.

- Issue #15587: Enable Tk high-resolution text rendering on Macs with
  Retina displays.  Applies to Tkinter apps, such as IDLE, on OS X
  framework builds linked with Cocoa Tk 8.5.

- Issue #17161: make install now also installs a python2 and python man page.

- Issue #16848: python-config now returns proper --ldflags values for OS X
  framework builds.

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

- Issue #17156: pygettext.py now correctly escapes non-ascii characters.

- Issue #15539: Fix a number of bugs in Tools/scripts/pindent.py.  Now
  pindent.py works with a "with" statement.  pindent.py no longer produces
  improper indentation.  pindent.py now works with continued lines broken after
  "class" or "def" keywords and with continuations at the start of line.

- Issue #16476: Fix json.tool to avoid including trailing whitespace.

- Issue #13301: use ast.literal_eval() instead of eval() in Tools/i18n/msgfmt.py
  Patch by Serhiy Storchaka.

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

- Issue #15041: Update "see also" list in tkinter documentation.

- Issue #17412: update 2.7 Doc/make.bat to also use sphinx-1.0.7.

- Issue #17047: remove doubled words in docs and docstrings
  reported by Serhiy Storchaka and Matthew Barnett.

- Issue #16406: combine the pages for uploading and registering to PyPI.

- Issue #16403: Document how distutils uses the maintainer field in
  PKG-INFO. Patch by Jyrki Pulliainen.

- Issue #16695: Document how glob handles filenames starting with a
  dot. Initial patch by Jyrki Pulliainen.

- Issue #8890: Stop advertising an insecure practice by replacing uses
  of the /tmp directory with better alternatives in the documentation.
  Patch by Geoff Wilson.

- Issue #17203: add long option names to unittest discovery docs.

- Issue #13094: add "Why do lambdas defined in a loop with different values
  all return the same result?" programming FAQ.

- Issue #14901: Update portions of the Windows FAQ.
  Patch by Ashish Nitin Patil.

- Issue #15990: Improve argument/parameter documentation.

- Issue #16400: Update the description of which versions of a given package
  PyPI displays.

- Issue #15677: Document that zlib and gzip accept a compression level of 0 to
  mean 'no compression'. Patch by Brian Brazil.

- Issue #8040: added a version switcher to the documentation.  Patch by
  Yury Selivanov.

- Issue #16115: Improve subprocess.Popen() documentation around args, shell,
  and executable arguments.

- Issue #15979: Improve timeit documentation.

- Issue #16036: Improve documentation of built-in int()'s signature and
  arguments.

- Issue #15935: Clarification of argparse docs, re: add_argument() type and
  default arguments.  Patch contributed by Chris Jerdonek.

- Issue #13769: Document the effect of ensure_ascii to the return type
  of JSON decoding functions.

- Issue #14880: Fix kwargs notation in csv.reader, .writer & .register_dialect.
  Patch by Chris Rebert.

- Issue #14674: Add a discussion of the json module's standard compliance.
  Patch by Chris Rebert.

- Issue #15630: Add an example for "continue" stmt in the tutorial. Patch by
  Daniel Ellis.

- Issue #13557: Clarify effect of giving two different namespaces to exec or
  execfile().

- Issue #14034: added the argparse tutorial.

- Issue #15250: Document that filecmp.dircmp compares files shallowly. Patch
  contributed by Chris Jerdonek.

- Issue #15116: Remove references to appscript as it is no longer being
  supported.


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

*Release date: 2012-03-17*

Library
-------

- Issue #14234: CVE-2012-0876: Randomize hashes of xml attributes in the hash
  table internal to the pyexpat module's copy of the expat library to avoid a
  denial of service due to hash collisions.  Patch by David Malcolm with some
  modifications by the expat project.


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

*Release date: 2012-02-23*

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

- Issue #13020: Fix a reference leak when allocating a structsequence object
  fails.  Patch by Suman Saha.

- Issue #13703: oCERT-2011-003: add -R command-line option and PYTHONHASHSEED
  environment variable, to provide an opt-in way to protect against denial of
  service attacks due to hash collisions within the dict and set types.  Patch
  by David Malcolm, based on work by Victor Stinner.

- Issue #11235: Fix OverflowError when trying to import a source file whose
  modification time doesn't fit in a 32-bit timestamp.

- Issue #11638: Unicode strings in 'name' and 'version' no longer cause
  UnicodeDecodeErrors.

- Fix the fix for issue #12149: it was incorrect, although it had the side
  effect of appearing to resolve the issue.  Thanks to Mark Shannon for
  noticing.

- Issue #13546: Fixed an overflow issue that could crash the intepreter when
  calling sys.setrecursionlimit((1<<31)-1).

- Issue #13333: The UTF-7 decoder now accepts lone surrogates (the encoder
  already accepts them).

- Issue #10519: Avoid unnecessary recursive function calls in
  setobject.c.

- Issue #13268: Fix the assert statement when a tuple is passed as the message.

- Issue #13018: Fix reference leaks in error paths in dictobject.c.
  Patch by Suman Saha.

- Issue #12604: VTRACE macro expanded to no-op in _sre.c to avoid compiler
  warnings. Patch by Josh Triplett and Petri Lehtinen.

- Issue #7833: Extension modules built using distutils on Windows will no
  longer include a "manifest" to prevent them failing at import time in some
  embedded situations.

- Issue #13186: Fix __delitem__ on old-style instances when invoked through
  PySequence_DelItem.

- Issue #13156: Revert the patch for issue #10517 (reset TLS upon fork()),
  which was only relevant for the native pthread TLS implementation.

- Issue #7732: Fix a crash on importing a module if a directory has the same
  name than a Python module (e.g. "__init__.py"): don't close the file twice.

- Issue #12973: Fix overflow checks that invoked undefined behaviour in
  int.__pow__.  These overflow checks were causing int.__pow__ to produce
  incorrect results with recent versions of Clang, as a result of the
  compiler optimizing the check away.  Also fix similar overflow checks
  in list_repeat (listobject.c) and islice_next (itertoolsmodule.c).  These
  bugs caused test failures with recent versions of Clang.

- Issue #12266: Fix str.capitalize() to correctly uppercase/lowercase
  titlecased and cased non-letter characters.

- Issues #12610 and #12609: Verify that user generated AST has correct string
  and identifier types before compiling.

- Issue #11627: Fix segfault when __new__ on a exception returns a
  non-exception class.

- Issue #12149: Update the method cache after a type's dictionnary gets
  cleared by the garbage collector.  This fixes a segfault when an instance
  and its type get caught in a reference cycle, and the instance's
  deallocator calls one of the methods on the type (e.g. when subclassing
  IOBase).  Diagnosis and patch by Davide Rizzo.

- Issue #12501: Remove Py3k warning for callable. callable() is supported
  again in Python 3.2.

- Issue #9611, #9015: FileIO.read(), FileIO.readinto(), FileIO.write() and
  os.write() clamp the length to INT_MAX on Windows.

- Issue #1195: my_fgets() now always clears errors before calling fgets(). Fix
  the following case: sys.stdin.read() stopped with CTRL+d (end of file),
  raw_input() interrupted by CTRL+c.

- Issue #10860: httplib now correctly handles an empty port after port
  delimiter in URLs.

- dict_proxy objects now display their contents rather than just the class
  name.

Library
-------

- Issue #8033: sqlite3: Fix 64-bit integer handling in user functions
  on 32-bit architectures. Initial patch by Philippe Devalkeneer.

- HTMLParser is now able to handle slashes in the start tag.

- Issue #14001: CVE-2012-0845: xmlrpc: Fix an endless loop in
  SimpleXMLRPCServer upon malformed POST request.

- Issue #2489: pty.spawn could consume 100% cpu when it encountered an EOF.

- Issue #13014: Fix a possible reference leak in SSLSocket.getpeercert().

- Issue #13987: HTMLParser is now able to handle EOFs in the middle of a
  construct and malformed start tags.

- Issue #13015: Fix a possible reference leak in defaultdict.__repr__.
  Patch by Suman Saha.

- Issue #13979: A bug in ctypes.util.find_library that caused
  the wrong library name to be returned has been fixed.

- Issue #1326113: distutils' build_ext command --libraries option now
  correctly parses multiple values separated by whitespace or commas.

- Issue #13993: HTMLParser is now able to handle broken end tags.

- Issue #13960: HTMLParser is now able to handle broken comments.

- Issue #9750: Fix sqlite3.Connection.iterdump on tables and fields
  with a name that is a keyword or contains quotes. Patch by Marko
  Kohtala.

- Issue #13994: Earlier partial revert of Distutils enhancements in 2.7
  has left two versions of customize_compiler, the original in
  distutils.sysconfig and another copy in distutils.ccompiler, with some
  parts of distutils calling one and others using the other.
  Complete the revert back to only having one in distutils.sysconfig as
  is the case in 3.x.

- Issue #13590: On OS X 10.7 and 10.6 with Xcode 4.2, building
  Distutils-based packages with C extension modules may fail because
  Apple has removed gcc-4.2, the version used to build python.org
  64-bit/32-bit Pythons.  If the user does not explicitly override
  the default C compiler by setting the CC environment variable,
  Distutils will now attempt to compile extension modules with clang
  if gcc-4.2 is required but not found. Also as a convenience, if
  the user does explicitly set CC, substitute its value as the default
  compiler in the Distutils LDSHARED configuration variable for OS X.
  (Note, the python.org 32-bit-only Pythons use gcc-4.0 and the 10.4u
  SDK, neither of which are available in Xcode 4.  This change does not
  attempt to override settings to support their use with Xcode 4.)

- Issue #9021: Add an introduction to the copy module documentation.

- Issue #6005: Examples in the socket library documentation use sendall, where
  relevant, instead send method.

- Issue #10811: Fix recursive usage of cursors. Instead of crashing,
  raise a ProgrammingError now.

- Issue #13676: Handle strings with embedded zeros correctly in sqlite3.

- Issue #13806: The size check in audioop decompression functions was too
  strict and could reject valid compressed data.  Patch by Oleg Plakhotnyuk.

- Issue #13885: CVE-2011-3389: the _ssl module would always disable the CBC
  IV attack countermeasure.

- Issue #6631: Disallow relative file paths in urllib urlopen methods.

- Issue #13781: Prevent gzip.GzipFile from using the dummy filename provided by
  file objects opened with os.fdopen().

- Issue #13589: Fix some serialization primitives in the aifc module.
  Patch by Oleg Plakhotnyuk.

- Issue #13803: Under Solaris, distutils doesn't include bitness
  in the directory name.

- Issue #13642: Unquote before b64encoding user:password during Basic
  Authentication. Patch contributed by Joonas Kuorilehto and Michele Orrù.

- Issue #13636: Weak ciphers are now disabled by default in the ssl module
  (except when SSLv2 is explicitly asked for).

- Issue #12798: Updated the mimetypes documentation.

- Issue #13639: Accept unicode filenames in tarfile.open(mode="w|gz").

- Issue #1785: Fix inspect and pydoc with misbehaving descriptors.

- Issue #7502: Fix equality comparison for DocTestCase instances.  Patch by
  Cédric Krier.

- Issue #11870: threading: Properly reinitialize threads internal locks and
  condition variables to avoid deadlocks in child processes.

- Issue #8035: urllib: Fix a bug where the client could remain stuck after a
  redirection or an error.

- tarfile.py: Correctly detect bzip2 compressed streams with blocksizes
  other than 900k.

- Issue #13573: The csv.writer now uses the repr() for floats rather than str().
  This allows floats to round-trip without loss of precision.

- Issue #13439: Fix many errors in turtle docstrings.

- Issue #12856: Ensure child processes do not inherit the parent's random
  seed for filename generation in the tempfile module.  Patch by Brian
  Harring.

- Issue #13458: Fix a memory leak in the ssl module when decoding a
  certificate with a subjectAltName.  Patch by Robert Xiao.

- Issue #13415: os.unsetenv() doesn't ignore errors anymore.

- Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is
  raised when the wrapped raw file is non-blocking and the write would block.
  Previous code assumed that the raw write() would raise BlockingIOError, but
  RawIOBase.write() is defined to returned None when the call would block.
  Patch by sbt.

- Issue #13358: HTMLParser now calls handle_data only once for each CDATA.

- Issue #4147: minidom's toprettyxml no longer adds whitespace around a text
  node when it is the only child of an element.  Initial patch by Dan
  Kenigsberg.

- Issues #1745761, #755670, #13357, #12629, #1200313: HTMLParser now correctly
  handles non-valid attributes, including adjacent and unquoted attributes.

- Issue #13373: multiprocessing.Queue.get() could sometimes block indefinitely
  when called with a timeout.  Patch by Arnaud Ysmal.

- Issue #3067: Enhance the documentation and docstring of
  locale.setlocale().

- Issue #13254: Fix Maildir initialization so that maildir contents
  are read correctly.

- Issue #13140: Fix the daemon_threads attribute of ThreadingMixIn.

- Issue #2892: preserve iterparse events in case of SyntaxError.

- Issue #670664: Fix HTMLParser to correctly handle the content of
  ``<script>...</script>`` and ``<style>...</style>``.

- Issue #10817: Fix urlretrieve function to raise ContentTooShortError even
  when reporthook is None. Patch by Jyrki Pulliainen.

- Issue #7334: close source files on ElementTree.parse and iterparse.

- Issue #13232: logging: Improved logging of exceptions in the presence of
  multiple encodings.

- Issue #10332: multiprocessing: fix a race condition when a Pool is closed
  before all tasks have completed.

- Issue #1548891: The cStringIO.StringIO() constructor now encodes unicode
  arguments with the system default encoding just like the write() method
  does, instead of converting it to a raw buffer.  This also fixes handling of
  unicode input in the shlex module (#6988, #1170).

- Issue #9168: now smtpd is able to bind privileged port.

- Issue #12529: fix cgi.parse_header issue on strings with double-quotes and
  semicolons together. Patch by Ben Darnell and Petri Lehtinen.

- Issue #6090: zipfile raises a ValueError when a document with a timestamp
  earlier than 1980 is provided. Patch contributed by Petri Lehtinen.

- Issue #13194: zlib.compressobj().copy() and zlib.decompressobj().copy() are
  now available on Windows.

- Issue #13114: Fix the distutils commands check and register when the
  long description is a Unicode string with non-ASCII characters.

- Issue #7367: Fix pkgutil.walk_paths to skip directories whose
  contents cannot be read.

- Issue #7425: Prevent pydoc -k failures due to module import errors.
  (Backport to 2.7 of existing 3.x fix)

- Issue #13099: Fix sqlite3.Cursor.lastrowid under a Turkish locale.
  Reported and diagnosed by Thomas Kluyver.

- Issue #7689: Allow pickling of dynamically created classes when their
  metaclass is registered with copy_reg.  Patch by Nicolas M. Thiéry and
  Craig Citro.

- Issue #13058: ossaudiodev: fix a file descriptor leak on error. Patch by
  Thomas Jarosch.

- Issue #12931: xmlrpclib now encodes Unicode URI to ISO-8859-1, instead of
  failing with a UnicodeDecodeError.

- Issue #8933: distutils' PKG-INFO files will now correctly report
  Metadata-Version: 1.1 instead of 1.0 if a Classifier or Download-URL field is
  present.

- Issue #8286: The distutils command sdist will print a warning message instead
  of crashing when an invalid path is given in the manifest template.

- Issue #12841: tarfile unnecessarily checked the existence of numerical user
  and group ids on extraction. If one of them did not exist the respective id
  of the current user (i.e. root) was used for the file and ownership
  information was lost.

- Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
  now respect a --skip-build option given to bdist.

- Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
  greater than FD_SETSIZE.

- Issue #12839: Fix crash in zlib module due to version mismatch.
  Fix by Richard M. Tew.

- Issue #12786: Set communication pipes used by subprocess.Popen CLOEXEC to
  avoid them being inherited by other subprocesses.

- Issue #4106: Fix occasional exceptions printed out by multiprocessing on
  interpreter shutdown.

- Issue #11657: Fix sending file descriptors over 255 over a multiprocessing
  Pipe.

- Issue #12213: Fix a buffering bug with interleaved reads and writes that
  could appear on io.BufferedRandom streams.

- Issue #12326: sys.platform is now always 'linux2' on Linux, even if Python
  is compiled on Linux 3.

- Issue #13007: whichdb should recognize gdbm 1.9 magic numbers.

- Issue #9173: Let shutil._make_archive work if the logger argument is None.

- Issue #12650: Fix a race condition where a subprocess.Popen could leak
  resources (FD/zombie) when killed at the wrong time.

- Issue #12752: Fix regression which prevented locale.normalize() from
  accepting unicode strings.

- Issue #12683: urlparse updated to include svn as schemes that uses relative
  paths. (svn from 1.5 onwards support relative path).

- Issue #11933: Fix incorrect mtime comparison in distutils.

- Issues #11104, #8688: Fix the behavior of distutils' sdist command with
  manually-maintained MANIFEST files.

- Issue #8887: "pydoc somebuiltin.somemethod" (or help('somebuiltin.somemethod')
  in Python code) now finds the doc of the method.

- Issue #12603: Fix pydoc.synopsis() on files with non-negative st_mtime.

- Issue #12514: Use try/finally to assure the timeit module restores garbage
  collections when it is done.

- Issue #12607: In subprocess, fix issue where if stdin, stdout or stderr is
  given as a low fd, it gets overwritten.

- Issue #12102: Document that buffered files must be flushed before being used
  with mmap. Patch by Steffen Daode Nurpmeso.

- Issue #12560: Build libpython.so on OpenBSD. Patch by Stefan Sperling.

- Issue #1813: Fix codec lookup and setting/getting locales under Turkish
  locales.

- Issue #10883: Fix socket leaks in urllib when using FTP.

- Issue #12592: Make Python build on OpenBSD 5 (and future major releases).

- Issue #12372: POSIX semaphores are broken on AIX: don't use them.

- Issue #12571: Add a plat-linux3 directory mirroring the plat-linux2
  directory, so that "import DLFCN" and other similar imports work on
  Linux 3.0.

- Issue #7484: smtplib no longer puts <> around addresses in VRFY and EXPN
  commands; they aren't required and in fact postfix doesn't support that form.

- Issue #11603: Fix a crash when __str__ is rebound as __repr__.  Patch by
  Andreas Stührk.

- Issue #12502: asyncore: fix polling loop with AF_UNIX sockets.

- Issue #4376: ctypes now supports nested structures in a endian different than
  the parent structure. Patch by Vlad Riscutia.

- Issue #12493: subprocess: Popen.communicate() now also handles EINTR errors
  if the process has only one pipe.

- Issue #12467: warnings: fix a race condition if a warning is emitted at
  shutdown, if globals()['__file__'] is None.

- Issue #12352: Fix a deadlock in multiprocessing.Heap when a block is freed by
  the garbage collector while the Heap lock is held.

- Issue #9516: On Mac OS X, change Distutils to no longer globally attempt to
  check or set the MACOSX_DEPLOYMENT_TARGET environment variable for the
  interpreter process.  This could cause failures in non-Distutils subprocesses
  and was unreliable since tests or user programs could modify the interpreter
  environment after Distutils set it.  Instead, have Distutils set the
  deployment target only in the environment of each build subprocess.  It is
  still possible to globally override the default by setting
  MACOSX_DEPLOYMENT_TARGET before launching the interpreter; its value must be
  greater or equal to the default value, the value with which the interpreter
  was built.

- Issue #11802:  The cache in filecmp now has a maximum size of 100 so that
  it won't grow without bound.

- Issue #12404: Remove C89 incompatible code from mmap module. Patch by Akira
  Kitada.

- Issue #11700: mailbox proxy object close methods can now be called multiple
  times without error, and _ProxyFile now closes the wrapped file.

- Issue #12133: AbstractHTTPHandler.do_open() of urllib.request closes the HTTP
  connection if its getresponse() method fails with a socket error. Patch
  written by Ezio Melotti.

- Issue #9284: Allow inspect.findsource() to find the source of doctest
  functions.

- Issue #10694: zipfile now ignores garbage at the end of a zipfile.

- Issue #11583: Speed up os.path.isdir on Windows by using GetFileAttributes
  instead of os.stat.

- Issue #12080: Fix a performance issue in Decimal._power_exact that caused
  some corner-case Decimal.__pow__ calls to take an unreasonably long time.

- Named tuples now work correctly with vars().

- sys.setcheckinterval() now updates the current ticker count as well as
  updating the check interval, so if the user decreases the check interval,
  the ticker doesn't have to wind down to zero from the old starting point
  before the new interval takes effect.  And if the user increases the
  interval, it makes sure the new limit takes effect right away rather have an
  early task switch before recognizing the new interval.

- Issue #12085: Fix an attribute error in subprocess.Popen destructor if the
  constructor has failed, e.g. because of an undeclared keyword argument. Patch
  written by Oleg Oshmyan.

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

- Issue #9041: An issue in ctypes.c_longdouble, ctypes.c_double, and
  ctypes.c_float that caused an incorrect exception to be returned in the
  case of overflow has been fixed.

- bsddb module: Erratic behaviour of "DBEnv->rep_elect()" because a typo.
  Possible crash.

- Issue #13774: json: Fix a SystemError when a bogus encoding is passed to
  json.loads().

- Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by
  Vilmos Nebehaj.

- Issue #13159: FileIO, BZ2File, and the built-in file class now use a
  linear-time buffer growth strategy instead of a quadratic one.

- Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle
  would be finalized after the reference to its underlying BufferedRWPair's
  writer got cleared by the GC.

- Issue #12881: ctypes: Fix segfault with large structure field names.

- Issue #13013: ctypes: Fix a reference leak in PyCArrayType_from_ctype.
  Thanks to Suman Saha for finding the bug and providing a patch.

- Issue #13022: Fix: _multiprocessing.recvfd() doesn't check that
  file descriptor was actually received.

- Issue #12483: ctypes: Fix a crash when the destruction of a callback
  object triggers the garbage collector.

- Issue #12950: Fix passing file descriptors in multiprocessing, under
  OpenIndiana/Illumos.

- Issue #12764: Fix a crash in ctypes when the name of a Structure field is not
  a string.

- Issue #9651: Fix a crash when ctypes.create_string_buffer(0) was passed to
  some functions like file.write().

- Issue #10309: Define _GNU_SOURCE so that mremap() gets the proper
  signature.  Without this, architectures where sizeof void* != sizeof int are
  broken.  Patch given by Hallvard B Furuseth.

IDLE
----

- Issue #964437 Make IDLE help window non-modal.
  Patch by Guilherme Polo and Roger Serwy.

- Issue #13933: IDLE auto-complete did not work with some imported
  module, like hashlib.  (Patch by Roger Serwy)

- Issue #13506: Add '' to path for IDLE Shell when started and restarted with Restart Shell.
  Original patches by Marco Scataglini and Roger Serwy.

- Issue #4625: If IDLE cannot write to its recent file or breakpoint
  files, display a message popup and continue rather than crash.
  (original patch by Roger Serwy)

- Issue #8793: Prevent IDLE crash when given strings with invalid hex escape
  sequences.

- Issue #13296: Fix IDLE to clear compile __future__ flags on shell restart.
  (Patch by Roger Serwy)

Build
-----

- Issue #6807: Run msisupport.mak earlier.

- Issue #10580: Minor grammar change in Windows installer.

- Issue #12627: Implement PEP 394 for Python 2.7 ("python2").

- Issue #8746: Correct faulty configure checks so that os.chflags() and
  os.lchflags() are once again built on systems that support these
  functions (*BSD and OS X).  Also add new stat file flags for OS X
  (UF_HIDDEN and UF_COMPRESSED).

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

- Issue #14053: patchcheck.py ("make patchcheck") now works with MQ patches.
  Patch by Francisco Martín Brugué.

- Issue #13930: 2to3 is now able to write its converted output files to another
  directory tree as well as copying unchanged files and altering the file
  suffix.  See its new -o, -W and --add-suffix options.  This makes it more
  useful in many automated code translation workflows.

- Issue #10639: reindent.py no longer converts newlines and will raise
  an error if attempting to convert a file with mixed newlines.

- Issue #13628: python-gdb.py is now able to retrieve more frames in the Python
  traceback if Python is optimized.

Tests
-----

- Issue #15467: Move helpers for __sizeof__ tests into test_support.
  Patch by Serhiy Storchaka.

- Issue #11689: Fix a variable scoping error in an sqlite3 test.
  Initial patch by Torsten Landschoff.

- Issue #10881: Fix test_site failures with OS X framework builds.

- Issue #13901: Prevent test_distutils failures on OS X with --enable-shared.

- Issue #13304: Skip test case if user site-packages disabled (-s or
  PYTHONNOUSERSITE).  (Patch by Carl Meyer)

- Issue #13218: Fix test_ssl failures on Debian/Ubuntu.

- Issue #12821: Fix test_fcntl failures on OpenBSD 5.

- Issue #12331: The test suite for lib2to3 can now run from an installed
  Python.

- Issue #12549: Correct test_platform to not fail when OS X returns 'x86_64'
  as the processor type on some Mac systems.

- Skip network tests when getaddrinfo() returns EAI_AGAIN, meaning a temporary
  failure in name resolution.

- Issue #11812: Solve transient socket failure to connect to 'localhost'
  in test_telnetlib.py.

- Solved a potential deadlock in test_telnetlib.py. Related to issue #11812.

- Avoid failing in test_robotparser when mueblesmoraleda.com is flaky and
  an overzealous DNS service (e.g. OpenDNS) redirects to a placeholder
  Web site.

- Avoid failing in test_urllibnet.test_bad_address when some overzealous
  DNS service (e.g. OpenDNS) resolves a non-existent domain name.  The test
  is now skipped instead.

- Issue #8716: Avoid crashes caused by Aqua Tk on OSX when attempting to run
  test_tk or test_ttk_guionly under a username that is not currently logged
  in to the console windowserver (as may be the case under buildbot or ssh).

- Issue #12141: Install a copy of template C module file so that
  test_build_ext of test_distutils is no longer silently skipped when
  run outside of a build directory.

- Issue #8746: Add additional tests for os.chflags() and os.lchflags().
  Patch by Garrett Cooper.

- Issue #10736: Fix test_ttk test_widgets failures with Cocoa Tk 8.5.9
  on Mac OS X.  (Patch by Ronald Oussoren)

- Issue #12057: Add tests for ISO 2022 codecs (iso2022_jp, iso2022_jp_2,
  iso2022_kr).

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

- Issues #13491 and #13995: Fix many errors in sqlite3 documentation.
  Initial patch for #13491 by Johannes Vogel.

- Issue #13402: Document absoluteness of sys.executable.

- Issue #13883: PYTHONCASEOK also works on OS X, OS/2, and RiscOS.

- Issue #2134: The tokenize documentation has been clarified to explain why
  all operator and delimiter tokens are treated as token.OP tokens.

- Issue #13513: Fix io.IOBase documentation to correctly link to the
  io.IOBase.readline method instead of the readline module.

- Issue #13237: Reorganise subprocess documentation to emphasise convenience
  functions and the most commonly needed arguments to Popen.

- Issue #13141: Demonstrate recommended style for SocketServer examples.


What's New in Python 2.7.2?
===========================

*Release date: 2011-06-11*

Library
-------

- Issue #12009: Fixed regression in netrc file comment handling.

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

- Issue #1221: Make pyexpat.__version__ equal to the Python version.


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

*Release date: 2011-05-29*

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

- Issue #9670: Increase the default stack size for secondary threads on
  Mac OS X and FreeBSD to reduce the chances of a crash instead of a
  "maximum recursion depth" RuntimeError exception.
  (patch by Ronald Oussoren)

- Correct lookup of __dir__ on objects. This allows old-style classes to have
  __dir__. It also causes errors besides AttributeError found on lookup to be
  propagated.

- Issue #1195: Fix input() if it is interrupted by CTRL+d and then CTRL+c,
  clear the end-of-file indicator after CTRL+d.

- Issue #8651: PyArg_Parse*() functions raise an OverflowError if the file
  doesn't have PY_SSIZE_T_CLEAN define and the size doesn't fit in an int
  (length bigger than 2^31-1 bytes).

- Issue #8651: Fix "z#" format of PyArg_Parse*() function: the size was not
  written if PY_SSIZE_T_CLEAN is defined.

- Issue #9756: When calling a method descriptor or a slot wrapper descriptor,
  the check of the object type doesn't read the __class__ attribute anymore.
  Fix a crash if a class override its __class__ attribute (e.g. a proxy of the
  str type). Patch written by Andreas Stührk.

- Issue #10517: After fork(), reinitialize the TLS used by the PyGILState_*
  APIs, to avoid a crash with the pthread implementation in RHEL 5.  Patch
  by Charles-François Natali.

- Issue #6780: fix starts/endswith error message to mention that tuples are
  accepted too.

- Issue #5057: fix a bug in the peepholer that led to non-portable pyc files
  between narrow and wide builds while optimizing BINARY_SUBSCR on non-BMP
  chars (e.g. u"\U00012345"[0]).

- Issue #11650: PyOS_StdioReadline() retries fgets() if it was interrupted
  (EINTR), for example if the program is stopped with CTRL+z on Mac OS X. Patch
  written by Charles-Francois Natali.

- Issue #11144: Ensure that int(a_float) returns an int whenever possible.
  Previously, there were some corner cases where a long was returned even
  though the result was within the range of an int.

- Issue #11450: Don't truncate hg version info in Py_GetBuildInfo() when
  there are many tags (e.g. when using mq).  Patch by Nadeem Vawda.

- Issue #10451: memoryview objects could allow to mutate a readable buffer.
  Initial patch by Ross Lagerwall.

- Issue #10892: Don't segfault when trying to delete __abstractmethods__ from a
  class.

- Issue #8020: Avoid a crash where the small objects allocator would read
  non-Python managed memory while it is being modified by another thread.
  Patch by Matt Bandy.

- Issue #11004: Repaired edge case in deque.count().

- Issue #8278: On Windows and with a NTFS filesystem, os.stat() and os.utime()
  can now handle dates after 2038.

- Issue #4236: Py_InitModule4 now checks the import machinery directly
  rather than the Py_IsInitialized flag, avoiding a Fatal Python
  error in certain circumstances when an import is done in __del__.

- Issue #11828: startswith and endswith don't accept None as slice index.
  Patch by Torsten Becker.

- Issue #10674: Remove unused 'dictmaker' rule from grammar.

- Issue #10596: Fix float.__mod__ to have the same behaviour as
  float.__divmod__ with respect to signed zeros.  -4.0 % 4.0 should be
  0.0, not -0.0.

- Issue #11386: bytearray.pop() now throws IndexError when the bytearray is
  empty, instead of OverflowError.

Library
-------

- Issue #12161: Cause StringIO.getvalue() to raise a ValueError when used on a
  closed StringIO instance.

- Issue #12182: Fix pydoc.HTMLDoc.multicolumn() if Python uses the new (true)
  division (python -Qnew). Patch written by Ralf W. Grosse-Kunstleve.

- Issue #12175: RawIOBase.readall() now returns None if read() returns None.

- Issue #12175: FileIO.readall() now raises a ValueError instead of an IOError
  if the file is closed.

- Issue #1441530: In imaplib, use makefile() to wrap the SSL socket to avoid
  heap fragmentation and MemoryError with some malloc implementations.

- Issue #12100: Don't reset incremental encoders of CJK codecs at each call to
  their encode() method anymore, but continue to call the reset() method if the
  final argument is True.

- Issue #12124: zipimport doesn't keep a reference to zlib.decompress() anymore
  to be able to unload the module.

- Issue #10154, #10090: change the normalization of UTF-8 to "UTF-8" instead
  of "UTF8" in the locale module as the latter is not supported MacOSX and OpenBSD.

- Issue #9516: avoid errors in sysconfig when MACOSX_DEPLOYMENT_TARGET is
  set in shell.

- Issue #12050: zlib.decompressobj().decompress() now clears the unconsumed_tail
  attribute when called without a max_length argument.

- Issue #12062: In the `io` module, fix a flushing bug when doing a certain
  type of I/O sequence on a file opened in read+write mode (namely: reading,
  seeking a bit forward, writing, then seeking before the previous write but
  still within buffered data, and writing again).

- Issue #8498: In socket.accept(), allow to specify 0 as a backlog value in
  order to accept exactly one connection.  Patch by Daniel Evers.

- Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional.

- Issue #11927: SMTP_SSL now uses port 465 by default as documented.  Patch
  by Kasun Herath.

- Issue #11999: fixed sporadic sync failure mailbox.Maildir due to its trying to
  detect mtime changes by comparing to the system clock instead of to the
  previous value of the mtime.

- Issue #10684: shutil.move used to delete a folder on case insensitive
  filesystems when the source and destination name where the same except
  for the case.

- Issue #11982: fix json.loads('""') to return u'' rather than ''.

- Issue #11277: mmap.mmap() calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get
  around a mmap bug with sparse files. Patch written by Steffen Daode Nurpmeso.

- Issue #10761: Fix tarfile.extractall failure  when symlinked files are
  present. Initial patch by Scott Leerssen.

- Issue #11763: don't use difflib in TestCase.assertMultiLineEqual if the
  strings are too long.

- Issue #11236: getpass.getpass responds to ctrl-c or ctrl-z on terminal.

- Issue #11768: The signal handler of the signal module only calls
  Py_AddPendingCall() for the first signal to fix a deadlock on reentrant or
  parallel calls. PyErr_SetInterrupt() writes also into the wake up file.

- Issue #11875: collections.OrderedDict's __reduce__ was temporarily
  mutating the object instead of just working on a copy.

- Issue #11442: Add a charset parameter to the Content-type in SimpleHTTPServer
  to avoid XSS attacks.

- Issue #11467: Fix urlparse behavior when handling urls which contains scheme
  specific part only digits. Patch by Santoso Wijaya.

- collections.Counter().copy() now works correctly for subclasses.

- Issue #11474: Fix the bug with url2pathname() handling of '/C|/' on Windows.
  Patch by Santoso Wijaya.

- Issue #9233: Fix json.loads('{}') to return a dict (instead of a list), when
  _json is not available.

- Issue #11703: urllib2.geturl() does not return correct url when the original
  url contains #fragment.

- Issue #10019: Fixed regression in json module where an indent of 0 stopped
  adding newlines and acted instead like 'None'.

- Issue #5162: Treat services like frozen executables to allow child spawning
  from multiprocessing.forking on Windows.

- Issue #4877: Fix a segfault in xml.parsers.expat while attempting to parse
  a closed file.

- Issue #11830: Remove unnecessary introspection code in the decimal module.
  It was causing a failed import in the Turkish locale where the locale
  sensitive str.upper() method caused a name mismatch.

- Issue #8428: Fix a race condition in multiprocessing.Pool when terminating
  worker processes: new processes would be spawned while the pool is being
  shut down.  Patch by Charles-François Natali.

- Issue #7311: Fix HTMLParser to accept non-ASCII attribute values.

- Issue #10963: Ensure that subprocess.communicate() never raises EPIPE.

- Issue #11662: Make urllib and urllib2 ignore redirections if the
  scheme is not HTTP, HTTPS or FTP (CVE-2011-1521).

- Issue #11256: Fix inspect.getcallargs on functions that take only keyword
  arguments.

- Issue #11696: Fix ID generation in msilib.

- Issue #9696: Fix exception incorrectly raised by xdrlib.Packer.pack_int when
  trying to pack a negative (in-range) integer.

- Issue #11675: multiprocessing.[Raw]Array objects created from an integer size
  are now zeroed on creation.  This matches the behaviour specified by the
  documentation.

- Issue #7639: Fix short file name generation in bdist_msi.

- Issue #11666: let help() display named tuple attributes and methods
  that start with a leading underscore.

- Issue #11673: Fix multiprocessing Array and RawArray constructors to accept a
  size of type 'long', rather than only accepting 'int'.

- Issue #10042: Fixed the total_ordering decorator to handle cross-type
  comparisons that could lead to infinite recursion.

- Issue #10979: unittest stdout buffering now works with class and module
  setup and teardown.

- Issue #11569: use absolute path to the sysctl command in multiprocessing to
  ensure that it will be found regardless of the shell PATH. This ensures
  that multiprocessing.cpu_count works on default installs of MacOSX.

- Issue #11500: Fixed a bug in the os x proxy bypass code for fully qualified
  IP addresses in the proxy exception list.

- Issue #11131: Fix sign of zero in plus and minus operations when
  the context rounding mode is ROUND_FLOOR.

- Issue #5622: Fix curses.wrapper to raise correct exception if curses
  initialization fails.

- Issue #11391: Writing to a mmap object created with
  ``mmap.PROT_READ|mmap.PROT_EXEC`` would segfault instead of raising a
  TypeError.  Patch by Charles-François Natali.

- Issue #11306: mailbox in certain cases adapts to an inability to open
  certain files in read-write mode.  Previously it detected this by
  checking for EACCES, now it also checks for EROFS.

- Issue #11265: asyncore now correctly handles EPIPE, EBADF and EAGAIN errors
  on accept(), send() and recv().

- Issue #11326: Add the missing connect_ex() implementation for SSL sockets,
  and make it work for non-blocking connects.

- Issue #10956: Buffered I/O classes retry reading or writing after a signal
  has arrived and the handler returned successfully.

- Issue #10680: Fix mutually exclusive arguments for argument groups in
  argparse.

- Issue #4681: Allow mmap() to work on file sizes and offsets larger than
  4GB, even on 32-bit builds.  Initial patch by Ross Lagerwall, adapted for
  32-bit Windows.

- Issue #10360: In WeakSet, do not raise TypeErrors when testing for
  membership of non-weakrefable objects.

- Issue #10549: Fix pydoc traceback when text-documenting certain classes.

- Issue #940286: pydoc.Helper.help() ignores input/output init parameters.

- Issue #11171: Fix detection of config/Makefile when --prefix !=
  --exec-prefix, which caused Python to not start.

- Issue #11116: any error during addition of a message to a mailbox now causes
  a rollback, instead of leaving the mailbox partially modified.

- Issue #8275: Fix passing of callback arguments with ctypes under Win64.
  Patch by Stan Mihai.

- Issue #10949: Improved robustness of rotating file handlers.

- Issue #10955: Fix a potential crash when trying to mmap() a file past its
  length.  Initial patch by Ross Lagerwall.

- Issue #10898: Allow compiling the posix module when the C library defines
  a symbol named FSTAT.

- Issue #10916: mmap should not segfault when a file is mapped using 0 as
  length and a non-zero offset, and an attempt to read past the end of file
  is made (IndexError is raised instead).  Patch by Ross Lagerwall.

- Issue #10875: Update Regular Expression HOWTO; patch by 'SilentGhost'.

- Issue #10827: Changed the rules for 2-digit years.  The time.asctime
  function will now format any year when ``time.accept2dyear`` is
  false and will accept years >= 1000 otherwise.  The year range
  accepted by ``time.mktime`` and ``time.strftime`` is still system
  dependent, but ``time.mktime`` will now accept full range supported
  by the OS.  Conversion of 2-digit years to 4-digit is deprecated.

- Issue #10869: Fixed bug where ast.increment_lineno modified the root
  node twice.

- Issue #7858: Raise an error properly when os.utime() fails under Windows
  on an existing file.

- Issue #3839: wsgiref should not override a Content-Length header set by
  the application.  Initial patch by Clovis Fabricio.

- Issue #10806, issue #9905: Fix subprocess pipes when some of the standard
  file descriptors (0, 1, 2) are closed in the parent process.  Initial
  patch by Ross Lagerwall.

- Issue #4662: os.tempnam(), os.tmpfile() and os.tmpnam() now raise a py3k
  DeprecationWarning.

- Subclasses of collections.OrderedDict now work correctly with __missing__.

- Issue #10753 - Characters ';', '=' and ',' in the PATH_INFO environment
  variable won't be quoted when the URI is constructed by the wsgiref.util 's
  request_uri method. According to RFC 3986, these characters can be a part of
  params in PATH component of URI and need not be quoted.

- Issue #10738: Fix webbrowser.Opera.raise_opts

- Issue #9824: SimpleCookie now encodes , and ; in values to cater to how
  browsers actually parse cookies.

- Issue #1379416: eliminated a source of accidental unicode promotion in
  email.header.Header.encode.

- Issue #5258/#10642: if site.py encounters a .pth file that generates an error,
  it now prints the filename, line number, and traceback to stderr and skips
  the rest of that individual file, instead of stopping processing entirely.

- Issue #10750: The ``raw`` attribute of buffered IO objects is now read-only.

- Issue #10242: unittest.TestCase.assertItemsEqual makes too many assumptions
  about input.

- Issue #10611: SystemExit should not cause a unittest test run to exit.

- Issue #6791: Limit header line length (to 65535 bytes) in http.client,
  to avoid denial of services from the other party.

- Issue #9907: Fix tab handling on OSX when using editline by calling
  rl_initialize first, then setting our custom defaults, then reading .editrc.

- Issue #4188: Avoid creating dummy thread objects when logging operations
  from the threading module (with the internal verbose flag activated).

- Issue #9721: Fix the behavior of urljoin when the relative url starts with a
  ';' character. Patch by Wes Chow.

- Issue #10714: Limit length of incoming request in http.server to 65536 bytes
  for security reasons.  Initial patch by Ross Lagerwall.

- Issue #9558: Fix distutils.command.build_ext with VS 8.0.

- Issue #10695: passing the port as a string value to telnetlib no longer
  causes debug mode to fail.

- Issue #10478: Reentrant calls inside buffered IO objects (for example by
  way of a signal handler) now raise a RuntimeError instead of freezing the
  current process.

- Issue #10497: Fix incorrect use of gettext in argparse.

- Issue #10464: netrc now correctly handles lines with embedded '#' characters.

- Issue #1731717: Fixed the problem where subprocess.wait() could cause an
  OSError exception when The OS had been told to ignore SIGCLD in our process
  or otherwise not wait for exiting child processes.

- Issue #9509: argparse now properly handles IOErrors raised by
  argparse.FileType.

- Issue #9348: Raise an early error if argparse nargs and metavar don't match.

- Issue #8982: Improve the documentation for the argparse Namespace object.

- Issue #9343: Document that argparse parent parsers must be configured before
  their children.

- Issue #9026: Fix order of argparse sub-commands in help messages.

- Issue #9347: Fix formatting for tuples in argparse type= error messages.

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

- Stop using the old interface for providing methods and attributes in the _sre
  module. Among other things, this gives these classes ``__class__``
  attributes. (See #12099)

- Issue #10169: Fix argument parsing in socket.sendto() to avoid error masking.

- Issue #12051: Fix segfault in json.dumps() while encoding highly-nested
  objects using the C accelerations.

- Issue #12017: Fix segfault in json.loads() while decoding highly-nested
  objects using the C accelerations.

- Issue #1838: Prevent segfault in ctypes, when _as_parameter_ on a class is set
  to an instance of the class.

- Issue #678250: Make mmap flush a noop on ACCESS_READ and ACCESS_COPY.

IDLE
----

- Issue #11718: IDLE's open module dialog couldn't find the __init__.py
  file in a package.

- Issue #12590: IDLE editor window now always displays the first line
  when opening a long file.  With Tk 8.5, the first line was hidden.

- Issue #11088: don't crash when using F5 to run a script in IDLE on MacOSX
  with Tk 8.5.

- Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the
  menu accelerators for Open Module, Go to Line, and New Indent Width.
  The accelerators still work but no longer appear in the menu items.

- Issue #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5, rather
  than the currently problematic Apple-supplied one, when running with the
  64-/32-bit installer variant.

- Issue #11052: Correct IDLE menu accelerators on Mac OS X for Save
  commands.

- Issue #6075: IDLE on Mac OS X now works with both Carbon AquaTk and
  Cocoa AquaTk.

- Issue #10404: Use ctl-button-1 on OSX for the context menu in Idle.

- Issue #10107: Warn about unsaved files in IDLE on OSX.

- Issue #10406: Enable Rstrip IDLE extension on OSX (just like on other
  platforms).

Build
-----

- Issue #11217: For 64-bit/32-bit Mac OS X universal framework builds,
  ensure "make install" creates symlinks in --prefix bin for the "-32"
  files in the framework bin directory like the installer does.

- Issue #11411: Fix 'make DESTDIR=' with a relative destination.

- Issue #10709: Add updated AIX notes in Misc/README.AIX.

- Issue #11184: Fix large-file support on AIX.

- Issue #941346: Fix broken shared library build on AIX.

- Issue #11268: Prevent Mac OS X Installer failure if Documentation
  package had previously been installed.

- Issue #11079: The /Applications/Python x.x folder created by the Mac
  OS X installers now includes a link to the installed documentation.

- Issue #11054: Allow Mac OS X installer builds to again work on 10.5 with
  the system-provided Python.

- Issue #10843: Update third-party library versions used in OS X
  32-bit installer builds: bzip2 1.0.6, readline 6.1.2, SQLite 3.7.4
  (with FTS3/FTS4 and RTREE enabled), and ncursesw 5.5 (wide-char
  support enabled).

- Don't run pgen twice when using make -j.

- Issue #7716: Under Solaris, don't assume existence of /usr/xpg4/bin/grep in
  the configure script but use $GREP instead.  Patch by Fabian Groffen.

- Issue #10475: Don't hardcode compilers for LDSHARED/LDCXXSHARED on NetBSD
  and DragonFly BSD.  Patch by Nicolas Joly.

- Issue #10655: Fix the build on PowerPC on Linux with GCC when building with
  timestamp profiling (--with-tsc): the preprocessor test for the PowerPC
  support now looks for "__powerpc__" as well as "__ppc__": the latter seems to
  only be present on OS X; the former is the correct one for Linux with GCC.

- Issue #1099: Fix the build on MacOSX when building a framework with pydebug
  using GCC 4.0.

Tests
-----

- Issue #11164: Remove obsolete allnodes test from minidom test.

- Issue #12205: Fix test_subprocess failure due to uninstalled test data.

- Issue #5723: Improve json tests to be executed with and without accelerations.

- Issue #11910: Fix test_heapq to skip the C tests when _heapq is missing.

- Fix test_startfile to wait for child process to terminate before finishing.

- Issue #11719: Fix message about unexpected test_msilib skip on non-Windows
  platforms. Patch by Nadeem Vawda.

- Issue #7108: Fix test_commands to not fail when special attributes ('@'
  or '.') appear in 'ls -l' output.

- Issue #11490: test_subprocess:test_leaking_fds_on_error no longer gives a
  false positive if the last directory in the path is inaccessible.

- Issue #10822: Fix test_posix:test_getgroups failure under Solaris.  Patch
  by Ross Lagerwall.

- Issue #6293: Have regrtest.py echo back sys.flags.  This is done by default
  in whole runs and enabled selectively using ``--header`` when running an
  explicit list of tests.  Original patch by Collin Winter.

- Issue #775964: test_grp now skips YP/NIS entries instead of failing when
  encountering them.

- Issue #7110: regrtest now sends test failure reports and single-failure
  tracebacks to stderr rather than stdout.


What's New in Python 2.7.1?
===========================

*Release date: 2010-11-27*

Library
-------

- Issue #2236: distutils' mkpath ignored the mode parameter.

- Fix typo in one sdist option (medata-check).

- Issue #10323: itertools.islice() now consumes the minimum number of
  inputs before stopping.  Formerly, the final state of the underlying
  iterator was undefined.

- Issue #10565: The collections.Iterator ABC now checks for both
  ``__iter__`` and ``next``.

- Issue #10092: Properly reset locale in calendar.Locale*Calendar classes.

- Issue #10459: Update CJK character names to Unicode 5.2.

- Issue #6098: Don't claim DOM level 3 conformance in minidom.

- Issue #10561: In pdb, clear the breakpoints by the breakpoint number.

- Issue #5762: Fix AttributeError raised by ``xml.dom.minidom`` when an empty
  XML namespace attribute is encountered.

- Issue #1710703: Write structures for an empty ZIP archive when a ZipFile is
  created in modes 'a' or 'w' and then closed without adding any files. Raise
  BadZipfile (rather than IOError) when opening small non-ZIP files.

- Issue #4493: urllib2 adds '/' in front of path components which does not
  start with '/. Common behavior exhibited by browsers and other clients.

- Issue #10407: Fix one NameError in distutils.

- Issue #10198: fix duplicate header written to wave files when writeframes()
  is called without data.

- Issue #10467: Fix BytesIO.readinto() after seeking into a position after the
  end of the file.

- Issue #5111: IPv6 Host in the Header is wrapped inside [ ]. Patch by Chandru.

IDLE
----

- Issue #6378: idle.bat now runs with the appropriate Python version rather than
  the system default. Patch by Sridhar Ratnakumar.

Build
-----

- Backport r83399 to allow test_distutils to pass on installed versions.

- Issue #1303434: Generate ZIP file containing all PDBs.

Tests
-----

- Issue #9424: Replace deprecated assert* methods in the Python test suite.

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

- Issue #10299: List the built-in functions in a table in functions.rst.


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

*Release date: 2010-11-13*

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

- Issue #10221: dict.pop(k) now has a key error message that includes the
  missing key (same message d[k] returns for missing keys).

- Issue #10125: Don't segfault when the iterator passed to
  ``file.writelines()`` closes the file.

- Issue #10186: Fix the SyntaxError caret when the offset is equal to the
  length of the offending line.

- Issue #9997: Don't let the name "top" have special significance in scope
  resolution.

- Issue #9862: Compensate for broken PIPE_BUF in AIX by hard coding
  its value as the default 512 when compiling on AIX.

- Issue #9675: CObject use is marked as a Py3k warning, not a deprecation
  warning.

- Issue #10068: Global objects which have reference cycles with their module's
  dict are now cleared again. This causes issue #7140 to appear again.

- Issue #9869: Make long() and PyNumber_Long return something of type
  long for a class whose __long__ method returns a plain int.  This
  fixes an interpreter crash when initializing an instance of a long
  subclass from an object whose __long__ method returns a plain int.

- Issue #10006: type.__abstractmethods__ now raises an AttributeError.

- Issue #9797: pystate.c wrongly assumed that zero couldn't be a valid
  thread-local storage key.

- Issue #4947: The write() method of sys.stdout and sys.stderr uses their
  encoding and errors attributes instead of using utf-8 in strict mode, to get
  the same behaviour than the print statement.

- Issue #9737: Fix a crash when trying to delete a slice or an item from
  a memoryview object.

- Restore GIL in nis_cat in case of error.

- Issue #9688: __basicsize__ and __itemsize__ must be accessed as Py_ssize_t.

- Issue #8530: Prevent stringlib fastsearch from reading beyond the front
  of an array.

- Issue #83755:  Implicit set-to-frozenset conversion was not thread-safe.

- Issue #9416: Fix some issues with complex formatting where the
  output with no type specifier failed to match the str output:

    - format(complex(-0.0, 2.0), '-') omitted the real part from the output,
    - format(complex(0.0, 2.0), '-') included a sign and parentheses.

- Issue #7616: Fix copying of overlapping memoryview slices with the Intel
  compiler.

Library
-------

- Issue #9926: Wrapped TestSuite subclass does not get __call__ executed

- Issue #4471: Properly shutdown socket in IMAP.shutdown().  Patch by
  Lorenzo M. Catucci.

- Issue #10126: Fix distutils' test_build when Python was built with
  --enable-shared.

- Fix typo in one sdist option (medata-check).

- Issue #9199: Fix incorrect use of distutils.cmd.Command.announce.

- Issue #1718574: Fix options that were supposed to accept arguments but did
  not in build_clib.

- Issue #9281: Prevent race condition with mkdir in distutils.  Patch by
  Arfrever.

- Issue #10229: Fix caching error in gettext.

- Issue #10252: Close file objects in a timely manner in distutils code and
  tests.  Patch by Brian Brazil, completed by Éric Araujo.

- Issue #10311: The signal module now restores errno before returning from
  its low-level signal handler.  Patch by Hallvard B Furuseth.

- Issue #10038: json.loads() on str should always return unicode (regression
  from Python 2.6).  Patch by Walter Dörwald.

- Issue #120176: Wrapped TestSuite subclass does not get __call__ executed.

- Issue #6706: asyncore accept() method no longer raises
  EWOULDBLOCK/ECONNABORTED on incomplete connection attempt but returns None
  instead.

- Issue #10266: uu.decode didn't close in_file explicitly when it was given
  as a filename.  Patch by Brian Brazil.

- Issue #10246: uu.encode didn't close file objects explicitly when filenames
  were given to it.  Patch by Brian Brazil.

- Issue #10253: FileIO leaks a file descriptor when trying to open a file
  for append that isn't seekable.  Patch by Brian Brazil.

- Issue #6105: json.dumps now respects OrderedDict's iteration order.

- Issue #9295: Fix a crash under Windows when calling close() on a file
  object with custom buffering from two threads at once.

- Issue #5027: The standard ``xml`` namespace is now understood by
  xml.sax.saxutils.XMLGenerator as being bound to
  http://www.w3.org/XML/1998/namespace.  Patch by Troy J. Farrell.

- Issue #10163: Skip unreadable registry keys during mimetypes
  initialization.

- Issue #5117: Fixed root directory related issue on posixpath.relpath() and
  ntpath.relpath().

- Issue #9409: Fix the regex to match all kind of filenames, for interactive
  debugging in doctests.

- Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the
  current directory was deleted. Patch written by W. Trevor King.

- Issue #10045: Improved performance when writing after seeking past the
  end of the "file" in cStringIO.

- Issue #9948: Fixed problem of losing filename case information.

- Issue #9437: Fix building C extensions with non-default LDFLAGS.

- Issue #9759: GzipFile now raises ValueError when an operation is attempted
  after the file is closed.  Patch by Jeffrey Finkelstein.

- Issue #9042: Fix interaction of custom translation classes and caching in
  gettext.

- Issue #9065: tarfile no longer uses "root" as the default for the uname and
  gname field.

- Issue #1050268: parseaddr now correctly quotes double quote and backslash
  characters that appear inside quoted strings in email addresses.

- Issue #10004: quoprimime no longer generates a traceback when confronted
  with invalid characters after '=' in a Q-encoded word.

- Issue #9950: Fix socket.sendall() crash or misbehaviour when a signal is
  received.  Now sendall() properly calls signal handlers if necessary,
  and retries sending if these returned successfully, including on sockets
  with a timeout.

- Issue #9947: logging: Fixed locking bug in stopListening.

- Issue #9945: logging: Fixed locking bugs in addHandler/removeHandler.

- Issue #9936: Fixed executable lines' search in the trace module.

- Issue #9928: Properly initialize the types exported by the bz2 module.

- Issue #9854: The default read() implementation in io.RawIOBase now
  handles non-blocking readinto() returning None correctly.

- Issue #9729: Fix the signature of SSLSocket.recvfrom() and
  SSLSocket.sendto() to match the corresponding socket methods.  Also,
  fix various SSLSocket methods to raise socket.error rather than an
  unhelpful TypeError when called on an unconnected socket.  Original patch
  by Andrew Bennetts.

- Issue #9826: OrderedDict.__repr__ can now handle self-referential
  values:   d['x'] = d.

- Issue #767645: Set os.path.supports_unicode_filenames to True on Mac OS X.

- Issue #9837: The read() method of ZipExtFile objects (as returned by
  ZipFile.open()) could return more bytes than requested.

- Issue #9825: removed __del__ from the definition of collections.OrderedDict.
  This prevents user-created self-referencing ordered dictionaries from
  becoming permanently uncollectable GC garbage.  The downside is that
  removing __del__ means that the internal doubly-linked list has to wait for
  GC collection rather than freeing memory immediately when the refcnt drops
  to zero.

- Issue #9816: random.Random.jumpahead(n) did not produce a sufficiently
  different internal state for small values of n.  Fixed by salting the
  value.

- Issue #9792: In case of connection failure, socket.create_connection()
  would swallow the exception and raise a new one, making it impossible
  to fetch the original errno, or to filter timeout errors.  Now the
  original error is re-raised.

- Issue #9758: When fcntl.ioctl() was called with mutable_flag set to True,
  and the passed buffer was exactly 1024 bytes long, the buffer wouldn't
  be updated back after the system call.  Original patch by Brian Brazil.

- Issue #1100562: Fix deep-copying of objects derived from the list and
  dict types.  Patch by Michele Orrù and Björn Lindqvist.

- Issue #7005: Fixed output of None values for RawConfigParser.write and
  ConfigParser.write.

- Issue #808164: Fixed socket.close to avoid references to globals, to
  avoid issues when socket.close is called from a __del__ method.

- Issue #2986: difflib.SequenceMatcher gets a new parameter, autojunk, which
  can be set to False to turn off the previously undocumented 'popularity'
  heuristic. Patch by Terry Reedy and Eli Bendersky

- Issue #8797: urllib2 does a retry for Basic Authentication failure instead of
  falling into recursion.

- Issue #1194222: email.utils.parsedate now returns RFC2822 compliant four
  character years even if the message contains RFC822 two character years.

- Issue #8750: Fixed MutableSet's methods to correctly handle
  reflexive operations, namely x -= x and x ^= x.

- Issue #9129: smtpd.py is vulnerable to DoS attacks deriving from missing
  error handling when accepting a new connection.

- Issue #658749: asyncore's connect() method now correctly interprets winsock
  errors.

- Issue #9501: Fixed logging regressions in cleanup code.

- Issue #9214: Set operations on KeysView or ItemsView in the collections
  module now correctly return a set.  (Patch by Eli Bendersky.)

- Issue #9617: Signals received during a low-level write operation aren't
  ignored by the buffered IO layer anymore.

- Issue #2521: Use weakrefs on for caching in the abc module, so that classes
  are not held onto after they are deleted elsewhere.

- Issue #9626: the view methods for collections.OrderedDict() were returning
  the unordered versions inherited from dict.  Those methods are now
  overridden to provide ordered views.

- Issue #8688: MANIFEST files created by distutils now include a magic
  comment indicating they are generated.  Manually maintained MANIFESTs
  without this marker will not be overwritten or removed.

- Issue #7467: when reading a file from a ZIP archive, its CRC is checked
  and a BadZipfile error is raised if it doesn't match (as used to be the
  case in Python 2.5 and earlier).

- Issue #9550: a BufferedReader could issue an additional read when the
  original read request had been satisfied, which could block indefinitely
  when the underlying raw IO channel was e.g. a socket.  Report and original
  patch by Jason V. Miller.

- Issue #9551: Don't raise TypeError when setting the value to None for
  SafeConfigParser instances constructed with allow_no_value == True.

- Issue #6915: Under Windows, os.listdir() didn't release the Global
  Interpreter Lock around all system calls.  Original patch by Ryan Kelly.

- Issue #3757: thread-local objects now support cyclic garbage collection.
  Thread-local objects involved in reference cycles will be deallocated
  timely by the cyclic GC, even if the underlying thread is still running.

- Issue #6231: Fix xml.etree.ElementInclude to include the tail of the
  current node.

- Issue #6869: Fix a refcount problem in the _ctypes extension.

- Issue5504 - ctypes should now work with systems where mmap can't be
  PROT_WRITE and PROT_EXEC.

- Fix Issue8280 - urllib2's Request method will remove fragements in the url.
  This is how it is supposed to work, wget and curl do the same.  Previous
  behavior was wrong.

- Issue #2944: asyncore doesn't handle connection refused correctly.

- Issue #3196: email header decoding is now forgiving if an RFC2047
  encoded word encoded in base64 is lacking padding.

- Issue #9444: Argparse now uses the first element of prefix_chars as
  the option character for the added 'h/help' option if prefix_chars
  does not contain a '-', instead of raising an error.

- Issue #9354: Provide getsockopt() in asyncore's file_wrapper.

- Issue #9428: Fix running scripts with the profile/cProfile modules from
  the command line.

- Issue #7781: Fix restricting stats by entry counts in the pstats
  interactive browser.

- Issue #9209: Do not crash in the pstats interactive browser on invalid
  regular expressions.

- Issue #7372: Fix pstats regression when stripping paths from profile
  data generated with the profile module.

- Issue #4108: In urllib.robotparser, if there are multiple 'User-agent: *'
  entries, consider the first one.

- Issue #8397: Raise an error when attempting to mix iteration and regular
  reads on a BZ2File object, rather than returning incorrect results.

- Issue #5294: Fix the behavior of pdb's "continue" command when called
  in the top-level debugged frame.

- Issue #5727: Restore the ability to use readline when calling into pdb
  in doctests.

- Issue #6719: In pdb, do not stop somewhere in the encodings machinery
  if the source file to be debugged is in a non-builtin encoding.

- Issue #8048: Prevent doctests from failing when sys.displayhook has
  been reassigned.

- Issue #8015: In pdb, do not crash when an empty line is entered as
  a breakpoint command.

- Issue #9448: Fix a leak of OS resources (mutexes or semaphores) when
  re-initializing a buffered IO object by calling its ``__init__`` method.

- Issue #7909: Do not touch paths with the special prefixes ``\\.\``
  or ``\\?\`` in ntpath.normpath().

- Issue #5146: Handle UID THREAD command correctly in imaplib.

- Issue #5147: Fix the header generated for cookie files written by
  http.cookiejar.MozillaCookieJar.

- Issue #8198: In pydoc, output all help text to the correct stream
  when sys.stdout is reassigned.

- Issue #7395: Fix tracebacks in pstats interactive browser.

- Issue #8230: Fix Lib/test/sortperf.py.

- Issue #1713: Fix os.path.ismount(), which returned true for symbolic links
  across devices.

- Issue #8826: Properly load old-style "expires" attribute in http.cookies.

- Issue #1690103: Fix initial namespace for code run with trace.main().

- Issue #8471: In doctest, properly reset the output stream to an empty
  string when Unicode was previously output.

- Issue #8620: when a Cmd is fed input that reaches EOF without a final
  newline, it no longer truncates the last character of the last command line.

- Issue #6213: Implement getstate() and setstate() methods of utf-8-sig and
  utf-16 incremental encoders.

- Issue #7113: Speed up loading in ConfigParser. Patch by Łukasz Langa.

- Issue #3704: cookielib was not properly handling URLs with a / in the
  parameters.

- Issue #9032: XML-RPC client retries the request on EPIPE error. The EPIPE
  error occurs when the server closes the socket and the client sends a big
  XML-RPC request.

- Issue #5542: Remove special logic that closes HTTPConnection socket on EPIPE.

- Issue #4629: getopt raises an error if an argument ends with = whereas getopt
  doesn't except a value (eg. --help= is rejected if getopt uses ['help='] long
  options).

- Issue #7895: platform.mac_ver() no longer crashes after calling os.fork()

- Issue #5395: array.fromfile() would raise a spurious EOFError when an
  I/O error occurred.  Now an IOError is raised instead.  Patch by chuck
  (Jan Hosang).

- Issue #7646: The fnmatch pattern cache no longer grows without bound.

- Issue #9136: Fix 'dictionary changed size during iteration'
  RuntimeError produced when profiling the decimal module.  This was
  due to a dangerous iteration over 'locals()' in Context.__init__.

- Fix extreme speed issue in Decimal.pow when the base is an exact
  power of 10 and the exponent is tiny (for example,
  Decimal(10) ** Decimal('1e-999999999')).

- Issue #9161: Fix regression in optparse's acceptance of unicode
  strings in add_option calls.

- Issue #9130: Fix validation of relative imports in parser module.

- Issue #9128: Fix validation of class decorators in parser module.

- Issue #9164: Ensure sysconfig handles dupblice archs while building on OSX

- Issue #9315: Fix for the trace module to record correct class name
  for tracing methods.

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

- Issue #9054: Fix a crash occurring when using the pyexpat module
  with expat version 2.0.1.

- Issue #10003: Allow handling of SIGBREAK on Windows. Fixes a regression
  introduced by issue #9324.

- Issue #8734: Avoid crash in msvcrt.get_osfhandle() when an invalid file
  descriptor is provided.  Patch by Pascal Chambon.

- Issue #7736: Release the GIL around calls to opendir() and closedir()
  in the posix module.  Patch by Marcin Bachry.

- As a result of issue #2521, the _weakref module is now compiled into the
  interpreter by default.

- Issue #9324: Add parameter validation to signal.signal on Windows in order
  to prevent crashes.

- Issue #9526: Remove some outdated (int) casts that were preventing
  the array module from working correctly with arrays of more than
  2**31 elements.

- Fix memory leak in ssl._ssl._test_decode_cert.

- Issue #8065: Fix memory leak in readline module (from failure to
  free the result of history_get_history_state()).

- Issue #9450: Fix memory leak in readline.replace_history_item and
  readline.remove_history_item for readline version >= 5.0.

- Issue #8105: Validate file descriptor passed to mmap.mmap on Windows.

- Issue #1019882: Fix IndexError when loading certain hotshot stats.

- Issue #9422: Fix memory leak when re-initializing a struct.Struct object.

- Issue #7900: The getgroups(2) system call on MacOSX behaves rather oddly
  compared to other unix systems. In particular, os.getgroups() does
  not reflect any changes made using os.setgroups() but basicly always
  returns the same information as the id command.

  os.getgroups() can now return more than 16 groups on MacOSX.

- Issue #9277: Fix bug in struct.pack for bools in standard mode
  (e.g., struct.pack('>?')):  if conversion to bool raised an exception
  then that exception wasn't properly propagated on machines where
  char is unsigned.

- Issue #7567: Don't call `setupterm' twice.

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

- Issue #7287: Demo/imputil/knee.py was removed.

- Issue #9188: The gdb extension now handles correctly narrow (UCS2) as well
  as wide (UCS4) unicode builds for both the host interpreter (embedded
  inside gdb) and the interpreter under test.

Build
-----

- Issue #8852: Allow the socket module to build on OpenSolaris.

- Issue #10054: Some platforms provide uintptr_t in inttypes.h.  Patch by
  Akira Kitada.

- Issue #10055: Make json C89-compliant in UCS4 mode.

- Issue #1633863: Don't ignore $CC under AIX.

- Issue #9810: Compile bzip2 source files in python's project file
  directly. It used to be built with bzip2's makefile.

- Issue #941346: Improve the build process under AIX and allow Python to
  be built as a shared library.  Patch by Sébastien Sablé.

- Issue #4026: Make the fcntl extension build under AIX.  Patch by Sébastien
  Sablé.

- Issue #3101: Helper functions _add_one_to_index_C() and
  _add_one_to_index_F() become _Py_add_one_to_index_C() and
  _Py_add_one_to_index_F(), respectively.

- Issue #9700: define HAVE_BROKEN_POSIX_SEMAPHORES under AIX 6.x.  Patch by
  Sébastien Sablé.

- Issue #9280: Make sharedinstall depend on sharedmods.

- Issue #9275: The OSX installer once again installs links to binaries in
  ``/usr/local/bin``.

- Issue #9392: A framework build on OSX  will once again use a versioned name
  of the ``2to3`` tool, that is you can use ``2to3-2.7`` to select the Python
  2.7 edition of 2to3.

- Issue #9701: The MacOSX installer can patch the shell profile to ensure that
  the "bin" directory inside the framework is on the shell's search path. This
  feature now also supports the ZSH shell.

- Issue #7473: avoid link errors when building a framework with a different
  set of architectures than the one that is currently installed.

Tests
-----

- Issue #9978: Wait until subprocess completes initialization. (Win32KillTests
  in test_os)

- Issue #9894: Do not hardcode ENOENT in test_subprocess.

- Issue #9323: Make test.regrtest.__file__ absolute, this was not always the
  case when running profile or trace, for example.

- Issue #9315: Added tests for the trace module.  Patch by Eli Bendersky.

- Strengthen test_unicode with explicit type checking for assertEqual tests.

- Issue #8857: Provide a test case for socket.getaddrinfo.

- Issue #7564: Skip test_ioctl if another process is attached to /dev/tty.

- Issue #8433: Fix test_curses failure with newer versions of ncurses.

- Issue #9496: Provide a test suite for the rlcompleter module.  Patch by
  Michele Orrù.

- Issue #8605: Skip test_gdb if Python is compiled with optimizations.

- Issue #9568: Fix test_urllib2_localnet on OS X 10.3.

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

- Issue #9817: Add expat COPYING file; add expat, libffi and expat licenses
  to Doc/license.rst.

- Issue #9524: Document that two CTRL* signals are meant for use only
  with os.kill.

- Issue #9255: Document that the 'test' package is for internal Python use
  only.

- Issue #7829: Document in dis that bytecode is an implementation detail.


What's New in Python 2.7?
=========================

*Release date: 2010-07-03*

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

- Prevent assignment to set literals.

Library
-------

- Issue #1868: Eliminate subtle timing issues in thread-local objects by
  getting rid of the cached copy of thread-local attribute dictionary.

- Issue #9125: Add recognition of 'except ... as ...' syntax to parser module.

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

- Issue #7673: Fix security vulnerability (CVE-2010-2089) in the audioop module,
  ensure that the input string length is a multiple of the frame size.

- Issue #9075: In the ssl module, remove the setting of a ``debug`` flag
  on an OpenSSL structure.


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

*Release date: 2010-06-20*

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

- Issue #9058: Remove assertions about INT_MAX in UnicodeDecodeError.

- Issue #8202: Previous change to ``sys.argv[0]`` handling for -m command line
  option reverted due to unintended side effects on handling of ``sys.path``.
  See tracker issue for details.

- Issue #8941: decoding big endian UTF-32 data in UCS-2 builds could crash
  the interpreter with characters outside the Basic Multilingual Plane
  (higher than 0x10000).

- In the unicode/str.format(), raise a ValueError when indexes to arguments are
  too large.

Build
-----

- Issue #8854: Fix finding Visual Studio 2008 on Windows x64.

Library
-------

- Issue #6589: cleanup asyncore.socket_map in case smtpd.SMTPServer constructor
  raises an exception.

- Issue #8959: fix regression caused by using unmodified libffi
  library on Windows.  ctypes does now again check the stack before
  and after calling foreign functions.

- Issue #8720: fix regression caused by fix for #4050 by making getsourcefile
  smart enough to find source files in the linecache.

- Issue #8986: math.erfc was incorrectly raising OverflowError for
  values between -27.3 and -30.0 on some platforms.

- Issue #8924: logging: Improved error handling for Unicode in exception text.

- Issue #8948: cleanup functions and class / module setups and teardowns are
  now honored in unittest debug methods.

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

- Issues #8909: Added the size of the bitmap used in the installer created by
  distutils' bdist_wininst. Patch by Anatoly Techtonik.

Misc
----

- Issue #8362: Add maintainers.rst: list of module maintainers


What's New in Python 2.7 Release Candidate 1?
=============================================

*Release date: 2010-06-05*

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

- Issue #8271: during the decoding of an invalid UTF-8 byte sequence, only the
  start byte and the continuation byte(s) are now considered invalid, instead
  of the number of bytes specified by the start byte.
  E.g.: '\xf1\x80AB'.decode('utf-8', 'replace') now returns u'\ufffdAB' and
  replaces with U+FFFD only the start byte ('\xf1') and the continuation byte
  ('\x80') even if '\xf1' is the start byte of a 4-bytes sequence.
  Previous versions returned a single u'\ufffd'.

- Issue #8627: Remove bogus "Overriding __cmp__ blocks inheritance of
  __hash__ in 3.x" warning.  Also fix "XXX undetected error" that
  arises from the "Overriding __eq__ blocks inheritance ..." warning
  when turned into an exception: in this case the exception simply
  gets ignored.

- Issue #8748: Fix two issues with comparisons between complex and integer
  objects.  (1) The comparison could incorrectly return True in some cases
  (2**53+1 == complex(2**53) == 2**53), breaking transivity of equality.
  (2) The comparison raised an OverflowError for large integers, leading
  to unpredictable exceptions when combining integers and complex objects
  in sets or dicts.

- Issue #5211: Implicit coercion for the complex type is now completely
  removed.  (Coercion for arithmetic operations was already removed in 2.7
  alpha 4, but coercion for rich comparisons was accidentally left in.)

- Issue #3798: Write sys.exit() message to sys.stderr to use stderr encoding
  and error handler, instead of writing to the C stderr file in utf-8

- Issue #7902: When using explicit relative import syntax, don't try implicit
  relative import semantics.

- Issue #7079: Fix a possible crash when closing a file object while using it
  from another thread.  Patch by Daniel Stutzbach.

- Issue #8868: Fix that ensures that python scripts have access to the
  Window Server again in a framework build on MacOSX 10.5 or earlier.

C-API
-----

- Issue #5753: A new C API function, :cfunc:`PySys_SetArgvEx`, allows embedders
  of the interpreter to set sys.argv without also modifying sys.path.  This
  helps fix `CVE-2008-5983
  <http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5983>`_.

Library
-------

- Issue #8302: SkipTest in unittest.TestCase.setUpClass or setUpModule is now
  reported as a skip rather than an error.

- Issue #8351: Excessively large diffs due to
  unittest.TestCase.assertSequenceEqual are no longer included in failure
  reports.

- Issue #8899: time.struct_time now has class and atribute docstrings.

- Issue #4487: email now accepts as charset aliases all codec aliases
  accepted by the codecs module.

- Issue #6470: Drop UNC prefix in FixTk.

- Issue #5610: feedparser no longer eats extra characters at the end of
  a body part if the body part ends with a \r\n.

- Issue #8833: tarfile created hard link entries with a size field != 0 by
  mistake.

- Issue #1368247: set_charset (and therefore MIMEText) now automatically
  encodes a unicode _payload to the output_charset.

- Issue #7150: Raise OverflowError if the result of adding or subtracting
  timedelta from date or datetime falls outside of the MINYEAR:MAXYEAR range.

- Issue #6662: Fix parsing of malformatted charref (&#bad;), patch written by
  Fredrik Håård

- Issue #8016: Add the CP858 codec.

- Issue #3924: Ignore cookies with invalid "version" field in cookielib.

- Issue #6268: Fix seek() method of codecs.open(), don't read or write the BOM
  twice after seek(0). Fix also reset() method of codecs, UTF-16, UTF-32 and
  StreamWriter classes.

- Issue #5640: Fix Shift-JIS incremental encoder for error handlers different
  than 'strict'.

- Issue #8782: Add a trailing newline in linecache.updatecache to the last line
  of files without one.

- Issue #8729: Return NotImplemented from ``collections.Mapping.__eq__()`` when
  comparing to a non-mapping.

- Issue #8759: Fix user paths in sysconfig for posix and os2 schemes.

- Issue #1285086: Speed up ``urllib.quote()`` and urllib.unquote for simple
  cases.

- Issue #8688: Distutils now recalculates MANIFEST every time.

- Issue #5099: The ``__del__()`` method of ``subprocess.Popen`` (and the methods
  it calls) referenced global objects, causing errors to pop up during
  interpreter shutdown.

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

- Issue #7384: If the system readline library is linked against ncurses,
  the curses module must be linked against ncurses as well. Otherwise it
  is not safe to load both the readline and curses modules in an application.

- Issue #2810: Fix cases where the Windows registry API returns
  ERROR_MORE_DATA, requiring a re-try in order to get the complete result.

- Issue #8674: Fixed a number of incorrect or undefined-behaviour-inducing
  overflow checks in the ``audioop`` module.

Tests
-----

- Issue #8889: test_support.transient_internet rewritten so that the new
  checks also work on FreeBSD, which lacks EAI_NODATA.

- Issue #8835: test_support.transient_internet() catches gaierror(EAI_NONAME)
  and gaierror(EAI_NODATA)

- Issue #7449: Skip test_socketserver if threading support is disabled

- On darwin, ``test_site`` assumed that a framework build was being used,
  leading to a failure where four directories were expected for site-packages
  instead of two in a non-framework build.

Build
-----

- Display installer warning that Windows 2000 won't be supported in future
  releases.

- Issues #1759169, #8864: Drop _XOPEN_SOURCE on Solaris, define it for
  multiprocessing only.

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

- Issue #5464: Implement plural forms in msgfmt.py.


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

*Release date: 2010-05-08*

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

- Run Clang 2.7's static analyzer for ``Objects/`` and ``Python/``.

- Issue #1533: Fix inconsistency in range function argument processing: any
  non-float non-integer argument is now converted to an integer (if possible)
  using its __int__ method.  Previously, only small arguments were treated this
  way; larger arguments (those whose __int__ was outside the range of a C long)
  would produce a TypeError.

- Issue #8202: ``sys.argv[0]`` is now set to '-m' instead of '-c' when searching
  for the module file to be executed with the -m command line option.

- Issue #7319: When -Q is used, do not silence DeprecationWarning.

- Issue #7332: Remove the 16KB stack-based buffer in
  ``PyMarshal_ReadLastObjectFromFile``, which doesn't bring any noticeable
  benefit compared to the dynamic memory allocation fallback.  Patch by
  Charles-François Natali.

- Issue #8417: Raise an OverflowError when an integer larger than sys.maxsize is
  passed to bytearray.

- Issue #7072: ``isspace(0xa0)`` is true on Mac OS X.

- Issue #8404: Fix set operations on dictionary views.

- Issue #8084: PEP 370 now conforms to system conventions for framework builds
  on MacOS X. That is, ``python setup.py install --user`` will install into
  ``~/Library/Python/2.7`` instead of ``~/.local``.

Library
-------

- Issue #8681: Make the zlib module's error messages more informative when the
  zlib itself doesn't give any detailed explanation.

- Issue #8571: Fix an internal error when compressing or decompressing a chunk
  larger than 1GB with the zlib module's compressor and decompressor objects.

- Issue #8573: asyncore ``_strerror()`` function might throw ValueError.

- Issue #8483: asyncore.dispatcher's __getattr__ method produced confusing error
  messages when accessing undefined class attributes because of the cheap
  inheritance with the underlying socket object.  The cheap inheritance has been
  deprecated.

- Issue #4265: ``shutil.copyfile()`` was leaking file descriptors when disk
  fills.  Patch by Tres Seaver.

- Issue #7755: Use an unencumbered audio file for tests.

- Issue #8621: ``uuid.uuid4()`` returned the same sequence of values in the
  parent and any children created using ``os.fork`` on Mac OS X 10.6.

- Issue #8313: ``traceback.format_exception_only()`` encodes unicode message to
  ASCII with backslashreplace error handler if ``str(value)`` failed.

- Issue #8567: Fix precedence of signals in Decimal module: when a Decimal
  operation raises multiple signals and more than one of those signals is
  trapped, the specification determines the order in which the signals should be
  handled.  In many cases this order wasn't being followed, leading to the wrong
  Python exception being raised.

- Issue #7865: The close() method of :mod:`io` objects should not swallow
  exceptions raised by the implicit flush().  Also ensure that calling close()
  several times is supported.  Patch by Pascal Chambon.

- Issue #8576: logging updated to remove usage of find_unused_port().

- Issue #4687: Fix accuracy of garbage collection runtimes displayed with
  gc.DEBUG_STATS.

- Issue #8354: The siginterrupt setting is now preserved for all signals, not
  just SIGCHLD.

- Issue #7192: ``webbrowser.get("firefox")`` now works on Mac OS X, as does
  ``webbrowser.get("safari")``.

- Issue #8577: ``distutils.sysconfig.get_python_inc()`` now makes a difference
  between the build dir and the source dir when looking for "python.h" or
  "Include".

- Issue #8464: tarfile no longer creates files with execute permissions set when
  mode="w|" is used.

- Issue #7834: Fix connect() of Bluetooth L2CAP sockets with recent versions of
  the Linux kernel.  Patch by Yaniv Aknin.

- Issue #6312: Fix http HEAD request when the transfer encoding is chunked.  It
  should correctly return an empty response now.

- Issue #7490: To facilitate sharing of doctests between 2.x and 3.x test
  suites, the ``IGNORE_EXCEPTION_DETAIL`` directive now also ignores the module
  location of the raised exception.  Based on initial patch by Lennart Regebro.

- Issue #8086: In :func:`ssl.DER_cert_to_PEM_cert()`, fix missing newline before
  the certificate footer.  Patch by Kyle VanderBeek.

- Issue #8546: Reject None given as the buffering argument to ``_pyio.open()``.

- Issue #8549: Fix compiling the _ssl extension under AIX.  Patch by Sridhar
  Ratnakumar.

- Issue #6656: Fix locale.format_string to handle escaped percents and mappings.

- Issue #2302: Fix a race condition in SocketServer.BaseServer.shutdown, where
  the method could block indefinitely if called just before the event loop
  started running.  This also fixes the occasional freezes witnessed in
  test_httpservers.

- Issue #5103: SSL handshake would ignore the socket timeout and block
  indefinitely if the other end didn't respond.

- The do_handshake() method of SSL objects now adjusts the blocking mode of the
  SSL structure if necessary (as other methods already do).

- Issue #7507: Quote "!" in pipes.quote(); it is special to some shells.

- Issue #5238: Calling makefile() on an SSL object would prevent the underlying
  socket from being closed until all objects get truely destroyed.

- Issue #7943: Fix circular reference created when instantiating an SSL socket.
  Initial patch by Péter Szabó.

- Issue #8451: Syslog module now uses basename(sys.argv[0]) instead of the
  string "python" as the *ident*.  openlog() arguments are all optional and
  keywords.

- Issue #8108: Fix the unwrap() method of SSL objects when the socket has a
  non-infinite timeout.  Also make that method friendlier with applications
  wanting to continue using the socket in clear-text mode, by disabling
  OpenSSL's internal readahead.  Thanks to Darryl Miles for guidance.

- Issue #8484: Load all ciphers and digest algorithms when initializing the _ssl
  extension, such that verification of some SSL certificates doesn't fail
  because of an "unknown algorithm".

- Issue #8437: Fix test_gdb failures, patch written by Dave Malcolm

- Issue #4814: The timeout parameter is now applied also for connections
  resulting from PORT/EPRT commands.

- Issue #8463: Add missing reference to bztar in shutil's documentation.

- Issue #8438: Remove reference to the missing "surrogateescape" encoding error
  handler from the new IO library.

- Issue #3817: ftplib.FTP.abort() method now considers 225 a valid response code
  as stated in RFC-959 at chapter 5.4.

- Issue #8279: Fix test_gdb failures.

- Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the
  available cipher list.  Helps fix test_ssl with OpenSSL 1.0.0.

- Issue #2987: RFC 2732 support for urlparse (IPv6 addresses).  Patch by Tony
  Locke and Hans Ulrich Niedermann.

- Issue #7585: difflib context and unified diffs now place a tab between
  filename and date, conforming to the 'standards' they were originally designed
  to follow.  This improves compatibility with patch tools.

- Issue #7472: Fixed typo in email.encoders module; messages using ISO-2022
  character sets will now consistently use a Content-Transfer-Encoding of 7bit
  rather than sometimes being marked as 8bit.

- Issue #8330: Fix expected output in test_gdb.

- Issue #8374: Update the internal alias table in the :mod:`locale` module to
  cover recent locale changes and additions.

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

- Issue #8644: Improved accuracy of ``timedelta.total_seconds()``.

- Use Clang 2.7's static analyzer to find places to clean up some code.

- Build the ossaudio extension on GNU/kFreeBSD.

- On Windows, ctypes does no longer check the stack before and after calling a
  foreign function.  This allows to use the unmodified libffi library.

Tests
-----

- Issue #8672: Add a zlib test ensuring that an incomplete stream can be handled
  by a decompressor object without errors (it returns incomplete uncompressed
  data).

- Issue #8490: asyncore now has a more solid test suite which actually tests its
  API.

- Issue #8576: Remove use of find_unused_port() in test_smtplib and
  test_multiprocessing.  Patch by Paul Moore.

- Issue #7449: Fix many tests to support Python compiled without thread support.
  Patches written by Jerry Seutter.

- Issue #8108: test_ftplib's non-blocking SSL server now has proper handling of
  SSL shutdowns.

Build
-----

- Issue #8625: Turn off optimization in ``--with-pydebug`` builds with gcc.
  (Optimization was unintentionally turned on in gcc --with-pydebug builds in
  2.7 beta1 as a result of the issue #1628484 fix, combined with autoconf's
  strange choice of default CFLAGS produced by AC_PROG_CC for gcc.)

- Issue #8509: Fix quoting in help strings and code snippets in configure.in.

- Issue #3646: It is now easily possible to install a Python framework into your
  home directory on Mac OS X, see Mac/README for more information.

- Issue #8510: Update to autoconf 2.65.

Misc
----

- Update the Vim syntax highlight file.


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

*Release date: 2010-04-10*

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

- Issue #7301: Add environment variable $PYTHONWARNINGS.

- Issue #8329: Don't return the same lists from select.select when no fds are
  changed.

- Issue #8259: ``1L << (2**31)`` no longer produces an 'outrageous shift error'
  on 64-bit machines.  The shift count for either left or right shift is
  permitted to be up to sys.maxsize.

- Ensure that tokenization of identifiers is not affected by locale.

- Issue #1222585: Added LDCXXSHARED for C++ support.  Patch by Arfrever.

- Raise a TypeError when trying to delete a T_STRING_INPLACE struct member.

- Issue #7994: Issue a PendingDeprecationWarning if object.__format__ is called
  with a non-empty format string. This is an effort to future-proof user
  code. If a derived class does not currently implement __format__ but later
  adds its own __format__, it would most likely break user code that had
  supplied a format string. This will be changed to a DeprecationWarning in
  Python 3.3 and it will be an error in Python 3.4.

- Issue #8268: Old-style classes (not just instances) now support weak
  references.

- Issue #8211: Save/restore CFLAGS around AC_PROG_CC in configure.in, in case it
  is set.

- Issue #1583863: An unicode subclass can now override the __unicode__ method

- Issue #6474: Make error message from passing an inadequate number of keyword
  arguments to a function correct.

- Issue #8164: Don't allow lambda functions to have a docstring.

- Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt
  (SIGINT).  If an error occurs while importing the site module, the error is
  printed and Python exits.  Initialize the GIL before importing the site
  module.

- Code objects now support weak references.

Library
-------

- Issue #5277: Fix quote counting when parsing RFC 2231 encoded parameters.

- Issue #8321: Give access to OpenSSL version numbers from the `ssl` module,
  using the new attributes `ssl.OPENSSL_VERSION`, `ssl.OPENSSL_VERSION_INFO` and
  `ssl.OPENSSL_VERSION_NUMBER`.

- Issue #8310: Allow dis to examine new style classes.

- Issue #8257: The Decimal construct now accepts a float instance directly,
  converting that float to a Decimal of equal value:

     >>> Decimal(1.1)
     Decimal('1.100000000000000088817841970012523233890533447265625')

- collections.Counter() now supports a subtract() method.

- The functools module now has a total_ordering() class decorator to simplify
  the specification of rich comparisons.

- The functools module also adds cmp_to_key() as a tool to transition old-style
  comparison functions to new-style key-functions.

- Issue #8294: The Fraction constructor now accepts Decimal and float instances
  directly.

- Issue #7279: Comparisons involving a Decimal signaling NaN now signal
  InvalidOperation instead of returning False.  (Comparisons involving a quiet
  NaN are unchanged.)  Also, Decimal quiet NaNs are now hashable; Decimal
  signaling NaNs remain unhashable.

- Issue #2531: Comparison operations between floats and Decimal instances now
  return a result based on the numeric values of the operands; previously they
  returned an arbitrary result based on the relative ordering of id(float) and
  id(Decimal).

- Issue #8233: When run as a script, py_compile.py optionally takes a single
  argument `-` which tells it to read files to compile from stdin.  Each line is
  read on demand and the named file is compiled immediately.  (Original patch by
  Piotr Ożarowski).

- Issue #3135: Add ``inspect.getcallargs()``, which binds arguments to a
  function like a normal call.

- Backwards incompatible change: Unicode codepoints line tabulation (0x0B) and
  form feed (0x0C) are now considered linebreaks, as specified in Unicode
  Standard Annex #14.  See issue #7643.  http://www.unicode.org/reports/tr14/

- Comparisons using one of <, <=, >, >= between a complex instance and a
  Fractions instance now raise TypeError instead of returning True/False.  This
  makes Fraction <=> complex comparisons consistent with int <=> complex, float
  <=> complex, and complex <=> complex comparisons.

- Addition of ``WeakSet`` to the ``weakref`` module.

- logging: Added LOG_FTP to SysLogHandler and updated documentation.

- Issue #8205: Remove the "Modules" directory from sys.path when Python is
  running from the build directory (POSIX only).

- Issue #7667: Fix doctest failures with non-ASCII paths.

- Issue #7512: shutil.copystat() could raise an OSError when the filesystem
  didn't support chflags() (for example ZFS under FreeBSD).  The error is now
  silenced.

- Issue #7703: ctypes supports both buffer() and memoryview().  The former is
  deprecated.

- Issue #7860: platform.uname now reports the correct 'machine' type when Python
  is running in WOW64 mode on 64 bit Windows.

- logging: Added getChild utility method to Logger and added isEnabledFor method
  to LoggerAdapter.

- Issue #8201: logging: Handle situation of non-ASCII and Unicode logger names
  existing at the same time, causing a Unicode error when configuration code
  attempted to sort the existing loggers.

- Issue #8200: logging: Handle errors when multiprocessing is not fully loaded
  when logging occurs.

- Issue #3890, #8222: Fix recv() and recv_into() on non-blocking SSL sockets.
  Also, enable the SSL_MODE_AUTO_RETRY flag on SSL sockets, so that blocking
  reads and writes are always retried by OpenSSL itself.

- Issue #8179: Fix macpath.realpath() on a non-existing path.

- Issue #8024: Update the Unicode database to 5.2.

- Issue #8104: socket.recv_into() and socket.recvfrom_into() now support writing
  into objects supporting the new buffer API, for example bytearrays or
  memoryviews.

- Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox
  with Tcl/Tk-8.5.

- Issue #8140: Extend compileall to compile single files.  Add -i option.

- Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the
  locale.

- Issue #7774: Set sys.executable to an empty string if ``argv[0]`` has been set
  to an non existent program name and Python is unable to retrieve the real
  program name.

- Issue #8117: logging: Improved algorithm for computing initial rollover time
  for ``TimedRotatingFileHandler`` by using the modification time of an existing
  log file to compute the next rollover time.  If the log file does not exist,
  the current time is used as the basis for the computation.

- Issue #6472: The ``xml.etree`` package is updated to ElementTree 1.3.  The
  cElementTree module is updated too.

- Issue #7880: Fix sysconfig when the python executable is a symbolic link.

- Issue #7624: Fix ``isinstance(foo(), collections.Callable)`` for old-style
  classes.

- Issue #7143: email: ``get_payload()`` used to strip any trailing newline from
  a base64 transfer-encoded payload *after* decoding it; it no longer does.
  This is a behavior change, so email's minor version number is now bumped, to
  version 4.0.2, for the 2.7 release.

- Issue #8235: _socket: Add the constant ``SO_SETFIB``.  SO_SETFIB is
  a socket option available on FreeBSD 7.1 and newer.

- Issue #8038: unittest.TestCase.assertNotRegexpMatches

- Addition of -b command line option to unittest for buffering stdout / stderr
  during test runs.

- Issue #1220212: Added os.kill support for Windows, including support for
  sending CTRL+C and CTRL+BREAK events to console subprocesses.

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

- Issue #8314: Fix unsigned long long bug in libffi on Sparc v8.

- Issue #1039, #8154: Fix os.execlp() crash with missing 2nd argument.

- Issue #8156: bsddb module updated to version 4.8.4.
  http://www.jcea.es/programacion/pybsddb.htm#bsddb3-4.8.4.  This update drops
  support for Berkeley DB 4.0, and adds support for 4.8.

- Issue #3928: os.mknod() now available in Solaris, also.

- Issue #8142: Update libffi to the 3.0.9 release.

- Issue #8300: When passing a non-integer argument to struct.pack with any
  integer format code, struct.pack first attempts to convert the non-integer
  using its __index__ method.  If that method is non-existent or raises
  TypeError it goes on to try the __int__ method, as described below.

- Issue #1530559: When passing a non-integer argument to struct.pack with *any*
  integer format code (one of 'bBhHiIlLqQ'), struct.pack attempts to use the
  argument's __int__ method to convert to an integer before packing.  It also
  produces a DeprecationWarning in this case.  (In Python 2.6, the behaviour was
  inconsistent: __int__ was used for some integer codes but not for others, and
  the set of integer codes for which it was used differed between native packing
  and standard packing.)

- Issue #7347: _winreg: Add CreateKeyEx and DeleteKeyEx, as well as fix a bug in
  the return value of QueryReflectionKey.

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

- Issue #7993: Add a test of IO packet processing bandwidth to ccbench.  It
  measures the number of UDP packets processed per second depending on the
  number of background CPU-bound Python threads.

- python-config now supports multiple options on the same command line.

Build
-----

- Issue #8032: For gdb7, a python-gdb.py file is added to the build, allowing to
  use advanced gdb features when debugging Python.

- Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable
  anymore.  It also forwards the LDFLAGS settings to the linker when building a
  shared library.

- Issue #6716: Quote -x arguments of compileall in MSI installer.

- Issue #7705: Fix linking on FreeBSD.

- Make sure that the FreeBSD build of the included libffi uses the proper
  assembly file.

C-API
-----

- Issue #8276: PyEval_CallObject() is now only available in macro form.  The
  function declaration, which was kept for backwards compatibility reasons, is
  now removed (the macro was introduced in 1997!).

- Issue #7992: A replacement PyCObject API, PyCapsule, has been backported from
  Python 3.1.  All existing Python CObjects in the main distribution have been
  converted to capsules.  To address backwards-compatibility concerns,
  PyCObject_AsVoidPtr() was changed to understand capsules.

Tests
-----

- Issue #3864: Skip three test_signal tests on freebsd6 because they fail if any
  thread was previously started, most likely due to a platform bug.

- Issue #8348: Fix test ftp url in test_urllib2net.

- Issue #8204: Fix test_ttk notebook test by forcing focus.

- Issue #8344: Fix test_ttk bug on FreeBSD.

- Issue #8193: Fix test_zlib failure with zlib 1.2.4.

- Issue #8248: Add some tests for the bool type.  Patch by Gregory Nofi.

- Issue #8263: Now regrtest.py will report a failure if it receives a
  KeyboardInterrupt (SIGINT).

- Issue #8180 and #8207: Fix test_pep277 on OS X and add more tests for special
  Unicode normalization cases.

- Issue #7783: test.test_support.open_urlresource invalidates the outdated files
  from the local cache.


What's New in Python 2.7 alpha 4?
=================================

*Release date: 2010-03-06*

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

- Issue #7544: Preallocate thread memory before creating the thread to avoid a
  fatal error in low memory condition.

- Issue #7820: The parser tokenizer restores all bytes in the right if the BOM
  check fails.

- Issue #7309: Fix unchecked attribute access when converting
  UnicodeEncodeError, UnicodeDecodeError, and UnicodeTranslateError to strings.

- Issue #7649: "u'%c' % char" now behaves like "u'%s' % char" and raises a
  UnicodeDecodeError if 'char' is a byte string that can't be decoded using the
  default encoding.

- Issue #6902: Fix problem with built-in types format incorrectly with 0
  padding.

- Issue #2560: Remove an unnecessary 'for' loop from ``my_fgets()`` in
  Parser/myreadline.c.

- Issue #7988: Fix default alignment to be right aligned for
  ``complex.__format__``.  Now it matches other numeric types.

- Issue #5211: The complex type no longer uses implicit coercion in mixed-type
  binary arithmetic operations.

Library
-------

- Issue #7904: Changes to urllib.parse.urlsplit to handle schemes as defined by
  RFC3986. Anything before :// is considered a scheme and is followed by an
  authority (or netloc) and by '/' led path, which is optional.

- Issue #1555570: email no longer inserts extra blank lines when a \r\n
  combo crosses an 8192 byte boundary.

- Issue #6906: Tk should not set Unicode environment variables on Windows.

- Issue #1054943: Fix ``unicodedata.normalize('NFC', text)`` for the Public
  Review Issue #29 (http://unicode.org/review/pr-29.html).

- Issue #7494: Fix a crash in ``_lsprof`` (cProfile) after clearing the profiler,
  reset also the pointer to the current pointer context.

- Issue #7232: Add support for the context manager protocol to the
  ``tarfile.TarFile`` class.

- Issue #7250: Fix info leak of os.environ across multi-run uses of
  ``wsgiref.handlers.CGIHandler``.

- Issue #1729305: Fix doctest to handle encode error with "backslashreplace".

- Issue #691291: ``codecs.open()`` should not convert end of lines on reading
  and writing.

- Issue #7975: Correct regression in dict methods supported by bsddb.dbshelve.

- Issue #7959: ctypes callback functions are now registered correctly with the
  cycle garbage collector.

- Issue #7970: ``email.Generator.flatten`` now correctly flattens
  message/rfc822 messages parsed by ``email.Parser.HeaderParser``.

- Issue #3426: ``os.path.abspath`` now returns unicode when its arg is unicode.

- Issue #7633: In the decimal module, ``Context`` class methods (with the
  exception of canonical and is_canonical) now accept instances of int and long
  wherever a Decimal instance is accepted, and implicitly convert that argument
  to Decimal.  Previously only some arguments were converted.

- Issue #6003: Add an argument to ``zipfile.Zipfile.writestr`` to specify the
  compression type.

- Issue #7893: ``unittest.TextTestResult`` is made public and a ``resultclass``
  argument added to the TextTestRunner constructor allowing a different result
  class to be used without having to subclass.

- Issue #7588: ``unittest.TextTestResult.getDescription`` now includes the test
  name in failure reports even if the test has a docstring.

- Issue #5801: Remove spurious empty lines in wsgiref.

- Issue #1537721: Add a ``writeheader()`` method to ``csv.DictWriter``.

- Issue #7427: Improve the representation of httplib.BadStatusLine exceptions.

- Issue #7481: When a ``threading.Thread`` failed to start it would leave the
  instance stuck in initial state and present in ``threading.enumerate()``.

- Issue #1068268: The subprocess module now handles EINTR in internal
  ``os.waitpid()`` and ``os.read()`` system calls where appropriate.

- Issue #6729: Add ``ctypes.c_ssize_t`` to represent ssize_t.

- Issue #6247: The argparse module has been added to the standard library.

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

- The sqlite3 module was updated to pysqlite 2.6.0.  This fixes several obscure
  bugs and allows loading SQLite extensions from shared libraries.

- Issue #7808: Fix reference leaks in _bsddb and related tests.

- Issue #6544: Fix a reference leak in the kqueue implementation's error
  handling.

- Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as
  msvcr100.dll is not a platform assembly anymore.

- Issue #7242: On Solaris 9 and earlier calling ``os.fork()`` from within a
  thread could raise an incorrect RuntimeError about not holding the import
  lock.  The import lock is now reinitialized after fork.

- Issue #7999: ``os.setreuid()`` and ``os.setregid()`` would refuse to accept a
  -1 parameter on some platforms such as OS X.

Tests
-----

- Issue #7849: The utility ``test.test_support.check_warnings()`` verifies if
  warnings are effectively raised.  A new utility ``check_py3k_warnings()`` is
  available.

- The four path modules (genericpath, macpath, ntpath, posixpath) share a
  common TestCase for some tests: test_genericpath.CommonTest.

- Print platform information when running the whole test suite, or using the
  ``--verbose`` flag.

- Issue #767675: Enable test_pep277 on POSIX platforms with Unicode-friendly
  filesystem encoding.

- Issue #6292: For the moment at least, the test suite runs cleanly if python
  is run with the -OO flag.  Tests requiring docstrings are skipped.

- Issue #7712: test_support gained a new ``temp_cwd`` context manager which is
  now also used by regrtest to run all the tests in a temporary directory.  The
  original CWD is saved in ``test.test_support.SAVEDCWD``.  Thanks to Florent
  Xicluna who helped with the patch.

Build
-----

- Issue #3920, #7903: Define _BSD_SOURCE on OpenBSD 4.4 through 4.9.


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

*Release date: 2010-02-06*

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

- Issue #5677: Explicitly forbid write operations on read-only file objects,
  and read operations on write-only file objects.  On Windows, the system C
  library would return a bogus result; on Solaris, it was possible to crash the
  interpreter.  Patch by Stefan Krah.

- Issue #7853: Normalize exceptions before they are passed to a context
  manager's ``__exit__()`` method.

- Issue #7385: Fix a crash in ``PyMemoryView_FromObject()`` when
  ``PyObject_GetBuffer()`` fails.  Patch by Florent Xicluna.

- Issue #7819: Check ``sys.call_tracing()`` arguments types.

- Issue #7788: Fix an interpreter crash produced by deleting a list slice with
  very large step value.

- Issue #7766: Change ``sys.getwindowsversion()`` return value to a named tuple
  and add the additional members returned in an OSVERSIONINFOEX structure.  The
  new members are service_pack_major, service_pack_minor, suite_mask, and
  product_type.

- Issue #7561: Operations on empty bytearrays (such as ``int(bytearray())``)
  could crash in many places because of the ``PyByteArray_AS_STRING()`` macro
  returning NULL.  The macro now returns a statically allocated empty string
  instead.

- Issue #7622: Improve the split(), rsplit(), splitlines() and replace()
  methods of bytes, bytearray and unicode objects by using a common
  implementation based on stringlib's fast search.  Patch by Florent Xicluna.

- Issue #7632: Fix various str -> float conversion bugs present in 2.7 alpha 2,
  including:

  (1) a serious 'wrong output' bug that could occur for long (> 40 digit) input
      strings,
  (2) a crash in dtoa.c that occurred in debug builds when parsing certain long
      numeric strings corresponding to subnormal values,
  (3) a memory leak for some values large enough to cause overflow, and
  (4) a number of flaws that could lead to incorrectly rounded results.

- Issue #7319, #7770: Silence ``DeprecationWarning`` by default when the -3
  option is not used.

- Issue #2335: Backport set literals syntax from Python 3.x.

- Issue #2333: Backport set and dict comprehensions syntax from Python 3.x.

- Issue #1967: Backport dictionary views from Python 3.x.

Library
-------

- Issue #9137: Fix issue in MutableMapping.update, which incorrectly
  treated keyword arguments called 'self' or 'other' specially.

- Issue #7835: shelve should no longer produce mysterious warnings during
  interpreter shutdown.

- Issue #2746: Don't escape ampersands and angle brackets ("&", "<", ">") in
  XML processing instructions and comments.  These raw characters are allowed
  by the XML specification, and are necessary when outputting e.g.  PHP code in
  a processing instruction.  Patch by Neil Muller.

- Issue #7869: logging: Improved diagnostic for format-time errors.

- Issue #7868: logging: Added loggerClass attribute to Manager.

- Issue #7851: logging: Clarification on logging configuration files.

- Issue #4772: Raise a ValueError when an unknown Bluetooth protocol is
  specified, rather than fall through to AF_PACKET (in the ``socket`` module).
  Also, raise ValueError rather than TypeError when an unknown TIPC address
  type is specified.  Patch by Brian Curtin.

- logging: Implemented PEP 391.

- Issue #6939: Fix file I/O objects in the `io` module to keep the original
  file position when calling `truncate()`.  It would previously change the file
  position to the given argument, which goes against the tradition of
  ftruncate() and other truncation APIs.  Patch by Pascal Chambon.

- Issue #7610: Reworked implementation of the internal ``zipfile.ZipExtFile``
  class used to represent files stored inside an archive.  The new
  implementation is significantly faster and can be wrapped in a
  ``io.BufferedReader`` object for more speedups.  It also solves an issue
  where interleaved calls to ``read()`` and ``readline()`` give wrong results.
  Patch by Nir Aides.

- Issue #7792: Registering non-classes to ABCs raised an obscure error.

- Removed the deprecated functions ``verify()`` and ``vereq()`` from
  Lib/test/test_support.py.

- Issue #7773: Fix an UnboundLocalError in ``platform.linux_distribution()``
  when the release file is empty.

- Issue #7748: Since unicode values are supported for some metadata options in
  Distutils, the DistributionMetadata get_* methods will now return an utf-8
  encoded string for them.  This ensures that the upload and register commands
  send the correct values to PyPI without any error.

- Issue #1670765: Prevent ``email.generator.Generator`` from re-wrapping
  headers in multipart/signed MIME parts, which fixes one of the sources of
  invalid modifications to such parts by Generator.

- Issue #7701: Fix crash in ``binascii.b2a_uu()`` in debug mode when given a
  1-byte argument.  Patch by Victor Stinner.

- Issue #3299: Fix possible crash in the _sre module when given bad argument
  values in debug mode.  Patch by Victor Stinner.

- Issue #7703: Add support for the new buffer API to functions of the binascii
  module.  Backported from py3k by Florent Xicluna, with some additional tests.

- Issue #2846: Add support for gzip.GzipFile reading zero-padded files.  Patch
  by Brian Curtin.

- Issue #5827: Make sure that normpath preserves unicode.  Initial patch by
  Matt Giuca.

- Issue #5372: Drop the reuse of .o files in Distutils' ccompiler (since
  Extension extra options may change the output without changing the .c file).
  Initial patch by Collin Winter.

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

- Expat: Fix DoS via XML document with malformed UTF-8 sequences
  (CVE_2009_3560).

Build
-----

- Issue #7632: When Py_USING_MEMORY_DEBUGGER is defined, disable the private
  memory allocation scheme in dtoa.c and use PyMem_Malloc and PyMem_Free
  instead.  Also disable caching of powers of 5.

- Issue #7658: Ensure that the new pythonw executable works on OSX 10.4

- Issue #7714: Use ``gcc -dumpversion`` to detect the version of GCC on
  MacOSX.

- Issue #7661: Allow ctypes to be built from a non-ASCII directory path.
  Patch by Florent Xicluna.

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

- iobench (a file I/O benchmark) and ccbench (a concurrency benchmark) were
  added to the ``Tools`` directory.  They were previously living in the
  sandbox.

Tests
-----

- Issue #7728: test_timeout was changed to use ``test_support.bind_port()``
  instead of a hard coded port.

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

- Updated "Using Python" documentation to include description of CPython's -J,
  -U and -X options.

- Updated Python manual page (options -B, -O0, -s, environment variables
  PYTHONDONTWRITEBYTECODE, PYTHONNOUSERSITE).


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

*Release date: 2010-01-09*

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

- The ``__complex__()`` method is now looked up on the class of instances to
  make it consistent with other special methods.

- Issue #7462: Implement the stringlib fast search algorithm for the `rfind`,
  `rindex`, `rsplit` and `rpartition` methods.  Patch by Florent Xicluna.

- Issue #5080: A number of functions and methods previously produced a
  DeprecationWarning when passed a float argument where an integer was expected.
  These functions and methods now raise TypeError instead.  The majority of the
  effects of this change are in the extension modules, but some core functions
  and methods are affected: notably the 'chr', 'range' and 'xrange' builtins,
  and many unicode/str methods.

- Issue #7604: Deleting an unset slotted attribute did not raise an
  AttributeError.

- Issue #7534: Fix handling of IEEE specials (infinities, nans, negative zero)
  in ** operator.  The behaviour now conforms to that described in C99 Annex F.

- Issue #7579: The msvcrt module now has docstrings for all its functions.

- Issue #7413: Passing '\0' as the separator to datetime.datetime.isoformat()
  used to drop the time part of the result.

- Issue #1811: Improve accuracy and cross-platform consistency for true division
  of integers: the result of a/b is now correctly rounded for ints a and b (at
  least on IEEE 754 platforms), and in particular does not depend on the
  internal representation of a long.

- Issue #6108: ``unicode(exception)`` and ``str(exception)`` should return the
  same message when only ``__str__()`` (and not ``__unicode__()``) is overridden
  in the subclass.

- Issue #6834: Replace the implementation for the 'python' and 'pythonw'
  executables on OSX.

  These executables now work properly with the arch(1) command: ``arch -ppc
  python`` will start a universal binary version of python in PPC mode (unlike
  previous releases).

- Issue #1680159: Unicode coercion during an 'in' operation no longer masks the
  underlying error when the coercion fails for the left hand operand.

- Issue #7491: Metaclass's __cmp__ method was ignored.

- Issue #7466: Segmentation fault when the garbage collector is called in the
  middle of populating a tuple.  Patch by Florent Xicluna.

Library
-------

- Issue #6963: Added "maxtasksperchild" argument to ``multiprocessing.Pool``,
  allowing for a maximum number of tasks within the pool to be completed by the
  worker before that worker is terminated, and a new one created to replace it.

- Issue #7617: Make sure distutils.unixccompiler.UnixCCompiler recognizes gcc
  when it has a fully qualified configuration prefix.  Initial patch by
  Arfrever.

- Issue #7092: Remove py3k warning when importing cPickle.  2to3 handles
  renaming of `cPickle` to `pickle`.  The warning was annoying since there's no
  alternative to cPickle if you care about performance.  Patch by Florent
  Xicluna.

- Issue #7455: Fix possible crash in cPickle on invalid input.  Patch by Victor
  Stinner.

- Issue #7092: Fix the DeprecationWarnings emitted by the standard library when
  using the -3 flag.  Patch by Florent Xicluna.

- Issue #7471: Improve the performance of GzipFile's buffering mechanism, and
  make it implement the ``io.BufferedIOBase`` ABC to allow for further speedups
  by wrapping it in an ``io.BufferedReader``.  Patch by Nir Aides.

- Issue #3972: ``httplib.HTTPConnection`` now accepts an optional source_address
  parameter to allow specifying where your connections come from.

- ``socket.create_connection()`` now accepts an optional source_address
  parameter.

- Issue #5511: ``zipfile.ZipFile`` can now be used as a context manager.
  Initial patch by Brian Curtin.

- Distutils now correctly identifies the build architecture as "x86_64" when
  building on OSX 10.6 without "-arch" flags.

- Issue #7556: Distutils' msvc9compiler now opens the MSVC Manifest file in text
  mode.

- Issue #7552: Removed line feed in the base64 Authorization header in the
  Distutils upload command to avoid an error when PyPI reads it.  This occurs on
  long passwords.  Initial patch by JP St. Pierre.

- Issue #7231: urllib2 cannot handle https with proxy requiring auth.  Patch by
  Tatsuhiro Tsujikawa.

- Issue #7349: Make methods of file objects in the io module accept None as an
  argument where file-like objects (ie StringIO and BytesIO) accept them to mean
  the same as passing no argument.

- Issue #7348: ``StringIO.StringIO.readline(-1)`` now acts as if it got no
  argument like other file objects.

- Issue #7357: tarfile no longer suppresses fatal extraction errors by default.

- Issue #7470: logging: Fix bug in Unicode encoding fallback.

- Issue #5949: Fixed IMAP4_SSL hang when the IMAP server response is missing
  proper end-of-line termination.

- Issue #7457: Added a read_pkg_file method to
  ``distutils.dist.DistributionMetadata``.

- Issue #3745: Undo the 2.7a1 change to have hashlib to reject unicode and non
  buffer API supporting objects as input.  That behavior is for 3.x only.

C-API
-----

- Issue #7767: New function ``PyLong_AsLongLongAndOverflow()`` added, analogous
  to ``PyLong_AsLongAndOverflow()``.

- Issue #5080: The argument parsing functions ``PyArg_ParseTuple()``,
  ``PyArg_ParseTupleAndKeywords()``, ``PyArg_VaParse()``,
  ``PyArg_VaParseTupleAndKeywords()`` and ``PyArg_Parse()`` no longer accept
  float arguments for integer format codes (other than 'L'): previously an
  attempt to pass a float resulted in a DeprecationWarning; now it gives a
  TypeError.  For the 'L' format code (which previously had no warning) there is
  now a DeprecationWarning.

- Issue #7033: Function ``PyErr_NewExceptionWithDoc()`` added.

Build
-----

- Issue #6491: Allow --with-dbmliborder to specify that no dbms will be built.

- Issue #6943: Use pkg-config to find the libffi headers when the
  ``--with-system-ffi`` flag is used.

- Issue #7609: Add a ``--with-system-expat`` option that causes the system's
  expat library to be used for the pyexpat module instead of the one included
  with Python.

- Issue #7589: Only build the nis module when the correct header files are
  found.

- Switch to OpenSSL 0.9.8l and sqlite 3.6.21 on Windows.

- Issue #7541: when using ``python-config`` with a framework install the
  compiler might use the wrong library.

Tests
-----

- Issue #7376: Instead of running a self-test (which was failing) when called
  with no arguments, doctest.py now gives a usage message.

- Issue #7396: Fix regrtest -s, which was broken by the -j enhancement.

- Issue #7498: test_multiprocessing now uses test_support.find_unused_port
  instead of a hardcoded port number in test_rapid_restart.


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

*Release date: 2009-12-05*

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

- Issue #7419: ``locale.setlocale()`` could crash the interpreter on Windows
  when called with invalid values.

- Issue #3382: 'F' formatting for float and complex now convert the result to
  upper case.  This only affects 'inf' and 'nan', since 'f' no longer converts
  to 'g' for large values.

- Remove switch from "%f" formatting to "%g" formatting for floats larger than
  1e50 in absolute value.

- Remove restrictions on precision when formatting floats.  E.g., "%.120g" %
  1e-100 used to raise OverflowError, but now gives the requested 120
  significant digits instead.

- Add Py3k warnings for parameter names in parentheses.

- Issue #7362: Give a proper error message for ``def f((x)=3): pass``.

- Issue #7085: Fix crash when importing some extensions in a thread on MacOSX
  10.6.

- Issue #7117: ``repr(x)`` for a float x returns a result based on the shortest
  decimal string that's guaranteed to round back to x under correct rounding
  (with round-half-to-even rounding mode).  Previously it gave a string based on
  rounding x to 17 decimal digits.  repr(x) for a complex number behaves
  similarly.  On platforms where the correctly-rounded strtod and dtoa code is
  not supported (see below), repr is unchanged.

- Issue #7117: On almost all platforms: float-to-string and string-to-float
  conversions within Python are now correctly rounded.  Places these conversions
  occur include: str for floats and complex numbers; the float and complex
  constructors; old-style and new-style numeric formatting; serialization and
  deserialization of floats and complex numbers using marshal, pickle and json;
  parsing of float and imaginary literals in Python code; Decimal-to-float
  conversion.

  The conversions use a Python-adapted version of David Gay's well-known dtoa.c,
  providing correctly-rounded strtod and dtoa C functions.  This code is
  supported on Windows, and on Unix-like platforms using gcc, icc or suncc as
  the C compiler.  There may be a small number of platforms on which correct
  operation of this code cannot be guaranteed, so the code is not used: notably,
  this applies to platforms where the C double format is not IEEE 754 binary64,
  and to platforms on x86 hardware where the x87 FPU is set to 64-bit precision
  and Python's configure script is unable to determine how to change the FPU
  precision.  On these platforms conversions use the platform strtod and dtoa,
  as before.

- Issue #7117: Backport round implementation from Python 3.x.  ``round()`` now
  uses the correctly-rounded string <-> float conversions described above (when
  available), and so produces correctly rounded results that will display nicely
  under the float repr.  There are two related small changes: (1) round now
  accepts any class with an ``__index__()`` method for its second argument (but
  no longer accepts floats for the second argument), and (2) an excessively
  large second integer argument (e.g., ``round(1.234, 10**100)``) no longer
  raises an exception.

- Issue #1757126: Fix the cyrillic-asian alias for the ptcp154 encoding.

- Fix several issues with ``compile()``.  The input can now contain Windows and
  Mac newlines and is no longer required to end in a newline.

- Remove length limitation when constructing a complex number from a unicode
  string.

- Issue #7244: ``itertools.izip_longest()`` no longer ignores exceptions raised
  during the formation of an output tuple.

- Issue #1087418: Boost performance of bitwise operations for longs.

- Issue #1722344: ``threading._shutdown()`` is now called in ``Py_Finalize()``,
  which fixes the problem of some exceptions being thrown at shutdown when the
  interpreter is killed.  Patch by Adam Olsen.

- Issue #7168: Document ``PyFloat_AsString()`` and ``PyFloat_AsReprString()``,
  and note that they are unsafe and deprecated.

- Issue #7120: logging: Remove import of multiprocessing which is causing crash
  in GAE.

- Issue #7140: The ``__dict__`` of a module should not be cleared unless the
  module is the only object holding a reference to it.

- Issue #1754094: Improve the stack depth calculation in the compiler.  There
  should be no other effect than a small decrease in memory use.  Patch by
  Christopher Tur Lesniewski-Laas.

- Issue #7084: Fix a (very unlikely) crash when printing a list from one thread,
  and mutating it from another one.  Patch by Scott Dial.

- Issue #1571184: The Unicode database contains properties for more characters.
  The tables for code points representing numeric values, white spaces or line
  breaks are now generated from the official Unicode Character Database files,
  and include information from the Unihan.txt file.

- Issue #7050: Fix a SystemError when trying to use unpacking and augmented
  assignment.

- Issue #5329: Fix ``os.popen*`` regression from 2.5 with commands as a sequence
  running through the shell.  Patch by Jean-Paul Calderone and Jani Hakala.

- Issue #7019: Raise ValueError when unmarshalling bad long data, instead of
  producing internally inconsistent Python longs.

- 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 an incorrect Py3k warning about order comparisons of
  built-in 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 built-in 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).

- Issue #2422: When compiled with the ``--with-valgrind`` option, the pymalloc
  allocator will be automatically disabled when running under Valgrind.  This
  gives improved memory leak detection when running under Valgrind, while taking
  advantage of pymalloc at other times.

Library
-------

- Add count() and reverse() methods to collections.deque().

- Fix variations of extending deques:  d.extend(d)  d.extendleft(d)  d+=d

- Issue #6986: Fix crash in the JSON C accelerator when called with the wrong
  parameter types.  Patch by Victor Stinner.

- logging: Added optional "secure" parameter to SMTPHandler, to enable use of
  TLS with authentication credentials.

- Issue #1923: Fixed the removal of meaningful spaces when PKG-INFO is generated
  in Distutils. Patch by Stephen Emslie.

- Issue #4120: Drop reference to CRT from manifest when building extensions with
  msvc9compiler.

- Issue #7333: The ``posix`` module gains an ``initgroups()`` function providing
  access to the initgroups(3) C library call on Unix systems which implement it.
  Patch by Jean-Paul Calderone.

- Issue #7408: Fixed distutils.tests.sdist so it doesn't check for group
  ownership when the group is not forced, because the group may be different
  from the user's group and inherit from its container when the test is run.

- Issue #1515: Enable use of deepcopy() with instance methods.  Patch by Robert
  Collins.

- Issue #7403: logging: Fixed possible race condition in lock creation.

- Issue #6845: Add restart support for binary upload in ftplib.  The
  ``storbinary()`` method of FTP and FTP_TLS objects gains an optional "rest"
  argument.  Patch by Pablo Mouzo.

- Issue #5788: ``datetime.timedelta`` objects get a new ``total_seconds()``
  method returning the total number of seconds in the duration.  Patch by Brian
  Quinlan.

- Issue #6615: logging: Used weakrefs in internal handler list.

- Issue #1488943: ``difflib.Differ`` doesn't always add hints for tab
  characters.

- Issue #6123: tarfile now opens empty archives correctly and consistently
  raises ReadError on empty files.

- Issue #7354: distutils.tests.test_msvc9compiler - dragfullwindows can be 2.

- Issue #5037: Proxy the __unicode__ special method to __unicode__ instead of
  __str__.

- Issue #7341: Close the internal file object in the TarFile constructor in case
  of an error.

- Issue #7293: ``distutils.test_msvc9compiler`` is fixed to work on any fresh
  Windows box.  Help provided by David Bolen.

- Issue #7328: pydoc no longer corrupts sys.path when run with the '-m' switch.

- Issue #2054: ftplib now provides an FTP_TLS class to do secure FTP using TLS
  or SSL.  Patch by Giampaolo Rodola'.

- Issue #4969: The mimetypes module now reads the MIME database from the
  registry under Windows.  Patch by Gabriel Genellina.

- Issue #6816: runpy now provides a run_path function that allows Python code to
  execute file paths that refer to source or compiled Python files as well as
  zipfiles, directories and other valid sys.path entries that contain a
  __main__.py file. This allows applications that run other Python scripts to
  support the same flexibility as the CPython command line itself.

- Issue #7318: multiprocessing now uses a timeout when it fails to establish a
  connection with another process, rather than looping endlessly. The default
  timeout is 20 seconds, which should be amply sufficient for local connections.

- Issue #7197: Allow unittest.TextTestRunner objects to be pickled and
  unpickled.  This fixes crashes under Windows when trying to run
  test_multiprocessing in verbose mode.

- Issue #7282: Fix a memory leak when an RLock was used in a thread other than
  those started through ``threading.Thread`` (for example, using
  ``thread.start_new_thread()``.

- Issue #7264: Fix a possible deadlock when deallocating thread-local objects
  which are part of a reference cycle.

- Issue #7211: Allow 64-bit values for the ``ident`` and ``data`` fields of
  kevent objects on 64-bit systems.  Patch by Michael Broghton.

- Issue #6896: ``mailbox.Maildir`` now invalidates its internal cache each time
  a modification is done through it.  This fixes inconsistencies and test
  failures on systems with slightly bogus mtime behaviour.

- Issue #7246 & Issue #7208: getpass now properly flushes input before reading
  from stdin so that existing input does not confuse it and lead to incorrect
  entry or an IOError.  It also properly flushes it afterwards to avoid the
  terminal echoing the input afterwards on OSes such as Solaris.

- Issue #7233: Fix a number of two-argument Decimal methods to make sure that
  they accept an int or long as the second argument.  Also fix buggy handling of
  large arguments (those with coefficient longer than the current precision) in
  shift and rotate.

- Issue #4750: Store the basename of the original filename in the gzip FNAME
  header as required by RFC 1952.

- Issue #1180: Added a new global option to ignore ~/.pydistutils.cfg in
  Distutils.

- Issue #7218: Fix test_site for win32, the directory comparison was done with
  an uppercase.

- Issue #7205: Fix a possible deadlock when using a BZ2File object from several
  threads at once.

- Issue #7071: byte-compilation in Distutils is now done with respect to
  sys.dont_write_bytecode.

- Issue #7066: archive_util.make_archive now restores the cwd if an error is
  raised. Initial patch by Ezio Melotti.

- Issue #6218: io.StringIO and io.BytesIO instances are now picklable with
  protocol 2.

- Issue #7077: logging: SysLogHandler now treats Unicode as per RFC 5424.

- Issue #7099: Decimal.is_normal now returns True for numbers with exponent
  larger than emax.

- Issue #5833: Fix extra space character in readline completion with the GNU
  readline library version 6.0.

- Issue #7133: SSL objects now support the new buffer API.

- Issue #7149: urllib fails on OSX in the proxy detection code.

- Issue #7069: Make inspect.isabstract() return a boolean.

- Add support to the ``ihooks`` module for relative imports.

- Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment.

- Issue #7086: Added TCP support to SysLogHandler, and tidied up some
  anachronisms in the code which were a relic of 1.5.2 compatibility.

- Issue #7082: When falling back to the MIME 'name' parameter, the correct place
  to look for it is the Content-Type header.

- Issue #7048: Force Decimal.logb to round its result when that result is too
  large to fit in the current precision.

- Issue #6516: Added owner/group support when creating tar archives in
  Distutils.

- Issue #7031: Add ``TestCase.assert(Not)IsInstance()`` methods.

- Issue #6790: Make it possible again to pass an ``array.array`` to
  ``httplib.HTTPConnection.send``.  Patch by Kirk McDonald.

- 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 refers 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) for anonymous maps
  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 #6252: 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 #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 in
  place.  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 ``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.

- Issue #2578: 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 #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 on Windows in accessing elements of second
  map object with same tagname but larger size than first map.

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

IDLE
----

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

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

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

- Ttk demos added in Demo/tkinter/ttk/.

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

Build
-----

- Issue #6603: Change READ_TIMESTAMP macro in ceval.c so that it compiles
  correctly under gcc on x86-64.  This fixes a reported problem with the
  --with-tsc build on x86-64.

- 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 #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 #7528: Add PyLong_AsLongAndOverflow (backported from py3k).

- Issue #7228: Add '%lld' and '%llu' support to PyString_FromFormat(V) and
  PyErr_Format, on machines with HAVE_LONG_LONG defined.

- Add new C-API function PyOS_string_to_double, and deprecated PyOS_ascii_atof
  and PyOS_ascii_strtod.

- Removed _PyOS_double_to_string. Use PyOS_double_to_string instead.  This is in
  preparation for (but not strictly related to) issue #7117, short float repr.

- 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 #6508: Add posix.{getresuid,getresgid,setresuid,setresgid}.

- Issue #7078: Set struct.__doc__ from _struct.__doc__.

- Issue #3366: Add erf, erfc, expm1, gamma, lgamma functions 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. CVE-2009-3720.

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

  Note: as of Python 2.7 beta 1, the above is out of date.  In 2.7 beta 1, any
  argument with an __int__ method can be packed, but use of this feature
  triggers a DeprecationWarning.

- 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).  NOTE: Undone in 2.7a2.

- 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 #7431: Use TESTFN in test_linecache instead of trying to create a file
  in the Lib/test directory, which might be read-only for the user running the
  tests.

- Issue #7324: Add a sanity check to regrtest argument parsing to catch the case
  of an option with no handler.

- Issue #7312: Add a -F flag to run the selected tests in a loop until a test
  fails.  Can be combined with -j.

- Issue #7295: Do not use a hardcoded file name in test_tarfile.

- Issue #7270: Add some dedicated unit tests for multi-thread synchronization
  primitives such as Lock, RLock, Condition, Event and Semaphore.

- Issue #7222: Make thread "reaping" more reliable so that reference
  leak-chasing test runs give sensible results.  The previous method of reaping
  threads could return successfully while some Thread objects were still
  referenced.  This also introduces a new private function: ``thread._count()``.

- Issue #7151: Fixed regrtest -j so that output to stderr from a test no longer
  runs the risk of causing the worker thread to fail.

- Issue #7055: test___all__ now greedily detects all modules which have an
  __all__ attribute, rather than using a hardcoded and incomplete list.

- Issue #7058: Added save/restore for things like sys.argv and cwd to
  runtest_inner in regrtest, with warnings if the called test modifies them,
  and a new section in the summary report at the end.

- Issue #7042: Fix test_signal (test_itimer_virtual) failure on OS X 10.6.

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

Misc
----

- Issue #5611: Auto-detect whether a C file uses tabs or spaces in Vim.


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_environment 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 Tools/scripts/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 built-in 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() built-in 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 built-in 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 built-in 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 #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.

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

IDLE
----

- Bug #813342: Start the IDLE subprocess with -Qnew if the parent is
  started with that option.

- IDLE: Honor the "Cancel" action in the save dialog (Debian bug
  #299092).

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