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

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

*Release date: 2011-06-03*

*NOTE: Python 2.6 is in security-fix-only mode.  No non-security bug fixes are
 allowed.  Python 2.6.7 and beyond will be source only releases.*

* No changes since 2.6.7rc2.


What's New in Python 2.6.7 rc 2?
================================

*Release date: 2011-05-20*

*NOTE: Python 2.6 is in security-fix-only mode.  No non-security bug fixes are
 allowed.  Python 2.6.7 and beyond will be source only releases.*


Library
-------

- Issue #11662: Make urllib and urllib2 ignore redirections if the
  scheme is not HTTP, HTTPS or FTP (CVE-2011-1521).

- Issue #11442: Add a charset parameter to the Content-type in SimpleHTTPServer
  to avoid XSS attacks.


What's New in Python 2.6.7 rc 1?
================================

*Release date: 2011-05-06*

Library
-------

- Issue #9129: smtpd.py is vulnerable to DoS attacks deriving from missing
  error handling when accepting a new connection.


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

*Release date: 2010-08-24*

* No changes since 2.6.6rc2.


What's New in Python 2.6.6 rc 2?
================================

*Release date: 2010-08-16*

Library
-------

- Issue #9600: Don't use relative import for _multiprocessing on Windows.

- Issue #8688: Revert regression introduced in 2.6.6rc1 (making Distutils
  recalculate MANIFEST every time).

- Issue #5798: Handle select.poll flag oddities properly on OS X.
  This fixes test_asynchat and test_smtplib failures on OS X.

- Issue #9543: Fix regression in socket.py introduced in Python 2.6.6 rc 1
  in r83624.

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

- Issue #7567: Don't call `setupterm' twice.

Tests
-----

- Issue #9568: Fix test_urllib2_localnet on OS X 10.3.

- Issue #9145: Fix test_coercion failure in refleak runs.

- Issue #8433: Fix test_curses failure caused by newer versions of
  ncurses returning ERR from getmouse() when there are no mouse
  events available.


What's New in Python 2.6.6 rc 1?
================================

*Release date: 2010-08-03*

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

- Issue #6213: Implement getstate() and setstate() methods of utf-8-sig and
  utf-16 incremental encoders.

- 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 #9058: Remove assertions about INT_MAX in UnicodeDecodeError.

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

- 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 #4108: In urllib.robotparser, if there are multiple 'User-agent: *'
  entries, consider the first one.

- Issue #9354: Provide getsockopt() in asyncore's file_wrapper.

- In the unicode/str.format(), raise a ValueError when indexes to arguments are
  too large.

- 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 #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 #8417: Raise an OverflowError when an integer larger than sys.maxsize
  is passed to bytearray.

- Issue #8329: Don't return the same lists from select.select when no fds are
  changed.

- Raise a TypeError when trying to delete a T_STRING_INPLACE struct member.

- Issue #1583863: An unicode subclass can now override the __unicode__ method.

- Issue #7507: Quote "!" in pipes.quote(); it is special to some shells.

- 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 #7072: isspace(0xa0) is true on Mac OS X

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 #8447: Make distutils.sysconfig follow symlinks in the path to
  the interpreter executable.  This fixes a failure of test_httpservers
  on OS X.

- Issue #7092: Fix the DeprecationWarnings emitted by the standard library
  when using the -3 flag.  Patch by Florent Xicluna.

- Issue #7395: Fix tracebacks in pstats interactive browser.

- 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 #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 #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 #1019882: Fix IndexError when loading certain hotshot stats.

- Issue #8471: In doctest, properly reset the output stream to an empty
  string when Unicode was previously output.

- Issue #8397: Raise an error when attempting to mix iteration and regular
  reads on a BZ2File object, rather than returning incorrect results.

- 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 #7066: archive_util.make_archive now restores the cwd if an error is
  raised. Initial patch by Ezio Melotti.

- Issue #5006: Better handling of unicode byte-order marks (BOM) in the io
  library. This means, for example, that opening an UTF-16 text file in append
  mode doesn't add a BOM at the end of the file if the file isn't empty.

- Issue #3704: cookielib was not properly handling URLs with a / in the
  parameters.

- 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 #1555570: email no longer inserts extra blank lines when a \r\n
  combo crosses an 8192 byte boundary.

- Issue #9164: Ensure sysconfig handles dupblice archs while building on OSX

- 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 #9130: Fix validation of relative imports in parser module.

- Issue #9128: Fix validation of class decorators in parser module.

- 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 #6589: cleanup asyncore.socket_map in case smtpd.SMTPServer constructor
  raises an exception.

- Issue #9125: Add recognition of 'except ... as ...' syntax to parser module.

- Issue #9085: email package version number bumped to its correct
  value of 4.0.2 (same as it was in 2.5).

- Issue #9075: In the ssl module, remove the setting of a ``debug`` flag
  on an OpenSSL structure.

- 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 #8924: logging: Improved error handling for Unicode in exception text.

- Fix codecs.escape_encode to return the correct consumed size.

- Issue #6470: Drop UNC prefix in FixTk.

- 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 #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 #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 #5918: Fix a crash in the parser module.

- Issue #8688: Distutils now recalculates MANIFEST everytime.

- Issue #7640: In the new `io` module, fix relative seek() for buffered
  readable streams when the internal buffer isn't empty.  Patch by Pascal
  Chambon.

- Issue #5099: subprocess.Popen.__del__ no longer references global objects,
  leading to issues during interpreter shutdown.

- Issue #8681: Make the zlib module's error messages more informative when
  the zlib itself doesn't give any detailed explanation.

- Issue #8674: Fixed a number of incorrect or undefined-behaviour-inducing
  overflow checks in the audioop module.

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

- Issue #4265: shutil.copyfile() was leaking file descriptors when disk fills.
  Patch by Tres Seaver.

- Issue #8621: uuid.uuid4() returned the same sequence of values in the
  parent and any children created using ``os.fork`` on MacOS 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.  Initial patch by Pascal Chambon.

- Issue #8581: logging: removed errors raised when closing handlers twice.

- 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 #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: Fixed http HEAD request when the transfer encoding is chunked.
  It should correctly return an empty response now.

- Issue #8086: In :func:`ssl.DER_cert_to_PEM_cert()`, fix missing newline
  before the certificate footer.  Patch by Kyle VanderBeek.

- Issue #8549: Fix compiling the _ssl extension under AIX.  Patch by
  Sridhar Ratnakumar.

- 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 #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 #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 #4814: timeout parameter is now applied also for connections resulting
  from PORT/EPRT commands.

- Issue #3817: ftplib.FTP.abort() method now considers 225 a valid response
  code as stated in RFC-959 at chapter 5.4.

- Issue #5277: Fix quote counting when parsing RFC 2231 encoded parameters.

- Issue #8179: Fix macpath.realpath() on a non-existing path.

- Issue #8310: Allow dis to examine new style classes.

- Issue #7667: Fix doctest failures with non-ASCII paths.

- Issue #7624: Fix isinstance(foo(), collections.Callable) for old-style
  classes.

- 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 #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 #6544: fix a reference leak in the kqueue implementation's error
  handling.

- 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 #6906: Tk should not set Unicode environment variables on Windows.

- Issue #1054943: Fix unicodedata.normalize('NFC', text) for the Public Review
  Issue #29

- Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler,
  reset also the pointer to the current pointer context.

- Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox
  with Tcl/Tk-8.5.

- Issue #7356: ctypes.util: Make parsing of ldconfig output independent of
  the locale.

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

- Fix memory leak in ssl._ssl._test_decode_cert.

- 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 #7384: If the system readline library is linked against
  ncurses, do not link the readline module against ncursesw. The
  additional restriction of linking the readline and curses modules
  against the same curses library is currently not enabled.

- Issue #2810: Fix cases where the Windows registry API returns
  ERROR_MORE_DATA, requiring a re-try in order to get the complete result.

Build
-----

- Issue #8854: Fix finding Visual Studio 2008 on Windows x64.

- Issue #3928: os.mknod() now available in Solaris, also.

- Issue #8175: --with-universal-archs=all works correctly on OSX 10.5

- Issue #6716: Quote -x arguments of compileall in MSI installer.

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

Tests
-----

- Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are
  effectively raised.  A new private utility ``_check_py3k_warnings`` has been
  backported to help silencing py3k warnings.

- 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 #8629: Disable some test_ssl tests, since they give different
  results with OpenSSL 1.0.0 and higher.

- Issue #8576: Remove use of find_unused_port() in test_smtplib and
  test_multiprocessing.  Patch by Paul Moore.

- Issue #7027: regrtest.py keeps a reference to the encodings.ascii module as a
  workaround to #7140 bug

- 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 #8193: Fix test_zlib failure with zlib 1.2.4.

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

- Issue #9255: Document that the 'test' package is for internal Python use
  only.

- Issue #8909: Added the size of the bitmap used in the installer created by
  distutils' bdist_wininst. Patch by Anatoly Techtonik.


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

*Release date: 2010-03-18*


What's New in Python 2.6.5 rc 2?
================================

*Release date: 2010-03-09*

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

- Issue #8089: a OS X framework build with --with-universal-archs=3-way|intel
  had no way to select a 32-bit executable.

- Issue #8084: fixes build issues on OSX 10.6 when targetting OSX 10.4.

Library
-------

- Reverting the changes made in r78432. Discussed in the tracker issue #7540.

- Issue #8107: Fixed test_distutils so it doesn't crash when the source
  directory cannot be found.

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

- Issue #7670: sqlite3: Fixed crashes when operating on closed connections.

- Issue #8053: logic was inverted on which platforms to run a test on.
  caused test_thread to fail on Windows.


What's New in Python 2.6.5 rc 1?
================================

*Release date: 2010-03-01*

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

- 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 #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 #4978: Passing keyword arguments as unicode strings is now allowed.

- 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 #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 #7604: Deleting an unset slotted attribute did not raise an
  AttributeError.

- Issue #7413: Passing '\0' as the separator to datetime.datetime.isoformat()
  used to drop the time part of the result.

- Issue #6108: unicode(exception) and str(exception) should return the same
  message when only __str__ (and not __unicode__) is overridden in the
  subclass.

- Issue #7491: Metaclass's __cmp__ method was ignored.

- Add Py3k warnings for parameter names in parenthesis.

- 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 #7070: Fix round bug for large odd integer arguments.

- Issue #7078: Set struct.__doc__ from _struct.__doc__.

- 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 #7084: Fix a (very unlikely) crash when printing a list from one
  thread, and mutating it from another one.  Patch by Scott Dial.

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


Library
-------

- 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 #6243: curses.getkey() can segfault when used with ungetch.
  Fix by Trundle and Jerry Chen.

- Issue #7597: curses.use_env() can now be called before initscr().
  Noted by Kan-Ru Chen.

- 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 #7835: shelve should no longer produce mysterious warnings during
  interpreter shutdown.

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

- 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 #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 ensure that the upload and register commands
  send the right 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 #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.

- Issue #7617: Make sure distutils.unixccompiler.UnixCCompiler recognizes
  gcc when it has a fully qualified configuration prefix. Initial patch
  by Arfrever.

- Issue #7071: byte-compilation in Distutils is now done with respect to
  sys.dont_write_bytecode.

- 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 #6511: ZipFile now raises BadZipfile (instead of an IOError) when
  opening an empty or very small file.

- 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 #7348: StringIO.StringIO.readline(-1) now acts as if it got no argument
  like other file objects.

- Issue #5949: fixed IMAP4_SSL hang when the IMAP server response is
  missing proper end-of-line termination.

- Fix variations of extending deques:  d.extend(d)  d.extendleft(d)  d+=d

- 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 #7410: deepcopy of itertools.count() erroneously reset the count.

- Issue #7403: logging: Fixed possible race condition in lock creation.

- Issue #7341: Close the internal file object in the TarFile constructor in
  case of an error.

- Issue #7328: pydoc no longer corrupts sys.path when run with the '-m' switch

- 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 #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 #7249: Methods of io.BytesIO now allow `long` as well as `int`
  arguments.

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

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

- 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 #7244: itertools.izip_longest() no longer ignores exceptions
  raised during the formation of an output tuple.

- 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 #7082: When falling back to the MIME 'name' parameter, the
  correct place to look for it is the Content-Type header.

- Issue #7099: Decimal.is_normal now returns True for numbers with exponent
  larger than emax.

- Issue #7205: Fix a possible deadlock when using a BZ2File object from
  several threads at once.

- Issue #7048: Force Decimal.logb to round its result when that result
  is too large to fit in the current precision.

- Issue #1488943: difflib.Differ() doesn't always add hints for tab characters

- Issue #5037: Proxy the __unicode__ special method to __unicode__ instead of
  __str__.

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

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

- Issue #7808: Fix reference leaks in _bsddb and related tests.

- Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as
  msvcr100.dll is not a platform assembly anymore.

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

- Expat: Fix DoS via XML document with malformed UTF-8 sequences
  (CVE_2009_3560).

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

Build
-----

- Issue #3920, #7903: Define _BSD_SOURCE on OpenBSD 4.4 through 4.9.

- Issue #7661: Allow ctypes to be built from a non-ASCII directory path.
  Patch by Florent Xicluna.

- Issue #7589: Only build the nis module when the correct header files are
  found.

- Switch to OpenSSL 0.9.8l on Windows.

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

- Ensure that it possible to build extensions for the default
  binary distribution on OSX 10.6 even when the user does not
  have the 10.4u SDK installed.

- Issue #7541: when using ``python-config`` with a framework install the
  compiler might use the wrong library.

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

- Updating `Using Python` documentation to include description of CPython's
  -J, -U and -X options.

- Update python manual page (options -B, -O0, -s, environment variables
  PYTHONDONTWRITEBYTECODE, PYTHONNOUSERSITE).

Tests
-----

- issue #7728: test_timeout was changed to use test_support.bind_port
  instead of a hard coded port.

- Issue #7498: test_multiprocessing now uses test_support.find_unused_port
  instead of a hardcoded port number in test_rapid_restart.

- 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 #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 #7055: test___all__ now greedily detects all modules which have an
  __all__ attribute, rather than using a hardcoded and incomplete list.


What's New in Python 2.6.4 final?
=================================

*Release date: 25-Oct-2009*

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

Library
-------


What's New in Python 2.6.4rc2?
==============================

*Release date: 18-Oct-2009*

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

Library
-------

- Issue #7115: Fixed the extension module builds that is failing when using
  paths in the extension name instead of dotted names.

- Issue #7120: logging: Removed import of multiprocessing which is causing
  crash in GAE.

- Issue #7149: fix exception in urllib when detecting proxy settings on OSX.


What's New in Python 2.6.4rc1?
==============================

*Release date: 07-Oct-2009*

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

- Issue #7019: Raise ValueError when unmarshalling bad long data, instead
  of producing internally inconsistent Python longs.

Library
-------

- Issue #7068: Fixed the partial renaming that occured in r72594.

- Issue #7064: Fixed the incompatibility with Setuptools in distutils
  when running the build_ext command.

- Issue #7052: Removed nonexisting NullHandler from logging.__all__.

- Issue #7039: Fixed distutils.tests.test_sysconfig when running on
  installation with no build.

Tests
-----

- Issue #7042: Fix test_signal (test_itimer_virtual) failure on OS X 10.6.


What's New in Python 2.6.3
==========================

*Release date: 02-Oct-2009*

What's New in Python 2.6.3rc1
=============================

*Release date: 29-Sep-2009*

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

- 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 #6990: Fix threading.local subclasses leaving old state around
  after a reference cycle GC which could be recycled by new locals.

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

- 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 #6070: On posix platforms import no longer copies the execute bit
  from the .py file to the .pyc file if it is set.

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

- 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 #5330: C functions called with keyword arguments were not reported by
  the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau.

- Issue #6089: str.format can raise SystemError with certain invalid
  field specifiers.

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

- Issue #5981: Fix two minor inf/nan issues in float.fromhex: (1) inf
  and nan strings with trailing whitespace were incorrectly rejected
  and (2) the interpretation of fromhex('-nan') didn't match that of
  float('-nan').

- 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 #5724: (See also 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 #4971: Fix titlecase for characters that are their own
  titlecase, but not their own uppercase.

- Issue #5829: complex('1e-500') no longer raises an exception

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

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

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

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

Library
-------

- Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment

- 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 #6851: Fix urllib.urlopen crash on secondairy threads on OSX 10.6

- Issue #6947: Fix distutils test on windows. Patch by Hirokazu Yamamoto.

- 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 #6795: int(Decimal('nan')) now raises ValueError instead of
  returning NaN or raising InvalidContext.  Also, fix infinite recursion
  in long(Decimal('nan')).

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

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

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

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

- Issue #6117: Fix O(n**2) performance degradation when outputting lots of
  small data on a buffered socket.socket.makefile() object.

- Issue #6637: defaultdict.copy() did not work when the default factory
  was left unspecified.  Also, the eval/repr round-trip would fail when
  the default_factory was None.

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

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

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

- 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 #6274: Fixed possible file descriptors leak in subprocess.py

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

- Issue #6258: Support AMD64 in bdist_msi.

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

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

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

- collections.namedtuple() was not working with the following field
  names:  cls, self, tuple, itemgetter, and property.

- 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 #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 #1655: Make imaplib IPv6-capable. Patch by Derek Morr.

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

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

- 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 #5692: In :class:`zipfile.Zipfile`, fix wrong path calculation when
  extracting a file to the root directory.

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

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

- 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 #5041: ctypes does now allow pickling wide character.

- 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 #5828 (Invalid behavior of unicode.lower): Fixed bogus logic in
  makeunicodedata.py and regenerated the Unicode database (This fixes
  u'\u1d79'.lower() == '\x00').

- Issue #1202: zipfile module would cause a DeprecationWarning when storing
  files with a CRC32 > 2**31-1.

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

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

- 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 #6553: Fixed a crash in cPickle.load(), when given a file-like object
  containing incomplete data.

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

- Issue #6455: Fixed test_build_ext under win32.

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

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

- 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 #6062: In distutils, fixed the package option of build_ext. Feedback
  and tests on pywin32 by Tim Golden.

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

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

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

- 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 #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 #6865: Fix reference counting issue in the initialization of the pwd
  module.

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

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

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

- Fix expat to not segfault with specially crafted input.

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

Build
-----

- Issue #6980: Fix ctypes build failure on armel-linux-gnueabi with
  -mfloat-abi=softfp.

- Issue #6802: Fix build issues on MacOSX 10.6

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

- 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 #5809: Specifying both --enable-framework and --enable-shared is
  an error. Configure now explicity tells you about this.

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

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

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

Tests
-----

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


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

*Release date: 14-Apr-2009*


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

*Release date: 06-Apr-2009*

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

- xrange() is now registered as a Sequence.

- 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 #4034: Fix weird attribute error messages of the traceback object. (As
  a result traceback.__members__ no longer exists.)

- 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 #5013: Fixed a bug in FileHandler which occurred when the delay
  parameter was set.

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

- 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 #4915: Port sysmodule to Windows CE.

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

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

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

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

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

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

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

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

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

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

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

Library
-------

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

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

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

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

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

- 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 #2625: added missing iteritems() call to the for loop in
  mailbox.MH.get_message().

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

- 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

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

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

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

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

- 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 #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 #5385: Fixed mmap crash after resize failure on windows.

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

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

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

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

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

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

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

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

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

- 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 #5203: Fixed ctypes segfaults when passing a unicode string to a
  function without argtypes (only occurs if HAVE_USABLE_WCHAR_T is false).

- 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 #3386: distutils.sysconfig.get_python_lib prefix argument was ignored
  under NT and OS2. Patch by Philip Jenvey.

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

- Partial fix to issue #1731706: memory leak in Tkapp_Call when calling
  from a thread different than the one that created the Tcl interpreter.
  Patch by Robert Hancock.

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

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

- 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 #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 #3997: zipfiles generated with more than 65536 files could not be
  opened with other applications.

- Issue #4816: itertools.combinations() and itertools.product were raising
  a ValueError for values of *r* larger than the input iterable.  They now
  correctly return an empty iterator.

- 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 #3954: Fix a potential SystemError in _hotshot.logreader error
  handling.

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

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

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

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

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

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

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

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

- 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 #2703: SimpleXMLRPCDispatcher.__init__: Provide default values for
  new arguments introduced in 2.5.

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

- Registered Decimal as a numbers.Number so that isinstance(d, Number) works.

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

- Restore Python 2.3 compatibility for decimal.py.

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

- 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 #4739: Add pydoc help topics for symbols, so that e.g. help('@')
  works as expected in the interactive environment.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Build
-----

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

C-API
-----

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

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

Tests
-----

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


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

*Release date: 04-Dec-2008*

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

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

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

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

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

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

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

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

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

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

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

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

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

Library
-------

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

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

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

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

- Fixed a modulefinder crash on certain relative imports.

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

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

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

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

Build
-----

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

- Issue #4289: Remove Cancel button from AdvancedDlg.

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

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

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

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

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

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

C-API
-----

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

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

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

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


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

*Release date: 01-Oct-2008*

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

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

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

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

Library
-------

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

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

- Issue #3950: Made turtle respect scale factors.

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

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

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

Build
-----

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

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


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

*Release date: 17-Sep-2008*

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

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

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

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

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

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

Build
-----

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


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

*Release date: 12-Sep-2008*

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

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

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

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

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

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

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

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

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

- Fix crashes on memory allocation failure found with failmalloc.

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

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

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

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

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

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

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

C-API
-----

- Aliased PyObject_Bytes to PyObject_Str.

Library
-------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- Silenced a trivial compiler warning in the sqlite module.

- Fixed two format strings in the _collections module.

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

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

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

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

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

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

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

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

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

Tests
-----

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

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

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

Build
-----

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

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

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

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


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

*Release date: 20-Aug-2008*

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

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

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

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

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

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

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

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

- Apply security patches from Apple.

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

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

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

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

Library
-------

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

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

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

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

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

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

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

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

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

- Issue #2222: Fixed reference leak when 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 #813342: Start the IDLE subprocess with -Qnew if the parent is
  started with that option.

- Bug #1565150: Fix subsecond processing for os.utime on Windows.

- Support for MSVC 8 was added to bdist_wininst.

- Bug #1446043: correctly raise a LookupError if an encoding name
  given to encodings.search_function() contains a dot.

- Bug #1560617: in pyclbr, return full module name not only for
  classes, but also for functions.

- Bug #1457823: cgi.(Sv)FormContentDict's constructor now takes
  keep_blank_values and strict_parsing keyword arguments.

- Bug #1566602: correct failure of posixpath unittest when $HOME ends
  with a slash.

- Bug #1565661: in webbrowser, split() the command for the default
  GNOME browser in case it is a command with args.

- Made the error message for time.strptime when the data and
  format do match be more clear.

- Fix a bug in traceback.format_exception_only() that led to an error
  being raised when print_exc() was called without an exception set.
  In version 2.4, this printed "None", restored that behavior.

- Make webbrowser.BackgroundBrowser usable in Windows (it wasn't
  because the close_fds arg to subprocess.Popen is not supported).

- Reverted patch #1504333 to sgmllib because it introduced an infinite
  loop.

- Patch #1553314: Fix the inspect.py slowdown that was hurting IPython
  & SAGE by adding smarter caching in inspect.getmodule()

- Fix missing import of the types module in logging.config.

- Patch #1550886: Fix decimal module context management implementation
  to match the localcontext() example from PEP 343.

- Bug #1545341: The 'classifier' keyword argument to the Distutils
  setup() function now accepts tuples as well as lists.

- Bug #1541863: uuid.uuid1 failed to generate unique identifiers on
  systems with low clock resolution.

- Bug #1531862: Do not close standard file descriptors in subprocess.

- idle: Honor the "Cancel" action in the save dialog (Debian bug
  #299092).

- Fix utf-8-sig incremental decoder, which didn't recognise a BOM when
  the first chunk fed to the decoder started with a BOM, but was
  longer than 3 bytes.

- The implementation of UnicodeError objects has been simplified
  (start and end attributes are now stored directly as Py_ssize_t
  members).

- Issue #829951: In the smtplib module, SMTP.starttls() now complies
  with RFC 3207 and forgets any knowledge obtained from the server not
  obtained from the TLS negotiation itself.  Patch contributed by Bill
  Fenner.

- Issue #1339: The smtplib.SMTP class has been refactored a bit such
  that the SMTP.starttls() caller no longer needs to call ehlo()
  beforehand.  SMTP.starttls() now raises an exception of the server
  does not claim to support starttls.  Adds the
  SMTP.ehlo_or_helo_if_needed() method.  Patch contributed by Bill
  Fenner.

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

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

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

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

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

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

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

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

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

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

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

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

- Backport of _fileio module from Python 3.0.

- Patch #1087741: mmap.mmap is now a class, not a factory function. It
  is also subclassable now.

- Patch #1648: added ``sys.getprofile()`` and ``sys.gettrace()``.

- Patch #1663329: added ``os.closerange()`` function to quickly close
  a range of file descriptors without considering errors.

- Patch #976880: ``mmap`` objects now have an ``rfind`` method that
  works as expected.  ``mmap.find`` also takes an optional ``end``
  parameter.

- _winreg's HKEY object has gained __enter__ and __exit__ methods to
  support the context manager protocol.  The _winreg module also
  gained a new function ``ExpandEnvironmentStrings`` to expand
  REG_EXPAND_SZ keys.

- itertools.starmap() now accepts any iterable input. Previously, it
  required the function inputs to be tuples.

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

- Issue #1646: Make socket support TIPC. The socket module now has
  support for TIPC under Linux, see http://tipc.sf.net/ for more
  information.

- Added interface for Windows' WSAIoctl to socket object and added an
  example for a simple network sniffer.

- Bug #1301: Bad assert in _tkinter fixed.

- Added bdist_wininst executable for VS 2008.

- Bug #1604: collections.deque.__init__(iterable) now clears any prior
  contents before adding elements from the iterable.  This fix brings
  the behavior into line with that for list.__init__().

- Added wide char functions to msvcrt module: getwch, getwche, putwch
  and ungetwch. The functions accept or return unicode.

- os.access now returns True on Windows for any existing directory.

- Added warnpy3k function to the warnings module.

- Marshal.dumps() now expects exact type matches for int, long, float,
  complex, tuple, list, dict, set, and frozenset.  Formerly, it would
  silently miscode subclasses of those types.  Now, it raises a
  ValueError instead.

- Patch #1388440: Add set_completion_display_matches_hook and
  get_completion_type to readline.

- Bug #1649098: Avoid declaration of zero-sized array declaration in
  structure.

- Removed the rgbimg module; been deprecated since Python 2.5.

- Bug #1721309: prevent bsddb module from freeing random memory.

- Bug #1233: fix bsddb.dbshelve.DBShelf append method to work as
  intended for RECNO databases.

- pybsddb.sf.net Bug #477182: Load the database flags at database open
  time so that opening a database previously created with the DB_DUP
  or DB_DUPSORT flag set will keep the proper behavior on subsequent
  opens.  Specifically: dictionary assignment to a DB object will
  replace all values for a given key when the database allows
  duplicate values.  DB users should use DB.put(k, v) when they want
  to store duplicates; not DB[k] = v.

- Add the bsddb.db.DBEnv.lock_id_free method.

- Bug #1686475: Support stat'ing open files on Windows again.

- Patch #1185447: binascii.b2a_qp() now correctly quotes binary
  characters with ASCII value less than 32. Also, it correctly quotes
  dots only if they occur on a single line, as opposed to the previous
  behavior of quoting dots if they are the second character of any
  line.

- Bug #1622896: fix a rare corner case where the bz2 module raised an
  error in spite of a succesful compression.

- Patch #1654417: make operator.{get,set,del}slice use the full range
  of Py_ssize_t.

- Patch #1646728: datetime.fromtimestamp fails with negative
  fractional times.  With unittest.

- Patch #1490190: posixmodule now includes os.chflags() and
  os.lchflags() functions on platforms where the underlying system
  calls are available.

- Patch #1494140: Add documentation for the new struct.Struct object.

- Patch #1432399: Support the HCI protocol for bluetooth sockets

- Patch #1657276: Make NETLINK_DNRTMSG conditional.

- Bug #1653736: Complain about keyword arguments to time.isoformat.

- Bug #1486663: don't reject keyword arguments for subclasses of
  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.

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