Server IP : 162.241.126.129 / Your IP : 18.191.72.220 Web Server : Apache System : Linux 162-241-126-129.cprapid.com 4.18.0-477.27.2.el8_8.x86_64 #1 SMP Fri Sep 29 08:21:01 EDT 2023 x86_64 User : rvway5nu4 ( 1018) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/doc/python3-docs/ |
Upload File : |
Python History -------------- This file contains the release messages for previous Python releases. As you read on you go back to the dark ages of Python's history. ====================================================================== What's New in Python 3.4.6? =========================== Release date: 2017-01-17 There were no changes between 3.4.6rc1 and 3.4.6 final. What's New in Python 3.4.6rc1? ============================== Release date: 2017-01-02 Core and Builtins ----------------- - Issue #28648: Fixed crash in Py_DecodeLocale() in debug build on Mac OS X when decode astral characters. Patch by Xiang Zhang. - Issue #28426: Fixed potential crash in PyUnicode_AsDecodedObject() in debug build. Library ------- - Issue #28563: Fixed possible DoS and arbitrary code execution when handle plural form selections in the gettext module. The expression parser now supports exact syntax supported by GNU gettext. - In the curses module, raise an error if window.getstr() or window.instr() is passed a negative value. - Issue #27783: Fix possible usage of uninitialized memory in operator.methodcaller. - Issue #27774: Fix possible Py_DECREF on unowned object in _sre. - Issue #27760: Fix possible integer overflow in binascii.b2a_qp. - Issue #27758: Fix possible integer overflow in the _csv module for large record lengths. - Issue #27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates that the script is in CGI mode. - Issue #27759: Fix selectors incorrectly retain invalid file descriptors. Patch by Mark Williams. Build ----- - Issue #28248: Update Windows build to use OpenSSL 1.0.2j. Tests ----- - Issue #27369: In test_pyexpat, avoid testing an error message detail that changed in Expat 2.2.0. What's New in Python 3.4.5? =========================== Release date: 2016-06-26 Tests ----- - Issue #26867: Ubuntu's openssl OP_NO_SSLv3 is forced on by default; fix test. What's New in Python 3.4.5rc1? ============================== Release date: 2016-06-11 Core and Builtins ----------------- - Issue #26478: Fix semantic bugs when using binary operators with dictionary views and tuples. - Issue #26171: Fix possible integer overflow and heap corruption in zipimporter.get_data(). Library ------- - Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283. - Fix TLS stripping vulnerability in smptlib, CVE-2016-0772. Reported by Team Oststrom - Issue #25939: On Windows open the cert store readonly in ssl.enum_certificates. - Issue #26012: Don't traverse into symlinks for ** pattern in pathlib.Path.[r]glob(). - Issue #24120: Ignore PermissionError when traversing a tree with pathlib.Path.[r]glob(). Patch by Ulrich Petri. - Skip getaddrinfo if host is already resolved. Patch by A. Jesse Jiryu Davis. - Add asyncio.timeout() context manager. - Issue #26050: Add asyncio.StreamReader.readuntil() method. Patch by Марк Коренберг. Tests ----- - Issue #25940: Changed test_ssl to use self-signed.pythontest.net. This avoids relying on svn.python.org, which recently changed root certificate. What's New in Python 3.4.4? =========================== Release date: 2015/12/20 Windows ------- - Issue #25844: Corrected =/== typo potentially leading to crash in launcher. What's New in Python 3.4.4rc1? ============================== Release date: 2015/12/06 Core and Builtins ----------------- - Issue #25709: Fixed problem with in-place string concatenation and utf-8 cache. - Issue #24097: Fixed crash in object.__reduce__() if slot name is freed inside __getattr__. - Issue #24731: Fixed crash on converting objects with special methods __bytes__, __trunc__, and __float__ returning instances of subclasses of bytes, int, and float to subclasses of bytes, int, and float correspondingly. - Issue #25388: Fixed tokenizer crash when processing undecodable source code with a null byte. - Issue #22995: Default implementation of __reduce__ and __reduce_ex__ now rejects builtin types with not defined __new__. - Issue #24802: Avoid buffer overreads when int(), float(), compile(), exec() and eval() are passed bytes-like objects. These objects are not necessarily terminated by a null byte, but the functions assumed they were. - Issue #24402: Fix input() to prompt to the redirected stdout when sys.stdout.fileno() fails. - Issue #24806: Prevent builtin types that are not allowed to be subclassed from being subclassed through multiple inheritance. - Issue #24848: Fixed a number of bugs in UTF-7 decoding of misformed data. - Issue #25280: Import trace messages emitted in verbose (-v) mode are no longer formatted twice. - Issue #25003: os.urandom() doesn't use getentropy() on Solaris because getentropy() is blocking, whereas os.urandom() should not block. getentropy() is supported since Solaris 11.3. - Issue #25182: The stdprinter (used as sys.stderr before the io module is imported at startup) now uses the backslashreplace error handler. - Issue #24891: Fix a race condition at Python startup if the file descriptor of stdin (0), stdout (1) or stderr (2) is closed while Python is creating sys.stdin, sys.stdout and sys.stderr objects. These attributes are now set to None if the creation of the object failed, instead of raising an OSError exception. Initial patch written by Marco Paolini. - Issue #21167: NAN operations are now handled correctly when python is compiled with ICC even if -fp-model strict is not specified. - Issue #4395: Better testing and documentation of binary operators. Patch by Martin Panter. - Issue #24467: Fixed possible buffer over-read in bytearray. The bytearray object now always allocates place for trailing null byte and it's buffer now is always null-terminated. - Issue #24115: Update uses of PyObject_IsTrue(), PyObject_Not(), PyObject_IsInstance(), PyObject_RichCompareBool() and _PyDict_Contains() to check for and handle errors correctly. - Issue #24257: Fixed system error in the comparison of faked types.SimpleNamespace. - Issue #22939: Fixed integer overflow in iterator object. Patch by Clement Rouault. - Issue #23985: Fix a possible buffer overrun when deleting a slice from the front of a bytearray and then appending some other bytes data. - Issue #24102: Fixed exception type checking in standard error handlers. - Issue #23757: PySequence_Tuple() incorrectly called the concrete list API when the data was a list subclass. - Issue #24407: Fix crash when dict is mutated while being updated. - Issue #24096: Make warnings.warn_explicit more robust against mutation of the warnings.filters list. - Issue #23996: Avoid a crash when a delegated generator raises an unnormalized StopIteration exception. Patch by Stefan Behnel. - Issue #24022: Fix tokenizer crash when processing undecodable source code. - Issue #23309: Avoid a deadlock at shutdown if a daemon thread is aborted while it is holding a lock to a buffered I/O object, and the main thread tries to use the same I/O object (typically stdout or stderr). A fatal error is emitted instead. - Issue #22977: Fixed formatting Windows error messages on Wine. Patch by Martin Panter. - Issue #23803: Fixed str.partition() and str.rpartition() when a separator is wider then partitioned string. - Issue #23192: Fixed generator lambdas. Patch by Bruno Cauet. - Issue #23629: Fix the default __sizeof__ implementation for variable-sized objects. - Issue #24044: Fix possible null pointer dereference in list.sort in out of memory conditions. - Issue #21354: PyCFunction_New function is exposed by python DLL again. Library ------- - Issue #24903: Fix regression in number of arguments compileall accepts when '-d' is specified. The check on the number of arguments has been dropped completely as it never worked correctly anyway. - Issue #25764: In the subprocess module, preserve any exception caused by fork() failure when preexec_fn is used. - Issue #6478: _strptime's regexp cache now is reset after changing timezone with time.tzset(). - Issue #25177: Fixed problem with the mean of very small and very large numbers. As a side effect, statistics.mean and statistics.variance should be significantly faster. - Issue #25718: Fixed copying object with state with boolean value is false. - Issue #10131: Fixed deep copying of minidom documents. Based on patch by Marian Ganisin. - Issue #25725: Fixed a reference leak in pickle.loads() when unpickling invalid data including tuple instructions. - Issue #25663: In the Readline completer, avoid listing duplicate global names, and search the global namespace before searching builtins. - Issue #25688: Fixed file leak in ElementTree.iterparse() raising an error. - Issue #23914: Fixed SystemError raised by unpickler on broken pickle data. - Issue #25691: Fixed crash on deleting ElementTree.Element attributes. - Issue #25624: ZipFile now always writes a ZIP_STORED header for directory entries. Patch by Dingyuan Wang. - Issue #25583: Avoid incorrect errors raised by os.makedirs(exist_ok=True) when the OS gives priority to errors such as EACCES over EEXIST. - Issue #25593: Change semantics of EventLoop.stop() in asyncio. - Issue #6973: When we know a subprocess.Popen process has died, do not allow the send_signal(), terminate(), or kill() methods to do anything as they could potentially signal a different process. - Issue #25578: Fix (another) memory leak in SSLSocket.getpeercer(). - Issue #25590: In the Readline completer, only call getattr() once per attribute. - Issue #25498: Fix a crash when garbage-collecting ctypes objects created by wrapping a memoryview. This was a regression made in 3.4.3. Based on patch by Eryksun. - Issue #18010: Fix the pydoc web server's module search function to handle exceptions from importing packages. - Issue #25510: fileinput.FileInput.readline() now returns b'' instead of '' at the end if the FileInput was opened with binary mode. Patch by Ryosuke Ito. - Issue #25530: Disable the vulnerable SSLv3 protocol by default when creating ssl.SSLContext. - Issue #25569: Fix memory leak in SSLSocket.getpeercert(). - Issue #21827: Fixed textwrap.dedent() for the case when largest common whitespace is a substring of smallest leading whitespace. Based on patch by Robert Li. - Issue #25471: Sockets returned from accept() shouldn't appear to be nonblocking. - Issue #25441: asyncio: Raise error from drain() when socket is closed. - Issue #25411: Improved Unicode support in SMTPHandler through better use of the email package. Thanks to user simon04 for the patch. - Issue #25380: Fixed protocol for the STACK_GLOBAL opcode in pickletools.opcodes. - Issue #23972: Updates asyncio datagram create method allowing reuseport and reuseaddr socket options to be set prior to binding the socket. Mirroring the existing asyncio create_server method the reuseaddr option for datagram sockets defaults to True if the O/S is 'posix' (except if the platform is Cygwin). Patch by Chris Laws. - Issue #25304: Add asyncio.run_coroutine_threadsafe(). This lets you submit a coroutine to a loop from another thread, returning a concurrent.futures.Future. By Vincent Michel. - Issue #25319: When threading.Event is reinitialized, the underlying condition should use a regular lock rather than a recursive lock. - Issue #25232: Fix CGIRequestHandler to split the query from the URL at the first question mark (?) rather than the last. Patch from Xiang Zhang. - Issue #24657: Prevent CGIRequestHandler from collapsing slashes in the query part of the URL as if it were a path. Patch from Xiang Zhang. - Issue #22958: Constructor and update method of weakref.WeakValueDictionary now accept the self and the dict keyword arguments. - Issue #22609: Constructor of collections.UserDict now accepts the self keyword argument. - Issue #25262. Added support for BINBYTES8 opcode in Python implementation of unpickler. Highest 32 bits of 64-bit size for BINUNICODE8 and BINBYTES8 opcodes no longer silently ignored on 32-bit platforms in C implementation. - Issue #25034: Fix string.Formatter problem with auto-numbering and nested format_specs. Patch by Anthon van der Neut. - Issue #25233: Rewrite the guts of asyncio.Queue and asyncio.Semaphore to be more understandable and correct. - Issue #23600: Default implementation of tzinfo.fromutc() was returning wrong results in some cases. - Issue #25203: Failed readline.set_completer_delims() no longer left the module in inconsistent state. - Prevent overflow in _Unpickler_Read. - Issue #25047: The XML encoding declaration written by Element Tree now respects the letter case given by the user. This restores the ability to write encoding names in uppercase like "UTF-8", which worked in Python 2. - Issue #19143: platform module now reads Windows version from kernel32.dll to avoid compatibility shims. - Issue #23517: Fix rounding in fromtimestamp() and utcfromtimestamp() methods of datetime.datetime: microseconds are now rounded to nearest with ties going to nearest even integer (ROUND_HALF_EVEN), instead of being rounding towards zero (ROUND_DOWN). It's important that these methods use the same rounding mode than datetime.timedelta to keep the property: (datetime(1970,1,1) + timedelta(seconds=t)) == datetime.utcfromtimestamp(t). It also the rounding mode used by round(float) for example. - Issue #24684: socket.socket.getaddrinfo() now calls PyUnicode_AsEncodedString() instead of calling the encode() method of the host, to handle correctly custom string with an encode() method which doesn't return a byte string. The encoder of the IDNA codec is now called directly instead of calling the encode() method of the string. - Issue #24982: shutil.make_archive() with the "zip" format now adds entries for directories (including empty directories) in ZIP file. - Issue #24857: Comparing call_args to a long sequence now correctly returns a boolean result instead of raising an exception. Patch by A Kaptur. - Issue #25019: Fixed a crash caused by setting non-string key of expat parser. Based on patch by John Leitch. - Issue #24917: time_strftime() buffer over-read. - Issue #23144: Make sure that HTMLParser.feed() returns all the data, even when convert_charrefs is True. - Issue #16180: Exit pdb if file has syntax error, instead of trapping user in an infinite loop. Patch by Xavier de Gaye. - Issue #21112: Fix regression in unittest.expectedFailure on subclasses. Patch from Berker Peksag. - Issue #24931: Instances of subclasses of namedtuples have their own __dict__ which breaks the inherited __dict__ property and breaks the _asdict() method. Removed the __dict__ property to prevent the conflict and fixed _asdict(). - Issue #24764: cgi.FieldStorage.read_multi() now ignores the Content-Length header in part headers. Patch written by Peter Landry and reviewed by Pierre Quentel. - Issue #24774: Fix docstring in http.server.test. Patch from Chiu-Hsiang Hsu. - Issue #21159: Improve message in configparser.InterpolationMissingOptionError. Patch from Łukasz Langa. - Issue #23888: Handle fractional time in cookie expiry. Patch by ssh. - Issue #23004: mock_open() now reads binary data correctly when the type of read_data is bytes. Initial patch by Aaron Hill. - Issue #23652: Make it possible to compile the select module against the libc headers from the Linux Standard Base, which do not include some EPOLL macros. Patch by Matt Frank. - Issue #22932: Fix timezones in email.utils.formatdate. Patch from Dmitry Shachnev. - Issue #23779: imaplib raises TypeError if authenticator tries to abort. Patch from Craig Holmquist. - Issue #23319: Fix ctypes.BigEndianStructure, swap correctly bytes. Patch written by Matthieu Gautier. - Issue #23254: Document how to close the TCPServer listening socket. Patch from Martin Panter. - Issue #19450: Update Windows and OS X installer builds to use SQLite 3.8.11. - Issue #23441: rcompleter now prints a tab character instead of displaying possible completions for an empty word. Initial patch by Martin Sekera. - Issue #24735: Fix invalid memory access in itertools.combinations_with_replacement(). - Issue #17527: Add PATCH to wsgiref.validator. Patch from Luca Sbardella. - Issue #24683: Fixed crashes in _json functions called with arguments of inappropriate type. - Issue #21697: shutil.copytree() now correctly handles symbolic links that point to directories. Patch by Eduardo Seabra and Thomas Kluyver. - Issue #24620: Random.setstate() now validates the value of state last element. - Issue #22153: Improve unittest docs. Patch from Martin Panter and evilzero. - Issue #24206: Fixed __eq__ and __ne__ methods of inspect classes. - Issue #21750: mock_open.read_data can now be read from each instance, as it could in Python 3.3. - Issue #23247: Fix a crash in the StreamWriter.reset() of CJK codecs. - Issue #18622: unittest.mock.mock_open().reset_mock would recurse infinitely. Patch from Nicola Palumbo and Laurent De Buyst. - Issue #24608: chunk.Chunk.read() now always returns bytes, not str. - Issue #18684: Fixed reading out of the buffer in the re module. - Issue #24259: tarfile now raises a ReadError if an archive is truncated inside a data segment. - Issue #24552: Fix use after free in an error case of the _pickle module. - Issue #24514: tarfile now tolerates number fields consisting of only whitespace. - Issue #19176: Fixed doctype() related bugs in C implementation of ElementTree. A deprecation warning no longer issued by XMLParser subclass with default doctype() method. Direct call of doctype() now issues a warning. Parser's doctype() now is not called if target's doctype() is called. Based on patch by Martin Panter. - Issue #20387: Restore semantic round-trip correctness in tokenize/untokenize for tab-indented blocks. - Issue #24456: Fixed possible buffer over-read in adpcm2lin() and lin2adpcm() functions of the audioop module. - Issue #24336: The contextmanager decorator now works with functions with keyword arguments called "func" and "self". Patch by Martin Panter. - Issue #24489: ensure a previously set C errno doesn't disturb cmath.polar(). - Issue #5633: Fixed timeit when the statement is a string and the setup is not. - Issue #24326: Fixed audioop.ratecv() with non-default weightB argument. Original patch by David Moore. - Issue #23840: tokenize.open() now closes the temporary binary file on error to fix a resource warning. - Issue #24257: Fixed segmentation fault in sqlite3.Row constructor with faked cursor type. - Issue #22107: tempfile.gettempdir() and tempfile.mkdtemp() now try again when a directory with the chosen name already exists on Windows as well as on Unix. tempfile.mkstemp() now fails early if parent directory is not valid (not exists or is a file) on Windows. - Issue #6598: Increased time precision and random number range in email.utils.make_msgid() to strengthen the uniqueness of the message ID. - Issue #24091: Fixed various crashes in corner cases in C implementation of ElementTree. - Issue #21931: msilib.FCICreate() now raises TypeError in the case of a bad argument instead of a ValueError with a bogus FCI error number. Patch by Jeffrey Armstrong. - Issue #23796: peek and read1 methods of BufferedReader now raise ValueError if they called on a closed object. Patch by John Hergenroeder. - Issue #24521: Fix possible integer overflows in the pickle module. - Issue #22931: Allow '[' and ']' in cookie values. - Issue #20274: Remove ignored and erroneous "kwargs" parameters from three METH_VARARGS methods on _sqlite.Connection. - Issue #24094: Fix possible crash in json.encode with poorly behaved dict subclasses. - Asyncio issue 222 / PR 231 (Victor Stinner) -- fix @coroutine functions without __name__. - Issue #9246: On POSIX, os.getcwd() now supports paths longer than 1025 bytes. Patch written by William Orr. - The keywords attribute of functools.partial is now always a dictionary. - Issues #24099, #24100, and #24101: Fix free-after-use bug in heapq's siftup and siftdown functions. - Backport collections.deque fixes from Python 3.5. Prevents reentrant badness during deletion by deferring the decref until the container has been restored to a consistent state. - Issue #23008: Fixed resolving attributes with boolean value is False in pydoc. - Fix asyncio issue 235: LifoQueue and PriorityQueue's put didn't increment unfinished tasks (this bug was introduced in 3.4.3 when JoinableQueue was merged with Queue). - Issue #23908: os functions now reject paths with embedded null character on Windows instead of silently truncate them. - Issue #23728: binascii.crc_hqx() could return an integer outside of the range 0-0xffff for empty data. - Issue #23811: Add missing newline to the PyCompileError error message. Patch by Alex Shkop. - Issue #17898: Fix exception in gettext.py when parsing certain plural forms. - Issue #22982: Improve BOM handling when seeking to multiple positions of a writable text file. - Issue #23865: close() methods in multiple modules now are idempotent and more robust at shutdown. If they need to release multiple resources, all are released even if errors occur. - Issue #23881: urllib.request.ftpwrapper constructor now closes the socket if the FTP connection failed to fix a ResourceWarning. - Issue #23400: Raise same exception on both Python 2 and 3 if sem_open is not available. Patch by Davin Potts. - Issue #15133: _tkinter.tkapp.getboolean() now supports Tcl_Obj and always returns bool. tkinter.BooleanVar now validates input values (accepted bool, int, str, and Tcl_Obj). tkinter.BooleanVar.get() now always returns bool. - Issue #23338: Fixed formatting ctypes error messages on Cygwin. Patch by Makoto Kato. - Issue #16840: Tkinter now supports 64-bit integers added in Tcl 8.4 and arbitrary precision integers added in Tcl 8.5. - Issue #23834: Fix socket.sendto(), use the C Py_ssize_t type to store the result of sendto() instead of the C int type. - Issue #21526: Tkinter now supports new boolean type in Tcl 8.5. - Issue #23838: linecache now clears the cache and returns an empty result on MemoryError. - Issue #18473: Fixed 2to3 and 3to2 compatible pickle mappings. Fixed ambigious reverse mappings. Added many new mappings. Import mapping is no longer applied to modules already mapped with full name mapping. - Issue #23745: The new email header parser now handles duplicate MIME parameter names without error, similar to how get_param behaves. - Issue #23792: Ignore KeyboardInterrupt when the pydoc pager is active. This mimics the behavior of the standard unix pagers, and prevents pipepager from shutting down while the pager itself is still running. - Issue #23742: ntpath.expandvars() no longer loses unbalanced single quotes. - Issue #21802: The reader in BufferedRWPair now is closed even when closing writer failed in BufferedRWPair.close(). - Issue #23671: string.Template now allows to specify the "self" parameter as keyword argument. string.Formatter now allows to specify the "self" and the "format_string" parameters as keyword arguments. - Issue #21560: An attempt to write a data of wrong type no longer cause GzipFile corruption. Original patch by Wolfgang Maier. - Issue #23647: Increase imaplib's MAXLINE to accommodate modern mailbox sizes. - Issue #23539: If body is None, http.client.HTTPConnection.request now sets Content-Length to 0 for PUT, POST, and PATCH headers to avoid 411 errors from some web servers. - Issue #22351: The nntplib.NNTP constructor no longer leaves the connection and socket open until the garbage collector cleans them up. Patch by Martin Panter. - Issue #23136: _strptime now uniformly handles all days in week 0, including Dec 30 of previous year. Based on patch by Jim Carroll. - Issue #23700: Iterator of NamedTemporaryFile now keeps a reference to NamedTemporaryFile instance. Patch by Bohuslav Kabrda. - Issue #22903: The fake test case created by unittest.loader when it fails importing a test module is now picklable. - Issue #23568: Add rdivmod support to MagicMock() objects. Patch by Håkan Lövdahl. - Issue #23138: Fixed parsing cookies with absent keys or values in cookiejar. Patch by Demian Brecht. - Issue #23051: multiprocessing.Pool methods imap() and imap_unordered() now handle exceptions raised by an iterator. Patch by Alon Diamant and Davin Potts. - Issue #22928: Disabled HTTP header injections in http.client. Original patch by Demian Brecht. - Issue #23615: Modules bz2, tarfile and tokenize now can be reloaded with imp.reload(). Patch by Thomas Kluyver. - Issue #23476: In the ssl module, enable OpenSSL's X509_V_FLAG_TRUSTED_FIRST flag on certificate stores when it is available. - Issue #23576: Avoid stalling in SSL reads when EOF has been reached in the SSL layer but the underlying connection hasn't been closed. - Issue #23504: Added an __all__ to the types module. - Issue #20204: Added the __module__ attribute to _tkinter classes. - Issue #23521: Corrected pure python implementation of timedelta division. * Eliminated OverflowError from timedelta * float for some floats; * Corrected rounding in timedelta true division. - Issue #21619: Popen objects no longer leave a zombie after exit in the with statement if the pipe was broken. Patch by Martin Panter. - Issue #6639: Module-level turtle functions no longer raise TclError after closing the window. - Issues #814253, #9179: Warnings now are raised when group references and conditional group references are used in lookbehind assertions in regular expressions. - Issue #23215: Multibyte codecs with custom error handlers that ignores errors consumed too much memory and raised SystemError or MemoryError. Original patch by Aleksi Torhamo. - Issue #5700: io.FileIO() called flush() after closing the file. flush() was not called in close() if closefd=False. - Issue #23374: Fixed pydoc failure with non-ASCII files when stdout encoding differs from file system encoding (e.g. on Mac OS). - Issue #23481: Remove RC4 from the SSL module's default cipher list. - Issue #21548: Fix pydoc.synopsis() and pydoc.apropos() on modules with empty docstrings. - Issue #22885: Fixed arbitrary code execution vulnerability in the dbm.dumb module. Original patch by Claudiu Popa. - Issue #23146: Fix mishandling of absolute Windows paths with forward slashes in pathlib. - Issue #23421: Fixed compression in tarfile CLI. Patch by wdv4758h. - Issue #23367: Fix possible overflows in the unicodedata module. - Issue #23361: Fix possible overflow in Windows subprocess creation code. - Issue #23801: Fix issue where cgi.FieldStorage did not always ignore the entire preamble to a multipart body. - Issue #23310: Fix MagicMock's initializer to work with __methods__, just like configure_mock(). Patch by Kasia Jachim. - asyncio: New event loop APIs: set_task_factory() and get_task_factory(). - asyncio: async() function is deprecated in favour of ensure_future(). - Issue #23898: Fix inspect.classify_class_attrs() to support attributes with overloaded __eq__ and __bool__. Patch by Mike Bayer. - Issue #24298: Fix inspect.signature() to correctly unwrap wrappers around bound methods. - Issue #23572: Fixed functools.singledispatch on classes with falsy metaclasses. Patch by Ethan Furman. IDLE ---- - Issue 15348: Stop the debugger engine (normally in a user process) before closing the debugger window (running in the IDLE process). This prevents the RuntimeErrors that were being caught and ignored. - Issue #24455: Prevent IDLE from hanging when a) closing the shell while the debugger is active (15347); b) closing the debugger with the [X] button (15348); and c) activating the debugger when already active (24455). The patch by Mark Roseman does this by making two changes. 1. Suspend and resume the gui.interaction method with the tcl vwait mechanism intended for this purpose (instead of root.mainloop & .quit). 2. In gui.run, allow any existing interaction to terminate first. - Change 'The program' to 'Your program' in an IDLE 'kill program?' message to make it clearer that the program referred to is the currently running user program, not IDLE itself. - Issue #24750: Improve the appearance of the IDLE editor window status bar. Patch by Mark Roseman. - Issue #25313: Change the handling of new built-in text color themes to better address the compatibility problem introduced by the addition of IDLE Dark. Consistently use the revised idleConf.CurrentTheme everywhere in idlelib. - Issue #24782: Extension configuration is now a tab in the IDLE Preferences dialog rather than a separate dialog. The former tabs are now a sorted list. Patch by Mark Roseman. - Issue #22726: Re-activate the config dialog help button with some content about the other buttons and the new IDLE Dark theme. - Issue #24820: IDLE now has an 'IDLE Dark' built-in text color theme. It is more or less IDLE Classic inverted, with a cobalt blue background. Strings, comments, keywords, ... are still green, red, orange, ... . To use it with IDLEs released before November 2015, hit the 'Save as New Custom Theme' button and enter a new name, such as 'Custom Dark'. The custom theme will work with any IDLE release, and can be modified. - Issue #25224: README.txt is now an idlelib index for IDLE developers and curious users. The previous user content is now in the IDLE doc chapter. 'IDLE' now means 'Integrated Development and Learning Environment'. - Issue #24820: Users can now set breakpoint colors in Settings -> Custom Highlighting. Original patch by Mark Roseman. - Issue #24972: Inactive selection background now matches active selection background, as configured by users, on all systems. Found items are now always highlighted on Windows. Initial patch by Mark Roseman. - Issue #24570: Idle: make calltip and completion boxes appear on Macs affected by a tk regression. Initial patch by Mark Roseman. - Issue #24988: Idle ScrolledList context menus (used in debugger) now work on Mac Aqua. Patch by Mark Roseman. - Issue #24801: Make right-click for context menu work on Mac Aqua. Patch by Mark Roseman. - Issue #25173: Associate tkinter messageboxes with a specific widget. For Mac OSX, make them a 'sheet'. Patch by Mark Roseman. - Issue #25198: Enhance the initial html viewer now used for Idle Help. * Properly indent fixed-pitch text (patch by Mark Roseman). * Give code snippet a very Sphinx-like light blueish-gray background. * Re-use initial width and height set by users for shell and editor. * When the Table of Contents (TOC) menu is used, put the section header at the top of the screen. - Issue #25225: Condense and rewrite Idle doc section on text colors. - Issue #21995: Explain some differences between IDLE and console Python. - Issue #22820: Explain need for *print* when running file from Idle editor. - Issue #25224: Doc: augment Idle feature list and no-subprocess section. - Issue #25219: Update doc for Idle command line options. Some were missing and notes were not correct. - Issue #24861: Most of idlelib is private and subject to change. Use idleib.idle.* to start Idle. See idlelib.__init__.__doc__. - Issue #25199: Idle: add synchronization comments for future maintainers. - Issue #16893: Replace help.txt with help.html for Idle doc display. The new idlelib/help.html is rstripped Doc/build/html/library/idle.html. It looks better than help.txt and will better document Idle as released. The tkinter html viewer that works for this file was written by Mark Roseman. The now unused EditorWindow.HelpDialog class and helt.txt file are deprecated. - Issue #24199: Deprecate unused idlelib.idlever with possible removal in 3.6. - Issue #24790: Remove extraneous code (which also create 2 & 3 conflicts). - Issue #23672: Allow Idle to edit and run files with astral chars in name. Patch by Mohd Sanad Zaki Rizvi. - Issue 24745: Idle editor default font. Switch from Courier to platform-sensitive TkFixedFont. This should not affect current customized font selections. If there is a problem, edit $HOME/.idlerc/config-main.cfg and remove 'fontxxx' entries from [Editor Window]. Patch by Mark Roseman. - Issue #21192: Idle editor. When a file is run, put its name in the restart bar. Do not print false prompts. Original patch by Adnan Umer. - Issue #13884: Idle menus. Remove tearoff lines. Patch by Roger Serwy. - Issue #23184: remove unused names and imports in idlelib. Initial patch by Al Sweigart. Tests ----- - Issue #25616: Tests for OrderedDict are extracted from test_collections into separate file test_ordered_dict. - Issue #25099: Make test_compileall not fail when an entry on sys.path cannot be written to (commonly seen in administrative installs on Windows). - Issue #24751: When running regrtest with the ``-w`` command line option, a test run is no longer marked as a failure if all tests succeed when re-run. - Issue #21520: test_zipfile no longer fails if the word 'bad' appears anywhere in the name of the current directory. - Issue #23799: Added test.support.start_threads() for running and cleaning up multiple threads. - Issue #22390: test.regrtest now emits a warning if temporary files or directories are left after running a test. - Issue #23583: Added tests for standard IO streams in IDLE. Build ----- - Issue #23445: pydebug builds now use "gcc -Og" where possible, to make the resulting executable faster. - Issue #24603: Update Windows builds to use OpenSSL1.0.2d and OS X 10.5 installer to use OpenSSL 1.0.2e. C API ----- - Issue #23998: PyImport_ReInitLock() now checks for lock allocation error Documentation ------------- - Issue #12067: Rewrite Comparisons section in the Expressions chapter of the language reference. Some of the details of comparing mixed types were incorrect or ambiguous. NotImplemented is only relevant at a lower level than the Expressions chapter. Added details of comparing range() objects, and default behaviour and consistency suggestions for user-defined classes. Patch from Andy Maier. - Issue #24952: Clarify the default size argument of stack_size() in the "threading" and "_thread" modules. Patch from Mattip. - Issue #24808: Update the types of some PyTypeObject fields. Patch by Joseph Weston. - Issue #22812: Fix unittest discovery examples. Patch from Pam McA'Nulty. - Issue #24129: Clarify the reference documentation for name resolution. This includes removing the assumption that readers will be familiar with the name resolution scheme Python used prior to the introduction of lexical scoping for function namespaces. Patch by Ivan Levkivskyi. - Issue #20769: Improve reload() docs. Patch by Dorian Pula. - Issue #23589: Remove duplicate sentence from the FAQ. Patch by Yongzhi Pan. - Issue #24729: Correct IO tutorial to match implementation regarding encoding parameter to open function. - Issue #24351: Clarify what is meant by "identifier" in the context of string.Template instances. - Issue #22155: Add File Handlers subsection with createfilehandler to tkinter doc. Remove obsolete example from FAQ. Patch by Martin Panter. - Issue #24029: Document the name binding behavior for submodule imports. - Issue #24077: Fix typo in man page for -I command option: -s, not -S. Tools/Demos ----------- - Issue #25440: Fix output of python-config --extension-suffix. - Issue #23330: h2py now supports arbitrary filenames in #include. - Issue #24031: make patchcheck now supports git checkouts, too. Windows ------- - Issue #24306: Sets component ID for launcher to match 3.5 and later to avoid downgrading. - Issue #25022: Removed very outdated PC/example_nt/ directory. What's New in Python 3.4.3? =========================== Release date: 2015-02-23 Core and Builtins ----------------- - Issue #22735: Fix many edge cases (including crashes) involving custom mro() implementations. - Issue #22896: Avoid using PyObject_AsCharBuffer(), PyObject_AsReadBuffer() and PyObject_AsWriteBuffer(). - Issue #21295: Revert some changes (issue #16795) to AST line numbers and column offsets that constituted a regression. - Issue #21408: The default __ne__() now returns NotImplemented if __eq__() returned NotImplemented. Original patch by Martin Panter. - Issue #23321: Fixed a crash in str.decode() when error handler returned replacement string longer than malformed input data. - Issue #23048: Fix jumping out of an infinite while loop in the pdb. - Issue #20335: bytes constructor now raises TypeError when encoding or errors is specified with non-string argument. Based on patch by Renaud Blanch. - Issue #22335: Fix crash when trying to enlarge a bytearray to 0x7fffffff bytes on a 32-bit platform. - Issue #22653: Fix an assertion failure in debug mode when doing a reentrant dict insertion in debug mode. - Issue #22643: Fix integer overflow in Unicode case operations (upper, lower, title, swapcase, casefold). - Issue #22604: Fix assertion error in debug mode when dividing a complex number by (nan+0j). - Issue #22470: Fixed integer overflow issues in "backslashreplace", "xmlcharrefreplace", and "surrogatepass" error handlers. - Issue #22520: Fix overflow checking when generating the repr of a unicode object. - Issue #22519: Fix overflow checking in PyBytes_Repr. - Issue #22518: Fix integer overflow issues in latin-1 encoding. - Issue #23165: Perform overflow checks before allocating memory in the _Py_char2wchar function. Library ------- - Issue #23399: pyvenv creates relative symlinks where possible. - Issue #23099: Closing io.BytesIO with exported buffer is rejected now to prevent corrupting exported buffer. - Issue #23363: Fix possible overflow in itertools.permutations. - Issue #23364: Fix possible overflow in itertools.product. - Issue #23366: Fixed possible integer overflow in itertools.combinations. - Issue #23369: Fixed possible integer overflow in _json.encode_basestring_ascii. - Issue #23353: Fix the exception handling of generators in PyEval_EvalFrameEx(). At entry, save or swap the exception state even if PyEval_EvalFrameEx() is called with throwflag=0. At exit, the exception state is now always restored or swapped, not only if why is WHY_YIELD or WHY_RETURN. Patch co-written with Antoine Pitrou. - Issue #18518: timeit now rejects statements which can't be compiled outside a function or a loop (e.g. "return" or "break"). - Issue #23094: Fixed readline with frames in Python implementation of pickle. - Issue #23268: Fixed bugs in the comparison of ipaddress classes. - Issue #21408: Removed incorrect implementations of __ne__() which didn't returned NotImplemented if __eq__() returned NotImplemented. The default __ne__() now works correctly. - Issue #19996: :class:`email.feedparser.FeedParser` now handles (malformed) headers with no key rather than assuming the body has started. - Issue #23248: Update ssl error codes from latest OpenSSL git master. - Issue #23098: 64-bit dev_t is now supported in the os module. - Issue #23250: In the http.cookies module, capitalize "HttpOnly" and "Secure" as they are written in the standard. - Issue #23063: In the distutils' check command, fix parsing of reST with code or code-block directives. - Issue #23209, #23225: selectors.BaseSelector.close() now clears its internal reference to the selector mapping to break a reference cycle. Initial patch written by Martin Richard. - Issue #21356: Make ssl.RAND_egd() optional to support LibreSSL. The availability of the function is checked during the compilation. Patch written by Bernard Spil. - Issue #20896, #22935: The :func:`ssl.get_server_certificate` function now uses the :data:`~ssl.PROTOCOL_SSLv23` protocol by default, not :data:`~ssl.PROTOCOL_SSLv3`, for maximum compatibility and support platforms where :data:`~ssl.PROTOCOL_SSLv3` support is disabled. - Issue #23111: In the ftplib, make ssl.PROTOCOL_SSLv23 the default protocol version. - Issue #23132: Mitigate regression in speed and clarity in functools.total_ordering. - Issue #22585: On OpenBSD 5.6 and newer, os.urandom() now calls getentropy(), instead of reading /dev/urandom, to get pseudo-random bytes. - Issue #23112: Fix SimpleHTTPServer to correctly carry the query string and fragment when it redirects to add a trailing slash. - Issue #23093: In the io, module allow more operations to work on detached streams. - Issue #19104: pprint now produces evaluable output for wrapped strings. - Issue #23071: Added missing names to codecs.__all__. Patch by Martin Panter. - Issue #15513: Added a __sizeof__ implementation for pickle classes. - Issue #19858: pickletools.optimize() now aware of the MEMOIZE opcode, can produce more compact result and no longer produces invalid output if input data contains MEMOIZE opcodes together with PUT or BINPUT opcodes. - Issue #22095: Fixed HTTPConnection.set_tunnel with default port. The port value in the host header was set to "None". Patch by Demian Brecht. - Issue #23016: A warning no longer produces an AttributeError when the program is run with pythonw.exe. - Issue #21775: shutil.copytree(): fix crash when copying to VFAT. An exception handler assumed that that OSError objects always have a 'winerror' attribute. That is not the case, so the exception handler itself raised AttributeError when run on Linux (and, presumably, any other non-Windows OS). Patch by Greg Ward. - Issue #1218234: Fix inspect.getsource() to load updated source of reloaded module. Initial patch by Berker Peksag. - Issue #22959: In the constructor of http.client.HTTPSConnection, prefer the context's check_hostname attribute over the *check_hostname* parameter. - Issue #16043: Add a default limit for the amount of data xmlrpclib.gzip_decode will return. This resolves CVE-2013-1753. - Issue #22966: Fix __pycache__ pyc file name clobber when pyc_compile is asked to compile a source file containing multiple dots in the source file name. - Issue #21971: Update turtledemo doc and add module to the index. - Issue #21032. Fixed socket leak if HTTPConnection.getresponse() fails. Original patch by Martin Panter. - Issue #22960: Add a context argument to xmlrpclib.ServerProxy constructor. - Issue #22915: SAX parser now supports files opened with file descriptor or bytes path. - Issue #22609: Constructors and update methods of mapping classes in the collections module now accept the self keyword argument. - Issue #22788: Add *context* parameter to logging.handlers.HTTPHandler. - Issue #22921: Allow SSLContext to take the *hostname* parameter even if OpenSSL doesn't support SNI. - Issue #22894: TestCase.subTest() would cause the test suite to be stopped when in failfast mode, even in the absence of failures. - Issue #22638: SSLv3 is now disabled throughout the standard library. It can still be enabled by instantiating a SSLContext manually. - Issue #22370: Windows detection in pathlib is now more robust. - Issue #22841: Reject coroutines in asyncio add_signal_handler(). Patch by Ludovic.Gasc. - Issue #22849: Fix possible double free in the io.TextIOWrapper constructor. - Issue #12728: Different Unicode characters having the same uppercase but different lowercase are now matched in case-insensitive regular expressions. - Issue #22821: Fixed fcntl() with integer argument on 64-bit big-endian platforms. - Issue #22406: Fixed the uu_codec codec incorrectly ported to 3.x. Based on patch by Martin Panter. - Issue #17293: uuid.getnode() now determines MAC address on AIX using netstat. Based on patch by Aivars Kalvāns. - Issue #22769: Fixed ttk.Treeview.tag_has() when called without arguments. - Issue #22417: Verify certificates by default in httplib (PEP 476). - Issue #22775: Fixed unpickling of http.cookies.SimpleCookie with protocol 2 and above. Patch by Tim Graham. - Issue #22366: urllib.request.urlopen will accept a context object (SSLContext) as an argument which will then used be for HTTPS connection. Patch by Alex Gaynor. - Issue #22776: Brought excluded code into the scope of a try block in SysLogHandler.emit(). - Issue #22665: Add missing get_terminal_size and SameFileError to shutil.__all__. - Issue #17381: Fixed handling of case-insensitive ranges in regular expressions. - Issue #22410: Module level functions in the re module now cache compiled locale-dependent regular expressions taking into account the locale. - Issue #22759: Query methods on pathlib.Path() (exists(), is_dir(), etc.) now return False when the underlying stat call raises NotADirectoryError. - Issue #8876: distutils now falls back to copying files when hard linking doesn't work. This allows use with special filesystems such as VirtualBox shared folders. - Issue #18853: Fixed ResourceWarning in shlex.__nain__. - Issue #9351: Defaults set with set_defaults on an argparse subparser are no longer ignored when also set on the parent parser. - Issue #21991: Make email.headerregistry's header 'params' attributes be read-only (MappingProxyType). Previously the dictionary was modifiable but a new one was created on each access of the attribute. - Issue #22641: In asyncio, the default SSL context for client connections is now created using ssl.create_default_context(), for stronger security. - Issue #22435: Fix a file descriptor leak when SocketServer bind fails. - Issue #13096: Fixed segfault in CTypes POINTER handling of large values. - Issue #11694: Raise ConversionError in xdrlib as documented. Patch by Filip Gruszczyński and Claudiu Popa. - Issue #22462: Fix pyexpat's creation of a dummy frame to make it appear in exception tracebacks. - Issue #21173: Fix len() on a WeakKeyDictionary when .clear() was called with an iterator alive. - Issue #11866: Eliminated race condition in the computation of names for new threads. - Issue #21905: Avoid RuntimeError in pickle.whichmodule() when sys.modules is mutated while iterating. Patch by Olivier Grisel. - Issue #22219: The zipfile module CLI now adds entries for directories (including empty directories) in ZIP file. - Issue #22449: In the ssl.SSLContext.load_default_certs, consult the environmental variables SSL_CERT_DIR and SSL_CERT_FILE on Windows. - Issue #20076: Added non derived UTF-8 aliases to locale aliases table. - Issue #20079: Added locales supported in glibc 2.18 to locale alias table. - Issue #22396: On 32-bit AIX platform, don't expose os.posix_fadvise() nor os.posix_fallocate() because their prototypes in system headers are wrong. - Issue #22517: When a io.BufferedRWPair object is deallocated, clear its weakrefs. - Issue #22448: Improve canceled timer handles cleanup to prevent unbound memory usage. Patch by Joshua Moore-Oliva. - Issue #23009: Make sure selectors.EpollSelecrtor.select() works when no FD is registered. IDLE ---- - Issue #20577: Configuration of the max line length for the FormatParagraph extension has been moved from the General tab of the Idle preferences dialog to the FormatParagraph tab of the Config Extensions dialog. Patch by Tal Einat. - Issue #16893: Update Idle doc chapter to match current Idle and add new information. - Issue #3068: Add Idle extension configuration dialog to Options menu. Changes are written to HOME/.idlerc/config-extensions.cfg. Original patch by Tal Einat. - Issue #16233: A module browser (File : Class Browser, Alt+C) requires an editor window with a filename. When Class Browser is requested otherwise, from a shell, output window, or 'Untitled' editor, Idle no longer displays an error box. It now pops up an Open Module box (Alt+M). If a valid name is entered and a module is opened, a corresponding browser is also opened. - Issue #4832: Save As to type Python files automatically adds .py to the name you enter (even if your system does not display it). Some systems automatically add .txt when type is Text files. - Issue #21986: Code objects are not normally pickled by the pickle module. To match this, they are no longer pickled when running under Idle. - Issue #23180: Rename IDLE "Windows" menu item to "Window". Patch by Al Sweigart. Tests ----- - Issue #23392: Added tests for marshal C API that works with FILE*. - Issue #18982: Add tests for CLI of the calendar module. - Issue #19548: Added some additional checks to test_codecs to ensure that statements in the updated documentation remain accurate. Patch by Martin Panter. - Issue #22838: All test_re tests now work with unittest test discovery. - Issue #22173: Update lib2to3 tests to use unittest test discovery. - Issue #16000: Convert test_curses to use unittest. - Issue #21456: Skip two tests in test_urllib2net.py if _ssl module not present. Patch by Remi Pointel. - Issue #22770: Prevent some Tk segfaults on OS X when running gui tests. - Issue #23211: Workaround test_logging failure on some OS X 10.6 systems. - Issue #23345: Prevent test_ssl failures with large OpenSSL patch level values (like 0.9.8zc). - Issue #22289: Prevent test_urllib2net failures due to ftp connection timeout. Build ----- - Issue #15506: Use standard PKG_PROG_PKG_CONFIG autoconf macro in the configure script. - Issue #22935: Allow the ssl module to be compiled if openssl doesn't support SSL 3. - Issue #16537: Check whether self.extensions is empty in setup.py. Patch by Jonathan Hosmer. - Issue #18096: Fix library order returned by python-config. - Issue #17219: Add library build dir for Python extension cross-builds. - Issue #17128: Use private version of OpenSSL for 3.4.3 OS X 10.5+ installer. C API ----- - Issue #22079: PyType_Ready() now checks that statically allocated type has no dynamically allocated bases. Documentation ------------- - Issue #19548: Update the codecs module documentation to better cover the distinction between text encodings and other codecs, together with other clarifications. Patch by Martin Panter. - Issue #22914: Update the Python 2/3 porting HOWTO to describe a more automated approach. - Issue #21514: The documentation of the json module now refers to new JSON RFC 7159 instead of obsoleted RFC 4627. Tools/Demos ----------- - Issue #22314: pydoc now works when the LINES environment variable is set. Windows ------- - Issue #17896: The Windows build scripts now expect external library sources to be in ``PCbuild\..\externals`` rather than ``PCbuild\..\..``. - Issue #17717: The Windows build scripts now use a copy of NASM pulled from svn.python.org to build OpenSSL. - Issue #22644: The bundled version of OpenSSL has been updated to 1.0.1j. What's New in Python 3.4.2? =========================== Release date: 2014-10-06 Library ------- - Issue #10510: distutils register and upload methods now use HTML standards compliant CRLF line endings. - Issue #9850: Fixed macpath.join() for empty first component. Patch by Oleg Oshmyan. - Issue #22427: TemporaryDirectory no longer attempts to clean up twice when used in the with statement in generator. - Issue #20912: Now directories added to ZIP file have correct Unix and MS-DOS directory attributes. - Issue #21866: ZipFile.close() no longer writes ZIP64 central directory records if allowZip64 is false. - Issue #22415: Fixed debugging output of the GROUPREF_EXISTS opcode in the re module. Removed trailing spaces in debugging output. - Issue #22423: Unhandled exception in thread no longer causes unhandled AttributeError when sys.stderr is None. - Issue #21332: Ensure that ``bufsize=1`` in subprocess.Popen() selects line buffering, rather than block buffering. Patch by Akira Li. What's New in Python 3.4.2rc1? ============================== Release date: 2014-09-22 Core and Builtins ----------------- - Issue #22258: Fix the the internal function set_inheritable() on Illumos. This platform exposes the function ``ioctl(FIOCLEX)``, but calling it fails with errno is ENOTTY: "Inappropriate ioctl for device". set_inheritable() now falls back to the slower ``fcntl()`` (``F_GETFD`` and then ``F_SETFD``). - Issue #21669: With the aid of heuristics in SyntaxError.__init__, the parser now attempts to generate more meaningful (or at least more search engine friendly) error messages when "exec" and "print" are used as statements. - Issue #21642: In the conditional if-else expression, allow an integer written with no space between itself and the ``else`` keyword (e.g. ``True if 42else False``) to be valid syntax. - Issue #21523: Fix over-pessimistic computation of the stack effect of some opcodes in the compiler. This also fixes a quadratic compilation time issue noticeable when compiling code with a large number of "and" and "or" operators. Library ------- - Issue #21091: Fix API bug: email.message.EmailMessage.is_attachment is now a method. Since EmailMessage is provisional, we can change the API in a maintenance release, but we use a trick to remain backward compatible with 3.4.0/1. - Issue #21079: Fix email.message.EmailMessage.is_attachment to return the correct result when the header has parameters as well as a value. - Issue #22247: Add NNTPError to nntplib.__all__. - Issue #4180: The warnings registries are now reset when the filters are modified. - Issue #22419: Limit the length of incoming HTTP request in wsgiref server to 65536 bytes and send a 414 error code for higher lengths. Patch contributed by Devin Cook. - Lax cookie parsing in http.cookies could be a security issue when combined with non-standard cookie handling in some Web browsers. Reported by Sergey Bobrov. - Issue #22384: An exception in Tkinter callback no longer crashes the program when it is run with pythonw.exe. - Issue #22168: Prevent turtle AttributeError with non-default Canvas on OS X. - Issue #21147: sqlite3 now raises an exception if the request contains a null character instead of truncate it. Based on patch by Victor Stinner. - Issue #21951: Fixed a crash in Tkinter on AIX when called Tcl command with empty string or tuple argument. - Issue #21951: Tkinter now most likely raises MemoryError instead of crash if the memory allocation fails. - Issue #22338: Fix a crash in the json module on memory allocation failure. - Issue #22226: First letter no longer is stripped from the "status" key in the result of Treeview.heading(). - Issue #19524: Fixed resource leak in the HTTP connection when an invalid response is received. Patch by Martin Panter. - Issue #22051: turtledemo no longer reloads examples to re-run them. Initialization of variables and gui setup should be done in main(), which is called each time a demo is run, but not on import. - Issue #21933: Turtledemo users can change the code font size with a menu selection or control(command) '-' or '+' or control-mousewheel. Original patch by Lita Cho. - Issue #21597: The separator between the turtledemo text pane and the drawing canvas can now be grabbed and dragged with a mouse. The code text pane can be widened to easily view or copy the full width of the text. The canvas can be widened on small screens. Original patches by Jan Kanis and Lita Cho. - Issue #18132: Turtledemo buttons no longer disappear when the window is shrunk. Original patches by Jan Kanis and Lita Cho. - Issue #22216: smtplib now resets its state more completely after a quit. The most obvious consequence of the previous behavior was a STARTTLS failure during a connect/starttls/quit/connect/starttls sequence. - Issue #22185: Fix an occasional RuntimeError in threading.Condition.wait() caused by mutation of the waiters queue without holding the lock. Patch by Doug Zongker. - Issue #22182: Use e.args to unpack exceptions correctly in distutils.file_util.move_file. Patch by Claudiu Popa. - The webbrowser module now uses subprocess's start_new_session=True rather than a potentially risky preexec_fn=os.setsid call. - Issue #22236: Fixed Tkinter images copying operations in NoDefaultRoot mode. - Issue #22191: Fix warnings.__all__. - Issue #15696: Add a __sizeof__ implementation for mmap objects on Windows. - Issue #22068: Avoided reference loops with Variables and Fonts in Tkinter. - Issue #22165: SimpleHTTPRequestHandler now supports undecodable file names. - Issue #8797: Raise HTTPError on failed Basic Authentication immediately. Initial patch by Sam Bull. - Issue #20729: Restored the use of lazy iterkeys()/itervalues()/iteritems() in the mailbox module. - Issue #21448: Changed FeedParser feed() to avoid O(N**2) behavior when parsing long line. Original patch by Raymond Hettinger. - Issue #22184: The functools LRU Cache decorator factory now gives an earlier and clearer error message when the user forgets the required parameters. - Issue #17923: glob() patterns ending with a slash no longer match non-dirs on AIX. Based on patch by Delhallt. - Issue #21121: Don't force 3rd party C extensions to be built with -Werror=declaration-after-statement. - Issue #21975: Fixed crash when using uninitialized sqlite3.Row (in particular when unpickling pickled sqlite3.Row). sqlite3.Row is now initialized in the __new__() method. - Issue #21580: Now Tkinter correctly handles bytes arguments passed to Tk. In particular this allows to initialize images from binary data. - Issue #17172: Make turtledemo start as active on OS X even when run with subprocess. Patch by Lita Cho. - Issue #21704: Fix build error for _multiprocessing when semaphores are not available. Patch by Arfrever Frehtes Taifersar Arahesis. - Fix repr(_socket.socket) on Windows 64-bit: don't fail with OverflowError on closed socket. repr(socket.socket) already works fine. - Issue #16133: The asynchat.async_chat.handle_read() method now ignores BlockingIOError exceptions. - Issue #22044: Fixed premature DECREF in call_tzinfo_method. Patch by Tom Flanagan. - Issue #19884: readline: Disable the meta modifier key if stdout is not a terminal to not write the ANSI sequence "\033[1034h" into stdout. This sequence is used on some terminal (ex: TERM=xterm-256color") to enable support of 8 bit characters. - Issue #21888: plistlib's load() and loads() now work if the fmt parameter is specified. - Issue #21044: tarfile.open() now handles fileobj with an integer 'name' attribute. Based on patch by Antoine Pietri. - Issue #21867: Prevent turtle crash due to invalid undo buffer size. - Issue #19076: Don't pass the redundant 'file' argument to self.error(). - Issue #21942: Fixed source file viewing in pydoc's server mode on Windows. - Issue #11259: asynchat.async_chat().set_terminator() now raises a ValueError if the number of received bytes is negative. - Issue #12523: asynchat.async_chat.push() now raises a TypeError if it doesn't get a bytes string - Issue #21707: Add missing kwonlyargcount argument to ModuleFinder.replace_paths_in_code(). - Issue #20639: calling Path.with_suffix('') allows removing the suffix again. Patch by July Tikhonov. - Issue #21714: Disallow the construction of invalid paths using Path.with_name(). Original patch by Antony Lee. - Issue #21897: Fix a crash with the f_locals attribute with closure variables when frame.clear() has been called. - Issue #21151: Fixed a segfault in the winreg module when ``None`` is passed as a ``REG_BINARY`` value to SetValueEx. Patch by John Ehresman. - Issue #21090: io.FileIO.readall() does not ignore I/O errors anymore. Before, it ignored I/O errors if at least the first C call read() succeed. - Issue #21781: ssl.RAND_add() now supports strings longer than 2 GB. - Issue #11453: asyncore: emit a ResourceWarning when an unclosed file_wrapper object is destroyed. The destructor now closes the file if needed. The close() method can now be called twice: the second call does nothing. - Issue #21858: Better handling of Python exceptions in the sqlite3 module. - Issue #21476: Make sure the email.parser.BytesParser TextIOWrapper is discarded after parsing, so the input file isn't unexpectedly closed. - Issue #21729: Used the "with" statement in the dbm.dumb module to ensure files closing. Patch by Claudiu Popa. - Issue #21491: socketserver: Fix a race condition in child processes reaping. - Issue #21832: Require named tuple inputs to be exact strings. - Issue #19145: The times argument for itertools.repeat now handles negative values the same way for keyword arguments as it does for positional arguments. - Issue #21812: turtle.shapetransform did not tranform the turtle on the first call. (Issue identified and fixed by Lita Cho.) - Issue #21635: The difflib SequenceMatcher.get_matching_blocks() method cache didn't match the actual result. The former was a list of tuples and the latter was a list of named tuples. - Issue #21722: The distutils "upload" command now exits with a non-zero return code when uploading fails. Patch by Martin Dengler. - Issue #21723: asyncio.Queue: support any type of number (ex: float) for the maximum size. Patch written by Vajrasky Kok. - Issue #21326: Add a new is_closed() method to asyncio.BaseEventLoop. run_forever() and run_until_complete() methods of asyncio.BaseEventLoop now raise an exception if the event loop was closed. - Issue #21774: Fixed NameError for an incorrect variable reference in the XML Minidom code for creating processing instructions. (Found and fixed by Claudiu Popa.) - Issue #21766: Prevent a security hole in CGIHTTPServer by URL unquoting paths before checking for a CGI script at that path. - Issue #21310: Fixed possible resource leak in failed open(). - Issue #21677: Fixed chaining nonnormalized exceptions in io close() methods. - Issue #11709: Fix the pydoc.help function to not fail when sys.stdin is not a valid file. - Issue #13223: Fix pydoc.writedoc so that the HTML documentation for methods that use 'self' in the example code is generated correctly. - Issue #21463: In urllib.request, fix pruning of the FTP cache. - Issue #21618: The subprocess module could fail to close open fds that were inherited by the calling process and already higher than POSIX resource limits would otherwise allow. On systems with a functioning /proc/self/fd or /dev/fd interface the max is now ignored and all fds are closed. - Issue #21552: Fixed possible integer overflow of too long string lengths in the tkinter module on 64-bit platforms. - Issue #14315: The zipfile module now ignores extra fields in the central directory that are too short to be parsed instead of letting a struct.unpack error bubble up as this "bad data" appears in many real world zip files in the wild and is ignored by other zip tools. - Issue #21402: tkinter.ttk now works when default root window is not set. - Issue #10203: sqlite3.Row now truly supports sequence protocol. In particular it supports reverse() and negative indices. Original patch by Claudiu Popa. - Issue #18807: If copying (no symlinks) specified for a venv, then the python interpreter aliases (python, python3) are now created by copying rather than symlinking. - Issue #14710: pkgutil.get_loader() no longer raises an exception when None is found in sys.modules. - Issue #14710: pkgutil.find_loader() no longer raises an exception when a module doesn't exist. - Issue #21481: Argparse equality and inequality tests now return NotImplemented when comparing to an unknown type. - Issue #8743: Fix interoperability between set objects and the collections.Set() abstract base class. - Issue #13355: random.triangular() no longer fails with a ZeroDivisionError when low equals high. - Issue #21538: The plistlib module now supports loading of binary plist files when reference or offset size is not a power of two. - Issue #21801: Validate that __signature__ is None or an instance of Signature. - Issue #21923: Prevent AttributeError in distutils.sysconfig.customize_compiler due to possible uninitialized _config_vars. - Issue #21323: Fix http.server to again handle scripts in CGI subdirectories, broken by the fix for security issue #19435. Patch by Zach Byrne. Extension Modules ----------------- - Issue #22176: Update the ctypes module's libffi to v3.1. This release adds support for the Linux AArch64 and POWERPC ELF ABIv2 little endian architectures. Build ----- - Issue #15661: python.org OS X installers are now distributed as signed installer packages compatible with the Gatekeeper security feature. - Issue #21958: Define HAVE_ROUND when building with Visual Studio 2013 and above. Patch by Zachary Turner. - Issue #15759: "make suspicious", "make linkcheck" and "make doctest" in Doc/ now display special message when and only when there are failures. - Issue #17095: Fix Modules/Setup *shared* support. - Issue #21811: Anticipated fixes to support OS X versions > 10.9. - Issue #21166: Prevent possible segfaults and other random failures of python --generate-posix-vars in pybuilddir.txt build target. IDLE ---- - Issue #17390: Adjust Editor window title; remove 'Python', move version to end. - Issue #14105: Idle debugger breakpoints no longer disappear when inseting or deleting lines. - Issue #17172: Turtledemo can now be run from Idle. Currently, the entry is on the Help menu, but it may move to Run. Patch by Ramchandra Apt and Lita Cho. - Issue #21765: Add support for non-ascii identifiers to HyperParser. - Issue #21940: Add unittest for WidgetRedirector. Initial patch by Saimadhav Heblikar. - Issue #18592: Add unittest for SearchDialogBase. Patch by Phil Webster. - Issue #21694: Add unittest for ParenMatch. Patch by Saimadhav Heblikar. - Issue #21686: add unittest for HyperParser. Original patch by Saimadhav Heblikar. - Issue #12387: Add missing upper(lower)case versions of default Windows key bindings for Idle so Caps Lock does not disable them. Patch by Roger Serwy. - Issue #21695: Closing a Find-in-files output window while the search is still in progress no longer closes Idle. - Issue #18910: Add unittest for textView. Patch by Phil Webster. - Issue #18292: Add unittest for AutoExpand. Patch by Saihadhav Heblikar. - Issue #18409: Add unittest for AutoComplete. Patch by Phil Webster. Tests ----- - Issue #22166: With the assistance of a new internal _codecs._forget_codec helping function, test_codecs now clears the encoding caches to avoid the appearance of a reference leak - Issue #22236: Tkinter tests now don't reuse default root window. New root window is created for every test class. - Issue #20746: Fix test_pdb to run in refleak mode (-R). Patch by Xavier de Gaye. - Issue #22060: test_ctypes has been somewhat cleaned up and simplified; it now uses unittest test discovery to find its tests. - Issue #22104: regrtest.py no longer holds a reference to the suite of tests loaded from test modules that don't define test_main(). - Issue #22002: Added ``load_package_tests`` function to test.support and used it to implement/augment test discovery in test_asyncio, test_email, test_importlib, test_json, and test_tools. - Issue #21976: Fix test_ssl to accept LibreSSL version strings. Thanks to William Orr. - Issue #21918: Converted test_tools from a module to a package containing separate test files for each tested script. - Issue #20155: Changed HTTP method names in failing tests in test_httpservers so that packet filtering software (specifically Windows Base Filtering Engine) does not interfere with the transaction semantics expected by the tests. - Issue #19493: Refactored the ctypes test package to skip tests explicitly rather than silently. - Issue #18492: All resources are now allowed when tests are not run by regrtest.py. - Issue #21634: Fix pystone micro-benchmark: use floor division instead of true division to benchmark integers instead of floating point numbers. Set pystone version to 1.2. Patch written by Lennart Regebro. - Issue #21605: Added tests for Tkinter images. - Issue #21493: Added test for ntpath.expanduser(). Original patch by Claudiu Popa. - Issue #19925: Added tests for the spwd module. Original patch by Vajrasky Kok. - Issue #21522: Added Tkinter tests for Listbox.itemconfigure(), PanedWindow.paneconfigure(), and Menu.entryconfigure(). Documentation ------------- - Issue #21777: The binary sequence methods on bytes and bytearray are now documented explicitly, rather than assuming users will be able to derive the expected behaviour from the behaviour of the corresponding str methods. Windows ------- - Issue #21671, #22160, CVE-2014-0224: The bundled version of OpenSSL has been updated to 1.0.1i. - Issue #10747: Use versioned labels in the Windows start menu. Patch by Olive Kilburn. Tools/Demos ----------- - Issue #22201: Command-line interface of the zipfile module now correctly extracts ZIP files with directory entries. Patch by Ryan Wilson. - Issue #21906: Make Tools/scripts/md5sum.py work in Python 3. Patch by Zachary Ware. - Issue #21629: Fix Argument Clinic's "--converters" feature. What's New in Python 3.4.1? =========================== Release date: 2014-05-18 Core and Builtins ----------------- - Issue #21418: Fix a crash in the builtin function super() when called without argument and without current frame (ex: embedded Python). - Issue #21425: Fix flushing of standard streams in the interactive interpreter. - Issue #21435: In rare cases, when running finalizers on objects in cyclic trash a bad pointer dereference could occur due to a subtle flaw in internal iteration logic. Library ------- - Issue #10744: Fix PEP 3118 format strings on ctypes objects with a nontrivial shape. - Issue #20998: Fixed re.fullmatch() of repeated single character pattern with ignore case. Original patch by Matthew Barnett. - Issue #21075: fileinput.FileInput now reads bytes from standard stream if binary mode is specified. Patch by Sam Kimbrel. - Issue #21396: Fix TextIOWrapper(..., write_through=True) to not force a flush() on the underlying binary stream. Patch by akira. - Issue #21470: Do a better job seeding the random number generator by using enough bytes to span the full state space of the Mersenne Twister. - Issue #21398: Fix an unicode error in the pydoc pager when the documentation contains characters not encodable to the stdout encoding. Tests ----- - Issue #17756: Fix test_code test when run from the installed location. - Issue #17752: Fix distutils tests when run from the installed location. IDLE ---- - Issue #18104: Add idlelib/idle_test/htest.py with a few sample tests to begin consolidating and improving human-validated tests of Idle. Change other files as needed to work with htest. Running the module as __main__ runs all tests. What's New in Python 3.4.1rc1? ============================== Release date: 2014-05-05 Core and Builtins ----------------- - Issue #21274: Define PATH_MAX for GNU/Hurd in Python/pythonrun.c. - Issue #21209: Fix sending tuples to custom generator objects with the yield from syntax. - Issue #21134: Fix segfault when str is called on an uninitialized UnicodeEncodeError, UnicodeDecodeError, or UnicodeTranslateError object. - Issue #19537: Fix PyUnicode_DATA() alignment under m68k. Patch by Andreas Schwab. - Issue #20929: Add a type cast to avoid shifting a negative number. - Issue #20731: Properly position in source code files even if they are opened in text mode. Patch by Serhiy Storchaka. - Issue #20637: Key-sharing now also works for instance dictionaries of subclasses. Patch by Peter Ingebretson. - Issue #12546: Allow ``\x00`` to be used as a fill character when using str, int, float, and complex __format__ methods. - Issue #13598: Modify string.Formatter to support auto-numbering of replacement fields. It now matches the behavior of str.format() in this regard. Patches by Phil Elson and Ramchandra Apte. Library ------- - Issue #21088: Bugfix for curses.window.addch() regression in 3.4.0. In porting to Argument Clinic, the first two arguments were reversed. - Issue #21469: Reduced the risk of false positives in robotparser by checking to make sure that robots.txt has been read or does not exist prior to returning True in can_fetch(). - Issue #21321: itertools.islice() now releases the reference to the source iterator when the slice is exhausted. Patch by Anton Afanasyev. - Issue #9815: assertRaises now tries to clear references to local variables in the exception's traceback. - Issue #13204: Calling sys.flags.__new__ would crash the interpreter, now it raises a TypeError. - Issue #19385: Make operations on a closed dbm.dumb database always raise the same exception. - Issue #21207: Detect when the os.urandom cached fd has been closed or replaced, and open it anew. - Issue #21291: subprocess's Popen.wait() is now thread safe so that multiple threads may be calling wait() or poll() on a Popen instance at the same time without losing the Popen.returncode value. - Issue #21127: Path objects can now be instantiated from str subclass instances (such as ``numpy.str_``). - Issue #15002: urllib.response object to use _TemporaryFileWrapper (and _TemporaryFileCloser) facility. Provides a better way to handle file descriptor close. Patch contributed by Christian Theune. - Issue #12220: mindom now raises a custom ValueError indicating it doesn't support spaces in URIs instead of letting a 'split' ValueError bubble up. - Issue #21239: patch.stopall() didn't work deterministically when the same name was patched more than once. - Issue #21222: Passing name keyword argument to mock.create_autospec now works. - Issue #21197: Add lib64 -> lib symlink in venvs on 64-bit non-OS X POSIX. - Issue #17498: Some SMTP servers disconnect after certain errors, violating strict RFC conformance. Instead of losing the error code when we issue the subsequent RSET, smtplib now returns the error code and defers raising the SMTPServerDisconnected error until the next command is issued. - Issue #17826: setting an iterable side_effect on a mock function created by create_autospec now works. Patch by Kushal Das. - Issue #7776: Fix ``Host:`` header and reconnection when using http.client.HTTPConnection.set_tunnel(). Patch by Nikolaus Rath. - Issue #20968: unittest.mock.MagicMock now supports division. Patch by Johannes Baiter. - Issue #21529 (CVE-2014-4616): Fix arbitrary memory access in JSONDecoder.raw_decode with a negative second parameter. Bug reported by Guido Vranken. - Issue #21169: getpass now handles non-ascii characters that the input stream encoding cannot encode by re-encoding using the replace error handler. - Issue #21171: Fixed undocumented filter API of the rot13 codec. Patch by Berker Peksag. - Issue #21172: isinstance check relaxed from dict to collections.Mapping. - Issue #21155: asyncio.EventLoop.create_unix_server() now raises a ValueError if path and sock are specified at the same time. - Issue #21149: Improved thread-safety in logging cleanup during interpreter shutdown. Thanks to Devin Jeanpierre for the patch. - Issue #20145: `assertRaisesRegex` and `assertWarnsRegex` now raise a TypeError if the second argument is not a string or compiled regex. - Issue #21058: Fix a leak of file descriptor in :func:`tempfile.NamedTemporaryFile`, close the file descriptor if :func:`io.open` fails - Issue #21200: Return None from pkgutil.get_loader() when __spec__ is missing. - Issue #21013: Enhance ssl.create_default_context() when used for server side sockets to provide better security by default. - Issue #20633: Replace relative import by absolute import. - Issue #20980: Stop wrapping exception when using ThreadPool. - Issue #21082: In os.makedirs, do not set the process-wide umask. Note this changes behavior of makedirs when exist_ok=True. - Issue #20990: Fix issues found by pyflakes for multiprocessing. - Issue #21015: SSL contexts will now automatically select an elliptic curve for ECDH key exchange on OpenSSL 1.0.2 and later, and otherwise default to "prime256v1". - Issue #20995: Enhance default ciphers used by the ssl module to enable better security an prioritize perfect forward secrecy. - Issue #20884: Don't assume that __file__ is defined on importlib.__init__. - Issue #21499: Ignore __builtins__ in several test_importlib.test_api tests. - Issue #20879: Delay the initialization of encoding and decoding tables for base32, ascii85 and base85 codecs in the base64 module, and delay the initialization of the unquote_to_bytes() table of the urllib.parse module, to not waste memory if these modules are not used. - Issue #19157: Include the broadcast address in the usuable hosts for IPv6 in ipaddress. - Issue #11599: When an external command (e.g. compiler) fails, distutils now prints out the whole command line (instead of just the command name) if the environment variable DISTUTILS_DEBUG is set. - Issue #4931: distutils should not produce unhelpful "error: None" messages anymore. distutils.util.grok_environment_error is kept but doc-deprecated. - Issue #20875: Prevent possible gzip "'read' is not defined" NameError. Patch by Claudiu Popa. - Issue #11558: ``email.message.Message.attach`` now returns a more useful error message if ``attach`` is called on a message for which ``is_multipart`` is False. - Issue #20283: RE pattern methods now accept the string keyword parameters as documented. The pattern and source keyword parameters are left as deprecated aliases. - Issue #20778: Fix modulefinder to work with bytecode-only modules. - Issue #20791: copy.copy() now doesn't make a copy when the input is a bytes object. Initial patch by Peter Otten. - Issue #19748: On AIX, time.mktime() now raises an OverflowError for year outsize range [1902; 2037]. - Issue #20816: Fix inspect.getcallargs() to raise correct TypeError for missing keyword-only arguments. Patch by Jeremiah Lowin. - Issue #20817: Fix inspect.getcallargs() to fail correctly if more than 3 arguments are missing. Patch by Jeremiah Lowin. - Issue #6676: Ensure a meaningful exception is raised when attempting to parse more than one XML document per pyexpat xmlparser instance. (Original patches by Hirokazu Yamamoto and Amaury Forgeot d'Arc, with suggested wording by David Gutteridge) - Issue #21117: Fix inspect.signature to better support functools.partial. Due to the specifics of functools.partial implementation, positional-or-keyword arguments passed as keyword arguments become keyword-only. - Issue #21209: Fix asyncio.tasks.CoroWrapper to workaround a bug in yield-from implementation in CPythons prior to 3.4.1. - asyncio: Add gi_{frame,running,code} properties to CoroWrapper (upstream issue #163). - Issue #21311: Avoid exception in _osx_support with non-standard compiler configurations. Patch by John Szakmeister. - Issue #11571: Ensure that the turtle window becomes the topmost window when launched on OS X. Extension Modules ----------------- - Issue #21276: posixmodule: Don't define USE_XATTRS on KFreeBSD and the Hurd. - Issue #21226: Set up modules properly in PyImport_ExecCodeModuleObject (and friends). IDLE ---- - Issue #21139: Change default paragraph width to 72, the PEP 8 recommendation. - Issue #21284: Paragraph reformat test passes after user changes reformat width. - Issue #17654: Ensure IDLE menus are customized properly on OS X for non-framework builds and for all variants of Tk. Build ----- - The Windows build now includes OpenSSL 1.0.1g - Issue #21285: Refactor and fix curses configure check to always search in a ncursesw directory. - Issue #15234: For BerkelyDB and Sqlite, only add the found library and include directories if they aren't already being searched. This avoids an explicit runtime library dependency. - Issue #20644: OS X installer build support for documentation build changes in 3.4.1: assume externally supplied sphinx-build is available in /usr/bin. C API ----- - Issue #20942: PyImport_ImportFrozenModuleObject() no longer sets __file__ to match what importlib does; this affects _frozen_importlib as well as any module loaded using imp.init_frozen(). Documentation ------------- - Issue #17386: Expanded functionality of the ``Doc/make.bat`` script to make it much more comparable to ``Doc/Makefile``. - Issue #21043: Remove the recommendation for specific CA organizations and to mention the ability to load the OS certificates. - Issue #20765: Add missing documentation for PurePath.with_name() and PurePath.with_suffix(). - Issue #19407: New package installation and distribution guides based on the Python Packaging Authority tools. Existing guides have been retained as legacy links from the distutils docs, as they still contain some required reference material for tool developers that isn't recorded anywhere else. - Issue #19697: Document cases where __main__.__spec__ is None. Tests ----- - Issue #18604: Consolidated checks for GUI availability. All platforms now at least check whether Tk can be instantiated when the GUI resource is requested. - Issue #21275: Fix a socket test on KFreeBSD. - Issue #21223: Pass test_site/test_startup_imports when some of the extensions are built as builtins. - Issue #20635: Added tests for Tk geometry managers. - Add test case for freeze. - Issue #20743: Fix a reference leak in test_tcl. - Issue #21097: Move test_namespace_pkgs into test_importlib. - Issue #20939: Avoid various network test failures due to new redirect of http://www.python.org/ to https://www.python.org: use http://www.example.com instead. - Issue #20668: asyncio tests no longer rely on tests.txt file. (Patch by Vajrasky Kok) - Issue #21093: Prevent failures of ctypes test_macholib on OS X if a copy of libz exists in $HOME/lib or /usr/local/lib. Tools/Demos ----------- - Add support for ``yield from`` to 2to3. - Add support for the PEP 465 matrix multiplication operator to 2to3. - Issue #16047: Fix module exception list and __file__ handling in freeze. Patch by Meador Inge. - Issue #11824: Consider ABI tags in freeze. Patch by Meador Inge. - Issue #20535: PYTHONWARNING no longer affects the run_tests.py script. Patch by Arfrever Frehtes Taifersar Arahesis. What's New in Python 3.4.0? =========================== Release date: 2014-03-16 Library ------- - Issue #20939: Fix test_geturl failure in test_urllibnet due to new redirect of http://www.python.org/ to https://www.python.org. Documentation ------------- - Merge in all documentation changes since branching 3.4.0rc1. What's New in Python 3.4.0 release candidate 3? =============================================== Release date: 2014-03-09 Core and Builtins ----------------- - Issue #20786: Fix signatures for dict.__delitem__ and property.__delete__ builtins. Library ------- - Issue #20839: Don't trigger a DeprecationWarning in the still supported pkgutil.get_loader() API when __loader__ isn't set on a module (nor when pkgutil.find_loader() is called directly). Build ----- - Issue #14512: Launch pydoc -b instead of pydocgui.pyw on Windows. - Issue #20748: Uninstalling pip does not leave behind the pyc of the uninstaller anymore. - Issue #20568: The Windows installer now installs the unversioned ``pip`` command in addition to the versioned ``pip3`` and ``pip3.4`` commands. - Issue #20757: The ensurepip helper for the Windows uninstaller now skips uninstalling pip (rather than failing) if the user has updated pip to a different version from the one bundled with ensurepip. - Issue #20465: Update OS X and Windows installer builds to use SQLite 3.8.3.1. What's New in Python 3.4.0 release candidate 2? =============================================== Release date: 2014-02-23 Core and Builtins ----------------- - Issue #20625: Parameter names in __annotations__ were not mangled properly. Discovered by Jonas Wielicki, patch by Yury Selivanov. - Issue #20261: In pickle, lookup __getnewargs__ and __getnewargs_ex__ on the type of the object. - Issue #20619: Give the AST nodes of keyword-only arguments a column and line number. - Issue #20526: Revert changes of issue #19466 which introduces a regression: don't clear anymore the state of Python threads early during the Python shutdown. Library ------- - Issue #20710: The pydoc summary line no longer displays the "self" parameter for bound methods. - Issue #20566: Change asyncio.as_completed() to use a Queue, to avoid O(N**2) behavior. - Issue #20704: Implement new debug API in asyncio. Add new methods BaseEventLoop.set_debug() and BaseEventLoop.get_debug(). Add support for setting 'asyncio.tasks._DEBUG' variable with 'PYTHONASYNCIODEBUG' environment variable. - asyncio: Refactoring and fixes: BaseEventLoop.sock_connect() raises an error if the address is not resolved; use __slots__ in Handle and TimerHandle; as_completed() and wait() raise TypeError if the passed list of Futures is a single Future; call_soon() and other 'call_*()' functions raise TypeError if the passed callback is a coroutine function; _ProactorBasePipeTransport uses _FlowControlMixin; WriteTransport.set_write_buffer_size() calls _maybe_pause_protocol() to consider pausing receiving if the watermark limits have changed; fix _check_resolved_address() for IPv6 address; and other minor improvements, along with multiple documentation updates. - Issue #20684: Fix inspect.getfullargspec() to not to follow __wrapped__ chains. Make its behaviour consistent with bound methods first argument. Patch by Nick Coghlan and Yury Selivanov. - Issue #20681: Add new error handling API in asyncio. New APIs: loop.set_exception_handler(), loop.default_exception_handler(), and loop.call_exception_handler(). - Issue #20673: Implement support for UNIX Domain Sockets in asyncio. New APIs: loop.create_unix_connection(), loop.create_unix_server(), streams.open_unix_connection(), and streams.start_unix_server(). - Issue #20616: Add a format() method to tracemalloc.Traceback. - Issue #19744: the ensurepip installation step now just prints a warning to stderr rather than failing outright if SSL/TLS is unavailable. This allows local installation of POSIX builds without SSL/TLS support. - Issue #20594: Avoid name clash with the libc function posix_close. Build ----- - Issue #20641: Run MSI custom actions (pip installation, pyc compilation) with the NoImpersonate flag, to support elevated execution (UAC). - Issue #20221: Removed conflicting (or circular) hypot definition when compiled with VS 2010 or above. Initial patch by Tabrez Mohammed. - Issue #20609: Restored the ability to build 64-bit Windows binaries on 32-bit Windows, which was broken by the change in issue #19788. What's New in Python 3.4.0 release candidate 1? =============================================== Release date: 2014-02-10 Core and Builtins ----------------- - Issue #19255: The builtins module is restored to initial value before cleaning other modules. The sys and builtins modules are cleaned last. - Issue #20588: Make Python-ast.c C89 compliant. - Issue #20437: Fixed 22 potential bugs when deleting objects references. - Issue #20500: Displaying an exception at interpreter shutdown no longer risks triggering an assertion failure in PyObject_Str. - Issue #20538: UTF-7 incremental decoder produced inconsistent string when input was truncated in BASE64 section. - Issue #20404: io.TextIOWrapper (and hence the open() builtin) now uses the internal codec marking system added for issue #19619 to throw LookupError for known non-text encodings at stream construction time. The existing output type checks remain in place to deal with unmarked third party codecs. - Issue #17162: Add PyType_GetSlot. - Issue #20162: Fix an alignment issue in the siphash24() hash function which caused a crash on PowerPC 64-bit (ppc64). Library ------- - Issue #20530: The signatures for slot builtins have been updated to reflect the fact that they only accept positional-only arguments. - Issue #20517: Functions in the os module that accept two filenames now register both filenames in the exception on failure. - Issue #20563: The ipaddress module API is now considered stable. - Issue #14983: email.generator now always adds a line end after each MIME boundary marker, instead of doing so only when there is an epilogue. This fixes an RFC compliance bug and solves an issue with signed MIME parts. - Issue #20540: Fix a performance regression (vs. Python 3.2) when layering a multiprocessing Connection over a TCP socket. For small payloads, Nagle's algorithm would introduce idle delays before the entire transmission of a message. - Issue #16983: the new email header parsing code will now decode encoded words that are (incorrectly) surrounded by quotes, and register a defect. - Issue #19772: email.generator no longer mutates the message object when doing a down-transform from 8bit to 7bit CTEs. - Issue #20536: the statistics module now correctly handle Decimal instances with positive exponents - Issue #18805: the netmask/hostmask parsing in ipaddress now more reliably filters out illegal values and correctly allows any valid prefix length. - Issue #20481: For at least Python 3.4, the statistics module will require that all inputs for a single operation be of a single consistent type, or else a mixed of ints and a single other consistent type. This avoids some interoperability issues that arose with the previous approach of coercing to a suitable common type. - Issue #20478: the statistics module now treats collections.Counter inputs like any other iterable. - Issue #17369: get_filename was raising an exception if the filename parameter's RFC2231 encoding was broken in certain ways. This was a regression relative to python2. - Issue #20013: Some imap servers disconnect if the current mailbox is deleted, and imaplib did not handle that case gracefully. Now it handles the 'bye' correctly. - Issue #20531: Revert 3.4 version of fix for #19063, and apply the 3.3 version. That is, do *not* raise an error if unicode is passed to email.message.Message.set_payload. - Issue #20476: If a non-compat32 policy is used with any of the email parsers, EmailMessage is now used as the factory class. The factory class should really come from the policy; that will get fixed in 3.5. - Issue #19920: TarFile.list() no longer fails when outputs a listing containing non-encodable characters. Based on patch by Vajrasky Kok. - Issue #20515: Fix NULL pointer dereference introduced by issue #20368. - Issue #19186: Restore namespacing of expat symbols inside the pyexpat module. - Issue #20053: ensurepip (and hence venv) are no longer affected by the settings in the default pip configuration file. - Issue #20426: When passing the re.DEBUG flag, re.compile() displays the debug output every time it is called, regardless of the compilation cache. - Issue #20368: The null character now correctly passed from Tcl to Python. Improved error handling in variables-related commands. - Issue #20435: Fix _pyio.StringIO.getvalue() to take into account newline translation settings. - tracemalloc: Fix slicing traces and fix slicing a traceback. - Issue #20354: Fix an alignment issue in the tracemalloc module on 64-bit platforms. Bug seen on 64-bit Linux when using "make profile-opt". - Issue #17159: inspect.signature now accepts duck types of functions, which adds support for Cython functions. Initial patch by Stefan Behnel. - Issue #18801: Fix inspect.classify_class_attrs to correctly classify object.__new__ and object.__init__. - Fixed cmath.isinf's name in its argument parsing code. - Issue #20311, #20452: poll and epoll now round the timeout away from zero, instead of rounding towards zero, in select and selectors modules: select.epoll.poll(), selectors.PollSelector.poll() and selectors.EpollSelector.poll(). For example, a timeout of one microsecond (1e-6) is now rounded to one millisecondi (1e-3), instead of being rounded to zero. However, the granularity property and asyncio's resolution feature were removed again. - asyncio: Some refactoring; various fixes; add write flow control to unix pipes; Future.set_exception() instantiates the exception argument if it is a class; improved proactor pipe transport; support wait_for(f, None); don't log broken/disconnected pipes; use ValueError instead of assert for forbidden subprocess_{shell,exec} arguments; added a convenience API for subprocess management; added StreamReader.at_eof(); properly handle duplicate coroutines/futures in gather(), wait(), as_completed(); use a bytearray for buffering in StreamReader; and more. - Issue #20288: fix handling of invalid numeric charrefs in HTMLParser. - Issue #20424: Python implementation of io.StringIO now supports lone surrogates. - Issue #20308: inspect.signature now works on classes without user-defined __init__ or __new__ methods. - Issue #20372: inspect.getfile (and a bunch of other inspect functions that use it) doesn't crash with unexpected AttributeError on classes defined in C without __module__. - Issue #20356: inspect.signature formatting uses '/' to separate positional-only parameters from others. - Issue #20223: inspect.signature now supports methods defined with functools.partialmethods. - Issue #19456: ntpath.join() now joins relative paths correctly when a drive is present. - Issue #19077: tempfile.TemporaryDirectory cleanup no longer fails when called during shutdown. Emitting resource warning in __del__ no longer fails. Original patch by Antoine Pitrou. - Issue #20394: Silence Coverity warning in audioop module. - Issue #20367: Fix behavior of concurrent.futures.as_completed() for duplicate arguments. Patch by Glenn Langford. - Issue #8260: The read(), readline() and readlines() methods of codecs.StreamReader returned incomplete data when were called after readline() or read(size). Based on patch by Amaury Forgeot d'Arc. - Issue #20105: the codec exception chaining now correctly sets the traceback of the original exception as its __traceback__ attribute. - Issue #17481: inspect.getfullargspec() now uses inspect.signature() API. - Issue #15304: concurrent.futures.wait() can block forever even if Futures have completed. Patch by Glenn Langford. - Issue #14455: plistlib: fix serializing integers in the range of an unsigned long long but outside of the range of signed long long for binary plist files. IDLE ---- - Issue #20406: Use Python application icons for Idle window title bars. Patch mostly by Serhiy Storchaka. - Update the python.gif icon for the Idle classbrowser and pathbowser from the old green snake to the new blue and yellow snakes. - Issue #17721: Remove non-functional configuration dialog help button until we make it actually gives some help when clicked. Patch by Guilherme Simões. Tests ----- - Issue #20532: Tests which use _testcapi now are marked as CPython only. - Issue #19920: Added tests for TarFile.list(). Based on patch by Vajrasky Kok. - Issue #19990: Added tests for the imghdr module. Based on patch by Claudiu Popa. - Issue #20474: Fix test_socket "unexpected success" failures on OS X 10.7+. Tools/Demos ----------- - Issue #20530: Argument Clinic's signature format has been revised again. The new syntax is highly human readable while still preventing false positives. The syntax also extends Python syntax to denote "self" and positional-only parameters, allowing inspect.Signature objects to be totally accurate for all supported builtins in Python 3.4. - Issue #20456: Argument Clinic now observes the C preprocessor conditional compilation statements of the C files it parses. When a Clinic block is inside a conditional code, it adjusts its output to match, including automatically generating an empty methoddef macro. - Issue #20456: Cloned functions in Argument Clinic now use the correct name, not the name of the function they were cloned from, for text strings inside generated code. - Issue #20456: Fixed Argument Clinic's test suite and "--converters" feature. - Issue #20456: Argument Clinic now allows specifying different names for a parameter in Python and C, using "as" on the parameter line. - Issue #20326: Argument Clinic now uses a simple, unique signature to annotate text signatures in docstrings, resulting in fewer false positives. "self" parameters are also explicitly marked, allowing inspect.Signature() to authoritatively detect (and skip) said parameters. - Issue #20326: Argument Clinic now generates separate checksums for the input and output sections of the block, allowing external tools to verify that the input has not changed (and thus the output is not out-of-date). Build ----- - Issue #20465: Update SQLite shipped with OS X installer to 3.8.3. C-API ----- - Issue #20517: Added new functions allowing OSError exceptions to reference two filenames instead of one: PyErr_SetFromErrnoWithFilenameObjects() and PyErr_SetExcFromWindowsErrWithFilenameObjects(). Documentation ------------- - Issue #20488: Change wording to say importlib is *the* implementation of import instead of just *an* implementation. - Issue #6386: Clarify in the tutorial that specifying a symlink to execute means the directory containing the executed script and not the symlink is added to sys.path. What's New in Python 3.4.0 Beta 3? ================================== Release date: 2014-01-26 Core and Builtins ----------------- - Issue #20189: Four additional builtin types (PyTypeObject, PyMethodDescr_Type, _PyMethodWrapper_Type, and PyWrapperDescr_Type) have been modified to provide introspection information for builtins. - Issue #17825: Cursor "^" is correctly positioned for SyntaxError and IndentationError. - Issue #2382: SyntaxError cursor "^" is now written at correct position in most cases when multibyte characters are in line (before "^"). This still not works correctly with wide East Asian characters. - Issue #18960: The first line of Python script could be executed twice when the source encoding was specified on the second line. Now the source encoding declaration on the second line isn't effective if the first line contains anything except a comment. 'python -x' works now again with files with the source encoding declarations, and can be used to make Python batch files on Windows. Library ------- - asyncio: Various improvements and small changes not all covered by issues listed below. E.g. wait_for() now cancels the inner task if the timeout occcurs; tweaked the set of exported symbols; renamed Empty/Full to QueueEmpty/QueueFull; "with (yield from lock)" now uses a separate context manager; readexactly() raises if not enough data was read; PTY support tweaks. - Issue #20311: asyncio: Add a granularity attribute to BaseEventLoop: maximum between the resolution of the BaseEventLoop.time() method and the resolution of the selector. The granuarility is used in the scheduler to round time and deadline. - Issue #20311: selectors: Add a resolution attribute to BaseSelector. - Issue #20189: unittest.mock now no longer assumes that any object for which it could get an inspect.Signature is a callable written in Python. Fix courtesy of Michael Foord. - Issue #20317: ExitStack.__exit__ could create a self-referential loop if an exception raised by a cleanup operation already had its context set correctly (for example, by the @contextmanager decorator). The infinite loop this caused is now avoided by checking if the expected context is already set before trying to fix it. - Issue #20374: Fix build with GNU readline >= 6.3. - Issue #20262: Warnings are raised now when duplicate names are added in the ZIP file or too long ZIP file comment is truncated. - Issue #20165: The unittest module no longer considers tests marked with @expectedFailure successful if they pass. - Issue #18574: Added missing newline in 100-Continue reply from http.server.BaseHTTPRequestHandler. Patch by Nikolaus Rath. - Issue #20270: urllib.urlparse now supports empty ports. - Issue #20243: TarFile no longer raise ReadError when opened in write mode. - Issue #20238: TarFile opened with external fileobj and "w:gz" mode didn't write complete output on close. - Issue #20245: The open functions in the tarfile module now correctly handle empty mode. - Issue #20242: Fixed basicConfig() format strings for the alternative formatting styles. Thanks to kespindler for the bug report and patch. - Issue #20246: Fix buffer overflow in socket.recvfrom_into. - Issues #20206 and #5803: Fix edge case in email.quoprimime.encode where it truncated lines ending in a character needing encoding but no newline by using a more efficient algorithm that doesn't have the bug. - Issue #19082: Working xmlrpc.server and xmlrpc.client examples. Both in modules and in documentation. Initial patch contributed by Vajrasky Kok. - Issue #20138: The wsgiref.application_uri() and wsgiref.request_uri() functions now conform to PEP 3333 when handle non-ASCII URLs. - Issue #19097: Raise the correct Exception when cgi.FieldStorage is given an invalid fileobj. - Issue #20152: Ported Python/import.c over to Argument Clinic. - Issue #13107: argparse and optparse no longer raises an exception when output a help on environment with too small COLUMNS. Based on patch by Elazar Gershuni. - Issue #20207: Always disable SSLv2 except when PROTOCOL_SSLv2 is explicitly asked for. - Issue #18960: The tokenize module now ignore the source encoding declaration on the second line if the first line contains anything except a comment. - Issue #20078: Reading malformed zipfiles no longer hangs with 100% CPU consumption. - Issue #20113: os.readv() and os.writev() now raise an OSError exception on error instead of returning -1. - Issue #19719: Make importlib.abc.MetaPathFinder.find_module(), PathEntryFinder.find_loader(), and Loader.load_module() use PEP 451 APIs to help with backwards-compatibility. - Issue #20144: inspect.Signature now supports parsing simple symbolic constants as parameter default values in __text_signature__. - Issue #20072: Fixed multiple errors in tkinter with wantobjects is False. - Issue #20229: Avoid plistlib deprecation warning in platform.mac_ver(). - Issue #14455: Fix some problems with the new binary plist support in plistlib. IDLE ---- - Issue #17390: Add Python version to Idle editor window title bar. Original patches by Edmond Burnett and Kent Johnson. - Issue #18960: IDLE now ignores the source encoding declaration on the second line if the first line contains anything except a comment. Tests ----- - Issue #20358: Tests for curses.window.overlay and curses.window.overwrite no longer specify min{row,col} > max{row,col}. - Issue #19804: The test_find_mac test in test_uuid is now skipped if the ifconfig executable is not available. - Issue #19886: Use better estimated memory requirements for bigmem tests. Tools/Demos ----------- - Issue #20390: Argument Clinic's "file" output preset now defaults to "{dirname}/clinic/{basename}.h". - Issue #20390: Argument Clinic's "class" directive syntax has been extended with two new required arguments: "typedef" and "type_object". - Issue #20390: Argument Clinic: If __new__ or __init__ functions didn't use kwargs (or args), the PyArg_NoKeywords (or PyArg_NoPositional) calls generated are only run when the type object is an exact match. - Issue #20390: Argument Clinic now fails if you have required parameters after optional parameters. - Issue #20390: Argument Clinic converters now have a new template they can inject code into: "modifiers". Code put there is run in the parsing function after argument parsing but before the call to the impl. - Issue #20376: Argument Clinic now escapes backslashes in docstrings. - Issue #20381: Argument Clinic now sanity checks the default argument when c_default is also specified, providing a nice failure message for disallowed values. - Issue #20189: Argument Clinic now ensures that parser functions for __new__ are always of type newfunc, the type of the tp_new slot. Similarly, parser functions for __init__ are now always of type initproc, the type of tp_init. - Issue #20189: Argument Clinic now suppresses the docstring for __new__ and __init__ functions if no docstring is provided in the input. - Issue #20189: Argument Clinic now suppresses the "self" parameter in the impl for @staticmethod functions. - Issue #20294: Argument Clinic now supports argument parsing for __new__ and __init__ functions. - Issue #20299: Argument Clinic custom converters may now change the default value of c_default and py_default with a class member. - Issue #20287: Argument Clinic's output is now configurable, allowing delaying its output or even redirecting it to a separate file. - Issue #20226: Argument Clinic now permits simple expressions (e.g. "sys.maxsize - 1") as default values for parameters. - Issue #19936: Added executable bits or shebang lines to Python scripts which requires them. Disable executable bits and shebang lines in test and benchmark files in order to prevent using a random system python, and in source files of modules which don't provide command line interface. Fixed shebang lines in the unittestgui and checkpip scripts. - Issue #20268: Argument Clinic now supports cloning the parameters and return converter of existing functions. - Issue #20228: Argument Clinic now has special support for class special methods. - Issue #20214: Fixed a number of small issues and documentation errors in Argument Clinic (see issue for details). - Issue #20196: Fixed a bug where Argument Clinic did not generate correct parsing code for functions with positional-only parameters where all arguments are optional. - Issue #18960: 2to3 and the findnocoding.py script now ignore the source encoding declaration on the second line if the first line contains anything except a comment. - Issue #19723: The marker comments Argument Clinic uses have been changed to improve readability. - Issue #20157: When Argument Clinic renames a parameter because its name collides with a C keyword, it no longer exposes that rename to PyArg_Parse. - Issue #20141: Improved Argument Clinic's support for the PyArg_Parse "O!" format unit. - Issue #20144: Argument Clinic now supports simple symbolic constants as parameter default values. - Issue #20143: The line numbers reported in Argument Clinic errors are now more accurate. - Issue #20142: Py_buffer variables generated by Argument Clinic are now initialized with a default value. Build ----- - Issue #12837: Silence a tautological comparison warning on OS X under Clang in socketmodule.c. What's New in Python 3.4.0 Beta 2? ================================== Release date: 2014-01-05 Core and Builtins ----------------- - Issue #17432: Drop UCS2 from names of Unicode functions in python3.def. - Issue #19526: Exclude all new API from the stable ABI. Exceptions can be made if a need is demonstrated. - Issue #19969: PyBytes_FromFormatV() now raises an OverflowError if "%c" argument is not in range [0; 255]. - Issue #19995: %c, %o, %x, and %X now issue a DeprecationWarning on non-integer input; reworded docs to clarify that an integer type should define both __int__ and __index__. - Issue #19787: PyThread_set_key_value() now always set the value. In Python 3.3, the function did nothing if the key already exists (if the current value is a non-NULL pointer). - Issue #14432: Remove the thread state field from the frame structure. Fix a crash when a generator is created in a C thread that is destroyed while the generator is still used. The issue was that a generator contains a frame, and the frame kept a reference to the Python state of the destroyed C thread. The crash occurs when a trace function is setup. - Issue #19576: PyGILState_Ensure() now initializes threads. At startup, Python has no concrete GIL. If PyGILState_Ensure() is called from a new thread for the first time and PyEval_InitThreads() was not called yet, a GIL needs to be created. - Issue #17576: Deprecation warning emitted now when __int__() or __index__() return not int instance. - Issue #19932: Fix typo in import.h, missing whitespaces in function prototypes. - Issue #19736: Add module-level statvfs constants defined for GNU/glibc based systems. - Issue #20097: Fix bad use of "self" in importlib's WindowsRegistryFinder. - Issue #19729: In str.format(), fix recursive expansion in format spec. - Issue #19638: Fix possible crash / undefined behaviour from huge (more than 2 billion characters) input strings in _Py_dg_strtod. Library ------- - Issue #20154: Deadlock in asyncio.StreamReader.readexactly(). - Issue #16113: Remove sha3 module again. - Issue #20111: pathlib.Path.with_suffix() now sanity checks the given suffix. - Fix breakage in TestSuite.countTestCases() introduced by issue #11798. - Issue #20108: Avoid parameter name clash in inspect.getcallargs(). - Issue #19918: Fix PurePath.relative_to() under Windows. - Issue #19422: Explicitly disallow non-SOCK_STREAM sockets in the ssl module, rather than silently let them emit clear text data. - Issue #20046: Locale alias table no longer contains entities which can be calculated. Generalized support of the euro modifier. - Issue #20027: Fixed locale aliases for devanagari locales. - Issue #20067: Tkinter variables now work when wantobjects is false. - Issue #19020: Tkinter now uses splitlist() instead of split() in configure methods. - Issue #19744: ensurepip now provides a better error message when Python is built without SSL/TLS support (pip currently requires that support to run, even if only operating with local wheel files) - Issue #19734: ensurepip now ignores all pip environment variables to avoid odd behaviour based on user configuration settings - Fix TypeError on "setup.py upload --show-response". - Issue #20045: Fix "setup.py register --list-classifiers". - Issue #18879: When a method is looked up on a temporary file, avoid closing the file before the method is possibly called. - Issue #20037: Avoid crashes when opening a text file late at interpreter shutdown. - Issue #19967: Thanks to the PEP 442, asyncio.Future now uses a destructor to log uncaught exceptions, instead of the dedicated _TracebackLogger class. - Added a Task.current_task() class method to asyncio. - Issue #19850: Set SA_RESTART in asyncio when registering a signal handler to limit EINTR occurrences. - Implemented write flow control in asyncio for proactor event loop (Windows). - Change write buffer in asyncio use to avoid O(N**2) behavior. Make write()/sendto() accept bytearray/memoryview. - Issue #20034: Updated alias mapping to most recent locale.alias file from X.org distribution using makelocalealias.py. - Issue #5815: Fixed support for locales with modifiers. Fixed support for locale encodings with hyphens. - Issue #20026: Fix the sqlite module to handle correctly invalid isolation level (wrong type). - Issue #18829: csv.Dialect() now checks type for delimiter, escapechar and quotechar fields. Original patch by Vajrasky Kok. - Issue #19855: uuid.getnode() on Unix now looks on the PATH for the executables used to find the mac address, with /sbin and /usr/sbin as fallbacks. - Issue #20007: HTTPResponse.read(0) no more prematurely closes connection. Original patch by Simon Sapin. - Issue #19946: multiprocessing now uses runpy to initialize __main__ in child processes when necessary, allowing it to correctly handle scripts without suffixes and submodules that use explicit relative imports or otherwise rely on parent modules being correctly imported prior to execution. - Issue #19921: When Path.mkdir() is called with parents=True, any missing parent is created with the default permissions, ignoring the mode argument (mimicking the POSIX "mkdir -p" command). - Issue #19887: Improve the Path.resolve() algorithm to support certain symlink chains. - Issue #19912: Fixed numerous bugs in ntpath.splitunc(). - Issue #19911: ntpath.splitdrive() now correctly processes the 'İ' character (U+0130, LATIN CAPITAL LETTER I WITH DOT ABOVE). - Issue #19532: python -m compileall with no filename/directory arguments now respects the -f and -q flags instead of ignoring them. - Issue #19623: Fixed writing to unseekable files in the aifc module. - Issue #19946: multiprocessing.spawn now raises ImportError when the module to be used as the main module cannot be imported. - Issue #17919: select.poll.register() again works with poll.POLLNVAL on AIX. Fixed integer overflow in the eventmask parameter. - Issue #19063: if a Charset's body_encoding was set to None, the email package would generate a message claiming the Content-Transfer-Encoding was 7bit, and produce garbage output for the content. This now works. A couple of other set_payload mishandlings of non-ASCII are also fixed. In addition, calling set_payload with a string argument without specifying a charset now raises an error (this is a new error in 3.4). - Issue #15475: Add __sizeof__ implementations for itertools objects. - Issue #19944: Fix importlib.find_spec() so it imports parents as needed and move the function to importlib.util. - Issue #19880: Fix a reference leak in unittest.TestCase. Explicitly break reference cycles between frames and the _Outcome instance. - Issue #17429: platform.linux_distribution() now decodes files from the UTF-8 encoding with the surrogateescape error handler, instead of decoding from the locale encoding in strict mode. It fixes the function on Fedora 19 which is probably the first major distribution release with a non-ASCII name. Patch written by Toshio Kuratomi. - Issue #19343: Expose FreeBSD-specific APIs in resource module. Original patch by Koobs. - Issue #19929: Call os.read with 32768 within subprocess.Popen.communicate rather than 4096 for efficiency. A microbenchmark shows Linux and OS X both using ~50% less cpu time this way. - Issue #19506: Use a memoryview to avoid a data copy when piping data to stdin within subprocess.Popen.communicate. 5-10% less cpu usage. - Issue #19876: selectors unregister() no longer raises ValueError or OSError if the FD is closed (as long as it was registered). - Issue #19908: pathlib now joins relative Windows paths correctly when a drive is present. Original patch by Antoine Pitrou. - Issue #19296: Silence compiler warning in dbm_open - Issue #6784: Strings from Python 2 can now be unpickled as bytes objects by setting the encoding argument of Unpickler to be 'bytes'. Initial patch by Merlijn van Deen. - Issue #19839: Fix regression in bz2 module's handling of non-bzip2 data at EOF, and analogous bug in lzma module. - Issue #19881: Fix pickling bug where cpickle would emit bad pickle data for large bytes string (i.e., with size greater than 2**32-1). - Issue #19138: doctest's IGNORE_EXCEPTION_DETAIL now allows a match when no exception detail exists (no colon following the exception's name, or a colon does follow but no text follows the colon). - Issue #19927: Add __eq__ to path-based loaders in importlib. - Issue #19827: On UNIX, setblocking() and settimeout() methods of socket.socket can now avoid a second syscall if the ioctl() function can be used, or if the non-blocking flag of the socket is unchanged. - Issue #19785: smtplib now supports SSLContext.check_hostname and server name indication for TLS/SSL connections. - Issue #19784: poplib now supports SSLContext.check_hostname and server name indication for TLS/SSL connections. - Issue #19783: nntplib now supports SSLContext.check_hostname and server name indication for TLS/SSL connections. - Issue #19782: imaplib now supports SSLContext.check_hostname and server name indication for TLS/SSL connections. - Issue #20123: Fix pydoc.synopsis() for "binary" modules. - Issue #19834: Support unpickling of exceptions pickled by Python 2. - Issue #19781: ftplib now supports SSLContext.check_hostname and server name indication for TLS/SSL connections. - Issue #19509: Add SSLContext.check_hostname to match the peer's certificate with server_hostname on handshake. - Issue #15798: Fixed subprocess.Popen() to no longer fail if file descriptor 0, 1 or 2 is closed. - Issue #17897: Optimized unpickle prefetching. - Issue #3693: Make the error message more helpful when the array.array() constructor is given a str. Move the array module typecode documentation to the docstring of the constructor. - Issue #19088: Fixed incorrect caching of the copyreg module in object.__reduce__() and object.__reduce_ex__(). - Issue #19698: Removed exec_module() methods from importlib.machinery.BuiltinImporter and ExtensionFileLoader. - Issue #18864: Added a setter for ModuleSpec.has_location. - Fixed _pickle.Unpickler to not fail when loading empty strings as persistent IDs. - Issue #11480: Fixed copy.copy to work with classes with custom metaclasses. Patch by Daniel Urban. - Issue #6477: Added support for pickling the types of built-in singletons (i.e., Ellipsis, NotImplemented, None). - Issue #19713: Add remaining PEP 451-related deprecations and move away from using find_module/find_loaer/load_module. - Issue #19708: Update pkgutil to use the new importer APIs. - Issue #19703: Update pydoc to use the new importer APIs. - Issue #19851: Fixed a regression in reloading sub-modules. - ssl.create_default_context() sets OP_NO_COMPRESSION to prevent CRIME. - Issue #19802: Add socket.SO_PRIORITY. - Issue #11508: Fixed uuid.getnode() and uuid.uuid1() on environment with virtual interface. Original patch by Kent Frazier. - Issue #11489: JSON decoder now accepts lone surrogates. - Issue #19545: Avoid chained exceptions while passing stray % to time.strptime(). Initial patch by Claudiu Popa. IDLE ---- - Issue #20058: sys.stdin.readline() in IDLE now always returns only one line. - Issue #19481: print() of string subclass instance in IDLE no longer hangs. - Issue #18270: Prevent possible IDLE AttributeError on OS X when no initial shell window is present. Tests ----- - Issue #20055: Fix test_shutil under Windows with symlink privileges held. Patch by Vajrasky Kok. - Issue #20070: Don't run test_urllib2net when network resources are not enabled. - Issue #19938: Re-enabled test_bug_1333982 in test_dis, which had been disabled since 3.0 due to the changes in listcomp handling. - Issue #19320: test_tcl no longer fails when wantobjects is false. - Issue #19919: Fix flaky SSL test. connect_ex() sometimes returns EWOULDBLOCK on Windows or VMs hosted on Windows. - Issue #19912: Added tests for ntpath.splitunc(). - Issue #19828: Fixed test_site when the whole suite is run with -S. - Issue #19928: Implemented a test for repr() of cell objects. - Issue #19535: Fixed test_docxmlrpc, test_functools, test_inspect, and test_statistics when python is run with -OO. - Issue #19926: Removed unneeded test_main from test_abstract_numbers. Patch by Vajrasky Kok. - Issue #19572: More skipped tests explicitly marked as skipped. - Issue #19595, #19987: Re-enabled a long-disabled test in test_winsound. - Issue #19588: Fixed tests in test_random that were silently skipped most of the time. Patch by Julian Gindi. Build ----- - Issue #19728: Enable pip installation by default on Windows. - Issue #16136: Remove VMS support - Issue #18215: Add script Tools/ssl/test_multiple_versions.py to compile and run Python's unit tests with multiple versions of OpenSSL. - Issue #19922: define _INCLUDE__STDC_A1_SOURCE in HP-UX to include mbstate_t for mbrtowc(). - Issue #19788: kill_python(_d).exe is now run as a PreBuildEvent on the pythoncore sub-project. This should prevent build errors due a previous build's python(_d).exe still running. Documentation ------------- - Issue #20265: Updated some parts of the Using Windows document. - Issue #20266: Updated some parts of the Windows FAQ. - Issue #20255: Updated the about and bugs pages. - Issue #20253: Fixed a typo in the ipaddress docs that advertised an illegal attribute name. Found by INADA Naoki. - Issue #18840: Introduce the json module in the tutorial, and de-emphasize the pickle module. - Issue #19845: Updated the Compiling Python on Windows section. - Issue #19795: Improved markup of True/False constants. Tools/Demos ----------- - Issue #19659: Added documentation for Argument Clinic. - Issue #19976: Argument Clinic METH_NOARGS functions now always take two parameters. What's New in Python 3.4.0 Beta 1? ================================== Release date: 2013-11-24 Core and Builtins ----------------- - Use the repr of a module name in more places in import, especially exceptions. - Issue #19619: str.encode, bytes.decode and bytearray.decode now use an internal API to throw LookupError for known non-text encodings, rather than attempting the encoding or decoding operation and then throwing a TypeError for an unexpected output type. (The latter mechanism remains in place for third party non-text encodings) - Issue #19183: Implement PEP 456 'secure and interchangeable hash algorithm'. Python now uses SipHash24 on all major platforms. - Issue #12892: The utf-16* and utf-32* encoders no longer allow surrogate code points (U+D800-U+DFFF) to be encoded. The utf-32* decoders no longer decode byte sequences that correspond to surrogate code points. The surrogatepass error handler now works with the utf-16* and utf-32* codecs. Based on patches by Victor Stinner and Kang-Hao (Kenny) Lu. - Issue #17806: Added keyword-argument support for "tabsize" to str/bytes.expandtabs(). - Issue #17828: Output type errors in str.encode(), bytes.decode() and bytearray.decode() now direct users to codecs.encode() or codecs.decode() as appropriate. - Issue #17828: The interpreter now attempts to chain errors that occur in codec processing with a replacement exception of the same type that includes the codec name in the error message. It ensures it only does this when the creation of the replacement exception won't lose any information. - Issue #19466: Clear the frames of daemon threads earlier during the Python shutdown to call objects destructors. So "unclosed file" resource warnings are now corretly emitted for daemon threads. - Issue #19514: Deduplicate some _Py_IDENTIFIER declarations. Patch by Andrei Dorian Duma. - Issue #17936: Fix O(n**2) behaviour when adding or removing many subclasses of a given type. - Issue #19428: zipimport now handles errors when reading truncated or invalid ZIP archive. - Issue #18408: Add a new PyFrame_FastToLocalsWithError() function to handle exceptions when merging fast locals into f_locals of a frame. PyEval_GetLocals() now raises an exception and return NULL on failure. - Issue #19369: Optimized the usage of __length_hint__(). - Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the Python executable and not removed by the linker's optimizer. - Issue #19306: Add extra hints to the faulthandler module's stack dumps that these are "upside down". Library ------- - Issue #3158: doctest can now find doctests in functions and methods written in C. - Issue #13477: Added command line interface to the tarfile module. Original patch by Berker Peksag. - Issue #19674: inspect.signature() now produces a correct signature for some builtins. - Issue #19722: Added opcode.stack_effect(), which computes the stack effect of bytecode instructions. - Issue #19735: Implement private function ssl._create_stdlib_context() to create SSLContext objects in Python's stdlib module. It provides a single configuration point and makes use of SSLContext.load_default_certs(). - Issue #16203: Add re.fullmatch() function and regex.fullmatch() method, which anchor the pattern at both ends of the string to match. Original patch by Matthew Barnett. - Issue #13592: Improved the repr for regular expression pattern objects. Based on patch by Hugo Lopes Tavares. - Issue #19641: Added the audioop.byteswap() function to convert big-endian samples to little-endian and vice versa. - Issue #15204: Deprecated the 'U' mode in file-like objects. - Issue #17810: Implement PEP 3154, pickle protocol 4. - Issue #19668: Added support for the cp1125 encoding. - Issue #19689: Add ssl.create_default_context() factory function. It creates a new SSLContext object with secure default settings. - Issue #19727: os.utime(..., None) is now potentially more precise under Windows. - Issue #17201: ZIP64 extensions now are enabled by default. Patch by William Mallard. - Issue #19292: Add SSLContext.load_default_certs() to load default root CA certificates from default stores or system stores. By default the method loads CA certs for authentication of server certs. - Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428). - Issue #16596: pdb in a generator now properly skips over yield and yield from rather than stepping out of the generator into its caller. (This is essential for stepping through asyncio coroutines.) - Issue #17916: Added dis.Bytecode.from_traceback() and dis.Bytecode.current_offset to easily display "current instruction" markers in the new disassembly API (Patch by Claudiu Popa). - Issue #19552: venv now supports bootstrapping pip into virtual environments - Issue #17134: Finalize interface to Windows' certificate store. Cert and CRL enumeration are now two functions. enum_certificates() also returns purpose flags as set of OIDs. - Issue #19555: Restore sysconfig.get_config_var('SO'), (and the distutils equivalent) with a DeprecationWarning pointing people at $EXT_SUFFIX. - Issue #8813: Add SSLContext.verify_flags to change the verification flags of the context in order to enable certification revocation list (CRL) checks or strict X509 rules. - Issue #18294: Fix the zlib module to make it 64-bit safe. - Issue #19682: Fix compatibility issue with old version of OpenSSL that was introduced by Issue #18379. - Issue #14455: plistlib now supports binary plists and has an updated API. - Issue #19633: Fixed writing not compressed 16- and 32-bit wave files on big-endian platforms. - Issue #18379: SSLSocket.getpeercert() returns CA issuer AIA fields, OCSP and CRL distribution points. - Issue #18138: Implement cadata argument of SSLContext.load_verify_location() to load CA certificates and CRL from memory. It supports PEM and DER encoded strings. - Issue #18775: Add name and block_size attribute to HMAC object. They now provide the same API elements as non-keyed cryptographic hash functions. - Issue #17276: MD5 as default digestmod for HMAC is deprecated. The HMAC module supports digestmod names, e.g. hmac.HMAC('sha1'). - Issue #19449: in csv's writerow, handle non-string keys when generating the error message that certain keys are not in the 'fieldnames' list. - Issue #13633: Added a new convert_charrefs keyword arg to HTMLParser that, when True, automatically converts all character references. - Issue #2927: Added the unescape() function to the html module. - Issue #8402: Added the escape() function to the glob module. - Issue #17618: Add Base85 and Ascii85 encoding/decoding to the base64 module. - Issue #19634: time.strftime("%y") now raises a ValueError on AIX when given a year before 1900. - Fix test.support.bind_port() to not cause an error when Python was compiled on a system with SO_REUSEPORT defined in the headers but run on a system with an OS kernel that does not support that reasonably new socket option. - Fix compilation error under gcc of the ctypes module bundled libffi for arm. - Issue #19448: Add private API to SSL module to lookup ASN.1 objects by OID, NID, short name and long name. - Issue #19282: dbm.open now supports the context management protocol. (Inital patch by Claudiu Popa) - Issue #8311: Added support for writing any bytes-like objects in the aifc, sunau, and wave modules. - Issue #5202: Added support for unseekable files in the wave module. - Issue #19544 and Issue #1180: Restore global option to ignore ~/.pydistutils.cfg in Distutils, accidentally removed in backout of distutils2 changes. - Issue #19523: Closed FileHandler leak which occurred when delay was set. - Issue #19544 and Issue #6516: Restore support for --user and --group parameters to sdist command accidentally rolled back as part of the distutils2 rollback. - Issue #13674: Prevented time.strftime from crashing on Windows when given a year before 1900 and a format of %y. - Issue #19406: implementation of the ensurepip module (part of PEP 453). Patch by Donald Stufft and Nick Coghlan. - Issue #19544 and Issue #6286: Restore use of urllib over http allowing use of http_proxy for Distutils upload command, a feature accidentally lost in the rollback of distutils2. - Issue #19544 and Issue #7457: Restore the read_pkg_file method to distutils.dist.DistributionMetadata accidentally removed in the undo of distutils2. - Issue #16685: Added support for any bytes-like objects in the audioop module. Removed support for strings. - Issue #7171: Add Windows implementation of ``inet_ntop`` and ``inet_pton`` to socket module. Patch by Atsuo Ishimoto. - Issue #19261: Added support for writing 24-bit samples in the sunau module. - Issue #1097797: Added CP273 encoding, used on IBM mainframes in Germany and Austria. Mapping provided by Michael Bierenfeld. - Issue #1575020: Fixed support of 24-bit wave files on big-endian platforms. - Issue #19378: Fixed a number of cases in the dis module where the new "file" parameter was not being honoured correctly - Issue #19378: Removed the "dis.Bytecode.show_info" method - Issue #19378: Renamed the "dis.Bytecode.display_code" method to "dis.Bytecode.dis" and converted it to returning a string rather than printing output. - Issue #19378: the "line_offset" parameter in the new "dis.get_instructions" API has been renamed to "first_line" (and the default value and usage changed accordingly). This should reduce confusion with the more common use of "offset" in the dis docs to refer to bytecode offsets. - Issue #18678: Corrected spwd struct member names in spwd module: sp_nam->sp_namp, and sp_pwd->sp_pwdp. The old names are kept as extra structseq members, for backward compatibility. - Issue #6157: Fixed tkinter.Text.debug(). tkinter.Text.bbox() now raises TypeError instead of TclError on wrong number of arguments. Original patch by Guilherme Polo. - Issue #10197: Rework subprocess.get[status]output to use subprocess functionality and thus to work on Windows. Patch by Nick Coghlan - Issue #6160: The bbox() method of tkinter.Spinbox now returns a tuple of integers instead of a string. Based on patch by Guilherme Polo. - Issue #19403: contextlib.redirect_stdout is now reentrant - Issue #19286: Directories in ``package_data`` are no longer added to the filelist, preventing failure outlined in the ticket. - Issue #19480: HTMLParser now accepts all valid start-tag names as defined by the HTML5 standard. - Issue #15114: The html.parser module now raises a DeprecationWarning when the strict argument of HTMLParser or the HTMLParser.error method are used. - Issue #19410: Undo the special-casing removal of '' for importlib.machinery.FileFinder. - Issue #19424: Fix the warnings module to accept filename containing surrogate characters. - Issue #19435: Fix directory traversal attack on CGIHttpRequestHandler. - Issue #19227: Remove pthread_atfork() handler. The handler was added to solve #18747 but has caused issues. - Issue #19420: Fix reference leak in module initalization code of _hashopenssl.c - Issue #19329: Optimized compiling charsets in regular expressions. - Issue #19227: Try to fix deadlocks caused by re-seeding then OpenSSL pseudo-random number generator on fork(). - Issue #16037: HTTPMessage.readheaders() raises an HTTPException when more than 100 headers are read. Adapted from patch by Jyrki Pulliainen. - Issue #16040: CVE-2013-1752: nntplib: Limit maximum line lengths to 2048 to prevent readline() calls from consuming too much memory. Patch by Jyrki Pulliainen. - Issue #16041: CVE-2013-1752: poplib: Limit maximum line lengths to 2048 to prevent readline() calls from consuming too much memory. Patch by Jyrki Pulliainen. - Issue #17997: Change behavior of ``ssl.match_hostname()`` to follow RFC 6125, for security reasons. It now doesn't match multiple wildcards nor wildcards inside IDN fragments. - Issue #16039: CVE-2013-1752: Change use of readline in imaplib module to limit line length. Patch by Emil Lind. - Issue #19330: the unnecessary wrapper functions have been removed from the implementations of the new contextlib.redirect_stdout and contextlib.suppress context managers, which also ensures they provide reasonable help() output on instances - Issue #19393: Fix symtable.symtable function to not be confused when there are functions or classes named "top". - Issue #18685: Restore re performance to pre-PEP 393 levels. - Issue #19339: telnetlib module is now using time.monotonic() when available to compute timeout. - Issue #19399: fix sporadic test_subprocess failure. - Issue #13234: Fix os.listdir to work with extended paths on Windows. Patch by Santoso Wijaya. - Issue #19375: The site module adding a "site-python" directory to sys.path, if it exists, is now deprecated. - Issue #19379: Lazily import linecache in the warnings module, to make startup with warnings faster until a warning gets printed. - Issue #19288: Fixed the "in" operator of dbm.gnu databases for string argument. Original patch by Arfrever Frehtes Taifersar Arahesis. - Issue #19287: Fixed the "in" operator of dbm.ndbm databases for string argument. Original patch by Arfrever Frehtes Taifersar Arahesis. - Issue #19327: Fixed the working of regular expressions with too big charset. - Issue #17400: New 'is_global' attribute for ipaddress to tell if an address is allocated by IANA for global or private networks. - Issue #19350: Increasing the test coverage of macurl2path. Patch by Colin Williams. - Issue #19365: Optimized the parsing of long replacement string in re.sub*() functions. - Issue #19352: Fix unittest discovery when a module can be reached through several paths (e.g. under Debian/Ubuntu with virtualenv). - Issue #15207: Fix mimetypes to read from correct part of Windows registry Original patch by Dave Chambers - Issue #16595: Add prlimit() to resource module. - Issue #19324: Expose Linux-specific constants in resource module. - Load SSL's error strings in hashlib. - Issue #18527: Upgrade internal copy of zlib to 1.2.8. - Issue #19274: Add a filterfunc parameter to PyZipFile.writepy. - Issue #8964: fix platform._sys_version to handle IronPython 2.6+. Patch by Martin Matusiak. - Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules. - Issue #18958: Improve error message for json.load(s) while passing a string that starts with a UTF-8 BOM. - Issue #19307: Improve error message for json.load(s) while passing objects of the wrong type. - Issue #16038: CVE-2013-1752: ftplib: Limit amount of data read by limiting the call to readline(). Original patch by Michał Jastrzębski and Giampaolo Rodola. - Issue #17087: Improved the repr for regular expression match objects. Tests ----- - Issue #19664: test_userdict's repr test no longer depends on the order of dict elements. - Issue #19440: Clean up test_capi by removing an unnecessary __future__ import, converting from test_main to unittest.main, and running the _testcapi module tests as subTests of a unittest TestCase method. - Issue #19378: the main dis module tests are now run with both stdout redirection *and* passing an explicit file parameter - Issue #19378: removed the not-actually-helpful assertInstructionMatches and assertBytecodeExactlyMatches helpers from bytecode_helper - Issue #18702: All skipped tests now reported as skipped. - Issue #19439: interpreter embedding tests are now executed on Windows (Patch by Zachary Ware) - Issue #19085: Added basic tests for all tkinter widget options. - Issue #19384: Fix test_py_compile for root user, patch by Claudiu Popa. Documentation ------------- - Issue #18326: Clarify that list.sort's arguments are keyword-only. Also, attempt to reduce confusion in the glossary by not saying there are different "types" of arguments and parameters. Build ----- - Issue #19358: "make clinic" now runs the Argument Clinic preprocessor over all CPython source files. - Update SQLite to 3.8.1, xz to 5.0.5, and Tcl/Tk to 8.6.1 on Windows. - Issue #16632: Enable DEP and ASLR on Windows. - Issue #17791: Drop PREFIX and EXEC_PREFIX definitions from PC/pyconfig.h - Add workaround for VS 2010 nmake clean issue. VS 2010 doesn't set up PATH for nmake.exe correctly. - Issue #19550: Implement Windows installer changes of PEP 453 (ensurepip). - Issue #19520: Fix compiler warning in the _sha3 module on 32bit Windows. - Issue #19356: Avoid using a C variabled named "_self", it's a reserved word in some C compilers. - Issue #15792: Correct build options on Win64. Patch by Jeremy Kloth. - Issue #19373: Apply upstream change to Tk 8.5.15 fixing OS X 10.9 screen refresh problem for OS X installer build. - Issue #19649: On OS X, the same set of file names are now installed in bin directories for all configurations: non-framework vs framework, and single arch vs universal builds. pythonx.y-32 is now always installed for 64-bit/32-bit universal builds. The obsolete and undocumented pythonw* symlinks are no longer installed anywhere. - Issue #19553: PEP 453 - "make install" and "make altinstall" now install or upgrade pip by default, using the bundled pip provided by the new ensurepip module. A new configure option, --with-ensurepip[=upgrade|install|no], is available to override the default ensurepip "--upgrade" option. The option can also be set with "make [alt]install ENSUREPIP=[upgrade|install|no]". - Issue #19551: PEP 453 - the OS X installer now installs pip by default. - Update third-party libraries for OS X installers: xz 5.0.3 -> 5.0.5, SQLite 3.7.13 -> 3.8.1 - Issue #15663: Revert OS X installer built-in Tcl/Tk support for 3.4.0b1. Some third-party projects, such as Matplotlib and PIL/Pillow, depended on being able to build with Tcl and Tk frameworks in /Library/Frameworks. Tools/Demos ----------- - Issue #19730: Argument Clinic now supports all the existing PyArg "format units" as legacy converters, as well as two new features: "self converters" and the "version" directive. - Issue #19552: pyvenv now bootstraps pip into virtual environments by default (pass --without-pip to request the old behaviour) - Issue #19390: Argument Clinic no longer accepts malformed Python and C ids. What's New in Python 3.4.0 Alpha 4? =================================== Release date: 2013-10-20 Core and Builtins ----------------- - Issue #19301: Give classes and functions that are explicitly marked global a global qualname. - Issue #19279: UTF-7 decoder no longer produces illegal strings. - Issue #16612: Add "Argument Clinic", a compile-time preprocessor for C files to generate argument parsing code. (See PEP 436.) - Issue #18810: Shift stat calls in importlib.machinery.FileFinder such that the code is optimistic that if something exists in a directory named exactly like the possible package being searched for that it's in actuality a directory. - Issue #18416: importlib.machinery.PathFinder now treats '' as the cwd and importlib.machinery.FileFinder no longer special-cases '' to '.'. This leads to modules imported from cwd to now possess an absolute file path for __file__ (this does not affect modules specified by path on the CLI but it does affect -m/runpy). It also allows FileFinder to be more consistent by not having an edge case. - Issue #4555: All exported C symbols are now prefixed with either "Py" or "_Py". - Issue #19219: Speed up marshal.loads(), and make pyc files slightly (5% to 10%) smaller. - Issue #19221: Upgrade Unicode database to version 6.3.0. - Issue #16742: The result of the C callback PyOS_ReadlineFunctionPointer must now be a string allocated by PyMem_RawMalloc() or PyMem_RawRealloc() (or NULL if an error occurred), instead of a string allocated by PyMem_Malloc() or PyMem_Realloc(). - Issue #19199: Remove ``PyThreadState.tick_counter`` field - Fix macro expansion of _PyErr_OCCURRED(), and make sure to use it in at least one place so as to avoid regressions. - Issue #19087: Improve bytearray allocation in order to allow cheap popping of data at the front (slice deletion). - Issue #19014: memoryview.cast() is now allowed on zero-length views. - Issue #18690: memoryview is now automatically registered with collections.abc.Sequence - Issue #19078: memoryview now correctly supports the reversed builtin (Patch by Claudiu Popa) Library ------- - Issue #17457: unittest test discovery now works with namespace packages. Patch by Claudiu Popa. - Issue #18235: Fix the sysconfig variables LDSHARED and BLDSHARED under AIX. Patch by David Edelsohn. - Issue #18606: Add the new "statistics" module (PEP 450). Contributed by Steven D'Aprano. - Issue #12866: The audioop module now supports 24-bit samples. - Issue #19254: Provide an optimized Python implementation of pbkdf2_hmac. - Issues #19201, Issue #19222, Issue #19223: Add "x" mode (exclusive creation) in opening file to bz2, gzip and lzma modules. Patches by Tim Heaney and Vajrasky Kok. - Fix a reference count leak in _sre. - Issue #19262: Initial check in of the 'asyncio' package (a.k.a. Tulip, a.k.a. PEP 3156). There are no docs yet, and the PEP is slightly out of date with the code. This module will have *provisional* status in Python 3.4. - Issue #19276: Fixed the wave module on 64-bit big-endian platforms. - Issue #19266: Rename the new-in-3.4 ``contextlib.ignore`` context manager to ``contextlib.suppress`` in order to be more consistent with existing descriptions of that operation elsewhere in the language and standard library documentation (Patch by Zero Piraeus). - Issue #18891: Completed the new email package (provisional) API additions by adding new classes EmailMessage, MIMEPart, and ContentManager. - Issue #18281: Unused stat constants removed from `tarfile`. - Issue #18999: Multiprocessing now supports 'contexts' with the same API as the module, but bound to specified start methods. - Issue #18468: The re.split, re.findall, and re.sub functions and the group() and groups() methods of match object now always return a string or a bytes object. - Issue #18725: The textwrap module now supports truncating multiline text. - Issue #18776: atexit callbacks now display their full traceback when they raise an exception. - Issue #17827: Add the missing documentation for ``codecs.encode`` and ``codecs.decode``. - Issue #19218: Rename collections.abc to _collections_abc in order to speed up interpreter start. - Issue #18582: Add 'pbkdf2_hmac' to the hashlib module. It implements PKCS#5 password-based key derivation functions with HMAC as pseudorandom function. - Issue #19131: The aifc module now correctly reads and writes sampwidth of compressed streams. - Issue #19209: Remove import of copyreg from the os module to speed up interpreter startup. stat_result and statvfs_result are now hard-coded to reside in the os module. - Issue #19205: Don't import the 're' module in site and sysconfig module to speed up interpreter start. - Issue #9548: Add a minimal "_bootlocale" module that is imported by the _io module instead of the full locale module. - Issue #18764: Remove the 'print' alias for the PDB 'p' command so that it no longer shadows the print function. - Issue #19158: A rare race in BoundedSemaphore could allow .release() too often. - Issue #15805: Add contextlib.redirect_stdout(). - Issue #18716: Deprecate the formatter module. - Issue #10712: 2to3 has a new "asserts" fixer that replaces deprecated names of unittest methods (e.g. failUnlessEqual -> assertEqual). - Issue #18037: 2to3 now escapes ``'\u'`` and ``'\U'`` in native strings. - Issue #17839: base64.decodebytes and base64.encodebytes now accept any object that exports a 1 dimensional array of bytes (this means the same is now also true for base64_codec) - Issue #19132: The pprint module now supports compact mode. - Issue #19137: The pprint module now correctly formats instances of set and frozenset subclasses. - Issue #10042: functools.total_ordering now correctly handles NotImplemented being returned by the underlying comparison function (Patch by Katie Miller) - Issue #19092: contextlib.ExitStack now correctly reraises exceptions from the __exit__ callbacks of inner context managers (Patch by Hrvoje Nikšić) - Issue #12641: Avoid passing "-mno-cygwin" to the mingw32 compiler, except when necessary. Patch by Oscar Benjamin. - Issue #5845: In site.py, only load readline history from ~/.python_history if no history has been read already. This avoids double writes to the history file at shutdown. - Properly initialize all fields of a SSL object after allocation. - Issue #19095: SSLSocket.getpeercert() now raises ValueError when the SSL handshake hasn't been done. - Issue #4366: Fix building extensions on all platforms when --enable-shared is used. - Issue #19030: Fixed `inspect.getmembers` and `inspect.classify_class_attrs` to attempt activating descriptors before falling back to a __dict__ search for faulty descriptors. `inspect.classify_class_attrs` no longer returns Attributes whose home class is None. C API ----- - Issue #1772673: The type of `char*` arguments now changed to `const char*`. - Issue #16129: Added a `Py_SetStandardStreamEncoding` pre-initialization API to allow embedding applications like Blender to force a particular encoding and error handler for the standard IO streams (initial patch by Bastien Montagne) Tests ----- - Issue #19275: Fix test_site on AMD64 Snow Leopard - Issue #14407: Fix unittest test discovery in test_concurrent_futures. - Issue #18919: Unified and extended tests for audio modules: aifc, sunau and wave. - Issue #18714: Added tests for ``pdb.find_function()``. Documentation ------------- - Issue #18758: Fixed and improved cross-references. - Issue #18972: Modernize email examples and use the argparse module in them. Build ----- - Issue #19130: Correct PCbuild/readme.txt, Python 3.3 and 3.4 require VS 2010. - Issue #15663: Update OS X 10.6+ installer to use Tcl/Tk 8.5.15. - Issue #14499: Fix several problems with OS X universal build support: 1. ppc arch detection for extension module builds broke with Xcode 5 2. ppc arch detection in configure did not work on OS X 10.4 3. -sysroot and -arch flags were unnecessarily duplicated 4. there was no obvious way to configure an intel-32 only build. - Issue #19019: Change the OS X installer build script to use CFLAGS instead of OPT for special build options. By setting OPT, some compiler-specific options like -fwrapv were overridden and thus not used, which could result in broken interpreters when building with clang. What's New in Python 3.4.0 Alpha 3? =================================== Release date: 2013-09-29 Core and Builtins ----------------- - Issue #18818: The "encodingname" part of PYTHONIOENCODING is now optional. - Issue #19098: Prevent overflow in the compiler when the recursion limit is set absurdly high. Library ------- - Issue #18929: `inspect.classify_class_attrs()` now correctly finds class attributes returned by `dir()` that are located in the metaclass. - Issue #18950: Fix miscellaneous bugs in the sunau module. Au_read.readframes() now updates current file position and reads correct number of frames from multichannel stream. Au_write.writeframesraw() now correctly updates current file position. Au_read.getnframes() now returns an integer (as in Python 2). Au_read and Au_write now correctly works with file object if start file position is not a zero. - Issue #18594: The fast path for collections.Counter() was never taken due to an over-restrictive type check. - Issue #19053: ZipExtFile.read1() with non-zero argument no more returns empty bytes until end of data. - logging: added support for Unix domain sockets to SocketHandler and DatagramHandler. - Issue #18996: TestCase.assertEqual() now more cleverly shorten differing strings in error report. - Issue #19034: repr() for tkinter.Tcl_Obj now exposes string reperesentation. - Issue #18978: ``urllib.request.Request`` now allows the method to be indicated on the class and no longer sets it to None in ``__init__``. - Issue #18626: the inspect module now offers a basic command line introspection interface (Initial patch by Claudiu Popa) - Issue #3015: Fixed tkinter with wantobject=False. Any Tcl command call returned empty string. - Issue #19037: The mailbox module now makes all changes to maildir files before moving them into place, to avoid race conditions with other programs that may be accessing the maildir directory. - Issue #14984: On POSIX systems, when netrc is called without a filename argument (and therefore is reading the user's $HOME/.netrc file), it now enforces the same security rules as typical ftp clients: the .netrc file must be owned by the user that owns the process and must not be readable by any other user. - Issue #18873: The tokenize module now detects Python source code encoding only in comment lines. - Issue #17764: Enable http.server to bind to a user specified network interface. Patch contributed by Malte Swart. - Issue #18937: Add an assertLogs() context manager to unittest.TestCase to ensure that a block of code emits a message using the logging module. - Issue #17324: Fix http.server's request handling case on trailing '/'. Patch contributed by Vajrasky Kok. - Issue #19018: The heapq.merge() function no longer suppresses IndexError in the underlying iterables. - Issue #18784: The uuid module no longer attempts to load libc via ctypes.CDLL if all the necessary functions have already been found in libuuid. Patch by Evgeny Sologubov. - The :envvar:`PYTHONFAULTHANDLER` environment variable now only enables the faulthandler module if the variable is non-empty. Same behaviour than other variables like :envvar:`PYTHONDONTWRITEBYTECODE`. - Issue #1565525: New function ``traceback.clear_frames`` will clear the local variables of all the stack frames referenced by a traceback object. Tests ----- - Issue #18952: Fix regression in support data downloads introduced when test.support was converted to a package. Regression noticed by Zachary Ware. IDLE ---- - Issue #18873: IDLE now detects Python source code encoding only in comment lines. - Issue #18988: The "Tab" key now works when a word is already autocompleted. Documentation ------------- - Issue #17003: Unified the size argument names in the io module with common practice. Build ----- - Issue #18596: Support the use of address sanity checking in recent versions of clang and GCC by appropriately marking known false alarms in the small object allocator. Patch contributed by Dhiru Kholia. Tools/Demos ----------- - Issue #18873: 2to3 and the findnocoding.py script now detect Python source code encoding only in comment lines. What's New in Python 3.4.0 Alpha 2? =================================== Release date: 2013-09-09 Core and Builtins ----------------- - Issue #18942: sys._debugmallocstats() output was damaged on Windows. - Issue #18571: Implementation of the PEP 446: file descriptors and file handles are now created non-inheritable; add functions os.get/set_inheritable(), os.get/set_handle_inheritable() and socket.socket.get/set_inheritable(). - Issue #11619: The parser and the import machinery do not encode Unicode filenames anymore on Windows. - Issue #18808: Non-daemon threads are now automatically joined when a sub-interpreter is shutdown (it would previously dump a fatal error). - Remove support for compiling on systems without getcwd(). - Issue #18774: Remove last bits of GNU PTH thread code and thread_pth.h. - Issue #18771: Add optimization to set object lookups to reduce the cost of hash collisions. The core idea is to inspect a second key/hash pair for each cache line retrieved. - Issue #16105: When a signal handler fails to write to the file descriptor registered with ``signal.set_wakeup_fd()``, report an exception instead of ignoring the error. - Issue #18722: Remove uses of the "register" keyword in C code. - Issue #18667: Add missing "HAVE_FCHOWNAT" symbol to posix._have_functions. - Issue #16499: Add command line option for isolated mode. - Issue #15301: Parsing fd, uid, and gid parameters for builtins in Modules/posixmodule.c is now far more robust. - Issue #18368: PyOS_StdioReadline() no longer leaks memory when realloc() fail. - Issue #17934: Add a clear() method to frame objects, to help clean up expensive details (local variables) and break reference cycles. - Issue #18780: %-formatting codes %d, %i, and %u now treat int-subclasses as int (displays value of int-subclass instead of str(int-subclass) ). Library ------- - Issue #18808: Thread.join() now waits for the underlying thread state to be destroyed before returning. This prevents unpredictable aborts in Py_EndInterpreter() when some non-daemon threads are still running. - Issue #18458: Prevent crashes with newer versions of libedit. Its readline emulation has changed from 0-based indexing to 1-based like gnu readline. - Issue #18852: Handle case of ``readline.__doc__`` being ``None`` in the new readline activation code in ``site.py``. - Issue #18672: Fixed format specifiers for Py_ssize_t in debugging output in the _sre module. - Issue #18830: inspect.getclasstree() no longer produces duplicate entries even when input list contains duplicates. - Issue #18878: sunau.open now supports the context management protocol. Based on patches by Claudiu Popa and R. David Murray. - Issue #18909: Fix _tkinter.tkapp.interpaddr() on Windows 64-bit, don't cast 64-bit pointer to long (32 bits). - Issue #18876: The FileIO.mode attribute now better reflects the actual mode under which the file was opened. Patch by Erik Bray. - Issue #16853: Add new selectors module. - Issue #18882: Add threading.main_thread() function. - Issue #18901: The sunau getparams method now returns a namedtuple rather than a plain tuple. Patch by Claudiu Popa. - Issue #17487: The result of the wave getparams method now is pickleable again. Patch by Claudiu Popa. - Issue #18756: os.urandom() now uses a lazily-opened persistent file descriptor, so as to avoid using many file descriptors when run in parallel from multiple threads. - Issue #18418: After fork(), reinit all threads states, not only active ones. Patch by A. Jesse Jiryu Davis. - Issue #17974: Switch unittest from using getopt to using argparse. - Issue #11798: TestSuite now drops references to own tests after execution. - Issue #16611: http.cookie now correctly parses the 'secure' and 'httponly' cookie flags. - Issue #11973: Fix a problem in kevent. The flags and fflags fields are now properly handled as unsigned. - Issue #18807: ``pyvenv`` now takes a --copies argument allowing copies instead of symlinks even where symlinks are available and the default. - Issue #18538: ``python -m dis`` now uses argparse for argument processing. Patch by Michele Orrù. - Issue #18394: Close cgi.FieldStorage's optional file. - Issue #17702: On error, os.environb now suppresses the exception context when raising a new KeyError with the original key. - Issue #16809: Fixed some tkinter incompabilities with Tcl/Tk 8.6. - Issue #16809: Tkinter's splitlist() and split() methods now accept Tcl_Obj argument. - Issue #18324: set_payload now correctly handles binary input. This also supersedes the previous fixes for #14360, #1717, and #16564. - Issue #18794: Add a fileno() method and a closed attribute to select.devpoll objects. - Issue #17119: Fixed integer overflows when processing large strings and tuples in the tkinter module. - Issue #18747: Re-seed OpenSSL's pseudo-random number generator after fork. A pthread_atfork() parent handler is used to seed the PRNG with pid, time and some stack data. - Issue #8865: Concurrent invocation of select.poll.poll() now raises a RuntimeError exception. Patch by Christian Schubert. - Issue #18777: The ssl module now uses the new CRYPTO_THREADID API of OpenSSL 1.0.0+ instead of the deprecated CRYPTO id callback function. - Issue #18768: Correct doc string of RAND_edg(). Patch by Vajrasky Kok. - Issue #18178: Fix ctypes on BSD. dlmalloc.c was compiled twice which broke malloc weak symbols. - Issue #18709: Fix CVE-2013-4238. The SSL module now handles NULL bytes inside subjectAltName correctly. Formerly the module has used OpenSSL's GENERAL_NAME_print() function to get the string represention of ASN.1 strings for ``rfc822Name`` (email), ``dNSName`` (DNS) and ``uniformResourceIdentifier`` (URI). - Issue #18701: Remove support of old CPython versions (<3.0) from C code. - Issue #18756: Improve error reporting in os.urandom() when the failure is due to something else than /dev/urandom not existing (for example, exhausting the file descriptor limit). - Issue #18673: Add O_TMPFILE to os module. O_TMPFILE requires Linux kernel 3.11 or newer. It's only defined on system with 3.11 uapi headers, too. - Issue #18532: Change the builtin hash algorithms' names to lower case names as promised by hashlib's documentation. - Issue #8713: add new spwan and forkserver start methods, and new functions get_all_start_methods, get_start_method, and set_start_method, to multiprocessing. - Issue #18405: Improve the entropy of crypt.mksalt(). - Issue #12015: The tempfile module now uses a suffix of 8 random characters instead of 6, to reduce the risk of filename collision. The entropy was reduced when uppercase letters were removed from the charset used to generate random characters. - Issue #18585: Add :func:`textwrap.shorten` to collapse and truncate a piece of text to a given length. - Issue #18598: Tweak exception message for importlib.import_module() to include the module name when a key argument is missing. - Issue #19151: Fix docstring and use of _get_supported_file_loaders() to reflect 2-tuples. - Issue #19152: Add ExtensionFileLoader.get_filename(). - Issue #18676: Change 'positive' to 'non-negative' in queue.py put and get docstrings and ValueError messages. Patch by Zhongyue Luo - Fix refcounting issue with extension types in tkinter. - Issue #8112: xlmrpc.server's DocXMLRPCServer server no longer raises an error if methods have annotations; it now correctly displays the annotations. - Issue #18600: Added policy argument to email.message.Message.as_string, and as_bytes and __bytes__ methods to Message. - Issue #18671: Output more information when logging exceptions occur. - Issue #18621: Prevent the site module's patched builtins from keeping too many references alive for too long. - Issue #4885: Add weakref support to mmap objects. Patch by Valerie Lambert. - Issue #8860: Fixed rounding in timedelta constructor. - Issue #18849: Fixed a Windows-specific tempfile bug where collision with an existing directory caused mkstemp and related APIs to fail instead of retrying. Report and fix by Vlad Shcherbina. - Issue #18920: argparse's default destination for the version action (-v, --version) has also been changed to stdout, to match the Python executable. Tests ----- - Issue #18623: Factor out the _SuppressCoreFiles context manager into test.support. Patch by Valerie Lambert. - Issue #12037: Fix test_email for desktop Windows. - Issue #15507: test_subprocess's test_send_signal could fail if the test runner were run in an environment where the process inherited an ignore setting for SIGINT. Restore the SIGINT handler to the desired KeyboardInterrupt raising one during that test. - Issue #16799: Switched from getopt to argparse style in regrtest's argument parsing. Added more tests for regrtest's argument parsing. - Issue #18792: Use "127.0.0.1" or "::1" instead of "localhost" as much as possible, since "localhost" goes through a DNS lookup under recent Windows versions. IDLE ---- - Issue #18489: Add tests for SearchEngine. Original patch by Phil Webster. Documentation ------------- - Issue #18743: Fix references to non-existant "StringIO" module. - Issue #18783: Removed existing mentions of Python long type in docstrings, error messages and comments. Build ----- - Issue #1584: Provide configure options to override default search paths for Tcl and Tk when building _tkinter. - Issue #15663: Tcl/Tk 8.5.14 is now included with the OS X 10.6+ 64-/32-bit installer. It is no longer necessary to install a third-party version of Tcl/Tk 8.5 to work around the problems in the Apple-supplied Tcl/Tk 8.5 shipped in OS X 10.6 and later releases. Tools/Demos ----------- - Issue #18922: Now The Lib/smtpd.py and Tools/i18n/msgfmt.py scripts write their version strings to stdout, and not to sderr. What's New in Python 3.4.0 Alpha 1? =================================== Release date: 2013-08-03 Core and Builtins ----------------- - Issue #16741: Fix an error reporting in int(). - Issue #17899: Fix rare file descriptor leak in os.listdir(). - Issue #10241: Clear extension module dict copies at interpreter shutdown. Patch by Neil Schemenauer, minimally modified. - Issue #9035: ismount now recognises volumes mounted below a drive root on Windows. Original patch by Atsuo Ishimoto. - Issue #18214: Improve finalization of Python modules to avoid setting their globals to None, in most cases. - Issue #18112: PEP 442 implementation (safe object finalization). - Issue #18552: Check return value of PyArena_AddPyObject() in obj2ast_object(). - Issue #18560: Fix potential NULL pointer dereference in sum(). - Issue #18520: Add a new PyStructSequence_InitType2() function, same than PyStructSequence_InitType() except that it has a return value (0 on success, -1 on error). - Issue #15905: Fix theoretical buffer overflow in handling of sys.argv[0], prefix and exec_prefix if the operation system does not obey MAXPATHLEN. - Issue #18408: Fix many various bugs in code handling errors, especially on memory allocation failure (MemoryError). - Issue #18344: Fix potential ref-leaks in _bufferedreader_read_all(). - Issue #18342: Use the repr of a module name when an import fails when using ``from ... import ...``. - Issue #17872: Fix a segfault in marshal.load() when input stream returns more bytes than requested. - Issue #18338: `python --version` now prints version string to stdout, and not to stderr. Patch by Berker Peksag and Michael Dickens. - Issue #18426: Fix NULL pointer dereference in C extension import when PyModule_GetDef() returns an error. - Issue #17206: On Windows, increase the stack size from 2 MB to 4.2 MB to fix a stack overflow in the marshal module (fix a crash in test_marshal). Patch written by Jeremy Kloth. - Issue #3329: Implement the PEP 445: Add new APIs to customize Python memory allocators. - Issue #18328: Reorder ops in PyThreadState_Delete*() functions. Now the tstate is first removed from TLS and then deallocated. - Issue #13483: Use VirtualAlloc in obmalloc on Windows. - Issue #18184: PyUnicode_FromFormat() and PyUnicode_FromFormatV() now raise OverflowError when an argument of %c format is out of range. - Issue #18111: The min() and max() functions now support a default argument to be returned instead of raising a ValueError on an empty sequence. (Contributed by Julian Berman.) - Issue #18137: Detect integer overflow on precision in float.__format__() and complex.__format__(). - Issue #18183: Fix various unicode operations on strings with large unicode codepoints. - Issue #18180: Fix ref leak in _PyImport_GetDynLoadWindows(). - Issue #18038: SyntaxError raised during compilation sources with illegal encoding now always contains an encoding name. - Issue #17931: Resolve confusion on Windows between pids and process handles. - Tweak the exception message when the magic number or size value in a bytecode file is truncated. - Issue #17932: Fix an integer overflow issue on Windows 64-bit in iterators: change the C type of seqiterobject.it_index from long to Py_ssize_t. - Issue #18065: Don't set __path__ to the package name for frozen packages. - Issue #18088: When reloading a module, unconditionally reset all relevant attributes on the module (e.g. __name__, __loader__, __package__, __file__, __cached__). - Issue #17937: Try harder to collect cyclic garbage at shutdown. - Issue #12370: Prevent class bodies from interfering with the __class__ closure. - Issue #17644: Fix a crash in str.format when curly braces are used in square brackets. - Issue #17237: Fix crash in the ASCII decoder on m68k. - Issue #17927: Frame objects kept arguments alive if they had been copied into a cell, even if the cell was cleared. - Issue #1545463: At shutdown, defer finalization of codec modules so that stderr remains usable. - Issue #7330: Implement width and precision (ex: "%5.3s") for the format string of PyUnicode_FromFormat() function, original patch written by Ysj Ray. - Issue #1545463: Global variables caught in reference cycles are now garbage-collected at shutdown. - Issue #17094: Clear stale thread states after fork(). Note that this is a potentially disruptive change since it may release some system resources which would otherwise remain perpetually alive (e.g. database connections kept in thread-local storage). - Issue #17408: Avoid using an obsolete instance of the copyreg module when the interpreter is shutdown and then started again. - Issue #5845: Enable tab-completion in the interactive interpreter by default, thanks to a new sys.__interactivehook__. - Issue #17115,17116: Module initialization now includes setting __package__ and __loader__ attributes to None. - Issue #17853: Ensure locals of a class that shadow free variables always win over the closures. - Issue #17863: In the interactive console, don't loop forever if the encoding can't be fetched from stdin. - Issue #17867: Raise an ImportError if __import__ is not found in __builtins__. - Issue #18698: Ensure importlib.reload() returns the module out of sys.modules. - Issue #17857: Prevent build failures with pre-3.5.0 versions of sqlite3, such as was shipped with Centos 5 and Mac OS X 10.4. - Issue #17413: sys.settrace callbacks were being passed a string instead of an exception instance for the 'value' element of the arg tuple if the exception originated from C code; now an exception instance is always provided. - Issue #17782: Fix undefined behaviour on platforms where ``struct timespec``'s "tv_nsec" member is not a C long. - Issue #17722: When looking up __round__, resolve descriptors. - Issue #16061: Speed up str.replace() for replacing 1-character strings. - Issue #17715: Fix segmentation fault from raising an exception in a __trunc__ method. - Issue #17643: Add __callback__ attribute to weakref.ref. - Issue #16447: Fixed potential segmentation fault when setting __name__ on a class. - Issue #17669: Fix crash involving finalization of generators using yield from. - Issue #14439: Python now prints the traceback on runpy failure at startup. - Issue #17469: Fix _Py_GetAllocatedBlocks() and sys.getallocatedblocks() when running on valgrind. - Issue #17619: Make input() check for Ctrl-C correctly on Windows. - Issue #17357: Add missing verbosity messages for -v/-vv that were lost during the importlib transition. - Issue #17610: Don't rely on non-standard behavior of the C qsort() function. - Issue #17323: The "[X refs, Y blocks]" printed by debug builds has been disabled by default. It can be re-enabled with the `-X showrefcount` option. - Issue #17328: Fix possible refleak in dict.setdefault. - Issue #17275: Corrected class name in init error messages of the C version of BufferedWriter and BufferedRandom. - Issue #7963: Fixed misleading error message that issued when object is called without arguments. - Issue #8745: Small speed up zipimport on Windows. Patch by Catalin Iacob. - Issue #5308: Raise ValueError when marshalling too large object (a sequence with size >= 2**31), instead of producing illegal marshal data. - Issue #12983: Bytes literals with invalid ``\x`` escape now raise a SyntaxError and a full traceback including line number. - Issue #16967: In function definition, evaluate positional defaults before keyword-only defaults. - Issue #17173: Remove uses of locale-dependent C functions (isalpha() etc.) in the interpreter. - Issue #17137: When an Unicode string is resized, the internal wide character string (wstr) format is now cleared. - Issue #17043: The unicode-internal decoder no longer read past the end of input buffer. - Issue #17098: All modules now have __loader__ set even if they pre-exist the bootstrapping of importlib. - Issue #16979: Fix error handling bugs in the unicode-escape-decode decoder. - Issue #16772: The base argument to the int constructor no longer accepts floats, or other non-integer objects with an __int__ method. Objects with an __index__ method are now accepted. - Issue #10156: In the interpreter's initialization phase, unicode globals are now initialized dynamically as needed. - Issue #16980: Fix processing of escaped non-ascii bytes in the unicode-escape-decode decoder. - Issue #16975: Fix error handling bug in the escape-decode bytes decoder. - Issue #14850: Now a charmap decoder treats U+FFFE as "undefined mapping" in any mapping, not only in a string. - Issue #16613: Add *m* argument to ``collections.Chainmap.new_child`` to allow the new child map to be specified explicitly. - Issue #16730: importlib.machinery.FileFinder now no longers raises an exception when trying to populate its cache and it finds out the directory is unreadable or has turned into a file. Reported and diagnosed by David Pritchard. - Issue #16906: Fix a logic error that prevented most static strings from being cleared. - Issue #11461: Fix the incremental UTF-16 decoder. Original patch by Amaury Forgeot d'Arc. - Issue #16856: Fix a segmentation fault from calling repr() on a dict with a key whose repr raise an exception. - Issue #16367: Fix FileIO.readall() on Windows for files larger than 2 GB. - Issue #16761: Calling int() with base argument only now raises TypeError. - Issue #16759: Support the full DWORD (unsigned long) range in Reg2Py when retrieving a REG_DWORD value. This corrects functions like winreg.QueryValueEx that may have been returning truncated values. - Issue #14420: Support the full DWORD (unsigned long) range in Py2Reg when passed a REG_DWORD value. Fixes OverflowError in winreg.SetValueEx. - Issue #11939: Set the st_dev attribute of stat_result to allow Windows to take advantage of the os.path.samefile/sameopenfile/samestat implementations used by other platforms. - Issue #16772: The int() constructor's second argument (base) no longer accepts non integer values. Consistent with the behavior in Python 2. - Issue #14470: Remove w9xpopen support per PEP 11. - Issue #9856: Replace deprecation warning with raising TypeError in object.__format__. Patch by Florent Xicluna. - Issue #16597: In buffered and text IO, call close() on the underlying stream if invoking flush() fails. - Issue #16722: In the bytes() constructor, try to call __bytes__ on the argument before __index__. - Issue #16421: loading multiple modules from one shared object is now handled correctly (previously, the first module loaded from that file was silently returned). Patch by Václav Šmilauer. - Issue #16602: When a weakref's target was part of a long deallocation chain, the object could remain reachable through its weakref even though its refcount had dropped to zero. - Issue #16495: Remove extraneous NULL encoding check from bytes_decode(). - Issue #16619: Create NameConstant AST class to represent None, True, and False literals. As a result, these constants are never loaded at runtime from builtins. - Issue #16455: On FreeBSD and Solaris, if the locale is C, the ASCII/surrogateescape codec is now used (instead of the locale encoding) to decode the command line arguments. This change fixes inconsistencies with os.fsencode() and os.fsdecode(), because these operating systems announce an ASCII locale encoding, but actually use the ISO-8859-1 encoding in practice. - Issue #16562: Optimize dict equality testing. Patch by Serhiy Storchaka. - Issue #16588: Silence unused-but-set warnings in Python/thread_pthread - Issue #16592: stringlib_bytes_join doesn't raise MemoryError on allocation failure. - Issue #16546: Fix: ast.YieldFrom argument is now mandatory. - Issue #16514: Fix regression causing a traceback when sys.path[0] is None (actually, any non-string or non-bytes type). - Issue #16306: Fix multiple error messages when unknown command line parameters where passed to the interpreter. Patch by Hieu Nguyen. - Issue #16215: Fix potential double memory free in str.replace(). Patch by Serhiy Storchaka. - Issue #16290: A float return value from the __complex__ special method is no longer accepted in the complex() constructor. - Issue #16416: On Mac OS X, operating system data are now always encoded/decoded to/from UTF-8/surrogateescape, instead of the locale encoding (which may be ASCII if no locale environment variable is set), to avoid inconsistencies with os.fsencode() and os.fsdecode() functions which are already using UTF-8/surrogateescape. - Issue #16453: Fix equality testing of dead weakref objects. - Issue #9535: Fix pending signals that have been received but not yet handled by Python to not persist after os.fork() in the child process. - Issue #14794: Fix slice.indices to return correct results for huge values, rather than raising OverflowError. - Issue #15001: fix segfault on "del sys.modules['__main__']". Patch by Victor Stinner. - Issue #8271: the utf-8 decoder now outputs the correct number of U+FFFD characters when used with the 'replace' error handler on invalid utf-8 sequences. Patch by Serhiy Storchaka, tests by Ezio Melotti. - Issue #5765: Apply a hard recursion limit in the compiler instead of blowing the stack and segfaulting. Initial patch by Andrea Griffini. - Issue #16402: When slicing a range, fix shadowing of exceptions from __index__. - Issue #16336: fix input checking in the surrogatepass error handler. Patch by Serhiy Storchaka. - Issue #8401: assigning an int to a bytearray slice (e.g. b[3:4] = 5) now raises an error. - Issue #7317: Display full tracebacks when an error occurs asynchronously. Patch by Alon Horev with update by Alexey Kachayev. - Issue #16309: Make PYTHONPATH="" behavior the same as if PYTHONPATH not set at all. - Issue #10189: Improve the error reporting of SyntaxErrors related to global and nonlocal statements. - Fix segfaults on setting __qualname__ on builtin types and attempting to delete it on any type. - Issue #14625: Rewrite the UTF-32 decoder. It is now 3x to 4x faster. Patch written by Serhiy Storchaka. - Issue #16345: Fix an infinite loop when ``fromkeys`` on a dict subclass received a nonempty dict from the constructor. - Issue #16271: Fix strange bugs that resulted from __qualname__ appearing in a class's __dict__ and on type. - Issue #12805: Make bytes.join and bytearray.join faster when the separator is empty. Patch by Serhiy Storchaka. - Issue #6074: Ensure cached bytecode files can always be updated by the user that created them, even when the source file is read-only. - Issue #15958: bytes.join and bytearray.join now accept arbitrary buffer objects. - Issue #14783: Improve int() docstring and switch docstrings for str(), range(), and slice() to use multi-line signatures. - Issue #16160: Subclass support now works for types.SimpleNamespace. - Issue #16148: Implement PEP 424, adding operator.length_hint and PyObject_LengthHint. - Upgrade Unicode data (UCD) to version 6.2. - Issue #15379: Fix passing of non-BMP characters as integers for the charmap decoder (already working as unicode strings). Patch by Serhiy Storchaka. - Issue #15144: Fix possible integer overflow when handling pointers as integer values, by using `Py_uintptr_t` instead of `size_t`. Patch by Serhiy Storchaka. - Issue #15965: Explicitly cast `AT_FDCWD` as (int). Required on Solaris 10 (which defines `AT_FDCWD` as ``0xffd19553``), harmless on other platforms. - Issue #15839: Convert SystemErrors in `super()` to RuntimeErrors. - Issue #15448: Buffered IO now frees the buffer when closed, instead of when deallocating. - Issue #15846: Fix SystemError which happened when using `ast.parse()` in an exception handler on code with syntax errors. - Issue #15897: zipimport.c doesn't check return value of fseek(). Patch by Felipe Cruz. - Issue #15801: Make sure mappings passed to '%' formatting are actually subscriptable. - Issue #15111: __import__ should propagate ImportError when raised as a side-effect of a module triggered from using fromlist. - Issue #15022: Add pickle and comparison support to types.SimpleNamespace. Library ------- - Issue #4331: Added functools.partialmethod (Initial patch by Alon Horev) - Issue #13461: Fix a crash in the TextIOWrapper.tell method on 64-bit platforms. Patch by Yogesh Chaudhari. - Issue #18681: Fix a NameError in importlib.reload() (noticed by Weizhao Li). - Issue #14323: Expanded the number of digits in the coefficients for the RGB -- YIQ conversions so that they match the FCC NTSC versions. - Issue #17998: Fix an internal error in regular expression engine. - Issue #17557: Fix os.getgroups() to work with the modified behavior of getgroups(2) on OS X 10.8. Original patch by Mateusz Lenik. - Issue #18608: Avoid keeping a strong reference to the locale module inside the _io module. - Issue #18619: Fix atexit leaking callbacks registered from sub-interpreters, and make it GC-aware. - Issue #15699: The readline module now uses PEP 3121-style module initialization, so as to reclaim allocated resources (Python callbacks) at shutdown. Original patch by Robin Schreiber. - Issue #17616: wave.open now supports the context management protocol. - Issue #18599: Fix name attribute of _sha1.sha1() object. It now returns 'SHA1' instead of 'SHA'. - Issue #13266: Added inspect.unwrap to easily unravel __wrapped__ chains (initial patch by Daniel Urban and Aaron Iles) - Issue #18561: Skip name in ctypes' _build_callargs() if name is NULL. - Issue #18559: Fix NULL pointer dereference error in _pickle module - Issue #18556: Check the return type of PyUnicode_AsWideChar() in ctype's U_set(). - Issue #17818: aifc.getparams now returns a namedtuple. - Issue #18549: Eliminate dead code in socket_ntohl() - Issue #18530: Remove additional stat call from posixpath.ismount. Patch by Alex Gaynor. - Issue #18514: Fix unreachable Py_DECREF() call in PyCData_FromBaseObj() - Issue #9177: Calling read() or write() now raises ValueError, not AttributeError, on a closed SSL socket. Patch by Senko Rasic. - Issue #18513: Fix behaviour of cmath.rect w.r.t. signed zeros on OS X 10.8 + gcc. - Issue #18479: Changed venv Activate.ps1 to make deactivate a function, and removed Deactivate.ps1. - Issue #18480: Add missing call to PyType_Ready to the _elementtree extension. - Issue #17778: Fix test discovery for test_multiprocessing. (Patch by Zachary Ware.) - Issue #18393: The private module _gestalt and private functions platform._mac_ver_gestalt, platform._mac_ver_lookup and platform._bcd2str have been removed. This does not affect the public interface of the platform module. - Issue #17482: functools.update_wrapper (and functools.wraps) now set the __wrapped__ attribute correctly even if the underlying function has a __wrapped__ attribute set. - Issue #18431: The new email header parser now decodes RFC2047 encoded words in structured headers. - Issue #18432: The sched module's queue method was incorrectly returning an iterator instead of a list. - Issue #18044: The new email header parser was mis-parsing encoded words where an encoded character immediately followed the '?' that follows the CTE character, resulting in a decoding failure. They are now decoded correctly. - Issue #18101: Tcl.split() now process strings nested in a tuple as it do with byte strings. - Issue #18116: getpass was always getting an error when testing /dev/tty, and thus was always falling back to stdin, and would then raise an exception if stdin could not be used (such as /dev/null). It also leaked an open file. All of these issues are now fixed. - Issue #17198: Fix a NameError in the dbm module. Patch by Valentina Mukhamedzhanova. - Issue #18013: Fix cgi.FieldStorage to parse the W3C sample form. - Issue #18020: improve html.escape speed by an order of magnitude. Patch by Matt Bryant. - Issue #18347: ElementTree's html serializer now preserves the case of closing tags. - Issue #17261: Ensure multiprocessing's proxies use proper address. - Issue #18343: faulthandler.register() now keeps the previous signal handler when the function is called twice, so faulthandler.unregister() restores correctly the original signal handler. - Issue #17097: Make multiprocessing ignore EINTR. - Issue #18339: Negative ints keys in unpickler.memo dict no longer cause a segfault inside the _pickle C extension. - Issue #18240: The HMAC module is no longer restricted to bytes and accepts any bytes-like object, e.g. memoryview. Original patch by Jonas Borgström. - Issue #18224: Removed pydoc script from created venv, as it causes problems on Windows and adds no value over and above python -m pydoc ... - Issue #18155: The csv module now correctly handles csv files that use a delimter character that has a special meaning in regexes, instead of throwing an exception. - Issue #14360: encode_quopri can now be successfully used as an encoder when constructing a MIMEApplication object. - Issue #11390: Add -o and -f command line options to the doctest CLI to specify doctest options (and convert it to using argparse). - Issue #18135: ssl.SSLSocket.write() now raises an OverflowError if the input string in longer than 2 gigabytes, and ssl.SSLContext.load_cert_chain() raises a ValueError if the password is longer than 2 gigabytes. The ssl module does not support partial write. - Issue #11016: Add C implementation of the stat module as _stat. - Issue #18248: Fix libffi build on AIX. - Issue #18259: Declare sethostname in socketmodule.c for AIX - Issue #18147: Add diagnostic functions to ssl.SSLContext(). get_ca_list() lists all loaded CA certificates and cert_store_stats() returns amount of loaded X.509 certs, X.509 CA certs and CRLs. - Issue #18167: cgi.FieldStorage no longer fails to handle multipart/form-data when ``\r\n`` appears at end of 65535 bytes without other newlines. - Issue #18076: Introduce importlib.util.decode_source(). - Issue #18357: add tests for dictview set difference. Patch by Fraser Tweedale. - importlib.abc.SourceLoader.get_source() no longer changes SyntaxError or UnicodeDecodeError into ImportError. - Issue #18058, 18057: Make the namespace package loader meet the importlib.abc.InspectLoader ABC, allowing for namespace packages to work with runpy. - Issue #17177: The imp module is pending deprecation. - subprocess: Prevent a possible double close of parent pipe fds when the subprocess exec runs into an error. Prevent a regular multi-close of the /dev/null fd when any of stdin, stdout and stderr was set to DEVNULL. - Issue #18194: Introduce importlib.util.cache_from_source() and source_from_cache() while documenting the equivalent functions in imp as deprecated. - Issue #17907: Document imp.new_module() as deprecated in favour of types.ModuleType. - Issue #18192: Introduce importlib.util.MAGIC_NUMBER and document as deprecated imp.get_magic(). - Issue #18149: Add filecmp.clear_cache() to manually clear the filecmp cache. Patch by Mark Levitt - Issue #18193: Add importlib.reload(). - Issue #18157: Stop using imp.load_module() in pydoc. - Issue #16102: Make uuid._netbios_getnode() work again on Python 3. - Issue #17134: Add ssl.enum_cert_store() as interface to Windows' cert store. - Issue #18143: Implement ssl.get_default_verify_paths() in order to debug the default locations for cafile and capath. - Issue #17314: Move multiprocessing.forking over to importlib. - Issue #11959: SMTPServer and SMTPChannel now take an optional map, use of which avoids affecting global state. - Issue #18109: os.uname() now decodes fields from the locale encoding, and socket.gethostname() now decodes the hostname from the locale encoding, instead of using the UTF-8 encoding in strict mode. - Issue #18089: Implement importlib.abc.InspectLoader.load_module. - Issue #18088: Introduce importlib.abc.Loader.init_module_attrs for setting module attributes. Leads to the pending deprecation of importlib.util.module_for_loader. - Issue #17403: urllib.parse.robotparser normalizes the urls before adding to ruleline. This helps in handling certain types invalid urls in a conservative manner. Patch contributed by Mher Movsisyan. - Issue #18070: Have importlib.util.module_for_loader() set attributes unconditionally in order to properly support reloading. - Added importlib.util.module_to_load to return a context manager to provide the proper module object to load. - Issue #18025: Fixed a segfault in io.BufferedIOBase.readinto() when raw stream's read() returns more bytes than requested. - Issue #18011: As was originally intended, base64.b32decode() now raises a binascii.Error if there are non-b32-alphabet characters present in the input string, instead of a TypeError. - Issue #18072: Implement importlib.abc.InspectLoader.get_code() and importlib.abc.ExecutionLoader.get_code(). - Issue #8240: Set the SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER flag on SSL sockets. - Issue #17269: Workaround for socket.getaddrinfo crash on MacOS X with port None or "0" and flags AI_NUMERICSERV. - Issue #16986: ElementTree now correctly works with string input when the internal XML encoding is not UTF-8 or US-ASCII. - Issue #17996: socket module now exposes AF_LINK constant on BSD and OSX. - Issue #17900: Allowed pickling of recursive OrderedDicts. Decreased pickled size and pickling time. - Issue #17914: Add os.cpu_count(). Patch by Yogesh Chaudhari, based on an initial patch by Trent Nelson. - Issue #17812: Fixed quadratic complexity of base64.b32encode(). Optimize base64.b32encode() and base64.b32decode() (speed up to 3x). - Issue #17980: Fix possible abuse of ssl.match_hostname() for denial of service using certificates with many wildcards (CVE-2013-2099). - Issue #15758: Fix FileIO.readall() so it no longer has O(n**2) complexity. - Issue #14596: The struct.Struct() objects now use a more compact implementation. - Issue #17981: logging's SysLogHandler now closes the socket when it catches socket OSErrors. - Issue #17964: Fix os.sysconf(): the return type of the C sysconf() function is long, not int. - Fix typos in the multiprocessing module. - Issue #17754: Make ctypes.util.find_library() independent of the locale. - Issue #17968: Fix memory leak in os.listxattr(). - Issue #17606: Fixed support of encoded byte strings in the XMLGenerator characters() and ignorableWhitespace() methods. Original patch by Sebastian Ortiz Vasquez. - Issue #17732: Ignore distutils.cfg options pertaining to install paths if a virtual environment is active. - Issue #17915: Fix interoperability of xml.sax with file objects returned by codecs.open(). - Issue #16601: Restarting iteration over tarfile really restarts rather than continuing from where it left off. Patch by Michael Birtwell. - Issue #17289: The readline module now plays nicer with external modules or applications changing the rl_completer_word_break_characters global variable. Initial patch by Bradley Froehle. - Issue #12181: select module: Fix struct kevent definition on OpenBSD 64-bit platforms. Patch by Federico Schwindt. - Issue #11816: multiple improvements to the dis module: get_instructions generator, ability to redirect output to a file, Bytecode and Instruction abstractions. Patch by Nick Coghlan, Ryan Kelly and Thomas Kluyver. - Issue #13831: Embed stringification of remote traceback in local traceback raised when pool task raises an exception. - Issue #15528: Add weakref.finalize to support finalization using weakref callbacks. - Issue #14173: Avoid crashing when reading a signal handler during interpreter shutdown. - Issue #15902: Fix imp.load_module() accepting None as a file when loading an extension module. - Issue #13721: SSLSocket.getpeercert() and SSLSocket.do_handshake() now raise an OSError with ENOTCONN, instead of an AttributeError, when the SSLSocket is not connected. - Issue #14679: add an __all__ (that contains only HTMLParser) to html.parser. - Issue #17802: Fix an UnboundLocalError in html.parser. Initial tests by Thomas Barlow. - Issue #17358: Modules loaded by imp.load_source() and load_compiled() (and by extention load_module()) now have a better chance of working when reloaded. - Issue #17804: New function ``struct.iter_unpack`` allows for streaming struct unpacking. - Issue #17830: When keyword.py is used to update a keyword file, it now preserves the line endings of the original file. - Issue #17272: Making the urllib.request's Request.full_url a descriptor. Fixes bugs with assignment to full_url. Patch by Demian Brecht. - Issue #17353: Plistlib emitted empty data tags with deeply nested datastructures - Issue #11714: Use 'with' statements to assure a Semaphore releases a condition variable. Original patch by Thomas Rachel. - Issue #16624: `subprocess.check_output` now accepts an `input` argument, allowing the subprocess's stdin to be provided as a (byte) string. Patch by Zack Weinberg. - Issue #17795: Reverted backwards-incompatible change in SysLogHandler with Unix domain sockets. - Issue #16694: Add a pure Python implementation of the operator module. Patch by Zachary Ware. - Issue #11182: remove the unused and undocumented pydoc.Scanner class. Patch by Martin Morrison. - Issue #17741: Add ElementTree.XMLPullParser, an event-driven parser for non-blocking applications. - Issue #17555: Fix ForkAwareThreadLock so that size of after fork registry does not grow exponentially with generation of process. - Issue #17707: fix regression in multiprocessing.Queue's get() method where it did not block for short timeouts. - Issue #17720: Fix the Python implementation of pickle.Unpickler to correctly process the APPENDS opcode when it is used on non-list objects. - Issue #17012: shutil.which() no longer falls back to the PATH environment variable if an empty path argument is specified. Patch by Serhiy Storchaka. - Issue #17710: Fix pickle raising a SystemError on bogus input. - Issue #17341: Include the invalid name in the error messages from re about invalid group names. - Issue #17702: os.environ now raises KeyError with the original environment variable name (str on UNIX), instead of using the encoded name (bytes on UNIX). - Issue #16163: Make the importlib based version of pkgutil.iter_importers work for submodules. Initial patch by Berker Peksag. - Issue #16804: Fix a bug in the 'site' module that caused running 'python -S -m site' to incorrectly throw an exception. - Issue #15480: Remove the deprecated and unused TYPE_INT64 code from marshal. Initial patch by Daniel Riti. - Issue #2118: SMTPException is now a subclass of OSError. - Issue #17016: Get rid of possible pointer wraparounds and integer overflows in the re module. Patch by Nickolai Zeldovich. - Issue #16658: add missing return to HTTPConnection.send(). Patch by Jeff Knupp. - Issue #9556: the logging package now allows specifying a time-of-day for a TimedRotatingFileHandler to rotate. - Issue #14971: unittest test discovery no longer gets confused when a function has a different __name__ than its name in the TestCase class dictionary. - Issue #17487: The wave getparams method now returns a namedtuple rather than a plain tuple. - Issue #17675: socket repr() provides local and remote addresses (if any). Patch by Giampaolo Rodola' - Issue #17093: Make the ABCs in importlib.abc provide default values or raise reasonable exceptions for their methods to make them more amenable to super() calls. - Issue #17566: Make importlib.abc.Loader.module_repr() optional instead of an abstractmethod; now it raises NotImplementedError so as to be ignored by default. - Issue #17678: Remove the use of deprecated method in http/cookiejar.py by changing the call to get_origin_req_host() to origin_req_host. - Issue #17666: Fix reading gzip files with an extra field. - Issue #16475: Support object instancing, recursion and interned strings in marshal - Issue #17502: Process DEFAULT values in mock side_effect that returns iterator. - Issue #16795: On the ast.arguments object, unify vararg with varargannotation and kwarg and kwargannotation. Change the column offset of ast.Attribute to be at the attribute name. - Issue #17434: Properly raise a SyntaxError when a string occurs between future imports. - Issue #17117: Import and @importlib.util.set_loader now set __loader__ when it has a value of None or the attribute doesn't exist. - Issue #17032: The "global" in the "NameError: global name 'x' is not defined" error message has been removed. Patch by Ram Rachum. - Issue #18080: When building a C extension module on OS X, if the compiler is overriden with the CC environment variable, use the new compiler as the default for linking if LDSHARED is not also overriden. This restores Distutils behavior introduced in 3.2.3 and inadvertently dropped in 3.3.0. - Issue #18113: Fixed a refcount leak in the curses.panel module's set_userptr() method. Reported by Atsuo Ishimoto. - Implement PEP 443 "Single-dispatch generic functions". - Implement PEP 435 "Adding an Enum type to the Python standard library". - Issue #15596: Faster pickling of unicode strings. - Issue #17572: Avoid chained exceptions when passing bad directives to time.strptime(). Initial patch by Claudiu Popa. - Issue #17435: threading.Timer's __init__ method no longer uses mutable default values for the args and kwargs parameters. - Issue #17526: fix an IndexError raised while passing code without filename to inspect.findsource(). Initial patch by Tyler Doyle. - Issue #17540: Added style parameter to logging formatter configuration by dict. - Issue #16692: The ssl module now supports TLS 1.1 and TLS 1.2. Initial patch by Michele Orrù. - Issue #17025: multiprocessing: Reduce Queue and SimpleQueue contention. - Issue #17536: Add to webbrowser's browser list: www-browser, x-www-browser, iceweasel, iceape. - Issue #17150: pprint now uses line continuations to wrap long string literals. - Issue #17488: Change the subprocess.Popen bufsize parameter default value from unbuffered (0) to buffering (-1) to match the behavior existing code expects and match the behavior of the subprocess module in Python 2 to avoid introducing hard to track down bugs. - Issue #17521: Corrected non-enabling of logger following two calls to fileConfig(). - Issue #17508: Corrected logging MemoryHandler configuration in dictConfig() where the target handler wasn't configured first. - Issue #17209: curses.window.get_wch() now correctly handles KeyboardInterrupt (CTRL+c). - Issue #5713: smtplib now handles 421 (closing connection) error codes when sending mail by closing the socket and reporting the 421 error code via the exception appropriate to the command that received the error response. - Issue #16997: unittest.TestCase now provides a subTest() context manager to procedurally generate, in an easy way, small test instances. - Issue #17485: Also delete the Request Content-Length header if the data attribute is deleted. (Follow on to issue Issue #16464). - Issue #15927: CVS now correctly parses escaped newlines and carriage when parsing with quoting turned off. - Issue #17467: add readline and readlines support to mock_open in unittest.mock. - Issue #13248: removed deprecated and undocumented difflib.isbjunk, isbpopular. - Issue #17192: Update the ctypes module's libffi to v3.0.13. This specifically addresses a stack misalignment issue on x86 and issues on some more recent platforms. - Issue #8862: Fixed curses cleanup when getkey is interrputed by a signal. - Issue #17443: imaplib.IMAP4_stream was using the default unbuffered IO in subprocess, but the imap code assumes buffered IO. In Python2 this worked by accident. IMAP4_stream now explicitly uses buffered IO. - Issue #17476: Fixed regression relative to Python2 in undocumented pydoc 'allmethods'; it was missing unbound methods on the class. - Issue #17474: Remove the deprecated methods of Request class. - Issue #16709: unittest discover order is no-longer filesystem specific. Patch by Jeff Ramnani. - Use the HTTPS PyPI url for upload, overriding any plain HTTP URL in pypirc. - Issue #5024: sndhdr.whichhdr now returns the frame count for WAV files rather than -1. - Issue #17460: Remove the strict argument of HTTPConnection and removing the DeprecationWarning being issued from 3.2 onwards. - Issue #16880: Do not assume _imp.load_dynamic() is defined in the imp module. - Issue #16389: Fixed a performance regression relative to Python 3.1 in the caching of compiled regular expressions. - Added missing FeedParser and BytesFeedParser to email.parser.__all__. - Issue #17431: Fix missing import of BytesFeedParser in email.parser. - Issue #12921: http.server's send_error takes an explain argument to send more information in response. Patch contributed by Karl. - Issue #17414: Add timeit, repeat, and default_timer to timeit.__all__. - Issue #1285086: Get rid of the refcounting hack and speed up urllib.parse.unquote() and urllib.parse.unquote_to_bytes(). - Issue #17099: Have importlib.find_loader() raise ValueError when __loader__ is not set, harmonizing with what happens when the attribute is set to None. - Expose the O_PATH constant in the os module if it is available. - Issue #17368: Fix an off-by-one error in the Python JSON decoder that caused a failure while decoding empty object literals when object_pairs_hook was specified. - Issue #17385: Fix quadratic behavior in threading.Condition. The FIFO queue now uses a deque instead of a list. - Issue #15806: Add contextlib.ignore(). This creates a context manager to ignore specified exceptions, replacing the "except SomeException: pass" idiom. - Issue #14645: The email generator classes now produce output using the specified linesep throughout. Previously if the prolog, epilog, or body were stored with a different linesep, that linesep was used. This fix corrects an RFC non-compliance issue with smtplib.send_message. - Issue #17278: Fix a crash in heapq.heappush() and heapq.heappop() when the list is being resized concurrently. - Issue #16962: Use getdents64 instead of the obsolete getdents syscall in the subprocess module on Linux. - Issue #16935: unittest now counts the module as skipped if it raises SkipTest, instead of counting it as an error. Patch by Zachary Ware. - Issue #17018: Make Process.join() retry if os.waitpid() fails with EINTR. - Issue #17223: array module: Fix a crasher when converting an array containing invalid characters (outside range [U+0000; U+10ffff]) to Unicode: repr(array), str(array) and array.tounicode(). Patch written by Manuel Jacob. - Issue #17197: profile/cProfile modules refactored so that code of run() and runctx() utility functions is not duplicated in both modules. - Issue #14720: sqlite3: Convert datetime microseconds correctly. Patch by Lowe Thiderman. - Issue #15132: Allow a list for the defaultTest argument of unittest.TestProgram. Patch by Jyrki Pulliainen. - Issue #17225: JSON decoder now counts columns in the first line starting with 1, as in other lines. - Issue #6623: Added explicit DeprecationWarning for ftplib.netrc, which has been deprecated and undocumented for a long time. - Issue #13700: Fix byte/string handling in imaplib authentication when an authobject is specified. - Issue #13153: Tkinter functions now raise TclError instead of ValueError when a string argument contains non-BMP character. - Issue #9669: Protect re against infinite loops on zero-width matching in non-greedy repeat. Patch by Matthew Barnett. - Issue #13169: The maximal repetition number in a regular expression has been increased from 65534 to 2147483647 (on 32-bit platform) or 4294967294 (on 64-bit). - Issue #17143: Fix a missing import in the trace module. Initial patch by Berker Peksag. - Issue #15220: email.feedparser's line splitting algorithm is now simpler and faster. - Issue #16743: Fix mmap overflow check on 32 bit Windows. - Issue #16996: webbrowser module now uses shutil.which() to find a web-browser on the executable search path. - Issue #16800: tempfile.gettempdir() no longer left temporary files when the disk is full. Original patch by Amir Szekely. - Issue #17192: Import libffi-3.0.12. - Issue #16564: Fixed regression relative to Python2 in the operation of email.encoders.encode_7or8bit when used with binary data. - Issue #17052: unittest discovery should use self.testLoader. - Issue #4591: Uid and gid values larger than 2**31 are supported now. - Issue #17141: random.vonmisesvariate() no longer hangs for large kappas. - Issue #17149: Fix random.vonmisesvariate to always return results in [0, 2*math.pi]. - Issue #1470548: XMLGenerator now works with binary output streams. - Issue #6975: os.path.realpath() now correctly resolves multiple nested symlinks on POSIX platforms. - Issue #13773: sqlite3.connect() gets a new `uri` parameter to pass the filename as a URI, allowing to pass custom options. - Issue #16564: Fixed regression relative to Python2 in the operation of email.encoders.encode_noop when used with binary data. - Issue #10355: The mode, name, encoding and newlines properties now work on SpooledTemporaryFile objects even when they have not yet rolled over. Obsolete method xreadline (which has never worked in Python 3) has been removed. - Issue #16686: Fixed a lot of bugs in audioop module. Fixed crashes in avgpp(), maxpp() and ratecv(). Fixed an integer overflow in add(), bias(), and ratecv(). reverse(), lin2lin() and ratecv() no more lose precision for 32-bit samples. max() and rms() no more returns a negative result and various other functions now work correctly with 32-bit sample -0x80000000. - Issue #17073: Fix some integer overflows in sqlite3 module. - Issue #16723: httplib.HTTPResponse no longer marked closed when the connection is automatically closed. - Issue #15359: Add CAN_BCM protocol support to the socket module. Patch by Brian Thorne. - Issue #16948: Fix quoted printable body encoding for non-latin1 character sets in the email package. - Issue #16811: Fix folding of headers with no value in the provisional email policies. - Issue #17132: Update symbol for "yield from" grammar changes. - Issue #17076: Make copying of xattrs more tolerant of missing FS support. Patch by Thomas Wouters. - Issue #17089: Expat parser now correctly works with string input when the internal XML encoding is not UTF-8 or US-ASCII. It also now accepts bytes and strings larger than 2 GiB. - Issue #6083: Fix multiple segmentation faults occured when PyArg_ParseTuple parses nested mutating sequence. - Issue #5289: Fix ctypes.util.find_library on Solaris. - Issue #17106: Fix a segmentation fault in io.TextIOWrapper when an underlying stream or a decoder produces data of an unexpected type (i.e. when io.TextIOWrapper initialized with text stream or use bytes-to-bytes codec). - Issue #17015: When it has a spec, a Mock object now inspects its signature when matching calls, so that arguments can be matched positionally or by name. - Issue #15633: httplib.HTTPResponse is now mark closed when the server sends less than the advertised Content-Length. - Issue #12268: The io module file object write methods no longer abort early when one of its write system calls is interrupted (EINTR). - Issue #6972: The zipfile module no longer overwrites files outside of its destination path when extracting malicious zip files. - Issue #4844: ZipFile now raises BadZipFile when opens a ZIP file with an incomplete "End of Central Directory" record. Original patch by Guilherme Polo and Alan McIntyre. - Issue #17071: Signature.bind() now works when one of the keyword arguments is named ``self``. - Issue #12004: Fix an internal error in PyZipFile when writing an invalid Python file. Patch by Ben Morgan. - Have py_compile use importlib as much as possible to avoid code duplication. Code now raises FileExistsError if the file path to be used for the byte-compiled file is a symlink or non-regular file as a warning that import will not keep the file path type if it writes to that path. - Issue #16972: Have site.addpackage() consider already known paths even when none are explicitly passed in. Bug report and fix by Kirill. - Issue #1602133: on Mac OS X a shared library build (``--enable-shared``) now fills the ``os.environ`` variable correctly. - Issue #15505: `unittest.installHandler` no longer assumes SIGINT handler is set to a callable object. - Issue #13454: Fix a crash when deleting an iterator created by itertools.tee() if all other iterators were very advanced before. - Issue #12411: Fix to cgi.parse_multipart to correctly use bytes boundaries and bytes data. Patch by Jonas Wagner. - Issue #16957: shutil.which() no longer searches a bare file name in the current directory on Unix and no longer searches a relative file path with a directory part in PATH directories. Patch by Thomas Kluyver. - Issue #1159051: GzipFile now raises EOFError when reading a corrupted file with truncated header or footer. - Issue #16993: shutil.which() now preserves the case of the path and extension on Windows. - Issue #16992: On Windows in signal.set_wakeup_fd, validate the file descriptor argument. - Issue #16422: For compatibility with the Python version, the C version of decimal now uses strings instead of integers for rounding mode constants. - Issue #15861: tkinter now correctly works with lists and tuples containing strings with whitespaces, backslashes or unbalanced braces. - Issue #9720: zipfile now writes correct local headers for files larger than 4 GiB. - Issue #16955: Fix the poll() method for multiprocessing's socket connections on Windows. - SSLContext.load_dh_params() now properly closes the input file. - Issue #15031: Refactor some .pyc management code to cut down on code duplication. Thanks to Ronan Lamy for the report and taking an initial stab at the problem. - Issue #16398: Optimize deque.rotate() so that it only moves pointers and doesn't touch the underlying data with increfs and decrefs. - Issue #16900: Issue a ResourceWarning when an ssl socket is left unclosed. - Issue #13899: ``\A``, ``\Z``, and ``\B`` now correctly match the A, Z, and B literals when used inside character classes (e.g. ``'[\A]'``). Patch by Matthew Barnett. - Issue #15545: Fix regression in sqlite3's iterdump method where it was failing if the connection used a row factory (such as sqlite3.Row) that produced unsortable objects. (Regression was introduced by fix for 9750). - fcntl: add F_DUPFD_CLOEXEC constant, available on Linux 2.6.24+. - Issue #15972: Fix error messages when os functions expecting a file name or file descriptor receive the incorrect type. - Issue #8109: The ssl module now has support for server-side SNI, thanks to a :meth:`SSLContext.set_servername_callback` method. Patch by Daniel Black. - Issue #16860: In tempfile, use O_CLOEXEC when available to set the close-on-exec flag atomically. - Issue #16674: random.getrandbits() is now 20-40% faster for small integers. - Issue #16009: JSON error messages now provide more information. - Issue #16828: Fix error incorrectly raised by bz2.compress(b'') and bz2.BZ2Compressor.compress(b''). Initial patch by Martin Packman. - Issue #16833: In http.client.HTTPConnection, do not concatenate the request headers and body when the payload exceeds 16 KB, since it can consume more memory for no benefit. Patch by Benno Leslie. - Issue #16541: tk_setPalette() now works with keyword arguments. - Issue #16820: In configparser, `parser.popitem()` no longer raises ValueError. This makes `parser.clean()` work correctly. - Issue #16820: In configparser, ``parser['section'] = {}`` now preserves section order within the parser. This makes `parser.update()` preserve section order as well. - Issue #16820: In configparser, ``parser['DEFAULT'] = {}`` now correctly clears previous values stored in the default section. Same goes for ``parser.update({'DEFAULT': {}})``. - Issue #9586: Redefine SEM_FAILED on MacOSX to keep compiler happy. - Issue #16787: Increase asyncore and asynchat default output buffers size, to decrease CPU usage and increase throughput. - Issue #10527: make multiprocessing use poll() instead of select() if available. - Issue #16688: Now regexes contained backreferences correctly work with non-ASCII strings. Patch by Matthew Barnett. - Issue #16486: Make aifc files act as context managers. - Issue #16485: Now file descriptors are closed if file header patching failed on closing an aifc file. - Issue #16640: Run less code under a lock in sched module. - Issue #16165: sched.scheduler.run() no longer blocks a scheduler for other threads. - Issue #16641: Default values of sched.scheduler.enter() are no longer modifiable. - Issue #16618: Make glob.glob match consistently across strings and bytes regarding leading dots. Patch by Serhiy Storchaka. - Issue #16788: Add samestat to Lib/ntpath.py - Issue #16713: Parsing of 'tel' urls using urlparse separates params from path. - Issue #16443: Add docstrings to regular expression match objects. Patch by Anton Kasyanov. - Issue #15701: Fix HTTPError info method call to return the headers information. - Issue #16752: Add a missing import to modulefinder. Patch by Berker Peksag. - Issue #16646: ftplib.FTP.makeport() might lose socket error details. (patch by Serhiy Storchaka) - Issue #16626: Fix infinite recursion in glob.glob() on Windows when the pattern contains a wildcard in the drive or UNC path. Patch by Serhiy Storchaka. - Issue #15783: Except for the number methods, the C version of decimal now supports all None default values present in decimal.py. These values were largely undocumented. - Issue #11175: argparse.FileType now accepts encoding and errors arguments. Patch by Lucas Maystre. - Issue #16488: epoll() objects now support the `with` statement. Patch by Serhiy Storchaka. - Issue #16298: In HTTPResponse.read(), close the socket when there is no Content-Length and the incoming stream is finished. Patch by Eran Rundstein. - Issue #16049: Add abc.ABC class to enable the use of inheritance to create ABCs, rather than the more cumbersome metaclass=ABCMeta. Patch by Bruno Dupuis. - Expose the TCP_FASTOPEN and MSG_FASTOPEN flags in socket when they're available. - Issue #15701: Add a .headers attribute to urllib.error.HTTPError. Patch contributed by Berker Peksag. - Issue #15872: Fix 3.3 regression introduced by the new fd-based shutil.rmtree that caused it to not ignore certain errors when ignore_errors was set. Patch by Alessandro Moura and Serhiy Storchaka. - Issue #16248: Disable code execution from the user's home directory by tkinter when the -E flag is passed to Python. Patch by Zachary Ware. - Issue #13390: New function :func:`sys.getallocatedblocks()` returns the number of memory blocks currently allocated. - Issue #16628: Fix a memory leak in ctypes.resize(). - Issue #13614: Fix setup.py register failure with invalid rst in description. Patch by Julien Courteau and Pierre Paul Lefebvre. - Issue #13512: Create ~/.pypirc securely (CVE-2011-4944). Initial patch by Philip Jenvey, tested by Mageia and Debian. - Issue #7719: Make distutils ignore ``.nfs*`` files instead of choking later on. Initial patch by SilentGhost and Jeff Ramnani. - Issue #13120: Allow to call pdb.set_trace() from thread. Patch by Ilya Sandler. - Issue #16585: Make CJK encoders support error handlers that return bytes per PEP 383. - Issue #10182: The re module doesn't truncate indices to 32 bits anymore. Patch by Serhiy Storchaka. - Issue #16333: use (",", ": ") as default separator in json when indent is specified, to avoid trailing whitespace. Patch by Serhiy Storchaka. - Issue #16573: In 2to3, treat enumerate() like a consuming call, so superfluous list() calls aren't added to filter(), map(), and zip() which are directly passed enumerate(). - Issue #16464: Reset the Content-Length header when a urllib Request is reused with new data. - Issue #12848: The pure Python pickle implementation now treats object lengths as unsigned 32-bit integers, like the C implementation does. Patch by Serhiy Storchaka. - Issue #16423: urllib.request now has support for ``data:`` URLs. Patch by Mathias Panzenböck. - Issue #4473: Add a POP3.stls() to switch a clear-text POP3 session into an encrypted POP3 session, on supported servers. Patch by Lorenzo Catucci. - Issue #4473: Add a POP3.capa() method to query the capabilities advertised by the POP3 server. Patch by Lorenzo Catucci. - Issue #4473: Ensure the socket is shutdown cleanly in POP3.close(). Patch by Lorenzo Catucci. - Issue #16522: added FAIL_FAST flag to doctest. - Issue #15627: Add the importlib.abc.InspectLoader.source_to_code() method. - Issue #16408: Fix file descriptors not being closed in error conditions in the zipfile module. Patch by Serhiy Storchaka. - Issue #14631: Add a new :class:`weakref.WeakMethod` to simulate weak references to bound methods. - Issue #16469: Fix exceptions from float -> Fraction and Decimal -> Fraction conversions for special values to be consistent with those for float -> int and Decimal -> int. Patch by Alexey Kachayev. - Issue #16481: multiprocessing no longer leaks process handles on Windows. - Issue #12428: Add a pure Python implementation of functools.partial(). Patch by Brian Thorne. - Issue #16140: The subprocess module no longer double closes its child subprocess.PIPE parent file descriptors on child error prior to exec(). - Remove a bare print to stdout from the subprocess module that could have happened if the child process wrote garbage to its pre-exec error pipe. - The subprocess module now raises its own SubprocessError instead of a RuntimeError in various error situations which should not normally happen. - Issue #16327: The subprocess module no longer leaks file descriptors used for stdin/stdout/stderr pipes to the child when fork() fails. - Issue #14396: Handle the odd rare case of waitpid returning 0 when not expected in subprocess.Popen.wait(). - Issue #16411: Fix a bug where zlib.decompressobj().flush() might try to access previously-freed memory. Patch by Serhiy Storchaka. - Issue #16357: fix calling accept() on a SSLSocket created through SSLContext.wrap_socket(). Original patch by Jeff McNeil. - Issue #16409: The reporthook callback made by the legacy urllib.request.urlretrieve API now properly supplies a constant non-zero block_size as it did in Python 3.2 and 2.7. This matches the behavior of urllib.request.URLopener.retrieve. - Issue #16431: Use the type information when constructing a Decimal subtype from a Decimal argument. - Issue #15641: Clean up deprecated classes from importlib. Patch by Taras Lyapun. - Issue #16350: zlib.decompressobj().decompress() now accumulates data from successive calls after EOF in unused_data, instead of only saving the argument to the last call. decompressobj().flush() now correctly sets unused_data and unconsumed_tail. A bug in the handling of MemoryError when setting the unconsumed_tail attribute has also been fixed. Patch by Serhiy Storchaka. - Issue #12759: sre_parse now raises a proper error when the name of the group is missing. Initial patch by Serhiy Storchaka. - Issue #16152: fix tokenize to ignore whitespace at the end of the code when no newline is found. Patch by Ned Batchelder. - Issue #16284: Prevent keeping unnecessary references to worker functions in concurrent.futures ThreadPoolExecutor. - Issue #16230: Fix a crash in select.select() when one the lists changes size while iterated on. Patch by Serhiy Storchaka. - Issue #16228: Fix a crash in the json module where a list changes size while it is being encoded. Patch by Serhiy Storchaka. - Issue #16351: New function gc.get_stats() returns per-generation collection statistics. - Issue #14897: Enhance error messages of struct.pack and struct.pack_into. Patch by Matti Mäki. - Issue #16316: mimetypes now recognizes the .xz and .txz (.tar.xz) extensions. Patch by Serhiy Storchaka. - Issue #12890: cgitb no longer prints spurious <p> tags in text mode when the logdir option is specified. - Issue #16307: Fix multiprocessing.Pool.map_async not calling its callbacks. Patch by Janne Karila. - Issue #16305: Fix a segmentation fault occurring when interrupting math.factorial. - Issue #16116: Fix include and library paths to be correct when building C extensions in venvs. - Issue #16245: Fix the value of a few entities in html.entities.html5. - Issue #16301: Fix the localhost verification in urllib/request.py for file:// urls. - Issue #16250: Fix the invocations of URLError which had misplaced filename attribute for exception. - Issue #10836: Fix exception raised when file not found in urlretrieve Initial patch by Ezio Melotti. - Issue #14398: Fix size truncation and overflow bugs in the bz2 module. - Issue #12692: Fix resource leak in urllib.request when talking to an HTTP server that does not include a ``Connection: close`` header in its responses. - Issue #12034: Fix bogus caching of result in check_GetFinalPathNameByHandle. Patch by Atsuo Ishimoto. - Improve performance of `lzma.LZMAFile` (see also issue #16034). - Issue #16220: wsgiref now always calls close() on an iterable response. Patch by Brent Tubbs. - Issue #16270: urllib may hang when used for retrieving files via FTP by using a context manager. Patch by Giampaolo Rodola'. - Issue #16461: Wave library should be able to deal with 4GB wav files, and sample rate of 44100 Hz. - Issue #16176: Properly identify Windows 8 via platform.platform() - Issue #16088: BaseHTTPRequestHandler's send_error method includes a Content-Length header in it's response now. Patch by Antoine Pitrou. - Issue #16114: The subprocess module no longer provides a misleading error message stating that args[0] did not exist when either the cwd or executable keyword arguments specified a path that did not exist. - Issue #16169: Fix ctypes.WinError()'s confusion between errno and winerror. - Issue #16110: logging.fileConfig now accepts a pre-initialised ConfigParser instance. - Issue #1492704: shutil.copyfile() raises a distinct SameFileError now if source and destination are the same file. Patch by Atsuo Ishimoto. - Issue #13896: Make shelf instances work with 'with' as context managers. Original patch by Filip Gruszczyński. - Issue #15417: Add support for csh and fish in venv activation scripts. - Issue #14377: ElementTree.write and some of the module-level functions have a new parameter - *short_empty_elements*. It controls how elements with no contents are emitted. - Issue #16089: Allow ElementTree.TreeBuilder to work again with a non-Element element_factory (fixes a regression in SimpleTAL). - Issue #9650: List commonly used format codes in time.strftime and time.strptime docsttings. Original patch by Mike Hoy. - Issue #15452: logging configuration socket listener now has a verify option that allows an application to apply a verification function to the received configuration data before it is acted upon. - Issue #16034: Fix performance regressions in the new `bz2.BZ2File` implementation. Initial patch by Serhiy Storchaka. - `pty.spawn()` now returns the child process status returned by `os.waitpid()`. - Issue #15756: `subprocess.poll()` now properly handles `errno.ECHILD` to return a returncode of 0 when the child has already exited or cannot be waited on. - Issue #15323: Improve failure message of `Mock.assert_called_once_with()`. - Issue #16064: ``unittest -m`` claims executable is "python", not "python3". - Issue #12376: Pass on parameters in `TextTestResult.__init__()` super call. - Issue #15222: Insert blank line after each message in mbox mailboxes. - Issue #16013: Fix `csv.Reader` parsing issue with ending quote characters. Patch by Serhiy Storchaka. - Issue #15421: Fix an OverflowError in `Calendar.itermonthdates()` after `datetime.MAXYEAR`. Patch by Cédric Krier. - Issue #16112: platform.architecture does not correctly escape argument to /usr/bin/file. Patch by David Benjamin. - Issue #15970: `xml.etree.ElementTree` now serializes correctly the empty HTML elements 'meta' and 'param'. - Issue #15842: The `SocketIO.{readable,writable,seekable}` methods now raise ValueError when the file-like object is closed. Patch by Alessandro Moura. - Issue #15876: Fix a refleak in the `curses` module: window.encoding. - Issue #15881: Fix `atexit` hook in `multiprocessing`. Original patch by Chris McDonough. - Issue #15841: The readable(), writable() and seekable() methods of `io.BytesIO` and `io.StringIO` objects now raise ValueError when the object has been closed. Patch by Alessandro Moura. - Issue #15447: Use `subprocess.DEVNULL` in webbrowser, instead of opening `os.devnull` explicitly and leaving it open. - Issue #15509: `webbrowser.UnixBrowser` no longer passes empty arguments to Popen when ``%action`` substitutions produce empty strings. - Issue #12776, issue #11839: Call `argparse` type function (specified by add_argument) only once. Before, the type function was called twice in the case where the default was specified and the argument was given as well. This was especially problematic for the FileType type, as a default file would always be opened, even if a file argument was specified on the command line. - Issue #15906: Fix a regression in argparse caused by the preceding change, when ``action='append'``, ``type='str'`` and ``default=[]``. - Issue #16113: Added sha3 module based on the Keccak reference implementation 3.2. The `hashlib` module has four additional hash algorithms: `sha3_224`, `sha3_256`, `sha3_384` and `sha3_512`. As part of the patch some common code was moved from _hashopenssl.c to hashlib.h. - ctypes.call_commethod was removed, since its only usage was in the defunct samples directory. - Issue #16692: Added TLSv1.1 and TLSv1.2 support for the ssl modules. - Issue #16832: add abc.get_cache_token() to expose cache validity checking support in ABCMeta. IDLE ---- - Issue #18429: Format / Format Paragraph, now works when comment blocks are selected. As with text blocks, this works best when the selection only includes complete lines. - Issue #18226: Add docstrings and unittests for FormatParagraph.py. Original patches by Todd Rovito and Phil Webster. - Issue #18279: Format - Strip trailing whitespace no longer marks a file as changed when it has not been changed. This fix followed the addition of a test file originally written by Phil Webster (the issue's main goal). - Issue #7136: In the Idle File menu, "New Window" is renamed "New File". Patch by Tal Einat, Roget Serwy, and Todd Rovito. - Remove dead imports of imp. - Issue #18196: Avoid displaying spurious SystemExit tracebacks. - Issue #5492: Avoid traceback when exiting IDLE caused by a race condition. - Issue #17511: Keep IDLE find dialog open after clicking "Find Next". Original patch by Sarah K. - Issue #18055: Move IDLE off of imp and on to importlib. - Issue #15392: Create a unittest framework for IDLE. Initial patch by Rajagopalasarma Jayakrishnan. See Lib/idlelib/idle_test/README.txt for how to run Idle tests. - Issue #14146: Highlight source line while debugging on Windows. - Issue #17838: Allow sys.stdin to be reassigned. - Issue #13495: Avoid loading the color delegator twice in IDLE. - Issue #17798: Allow IDLE to edit new files when specified on command line. - Issue #14735: Update IDLE docs to omit "Control-z on Windows". - Issue #17532: Always include Options menu for IDLE on OS X. Patch by Guilherme Simões. - Issue #17585: Fixed IDLE regression. Now closes when using exit() or quit(). - Issue #17657: Show full Tk version in IDLE's about dialog. Patch by Todd Rovito. - Issue #17613: Prevent traceback when removing syntax colorizer in IDLE. - Issue #1207589: Backwards-compatibility patch for right-click menu in IDLE. - Issue #16887: IDLE now accepts Cancel in tabify/untabify dialog box. - Issue #17625: In IDLE, close the replace dialog after it is used. - Issue #14254: IDLE now handles readline correctly across shell restarts. - Issue #17614: IDLE no longer raises exception when quickly closing a file. - Issue #6698: IDLE now opens just an editor window when configured to do so. - Issue #8900: Using keyboard shortcuts in IDLE to open a file no longer raises an exception. - Issue #6649: Fixed missing exit status in IDLE. Patch by Guilherme Polo. - Issue #17114: IDLE now uses non-strict config parser. - Issue #9290: In IDLE the sys.std* streams now implement io.TextIOBase interface and support all mandatory methods and properties. - Issue #5066: Update IDLE docs. Patch by Todd Rovito. - Issue #16829: IDLE printing no longer fails if there are spaces or other special characters in the file path. - Issue #16491: IDLE now prints chained exception tracebacks. - Issue #16819: IDLE method completion now correctly works for bytes literals. - Issue #16504: IDLE now catches SyntaxErrors raised by tokenizer. Patch by Roger Serwy. - Issue #16511: Use default IDLE width and height if config param is not valid. Patch Serhiy Storchaka. - Issue #1207589: Add Cut/Copy/Paste items to IDLE right click Context Menu. Patch by Todd Rovito. - Issue #16123: IDLE - deprecate running without a subprocess. Patch by Roger Serwy. Tests ----- - Issue #1666318: Add a test that shutil.copytree() retains directory permissions. Patch by Catherine Devlin. - Issue #18273: move the tests in Lib/test/json_tests to Lib/test/test_json and make them discoverable by unittest. Patch by Zachary Ware. - Fix a fcntl test case on KFreeBSD, Debian #708653 (Petr Salinger). - Issue #18396: Fix spurious test failure in test_signal on Windows when faulthandler is enabled (Patch by Jeremy Kloth) - Issue #17046: Fix broken test_executable_without_cwd in test_subprocess. - Issue #15415: Add new temp_dir() and change_cwd() context managers to test.support, and refactor temp_cwd() to use them. Patch by Chris Jerdonek. - Issue #15494: test.support is now a package rather than a module (Initial patch by Indra Talip) - Issue #17944: test_zipfile now discoverable and uses subclassing to generate tests for different compression types. Fixed a bug with skipping some tests due to use of exhausted iterators. - Issue #18266: test_largefile now works with unittest test discovery and supports running only selected tests. Patch by Zachary Ware. - Issue #17767: test_locale now works with unittest test discovery. Original patch by Zachary Ware. - Issue #18375: Assume --randomize when --randseed is used for running the testsuite. - Issue #11185: Fix test_wait4 under AIX. Patch by Sébastien Sablé. - Issue #18207: Fix test_ssl for some versions of OpenSSL that ignore seconds in ASN1_TIME fields. - Issue #18094: test_uuid no longer reports skipped tests as passed. - Issue #17992: Add timeouts to asyncore and asynchat tests so that they won't accidentally hang. - Issue #17833: Fix test_gdb failures seen on machines where debug symbols for glibc are available (seen on PPC64 Linux). - Issue #7855: Add tests for ctypes/winreg for issues found in IronPython. Initial patch by Dino Viehland. - Issue #11078: test___all__ now checks for duplicates in __all__. Initial patch by R. David Murray. - Issue #17712: Fix test_gdb failures on Ubuntu 13.04. - Issue #17835: Fix test_io when the default OS pipe buffer size is larger than one million bytes. - Issue #17065: Use process-unique key for winreg tests to avoid failures if test is run multiple times in parallel (eg: on a buildbot host). - Issue #12820: add tests for the xml.dom.minicompat module. Patch by John Chandler and Phil Connell. - Issue #17691: test_univnewlines now works with unittest test discovery. Patch by Zachary Ware. - Issue #17790: test_set now works with unittest test discovery. Patch by Zachary Ware. - Issue #17789: test_random now works with unittest test discovery. Patch by Zachary Ware. - Issue #17779: test_osx_env now works with unittest test discovery. Patch by Zachary Ware. - Issue #17766: test_iterlen now works with unittest test discovery. Patch by Zachary Ware. - Issue #17690: test_time now works with unittest test discovery. Patch by Zachary Ware. - Issue #17692: test_sqlite now works with unittest test discovery. Patch by Zachary Ware. - Issue #11995: test_pydoc doesn't import all sys.path modules anymore. - Issue #17448: test_sax now skips if there are no xml parsers available instead of raising an ImportError. - Issue #11420: make test suite pass with -B/DONTWRITEBYTECODE set. Initial patch by Thomas Wouters. - Issue #10652: make tcl/tk tests run after __all__ test, patch by Zachary Ware. - Issue #11963: remove human verification from test_parser and test_subprocess. - Issue #11732: add a new suppress_crash_popup() context manager to test.support that disables crash popups on Windows and use it in test_faulthandler and test_capi. - Issue #13898: test_ssl no longer prints a spurious stack trace on Ubuntu. - Issue #17283: Share code between `__main__.py` and `regrtest.py` in `Lib/test`. - Issue #17249: convert a test in test_capi to use unittest and reap threads. - Issue #17107: Test client-side SNI support in urllib.request thanks to the new server-side SNI support in the ssl module. Initial patch by Daniel Black. - Issue #17041: Fix testing when Python is configured with the --without-doc-strings. - Issue #16923: Fix ResourceWarnings in test_ssl. - Issue #15539: Added regression tests for Tools/scripts/pindent.py. - Issue #17479: test_io now works with unittest test discovery. Patch by Zachary Ware. - Issue #17066: test_robotparser now works with unittest test discovery. Patch by Zachary Ware. - Issue #17334: test_index now works with unittest test discovery. Patch by Zachary Ware. - Issue #17333: test_imaplib now works with unittest test discovery. Patch by Zachary Ware. - Issue #17082: test_dbm* now work with unittest test discovery. Patch by Zachary Ware. - Issue #17079: test_ctypes now works with unittest test discovery. Patch by Zachary Ware. - Issue #17304: test_hash now works with unittest test discovery. Patch by Zachary Ware. - Issue #17303: test_future* now work with unittest test discovery. Patch by Zachary Ware. - Issue #17163: test_file now works with unittest test discovery. Patch by Zachary Ware. - Issue #16925: test_configparser now works with unittest test discovery. Patch by Zachary Ware. - Issue #16918: test_codecs now works with unittest test discovery. Patch by Zachary Ware. - Issue #16919: test_crypt now works with unittest test discovery. Patch by Zachary Ware. - Issue #16910: test_bytes, test_unicode, and test_userstring now work with unittest test discovery. Patch by Zachary Ware. - Issue #16905: test_warnings now works with unittest test discovery. Initial patch by Berker Peksag. - Issue #16898: test_bufio now works with unittest test discovery. Patch by Zachary Ware. - Issue #16888: test_array now works with unittest test discovery. Patch by Zachary Ware. - Issue #16896: test_asyncore now works with unittest test discovery. Patch by Zachary Ware. - Issue #16897: test_bisect now works with unittest test discovery. Initial patch by Zachary Ware. - Issue #16852: test_genericpath, test_posixpath, test_ntpath, and test_macpath now work with unittest test discovery. Patch by Zachary Ware. - Issue #16748: test_heapq now works with unittest test discovery. - Issue #10646: Tests rearranged for os.samefile/samestat to check for not just symlinks but also hard links. - Issue #15302: Switch regrtest from using getopt to using argparse. - Issue #15324: Fix regrtest parsing of --fromfile, --match, and --randomize options. - Issue #16702: test_urllib2_localnet tests now correctly ignores proxies for localhost tests. - Issue #16664: Add regression tests for glob's behaviour concerning entries starting with a ".". Patch by Sebastian Kreft. - Issue #13390: The ``-R`` option to regrtest now also checks for memory allocation leaks, using :func:`sys.getallocatedblocks()`. - Issue #16559: Add more tests for the json module, including some from the official test suite at json.org. Patch by Serhiy Storchaka. - Issue #16661: Fix the `os.getgrouplist()` test by not assuming that it gives the same output as :command:`id -G`. - Issue #16115: Add some tests for the executable argument to subprocess.Popen(). Initial patch by Kushal Das. - Issue #16126: PyErr_Format format mismatch in _testcapimodule.c. Patch by Serhiy Storchaka. - Issue #15304: Fix warning message when `os.chdir()` fails inside `test.support.temp_cwd()`. Patch by Chris Jerdonek. - Issue #15802: Fix test logic in `TestMaildir.test_create_tmp()`. Patch by Serhiy Storchaka. - Issue #15557: Added a test suite for the webbrowser module, thanks to Anton Barkovsky. - Issue #16698: Skip posix test_getgroups when built with OS X deployment target prior to 10.6. Build ----- - Issue #16067: Add description into MSI file to replace installer's temporary name. - Issue #18257: Fix readlink usage in python-config. Install the python version again on Darwin. - Issue #18481: Add C coverage reporting with gcov and lcov. A new make target "coverage-report" creates an instrumented Python build, runs unit tests and creates a HTML. The report can be updated with "make coverage-lcov". - Issue #17845: Clarified the message printed when some module are not built. - Issue #18256: Compilation fix for recent AIX releases. Patch by David Edelsohn. - Issue #17547: In configure, explicitly pass -Wformat for the benefit for GCC 4.8. - Issue #15172: Document NASM 2.10+ as requirement for building OpenSSL 1.0.1 on Windows. - Issue #17591: Use lowercase filenames when including Windows header files. Patch by Roumen Petrov. - Issue #17550: Fix the --enable-profiling configure switch. - Issue #17425: Build with openssl 1.0.1d on Windows. - Issue #16754: Fix the incorrect shared library extension on linux. Introduce two makefile macros SHLIB_SUFFIX and EXT_SUFFIX. SO now has the value of SHLIB_SUFFIX again (as in 2.x and 3.1). The SO macro is removed in 3.4. - Issue #5033: Fix building of the sqlite3 extension module when the SQLite library version has "beta" in it. Patch by Andreas Pelme. - Issue #17228: Fix building without pymalloc. - Issue #3718: Use AC_ARG_VAR to set MACHDEP in configure.ac. - Issue #16235: Implement python-config as a shell script. - Issue #16769: Remove outdated Visual Studio projects. - Issue #17031: Fix running regen in cross builds. - Issue #3754: fix typo in pthread AC_CACHE_VAL. - Issue #15484: Fix _PYTHON_PROJECT_BASE for srcdir != builddir builds; use _PYTHON_PROJECT_BASE in distutils/sysconfig.py. - Drop support for Windows 2000 (changeset e52df05b496a). - Issue #17029: Let h2py search the multiarch system include directory. - Issue #16953: Fix socket module compilation on platforms with HAVE_BROKEN_POLL. Patch by Jeffrey Armstrong. - Issue #16320: Remove redundant Makefile dependencies for strings and bytes. - Cross compiling needs host and build settings. configure no longer creates a broken PYTHON_FOR_BUILD variable when --build is missing. - Fix cross compiling issue in setup.py, ensure that lib_dirs and inc_dirs are defined in cross compiling mode, too. - Issue #16836: Enable IPv6 support even if IPv6 is disabled on the build host. - Issue #16593: Have BSD 'make -s' do the right thing, thanks to Daniel Shahaf - Issue #16262: fix out-of-src-tree builds, if mercurial is not installed. - Issue #15298: ensure _sysconfigdata is generated in build directory, not source directory. - Issue #15833: Fix a regression in 3.3 that resulted in exceptions being raised if importlib failed to write byte-compiled files. This affected attempts to build Python out-of-tree from a read-only source directory. - Issue #15923: Fix a mistake in ``asdl_c.py`` that resulted in a TypeError after 2801bf875a24 (see #15801). - Issue #16135: Remove OS/2 support. - Issue #15819: Make sure we can build Python out-of-tree from a read-only source directory. (Somewhat related to issue #9860.) - Issue #15587: Enable Tk high-resolution text rendering on Macs with Retina displays. Applies to Tkinter apps, such as IDLE, on OS X framework builds linked with Cocoa Tk 8.5. - Issue #17161: make install now also installs a python3 man page. C-API ----- - Issue #18351: Fix various issues in a function in importlib provided to help PyImport_ExecCodeModuleWithPathnames() (and thus by extension PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx()). - Issue #9369: The types of `char*` arguments of PyObject_CallFunction() and PyObject_CallMethod() now changed to `const char*`. Based on patches by Jörg Müller and Lars Buitinck. - Issue #17206: Py_CLEAR(), Py_DECREF(), Py_XINCREF() and Py_XDECREF() now expand their arguments once instead of multiple times. Patch written by Illia Polosukhin. - Issue #17522: Add the PyGILState_Check() API. - Issue #17327: Add PyDict_SetDefault. - Issue #16881: Fix Py_ARRAY_LENGTH macro for GCC < 3.1. - Issue #16505: Remove unused Py_TPFLAGS_INT_SUBCLASS. - Issue #16086: PyTypeObject.tp_flags and PyType_Spec.flags are now unsigned (unsigned long and unsigned int) to avoid an undefined behaviour with Py_TPFLAGS_TYPE_SUBCLASS ((1 << 31). PyType_GetFlags() result type is now unsigned too (unsigned long, instead of long). - Issue #16166: Add PY_LITTLE_ENDIAN and PY_BIG_ENDIAN macros and unified endianness detection and handling. Documentation ------------- - Issue #17701: Improving strftime documentation. - Issue #18440: Clarify that `hash()` can truncate the value returned from an object's custom `__hash__()` method. - Issue #17844: Add links to encoders and decoders for bytes-to-bytes codecs. - Issue #14097: improve the "introduction" page of the tutorial. - Issue #17977: The documentation for the cadefault argument's default value in urllib.request.urlopen() is fixed to match the code. - Issue #6696: add documentation for the Profile objects, and improve profile/cProfile docs. Patch by Tom Pinckney. - Issue #15940: Specify effect of locale on time functions. - Issue #17538: Document XML vulnerabilties - Issue #16642: sched.scheduler timefunc initial default is time.monotonic. Patch by Ramchandra Apte - Issue #17047: remove doubled words in docs and docstrings reported by Serhiy Storchaka and Matthew Barnett. - Issue #15465: Document the versioning macros in the C API docs rather than the standard library docs. Patch by Kushal Das. - Issue #16406: Combine the pages for uploading and registering to PyPI. - Issue #16403: Document how distutils uses the maintainer field in PKG-INFO. Patch by Jyrki Pulliainen. - Issue #16695: Document how glob handles filenames starting with a dot. Initial patch by Jyrki Pulliainen. - Issue #8890: Stop advertising an insecure practice by replacing uses of the /tmp directory with better alternatives in the documentation. Patch by Geoff Wilson. - Issue #17203: add long option names to unittest discovery docs. - Issue #13094: add "Why do lambdas defined in a loop with different values all return the same result?" programming FAQ. - Issue #14901: Update portions of the Windows FAQ. Patch by Ashish Nitin Patil. - Issue #16267: Better document the 3.3+ approach to combining @abstractmethod with @staticmethod, @classmethod and @property - Issue #15209: Clarify exception chaining description in exceptions module documentation - Issue #15990: Improve argument/parameter documentation. - Issue #16209: Move the documentation for the str built-in function to a new str class entry in the "Text Sequence Type" section. - Issue #13538: Improve str() and object.__str__() documentation. - Issue #16489: Make it clearer that importlib.find_loader() needs parent packages to be explicitly imported. - Issue #16400: Update the description of which versions of a given package PyPI displays. - Issue #15677: Document that zlib and gzip accept a compression level of 0 to mean 'no compression'. Patch by Brian Brazil. - Issue #16197: Update winreg docstrings and documentation to match code. Patch by Zachary Ware. - Issue #8040: added a version switcher to the documentation. Patch by Yury Selivanov. - Issue #16241: Document -X faulthandler command line option. Patch by Marek Šuppa. - Additional comments and some style changes in the concurrent.futures URL retrieval example - Issue #16115: Improve subprocess.Popen() documentation around args, shell, and executable arguments. - Issue #13498: Clarify docs of os.makedirs()'s exist_ok argument. Done with great native-speaker help from R. David Murray. - Issue #15533: Clarify docs and add tests for `subprocess.Popen()`'s cwd argument. - Issue #15979: Improve timeit documentation. - Issue #16036: Improve documentation of built-in `int()`'s signature and arguments. - Issue #15935: Clarification of `argparse` docs, re: add_argument() type and default arguments. Patch contributed by Chris Jerdonek. - Issue #11964: Document a change in v3.2 to the behavior of the indent parameter of json encoding operations. - Issue #15116: Remove references to appscript as it is no longer being supported. Tools/Demos ----------- - Issue #18817: Fix a resource warning in Lib/aifc.py demo. Patch by Vajrasky Kok. - Issue #18439: Make patchcheck work on Windows for ACKS, NEWS. - Issue #18448: Fix a typo in Tools/demo/eiffel.py. - Issue #18457: Fixed saving of formulas and complex numbers in Tools/demo/ss1.py. - Issue #18449: Make Tools/demo/ss1.py work again on Python 3. Patch by Févry Thibault. - Issue #12990: The "Python Launcher" on OSX could not launch python scripts that have paths that include wide characters. - Issue #15239: Make mkstringprep.py work again on Python 3. - Issue #17028: Allowed Python arguments to be supplied to the Windows launcher. - Issue #17156: pygettext.py now detects the encoding of source files and correctly writes and escapes non-ascii characters. - Issue #15539: Fix a number of bugs in Tools/scripts/pindent.py. Now pindent.py works with a "with" statement. pindent.py no longer produces improper indentation. pindent.py now works with continued lines broken after "class" or "def" keywords and with continuations at the start of line. - Issue #11797: Add a 2to3 fixer that maps reload() to imp.reload(). - Issue #10966: Remove the concept of unexpected skipped tests. - Issue #9893: Removed the Misc/Vim directory. - Removed the Misc/TextMate directory. - Issue #16245: Add the Tools/scripts/parse_html5_entities.py script to parse the list of HTML5 entities and update the html.entities.html5 dictionary. - Issue #15378: Fix Tools/unicode/comparecodecs.py. Patch by Serhiy Storchaka. - Issue #16549: Make json.tool work again on Python 3 and add tests. Initial patch by Berker Peksag and Serhiy Storchaka. - Issue #13301: use ast.literal_eval() instead of eval() in Tools/i18n/msgfmt.py. Patch by Serhiy Storchaka. Windows ------- - Issue #18569: The installer now adds .py to the PATHEXT variable when extensions are registered. Patch by Paul Moore. What's New in Python 3.3.0? =========================== *Release date: 29-Sep-2012* Core and Builtins ----------------- - Issue #16046: Fix loading sourceless legacy .pyo files. - Issue #16060: Fix refcounting bug when `__trunc__()` returns an object whose `__int__()` gives a non-integer. Patch by Serhiy Storchaka. Extension Modules ----------------- - Issue #16012: Fix a regression in pyexpat. The parser's `UseForeignDTD()` method doesn't require an argument again. What's New in Python 3.3.0 Release Candidate 3? =============================================== *Release date: 23-Sep-2012* Core and Builtins ----------------- - Issue #15900: Fix reference leak in `PyUnicode_TranslateCharmap()`. - Issue #15926: Fix crash after multiple reinitializations of the interpreter. - Issue #15895: Fix FILE pointer leak in one error branch of `PyRun_SimpleFileExFlags()` when filename points to a pyc/pyo file, closeit is false an and set_main_loader() fails. - Fixes for a few crash and memory leak regressions found by Coverity. Library ------- - Issue #15882: Change `_decimal` to accept any coefficient tuple when constructing infinities. This is done for backwards compatibility with decimal.py: Infinity coefficients are undefined in _decimal (in accordance with the specification). - Issue #15925: Fix a regression in `email.util` where the `parsedate()` and `parsedate_tz()` functions did not return None anymore when the argument could not be parsed. Extension Modules ----------------- - Issue #15973: Fix a segmentation fault when comparing datetime timezone objects. - Issue #15977: Fix memory leak in Modules/_ssl.c when the function _set_npn_protocols() is called multiple times, thanks to Daniel Sommermann. - Issue #15969: `faulthandler` module: rename dump_tracebacks_later() to dump_traceback_later() and cancel_dump_tracebacks_later() to cancel_dump_traceback_later(). - _decimal module: use only C 89 style comments. What's New in Python 3.3.0 Release Candidate 2? =============================================== *Release date: 09-Sep-2012* Core and Builtins ----------------- - Issue #13992: The trashcan mechanism is now thread-safe. This eliminates sporadic crashes in multi-thread programs when several long deallocator chains ran concurrently and involved subclasses of built-in container types. - Issue #15784: Modify `OSError`.__str__() to better distinguish between errno error numbers and Windows error numbers. - Issue #15781: Fix two small race conditions in import's module locking. Library ------- - Issue #17158: Add 'symbols' to help() welcome message; clarify 'modules spam' messages. - Issue #15847: Fix a regression in argparse, which did not accept tuples as argument lists anymore. - Issue #15828: Restore support for C extensions in `imp.load_module()`. - Issue #15340: Fix importing the random module when ``/dev/urandom`` cannot be opened. This was a regression caused by the hash randomization patch. - Issue #10650: Deprecate the watchexp parameter of the `Decimal.quantize()` method. - Issue #15785: Modify `window.get_wch()` API of the curses module: return a character for most keys, and an integer for special keys, instead of always returning an integer. So it is now possible to distinguish special keys like keypad keys. - Issue #14223: Fix `window.addch()` of the curses module for special characters like curses.ACS_HLINE: the Python function addch(int) and addch(bytes) is now calling the C function waddch()/mvwaddch() (as it was done in Python 3.2), instead of wadd_wch()/mvwadd_wch(). The Python function addch(str) is still calling the C function wadd_wch()/mvwadd_wch() if the Python curses is linked to libncursesw. Build ----- - Issue #15822: Really ensure 2to3 grammar pickles are properly installed (replaces fixes for Issue #15645). Documentation ------------- - Issue #15814: The memoryview enhancements in 3.3.0 accidentally permitted the hashing of multi-dimensional memorviews and memoryviews with multi-byte item formats. The intended restrictions have now been documented - they will be correctly enforced in 3.3.1. What's New in Python 3.3.0 Release Candidate 1? =============================================== *Release date: 25-Aug-2012* Core and Builtins ----------------- - Issue #15573: memoryview comparisons are now performed by value with full support for any valid struct module format definition. - Issue #15316: When an item in the fromlist for `__import__()` doesn't exist, don't raise an error, but if an exception is raised as part of an import do let that propagate. - Issue #15778: Ensure that ``str(ImportError(msg))`` returns a str even when msg isn't a str. - Issue #2051: Source file permission bits are once again correctly copied to the cached bytecode file. (The migration to importlib reintroduced this problem because these was no regression test. A test has been added as part of this patch) - Issue #15761: Fix crash when ``PYTHONEXECUTABLE`` is set on Mac OS X. - Issue #15726: Fix incorrect bounds checking in PyState_FindModule. Patch by Robin Schreiber. - Issue #15604: Update uses of `PyObject_IsTrue()` to check for and handle errors correctly. Patch by Serhiy Storchaka. - Issue #14846: `importlib.FileFinder` now handles the case where the directory being searched is removed after a previous import attempt. Library ------- - Issue #13370: Ensure that ctypes works on Mac OS X when Python is compiled using the clang compiler. - Issue #13072: The array module's 'u' format code is now deprecated and will be removed in Python 4.0. - Issue #15544: Fix Decimal.__float__ to work with payload-carrying NaNs. - Issue #15776: Allow pyvenv to work in existing directory with --clean. - Issue #15249: email's BytesGenerator now correctly mangles From lines (when requested) even if the body contains undecodable bytes. - Issue #15777: Fix a refleak in _posixsubprocess. - Issue #665194: Update `email.utils.localtime` to use datetime.astimezone and correctly handle historic changes in UTC offsets. - Issue #15199: Fix JavaScript's default MIME type to application/javascript. Patch by Bohuslav Kabrda. - Issue #12643: `code.InteractiveConsole` now respects `sys.excepthook` when displaying exceptions. Patch by Aaron Iles. - Issue #13579: `string.Formatter` now understands the 'a' conversion specifier. - Issue #15595: Fix ``subprocess.Popen(universal_newlines=True)`` for certain locales (utf-16 and utf-32 family). Patch by Chris Jerdonek. - Issue #15477: In cmath and math modules, add workaround for platforms whose system-supplied log1p function doesn't respect signs of zeros. - Issue #15715: `importlib.__import__()` will silence an ImportError when the use of fromlist leads to a failed import. - Issue #14669: Fix pickling of connections and sockets on Mac OS X by sending/receiving an acknowledgment after file descriptor transfer. TestPicklingConnection has been reenabled for Mac OS X. - Issue #11062: Fix adding a message from file to Babyl mailbox. - Issue #15646: Prevent equivalent of a fork bomb when using `multiprocessing` on Windows without the ``if __name__ == '__main__'`` idiom. IDLE ---- - Issue #15678: Fix IDLE menus when started from OS X command line (3.3.0b2 regression). Documentation ------------- - Touched up the Python 2 to 3 porting guide. - Issue #14674: Add a discussion of the `json` module's standard compliance. Patch by Chris Rebert. - Create a 'Concurrent Execution' section in the docs, and split up the 'Optional Operating System Services' section to use a more user-centric classification scheme (splitting them across the new CE section, IPC and text processing). Operating system limitations can be reflected with the Sphinx ``:platform:`` tag, it doesn't make sense as part of the Table of Contents. - Issue #4966: Bring the sequence docs up to date for the Py3k transition and the many language enhancements since they were original written. - The "path importer" misnomer has been replaced with Eric Snow's more-awkward-but-at-least-not-wrong suggestion of "path based finder" in the import system reference docs. - Issue #15640: Document `importlib.abc.Finder` as deprecated. - Issue #15630: Add an example for "continue" stmt in the tutorial. Patch by Daniel Ellis. Tests ----- - Issue #15747: ZFS always returns EOPNOTSUPP when attempting to set the UF_IMMUTABLE flag (via either chflags or lchflags); refactor affected tests in test_posix.py to account for this. - Issue #15285: Refactor the approach for testing connect timeouts using two external hosts that have been configured specifically for this type of test. - Issue #15743: Remove the deprecated method usage in `urllib` tests. Patch by Jeff Knupp. - Issue #15615: Add some tests for the `json` module's handling of invalid input data. Patch by Kushal Das. Build ----- - Output lib files for PGO build into PGO directory. - Pick up 32-bit launcher from PGO directory on 64-bit PGO build. - Drop ``PC\python_nt.h`` as it's not used. Add input dependency on custom build step. - Issue #15511: Drop explicit dependency on pythonxy.lib from _decimal amd64 configuration. - Add missing PGI/PGO configurations for pywlauncher. - Issue #15645: Ensure 2to3 grammar pickles are properly installed. What's New in Python 3.3.0 Beta 2? ================================== *Release date: 12-Aug-2012* Core and Builtins ----------------- - Issue #15568: Fix the return value of ``yield from`` when StopIteration is raised by a custom iterator. - Issue #13119: `sys.stdout` and `sys.stderr` are now using "\r\n" newline on Windows, as Python 2. - Issue #15534: Fix the fast-search function for non-ASCII Unicode strings. - Issue #15508: Fix the docstring for `__import__()` to have the proper default value of 0 for 'level' and to not mention negative levels since they are not supported. - Issue #15425: Eliminated traceback noise from more situations involving importlib. - Issue #14578: Support modules registered in the Windows registry again. - Issue #15466: Stop using TYPE_INT64 in marshal, to make importlib.h (and other byte code files) equal between 32-bit and 64-bit systems. - Issue #1692335: Move initial exception args assignment to `BaseException.__new__()` to help pickling of naive subclasses. - Issue #12834: Fix `PyBuffer_ToContiguous()` for non-contiguous arrays. - Issue #15456: Fix code `__sizeof__()` after #12399 change. Patch by Serhiy Storchaka. - Issue #15404: Refleak in PyMethodObject repr. - Issue #15394: An issue in `PyModule_Create()` that caused references to be leaked on some error paths has been fixed. Patch by Julia Lawall. - Issue #15368: An issue that caused bytecode generation to be non-deterministic has been fixed. - Issue #15202: Consistently use the name "follow_symlinks" for new parameters in os and shutil functions. - Issue #15314: ``__main__.__loader__`` is now set correctly during interpreter startup. - Issue #15111: When a module imported using 'from import' has an ImportError inside itself, don't mask that fact behind a generic ImportError for the module itself. - Issue #15293: Add GC support to the AST base node type. - Issue #15291: Fix a memory leak where AST nodes where not properly deallocated. - Issue #15110: Fix the tracebacks generated by "import xxx" to not show the importlib stack frames. - Issue #16369: Global PyTypeObjects not initialized with PyType_Ready(...). - Issue #15020: The program name used to search for Python's path is now "python3" under Unix, not "python". - Issue #15897: zipimport.c doesn't check return value of fseek(). Patch by Felipe Cruz. - Issue #15033: Fix the exit status bug when modules invoked using -m switch, return the proper failure return value (1). Patch contributed by Jeff Knupp. - Issue #15229: An `OSError` subclass whose __init__ doesn't call back OSError.__init__ could produce incomplete instances, leading to crashes when calling str() on them. - Issue #15307: Virtual environments now use symlinks with framework builds on Mac OS X, like other POSIX builds. Library ------- - Issue #14590: configparser now correctly strips inline comments when delimiter occurs earlier without preceding space. - Issue #15424: Add a `__sizeof__()` implementation for array objects. Patch by Ludwig Hähne. - Issue #15576: Allow extension modules to act as a package's __init__ module. - Issue #15502: Have `importlib.invalidate_caches()` work on `sys.meta_path` instead of `sys.path_importer_cache`. - Issue #15163: Pydoc shouldn't list __loader__ as module data. - Issue #15471: Do not use mutable objects as defaults for `importlib.__import__()`. - Issue #15559: To avoid a problematic failure mode when passed to the bytes constructor, objects in the ipaddress module no longer implement `__index__()` (they still implement `__int__()` as appropriate). - Issue #15546: Fix handling of pathological input data in the peek() and read1() methods of the BZ2File, GzipFile and LZMAFile classes. - Issue #12655: Instead of requiring a custom type, `os.sched_getaffinity()` and `os.sched_setaffinity()` now use regular sets of integers to represent the CPUs a process is restricted to. - Issue #15538: Fix compilation of the `socket.getnameinfo()` / `socket.getaddrinfo()` emulation code. Patch by Philipp Hagemeister. - Issue #15519: Properly expose WindowsRegistryFinder in importlib (and use the correct term for it). Original patch by Eric Snow. - Issue #15502: Bring the importlib ABCs into line with the current state of the import protocols given PEP 420. Original patch by Eric Snow. - Issue #15499: Launching a webbrowser in Unix used to sleep for a few seconds. Original patch by Anton Barkovsky. - Issue #15463: The faulthandler module truncates strings to 500 characters, instead of 100, to be able to display long file paths. - Issue #6056: Make `multiprocessing` use setblocking(True) on the sockets it uses. Original patch by J Derek Wilson. - Issue #15364: Fix sysconfig.get_config_var('srcdir') to be an absolute path. - Issue #15413: `os.times()` had disappeared under Windows. - Issue #15402: An issue in the struct module that caused `sys.getsizeof()` to return incorrect results for struct.Struct instances has been fixed. Initial patch by Serhiy Storchaka. - Issue #15232: When mangle_from is True, `email.Generator` now correctly mangles lines that start with 'From ' that occur in a MIME preamble or epilogue. - Issue #15094: Incorrectly placed #endif in _tkinter.c. Patch by Serhiy Storchaka. - Issue #13922: `argparse` no longer incorrectly strips '--'s that appear after the first one. - Issue #12353: `argparse` now correctly handles null argument values. - Issue #10017, issue #14998: Fix TypeError using pprint on dictionaries with user-defined types as keys or other unorderable keys. - Issue #15397: `inspect.getmodulename()` is now based directly on importlib via a new `importlib.machinery.all_suffixes()` API. - Issue #14635: `telnetlib` will use poll() rather than select() when possible to avoid failing due to the select() file descriptor limit. - Issue #15180: Clarify posixpath.join() error message when mixing str & bytes. - Issue #15343: pkgutil now includes an iter_importer_modules implementation for importlib.machinery.FileFinder (similar to the way it already handled zipimport.zipimporter). - Issue #15314: runpy now sets __main__.__loader__ correctly. - Issue #15357: The import emulation in pkgutil is now deprecated. pkgutil uses importlib internally rather than the emulation. - Issue #15233: Python now guarantees that callables registered with the atexit module will be called in a deterministic order. - Issue #15238: `shutil.copystat()` now copies Linux "extended attributes". - Issue #15230: runpy.run_path now correctly sets __package__ as described in the documentation. - Issue #15315: Support VS 2010 in distutils cygwincompiler. - Issue #15294: Fix a regression in pkgutil.extend_path()'s handling of nested namespace packages. - Issue #15056: `imp.cache_from_source()` and `imp.source_from_cache()` raise NotImplementedError when `sys.implementation.cache_tag` is set to None. - Issue #15256: Grammatical mistake in exception raised by `imp.find_module()`. - Issue #5931: `wsgiref` environ variable SERVER_SOFTWARE will specify an implementation specific term like CPython, Jython instead of generic "Python". - Issue #13248: Remove obsolete argument "max_buffer_size" of BufferedWriter and BufferedRWPair, from the io module. - Issue #13248: Remove obsolete argument "version" of `argparse.ArgumentParser`. - Issue #14814: Implement more consistent ordering and sorting behaviour for ipaddress objects. - Issue #14814: `ipaddress` network objects correctly return NotImplemented when compared to arbitrary objects instead of raising TypeError. - Issue #14990: Correctly fail with SyntaxError on invalid encoding declaration. - Issue #14814: `ipaddress` now provides more informative error messages when constructing instances directly (changes permitted during beta due to provisional API status). - Issue #15247: `io.FileIO` now raises an error when given a file descriptor pointing to a directory. - Issue #15261: Stop os.stat(fd) crashing on Windows when fd not open. - Issue #15166: Implement `imp.get_tag()` using `sys.implementation.cache_tag`. - Issue #15210: Catch KeyError when `importlib.__init__()` can't find _frozen_importlib in sys.modules, not ImportError. - Issue #15030: `importlib.abc.PyPycLoader` now supports the new source size header field in .pyc files. - Issue #5346: Preserve permissions of mbox, MMDF and Babyl mailbox files on flush(). - Issue #10571: Fix the "--sign" option of distutils' upload command. Patch by Jakub Wilk. - Issue #9559: If messages were only added, a new file is no longer created and renamed over the old file when flush() is called on an mbox, MMDF or Babyl mailbox. - Issue #10924: Fixed `crypt.mksalt()` to use a RNG that is suitable for cryptographic purpose. - Issue #15184: Ensure consistent results of OS X configuration tailoring for universal builds by factoring out common OS X-specific customizations from sysconfig, distutils.sysconfig, distutils.util, and distutils.unixccompiler into a new module _osx_support. C API ----- - Issue #15610: `PyImport_ImportModuleEx()` now uses a 'level' of 0 instead of -1. - Issue #15169, issue #14599: Strip out the C implementation of `imp.source_from_cache()` used by PyImport_ExecCodeModuleWithPathnames() and used the Python code instead. Leads to PyImport_ExecCodeModuleObject() to not try to infer the source path from the bytecode path as PyImport_ExecCodeModuleWithPathnames() does. Extension Modules ----------------- - Issue #6493: An issue in ctypes on Windows that caused structure bitfields of type `ctypes.c_uint32` and width 32 to incorrectly be set has been fixed. - Issue #15194: Update libffi to the 3.0.11 release. IDLE ---- - Issue #13052: Fix IDLE crashing when replace string in Search/Replace dialog ended with ``\``. Patch by Roger Serwy. Tools/Demos ----------- - Issue #15458: python-config gets a new option --configdir to print the $LIBPL value. - Move importlib.test.benchmark to Tools/importbench. - Issue #12605: The gdb hooks for debugging CPython (within Tools/gdb) have been enhanced to show information on more C frames relevant to CPython within the "py-bt" and "py-bt-full" commands: * C frames that are waiting on the GIL * C frames that are garbage-collecting * C frames that are due to the invocation of a PyCFunction Documentation ------------- - Issue #15041: Update "see also" list in tkinter documentation. - Issue #15444: Use proper spelling for non-ASCII contributor names. Patch by Serhiy Storchaka. - Issue #15295: Reorganize and rewrite the documentation on the import system. - Issue #15230: Clearly document some of the limitations of the runpy module and nudge readers towards importlib when appropriate. - Issue #15053: Copy Python 3.3 import lock change notice to all relevant functions in imp instead of just at the top of the relevant section. - Issue #15288: Link to the term "loader" in notes in pkgutil about how things won't work as expected in Python 3.3 and mark the requisite functions as "changed" since they will no longer work with modules directly imported by import itself. - Issue #13557: Clarify effect of giving two different namespaces to `exec()` or `execfile()`. - Issue #15250: Document that `filecmp.dircmp()` compares files shallowly. Patch contributed by Chris Jerdonek. - Issue #15442: Expose the default list of directories ignored by `filecmp.dircmp()` as a module attribute, and expand the list to more modern values. Tests ----- - Issue #15467: Move helpers for `__sizeof__()` tests into test_support. Patch by Serhiy Storchaka. - Issue #15320: Make iterating the list of tests thread-safe when running tests in multiprocess mode. Patch by Chris Jerdonek. - Issue #15168: Move `importlib.test` to `test.test_importlib`. - Issue #15091: Reactivate a test on UNIX which was failing thanks to a forgotten `importlib.invalidate_caches()` call. - Issue #15230: Adopted a more systematic approach in the runpy tests. - Issue #15300: Ensure the temporary test working directories are in the same parent folder when running tests in multiprocess mode from a Python build. Patch by Chris Jerdonek. - Issue #15284: Skip {send,recv}msg tests in test_socket when IPv6 is not enabled. Patch by Brian Brazil. - Issue #15277: Fix a resource leak in support.py when IPv6 is disabled. Patch by Brian Brazil. Build ----- - Issue #11715: Fix multiarch detection without having Debian development tools (dpkg-dev) installed. - Issue #15037: Build OS X installers with local copy of ncurses 5.9 libraries to avoid curses.unget_wch bug present in older versions of ncurses such as those shipped with OS X. - Issue #15560: Fix building _sqlite3 extension on OS X with an SDK. Also, for OS X installers, ensure consistent sqlite3 behavior and feature availability by building a local copy of libsqlite3 rather than depending on the wide range of versions supplied with various OS X releases. - Issue #8847: Disable COMDAT folding in Windows PGO builds. - Issue #14018: Fix OS X Tcl/Tk framework checking when using OS X SDKs. - Issue #16256: OS X installer now sets correct permissions for doc directory. - Issue #15431: Add _freeze_importlib project to regenerate importlib.h on Windows. Patch by Kristján Valur Jónsson. - Issue #14197: For OS X framework builds, ensure links to the shared library are created with the proper ABI suffix. - Issue #14330: For cross builds, don't use host python, use host search paths for host compiler. - Issue #15235: Allow Berkley DB versions up to 5.3 to build the dbm module. - Issue #15268: Search curses.h in /usr/include/ncursesw. What's New in Python 3.3.0 Beta 1? ================================== *Release date: 27-Jun-2012* Core and Builtins ----------------- - Fix a (most likely) very rare memory leak when calling main() and not being able to decode a command-line argument. - Issue #14815: Use Py_ssize_t instead of long for the object hash, to preserve all 64 bits of hash on Win64. - Issue #12268: File readline, readlines and read() or readall() methods no longer lose data when an underlying read system call is interrupted. IOError is no longer raised due to a read system call returning EINTR from within these methods. - Issue #11626: Add _SizeT functions to stable ABI. - Issue #15142: Fix reference leak when deallocating instances of types created using PyType_FromSpec(). - Issue #10053: Don't close FDs when FileIO.__init__ fails. Loosely based on the work by Hirokazu Yamamoto. - Issue #15096: Removed support for ur'' as the raw notation isn't compatible with Python 2.x's raw unicode strings. - Issue #13783: Generator objects now use the identifier APIs internally - Issue #14874: Restore charmap decoding speed to pre-PEP 393 levels. Patch by Serhiy Storchaka. - Issue #15026: utf-16 encoding is now significantly faster (up to 10x). Patch by Serhiy Storchaka. - Issue #11022: open() and io.TextIOWrapper are now calling locale.getpreferredencoding(False) instead of locale.getpreferredencoding() in text mode if the encoding is not specified. Don't change temporary the locale encoding using locale.setlocale(), use the current locale encoding instead of the user preferred encoding. - Issue #14673: Add Eric Snow's sys.implementation implementation. - Issue #15038: Optimize python Locks on Windows. Library ------- - Issue #12288: Consider '0' and '0.0' as valid initialvalue for tkinter SimpleDialog. - Issue #15512: Add a __sizeof__ implementation for parser. Patch by Serhiy Storchaka. - Issue #15469: Add a __sizeof__ implementation for deque objects. Patch by Serhiy Storchaka. - Issue #15489: Add a __sizeof__ implementation for BytesIO objects. Patch by Serhiy Storchaka. - Issue #15487: Add a __sizeof__ implementation for buffered I/O objects. Patch by Serhiy Storchaka. - Issue #15514: Correct __sizeof__ support for cpu_set. Patch by Serhiy Storchaka. - Issue #15177: Added dir_fd parameter to os.fwalk(). - Issue #15061: Re-implemented hmac.compare_digest() in C to prevent further timing analysis and to support all buffer protocol aware objects as well as ASCII only str instances safely. - Issue #15164: Change return value of platform.uname() from a plain tuple to a collections.namedtuple. - Support Mageia Linux in the platform module. - Issue #11678: Support Arch linux in the platform module. - Issue #15118: Change return value of os.uname() and os.times() from plain tuples to immutable iterable objects with named attributes (structseq objects). - Speed up _decimal by another 10-15% by caching the thread local context that was last accessed. In the pi benchmark (64-bit platform, prec=9), _decimal is now only 1.5x slower than float. - Remove the packaging module, which is not ready for prime time. - Issue #15154: Add "dir_fd" parameter to os.rmdir, remove "rmdir" parameter from os.remove / os.unlink. - Issue #4489: Add a shutil.rmtree that isn't susceptible to symlink attacks. It is used automatically on platforms supporting the necessary os.openat() and os.unlinkat() functions. Main code by Martin von Löwis. - Issue #15156: HTMLParser now uses the new "html.entities.html5" dictionary. - Issue #11113: add a new "html5" dictionary containing the named character references defined by the HTML5 standard and the equivalent Unicode character(s) to the html.entities module. - Issue #15114: the strict mode of HTMLParser and the HTMLParseError exception are deprecated now that the parser is able to parse invalid markup. - Issue #3665: \u and \U escapes are now supported in unicode regular expressions. Patch by Serhiy Storchaka. - Issue #15153: Added inspect.getgeneratorlocals to simplify white box testing of generator state updates - Issue #13062: Added inspect.getclosurevars to simplify testing stateful closures - Issue #11024: Fixes and additional tests for Time2Internaldate. - Issue #14626: Large refactoring of functions / parameters in the os module. Many functions now support "dir_fd" and "follow_symlinks" parameters; some also support accepting an open file descriptor in place of a path string. Added os.support_* collections as LBYL helpers. Removed many functions only previously seen in 3.3 alpha releases (often starting with "f" or "l", or ending with "at"). Originally suggested by Serhiy Storchaka; implemented by Larry Hastings. - Issue #15008: Implement PEP 362 "Signature Objects". Patch by Yury Selivanov. - Issue #15138: base64.urlsafe_{en,de}code() are now 3-4x faster. - Issue #444582: Add shutil.which, for finding programs on the system path. Original patch by Erik Demaine, with later iterations by Jan Killian and Brian Curtin. - Issue #14837: SSL errors now have ``library`` and ``reason`` attributes describing precisely what happened and in which OpenSSL submodule. The str() of a SSLError is also enhanced accordingly. - Issue #9527: datetime.astimezone() method will now supply a class timezone instance corresponding to the system local timezone when called with no arguments. - Issue #14653: email.utils.mktime_tz() no longer relies on system mktime() when timezone offest is supplied. - Issue #14684: zlib.compressobj() and zlib.decompressobj() now support the use of predefined compression dictionaries. Original patch by Sam Rushing. - Fix GzipFile's handling of filenames given as bytes objects. - Issue #14772: Return destination values from some shutil functions. - Issue #15064: Implement context management protocol for multiprocessing types - Issue #15101: Make pool finalizer avoid joining current thread. - Issue #14657: The frozen instance of importlib used for bootstrap is now also the module imported as importlib._bootstrap. - Issue #14055: Add __sizeof__ support to _elementtree. - Issue #15054: A bug in tokenize.tokenize that caused string literals with 'b' prefixes to be incorrectly tokenized has been fixed. Patch by Serhiy Storchaka. - Issue #15006: Allow equality comparison between naive and aware time or datetime objects. - Issue #15036: Mailbox no longer throws an error if a flush is done between operations when removing or changing multiple items in mbox, MMDF, or Babyl mailboxes. - Issue #14059: Implement multiprocessing.Barrier. - Issue #15061: The inappropriately named hmac.secure_compare has been renamed to hmac.compare_digest, restricted to operating on bytes inputs only and had its documentation updated to more accurately reflect both its intent and its limitations - Issue #13841: Make child processes exit using sys.exit() on Windows. - Issue #14936: curses_panel was converted to PEP 3121 and PEP 384 API. Patch by Robin Schreiber. - Issue #1667546: On platforms supporting tm_zone and tm_gmtoff fields in struct tm, time.struct_time objects returned by time.gmtime(), time.localtime() and time.strptime() functions now have tm_zone and tm_gmtoff attributes. Original patch by Paul Boddie. - Rename adjusted attribute to adjustable in time.get_clock_info() result. - Issue #3518: Remove references to non-existent BaseManager.from_address() method. - Issue #13857: Added textwrap.indent() function (initial patch by Ezra Berch) - Issue #2736: Added datetime.timestamp() method. - Issue #13854: Make multiprocessing properly handle non-integer non-string argument to SystemExit. - Issue #12157: Make pool.map() empty iterables correctly. Initial patch by mouad. - Issue #11823: disassembly now shows argument counts on calls with keyword args. - Issue #14711: os.stat_float_times() has been deprecated. - LZMAFile now accepts the modes "rb"/"wb"/"ab" as synonyms of "r"/"w"/"a". - The bz2 and lzma modules now each contain an open() function, allowing compressed files to readily be opened in text mode as well as binary mode. - BZ2File.__init__() and LZMAFile.__init__() now accept a file object as their first argument, rather than requiring a separate "fileobj" argument. - gzip.open() now accepts file objects as well as filenames. - Issue #14992: os.makedirs(path, exist_ok=True) would raise an OSError when the path existed and had the S_ISGID mode bit set when it was not explicitly asked for. This is no longer an exception as mkdir cannot control if the OS sets that bit for it or not. - Issue #14989: Make the CGI enable option to http.server available via command line. - Issue #14987: Add a missing import statement to inspect. - Issue #1079: email.header.decode_header now correctly parses all the examples in RFC2047. There is a necessary visible behavior change: the leading and/or trailing whitespace on ASCII parts is now preserved. - Issue #14969: Better handling of exception chaining in contextlib.ExitStack - Issue #14963: Convert contextlib.ExitStack.__exit__ to use an iterative algorithm (Patch by Alon Horev) - Issue #14785: Add sys._debugmallocstats() to help debug low-level memory allocation issues - Issue #14443: Ensure that .py files are byte-compiled with the correct Python executable within bdist_rpm even on older versions of RPM C-API ----- - Issue #15146: Add PyType_FromSpecWithBases. Patch by Robin Schreiber. - Issue #15042: Add PyState_AddModule and PyState_RemoveModule. Add version guard for Py_LIMITED_API additions. Patch by Robin Schreiber. - Issue #13783: Inadvertent additions to the public C API in the PEP 380 implementation have either been removed or marked as private interfaces. Extension Modules ----------------- - Issue #15000: Support the "unique" x32 architecture in _posixsubprocess.c. IDLE ---- - Issue #9803: Don't close IDLE on saving if breakpoint is open. Patch by Roger Serwy. - Issue #14962: Update text coloring in IDLE shell window after changing options. Patch by Roger Serwy. Documentation ------------- - Issue #15176: Clarified behavior, documentation, and implementation of os.listdir(). - Issue #14982: Document that pkgutil's iteration functions require the non-standard iter_modules() method to be defined by an importer (something the importlib importers do not define). - Issue #15081: Document PyState_FindModule. Patch by Robin Schreiber. - Issue #14814: Added first draft of ipaddress module API reference Tests ----- - Issue #15187: Bugfix: remove temporary directories test_shutil was leaving behind. - Issue #14769: test_capi now has SkipitemTest, which cleverly checks for "parity" between PyArg_ParseTuple() and the Python/getargs.c static function skipitem() for all possible "format units". - test_nntplib now tolerates being run from behind NNTP gateways that add "X-Antivirus" headers to articles - Issue #15043: test_gdb is now skipped entirely if gdb security settings block loading of the gdb hooks - Issue #14963: Add test cases for exception handling behaviour in contextlib.ExitStack (Initial patch by Alon Horev) Build ----- - Issue #13590: Improve support for OS X Xcode 4: * Try to avoid building Python or extension modules with problematic llvm-gcc compiler. * Since Xcode 4 removes ppc support, extension module builds now check for ppc compiler support and automatically remove ppc and ppc64 archs when not available. * Since Xcode 4 no longer install SDKs in default locations, extension module builds now revert to using installed headers and libs if the SDK used to build the interpreter is not available. * Update ./configure to use better defaults for universal builds; in particular, --enable-universalsdk=yes uses the Xcode default SDK and --with-universal-archs now defaults to "intel" if ppc not available. - Issue #14225: Fix Unicode support for curses (#12567) on OS X - Issue #14928: Fix importlib bootstrap issues by using a custom executable (Modules/_freeze_importlib) to build Python/importlib.h. What's New in Python 3.3.0 Alpha 4? =================================== *Release date: 31-May-2012* Core and Builtins ----------------- - Issue #14835: Make plistlib output empty arrays & dicts like OS X. Patch by Sidney San Martín. - Issue #14744: Use the new _PyUnicodeWriter internal API to speed up str%args and str.format(args). - Issue #14930: Make memoryview objects weakrefable. - Issue #14775: Fix a potential quadratic dict build-up due to the garbage collector repeatedly trying to untrack dicts. - Issue #14857: fix regression in references to PEP 3135 implicit __class__ closure variable (Reopens issue #12370) - Issue #14712 (PEP 405): Virtual environments. Implemented by Vinay Sajip. - Issue #14660 (PEP 420): Namespace packages. Implemented by Eric Smith. - Issue #14494: Fix __future__.py and its documentation to note that absolute imports are the default behavior in 3.0 instead of 2.7. Patch by Sven Marnach. - Issue #9260: A finer-grained import lock. Most of the import sequence now uses per-module locks rather than the global import lock, eliminating well-known issues with threads and imports. - Issue #14624: UTF-16 decoding is now 3x to 4x faster on various inputs. Patch by Serhiy Storchaka. - asdl_seq and asdl_int_seq are now Py_ssize_t sized. - Issue #14133 (PEP 415): Implement suppression of __context__ display with an attribute on BaseException. This replaces the original mechanism of PEP 409. - Issue #14417: Mutating a dict during lookup now restarts the lookup instead of raising a RuntimeError (undoes issue #14205). - Issue #14738: Speed-up UTF-8 decoding on non-ASCII data. Patch by Serhiy Storchaka. - Issue #14700: Fix two broken and undefined-behaviour-inducing overflow checks in old-style string formatting. Library ------- - Issue #14690: Use monotonic clock instead of system clock in the sched, subprocess and trace modules. - Issue #14443: Tell rpmbuild to use the correct version of Python in bdist_rpm. Initial patch by Ross Lagerwall. - Issue #12515: email now registers a defect if it gets to EOF while parsing a MIME part without seeing the closing MIME boundary. - Issue #1672568: email now always decodes base64 payloads, adding padding and ignoring non-base64-alphabet characters if needed, and registering defects for any such problems. - Issue #14925: email now registers a defect when the parser decides that there is a missing header/body separator line. MalformedHeaderDefect, which the existing code would never actually generate, is deprecated. - Issue #10365: File open dialog now works instead of crashing even when the parent window is closed before the dialog. Patch by Roger Serwy. - Issue #8739: Updated smtpd to support RFC 5321, and added support for the RFC 1870 SIZE extension. - Issue #665194: Added a localtime function to email.utils to provide an aware local datetime for use in setting Date headers. - Issue #12586: Added new provisional policies that implement convenient unicode support for email headers. See What's New for details. - Issue #14731: Refactored email Policy framework to support full backward compatibility with Python 3.2 by default yet allow for the introduction of new features through new policies. Note that Policy.must_be_7bit is renamed to cte_type. - Issue #14876: Use user-selected font for highlight configuration. - Issue #14920: Fix the help(urllib.parse) failure on locale C on terminals. Have ascii characters in help. - Issue #14548: Make multiprocessing finalizers check pid before running to cope with possibility of gc running just after fork. - Issue #14036: Add an additional check to validate that port in urlparse does not go in illegal range and returns None. - Issue #14862: Add missing names to os.__all__ - Issue #14875: Use float('inf') instead of float('1e66666') in the json module. - Issue #13585: Added contextlib.ExitStack - PEP 3144, Issue #14814: Added the ipaddress module - Issue #14426: Correct the Date format in Expires attribute of Set-Cookie Header in Cookie.py. - Issue #14588: The types module now provide new_class() and prepare_class() functions to support PEP 3115 compliant dynamic class creation. Patch by Daniel Urban and Nick Coghlan. - Issue #13152: Allow specifying a custom tabsize for expanding tabs in textwrap. Patch by John Feuerstein. - Issue #14721: Send the correct 'Content-length: 0' header when the body is an empty string ''. Initial Patch contributed by Arve Knudsen. - Issue #14072: Fix parsing of 'tel' URIs in urlparse by making the check for ports stricter. - Issue #9374: Generic parsing of query and fragment portions of url for any scheme. Supported both by RFC3986 and RFC2396. - Issue #14798: Fix the functions in pyclbr to raise an ImportError when the first part of a dotted name is not a package. Patch by Xavier de Gaye. - Issue #12098: multiprocessing on Windows now starts child processes using the same sys.flags as the current process. Initial patch by Sergey Mezentsev. - Issue #13031: Small speed-up for tarfile when unzipping tarfiles. Patch by Justin Peel. - Issue #14780: urllib.request.urlopen() now has a ``cadefault`` argument to use the default certificate store. Initial patch by James Oakley. - Issue #14829: Fix bisect and range() indexing with large indices (>= 2 ** 32) under 64-bit Windows. - Issue #14732: The _csv module now uses PEP 3121 module initialization. Patch by Robin Schreiber. - Issue #14809: Add HTTP status codes introduced by RFC 6585 to http.server and http.client. Patch by EungJun Yi. - Issue #14777: tkinter may return undecoded UTF-8 bytes as a string when accessing the Tk clipboard. Modify clipboard_get() to first request type UTF8_STRING when no specific type is requested in an X11 windowing environment, falling back to the current default type STRING if that fails. Original patch by Thomas Kluyver. - Issue #14773: Fix os.fwalk() failing on dangling symlinks. - Issue #12541: Be lenient with quotes around Realm field of HTTP Basic Authentation in urllib2. - Issue #14807: move undocumented tarfile.filemode() to stat.filemode() and add doc entry. Add tarfile.filemode alias with deprecation warning. - Issue #13815: TarFile.extractfile() now returns io.BufferedReader objects. - Issue #14532: Add a secure_compare() helper to the hmac module, to mitigate timing attacks. Patch by Jon Oberheide. - Add importlib.util.resolve_name(). - Issue #14366: Support lzma compression in zip files. Patch by Serhiy Storchaka. - Issue #13959: Introduce importlib.find_loader() and document imp.find_module/load_module as deprecated. - Issue #14082: shutil.copy2() now copies extended attributes, if possible. Patch by Hynek Schlawack. - Issue #13959: Make importlib.abc.FileLoader.load_module()/get_filename() and importlib.machinery.ExtensionFileLoader.load_module() have their single argument be optional. Allows for the replacement (and thus deprecation) of imp.load_source()/load_package()/load_compiled(). - Issue #13959: imp.get_suffixes() has been deprecated in favour of the new attributes on importlib.machinery: SOURCE_SUFFIXES, DEBUG_BYTECODE_SUFFIXES, OPTIMIZED_BYTECODE_SUFFIXES, BYTECODE_SUFFIXES, and EXTENSION_SUFFIXES. This led to an indirect deprecation of inspect.getmoduleinfo(). - Issue #14662: Prevent shutil failures on OS X when destination does not support chflag operations. Patch by Hynek Schlawack. - Issue #14157: Fix time.strptime failing without a year on February 29th. Patch by Hynek Schlawack. - Issue #14753: Make multiprocessing's handling of negative timeouts the same as it was in Python 3.2. - Issue #14583: Fix importlib bug when a package's __init__.py would first import one of its modules then raise an error. - Issue #14741: Fix missing support for Ellipsis ('...') in parser module. - Issue #14697: Fix missing support for set displays and set comprehensions in parser module. - Issue #14701: Fix missing support for 'raise ... from' in parser module. - Add support for timeouts to the acquire() methods of multiprocessing's lock/semaphore/condition proxies. - Issue #13989: Add support for text mode to gzip.open(). - Issue #14127: The os.stat() result object now provides three additional fields: st_ctime_ns, st_mtime_ns, and st_atime_ns, providing those times as an integer with nanosecond resolution. The functions os.utime(), os.lutimes(), and os.futimes() now accept a new parameter, ns, which accepts mtime and atime as integers with nanosecond resolution. - Issue #14127 and #10148: shutil.copystat now preserves exact mtime and atime on filesystems providing nanosecond resolution. IDLE ---- - Issue #14958: Change IDLE systax highlighting to recognize all string and byte literals supported in Python 3.3. - Issue #10997: Prevent a duplicate entry in IDLE's "Recent Files" menu. - Issue #14929: Stop IDLE 3.x from closing on Unicode decode errors when grepping. Patch by Roger Serwy. - Issue #12510: Attempting to get invalid tooltip no longer closes IDLE. Other tooltipss have been corrected or improved and the number of tests has been tripled. Original patch by Roger Serwy. Tools/Demos ----------- - Issue #14695: Bring Tools/parser/unparse.py support up to date with the Python 3.3 Grammar. Build ----- - Issue #14472: Update .gitignore. Patch by Matej Cepl. - Upgrade Windows library versions: bzip 1.0.6, OpenSSL 1.0.1c. - Issue #14693: Under non-Windows platforms, hashlib's fallback modules are always compiled, even if OpenSSL is present at build time. - Issue #13210: Windows build now uses VS2010, ported from VS2008. C-API ----- - Issue #14705: The PyArg_Parse() family of functions now support the 'p' format unit, which accepts a "boolean predicate" argument. It converts any Python value into an integer--0 if it is "false", and 1 otherwise. Documentation ------------- - Issue #14863: Update the documentation of os.fdopen() to reflect the fact that it's only a thin wrapper around open() anymore. - Issue #14588: The language reference now accurately documents the Python 3 class definition process. Patch by Nick Coghlan. - Issue #14943: Correct a default argument value for winreg.OpenKey and correctly list the argument names in the function's explanation. What's New in Python 3.3.0 Alpha 3? =================================== *Release date: 01-May-2012* Core and Builtins ----------------- - Issue #14699: Fix calling the classmethod descriptor directly. - Issue #14433: Prevent msvcrt crash in interactive prompt when stdin is closed. - Issue #14521: Make result of float('nan') and float('-nan') more consistent across platforms. - Issue #14646: __import__() sets __loader__ if the loader did not. - Issue #14605: No longer have implicit entries in sys.meta_path. If sys.meta_path is found to be empty, raise ImportWarning. - Issue #14605: No longer have implicit entries in sys.path_hooks. If sys.path_hooks is found to be empty, a warning will be raised. None is now inserted into sys.path_importer_cache if no finder was discovered. This also means imp.NullImporter is no longer implicitly used. - Issue #13903: Implement PEP 412. Individual dictionary instances can now share their keys with other dictionaries. Classes take advantage of this to share their instance dictionary keys for improved memory and performance. - Issue #11603 (again): Setting __repr__ to __str__ now raises a RuntimeError when repr() or str() is called on such an object. - Issue #14658: Fix binding a special method to a builtin implementation of a special method with a different name. - Issue #14630: Fix a memory access bug for instances of a subclass of int with value 0. - Issue #14339: Speed improvements to bin, oct and hex functions. Patch by Serhiy Storchaka. - Issue #14385: It is now possible to use a custom type for the __builtins__ namespace, instead of a dict. It can be used for sandboxing for example. Raise also a NameError instead of ImportError if __build_class__ name if not found in __builtins__. - Issue #12599: Be more strict in accepting None compared to a false-like object for importlib.util.module_for_loader and importlib.machinery.PathFinder. - Issue #14612: Fix jumping around with blocks by setting f_lineno. - Issue #14592: Attempting a relative import w/o __package__ or __name__ set in globals raises a KeyError. - Issue #14607: Fix keyword-only arguments which started with ``__``. - Issue #10854: The ImportError raised when an extension module on Windows fails to import now uses the new path and name attributes from Issue #1559549. - Issue #13889: Check and (if necessary) set FPU control word before calling any of the dtoa.c string <-> float conversion functions, on MSVC builds of Python. This fixes issues when embedding Python in a Delphi app. - __import__() now matches PEP 328 and documentation by defaulting 'index' to 0 instead of -1 and removing support for negative values. - Issue #2377: Make importlib the implementation of __import__(). - Issue #1559549: ImportError now has 'name' and 'path' attributes that are set using keyword arguments to its constructor. They are currently not set by import as they are meant for use by importlib. - Issue #14474: Save and restore exception state in thread.start_new_thread() while writing error message if the thread leaves an unhandled exception. - Issue #13019: Fix potential reference leaks in bytearray.extend(). Patch by Suman Saha. Library ------- - Issue #14768: os.path.expanduser('~/a') doesn't work correctly when HOME is '/'. - Issue #14371: Support bzip2 in zipfile module. Patch by Serhiy Storchaka. - Issue #13183: Fix pdb skipping frames after hitting a breakpoint and running step. Patch by Xavier de Gaye. - Issue #14696: Fix parser module to understand 'nonlocal' declarations. - Issue #10941: Fix imaplib.Internaldate2tuple to produce correct result near the DST transition. Patch by Joe Peterson. - Issue #9154: Fix parser module to understand function annotations. - Issue #6085: In http.server.py SimpleHTTPServer.address_string returns the client ip address instead client hostname. Patch by Charles-François Natali. - Issue #14309: Deprecate time.clock(), use time.perf_counter() or time.process_time() instead. - Issue #14428: Implement the PEP 418. Add time.get_clock_info(), time.perf_counter() and time.process_time() functions, and rename time.steady() to time.monotonic(). - Issue #14646: importlib.util.module_for_loader() now sets __loader__ and __package__ (when possible). - Issue #14664: It is now possible to use @unittest.skip{If,Unless} on a test class that doesn't inherit from TestCase (i.e. a mixin). - Issue #4892: multiprocessing Connections can now be transferred over multiprocessing Connections. Patch by Richard Oudkerk (sbt). - Issue #14160: TarFile.extractfile() failed to resolve symbolic links when the links were not located in an archive subdirectory. - Issue #14638: pydoc now treats non-string __name__ values as if they were missing, instead of raising an error. - Issue #13684: Fix httplib tunnel issue of infinite loops for certain sites which send EOF without trailing \r\n. - Issue #14605: Add importlib.abc.FileLoader, importlib.machinery.(FileFinder, SourceFileLoader, SourcelessFileLoader, ExtensionFileLoader). - Issue #13959: imp.cache_from_source()/source_from_cache() now follow os.path.join()/split() semantics for path manipulation instead of its prior, custom semantics of caring the right-most path separator forward in path joining. - Issue #2193: Allow ":" character in Cookie NAME values. - Issue #14629: tokenizer.detect_encoding will specify the filename in the SyntaxError exception if found at readline.__self__.name. - Issue #14629: Raise SyntaxError in tokenizer.detect_encoding if the first two lines have non-UTF-8 characters without an encoding declaration. - Issue #14308: Fix an exception when a "dummy" thread is in the threading module's active list after a fork(). - Issue #11750: The Windows API functions scattered in the _subprocess and _multiprocessing.win32 modules now live in a single module "_winapi". Patch by sbt. - Issue #14087: multiprocessing: add Condition.wait_for(). Patch by sbt. - Issue #14538: HTMLParser can now parse correctly start tags that contain a bare '/'. - Issue #14452: SysLogHandler no longer inserts a UTF-8 BOM into the message. - Issue #14386: Expose the dict_proxy internal type as types.MappingProxyType. - Issue #13959: Make imp.reload() always use a module's __loader__ to perform the reload. - Issue #13959: Add imp.py and rename the built-in module to _imp, allowing for re-implementing parts of the module in pure Python. - Issue #13496: Fix potential overflow in bisect.bisect algorithm when applied to a collection of size > sys.maxsize / 2. - Have importlib take advantage of ImportError's new 'name' and 'path' attributes. - Issue #14399: zipfile now recognizes that the archive has been modified even if only the comment is changed. In addition, the TypeError that results from trying to set a non-binary value as a comment is now raised at the time the comment is set rather than at the time the zipfile is written. - trace.CoverageResults.is_ignored_filename() now ignores any name that starts with "<" and ends with ">" instead of special-casing "<string>" and "<doctest ". - Issue #12537: The mailbox module no longer depends on knowledge of internal implementation details of the email package Message object. - Issue #7978: socketserver now restarts the select() call when EINTR is returned. This avoids crashing the server loop when a signal is received. Patch by Jerzy Kozera. - Issue #14522: Avoid duplicating socket handles in multiprocessing.connection. Patch by sbt. - Don't Py_DECREF NULL variable in io.IncrementalNewlineDecoder. - Issue #3033: Add displayof parameter to tkinter font. Patch by Guilherme Polo. - Issue #14482: Raise a ValueError, not a NameError, when trying to create a multiprocessing Client or Listener with an AF_UNIX type address under Windows. Patch by Popa Claudiu. - Issue #802310: Generate always unique tkinter font names if not directly passed. - Issue #14151: Raise a ValueError, not a NameError, when trying to create a multiprocessing Client or Listener with an AF_PIPE type address under non-Windows platforms. Patch by Popa Claudiu. - Issue #14493: Use gvfs-open or xdg-open in webbrowser. Build ----- - "make touch" will now touch generated files that are checked into Mercurial, after a "hg update" which failed to bring the timestamps into the right order. Tests ----- - Issue #14026: In test_cmd_line_script, check that sys.argv is populated correctly for the various invocation approaches (Patch by Jason Yeo) - Issue #14032: Fix incorrect variable name in test_cmd_line_script debugging message (Patch by Jason Yeo) - Issue #14589: Update certificate chain for sha256.tbs-internet.com, fixing a test failure in test_ssl. - Issue #14355: Regrtest now supports the standard unittest test loading, and will use it if a test file contains no `test_main` method. IDLE ---- - Issue #8515: Set __file__ when run file in IDLE. Initial patch by Bruce Frederiksen. - Issue #14496: Fix wrong name in idlelib/tabbedpages.py. Patch by Popa Claudiu. Tools / Demos ------------- - Issue #3561: The Windows installer now has an option, off by default, for placing the Python installation into the system "Path" environment variable. - Issue #13165: stringbench is now available in the Tools/stringbench folder. It used to live in its own SVN project. C-API ----- - Issue #14098: New functions PyErr_GetExcInfo and PyErr_SetExcInfo. Patch by Stefan Behnel. What's New in Python 3.3.0 Alpha 2? =================================== *Release date: 01-Apr-2012* Core and Builtins ----------------- - Issue #1683368: object.__new__ and object.__init__ raise a TypeError if they are passed arguments and their complementary method is not overridden. - Issue #14378: Fix compiling ast.ImportFrom nodes with a "__future__" string as the module name that was not interned. - Issue #14331: Use significantly less stack space when importing modules by allocating path buffers on the heap instead of the stack. - Issue #14334: Prevent in a segfault in type.__getattribute__ when it was not passed strings. - Issue #1469629: Allow cycles through an object's __dict__ slot to be collected. (For example if ``x.__dict__ is x``). - Issue #14205: dict lookup raises a RuntimeError if the dict is modified during a lookup. - Issue #14220: When a generator is delegating to another iterator with the yield from syntax, it needs to have its ``gi_running`` flag set to True. - Issue #14435: Remove dedicated block allocator from floatobject.c and rely on the PyObject_Malloc() api like all other objects. - Issue #14471: Fix a possible buffer overrun in the winreg module. - Issue #14288: Allow the serialization of builtin iterators Library ------- - Issue #14300: Under Windows, sockets created using socket.dup() now allow overlapped I/O. Patch by sbt. - Issue #13872: socket.detach() now marks the socket closed (as mirrored in the socket repr()). Patch by Matt Joiner. - Issue #14406: Fix a race condition when using ``concurrent.futures.wait( return_when=ALL_COMPLETED)``. Patch by Matt Joiner. - Issue #5136: deprecate old, unused functions from tkinter. - Issue #14416: syslog now defines the LOG_ODELAY and LOG_AUTHPRIV constants if they are defined in <syslog.h>. - Issue #14295: Add unittest.mock - Issue #7652: Add --with-system-libmpdec option to configure for linking the _decimal module against an installed libmpdec. - Issue #14380: MIMEText now defaults to utf-8 when passed non-ASCII unicode with no charset specified. - Issue #10340: asyncore - properly handle EINVAL in dispatcher constructor on OSX; avoid to call handle_connect in case of a disconnected socket which was not meant to connect. - Issue #14204: The ssl module now has support for the Next Protocol Negotiation extension, if available in the underlying OpenSSL library. Patch by Colin Marc. - Issue #3035: Unused functions from tkinter are marked as pending deprecated. - Issue #12757: Fix the skipping of doctests when python is run with -OO so that it works in unittest's verbose mode as well as non-verbose mode. - Issue #7652: Integrate the decimal floating point libmpdec library to speed up the decimal module. Performance gains of the new C implementation are between 10x and 100x, depending on the application. - Issue #14269: SMTPD now conforms to the RFC and requires a HELO command before MAIL, RCPT, or DATA. - Issue #13694: asynchronous connect in asyncore.dispatcher does not set addr attribute. - Issue #14344: fixed the repr of email.policy objects. - Issue #11686: Added missing entries to email package __all__ lists (mostly the new Bytes classes). - Issue #14335: multiprocessing's custom Pickler subclass now inherits from the C-accelerated implementation. Patch by sbt. - Issue #10484: Fix the CGIHTTPServer's PATH_INFO handling problem. - Issue #11199: Fix the with urllib which hangs on particular ftp urls. - Improve the memory utilization and speed of functools.lru_cache. - Issue #14222: Use the new time.steady() function instead of time.time() for timeout in queue and threading modules to not be affected of system time update. - Issue #13248: Remove lib2to3.pytree.Base.get_prefix/set_prefix. - Issue #14234: CVE-2012-0876: Randomize hashes of xml attributes in the hash table internal to the pyexpat module's copy of the expat library to avoid a denial of service due to hash collisions. Patch by David Malcolm with some modifications by the expat project. - Issue #12818: format address no longer needlessly \ escapes ()s in names when the name ends up being quoted. - Issue #14062: BytesGenerator now correctly folds Header objects, including using linesep when folding. - Issue #13839: When invoked on the command-line, the pstats module now accepts several filenames of profile stat files and merges them all. Patch by Matt Joiner. - Issue #14291: Email now defaults to utf-8 for non-ASCII unicode headers instead of raising an error. This fixes a regression relative to 2.7. - Issue #989712: Support using Tk without a mainloop. - Issue #3835: Refuse to use unthreaded Tcl in threaded Python. - Issue #2843: Add new Tk API to Tkinter. - Issue #14184: Increase the default stack size for secondary threads on Mac OS X to avoid interpreter crashes when using threads on 10.7. - Issue #14180: datetime.date.fromtimestamp(), datetime.datetime.fromtimestamp() and datetime.datetime.utcfromtimestamp() now raise an OSError instead of ValueError if localtime() or gmtime() failed. - Issue #14180: time.ctime(), gmtime(), time.localtime(), datetime.date.fromtimestamp(), datetime.datetime.fromtimestamp() and datetime.datetime.utcfromtimestamp() now raises an OverflowError, instead of a ValueError, if the timestamp does not fit in time_t. - Issue #14180: datetime.datetime.fromtimestamp() and datetime.datetime.utcfromtimestamp() now round microseconds towards zero instead of rounding to nearest with ties going away from zero. - Issue #10543: Fix unittest test discovery with Jython bytecode files. - Issue #1178863: Separate initialisation from setting when initializing Tkinter.Variables; harmonize exceptions to ValueError; only delete variables that have not been deleted; assert that variable names are strings. - Issue #14104: Implement time.monotonic() on Mac OS X, patch written by Nicholas Riley. - Issue #13394: the aifc module now uses warnings.warn() to signal warnings. - Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under Windows when the child process has already exited. - Issue #14223: curses.addch() is no more limited to the range 0-255 when the Python curses is not linked to libncursesw. It was a regression introduced in Python 3.3a1. - Issue #14168: Check for presence of Element._attrs in minidom before accessing it. - Issue #12328: Fix multiprocessing's use of overlapped I/O on Windows. Also, add a multiprocessing.connection.wait(rlist, timeout=None) function for polling multiple objects at once. Patch by sbt. - Issue #14007: Accept incomplete TreeBuilder objects (missing start, end, data or close method) for the Python implementation as well. Drop the no-op TreeBuilder().xml() method from the C implementation. - Issue #14210: pdb now has tab-completion not only for command names, but also for their arguments, wherever possible. - Issue #14310: Sockets can now be with other processes on Windows using the api socket.socket.share() and socket.fromshare(). - Issue #10576: The gc module now has a 'callbacks' member that will get called when garbage collection takes place. Build ----- - Issue #14557: Fix extensions build on HP-UX. Patch by Adi Roiban. - Issue #14387: Do not include accu.h from Python.h. - Issue #14359: Only use O_CLOEXEC in _posixmodule.c if it is defined. Based on patch from Hervé Coatanhay. - Issue #14321: Do not run pgen during the build if files are up to date. Documentation ------------- - Issue #14034: added the argparse tutorial. - Issue #14324: Fix configure tests for cross builds. - Issue #14327: Call AC_CANONICAL_HOST in configure.ac and check in config.{guess,sub}. Don't use uname calls for cross builds. Extension Modules ----------------- - Issue #9041: An issue in ctypes.c_longdouble, ctypes.c_double, and ctypes.c_float that caused an incorrect exception to be returned in the case of overflow has been fixed. - Issue #14212: The re module didn't retain a reference to buffers it was scanning, resulting in segfaults. - Issue #14259: The finditer() method of re objects did not take any keyword arguments, contrary to the documentation. - Issue #10142: Support for SEEK_HOLE/SEEK_DATA (for example, under ZFS). Tests ----- - Issue #14442: Add missing errno import in test_smtplib. - Issue #8315: (partial fix) python -m unittest test.test_email now works. What's New in Python 3.3.0 Alpha 1? =================================== *Release date: 05-Mar-2012* Core and Builtins ----------------- - Issue #14172: Fix reference leak when marshalling a buffer-like object (other than a bytes object). - Issue #13521: dict.setdefault() now does only one lookup for the given key, making it "atomic" for many purposes. Patch by Filip Gruszczyński. - PEP 409, Issue #6210: "raise X from None" is now supported as a means of suppressing the display of the chained exception context. The chained context still remains available as the __context__ attribute. - Issue #10181: New memoryview implementation fixes multiple ownership and lifetime issues of dynamically allocated Py_buffer members (#9990) as well as crashes (#8305, #7433). Many new features have been added (See whatsnew/3.3), and the documentation has been updated extensively. The ndarray test object from _testbuffer.c implements all aspects of PEP-3118, so further development towards the complete implementation of the PEP can proceed in a test-driven manner. Thanks to Nick Coghlan, Antoine Pitrou and Pauli Virtanen for review and many ideas. - Issue #12834: Fix incorrect results of memoryview.tobytes() for non-contiguous arrays. - Issue #5231: Introduce memoryview.cast() method that allows changing format and shape without making a copy of the underlying memory. - Issue #14084: Fix a file descriptor leak when importing a module with a bad encoding. - Upgrade Unicode data to Unicode 6.1. - Issue #14040: Remove rarely used file name suffixes for C extensions (under POSIX mainly). - Issue #14051: Allow arbitrary attributes to be set of classmethod and staticmethod. - Issue #13703: oCERT-2011-003: Randomize hashes of str and bytes to protect against denial of service attacks due to hash collisions within the dict and set types. Patch by David Malcolm, based on work by Victor Stinner. - Issue #13020: Fix a reference leak when allocating a structsequence object fails. Patch by Suman Saha. - Issue #13908: Ready types returned from PyType_FromSpec. - Issue #11235: Fix OverflowError when trying to import a source file whose modification time doesn't fit in a 32-bit timestamp. - Issue #12705: A SyntaxError exception is now raised when attempting to compile multiple statements as a single interactive statement. - Fix the builtin module initialization code to store the init function for future reinitialization. - Issue #8052: The posix subprocess module would take a long time closing all possible file descriptors in the child process rather than just open file descriptors. It now closes only the open fds if possible for the default close_fds=True behavior. - Issue #13629: Renumber the tokens in token.h so that they match the indexes into _PyParser_TokenNames. - Issue #13752: Add a casefold() method to str. - Issue #13761: Add a "flush" keyword argument to the print() function, used to ensure flushing the output stream. - Issue #13645: pyc files now contain the size of the corresponding source code, to avoid timestamp collisions (especially on filesystems with a low timestamp resolution) when checking for freshness of the bytecode. - PEP 380, Issue #11682: Add "yield from <x>" to support easy delegation to subgenerators (initial patch by Greg Ewing, integration into 3.3 by Renaud Blanch, Ryan Kelly, Zbigniew Jędrzejewski-Szmek and Nick Coghlan) - Issue #13748: Raw bytes literals can now be written with the ``rb`` prefix as well as ``br``. - Issue #12736: Use full unicode case mappings for upper, lower, and title case. - Issue #12760: Add a create mode to open(). Patch by David Townshend. - Issue #13738: Simplify implementation of bytes.lower() and bytes.upper(). - Issue #13577: Built-in methods and functions now have a __qualname__. Patch by sbt. - Issue #6695: Full garbage collection runs now clear the freelist of set objects. Initial patch by Matthias Troffaes. - Fix OSError.__init__ and OSError.__new__ so that each of them can be overridden and take additional arguments (followup to issue #12555). - Fix the fix for issue #12149: it was incorrect, although it had the side effect of appearing to resolve the issue. Thanks to Mark Shannon for noticing. - Issue #13505: Pickle bytes objects in a way that is compatible with Python 2 when using protocols <= 2. - Issue #11147: Fix an unused argument in _Py_ANNOTATE_MEMORY_ORDER. (Fix given by Campbell Barton). - Issue #13503: Use a more efficient reduction format for bytearrays with pickle protocol >= 3. The old reduction format is kept with older protocols in order to allow unpickling under Python 2. Patch by Irmen de Jong. - Issue #7111: Python can now be run without a stdin, stdout or stderr stream. It was already the case with Python 2. However, the corresponding sys module entries are now set to None (instead of an unusable file object). - Issue #11849: Ensure that free()d memory arenas are really released on POSIX systems supporting anonymous memory mappings. Patch by Charles-François Natali. - PEP 3155 / issue #13448: Qualified name for classes and functions. - Issue #13436: Fix a bogus error message when an AST object was passed an invalid integer value. - Issue #13411: memoryview objects are now hashable when the underlying object is hashable. - Issue #13338: Handle all enumerations in _Py_ANNOTATE_MEMORY_ORDER to allow compiling extension modules with -Wswitch-enum on gcc. Initial patch by Floris Bruynooghe. - Issue #10227: Add an allocation cache for a single slice object. Patch by Stefan Behnel. - Issue #13393: BufferedReader.read1() now asks the full requested size to the raw stream instead of limiting itself to the buffer size. - Issue #13392: Writing a pyc file should now be atomic under Windows as well. - Issue #13333: The UTF-7 decoder now accepts lone surrogates (the encoder already accepts them). - Issue #13389: Full garbage collection passes now clear the freelists for list and dict objects. They already cleared other freelists in the interpreter. - Issue #13327: Remove the need for an explicit None as the second argument to os.utime, os.lutimes, os.futimes, os.futimens, os.futimesat, in order to update to the current time. Also added keyword argument handling to os.utimensat in order to remove the need for explicit None. - Issue #13350: Simplify some C code by replacing most usages of PyUnicode_Format by PyUnicode_FromFormat. - Issue #13342: input() used to ignore sys.stdin's and sys.stdout's unicode error handler in interactive mode (when calling into PyOS_Readline()). - Issue #9896: Add start, stop, and step attributes to range objects. - Issue #13343: Fix a SystemError when a lambda expression uses a global variable in the default value of a keyword-only argument: ``lambda *, arg=GLOBAL_NAME: None`` - Issue #12797: Added custom opener parameter to builtin open() and FileIO.open(). - Issue #10519: Avoid unnecessary recursive function calls in setobject.c. - Issue #10363: Deallocate global locks in Py_Finalize(). - Issue #13018: Fix reference leaks in error paths in dictobject.c. Patch by Suman Saha. - Issue #13201: Define '==' and '!=' to compare range objects based on the sequence of values they define (instead of comparing based on object identity). - Issue #1294232: In a few cases involving metaclass inheritance, the interpreter would sometimes invoke the wrong metaclass when building a new class object. These cases now behave correctly. Patch by Daniel Urban. - Issue #12753: Add support for Unicode name aliases and named sequences. Both ``unicodedata.lookup()`` and '\N{...}' now resolve aliases, and ``unicodedata.lookup()`` resolves named sequences too. - Issue #12170: The count(), find(), rfind(), index() and rindex() methods of bytes and bytearray objects now accept an integer between 0 and 255 as their first argument. Patch by Petri Lehtinen. - Issue #12604: VTRACE macro expanded to no-op in _sre.c to avoid compiler warnings. Patch by Josh Triplett and Petri Lehtinen. - Issue #12281: Rewrite the MBCS codec to handle correctly replace and ignore error handlers on all Windows versions. The MBCS codec is now supporting all error handlers, instead of only replace to encode and ignore to decode. - Issue #13188: When called without an explicit traceback argument, generator.throw() now gets the traceback from the passed exception's ``__traceback__`` attribute. Patch by Petri Lehtinen. - Issue #13146: Writing a pyc file is now atomic under POSIX. - Issue #7833: Extension modules built using distutils on Windows will no longer include a "manifest" to prevent them failing at import time in some embedded situations. - PEP 3151 / issue #12555: reworking the OS and IO exception hierarchy. - Add internal API for static strings (_Py_identifier et al.). - Issue #13063: the Windows error ERROR_NO_DATA (numbered 232 and described as "The pipe is being closed") is now mapped to POSIX errno EPIPE (previously EINVAL). - Issue #12911: Fix memory consumption when calculating the repr() of huge tuples or lists. - PEP 393: flexible string representation. Thanks to Torsten Becker for the initial implementation, and Victor Stinner for various bug fixes. - Issue #14081: The 'sep' and 'maxsplit' parameter to str.split, bytes.split, and bytearray.split may now be passed as keyword arguments. - Issue #13012: The 'keepends' parameter to str.splitlines may now be passed as a keyword argument: "my_string.splitlines(keepends=True)". The same change also applies to bytes.splitlines and bytearray.splitlines. - Issue #7732: Don't open a directory as a file anymore while importing a module. Ignore the directory if its name matches the module name (e.g. "__init__.py") and raise an ImportError instead. - Issue #13021: Missing decref on an error path. Thanks to Suman Saha for finding the bug and providing a patch. - Issue #12973: Fix overflow checks that relied on undefined behaviour in list_repeat (listobject.c) and islice_next (itertoolsmodule.c). These bugs caused test failures with recent versions of Clang. - Issue #12904: os.utime, os.futimes, os.lutimes, and os.futimesat now write atime and mtime with nanosecond precision on modern POSIX platforms. - Issue #12802: the Windows error ERROR_DIRECTORY (numbered 267) is now mapped to POSIX errno ENOTDIR (previously EINVAL). - Issue #9200: The str.is* methods now work with strings that contain non-BMP characters even in narrow Unicode builds. - Issue #12791: Break reference cycles early when a generator exits with an exception. - Issue #12773: Make __doc__ mutable on user-defined classes. - Issue #12766: Raise a ValueError when creating a class with a class variable that conflicts with a name in __slots__. - Issue #12266: Fix str.capitalize() to correctly uppercase/lowercase titlecased and cased non-letter characters. - Issue #12732: In narrow unicode builds, allow Unicode identifiers which fall outside the BMP. - Issue #12575: Validate user-generated AST before it is compiled. - Make type(None), type(Ellipsis), and type(NotImplemented) callable. They return the respective singleton instances. - Forbid summing bytes with sum(). - Verify the types of AST strings and identifiers provided by the user before compiling them. - Issue #12647: The None object now has a __bool__() method that returns False. Formerly, bool(None) returned False only because of special case logic in PyObject_IsTrue(). - Issue #12579: str.format_map() now raises a ValueError if used on a format string that contains positional fields. Initial patch by Julian Berman. - Issue #10271: Allow warnings.showwarning() be any callable. - Issue #11627: Fix segfault when __new__ on an exception returns a non-exception class. - Issue #12149: Update the method cache after a type's dictionary gets cleared by the garbage collector. This fixes a segfault when an instance and its type get caught in a reference cycle, and the instance's deallocator calls one of the methods on the type (e.g. when subclassing IOBase). Diagnosis and patch by Davide Rizzo. - Issue #9611, Issue #9015: FileIO.read() clamps the length to INT_MAX on Windows. - Issue #9642: Uniformize the tests on the availability of the mbcs codec, add a new HAVE_MBCS define. - Issue #9642: Fix filesystem encoding initialization: use the ANSI code page on Windows if the mbcs codec is not available, and fail with a fatal error if we cannot get the locale encoding (if nl_langinfo(CODESET) is not available) instead of using UTF-8. - When a generator yields, do not retain the caller's exception state on the generator. - Issue #12475: Prevent generators from leaking their exception state into the caller's frame as they return for the last time. - Issue #12291: You can now load multiple marshalled objects from a stream, with other data interleaved between marshalled objects. - Issue #12356: When required positional or keyword-only arguments are not given, produce an informative error message which includes the name(s) of the missing arguments. - Issue #12370: Fix super with no arguments when __class__ is overridden in the class body. - Issue #12084: os.stat on Windows now works properly with relative symbolic links when called from any directory. - Loosen type restrictions on the __dir__ method. __dir__ can now return any sequence, which will be converted to a list and sorted by dir(). - Issue #12265: Make error messages produced by passing an invalid set of arguments to a function more informative. - Issue #12225: Still allow Python to build if Python is not in its hg repo or mercurial is not installed. - Issue #1195: my_fgets() now always clears errors before calling fgets(). Fix the following case: sys.stdin.read() stopped with CTRL+d (end of file), raw_input() interrupted by CTRL+c. - Issue #12216: Allow unexpected EOF errors to happen on any line of the file. - Issue #12199: The TryExcept and TryFinally and AST nodes have been unified into a Try node. - Issue #9670: Increase the default stack size for secondary threads on Mac OS X and FreeBSD to reduce the chances of a crash instead of a "maximum recursion depth" RuntimeError exception. (patch by Ronald Oussoren) - Issue #12106: The use of the multiple-with shorthand syntax is now reflected in the AST. - Issue #12190: Try to use the same filename object when compiling unmarshalling a code objects in the same file. - Issue #12166: Move implementations of dir() specialized for various types into the __dir__() methods of those types. - Issue #5715: In socketserver, close the server socket in the child process. - Correct lookup of __dir__ on objects. Among other things, this causes errors besides AttributeError found on lookup to be propagated. - Issue #12060: Use sig_atomic_t type and volatile keyword in the signal module. Patch written by Charles-François Natali. - Issue #1746656: Added the if_nameindex, if_indextoname, if_nametoindex methods to the socket module. - Issue #12044: Fixed subprocess.Popen when used as a context manager to wait for the process to end when exiting the context to avoid unintentionally leaving zombie processes around. - Issue #1195: Fix input() if it is interrupted by CTRL+d and then CTRL+c, clear the end-of-file indicator after CTRL+d. - Issue #1856: Avoid crashes and lockups when daemon threads run while the interpreter is shutting down; instead, these threads are now killed when they try to take the GIL. - Issue #9756: When calling a method descriptor or a slot wrapper descriptor, the check of the object type doesn't read the __class__ attribute anymore. Fix a crash if a class override its __class__ attribute (e.g. a proxy of the str type). Patch written by Andreas Stührk. - Issue #10517: After fork(), reinitialize the TLS used by the PyGILState_* APIs, to avoid a crash with the pthread implementation in RHEL 5. Patch by Charles-François Natali. - Issue #10914: Initialize correctly the filesystem codec when creating a new subinterpreter to fix a bootstrap issue with codecs implemented in Python, as the ISO-8859-15 codec. - Issue #11918: OS/2 and VMS are no more supported because of the lack of maintainer. - Issue #6780: fix starts/endswith error message to mention that tuples are accepted too. - Issue #5057: fix a bug in the peepholer that led to non-portable pyc files between narrow and wide builds while optimizing BINARY_SUBSCR on non-BMP chars (e.g. "\U00012345"[0]). - Issue #11845: Fix typo in rangeobject.c that caused a crash in compute_slice_indices. Patch by Daniel Urban. - Issue #5673: Added a `timeout` keyword argument to subprocess.Popen.wait, subprocess.Popen.communicated, subprocess.call, subprocess.check_call, and subprocess.check_output. If the blocking operation takes more than `timeout` seconds, the `subprocess.TimeoutExpired` exception is raised. - Issue #11650: PyOS_StdioReadline() retries fgets() if it was interrupted (EINTR), for example if the program is stopped with CTRL+z on Mac OS X. Patch written by Charles-Francois Natali. - Issue #9319: Include the filename in "Non-UTF8 code ..." syntax error. - Issue #10785: Store the filename as Unicode in the Python parser. - Issue #11619: _PyImport_LoadDynamicModule() doesn't encode the path to bytes on Windows. - Issue #10998: Remove mentions of -Q, sys.flags.division_warning and Py_DivisionWarningFlag left over from Python 2. - Issue #11244: Remove an unnecessary peepholer check that was preventing negative zeros from being constant-folded properly. - Issue #11395: io.FileIO().write() clamps the data length to 32,767 bytes on Windows if the file is a TTY to workaround a Windows bug. The Windows console returns an error (12: not enough space error) on writing into stdout if stdout mode is binary and the length is greater than 66,000 bytes (or less, depending on heap usage). - Issue #11320: fix bogus memory management in Modules/getpath.c, leading to a possible crash when calling Py_SetPath(). - Issue #11432: A bug was introduced in subprocess.Popen on posix systems with 3.2.0 where the stdout or stderr file descriptor being the same as the stdin file descriptor would raise an exception. webbrowser.open would fail. fixed. - Issue #9856: Change object.__format__ with a non-empty format string to be a DeprecationWarning. In 3.2 it was a PendingDeprecationWarning. In 3.4 it will be a TypeError. - Issue #11244: The peephole optimizer is now able to constant-fold arbitrarily complex expressions. This also fixes a 3.2 regression where operations involving negative numbers were not constant-folded. - Issue #11450: Don't truncate hg version info in Py_GetBuildInfo() when there are many tags (e.g. when using mq). Patch by Nadeem Vawda. - Issue #11335: Fixed a memory leak in list.sort when the key function throws an exception. - Issue #8923: When a string is encoded to UTF-8 in strict mode, the result is cached into the object. Examples: str.encode(), str.encode('utf-8'), PyUnicode_AsUTF8String() and PyUnicode_AsEncodedString(unicode, "utf-8", NULL). - Issue #10829: Refactor PyUnicode_FromFormat(), use the same function to parse the format string in the 3 steps, fix crashes on invalid format strings. - Issue #13007: whichdb should recognize gdbm 1.9 magic numbers. - Issue #11286: Raise a ValueError from calling PyMemoryView_FromBuffer with a buffer struct having a NULL data pointer. - Issue #11272: On Windows, input() strips '\r' (and not only '\n'), and sys.stdin uses universal newline (replace '\r\n' by '\n'). - Issue #11828: startswith and endswith now accept None as slice index. Patch by Torsten Becker. - Issue #11168: Remove filename debug variable from PyEval_EvalFrameEx(). It encoded the Unicode filename to UTF-8, but the encoding fails on undecodable filename (on surrogate characters) which raises an unexpected UnicodeEncodeError on recursion limit. - Issue #11187: Remove bootstrap code (use ASCII) of PyUnicode_AsEncodedString(), it was replaced by a better fallback (use the locale encoding) in PyUnicode_EncodeFSDefault(). - Check for NULL result in PyType_FromSpec. - Issue #10516: New copy() and clear() methods for lists and bytearrays. - Issue #11386: bytearray.pop() now throws IndexError when the bytearray is empty, instead of OverflowError. - Issue #12380: The rjust, ljust and center methods of bytes and bytearray now accept a bytearray argument. Library ------- - Issue #14195: An issue that caused weakref.WeakSet instances to incorrectly return True for a WeakSet instance 'a' in both 'a < a' and 'a > a' has been fixed. - Issue #14166: Pickler objects now have an optional ``dispatch_table`` attribute which allows setting custom per-pickler reduction functions. Patch by sbt. - Issue #14177: marshal.loads() now raises TypeError when given a unicode string. Patch by Guilherme Gonçalves. - Issue #13550: Remove the debug machinery from the threading module: remove verbose arguments from all threading classes and functions. - Issue #14159: Fix the len() of weak containers (WeakSet, WeakKeyDictionary, WeakValueDictionary) to return a better approximation when some objects are dead or dying. Moreover, the implementation is now O(1) rather than O(n). - Issue #11841: Fix comparison bug with 'rc' versions in packaging.version. Patch by Filip Gruszczyński. - Issue #6884: Fix long-standing bugs with MANIFEST.in parsing in distutils on Windows. Also fixed in packaging. - Issue #8033: sqlite3: Fix 64-bit integer handling in user functions on 32-bit architectures. Initial patch by Philippe Devalkeneer. - HTMLParser is now able to handle slashes in the start tag. - Issue #13641: Decoding functions in the base64 module now accept ASCII-only unicode strings. Patch by Catalin Iacob. - Issue #14043: Speed up importlib's _FileFinder by at least 8x, and add a new importlib.invalidate_caches() function. - Issue #14001: CVE-2012-0845: xmlrpc: Fix an endless loop in SimpleXMLRPCServer upon malformed POST request. - Issue #13961: Move importlib over to using os.replace() for atomic renaming. - Do away with ambiguous level values (as suggested by PEP 328) in importlib.__import__() by raising ValueError when level < 0. - Issue #2489: pty.spawn could consume 100% cpu when it encountered an EOF. - Issue #13014: Fix a possible reference leak in SSLSocket.getpeercert(). - Issue #13777: Add PF_SYSTEM sockets on OS X. Patch by Michael Goderbauer. - Issue #13015: Fix a possible reference leak in defaultdict.__repr__. Patch by Suman Saha. - Issue #1326113: distutils' and packaging's build_ext commands option now correctly parses multiple values (separated by whitespace or commas) given to their --libraries option. - Issue #10287: nntplib now queries the server's CAPABILITIES first before sending MODE READER, and only sends it if not already in READER mode. Patch by Hynek Schlawack. - Issue #13993: HTMLParser is now able to handle broken end tags when strict=False. - Issue #13930: lib2to3 now supports writing converted output files to another directory tree as well as copying unchanged files and altering the file suffix. - Issue #9750: Fix sqlite3.Connection.iterdump on tables and fields with a name that is a keyword or contains quotes. Patch by Marko Kohtala. - Issue #10287: nntplib now queries the server's CAPABILITIES again after authenticating (since the result may change, according to RFC 4643). Patch by Hynek Schlawack. - Issue #13590: On OS X 10.7 and 10.6 with Xcode 4.2, building Distutils-based packages with C extension modules may fail because Apple has removed gcc-4.2, the version used to build python.org 64-bit/32-bit Pythons. If the user does not explicitly override the default C compiler by setting the CC environment variable, Distutils will now attempt to compile extension modules with clang if gcc-4.2 is required but not found. Also as a convenience, if the user does explicitly set CC, substitute its value as the default compiler in the Distutils LDSHARED configuration variable for OS X. (Note, the python.org 32-bit-only Pythons use gcc-4.0 and the 10.4u SDK, neither of which are available in Xcode 4. This change does not attempt to override settings to support their use with Xcode 4.) - Issue #13960: HTMLParser is now able to handle broken comments when strict=False. - When '' is a path (e.g. in sys.path), make sure __file__ uses the current working directory instead of '' in importlib. - Issue #13609: Add two functions to query the terminal size: os.get_terminal_size (low level) and shutil.get_terminal_size (high level). Patch by Zbigniew Jędrzejewski-Szmek. - Issue #13845: On Windows, time.time() now uses GetSystemTimeAsFileTime() instead of ftime() to have a resolution of 100 ns instead of 1 ms (the clock accuracy is between 0.5 ms and 15 ms). - Issue #13846: Add time.monotonic(), monotonic clock. - Issue #8184: multiprocessing: On Windows, don't set SO_REUSEADDR on Connection sockets, and set FILE_FLAG_FIRST_PIPE_INSTANCE on named pipes, to make sure two listeners can't bind to the same socket/pipe (or any existing socket/pipe). - Issue #10811: Fix recursive usage of cursors. Instead of crashing, raise a ProgrammingError now. - Issue #13734: Add os.fwalk(), a directory walking function yielding file descriptors. - Issue #2945: Make the distutils upload command aware of bdist_rpm products. - Issue #13712: pysetup create should not convert package_data to extra_files. - Issue #11805: package_data in setup.cfg should allow more than one value. - Issue #13676: Handle strings with embedded zeros correctly in sqlite3. - Issue #8828: Add new function os.replace(), for cross-platform renaming with overwriting. - Issue #13848: open() and the FileIO constructor now check for NUL characters in the file name. Patch by Hynek Schlawack. - Issue #13806: The size check in audioop decompression functions was too strict and could reject valid compressed data. Patch by Oleg Plakhotnyuk. - Issue #13812: When a multiprocessing Process child raises an exception, flush stderr after printing the exception traceback. - Issue #13885: CVE-2011-3389: the _ssl module would always disable the CBC IV attack countermeasure. - Issue #13847: time.localtime() and time.gmtime() now raise an OSError instead of ValueError on failure. time.ctime() and time.asctime() now raises an OSError if localtime() failed. time.clock() now raises a RuntimeError if the processor time used is not available or its value cannot be represented - Issue #13772: In os.symlink() under Windows, do not try to guess the link target's type (file or directory). The detection was buggy and made the call non-atomic (therefore prone to race conditions). - Issue #6631: Disallow relative file paths in urllib urlopen methods. - Issue #13722: Avoid silencing ImportErrors when initializing the codecs registry. - Issue #13781: Fix GzipFile bug that caused an exception to be raised when opening for writing using a fileobj returned by os.fdopen(). - Issue #13803: Under Solaris, distutils doesn't include bitness in the directory name. - Issue #10278: Add time.wallclock() function, monotonic clock. - Issue #13809: Fix regression where bz2 module wouldn't work when threads are disabled. Original patch by Amaury Forgeot d'Arc. - Issue #13589: Fix some serialization primitives in the aifc module. Patch by Oleg Plakhotnyuk. - Issue #13642: Unquote before b64encoding user:password during Basic Authentication. Patch contributed by Joonas Kuorilehto. - Issue #12364: Fix a hang in concurrent.futures.ProcessPoolExecutor. The hang would occur when retrieving the result of a scheduled future after the executor had been shut down. - Issue #13502: threading: Fix a race condition in Event.wait() that made it return False when the event was set and cleared right after. - Issue #9993: When the source and destination are on different filesystems, and the source is a symlink, shutil.move() now recreates a symlink on the destination instead of copying the file contents. Patch by Jonathan Niehof and Hynek Schlawack. - Issue #12926: Fix a bug in tarfile's link extraction. - Issue #13696: Fix the 302 Relative URL Redirection problem. - Issue #13636: Weak ciphers are now disabled by default in the ssl module (except when SSLv2 is explicitly asked for). - Issue #12715: Add an optional symlinks argument to shutil functions (copyfile, copymode, copystat, copy, copy2). When that parameter is true, symlinks aren't dereferenced and the operation instead acts on the symlink itself (or creates one, if relevant). Patch by Hynek Schlawack. - Add a flags parameter to select.epoll. - Issue #13626: Add support for SSL Diffie-Hellman key exchange, through the SSLContext.load_dh_params() method and the ssl.OP_SINGLE_DH_USE option. - Issue #11006: Don't issue low level warning in subprocess when pipe2() fails. - Issue #13620: Support for Chrome browser in webbrowser. Patch contributed by Arnaud Calmettes. - Issue #11829: Fix code execution holes in inspect.getattr_static for metaclasses with metaclasses. Patch by Andreas Stührk. - Issue #12708: Add starmap() and starmap_async() methods (similar to itertools.starmap()) to multiprocessing.Pool. Patch by Hynek Schlawack. - Issue #1785: Fix inspect and pydoc with misbehaving descriptors. - Issue #13637: "a2b" functions in the binascii module now accept ASCII-only unicode strings. - Issue #13634: Add support for querying and disabling SSL compression. - Issue #13627: Add support for SSL Elliptic Curve-based Diffie-Hellman key exchange, through the SSLContext.set_ecdh_curve() method and the ssl.OP_SINGLE_ECDH_USE option. - Issue #13635: Add ssl.OP_CIPHER_SERVER_PREFERENCE, so that SSL servers choose the cipher based on their own preferences, rather than on the client's. - Issue #11813: Fix inspect.getattr_static for modules. Patch by Andreas Stührk. - Issue #7502: Fix equality comparison for DocTestCase instances. Patch by Cédric Krier. - Issue #11870: threading: Properly reinitialize threads internal locks and condition variables to avoid deadlocks in child processes. - Issue #8035: urllib: Fix a bug where the client could remain stuck after a redirection or an error. - Issue #13560: os.strerror() now uses the current locale encoding instead of UTF-8. - Issue #8373: The filesystem path of AF_UNIX sockets now uses the filesystem encoding and the surrogateescape error handler, rather than UTF-8. Patch by David Watson. - Issue #10350: Read and save errno before calling a function which might overwrite it. Original patch by Hallvard B Furuseth. - Issue #11610: Introduce a more general way to declare abstract properties. - Issue #13591: A bug in importlib has been fixed that caused import_module to load a module twice. - Issue #13449: sched.scheduler.run() method has a new "blocking" parameter which when set to False makes run() execute the scheduled events due to expire soonest (if any) and then return. Patch by Giampaolo Rodolà. - Issue #8684: sched.scheduler class can be safely used in multi-threaded environments. Patch by Josiah Carlson and Giampaolo Rodolà. - Alias resource.error to OSError ala PEP 3151. - Issue #5689: Add support for lzma compression to the tarfile module. - Issue #13248: Turn 3.2's PendingDeprecationWarning into 3.3's DeprecationWarning. It covers 'cgi.escape', 'importlib.abc.PyLoader', 'importlib.abc.PyPycLoader', 'nntplib.NNTP.xgtitle', 'nntplib.NNTP.xpath', and private attributes of 'smtpd.SMTPChannel'. - Issue #5905, Issue #13560: time.strftime() is now using the current locale encoding, instead of UTF-8, if the wcsftime() function is not available. - Issue #13464: Add a readinto() method to http.client.HTTPResponse. Patch by Jon Kuhn. - tarfile.py: Correctly detect bzip2 compressed streams with blocksizes other than 900k. - Issue #13439: Fix many errors in turtle docstrings. - Issue #6715: Add a module 'lzma' for compression using the LZMA algorithm. Thanks to Per Øyvind Karlsen for the initial implementation. - Issue #13487: Make inspect.getmodule robust against changes done to sys.modules while it is iterating over it. - Issue #12618: Fix a bug that prevented py_compile from creating byte compiled files in the current directory. Initial patch by Sjoerd de Vries. - Issue #13444: When stdout has been closed explicitly, we should not attempt to flush it at shutdown and print an error. - Issue #12567: The curses module uses Unicode functions for Unicode arguments when it is linked to the ncurses library. It encodes also Unicode strings to the locale encoding instead of UTF-8. - Issue #12856: Ensure child processes do not inherit the parent's random seed for filename generation in the tempfile module. Patch by Brian Harring. - Issue #9957: SpooledTemporaryFile.truncate() now accepts an optional size parameter, as other file-like objects. Patch by Ryan Kelly. - Issue #13458: Fix a memory leak in the ssl module when decoding a certificate with a subjectAltName. Patch by Robert Xiao. - Issue #13415: os.unsetenv() doesn't ignore errors anymore. - Issue #13245: sched.scheduler class constructor's timefunc and delayfunct parameters are now optional. scheduler.enter and scheduler.enterabs methods gained a new kwargs parameter. Patch contributed by Chris Clark. - Issue #12328: Under Windows, refactor handling of Ctrl-C events and make _multiprocessing.win32.WaitForMultipleObjects interruptible when the wait_flag parameter is false. Patch by sbt. - Issue #13322: Fix BufferedWriter.write() to ensure that BlockingIOError is raised when the wrapped raw file is non-blocking and the write would block. Previous code assumed that the raw write() would raise BlockingIOError, but RawIOBase.write() is defined to returned None when the call would block. Patch by sbt. - Issue #13358: HTMLParser now calls handle_data only once for each CDATA. - Issue #4147: minidom's toprettyxml no longer adds whitespace around a text node when it is the only child of an element. Initial patch by Dan Kenigsberg. - Issue #13374: The Windows bytes API has been deprecated in the os module. Use Unicode filenames instead of bytes filenames to not depend on the ANSI code page anymore and to support any filename. - Issue #13297: Use bytes type to send and receive binary data through XMLRPC. - Issue #6397: Support "/dev/poll" polling objects in select module, under Solaris & derivatives. - Issues #1745761, #755670, #13357, #12629, #1200313: HTMLParser now correctly handles non-valid attributes, including adjacent and unquoted attributes. - Issue #13193: Fix distutils.filelist.FileList and packaging.manifest.Manifest under Windows. - Issue #13384: Remove unnecessary __future__ import in Lib/random.py - Issue #13149: Speed up append-only StringIO objects. - Issue #13373: multiprocessing.Queue.get() could sometimes block indefinitely when called with a timeout. Patch by Arnaud Ysmal. - Issue #13254: Fix Maildir initialization so that maildir contents are read correctly. - Issue #3067: locale.setlocale() now raises TypeError if the second argument is an invalid iterable. Its documentation and docstring were also updated. Initial patch by Jyrki Pulliainen. - Issue #13140: Fix the daemon_threads attribute of ThreadingMixIn. - Issue #13339: Fix compile error in posixmodule.c due to missing semicolon. Thanks to Robert Xiao. - Byte compilation in packaging is now isolated from the calling Python -B or -O options, instead of being disallowed under -B or buggy under -O. - Issue #10570: curses.putp() and curses.tparm() are now expecting a byte string, instead of a Unicode string. - Issue #13295: http.server now produces valid HTML 4.01 strict. - Issue #2892: preserve iterparse events in case of SyntaxError. - Issue #13287: urllib.request and urllib.error now contains an __all__ attribute to expose only relevant classes and functions. Patch by Florent Xicluna. - Issue #670664: Fix HTMLParser to correctly handle the content of ``<script>...</script>`` and ``<style>...</style>``. - Issue #10817: Fix urlretrieve function to raise ContentTooShortError even when reporthook is None. Patch by Jyrki Pulliainen. - Fix the xmlrpc.client user agent to return something similar to urllib.request user agent: "Python-xmlrpc/3.3". - Issue #13293: Better error message when trying to marshal bytes using xmlrpc.client. - Issue #13291: NameError in xmlrpc package. - Issue #13258: Use callable() built-in in the standard library. - Issue #13273: fix a bug that prevented HTMLParser to properly detect some tags when strict=False. - Issue #11183: Add finer-grained exceptions to the ssl module, so that you don't have to inspect the exception's attributes in the common case. - Issue #13216: Add cp65001 codec, the Windows UTF-8 (CP_UTF8). - Issue #13226: Add RTLD_xxx constants to the os module. These constants can be used with sys.setdlopenflags(). - Issue #10278: Add clock_getres(), clock_gettime() and CLOCK_xxx constants to the time module. time.clock_gettime(time.CLOCK_MONOTONIC) provides a monotonic clock - Issue #10332: multiprocessing: fix a race condition when a Pool is closed before all tasks have completed. - Issue #13255: wrong docstrings in array module. - Issue #8540: Remove deprecated Context._clamp attribute in Decimal module. - Issue #13235: Added DeprecationWarning to logging.warn() method and function. - Issue #9168: now smtpd is able to bind privileged port. - Issue #12529: fix cgi.parse_header issue on strings with double-quotes and semicolons together. Patch by Ben Darnell and Petri Lehtinen. - Issue #13227: functools.lru_cache() now has an option to distinguish calls with different argument types. - Issue #6090: zipfile raises a ValueError when a document with a timestamp earlier than 1980 is provided. Patch contributed by Petri Lehtinen. - Issue #13150: sysconfig no longer parses the Makefile and config.h files when imported, instead doing it at build time. This makes importing sysconfig faster and reduces Python startup time by 20%. - Issue #12448: smtplib now flushes stdout while running ``python -m smtplib`` in order to display the prompt correctly. - Issue #12454: The mailbox module is now using ASCII, instead of the locale encoding, to read and write .mh_sequences files. - Issue #13194: zlib.compressobj().copy() and zlib.decompressobj().copy() are now available on Windows. - Issue #1673007: urllib.request now supports HEAD request via new method argument. Patch contributions by David Stanek, Patrick Westerhoff and Ezio Melotti. - Issue #12386: packaging does not fail anymore when writing the RESOURCES file. - Issue #13158: Fix decoding and encoding of GNU tar specific base-256 number fields in tarfile. - Issue #13025: mimetypes is now reading MIME types using the UTF-8 encoding, instead of the locale encoding. - Issue #10653: On Windows, use strftime() instead of wcsftime() because wcsftime() doesn't format time zone correctly. - Issue #13150: The tokenize module doesn't compile large regular expressions at startup anymore. - Issue #11171: Fix distutils.sysconfig.get_makefile_filename when Python was configured with different prefix and exec-prefix. - Issue #11254: Teach distutils and packaging to compile .pyc and .pyo files in PEP 3147-compliant __pycache__ directories. - Issue #7367: Fix pkgutil.walk_paths to skip directories whose contents cannot be read. - Issue #3163: The struct module gets new format characters 'n' and 'N' supporting C integer types ``ssize_t`` and ``size_t``, respectively. - Issue #13099: Fix sqlite3.Cursor.lastrowid under a Turkish locale. Reported and diagnosed by Thomas Kluyver. - Issue #13087: BufferedReader.seek() now always raises UnsupportedOperation if the underlying raw stream is unseekable, even if the seek could be satisfied using the internal buffer. Patch by John O'Connor. - Issue #7689: Allow pickling of dynamically created classes when their metaclass is registered with copyreg. Patch by Nicolas M. Thiéry and Craig Citro. - Issue #13034: When decoding some SSL certificates, the subjectAltName extension could be unreported. - Issue #12306: Expose the runtime version of the zlib C library as a constant, ZLIB_RUNTIME_VERSION, in the zlib module. Patch by Torsten Landschoff. - Issue #12959: Add collections.ChainMap to collections.__all__. - Issue #8933: distutils' PKG-INFO files and packaging's METADATA files will now correctly report Metadata-Version: 1.1 instead of 1.0 if a Classifier or Download-URL field is present. - Issue #12567: Add curses.unget_wch() function. Push a character so the next get_wch() will return it. - Issue #9561: distutils and packaging now writes egg-info files using UTF-8, instead of the locale encoding. - Issue #8286: The distutils command sdist will print a warning message instead of crashing when an invalid path is given in the manifest template. - Issue #12841: tarfile unnecessarily checked the existence of numerical user and group ids on extraction. If one of them did not exist the respective id of the current user (i.e. root) was used for the file and ownership information was lost. - Issue #12888: Fix a bug in HTMLParser.unescape that prevented it to escape more than 128 entities. Patch by Peter Otten. - Issue #12878: Expose a __dict__ attribute on io.IOBase and its subclasses. - Issue #12494: On error, call(), check_call(), check_output() and getstatusoutput() functions of the subprocess module now kill the process, read its status (to avoid zombis) and close pipes. - Issue #12720: Expose low-level Linux extended file attribute functions in os. - Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi now respect a --skip-build option given to bdist. The packaging commands were fixed too. - Issue #12847: Fix a crash with negative PUT and LONG_BINPUT arguments in the C pickle implementation. - Issue #11564: Avoid crashes when trying to pickle huge objects or containers (more than 2**31 items). Instead, in most cases, an OverflowError is raised. - Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is greater than FD_SETSIZE. - Issue #12839: Fix crash in zlib module due to version mismatch. Fix by Richard M. Tew. - Issue #9923: The mailcap module now correctly uses the platform path separator for the MAILCAP environment variable on non-POSIX platforms. - Issue #12835: Follow up to #6560 that unconditionally prevents use of the unencrypted sendmsg/recvmsg APIs on SSL wrapped sockets. Patch by David Watson. - Issue #12803: SSLContext.load_cert_chain() now accepts a password argument to be used if the private key is encrypted. Patch by Adam Simpkins. - Issue #11657: Fix sending file descriptors over 255 over a multiprocessing Pipe. - Issue #12811: tabnanny.check() now promptly closes checked files. Patch by Anthony Briggs. - Issue #6560: The sendmsg/recvmsg API is now exposed by the socket module when provided by the underlying platform, supporting processing of ancillary data in pure Python code. Patch by David Watson and Heiko Wundram. - Issue #12326: On Linux, sys.platform doesn't contain the major version anymore. It is now always 'linux', instead of 'linux2' or 'linux3' depending on the Linux version used to build Python. - Issue #12213: Fix a buffering bug with interleaved reads and writes that could appear on BufferedRandom streams. - Issue #12778: Reduce memory consumption when JSON-encoding a large container of many small objects. - Issue #12650: Fix a race condition where a subprocess.Popen could leak resources (FD/zombie) when killed at the wrong time. - Issue #12744: Fix inefficient representation of integers between 2**31 and 2**63 on systems with a 64-bit C "long". - Issue #12646: Add an 'eof' attribute to zlib.Decompress, to make it easier to detect truncated input streams. - Issue #11513: Fix exception handling ``tarfile.TarFile.gzopen()`` when the file cannot be opened. - Issue #12687: Fix a possible buffering bug when unpickling text mode (protocol 0, mostly) pickles. - Issue #10087: Fix the html output format of the calendar module. - Issue #13121: add support for inplace math operators to collections.Counter. - Add support for unary plus and unary minus to collections.Counter. - Issue #12683: urlparse updated to include svn as schemes that uses relative paths. (svn from 1.5 onwards support relative path). - Issue #12655: Expose functions from sched.h in the os module: sched_yield(), sched_setscheduler(), sched_getscheduler(), sched_setparam(), sched_get_min_priority(), sched_get_max_priority(), sched_rr_get_interval(), sched_getaffinity(), sched_setaffinity(). - Add ThreadError to threading.__all__. - Issues #11104, #8688: Fix the behavior of distutils' sdist command with manually-maintained MANIFEST files. - Issue #11281: smtplib.STMP gets source_address parameter, which adds the ability to bind to specific source address on a machine with multiple interfaces. Patch by Paulo Scardine. - Issue #12464: tempfile.TemporaryDirectory.cleanup() should not follow symlinks: fix it. Patch by Petri Lehtinen. - Issue #8887: "pydoc somebuiltin.somemethod" (or help('somebuiltin.somemethod') in Python code) now finds the doc of the method. - Issue #10968: Remove indirection in threading. The public names (Event, Condition, etc.) used to be factory functions returning instances of hidden classes (_Event, _Condition, etc.), because (if Guido recalls correctly) this code pre-dates the ability to subclass extension types. It is now possible to inherit from these classes, without having to import the private underscored names like multiprocessing did. - Issue #9723: Add shlex.quote functions, to escape filenames and command lines. - Issue #12603: Fix pydoc.synopsis() on files with non-negative st_mtime. - Issue #12514: Use try/finally to assure the timeit module restores garbage collections when it is done. - Issue #12607: In subprocess, fix issue where if stdin, stdout or stderr is given as a low fd, it gets overwritten. - Issue #12576: Fix urlopen behavior on sites which do not send (or obfuscates) ``Connection: close`` header. - Issue #12560: Build libpython.so on OpenBSD. Patch by Stefan Sperling. - Issue #1813: Fix codec lookup under Turkish locales. - Issue #12591: Improve support of "universal newlines" in the subprocess module: the piped streams can now be properly read from or written to. - Issue #12591: Allow io.TextIOWrapper to work with raw IO objects (without a read1() method), and add a *write_through* parameter to mandate unbuffered writes. - Issue #10883: Fix socket leaks in urllib.request when using FTP. - Issue #12592: Make Python build on OpenBSD 5 (and future major releases). - Issue #12372: POSIX semaphores are broken on AIX: don't use them. - Issue #12551: Provide a get_channel_binding() method on SSL sockets so as to get channel binding data for the current SSL session (only the "tls-unique" channel binding is implemented). This allows the implementation of certain authentication mechanisms such as SCRAM-SHA-1-PLUS. Patch by Jacek Konieczny. - Issue #665194: email.utils now has format_datetime and parsedate_to_datetime functions, allowing for round tripping of RFC2822 format dates. - Issue #12571: Add a plat-linux3 directory mirroring the plat-linux2 directory, so that "import DLFCN" and other similar imports work on Linux 3.0. - Issue #7484: smtplib no longer puts <> around addresses in VRFY and EXPN commands; they aren't required and in fact postfix doesn't support that form. - Issue #12273: Remove ast.__version__. AST changes can be accounted for by checking sys.version_info or sys._mercurial. - Silence spurious "broken pipe" tracebacks when shutting down a ProcessPoolExecutor. - Fix potential resource leaks in concurrent.futures.ProcessPoolExecutor by joining all queues and processes when shutdown() is called. - Issue #11603: Fix a crash when __str__ is rebound as __repr__. Patch by Andreas Stührk. - Issue #11321: Fix a crash with multiple imports of the _pickle module when embedding Python. Patch by Andreas Stührk. - Issue #6755: Add get_wch() method to curses.window class. Patch by Iñigo Serna. - Add cgi.closelog() function to close the log file. - Issue #12502: asyncore: fix polling loop with AF_UNIX sockets. - Issue #4376: ctypes now supports nested structures in an endian different than the parent structure. Patch by Vlad Riscutia. - Raise ValueError when attempting to set the _CHUNK_SIZE attribute of a TextIOWrapper to a huge value, not TypeError. - Issue #12504: Close file handles in a timely manner in packaging.database. This fixes a bug with the remove (uninstall) feature on Windows. - Issues #12169 and #10510: Factor out code used by various packaging commands to make HTTP POST requests, and make sure it uses CRLF. - Issue #12016: Multibyte CJK decoders now resynchronize faster. They only ignore the first byte of an invalid byte sequence. For example, b'\xff\n'.decode('gb2312', 'replace') gives '\ufffd\n' instead of '\ufffd'. - Issue #12459: time.sleep() now raises a ValueError if the sleep length is negative, instead of an infinite sleep on Windows or raising an IOError on Linux for example, to have the same behaviour on all platforms. - Issue #12451: pydoc: html_getfile() now uses tokenize.open() to support Python scripts using an encoding different than UTF-8 (read the coding cookie of the script). - Issue #12493: subprocess: Popen.communicate() now also handles EINTR errors if the process has only one pipe. - Issue #12467: warnings: fix a race condition if a warning is emitted at shutdown, if globals()['__file__'] is None. - Issue #12451: pydoc: importfile() now opens the Python script in binary mode, instead of text mode using the locale encoding, to avoid encoding issues. - Issue #12451: runpy: run_path() now opens the Python script in binary mode, instead of text mode using the locale encoding, to support other encodings than UTF-8 (scripts using the coding cookie). - Issue #12451: xml.dom.pulldom: parse() now opens files in binary mode instead of the text mode (using the locale encoding) to avoid encoding issues. - Issue #12147: Adjust the new-in-3.2 smtplib.send_message method for better conformance to the RFCs: correctly handle Sender and Resent- headers. - Issue #12352: Fix a deadlock in multiprocessing.Heap when a block is freed by the garbage collector while the Heap lock is held. - Issue #12462: time.sleep() now immediately calls the (Python) signal handler if it is interrupted by a signal, instead of having to wait until the next instruction. - Issue #12442: new shutil.disk_usage function, providing total, used and free disk space statistics. - Issue #12451: The XInclude default loader of xml.etree now decodes files from UTF-8 instead of the locale encoding if the encoding is not specified. It now also opens XML files for the parser in binary mode instead of the text mode to avoid encoding issues. - Issue #12451: doctest.debug_script() doesn't create a temporary file anymore to avoid encoding issues. - Issue #12451: pydoc.synopsis() now reads the encoding cookie if available, to read the Python script from the right encoding. - Issue #12451: distutils now opens the setup script in binary mode to read the encoding cookie, instead of opening it in UTF-8. - Issue #9516: On Mac OS X, change Distutils to no longer globally attempt to check or set the MACOSX_DEPLOYMENT_TARGET environment variable for the interpreter process. This could cause failures in non-Distutils subprocesses and was unreliable since tests or user programs could modify the interpreter environment after Distutils set it. Instead, have Distutils set the deployment target only in the environment of each build subprocess. It is still possible to globally override the default by setting MACOSX_DEPLOYMENT_TARGET before launching the interpreter; its value must be greater or equal to the default value, the value with which the interpreter was built. Also, implement the same handling in packaging. - Issue #12422: In the copy module, don't store objects that are their own copy in the memo dict. - Issue #12303: Add sigwaitinfo() and sigtimedwait() to the signal module. - Issue #12404: Remove C89 incompatible code from mmap module. Patch by Akira Kitada. - Issue #1874: email now detects and reports as a defect the presence of any CTE other than 7bit, 8bit, or binary on a multipart. - Issue #12383: Fix subprocess module with env={}: don't copy the environment variables, start with an empty environment. - Issue #11637: Fix support for importing packaging setup hooks from the project directory. - Issue #6771: Moved the curses.wrapper function from the single-function wrapper module into __init__, eliminating the module. Since __init__ was already importing the function to curses.wrapper, there is no API change. - Issue #11584: email.header.decode_header no longer fails if the header passed to it is a Header object, and Header/make_header no longer fail if given binary unknown-8bit input. - Issue #11700: mailbox proxy object close methods can now be called multiple times without error. - Issue #11767: Correct file descriptor leak in mailbox's __getitem__ method. - Issue #12133: AbstractHTTPHandler.do_open() of urllib.request closes the HTTP connection if its getresponse() method fails with a socket error. Patch written by Ezio Melotti. - Issue #12240: Allow multiple setup hooks in packaging's setup.cfg files. Original patch by Erik Bray. - Issue #9284: Allow inspect.findsource() to find the source of doctest functions. - Issue #11595: Fix assorted bugs in packaging.util.cfg_to_args, a compatibility helper for the distutils-packaging transition. Original patch by Erik Bray. - Issue #12287: In ossaudiodev, check that the device isn't closed in several methods. - Issue #12009: Fixed regression in netrc file comment handling. - Issue #12246: Warn and fail when trying to install a third-party project from an uninstalled Python (built in a source checkout). Original patch by Tshepang Lekhonkhobe. - Issue #10694: zipfile now ignores garbage at the end of a zipfile. - Issue #12283: Fixed regression in smtplib quoting of leading dots in DATA. - Issue #10424: Argparse now includes the names of the missing required arguments in the missing arguments error message. - Issue #12168: SysLogHandler now allows NUL termination to be controlled using a new 'append_nul' attribute on the handler. - Issue #11583: Speed up os.path.isdir on Windows by using GetFileAttributes instead of os.stat. - Issue #12021: Make mmap's read() method argument optional. Patch by Petri Lehtinen. - Issue #9205: concurrent.futures.ProcessPoolExecutor now detects killed children and raises BrokenProcessPool in such a situation. Previously it would reliably freeze/deadlock. - Issue #12040: Expose a new attribute ``sentinel`` on instances of ``multiprocessing.Process``. Also, fix Process.join() to not use polling anymore, when given a timeout. - Issue #11893: Remove obsolete internal wrapper class ``SSLFakeFile`` in the smtplib module. Patch by Catalin Iacob. - Issue #12080: Fix a Decimal.power() case that took an unreasonably long time to compute. - Issue #12221: Remove __version__ attributes from pyexpat, pickle, tarfile, pydoc, tkinter, and xml.parsers.expat. This were useless version constants left over from the Mercurial transition - Named tuples now work correctly with vars(). - Issue #12085: Fix an attribute error in subprocess.Popen destructor if the constructor has failed, e.g. because of an undeclared keyword argument. Patch written by Oleg Oshmyan. - Issue #12028: Make threading._get_ident() public, rename it to threading.get_ident() and document it. This function was already used using _thread.get_ident(). - Issue #12171: IncrementalEncoder.reset() of CJK codecs (multibytecodec) calls encreset() instead of decreset(). - Issue #12218: Removed wsgiref.egg-info. - Issue #12196: Add pipe2() to the os module. - Issue #985064: Make plistlib more resilient to faulty input plists. Patch by Mher Movsisyan. - Issue #1625: BZ2File and bz2.decompress() now support multi-stream files. Initial patch by Nir Aides. - Issue #12175: BufferedReader.read(-1) now calls raw.readall() if available. - Issue #12175: FileIO.readall() now only reads the file position and size once. - Issue #12175: RawIOBase.readall() now returns None if read() returns None. - Issue #12175: FileIO.readall() now raises a ValueError instead of an IOError if the file is closed. - Issue #11109: New service_action method for BaseServer, used by ForkingMixin class for cleanup. Initial Patch by Justin Warkentin. - Issue #12045: Avoid duplicate execution of command in ctypes.util._get_soname(). Patch by Sijin Joseph. - Issue #10818: Remove the Tk GUI and the serve() function of the pydoc module, pydoc -g has been deprecated in Python 3.2 and it has a new enhanced web server. - Issue #1441530: In imaplib, read the data in one chunk to speed up large reads and simplify code. - Issue #12070: Fix the Makefile parser of the sysconfig module to handle correctly references to "bogus variable" (e.g. "prefix=$/opt/python"). - Issue #12100: Don't reset incremental encoders of CJK codecs at each call to their encode() method anymore, but continue to call the reset() method if the final argument is True. - Issue #12049: Add RAND_bytes() and RAND_pseudo_bytes() functions to the ssl module. - Issue #6501: os.device_encoding() returns None on Windows if the application has no console. - Issue #12105: Add O_CLOEXEC to the os module. - Issue #12079: Decimal('Infinity').fma(Decimal('0'), (3.91224318126786e+19+0j)) now raises TypeError (reflecting the invalid type of the 3rd argument) rather than Decimal.InvalidOperation. - Issue #12124: zipimport doesn't keep a reference to zlib.decompress() anymore to be able to unload the module. - Add the packaging module, an improved fork of distutils (also known as distutils2). - Issue #12065: connect_ex() on an SSL socket now returns the original errno when the socket's timeout expires (it used to return None). - Issue #8809: The SMTP_SSL constructor and SMTP.starttls() now support passing a ``context`` argument pointing to an ssl.SSLContext instance. Patch by Kasun Herath. - Issue #9516: Issue #9516: avoid errors in sysconfig when MACOSX_DEPLOYMENT_TARGET is set in shell. - Issue #8650: Make zlib module 64-bit clean. compress(), decompress() and their incremental counterparts now raise OverflowError if given an input larger than 4GB, instead of silently truncating the input and returning an incorrect result. - Issue #12050: zlib.decompressobj().decompress() now clears the unconsumed_tail attribute when called without a max_length argument. - Issue #12062: Fix a flushing bug when doing a certain type of I/O sequence on a file opened in read+write mode (namely: reading, seeking a bit forward, writing, then seeking before the previous write but still within buffered data, and writing again). - Issue #9971: Write an optimized implementation of BufferedReader.readinto(). Patch by John O'Connor. - Issue #11799: urllib.request Authentication Handlers will raise a ValueError when presented with an unsupported Authentication Scheme. Patch contributed by Yuval Greenfield. - Issue #10419, #6011: build_scripts command of distutils handles correctly non-ASCII path (path to the Python executable). Open and write the script in binary mode, but ensure that the shebang is decodable from UTF-8 and from the encoding of the script. - Issue #8498: In socket.accept(), allow specifying 0 as a backlog value in order to accept exactly one connection. Patch by Daniel Evers. - Issue #12011: signal.signal() and signal.siginterrupt() raise an OSError, instead of a RuntimeError: OSError has an errno attribute. - Issue #3709: add a flush_headers method to BaseHTTPRequestHandler, which manages the sending of headers to output stream and flushing the internal headers buffer. Patch contribution by Andrew Schaaf - Issue #11743: Rewrite multiprocessing connection classes in pure Python. - Issue #11164: Stop trying to use _xmlplus in the xml module. - Issue #11888: Add log2 function to math module. Patch written by Mark Dickinson. - Issue #12012: ssl.PROTOCOL_SSLv2 becomes optional. - Issue #8407: The signal handler writes the signal number as a single byte instead of a nul byte into the wakeup file descriptor. So it is possible to wait more than one signal and know which signals were raised. - Issue #8407: Add pthread_kill(), sigpending() and sigwait() functions to the signal module. - Issue #11927: SMTP_SSL now uses port 465 by default as documented. Patch by Kasun Herath. - Issue #12002: ftplib's abort() method raises TypeError. - Issue #11916: Add a number of MacOSX specific definitions to the errno module. Patch by Pierre Carrier. - Issue #11999: fixed sporadic sync failure mailbox.Maildir due to its trying to detect mtime changes by comparing to the system clock instead of to the previous value of the mtime. - Issue #11072: added MLSD command (RFC-3659) support to ftplib. - Issue #8808: The IMAP4_SSL constructor now allows passing an SSLContext parameter to control parameters of the secure channel. Patch by Sijin Joseph. - ntpath.samefile failed to notice that "a.txt" and "A.TXT" refer to the same file on Windows XP. As noticed in issue #10684. - Issue #12000: When a SSL certificate has a subjectAltName without any dNSName entry, ssl.match_hostname() should use the subject's commonName. Patch by Nicolas Bareil. - Issue #10775: assertRaises, assertRaisesRegex, assertWarns, and assertWarnsRegex now accept a keyword argument 'msg' when used as context managers. Initial patch by Winston Ewert. - Issue #10684: shutil.move used to delete a folder on case insensitive filesystems when the source and destination name where the same except for the case. - Issue #11647: objects created using contextlib.contextmanager now support more than one call to the function when used as a decorator. Initial patch by Ysj Ray. - Issue #11930: Removed deprecated time.accept2dyear variable. Removed year >= 1000 restriction from datetime.strftime. - logging: don't define QueueListener if Python has no thread support. - functools.cmp_to_key() now works with collections.Hashable(). - Issue #11277: mmap.mmap() calls fcntl(fd, F_FULLFSYNC) on Mac OS X to get around a mmap bug with sparse files. Patch written by Steffen Daode Nurpmeso. - Issue #8407: Add signal.pthread_sigmask() function to fetch and/or change the signal mask of the calling thread. - Issue #11858: configparser.ExtendedInterpolation expected lower-case section names. - Issue #11324: ConfigParser(interpolation=None) now works correctly. - Issue #11811: ssl.get_server_certificate() is now IPv6-compatible. Patch by Charles-François Natali. - Issue #11763: don't use difflib in TestCase.assertMultiLineEqual if the strings are too long. - Issue #11236: getpass.getpass responds to ctrl-c or ctrl-z on terminal. - Issue #11856: Speed up parsing of JSON numbers. - Issue #11005: threading.RLock()._release_save() raises a RuntimeError if the lock was not acquired. - Issue #11258: Speed up ctypes.util.find_library() under Linux by a factor of 5 to 10. Initial patch by Jonas H. - Issue #11382: Trivial system calls, such as dup() or pipe(), needn't release the GIL. Patch by Charles-François Natali. - Issue #11223: Add threading._info() function providing informations about the thread implementation. - Issue #11731: simplify/enhance email parser/generator API by introducing policy objects. - Issue #11768: The signal handler of the signal module only calls Py_AddPendingCall() for the first signal to fix a deadlock on reentrant or parallel calls. PyErr_SetInterrupt() writes also into the wake up file. - Issue #11492: fix several issues with header folding in the email package. - Issue #11852: Add missing imports and update tests. - Issue #11875: collections.OrderedDict's __reduce__ was temporarily mutating the object instead of just working on a copy. - Issue #11467: Fix urlparse behavior when handling urls which contains scheme specific part only digits. Patch by Santoso Wijaya. - collections.Counter().copy() now works correctly for subclasses. - Issue #11474: Fix the bug with url2pathname() handling of '/C|/' on Windows. Patch by Santoso Wijaya. - Issue #11684: complete email.parser bytes API by adding BytesHeaderParser. - The bz2 module now handles 4GiB+ input buffers correctly. - Issue #9233: Fix json.loads('{}') to return a dict (instead of a list), when _json is not available. - Issue #11830: Remove unnecessary introspection code in the decimal module. - Issue #11703: urllib2.geturl() does not return correct url when the original url contains #fragment. - Issue #10019: Fixed regression in json module where an indent of 0 stopped adding newlines and acted instead like 'None'. - Issue #11186: pydoc ignores a module if its name contains a surrogate character in the index of modules. - Issue #11815: Use a light-weight SimpleQueue for the result queue in concurrent.futures.ProcessPoolExecutor. - Issue #5162: Treat services like frozen executables to allow child spawning from multiprocessing.forking on Windows. - logging.basicConfig now supports an optional 'handlers' argument taking an iterable of handlers to be added to the root logger. Additional parameter checks were also added to basicConfig. - Issue #11814: Fix likely typo in multiprocessing.Pool._terminate(). - Issue #11747: Fix range formatting in difflib.context_diff() and difflib.unified_diff(). - Issue #8428: Fix a race condition in multiprocessing.Pool when terminating worker processes: new processes would be spawned while the pool is being shut down. Patch by Charles-François Natali. - Issue #2650: re.escape() no longer escapes the '_'. - Issue #11757: select.select() now raises ValueError when a negative timeout is passed (previously, a select.error with EINVAL would be raised). Patch by Charles-François Natali. - Issue #7311: fix html.parser to accept non-ASCII attribute values. - Issue #11605: email.parser.BytesFeedParser was incorrectly converting multipart subparts with an 8-bit CTE into unicode instead of preserving the bytes. - Issue #1690608: email.util.formataddr is now RFC 2047 aware: it now has a charset parameter that defaults to utf-8 and is used as the charset for RFC 2047 encoding when the realname contains non-ASCII characters. - Issue #10963: Ensure that subprocess.communicate() never raises EPIPE. - Issue #10791: Implement missing method GzipFile.read1(), allowing GzipFile to be wrapped in a TextIOWrapper. Patch by Nadeem Vawda. - Issue #11707: Added a fast C version of functools.cmp_to_key(). Patch by Filip Gruszczyński. - Issue #11688: Add sqlite3.Connection.set_trace_callback(). Patch by Torsten Landschoff. - Issue #11746: Fix SSLContext.load_cert_chain() to accept elliptic curve private keys. - Issue #5863: Rewrite BZ2File in pure Python, and allow it to accept file-like objects using a new ``fileobj`` constructor argument. Patch by Nadeem Vawda. - unittest.TestCase.assertSameElements has been removed. - sys.getfilesystemencoding() raises a RuntimeError if initfsencoding() was not called yet: detect bootstrap (startup) issues earlier. - Issue #11393: Add the new faulthandler module. - Issue #11618: Fix the timeout logic in threading.Lock.acquire() under Windows. - Removed the 'strict' argument to email.parser.Parser, which has been deprecated since Python 2.4. - Issue #11256: Fix inspect.getcallargs on functions that take only keyword arguments. - Issue #11696: Fix ID generation in msilib. - itertools.accumulate now supports an optional *func* argument for a user-supplied binary function. - Issue #11692: Remove unnecessary demo functions in subprocess module. - Issue #9696: Fix exception incorrectly raised by xdrlib.Packer.pack_int when trying to pack a negative (in-range) integer. - Issue #11675: multiprocessing.[Raw]Array objects created from an integer size are now zeroed on creation. This matches the behaviour specified by the documentation. - Issue #7639: Fix short file name generation in bdist_msi - Issue #11635: Don't use polling in worker threads and processes launched by concurrent.futures. - Issue #5845: Automatically read readline configuration to enable completion in interactive mode. - Issue #6811: Allow importlib to change a code object's co_filename attribute to match the path to where the source code currently is, not where the code object originally came from. - Issue #8754: Have importlib use the repr of a module name in error messages. - Issue #11591: Prevent "import site" from modifying sys.path when python was started with -S. - collections.namedtuple() now adds a _source attribute to the generated class. This make the source more accessible than the outdated "verbose" option which prints to stdout but doesn't make the source string available. - Issue #11371: Mark getopt error messages as localizable. Patch by Filip Gruszczyński. - Issue #11333: Add __slots__ to collections ABCs. - Issue #11628: cmp_to_key generated class should use __slots__. - Issue #11666: let help() display named tuple attributes and methods that start with a leading underscore. - Issue #11662: Make urllib and urllib2 ignore redirections if the scheme is not HTTP, HTTPS or FTP (CVE-2011-1521). - Issue #5537: Fix time2isoz() and time2netscape() functions of httplib.cookiejar for expiration year greater than 2038 on 32-bit systems. - Issue #4391: Use proper gettext plural forms in optparse. - Issue #11127: Raise a TypeError when trying to pickle a socket object. - Issue #11563: ``Connection: close`` header is sent by requests using URLOpener class which helps in closing of sockets after connection is over. Patch contributions by Jeff McNeil and Nadeem Vawda. - Issue #11459: A ``bufsize`` value of 0 in subprocess.Popen() really creates unbuffered pipes, such that select() works properly on them. - Issue #5421: Fix misleading error message when one of socket.sendto()'s arguments has the wrong type. Patch by Nikita Vetoshkin. - Issue #10812: Add some extra posix functions to the os module. - Issue #10979: unittest stdout buffering now works with class and module setup and teardown. - Issue #11243: fix the parameter querying methods of Message to work if the headers contain un-encoded non-ASCII data. - Issue #11401: fix handling of headers with no value; this fixes a regression relative to Python2 and the result is now the same as it was in Python2. - Issue #9298: base64 bodies weren't being folded to line lengths less than 78, which was a regression relative to Python2. Unlike Python2, the last line of the folded body now ends with a carriage return. - Issue #11560: shutil.unpack_archive now correctly handles the format parameter. Patch by Evan Dandrea. - Issue #5870: Add `subprocess.DEVNULL` constant. - Issue #11133: fix two cases where inspect.getattr_static can trigger code execution. Patch by Andreas Stührk. - Issue #11569: use absolute path to the sysctl command in multiprocessing to ensure that it will be found regardless of the shell PATH. This ensures that multiprocessing.cpu_count works on default installs of MacOSX. - Issue #11501: distutils.archive_utils.make_zipfile no longer fails if zlib is not installed. Instead, the zipfile.ZIP_STORED compression is used to create the ZipFile. Patch by Natalia B. Bidart. - Issue #11289: `smtp.SMTP` class is now a context manager so it can be used in a `with` statement. Contributed by Giampaolo Rodola. - Issue #11554: Fixed support for Japanese codecs; previously the body output encoding was not done if euc-jp or shift-jis was specified as the charset. - Issue #11407: `TestCase.run` returns the result object used or created. Contributed by Janathan Hartley. - Issue #11500: Fixed a bug in the OS X proxy bypass code for fully qualified IP addresses in the proxy exception list. - Issue #11491: dbm.error is no longer raised when dbm.open is called with the "n" as the flag argument and the file exists. The behavior matches the documentation and general logic. - Issue #1162477: Postel Principle adjustment to email date parsing: handle the fact that some non-compliant MUAs use '.' instead of ':' in time specs. - Issue #11131: Fix sign of zero in decimal.Decimal plus and minus operations when the rounding mode is ROUND_FLOOR. - Issue #9935: Speed up pickling of instances of user-defined classes. - Issue #5622: Fix curses.wrapper to raise correct exception if curses initialization fails. - Issue #11408: In threading.Lock.acquire(), only call gettimeofday() when really necessary. Patch by Charles-François Natali. - Issue #11391: Writing to a mmap object created with ``mmap.PROT_READ|mmap.PROT_EXEC`` would segfault instead of raising a TypeError. Patch by Charles-François Natali. - Issue #9795: add context management protocol support for nntplib.NNTP class. - Issue #11306: mailbox in certain cases adapts to an inability to open certain files in read-write mode. Previously it detected this by checking for EACCES, now it also checks for EROFS. - Issue #11265: asyncore now correctly handles EPIPE, EBADF and EAGAIN errors on accept(), send() and recv(). - Issue #11377: Deprecate platform.popen() and reimplement it with os.popen(). - Issue #8513: On UNIX, subprocess supports bytes command string. - Issue #10866: Add socket.sethostname(). Initial patch by Ross Lagerwall. - Issue #11140: Lock.release() now raises a RuntimeError when attempting to release an unacquired lock, as claimed in the threading documentation. The _thread.error exception is now an alias of RuntimeError. Patch by Filip Gruszczyński. Patch for _dummy_thread by Aymeric Augustin. - Issue #8594: ftplib now provides a source_address parameter to specify which (address, port) to bind to before connecting. - Issue #11326: Add the missing connect_ex() implementation for SSL sockets, and make it work for non-blocking connects. - Issue #11297: Add collections.ChainMap(). - Issue #10755: Add the posix.flistdir() function. Patch by Ross Lagerwall. - Issue #4761: Add the ``*at()`` family of functions (openat(), etc.) to the posix module. Patch by Ross Lagerwall. - Issue #7322: Trying to read from a socket's file-like object after a timeout occurred now raises an error instead of silently losing data. - Issue #11291: poplib.POP no longer suppresses errors on quit(). - Issue #11177: asyncore's create_socket() arguments can now be omitted. - Issue #6064: Add a ``daemon`` keyword argument to the threading.Thread and multiprocessing.Process constructors in order to override the default behaviour of inheriting the daemonic property from the current thread/process. - Issue #10956: Buffered I/O classes retry reading or writing after a signal has arrived and the handler returned successfully. - Issue #10784: New os.getpriority() and os.setpriority() functions. - Issue #11114: Fix catastrophic performance of tell() on text files (up to 1000x faster in some cases). It is still one to two order of magnitudes slower than binary tell(). - Issue #10882: Add os.sendfile function. - Issue #10868: Allow usage of the register method of an ABC as a class decorator. - Issue #11224: Fixed a regression in tarfile that affected the file-like objects returned by TarFile.extractfile() regarding performance, memory consumption and failures with the stream interface. - Issue #10924: Adding salt and Modular Crypt Format to crypt library. Moved old C wrapper to _crypt, and added a Python wrapper with enhanced salt generation and simpler API for password generation. - Issue #11074: Make 'tokenize' so it can be reloaded. - Issue #11085: Moved collections abstract base classes into a separate module called collections.abc, following the pattern used by importlib.abc. For backwards compatibility, the names are imported into the collections module. - Issue #4681: Allow mmap() to work on file sizes and offsets larger than 4GB, even on 32-bit builds. Initial patch by Ross Lagerwall, adapted for 32-bit Windows. - Issue #11169: compileall module uses repr() to format filenames and paths to escape surrogate characters and show spaces. - Issue #11089: Fix performance issue limiting the use of ConfigParser() with large config files. - Issue #10276: Fix the results of zlib.crc32() and zlib.adler32() on buffers larger than 4GB. Patch by Nadeem Vawda. - Issue #11388: Added a clear() method to MutableSequence - Issue #11174: Add argparse.MetavarTypeHelpFormatter, which uses type names for the names of optional and positional arguments in help messages. - Issue #9348: Raise an early error if argparse nargs and metavar don't match. - Issue #9026: Fix order of argparse sub-commands in help messages. - Issue #9347: Fix formatting for tuples in argparse type= error messages. - Issue #12191: Added shutil.chown() to change user and/or group owner of a given path also specifying their names. - Issue #13988: The _elementtree accelerator is used whenever available. Now xml.etree.cElementTree becomes a deprecated alias to ElementTree. Build ----- - Issue #6807: Run msisupport.mak earlier. - Issue #10580: Minor grammar change in Windows installer. - Issue #13326: Clean __pycache__ directories correctly on OpenBSD. - PEP 393: the configure option --with-wide-unicode is removed. - Issue #12852: Set _XOPEN_SOURCE to 700, instead of 600, to get POSIX 2008 functions on OpenBSD (e.g. fdopendir). - Issue #11863: Remove support for legacy systems deprecated in Python 3.2 (following PEP 11). These systems are systems using Mach C Threads, SunOS lightweight processes, GNU pth threads and IRIX threads. - Issue #8746: Correct faulty configure checks so that os.chflags() and os.lchflags() are once again built on systems that support these functions (BSD and OS X). Also add new stat file flags for OS X (UF_HIDDEN and UF_COMPRESSED). - Issue #10645: Installing Python no longer creates a Python-X.Y.Z-pyX.Y.egg-info file in the lib-dynload directory. - Do not accidentally include the directory containing sqlite.h twice when building sqlite3. - Issue #11217: For 64-bit/32-bit Mac OS X universal framework builds, ensure "make install" creates symlinks in --prefix bin for the "-32" files in the framework bin directory like the installer does. - Issue #11347: Use --no-as-needed when linking libpython3.so. - Issue #11411: Fix 'make DESTDIR=' with a relative destination. - Issue #11268: Prevent Mac OS X Installer failure if Documentation package had previously been installed. - Issue #11495: OSF support is eliminated. It was deprecated in Python 3.2. IDLE ---- - Issue #14409: IDLE now properly executes commands in the Shell window when it cannot read the normal config files on startup and has to use the built-in default key bindings. There was previously a bug in one of the defaults. - IDLE can be launched as python -m idlelib - Issue #3573: IDLE hangs when passing invalid command line args (directory(ies) instead of file(s)) (Patch by Guilherme Polo) - Issue #14200: IDLE shell crash on printing non-BMP unicode character. - Issue #5219: Prevent event handler cascade in IDLE. - Issue #964437: Make IDLE help window non-modal. Patch by Guilherme Polo and Roger Serwy. - Issue #13933: IDLE auto-complete did not work with some imported module, like hashlib. (Patch by Roger Serwy) - Issue #13506: Add '' to path for IDLE Shell when started and restarted with Restart Shell. Original patches by Marco Scataglini and Roger Serwy. - Issue #4625: If IDLE cannot write to its recent file or breakpoint files, display a message popup and continue rather than crash. Original patch by Roger Serwy. - Issue #8641: Update IDLE 3 syntax coloring to recognize b".." and not u"..". Patch by Tal Einat. - Issue #13296: Fix IDLE to clear compile __future__ flags on shell restart. (Patch by Roger Serwy) - Issue #9871: Prevent IDLE 3 crash when given byte stings with invalid hex escape sequences, like b'\x0'. (Original patch by Claudiu Popa.) - Issue #12636: IDLE reads the coding cookie when executing a Python script. - Issue #12540: Prevent zombie IDLE processes on Windows due to changes in os.kill(). - Issue #12590: IDLE editor window now always displays the first line when opening a long file. With Tk 8.5, the first line was hidden. - Issue #11088: don't crash when using F5 to run a script in IDLE on MacOSX with Tk 8.5. - Issue #1028: Tk returns invalid Unicode null in %A: UnicodeDecodeError. With Tk < 8.5 _tkinter.c:PythonCmd() raised UnicodeDecodeError, caused IDLE to exit. Converted to valid Unicode null in PythonCmd(). - Issue #11718: IDLE's open module dialog couldn't find the __init__.py file in a package. Tools/Demos ----------- - Issue #14053: patchcheck.py ("make patchcheck") now works with MQ patches. Patch by Francisco Martín Brugué. - Issue #13930: 2to3 is now able to write its converted output files to another directory tree as well as copying unchanged files and altering the file suffix. See its new -o, -W and --add-suffix options. This makes it more useful in many automated code translation workflows. - Issue #13628: python-gdb.py is now able to retrieve more frames in the Python traceback if Python is optimized. - Issue #11996: libpython (gdb), replace "py-bt" command by "py-bt-full" and add a smarter "py-bt" command printing a classic Python traceback. - Issue #11179: Make ccbench work under Python 3.1 and 2.7 again. - Issue #10639: reindent.py no longer converts newlines and will raise an error if attempting to convert a file with mixed newlines. "--newline" option added to specify new line character. Extension Modules ----------------- - Issue #16847: Fixed improper use of _PyUnicode_CheckConsistency() in non-pydebug builds. Several extension modules now compile cleanly when assert()s are enabled in standard builds (-DDEBUG flag). - Issue #13840: The error message produced by ctypes.create_string_buffer when given a Unicode string has been fixed. - Issue #9975: socket: Fix incorrect use of flowinfo and scope_id. Patch by Vilmos Nebehaj. - Issue #7777: socket: Add Reliable Datagram Sockets (PF_RDS) support. - Issue #13159: FileIO and BZ2Compressor/BZ2Decompressor now use a linear-time buffer growth strategy instead of a quadratic-time one. - Issue #10141: socket: Add SocketCAN (PF_CAN) support. Initial patch by Matthias Fuchs, updated by Tiago Gonçalves. - Issue #13070: Fix a crash when a TextIOWrapper caught in a reference cycle would be finalized after the reference to its underlying BufferedRWPair's writer got cleared by the GC. - Issue #12881: ctypes: Fix segfault with large structure field names. - Issue #13058: ossaudiodev: fix a file descriptor leak on error. Patch by Thomas Jarosch. - Issue #13013: ctypes: Fix a reference leak in PyCArrayType_from_ctype. Thanks to Suman Saha for finding the bug and providing a patch. - Issue #13022: Fix: _multiprocessing.recvfd() doesn't check that file descriptor was actually received. - Issue #1172711: Add 'long long' support to the array module. Initial patch by Oren Tirosh and Hirokazu Yamamoto. - Issue #12483: ctypes: Fix a crash when the destruction of a callback object triggers the garbage collector. - Issue #12950: Fix passing file descriptors in multiprocessing, under OpenIndiana/Illumos. - Issue #12764: Fix a crash in ctypes when the name of a Structure field is not a string. - Issue #11241: subclasses of ctypes.Array can now be subclassed. - Issue #9651: Fix a crash when ctypes.create_string_buffer(0) was passed to some functions like file.write(). - Issue #10309: Define _GNU_SOURCE so that mremap() gets the proper signature. Without this, architectures where sizeof void* != sizeof int are broken. Patch given by Hallvard B Furuseth. - Issue #12051: Fix segfault in json.dumps() while encoding highly-nested objects using the C accelerations. - Issue #12017: Fix segfault in json.loads() while decoding highly-nested objects using the C accelerations. - Issue #1838: Prevent segfault in ctypes, when _as_parameter_ on a class is set to an instance of the class. Tests ----- - Issue #13125: Silence spurious test_lib2to3 output when in non-verbose mode. Patch by Mikhail Novikov. - Issue #13447: Add a test file to host regression tests for bugs in the scripts found in the Tools directory. - Issue #10881: Fix test_site failure with OS X framework builds. - Issue #13901: Prevent test_distutils failures on OS X with --enable-shared. - Issue #13862: Fix spurious failure in test_zlib due to runtime/compile time minor versions not matching. - Issue #12804: Fix test_socket and test_urllib2net failures when running tests on a system without internet access. - Issue #13726: Fix the ambiguous -S flag in regrtest. It is -o/--slow for slow tests. - Issue #11659: Fix ResourceWarning in test_subprocess introduced by #11459. Patch by Ben Hayden. - Issue #11577: fix ResourceWarning triggered by improved binhex test coverage - Issue #11509: Significantly increase test coverage of fileinput. Patch by Denver Coneybeare at PyCon 2011 Sprints. - Issue #11689: Fix a variable scoping error in an sqlite3 test - Issue #13786: Remove unimplemented 'trace' long option from regrtest.py. - Issue #13725: Fix regrtest to recognize the documented -d flag. Patch by Erno Tukia. - Issue #13304: Skip test case if user site-packages disabled (-s or PYTHONNOUSERSITE). (Patch by Carl Meyer) - Issue #5661: Add a test for ECONNRESET/EPIPE handling to test_asyncore. Patch by Xavier de Gaye. - Issue #13218: Fix test_ssl failures on Debian/Ubuntu. - Re-enable lib2to3's test_parser.py tests, though with an expected failure (see issue 13125). - Issue #12656: Add tests for IPv6 and Unix sockets to test_asyncore. - Issue #6484: Add unit tests for mailcap module (patch by Gregory Nofi) - Issue #11651: Improve the Makefile test targets to run more of the test suite more quickly. The --multiprocess option is now enabled by default, reducing the amount of time needed to run the tests. "make test" and "make quicktest" now include some resource-intensive tests, but no longer run the test suite twice to check for bugs in .pyc generation. Tools/scripts/run_test.py provides an easy platform-independent way to run test suite with sensible defaults. - Issue #12331: The test suite for the packaging module can now run from an installed Python. - Issue #12331: The test suite for lib2to3 can now run from an installed Python. - Issue #12626: In regrtest, allow filtering tests using a glob filter with the ``-m`` (or ``--match``) option. This works with all test cases using the unittest module. This is useful with long test suites such as test_io or test_subprocess. - Issue #12624: It is now possible to fail after the first failure when running in verbose mode (``-v`` or ``-W``), by using the ``--failfast`` (or ``-G``) option to regrtest. This is useful with long test suites such as test_io or test_subprocess. - Issue #12587: Correct faulty test file and reference in test_tokenize. (Patch by Robert Xiao) - Issue #12573: Add resource checks for dangling Thread and Process objects. - Issue #12549: Correct test_platform to not fail when OS X returns 'x86_64' as the processor type on some Mac systems. - Skip network tests when getaddrinfo() returns EAI_AGAIN, meaning a temporary failure in name resolution. - Issue #11812: Solve transient socket failure to connect to 'localhost' in test_telnetlib.py. - Solved a potential deadlock in test_telnetlib.py. Related to issue #11812. - Avoid failing in test_robotparser when mueblesmoraleda.com is flaky and an overzealous DNS service (e.g. OpenDNS) redirects to a placeholder Web site. - Avoid failing in test_urllibnet.test_bad_address when some overzealous DNS service (e.g. OpenDNS) resolves a non-existent domain name. The test is now skipped instead. - Issue #12440: When testing whether some bits in SSLContext.options can be reset, check the version of the OpenSSL headers Python was compiled against, rather than the runtime version of the OpenSSL library. - Issue #11512: Add a test suite for the cgitb module. Patch by Robbie Clemons. - Issue #12497: Install test/data to prevent failures of the various codecmaps tests. - Issue #12496: Install test/capath directory to prevent test_connect_capath testcase failure in test_ssl. - Issue #12469: Run wakeup and pending signal tests in a subprocess to run the test in a fresh process with only one thread and to not change signal handling of the parent process. - Issue #8716: Avoid crashes caused by Aqua Tk on OSX when attempting to run test_tk or test_ttk_guionly under a username that is not currently logged in to the console windowserver (as may be the case under buildbot or ssh). - Issue #12407: Explicitly skip test_capi.EmbeddingTest under Windows. - Issue #12400: regrtest -W doesn't rerun the tests twice anymore, but captures the output and displays it on failure instead. regrtest -v doesn't print the error twice anymore if there is only one error. - Issue #12141: Install copies of template C module file so that test_build_ext of test_distutils and test_command_build_ext of test_packaging are no longer silently skipped when run outside of a build directory. - Issue #8746: Add additional tests for os.chflags() and os.lchflags(). Patch by Garrett Cooper. - Issue #10736: Fix test_ttk test_widgets failures with Cocoa Tk 8.5.9 2.8 + on Mac OS X. (Patch by Ronald Oussoren) - Issue #12057: Add tests for ISO 2022 codecs (iso2022_jp, iso2022_jp_2, iso2022_kr). - Issue #12096: Fix a race condition in test_threading.test_waitfor(). Patch written by Charles-François Natali. - Issue #11614: import __hello__ prints "Hello World!". Patch written by Andreas Stührk. - Issue #5723: Improve json tests to be executed with and without accelerations. - Issue #12041: Make test_wait3 more robust. - Issue #11873: Change regex in test_compileall to fix occasional failures when the randomly generated temporary path happened to match the regex. - Issue #11958: Fix FTP tests for IPv6, bind to "::1" instead of "localhost". Patch written by Charles-Francois Natali. - Issue #8407, #11859: Fix tests of test_io using threads and an alarm: use pthread_sigmask() to ensure that the SIGALRM signal is received by the main thread. - Issue #11811: Factor out detection of IPv6 support on the current host and make it available as ``test.support.IPV6_ENABLED``. Patch by Charles-François Natali. - Issue #10914: Add a minimal embedding test to test_capi. - Issue #11223: Skip test_lock_acquire_interruption() and test_rlock_acquire_interruption() of test_threadsignals if a thread lock is implemented using a POSIX mutex and a POSIX condition variable. A POSIX condition variable cannot be interrupted by a signal (e.g. on Linux, the futex system call is restarted). - Issue #11790: Fix sporadic failures in test_multiprocessing.WithProcessesTestCondition. - Fix possible "file already exists" error when running the tests in parallel. - Issue #11719: Fix message about unexpected test_msilib skip on non-Windows platforms. Patch by Nadeem Vawda. - Issue #11727: Add a --timeout option to regrtest: if a test takes more than TIMEOUT seconds, dumps the traceback of all threads and exits. - Issue #11653: fix -W with -j in regrtest. - The email test suite now lives in the Lib/test/test_email package. The test harness code has also been modernized to allow use of new unittest features. - regrtest now discovers test packages as well as test modules. - Issue #11577: improve test coverage of binhex.py. Patch by Arkady Koplyarov. - New test_crashers added to exercise the scripts in the Lib/test/crashers directory and confirm they fail as expected - Issue #11578: added test for the timeit module. Patch by Michael Henry. - Issue #11503: improve test coverage of posixpath.py. Patch by Evan Dandrea. - Issue #11505: improves test coverage of string.py, increases granularity of string.Formatter tests. Initial patch by Alicia Arlen. - Issue #11548: Improve test coverage of the shutil module. Patch by Evan Dandrea. - Issue #11554: Reactivated test_email_codecs. - Issue #11505: improves test coverage of string.py. Patch by Alicia Arlen - Issue #11490: test_subprocess.test_leaking_fds_on_error no longer gives a false positive if the last directory in the path is inaccessible. - Issue #11223: Fix test_threadsignals to fail, not hang, when the non-semaphore implementation of locks is used under POSIX. - Issue #10911: Add tests on CGI with non-ASCII characters. Patch written by Pierre Quentel. - Issue #9931: Fix hangs in GUI tests under Windows in certain conditions. Patch by Hirokazu Yamamoto. - Issue #10512: Properly close sockets under test.test_cgi. - Issue #10992: Make tests pass under coverage. - Issue #10826: Prevent sporadic failure in test_subprocess on Solaris due to open door files. - Issue #10990: Prevent tests from clobbering a set trace function. C-API ----- - Issue #13452: PyUnicode_EncodeDecimal() doesn't support error handlers different than "strict" anymore. The caller was unable to compute the size of the output buffer: it depends on the error handler. - Issue #13560: Add PyUnicode_DecodeLocale(), PyUnicode_DecodeLocaleAndSize() and PyUnicode_EncodeLocale() functions to the C API to decode/encode from/to the current locale encoding. - Issue #10831: PyUnicode_FromFormat() supports %li, %lli and %zi formats. - Issue #11246: Fix PyUnicode_FromFormat("%V") to decode the byte string from UTF-8 (with replace error handler) instead of ISO-8859-1 (in strict mode). Patch written by Ray Allen. - Issue #10830: Fix PyUnicode_FromFormatV("%c") for non-BMP characters on narrow build. - Add PyObject_GenericGetDict and PyObject_GeneriSetDict. They are generic implementations for the getter and setter of a ``__dict__`` descriptor of C types. - Issue #13727: Add 3 macros to access PyDateTime_Delta members: PyDateTime_DELTA_GET_DAYS, PyDateTime_DELTA_GET_SECONDS, PyDateTime_DELTA_GET_MICROSECONDS. - Issue #10542: Add 4 macros to work with surrogates: Py_UNICODE_IS_SURROGATE, Py_UNICODE_IS_HIGH_SURROGATE, Py_UNICODE_IS_LOW_SURROGATE, Py_UNICODE_JOIN_SURROGATES. - Issue #12724: Add Py_RETURN_NOTIMPLEMENTED macro for returning NotImplemented. - PY_PATCHLEVEL_REVISION has been removed, since it's meaningless with Mercurial. - Issue #12173: The first argument of PyImport_ImportModuleLevel is now `const char *` instead of `char *`. - Issue #12380: PyArg_ParseTuple now accepts a bytearray for the 'c' format. Documentation ------------- - Issue #13989: Document that GzipFile does not support text mode, and give a more helpful error message when opened with an invalid mode string. - Issue #13921: Undocument and clean up sqlite3.OptimizedUnicode, which is obsolete in Python 3.x. It's now aliased to str for backwards compatibility. - Issue #12102: Document that buffered files must be flushed before being used with mmap. Patch by Steffen Daode Nurpmeso. - Issue #8982: Improve the documentation for the argparse Namespace object. - Issue #9343: Document that argparse parent parsers must be configured before their children. - Issue #13498: Clarify docs of os.makedirs()'s exist_ok argument. Done with great native-speaker help from R. David Murray. - Issues #13491 and #13995: Fix many errors in sqlite3 documentation. Initial patch for #13491 by Johannes Vogel. - Issue #13402: Document absoluteness of sys.executable. - Issue #13883: PYTHONCASEOK also works on OS X. - Issue #9021: Add an introduction to the copy module documentation. - Issue #6005: Examples in the socket library documentation use sendall, where relevant, instead send method. - Issue #12798: Updated the mimetypes documentation. - Issue #12949: Document the kwonlyargcount argument for the PyCode_New C API function. - Issue #13513: Fix io.IOBase documentation to correctly link to the io.IOBase.readline method instead of the readline module. - Issue #13237: Reorganise subprocess documentation to emphasise convenience functions and the most commonly needed arguments to Popen. - Issue #13141: Demonstrate recommended style for socketserver examples. - Issue #11818: Fix tempfile examples for Python 3. What's New in Python 3.2? ========================= *Release date: 20-Feb-2011* Core and Builtins ----------------- - Issue #11249: Fix potential crashes when using the limited API. Build ----- - Issue #11222: Fix non-framework shared library build on Mac OS X. - Issue #11184: Fix large-file support on AIX. - Issue #941346: Fix broken shared library build on AIX. Documentation ------------- - Issue #10709: Add updated AIX notes in Misc/README.AIX. What's New in Python 3.2 Release Candidate 3? ============================================= *Release date: 13-Feb-2011* Core and Builtins ----------------- - Issue #11134: Add missing fields to typeslots.h. - Issue #11135: Remove redundant doc field from PyType_Spec. - Issue #11067: Add PyType_GetFlags, to support PyUnicode_Check in the limited ABI. - Issue #11118: Fix bogus export of None in python3.dll. Library ------- - Issue #11116: any error during addition of a message to a mailbox now causes a rollback, instead of leaving the mailbox partially modified. - Issue #11132: Fix passing of "optimize" parameter when recursing in compileall.compile_dir(). - Issue #11110: Fix a potential decref of a NULL in sqlite3. - Issue #8275: Fix passing of callback arguments with ctypes under Win64. Patch by Stan Mihai. Build ----- - Issue #11079: The /Applications/Python x.x folder created by the Mac OS X installers now includes a link to the installed documentation and no longer includes an Extras directory. The Tools directory is now installed in the framework under share/doc. - Issue #11121: Fix building with --enable-shared. Tests ----- - Issue #10971: test_zipimport_support is once again compatible with the refleak hunter feature of test.regrtest. What's New in Python 3.2 Release Candidate 2? ============================================= *Release date: 30-Jan-2011* Core and Builtins ----------------- - Issue #10451: memoryview objects could allow mutating a readable buffer. Initial patch by Ross Lagerwall. Library ------- - Issue #9124: mailbox now accepts binary input and reads and writes mailbox files in binary mode, using the email package's binary support to parse arbitrary email messages. StringIO and text file input is deprecated, and string input fails early if non-ASCII characters are used, where previously it would fail when the email was processed in a later step. - Issue #10845: Mitigate the incompatibility between the multiprocessing module on Windows and the use of package, zipfile or directory execution by special casing main modules that actually *are* called __main__.py. - Issue #11045: Protect logging call against None argument. - Issue #11052: Correct IDLE menu accelerators on Mac OS X for Save commands. - Issue #11053: Fix IDLE "Syntax Error" windows to behave as in 2.x, preventing a confusing hung appearance on OS X with the windows obscured. - Issue #10940: Workaround an IDLE hang on Mac OS X 10.6 when using the menu accelerators for Open Module, Go to Line, and New Indent Width. The accelerators still work but no longer appear in the menu items. - Issue #10989: Fix a crash on SSLContext.load_verify_locations(None, True). - Issue #11020: Command-line pyclbr was broken because of missing 2-to-3 conversion. - Issue #11019: Fixed BytesGenerator so that it correctly handles a Message with a None body. - Issue #11014: Make 'filter' argument in tarfile.Tarfile.add() into a keyword-only argument. The preceding positional argument was deprecated, so it made no sense to add filter as a positional argument. - Issue #11004: Repaired edge case in deque.count(). - Issue #10974: IDLE no longer crashes if its recent files list includes files with non-ASCII characters in their path names. - Have hashlib.algorithms_available and hashlib.algorithms_guaranteed both return sets instead of one returning a tuple and the other a frozenset. - Issue #10987: Fix the recursion limit handling in the _pickle module. - Issue #10983: Fix several bugs making tunnel requests in http.client. - Issue #10955: zipimport uses ASCII encoding instead of cp437 to decode filenames, at bootstrap, if the codec registry is not ready yet. It is still possible to have non-ASCII filenames using the Unicode flag (UTF-8 encoding) for all file entries in the ZIP file. - Issue #10949: Improved robustness of rotating file handlers. - Issue #10955: Fix a potential crash when trying to mmap() a file past its length. Initial patch by Ross Lagerwall. - Issue #10898: Allow compiling the posix module when the C library defines a symbol named FSTAT. - Issue #10980: the HTTP server now encodes headers with iso-8859-1 (latin1) encoding. This is the preferred encoding of PEP 3333 and the base encoding of HTTP 1.1. - To match the behaviour of HTTP server, the HTTP client library now also encodes headers with iso-8859-1 (latin1) encoding. It was already doing that for incoming headers which makes this behaviour now consistent in both incoming and outgoing direction. - Issue #9509: argparse now properly handles IOErrors raised by argparse.FileType. - Issue #10961: The new pydoc server now better handles exceptions raised during request handling. - Issue #10680: Fix mutually exclusive arguments for argument groups in argparse. Build ----- - Issue #11054: Allow Mac OS X installer builds to again work on 10.5 with the system-provided Python. What's New in Python 3.2 Release Candidate 1 ============================================ *Release date: 16-Jan-2011* Core and Builtins ----------------- - Issue #10889: range indexing and slicing now works correctly on ranges with a length that exceeds sys.maxsize. - Issue #10892: Don't segfault when trying to delete __abstractmethods__ from a class. - Issue #8020: Avoid a crash where the small objects allocator would read non-Python managed memory while it is being modified by another thread. Patch by Matt Bandy. - Issue #10841: On Windows, set the binary mode on stdin, stdout, stderr and all io.FileIO objects (to not translate newlines, \r\n <=> \n). The Python parser translates newlines (\r\n => \n). - Remove buffer API from stable ABI for now, see #10181. - Issue #8651: PyArg_Parse*() functions raise an OverflowError if the file doesn't have PY_SSIZE_T_CLEAN define and the size doesn't fit in an int (length bigger than 2^31-1 bytes). - Issue #9015, #9611: FileIO.readinto(), FileIO.write(), os.write() and stdprinter.write() clamp the length to INT_MAX on Windows. - Issue #8278: On Windows and with a NTFS filesystem, os.stat() and os.utime() can now handle dates after 2038. - Issue #10780: PyErr_SetFromWindowsErrWithFilename() and PyErr_SetExcFromWindowsErrWithFilename() decode the filename from the filesystem encoding instead of UTF-8. - Issue #10779: PyErr_WarnExplicit() decodes the filename from the filesystem encoding instead of UTF-8. - Add sys.flags attribute for the new -q command-line option. - Issue #11506: Trying to assign to a bytes literal should result in a SyntaxError. Library ------- - Issue #10916: mmap should not segfault when a file is mapped using 0 as length and a non-zero offset, and an attempt to read past the end of file is made (IndexError is raised instead). Patch by Ross Lagerwall. - Issue #10154, #10090: change the normalization of UTF-8 to "UTF-8" instead of "UTF8" in the locale module as the latter is not supported MacOSX and OpenBSD. - Issue #10907: Warn OS X 10.6 IDLE users to use ActiveState Tcl/Tk 8.5, rather than the currently problematic Apple-supplied one, when running with the 64-/32-bit installer variant. - Issue #4953: cgi.FieldStorage and cgi.parse() parse the request as bytes, not as unicode, and accept binary files. Add encoding and errors attributes to cgi.FieldStorage. Patch written by Pierre Quentel (with many inputs by Glenn Linderman). - Add encoding and errors arguments to urllib.parse_qs() and urllib.parse_qsl(). - Issue #10899: No function type annotations in the standard library. Removed function type annotations from _pyio.py. - Issue #10875: Update Regular Expression HOWTO; patch by 'SilentGhost'. - Issue #10872: The repr() of TextIOWrapper objects now includes the mode if available. - Issue #10869: Fixed bug where ast.increment_lineno modified the root node twice. - Issue #5871: email.header.Header.encode now raises an error if any continuation line in the formatted value has no leading white space and looks like a header. Since Generator uses Header to format all headers, this check is made for all headers in any serialized message at serialization time. This provides protection against header injection attacks. - Issue #10859: Make ``contextlib.GeneratorContextManager`` officially private by renaming it to ``_GeneratorContextManager``. - Issue #10042: Fixed the total_ordering decorator to handle cross-type comparisons that could lead to infinite recursion. - Issue #10686: the email package now :rfc:`2047`\ -encodes headers with non-ASCII bytes (parsed by a BytesParser) when doing conversion to 7bit-clean presentation, instead of replacing them with ?s. - email.header.Header was incorrectly encoding folding whitespace when rfc2047-encoding header values with embedded newlines, leaving them without folding whitespace. It now uses the continuation_ws, as it does for continuation lines that it creates itself. - Issue #1777412, #10827: Changed the rules for 2-digit years. The time.asctime(), time.ctime() and time.strftime() functions will now format any year when ``time.accept2dyear`` is False and will accept years >= 1000 otherwise. ``time.mktime`` and ``time.strftime`` now accept full range supported by the OS. With Visual Studio or on Solaris, the year is limited to the range [1; 9999]. Conversion of 2-digit years to 4-digit is deprecated. - Issue #7858: Raise an error properly when os.utime() fails under Windows on an existing file. - Issue #3839: wsgiref should not override a Content-Length header set by the application. Initial patch by Clovis Fabricio. - Issue #10492: bdb.Bdb.run() only traces the execution of the code, not the compilation (if the input is a string). - Issue #7995: When calling accept() on a socket with a timeout, the returned socket is now always blocking, regardless of the operating system. - Issue #10756: atexit normalizes the exception before displaying it. Patch by Andreas Stührk. - Issue #10790: email.header.Header.append's charset logic now works correctly for charsets whose output codec is different from its input codec. - Issue #10819: SocketIO.name property returns -1 when its closed, instead of raising a ValueError, to fix repr(). - Issue #8650: zlib.compress() and zlib.decompress() raise an OverflowError if the input buffer length doesn't fit into an unsigned int (length bigger than 2^32-1 bytes). - Issue #6643: Reinitialize locks held within the threading module after fork to avoid a potential rare deadlock or crash on some platforms. - Issue #10806, issue #9905: Fix subprocess pipes when some of the standard file descriptors (0, 1, 2) are closed in the parent process. Initial patch by Ross Lagerwall. - `unittest.TestCase` can be instantiated without a method name; for simpler exploration from the interactive interpreter. - Issue #10798: Reject supporting concurrent.futures if the system has too few POSIX semaphores. - Issue #10807: Remove base64, bz2, hex, quopri, rot13, uu and zlib codecs from the codec aliases. They are still accessible via codecs.lookup(). - Issue #10801: In zipfile, support different encodings for the header and the filenames. - Issue #6285: IDLE no longer crashes on missing help file; patch by Scott David Daniels. - Fix collections.OrderedDict.setdefault() so that it works in subclasses that define __missing__(). - Issue #10786: unittest.TextTestRunner default stream no longer bound at import time. `sys.stderr` now looked up at instantiation time. Fix contributed by Mark Roddy. - Issue #10753: Characters ';', '=' and ',' in the PATH_INFO environment variable won't be quoted when the URI is constructed by the wsgiref.util's request_uri method. According to RFC 3986, these characters can be a part of params in PATH component of URI and need not be quoted. - Issue #10738: Fix webbrowser.Opera.raise_opts. - Issue #9824: SimpleCookie now encodes , and ; in values to cater to how browsers actually parse cookies. - Issue #9333: os.symlink now available regardless of user privileges. The function now raises OSError on Windows >=6.0 when the user is unable to create symbolic links. XP and 2003 still raise NotImplementedError. - Issue #10783: struct.pack() no longer implicitly encodes unicode to UTF-8. - Issue #10730: Add SVG mime types to mimetypes module. - Issue #10768: Make the Tkinter ScrolledText widget work again. - Issue #10777: Fix "dictionary changed size during iteration" bug in ElementTree register_namespace(). - Issue #10626: test_logging now preserves logger disabled states. - Issue #10774: test_logging now removes temp files created during tests. - Issue #5258/#10642: if site.py encounters a .pth file that generates an error, it now prints the filename, line number, and traceback to stderr and skips the rest of that individual file, instead of stopping processing entirely. - Issue #10763: subprocess.communicate() closes stdout and stderr if both are pipes (bug specific to Windows). - Issue #1693546: fix email.message RFC 2231 parameter encoding to be in better compliance (no "s around encoded values). - Improved the diff message in the unittest module's assertCountEqual(). - Issue #1155362: email.utils.parsedate_tz now handles a missing space before the '-' of a timezone field as well as before a '+'. - Issue #4871: The zipfile module now gives a more useful error message if an attempt is made to use a string to specify the archive password. - Issue #10750: The ``raw`` attribute of buffered IO objects is now read-only. - Deprecated assertDictContainsSubset() in the unittest module. C-API ----- - PyObject_CallMethod now passes along any underlying AttributeError from PyObject_GetAttr, instead of replacing it with something less informative - Issue #10913: Deprecate misleading functions PyEval_AcquireLock() and PyEval_ReleaseLock(). The thread-state aware APIs should be used instead. - Issue #10333: Remove ancient GC API, which has been deprecated since Python 2.2. Build ----- - Issue #10843: Update third-party library versions used in OS X 32-bit installer builds: bzip2 1.0.6, readline 6.1.2, SQLite 3.7.4 (with FTS3/FTS4 and RTREE enabled), and ncursesw 5.5 (wide-char support enabled). - Issue #10820: Fix OS X framework installs to support version-specific scripts (#10679). - Issue #7716: Under Solaris, don't assume existence of /usr/xpg4/bin/grep in the configure script but use $GREP instead. Patch by Fabian Groffen. - Issue #10475: Don't hardcode compilers for LDSHARED/LDCXXSHARED on NetBSD and DragonFly BSD. Patch by Nicolas Joly. - Issue #10679: The "idle", "pydoc" and "2to3" scripts are now installed with a version-specific suffix on "make altinstall". - Issue #10655: Fix the build on PowerPC on Linux with GCC when building with timestamp profiling (--with-tsc): the preprocessor test for the PowerPC support now looks for "__powerpc__" as well as "__ppc__": the latter seems to only be present on OS X; the former is the correct one for Linux with GCC. - Issue #1099: Fix the build on MacOSX when building a framework with pydebug using GCC 4.0. Tools/Demos ----------- - Issue #10843: Install the Tools directory on OS X in the applications Extras (/Applications/Python 3.n/Extras/) where the Demo directory had previous been installed. - Issue #7962: The Demo directory is gone. Most of the old and unmaintained demos have been removed, others integrated in documentation or a new Tools/demo subdirectory. - Issue #10502: Addition of the unittestgui tool. Originally by Steve Purcell. Updated for test discovery by Mark Roddy and Python 3 compatibility by Brian Curtin. Tests ----- - Issue #11910: Fix test_heapq to skip the C tests when _heapq is missing. - Fix test_startfile to wait for child process to terminate before finishing. - Issue #10822: Fix test_posix:test_getgroups failure under Solaris. Patch by Ross Lagerwall. - Make the --coverage flag work for test.regrtest. - Issue #1677694: Refactor and improve test_timeout. Original patch by Björn Lindqvist. - Issue #5485: Add tests for the UseForeignDTD method of expat parser objects. Patch by Jean-Paul Calderone and Sandro Tosi. - Issue #6293: Have regrtest.py echo back sys.flags. This is done by default in whole runs and enabled selectively using ``--header`` when running an explicit list of tests. Original patch by Collin Winter. What's New in Python 3.2 Beta 2? ================================ *Release date: 19-Dec-2010* Core and Builtins ----------------- - Issue #8844: Regular and recursive lock acquisitions can now be interrupted by signals on platforms using pthreads. Patch by Reid Kleckner. - Issue #4236: PyModule_Create2 now checks the import machinery directly rather than the Py_IsInitialized flag, avoiding a Fatal Python error in certain circumstances when an import is done in __del__. - Issue #5587: add a repr to dict_proxy objects. Patch by David Stanek and Daniel Urban. Library ------- - Issue #3243: Support iterable bodies in httplib. Patch Contributions by Xuanji Li and Chris AtLee. - Issue #10611: SystemExit exception will no longer kill a unittest run. - Issue #9857: It is now possible to skip a test in a setUp, tearDown or clean up function. - Issue #10573: use actual/expected consistently in unittest methods. The order of the args of assertCountEqual is also changed. - Issue #9286: email.utils.parseaddr no longer concatenates blank-separated words in the local part of email addresses, thereby preserving the input. - Issue #6791: Limit header line length (to 65535 bytes) in http.client and http.server, to avoid denial of services from the other party. - Issue #10404: Use ctl-button-1 on OSX for the context menu in Idle. - Issue #9907: Fix tab handling on OSX when using editline by calling rl_initialize first, then setting our custom defaults, then reading .editrc. - Issue #4188: Avoid creating dummy thread objects when logging operations from the threading module (with the internal verbose flag activated). - Issue #10711: Remove HTTP 0.9 support from http.client. The ``strict`` parameter to HTTPConnection and friends is deprecated. - Issue #9721: Fix the behavior of urljoin when the relative url starts with a ';' character. Patch by Wes Chow. - Issue #10714: Limit length of incoming request in http.server to 65536 bytes for security reasons. Initial patch by Ross Lagerwall. - Issue #9558: Fix distutils.command.build_ext with VS 8.0. - Issue #10667: Fast path for collections.Counter(). - Issue #10695: passing the port as a string value to telnetlib no longer causes debug mode to fail. - Issue #1078919: add_header now automatically RFC2231 encodes parameters that contain non-ascii values. - Issue #10188 (partial resolution): tempfile.TemporaryDirectory emits a warning on sys.stderr rather than throwing a misleading exception if cleanup fails due to nulling out of modules during shutdown. Also avoids an AttributeError when mkdtemp call fails and issues a ResourceWarning on implicit cleanup via __del__. - Issue #10107: Warn about unsaved files in IDLE on OSX. - Issue #7213: subprocess.Popen's default for close_fds has been changed. It is now True in most cases other than on Windows when input, output or error handles are provided. - Issue #6559: subprocess.Popen has a new pass_fds parameter (actually added in 3.2beta1) to allow specifying a specific list of file descriptors to keep open in the child process. - Issue #1731717: Fixed the problem where subprocess.wait() could cause an OSError exception when The OS had been told to ignore SIGCLD in our process or otherwise not wait for exiting child processes. Tests ----- - Issue #775964: test_grp now skips YP/NIS entries instead of failing when encountering them. Tools/Demos ----------- - Issue #6075: IDLE on Mac OS X now works with both Carbon AquaTk and Cocoa AquaTk. - Issue #10710: ``Misc/setuid-prog.c`` is removed from the source tree. - Issue #10706: Remove outdated script runtests.sh. Either ``make test`` or ``python -m test`` should be used instead. Build ----- - The Windows build now uses Tcl/Tk 8.5.9 and sqlite3 3.7.4. - Issue #9234: argparse supports alias names for subparsers. What's New in Python 3.2 Beta 1? ================================ *Release date: 05-Dec-2010* Core and Builtins ----------------- - Issue #10630: Return dict views from the dict proxy keys()/values()/items() methods. - Issue #10596: Fix float.__mod__ to have the same behaviour as float.__divmod__ with respect to signed zeros. -4.0 % 4.0 should be 0.0, not -0.0. - Issue #1772833: Add the -q command-line option to suppress copyright and version output in interactive mode. - Provide an *optimize* parameter in the built-in compile() function. - Fixed several corner case issues on Windows in os.stat/os.lstat related to reparse points. - PEP 384 (Defining a Stable ABI) is implemented. - Issue #2690: Range objects support negative indices and slicing. - Issue #9915: Speed up sorting with a key. - Issue #8685: Speed up set difference ``a - b`` when source set ``a`` is much larger than operand ``b``. Patch by Andrew Bennetts. - Issue #10518: Bring back the callable() builtin. - Issue #7094: Added alternate formatting (specified by '#') to ``__format__`` method of float, complex, and Decimal. This allows more precise control over when decimal points are displayed. - Issue #10474: range.count() should return integers. - Issue #1574217: isinstance now catches only AttributeError, rather than masking all errors. Library ------- - logging: added "handler of last resort". See http://bit.ly/last-resort-handler - test.support: Added TestHandler and Matcher classes for better support of assertions about logging. - Issue #4391: Use proper plural forms in argparse. - Issue #10601: sys.displayhook uses 'backslashreplace' error handler on UnicodeEncodeError. - Add the "display" and "undisplay" pdb commands. - Issue #7245: Add a SIGINT handler in pdb that allows breaking a program again after a "continue" command. - Add the "interact" pdb command. - Issue #7905: Actually respect the keyencoding parameter to shelve.Shelf. - Issue #1569291: Speed up array.repeat(). - Provide an interface to set the optimization level of compilation in py_compile, compileall and zipfile.PyZipFile. - Issue #7904: Changes to urllib.parse.urlsplit to handle schemes as defined by RFC3986. Anything before :// is considered a scheme and is followed by an authority (or netloc) and by '/' led path, which is optional. - Issue #6045: dbm.gnu databases now support get() and setdefault() methods. - Issue #10620: `python -m unittest` can accept file paths instead of module names for running specific tests. - Issue #9424: Deprecate the `unittest.TestCase` methods `assertEquals`, `assertNotEquals`, `assertAlmostEquals`, `assertNotAlmostEquals` and `assert_` and replace them with the correct methods in the Python test suite. - Issue #10272: The ssl module now raises socket.timeout instead of a generic SSLError on socket timeouts. - Issue #10528: Allow translators to reorder placeholders in localizable messages from argparse. - Issue #10497: Fix incorrect use of gettext in argparse. - Issue #10478: Reentrant calls inside buffered IO objects (for example by way of a signal handler) now raise a RuntimeError instead of freezing the current process. - logging: Added getLogRecordFactory/setLogRecordFactory with docs and tests. - Issue #10549: Fix pydoc traceback when text-documenting certain classes. - Issue #2001: New HTML server with enhanced Web page features. Patch by Ron Adam. - Issue #10360: In WeakSet, do not raise TypeErrors when testing for membership of non-weakrefable objects. - Issue #940286: pydoc.Helper.help() ignores input/output init parameters. - Issue #1745035: Add a command size and data size limit to smtpd.py, to prevent DoS attacks. Patch by Savio Sena. - Issue #4925: Add filename to error message when executable can't be found in subprocess. - Issue #10391: Don't dereference invalid memory in error messages in the ast module. - Issue #10027: st_nlink was not being set on Windows calls to os.stat or os.lstat. Patch by Hirokazu Yamamoto. - Issue #9333: Expose os.symlink only when the SeCreateSymbolicLinkPrivilege is held by the user's account, i.e., when the function can actually be used. - Issue #8879: Add os.link support for Windows. - Issue #7911: ``unittest.TestCase.longMessage`` defaults to True for improved failure messages by default. Patch by Mark Roddy. - Issue #1486713: HTMLParser now has an optional tolerant mode where it tries to guess at the correct parsing of invalid html. - Issue #10554: Add context management protocol support to subprocess.Popen objects. - Issue #8989: email.utils.make_msgid now has a domain parameter that can override the domain name used in the generated msgid. - Issue #9299: Add exist_ok parameter to os.makedirs to suppress the 'File exists' exception when a target directory already exists with the specified mode. Patch by Ray Allen. - Issue #9573: os.fork() now works correctly when triggered as a side effect of a module import. - Issue #10464: netrc now correctly handles lines with embedded '#' characters. - Added itertools.accumulate(). - Issue #4113: Added custom ``__repr__`` method to ``functools.partial``. Original patch by Daniel Urban. - Issue #10273: Rename `assertRegexpMatches` and `assertRaisesRegexp` to `assertRegex` and `assertRaisesRegex`. - Issue #10535: Enable silenced warnings in unittest by default. - Issue #9873: The URL parsing functions in urllib.parse now accept ASCII byte sequences as input in addition to character strings. - Issue #10586: The statistics API for the new functools.lru_cache has been changed to a single cache_info() method returning a named tuple. - Issue #10323: itertools.islice() now consumes the minimum number of inputs before stopping. Formerly, the final state of the underlying iterator was undefined. - Issue #10565: The collections.Iterator ABC now checks for both __iter__ and __next__. - Issue #10242: Fixed implementation of unittest.ItemsEqual and gave it a new more informative name, unittest.CountEqual. - Issue #10561: In pdb, clear the breakpoints by the breakpoint number. - Issue #2986: difflib.SequenceMatcher gets a new parameter, autojunk, which can be set to False to turn off the previously undocumented 'popularity' heuristic. Patch by Terry Reedy and Eli Bendersky. - Issue #10534: in difflib, expose bjunk and bpopular sets; deprecate undocumented and now redundant isbjunk and isbpopular methods. - Issue #9846: zipfile is now correctly closing underlying file objects. - Issue #10459: Update CJK character names to Unicode 6.0. - Issue #4493: urllib.request adds '/' in front of path components which does not start with '/. Common behavior exhibited by browsers and other clients. - Issue #6378: idle.bat now runs with the appropriate Python version rather than the system default. Patch by Sridhar Ratnakumar. - Issue #10470: 'python -m unittest' will now run test discovery by default, when no extra arguments have been provided. - Issue #3709: BaseHTTPRequestHandler will buffer the headers and write to output stream only when end_headers is invoked. This is a speedup and an internal optimization. Patch by Andrew Shaaf. - Issue #10220: Added inspect.getgeneratorstate. Initial patch by Rodolpho Eckhardt. - Issue #10453: compileall now uses argparse instead of getopt, and thus provides clean output when called with '-h'. - Issue #8078: Add constants for higher baud rates in the termios module. Patch by Rodolpho Eckhardt. - Issue #10407: Fix two NameErrors in distutils. - Issue #10371: Deprecated undocumented functions in the trace module. - Issue #10467: Fix BytesIO.readinto() after seeking into a position after the end of the file. - configparser: 100% test coverage. - Issue #10499: configparser supports pluggable interpolation handlers. The default classic interpolation handler is called BasicInterpolation. Another interpolation handler added (ExtendedInterpolation) which supports the syntax used by zc.buildout (e.g. interpolation between sections). - configparser: the SafeConfigParser class has been renamed to ConfigParser. The legacy ConfigParser class has been removed but its interpolation mechanism is still available as LegacyInterpolation. - configparser: Usage of RawConfigParser is now discouraged for new projects in favor of ConfigParser(interpolation=None). - Issue #1682942: configparser supports alternative option/value delimiters. - Issue #5412: configparser supports mapping protocol access. - Issue #9411: configparser supports specifying encoding for read operations. - Issue #9421: configparser's getint(), getfloat() and getboolean() methods accept vars and default arguments just like get() does. - Issue #9452: configparser supports reading from strings and dictionaries (thanks to the mapping protocol API, the latter can be used to copy data between parsers). - configparser: accepted INI file structure is now customizable, including comment prefixes, name of the DEFAULT section, empty lines in multiline values, and indentation. - Issue #10326: unittest.TestCase instances can be pickled. - Issue #9926: Wrapped TestSuite subclass does not get __call__ executed. - Issue #9920: Skip tests for cmath.atan and cmath.atanh applied to complex zeros on systems where the log1p function fails to respect the sign of zero. This fixes a test failure on AIX. - Issue #9732: Addition of getattr_static to the inspect module. - Issue #10446: Module documentation generated by pydoc now links to a version-specific online reference manual. - Make the 'No module named' exception message from importlib consistent. - Issue #10443: Add the SSLContext.set_default_verify_paths() method. - Issue #10440: Support RUSAGE_THREAD as a constant in the resource module. Patch by Robert Collins. - Issue #10429: IMAP.starttls() stored the capabilities as bytes objects, rather than strings. C-API ----- - Issue #10557: Added a new API function, PyUnicode_TransformDecimalToASCII(), which transforms non-ASCII decimal digits in a Unicode string to their ASCII equivalents. - Issue #9518: Extend the PyModuleDef_HEAD_INIT macro to explicitly zero-initialize all fields, fixing compiler warnings seen when building extension modules with gcc with "-Wmissing-field-initializers" (implied by "-W"). - Issue #10255: Fix reference leak in Py_InitializeEx(). Patch by Neil Schemenauer. - structseq.h is now included in Python.h. - Loosen PyArg_ValidateKeywordArguments to allow dict subclasses. Tests ----- - regrtest.py once again ensures the test directory is removed from sys.path when it is invoked directly as the __main__ module. - `python -m test` can be used to run the test suite as well as `python -m test.regrtest`. - Do not fail test_socket when the IP address of the local hostname cannot be looked up. - Issue #8886: Use context managers throughout test_zipfile. Patch by Eric Carstensen. Build ----- - Issue #10325: Fix two issues in the fallback definitions for PY_ULLONG_MAX and PY_LLONG_MAX that made them unsuitable for use in preprocessor conditionals. Documentation ------------- - Issue #10299: List the built-in functions in a table in functions.rst. What's New in Python 3.2 Alpha 4? ================================= *Release date: 13-Nov-2010* Core and Builtins ----------------- - Issue #10372: Import the warnings module only after the IO library is initialized, so as to avoid bootstrap issues with the '-W' option. - Issue #10293: Remove obsolete field in the PyMemoryView structure, unused undocumented value PyBUF_SHADOW, and strangely-looking code in PyMemoryView_GetContiguous. - Issue #6081: Add str.format_map(), similar to ``str.format(**mapping)``. - If FileIO.__init__ fails, close the file descriptor. - Issue #10221: dict.pop(k) now has a key error message that includes the missing key (same message d[k] returns for missing keys). - Issue #5437: A preallocated MemoryError instance should not keep traceback data (including local variables caught in the stack trace) alive infinitely. - Issue #10186: Fix the SyntaxError caret when the offset is equal to the length of the offending line. - Issue #10089: Add support for arbitrary -X options on the command line. They can be retrieved through a new attribute ``sys._xoptions``. - Issue #4388: On Mac OS X, decode command line arguments from UTF-8, instead of the locale encoding. If the LANG (and LC_ALL and LC_CTYPE) environment variable is not set, the locale encoding is ISO-8859-1, whereas most programs (including Python) expect UTF-8. Python already uses UTF-8 for the filesystem encoding and to encode command line arguments on this OS. - Issue #9713, #10114: Parser functions (e.g. PyParser_ASTFromFile) expect filenames encoded to the filesystem encoding with the surrogateescape error handler (to support undecodable bytes), instead of UTF-8 in strict mode. - Issue #9997: Don't let the name "top" have special significance in scope resolution. - Issue #9862: Compensate for broken PIPE_BUF in AIX by hard coding its value as the default 512 when compiling on AIX. - Use locale encoding instead of UTF-8 to encode and decode filenames if Py_FileSystemDefaultEncoding is not set. - Issue #10095: fp_setreadl() doesn't reopen the file, instead reuse the file descriptor. - Issue #9418: Moved private string methods ``_formatter_parser`` and ``_formatter_field_name_split`` into a new ``_string`` module. - Issue #9992: Remove PYTHONFSENCODING environment variable. Library ------- - Issue #12943: python -m tokenize support has been added to tokenize. - Issue #10465: fix broken delegating of attributes by gzip._PaddedFile. - Issue #10356: Decimal.__hash__(-1) should return -2. - Issue #1553375: logging: Added stack_info kwarg to display stack information. - Issue #5111: IPv6 Host in the Header is wrapped inside [ ]. Patch by Chandru. - Fix Fraction.__hash__ so that Fraction.__hash__(-1) is -2. (See also issue #10356.) - Issue #4471: Add the IMAP.starttls() method to enable encryption on standard IMAP4 connections. Original patch by Lorenzo M. Catucci. - Issue #1466065: Add 'validate' option to base64.b64decode to raise an error if there are non-base64 alphabet characters in the input. - Issue #10386: Add __all__ to token module; this simplifies importing in tokenize module and prevents leaking of private names through ``import *``. - Issue #4471: Properly shutdown socket in IMAP.shutdown(). Patch by Lorenzo M. Catucci. - Fix IMAP.login() to work properly. - Issue #9244: multiprocessing pool worker processes could terminate unexpectedly if the return value of a task could not be pickled. Only the ``repr`` of such errors are now sent back, wrapped in an ``MaybeEncodingError`` exception. - Issue #9244: The ``apply_async()`` and ``map_async()`` methods of ``multiprocessing.Pool`` now accepts an ``error_callback`` argument. This can be a callback with the signature ``callback(exc)``, which will be called if the target raises an exception. - Issue #10022: The dictionary returned by the ``getpeercert()`` method of SSL sockets now has additional items such as ``issuer`` and ``notBefore``. - ``usenetrc`` is now false by default for NNTP objects. - Issue #1926: Add support for NNTP over SSL on port 563, as well as STARTTLS. Patch by Andrew Vant. - Issue #10335: Add tokenize.open(), detect the file encoding using tokenize.detect_encoding() and open it in read only mode. - Issue #10321: Add support for binary data to smtplib.SMTP.sendmail, and a new method send_message to send an email.message.Message object. - Issue #6011: sysconfig and distutils.sysconfig use the surrogateescape error handler to parse the Makefile file. Avoid a UnicodeDecodeError if the source code directory name contains a non-ASCII character and the locale encoding is ASCII. - Issue #10329: The trace module writes reports using the input Python script encoding, instead of the locale encoding. Patch written by Alexander Belopolsky. - Issue #10126: Fix distutils' test_build when Python was built with --enable-shared. - Issue #9281: Prevent race condition with mkdir in distutils. Patch by Arfrever. - Issue #10229: Fix caching error in gettext. - Issue #10252: Close file objects in a timely manner in distutils code and tests. Patch by Brian Brazil, completed by Éric Araujo. - Issue #10180: Pickling file objects is now explicitly forbidden, since unpickling them produced nonsensical results. - Issue #10311: The signal module now restores errno before returning from its low-level signal handler. Patch by Hallvard B Furuseth. - Issue #10282: Add a ``nntp_implementation`` attribute to NNTP objects. - Issue #10283: Add a ``group_pattern`` argument to NNTP.list(). - Issue #10155: Add IISCGIHandler to wsgiref.handlers to support IIS CGI environment better, and to correct unicode environment values for WSGI 1.0.1. - Issue #10281: nntplib now returns None for absent fields in the OVER/XOVER response, instead of raising an exception. - wsgiref now implements and validates PEP 3333, rather than an experimental extension of PEP 333. (Note: earlier versions of Python 3.x may have incorrectly validated some non-compliant applications as WSGI compliant; if your app validates with Python <3.2b1+, but not on this version, it is likely the case that your app was not compliant.) - Issue #10280: NNTP.nntp_version should reflect the highest version advertised by the server. - Issue #10184: Touch directories only once when extracting a tarfile. - Issue #10199: New package, ``turtledemo`` now contains selected demo scripts that were formerly found under Demo/turtle. - Issue #10265: Close file objects explicitly in sunau. Patch by Brian Brazil. - Issue #10266: uu.decode didn't close in_file explicitly when it was given as a filename. Patch by Brian Brazil. - Issue #10110: Queue objects didn't recognize full queues when the maxsize parameter had been reduced. - Issue #10160: Speed up operator.attrgetter. Patch by Christos Georgiou. - logging: Added style option to basicConfig() to allow %, {} or $-formatting. - Issue #5729: json.dumps() now supports using a string such as '\t' for pretty-printing multilevel objects. - Issue #10253: FileIO leaks a file descriptor when trying to open a file for append that isn't seekable. Patch by Brian Brazil. - Support context management protocol for file-like objects returned by mailbox ``get_file()`` methods. - Issue #10246: uu.encode didn't close file objects explicitly when filenames were given to it. Patch by Brian Brazil. - Issue #10198: fix duplicate header written to wave files when writeframes() is called without data. - Close file objects in modulefinder in a timely manner. - Close an io.TextIOWrapper object in email.parser in a timely manner. - Close a file object in distutils.sysconfig in a timely manner. - Close a file object in pkgutil in a timely manner. - Issue #10233: Close file objects in a timely manner in the tarfile module and its test suite. - Issue #10093: ResourceWarnings are now issued when files and sockets are deallocated without explicit closing. These warnings are silenced by default, except in pydebug mode. - tarfile.py: Add support for all missing variants of the GNU sparse extensions and create files with holes when extracting sparse members. - Issue #10218: Return timeout status from ``Condition.wait`` in threading. - Issue #7351: Add ``zipfile.BadZipFile`` spelling of the exception name and deprecate the old name ``zipfile.BadZipfile``. - Issue #5027: The standard ``xml`` namespace is now understood by xml.sax.saxutils.XMLGenerator as being bound to http://www.w3.org/XML/1998/namespace. Patch by Troy J. Farrell. - Issue #5975: Add csv.unix_dialect class. - Issue #7761: telnetlib.interact failures on Windows fixed. - logging: Added style option to Formatter to allow %, {} or $-formatting. - Issue #5178: Added tempfile.TemporaryDirectory class that can be used as a context manager. - Issue #1349106: Generator (and BytesGenerator) flatten method and Header encode method now support a 'linesep' argument. - Issue #5639: Add a *server_hostname* argument to ``SSLContext.wrap_socket`` in order to support the TLS SNI extension. ``HTTPSConnection`` and ``urlopen()`` also use this argument, so that HTTPS virtual hosts are now supported. - Issue #10166: Avoid recursion in pstats Stats.add() for many stats items. - Issue #10163: Skip unreadable registry keys during mimetypes initialization. - logging: Made StreamHandler terminator configurable. - logging: Allowed filters to be just callables. - logging: Added tests for _logRecordClass changes. - Issue #10092: Properly reset locale in calendar.Locale*Calendar classes. - logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation. - Issue #5117: Case normalization was needed on ntpath.relpath(). Also fixed root directory issue on posixpath.relpath(). (Ported working fixes from ntpath.) - Issue #1343: xml.sax.saxutils.XMLGenerator now has an option short_empty_elements to direct it to use self-closing tags when appropriate. - Issue #9807 (part 1): Expose the ABI flags in sys.abiflags. Add --abiflags switch to python-config for command line access. - Issue #6098: Don't claim DOM level 3 conformance in minidom. - Issue #5762: Fix AttributeError raised by ``xml.dom.minidom`` when an empty XML namespace attribute is encountered. - Issue #2830: Add the ``html.escape()`` function, which quotes all problematic characters by default. Deprecate ``cgi.escape()``. - Issue #9409: Fix the regex to match all kind of filenames, for interactive debugging in doctests. - Issue #9183: ``datetime.timezone(datetime.timedelta(0))`` will now return the same instance as ``datetime.timezone.utc``. - Issue #7523: Add SOCK_CLOEXEC and SOCK_NONBLOCK to the socket module, where supported by the system. Patch by Nikita Vetoshkin. - Issue #10063: file:// scheme will stop accessing remote hosts via ftp protocol. file:// urls had fallback to access remote hosts via ftp. This was not correct, change is made to raise a URLError when a remote host is tried to access via file:// scheme. - Issue #1710703: Write structures for an empty ZIP archive when a ZipFile is created in modes 'a' or 'w' and then closed without adding any files. Raise BadZipfile (rather than IOError) when opening small non-ZIP files. - Issue #10041: The signature of optional arguments in socket.makefile() didn't match that of io.open(), and they also didn't get forwarded properly to TextIOWrapper in text mode. Patch by Kai Zhu. - Issue #9003: http.client.HTTPSConnection, urllib.request.HTTPSHandler and urllib.request.urlopen now take optional arguments to allow for server certificate checking, as recommended in public uses of HTTPS. - Issue #6612: Fix site and sysconfig to catch os.getcwd() error, eg. if the current directory was deleted. Patch written by W. Trevor King. - Issue #3873: Speed up unpickling from file objects that have a peek() method. - Issue #10075: Add a session_stats() method to SSLContext objects. - Issue #9948: Fixed problem of losing filename case information. Extension Modules ----------------- - Issue #5109: array.array constructor will now use fast code when initial data is provided in an array object with correct type. - Issue #6317: Now winsound.PlaySound only accepts unicode. - Issue #6317: Now winsound.PlaySound can accept non ascii filename. - Issue #9377: Use Unicode API for gethostname on Windows. - Issue #10143: Update "os.pathconf" values. - Issue #6518: Support context management protocol for ossaudiodev types. - Issue #678250: Make mmap flush a noop on ACCESS_READ and ACCESS_COPY. - Issue #9054: Fix a crash occurring when using the pyexpat module with expat version 2.0.1. - Issue #5355: Provide mappings from Expat error numbers to string descriptions and backwards, in order to actually make it possible to analyze error codes provided by ExpatError. - The Unicode database was updated to 6.0.0. C-API ----- - Issue #10288: The deprecated family of "char"-handling macros (ISLOWER()/ISUPPER()/etc) have now been removed: use Py_ISLOWER() etc instead. - Issue #9778: Hash values are now always the size of pointers. A new Py_hash_t type has been introduced. Tools/Demos ----------- - Issue #10117: Tools/scripts/reindent.py now accepts source files that use encoding other than ASCII or UTF-8. Source encoding is preserved when reindented code is written to a file. - Issue #7287: Demo/imputil/knee.py was removed. Tests ----- - Issue #3699: Fix test_bigaddrspace and extend it to test bytestrings as well as unicode strings. Initial patch by Sandro Tosi. - Issue #10294: Remove dead code form test_unicode_file. - Issue #10123: Don't use non-ascii filenames in test_doctest tests. Add a new test specific to unicode (non-ascii name and filename). Build ----- - Issue #10268: Add a --enable-loadable-sqlite-extensions option to configure. - Issue #8852: Allow the socket module to build on OpenSolaris. - Drop -OPT:Olimit compiler option. - Issue #10094: Use versioned .so files on GNU/kfreeBSD and the GNU Hurd. - Accept Oracle Berkeley DB 5.0 and 5.1 as backend for the dbm extension. - Issue #7473: avoid link errors when building a framework with a different set of architectures than the one that is currently installed. What's New in Python 3.2 Alpha 3? ================================= *Release date: 09-Oct-2010* Core and Builtins ----------------- - Issue #10068: Global objects which have reference cycles with their module's dict are now cleared again. This causes issue #7140 to appear again. - Issue #9738: Document PyErr_SetString() and PyErr_SetFromErrnoWithFilename() encodings. - ast.literal_eval() can now handle negative numbers. It is also a little more liberal in what it accepts without compromising the safety of the evaluation. For example, 3j+4 and 3+4+5 are both accepted. - Issue #10006: type.__abstractmethods__ now raises an AttributeError. As a result metaclasses can now be ABCs (see #9533). - Issue #8670: ctypes.c_wchar supports non-BMP characters with 32 bits wchar_t. - Issue #8670: PyUnicode_AsWideChar() and PyUnicode_AsWideCharString() replace UTF-16 surrogate pairs by single non-BMP characters for 16 bits Py_UNICODE and 32 bits wchar_t (eg. Linux in narrow build). - Issue #10003: Allow handling of SIGBREAK on Windows. Fixes a regression introduced by issue #9324. - Issue #9979: Create function PyUnicode_AsWideCharString(). - Issue #7397: Mention that importlib.import_module() is probably what someone really wants to be using in __import__'s docstring. - Issue #8521: Allow CreateKeyEx, OpenKeyEx, and DeleteKeyEx functions of winreg to use named arguments. - Issue #9930: Remove bogus subtype check that was causing (e.g.) float.__rdiv__(2.0, 3) to return NotImplemented instead of the expected 1.5. - Issue #9808: Implement os.getlogin for Windows. Patch by Jon Anglin. - Issue #9901: Destroying the GIL in Py_Finalize() can fail if some other threads are still running. Instead, reinitialize the GIL on a second call to Py_Initialize(). - All SyntaxErrors now have a column offset and therefore a caret when the error is printed. - Issue #9252: PyImport_Import no longer uses a fromlist hack to return the module that was imported, but instead gets the module from sys.modules. - Issue #9213: The range type_items now provides index() and count() methods, to conform to the Sequence ABC. Patch by Daniel Urban and Daniel Stutzbach. - Issue #7994: Issue a PendingDeprecationWarning if object.__format__ is called with a non-empty format string. This is an effort to future-proof user code. If a derived class does not currently implement __format__ but later adds its own __format__, it would most likely break user code that had supplied a format string. This will be changed to a DeprecationWaring in Python 3.3 and it will be an error in Python 3.4. - Issue #9828: Destroy the GIL in Py_Finalize(), so that it gets properly re-created on a subsequent call to Py_Initialize(). The problem (a crash) wouldn't appear in 3.1 or 2.7 where the GIL's structure is more trivial. - Issue #9210: Configure option --with-wctype-functions was removed. Using the functions from the libc caused the methods .upper() and lower() to become locale aware and created subtly wrong results. - Issue #9738: PyUnicode_FromFormat() and PyErr_Format() raise an error on a non-ASCII byte in the format string. - Issue #4617: Previously it was illegal to delete a name from the local namespace if it occurs as a free variable in a nested block. This limitation of the compiler has been lifted, and a new opcode introduced (DELETE_DEREF). - Issue #9804: ascii() now always represents unicode surrogate pairs as a single ``\UXXXXXXXX``, regardless of whether the character is printable or not. Also, the "backslashreplace" error handler now joins surrogate pairs into a single character on UCS-2 builds. - Issue #9757: memoryview objects get a release() method to release the underlying buffer (previously this was only done when deallocating the memoryview), and gain support for the context management protocol. - Issue #9797: pystate.c wrongly assumed that zero couldn't be a valid thread-local storage key. Library ------- - Issue #2236: distutils' mkpath ignored the mode parameter. - Fix typo in one sdist option (medata-check). - Issue #9199: Fix incorrect use of distutils.cmd.Command.announce. - Issue #1718574: Fix options that were supposed to accept arguments but did not in build_clib. - Issue #9437: Fix building C extensions with non-default LDFLAGS. - Issue #4661: email can now parse bytes input and generate either converted 7bit output or bytes output. Email version bumped to 5.1.0. - Issue #1589: Add ssl.match_hostname(), to help implement server identity verification for higher-level protocols. - Issue #9759: GzipFile now raises ValueError when an operation is attempted after the file is closed. Patch by Jeffrey Finkelstein. - Issue #9042: Fix interaction of custom translation classes and caching in gettext. - Issue #6706: asyncore.dispatcher now provides a handle_accepted() method returning a (sock, addr) pair which is called when a connection has been established with a new remote endpoint. This is supposed to be used as a replacement for old handle_accept() and avoids the user to call accept() directly. - Issue #9065: tarfile no longer uses "root" as the default for the uname and gname field. - Issue #8980: Fixed a failure in distutils.command check that was shadowed by an environment that does not have docutils. Patch by Arfrever. - Issue #1050268: parseaddr now correctly quotes double quote and backslash characters that appear inside quoted strings in email addresses. - Issue #10004: quoprimime no longer generates a traceback when confronted with invalid characters after '=' in a Q-encoded word. - Issue #1491: BaseHTTPServer nows send a ``100 Continue`` response before sending a 200 OK for the Expect: 100-continue request header. - Issue #9360: Cleanup and improvements to the nntplib module. The API now conforms to the philosophy of bytes and unicode separation in Python 3. A test suite has also been added. - Issue #9962: GzipFile now has the peek() method. - Issue #9090: When a socket with a timeout fails with EWOULDBLOCK or EAGAIN, retry the select() loop instead of bailing out. This is because select() can incorrectly report a socket as ready for reading (for example, if it received some data with an invalid checksum). - Issue #3612: Added new types to ctypes.wintypes. (CHAR and pointers) - Issue #9950: Fix socket.sendall() crash or misbehaviour when a signal is received. Now sendall() properly calls signal handlers if necessary, and retries sending if these returned successfully, including on sockets with a timeout. - Issue #9947: logging: Fixed locking bug in stopListening. - Issue #9945: logging: Fixed locking bugs in addHandler/removeHandler. - Issue #9936: Fixed executable lines' search in the trace module. - Issue #9790: Rework imports necessary for samefile and sameopenfile in ntpath. - Issue #9928: Properly initialize the types exported by the bz2 module. - Issue #1675951: Allow GzipFile to work with unseekable file objects. Patch by Florian Festi. - Logging: Added QueueListener class to facilitate logging usage for performance-critical threads. - Issue #9916: Add some missing errno symbols. - Issue #9877: Expose sysconfig.get_makefile_filename() - logging: Added hasHandlers() method to Logger and LoggerAdapter. - Issue #9908: Fix os.stat() on bytes paths under Windows 7. - Issue #2643: msync() is not called anymore when deallocating an open mmap object, only munmap(). - logging: Changed LoggerAdapter implementation internally, to make it easier to subclass in a useful way. - logging: hasHandlers method was added to Logger, and isEnabledFor, getEffectiveLevel, hasHandlers and setLevel were added to LoggerAdapter. LoggerAdapter was introduced into the unit tests for logging. - Issue #1686: Fix string.Template when overriding the pattern attribute. - Issue #9854: SocketIO objects now observe the RawIOBase interface in non-blocking mode: they return None when an operation would block (instead of raising an exception). - Issue #1730136: Fix the comparison between a tk.font.Font and an object of another kind. - Issue #9441: logging has better coverage for rotating file handlers. - Issue #9865: collections.OrderedDict now has a __sizeof__ method. - Issue #9854: The default read() implementation in io.RawIOBase now handles non-blocking readinto() returning None correctly. - Issue #1552: socket.socketpair() now returns regular socket.socket objects supporting the whole socket API (rather than the "raw" _socket.socket objects). - Issue #9853: Fix the signature of SSLSocket.recvfrom() and SSLSocket.sendto() to match the corresponding socket methods. - Issue #9840: Added a decorator to reprlib for wrapping __repr__ methods to make them handle recursive calls within the same thread. - logging: Enhanced HTTPHandler with secure and credentials initializers. - Issue #767645: Set os.path.supports_unicode_filenames to True on Mac OS X. - Issue #9837: The read() method of ZipExtFile objects (as returned by ZipFile.open()) could return more bytes than requested. - Issue #9826: OrderedDict.__repr__ can now handle self-referential values: d['x'] = d. - Issue #9825: Using __del__ in the definition of collections.OrderedDict made it possible for the user to create self-referencing ordered dictionaries which become permanently uncollectable GC garbage. Reinstated the Python 3.1 approach of using weakref proxies so that reference cycles never get created in the first place. - Issue #9579, #9580: Fix os.confstr() for value longer than 255 bytes and encode the value with filesystem encoding and surrogateescape (instead of utf-8 in strict mode) . Patch written by David Watson. - Issue #9632: Remove sys.setfilesystemencoding() function: use PYTHONFSENCODING environment variable to set the filesystem encoding at Python startup. sys.setfilesystemencoding() creates inconsistencies because it is unable to reencode all filenames in all objects. - Issue #9410: Various optimizations to the pickle module, leading to speedups up to 4x (depending on the benchmark). Mostly ported from Unladen Swallow; initial patch by Alexandre Vassalotti. - The pprint module now supports printing OrderedDicts in their given order (formerly, it would sort the keys). - Logging: Added QueueHandler class to facilitate logging usage with multiprocessing. - Issue #9707: Rewritten reference implementation of threading.local which is friendlier towards reference cycles. This change is not normally visible since an optimized C implementation (_thread._local) is used instead. - Issue #6394: os.getppid() is now supported on Windows. Note that it will still return the id of the parent process after it has exited. This process id may even have been reused by another unrelated process. - Issue #9792: In case of connection failure, socket.create_connection() would swallow the exception and raise a new one, making it impossible to fetch the original errno, or to filter timeout errors. Now the original error is re-raised. - Issue #9758: When fcntl.ioctl() was called with mutable_flag set to True, and the passed buffer was exactly 1024 bytes long, the buffer wouldn't be updated back after the system call. Original patch by Brian Brazil. - Updates to the random module: * Document which parts of the module are guaranteed to stay the same across versions and which parts are subject to change. * Update the seed() method to use all of the bits in a string instead of just the hash value. This makes better use of the seed value and assures the seeding is platform independent. Issue #7889. * Improved the random()-->integer algorithm used in choice(), shuffle(), sample(), randrange(), and randint(). Formerly, it used int(n*random()) which has a slight bias whenever n is not a power of two. Issue #9025. * Improved documentation of arguments to randrange(). Issue #9379. - collections.OrderedDict now supports a new method for repositioning keys to either end. - Issue #9754: Similarly to assertRaises and assertRaisesRegexp, unittest test cases now also have assertWarns and assertWarnsRegexp methods to check that a given warning type was triggered by the code under test. - Issue #5506: BytesIO objects now have a getbuffer() method exporting a view of their contents without duplicating them. The view is both readable and writable. - Issue #7566: Implement os.path.sameopenfile for Windows. - Issue #9293: I/O streams now raise ``io.UnsupportedOperation`` when an unsupported operation is attempted (for example, writing to a file open only for reading). - hashlib has two new constant attributes: algorithms_guaranteed and algorithms_available that respectively list the names of hash algorithms guaranteed to exist in all Python implementations and the names of hash algorithms available in the current process. - A new package ``concurrent.futures`` as defined by PEP 3148. C-API ----- - Add PyErr_SyntaxLocationEx, which supports passing a column offset. - Issue #9834: Don't segfault in PySequence_GetSlice, PySequence_SetSlice, or PySequence_DelSlice when the object doesn't have any mapping operations defined. Tools/Demos ----------- - Issue #9188: The gdb extension now handles correctly narrow (UCS2) as well as wide (UCS4) unicode builds for both the host interpreter (embedded inside gdb) and the interpreter under test. Tests ----- - Issue #9308: Added tests for importing encoded modules that do not depend on specific stdlib modules being encoded in a certain way. - Issue #1051: Add a script (Lib/test/make_ssl_certs.py) to generate the custom certificate and private key files used by SSL-related certs. - Issue #9978: Wait until subprocess completes initialization. (Win32KillTests in test_os) - Issue #7110: regrtest now sends test failure reports and single-failure tracebacks to stderr rather than stdout. - Issue #9628: fix runtests.sh -x option so more than one test can be excluded. - Issue #9899: Fix test_tkinter.test_font on various platforms. Patch by Ned Deily. - Issue #9894: Do not hardcode ENOENT in test_subprocess. - Issue #9315: Added tests for the trace module. Patch by Eli Bendersky. - Issue #9323: Make test.regrtest.__file__ absolute, this was not always the case when running profile or trace, for example. - Issue #9568: Fix test_urllib2_localnet on OS X 10.3. Build ----- - Issue #10062: Allow building on platforms which do not have sem_timedwait. - Issue #10054: Some platforms provide uintptr_t in inttypes.h. Patch by Akira Kitada. - Issue #10055: Make json C89-compliant in UCS4 mode. - Issue #9552: Avoid unnecessary rebuild of OpenSSL. (Windows) - Issue #1633863: Don't ignore $CC under AIX. - Issue #9810: Compile bzip2 source files in Python's project file directly. It used to be built with bzip2's makefile. - Issue #9848: Stopping trying to build _weakref in setup.py as it is a built-in module. - Issue #9806: python-config now has an ``--extension-suffix`` option that outputs the suffix for dynamic libraries including the ABI version name defined by PEP 3149. - Issue #941346: Improve the build process under AIX and allow Python to be built as a shared library. Patch by Sébastien Sablé. - Issue #4026: Make the fcntl extension build under AIX. Patch by Sébastien Sablé. - Issue #9701: The MacOSX installer can patch the shell profile to ensure that the "bin" directory inside the framework is on the shell's search path. This feature now also supports the ZSH shell. What's New in Python 3.2 Alpha 2? ================================= *Release date: 05-Sep-2010* Core and Builtins ----------------- - Issue #9225: Remove the ROT_FOUR and DUP_TOPX opcode, the latter replaced by the new (and simpler) DUP_TOP_TWO. Performance isn't changed, but our bytecode is a bit simplified. Patch by Demur Rumed. - Issue #9766: Rename poorly named variables exposed by _warnings to prevent confusion with the proper variables names from 'warnings' itself. - Issue #9212: dict_keys and dict_items now provide the isdisjoint() method, to conform to the Set ABC. Patch by Daniel Urban. - Issue #9737: Fix a crash when trying to delete a slice or an item from a memoryview object. - Issue #9549: sys.setdefaultencoding() and PyUnicode_SetDefaultEncoding() are now removed, since their effect was inexistent in 3.x (the default encoding is hardcoded to utf-8 and cannot be changed). - Issue #7415: PyUnicode_FromEncodedObject() now uses the new buffer API properly. Patch by Stefan Behnel. - Issue #5553: The Py_LOCAL_INLINE macro now results in inlining on most platforms. Previously, it inlined only when using Microsoft Visual C. - Issue #9712: Fix tokenize on identifiers that start with non-ascii names. - Issue #9688: __basicsize__ and __itemsize__ must be accessed as Py_ssize_t. - Issue #9684: Added a definition for SIZEOF_WCHAR_T to PC/pyconfig.h, to match the pyconfig.h generated by configure on other systems. - Issue #9666: Only catch AttributeError in hasattr(). All other exceptions that occur during attribute lookup are now propagated to the caller. - Issue #8622: Add PYTHONFSENCODING environment variable to override the filesystem encoding. - Issue #5127: The C functions that access the Unicode Database now accept and return characters from the full Unicode range, even on narrow unicode builds (Py_UNICODE_TOLOWER, Py_UNICODE_ISDECIMAL, and others). A visible difference in Python is that unicodedata.numeric() now returns the correct value for large code points, and repr() may consider more characters as printable. - Issue #9425: Create PyModule_GetFilenameObject() function to get the filename as a unicode object, instead of a byte string. Function needed to support unencodable filenames. Deprecate PyModule_GetFilename() in favor on the new function. - Issue #8063: Call _PyGILState_Init() earlier in Py_InitializeEx(). - Issue #9612: The set object is now 64-bit clean under Windows. - Issue #8202: sys.argv[0] is now set to '-m' instead of '-c' when searching for the module file to be executed with the -m command line option. - Issue #9599: Create PySys_FormatStdout() and PySys_FormatStderr() functions to write a message formatted by PyUnicode_FromFormatV() to sys.stdout and sys.stderr. - Issue #9542: Create PyUnicode_FSDecoder() function, a ParseTuple converter: decode bytes objects to unicode using PyUnicode_DecodeFSDefaultAndSize(); str objects are output as-is. - Issue #9203: Computed gotos are now enabled by default on supported compilers (which are detected by the configure script). They can still be disable selectively by specifying --without-computed-gotos. - Issue #9425: Create PyErr_WarnFormat() function, similar to PyErr_WarnEx() but use PyUnicode_FromFormatV() to format the warning message. - Issue #8530: Prevent stringlib fastsearch from reading beyond the front of an array. - Issue #5319: Print an error if flushing stdout fails at interpreter shutdown. - Issue #9337: The str() of a float or complex number is now identical to its repr(). - Issue #9416: Fix some issues with complex formatting where the output with no type specifier failed to match the str output: - format(complex(-0.0, 2.0), '-') omitted the real part from the output, - format(complex(0.0, 2.0), '-') included a sign and parentheses. Extension Modules ----------------- - Issue #8013: time.asctime and time.ctime no longer call system asctime and ctime functions. The year range for time.asctime is now 1900 through maxint. The range for time.ctime is the same as for time.localtime. The string produced by these functions is longer than 24 characters when year is greater than 9999. - Issue #6608: time.asctime is now checking struct tm fields its input before passing it to the system asctime. Patch by MunSic Jeong. - Issue #8734: Avoid crash in msvcrt.get_osfhandle() when an invalid file descriptor is provided. Patch by Pascal Chambon. - Issue #7736: Release the GIL around calls to opendir() and closedir() in the posix module. Patch by Marcin Bachry. - Issue #4835: make PyLong_FromSocket_t() and PyLong_AsSocket_t() private to the socket module, and fix the width of socket descriptors to be correctly detected under 64-bit Windows. - Issue #1027206: Support IDNA in gethostbyname, gethostbyname_ex, getaddrinfo and gethostbyaddr. getnameinfo is now restricted to numeric addresses as input. - Issue #9214: Set operations on a KeysView or ItemsView in collections now correctly return a set. Patch by Eli Bendersky. - Issue #5737: Add Solaris-specific mnemonics in the errno module. Patch by Matthew Ahrens. - Restore GIL in nis_cat in case of error. Decode NIS data to fs encoding, using the surrogate error handler. - Issue #665761: ``functools.reduce()`` will no longer mask exceptions other than ``TypeError`` raised by the iterator argument. - Issue #9570: Use PEP 383 decoding in os.mknod and os.mkfifo. - Issue #6915: Under Windows, os.listdir() didn't release the Global Interpreter Lock around all system calls. Original patch by Ryan Kelly. - Issue #8524: Add a detach() method to socket objects, so as to put the socket into the closed state without closing the underlying file descriptor. - Issue #477863: Emit a ResourceWarning at shutdown if gc.garbage is not empty. - Issue #6869: Fix a refcount problem in the _ctypes extension. - Issue #5504: ctypes should now work with systems where mmap can't be PROT_WRITE and PROT_EXEC. - Issue #9507: Named tuple repr will now automatically display the right name in a tuple subclass. - Issue #9324: Add parameter validation to signal.signal on Windows in order to prevent crashes. - Issue #9526: Remove some outdated (int) casts that were preventing the array module from working correctly with arrays of more than 2**31 elements. - Fix memory leak in ssl._ssl._test_decode_cert. - Issue #8065: Fix memory leak in readline module (from failure to free the result of history_get_history_state()). - Issue #9450: Fix memory leak in readline.replace_history_item and readline.remove_history_item for readline version >= 5.0. - Issue #8105: Validate file descriptor passed to mmap.mmap on Windows. - Issue #8046: Add context management protocol support and .closed property to mmap objects. Library ------- - Issue #7451: Improve decoding performance of JSON objects, and reduce the memory consumption of said decoded objects when they use the same strings as keys. - Issue #1100562: Fix deep-copying of objects derived from the list and dict types. Patch by Michele Orrù and Björn Lindqvist. - Issue #9753: Fixed socket.dup, which did not always work correctly on Windows. - Issue #9421: Made the get<type> methods consistently accept the vars and default arguments on all parser classes. - Issue #7005: Fixed output of None values for RawConfigParser.write and ConfigParser.write. - Issue #8990: array.fromstring() and array.tostring() get renamed to frombytes() and tobytes(), respectively, to avoid confusion. Furthermore, array.frombytes(), array.extend() as well as the array.array() constructor now accept bytearray objects. Patch by Thomas Jollans. - Issue #808164: Fixed socket.close to avoid references to globals, to avoid issues when socket.close is called from a __del__ method. - Issue #9706: ssl module provides a better error handling in various circumstances. - Issue #1868: Eliminate subtle timing issues in thread-local objects by getting rid of the cached copy of thread-local attribute dictionary. - Issue #1512791: In setframerate() in the wave module, non-integral frame rates are rounded to the nearest integer. - Issue #8797: urllib2 does a retry for Basic Authentication failure instead of falling into recursion. - Issue #1194222: email.utils.parsedate now returns RFC2822 compliant four character years even if the message contains RFC822 two character years. - Issue #8750: Fixed MutableSet's methods to correctly handle reflexive operations on its self, namely x -= x and x ^= x. - Issue #9129: smtpd.py is vulnerable to DoS attacks deriving from missing error handling when accepting a new connection. - Issue #9601: ftplib now provides a workaround for non-compliant implementations such as IIS shipped with Windows server 2003 returning invalid response codes for MKD and PWD commands. - Issue #658749: asyncore's connect() method now correctly interprets winsock errors. - Issue #9501: Fixed logging regressions in cleanup code. - Fix functools.total_ordering() to skip methods inherited from object. - Issue #9572: Importlib should not raise an exception if a directory it thought it needed to create was done concurrently by another process. - Issue #9617: Signals received during a low-level write operation aren't ignored by the buffered IO layer anymore. - Issue #843590: Make "macintosh" an alias to the "mac_roman" encoding. - Create os.fsdecode(): decode from the filesystem encoding with surrogateescape error handler, or strict error handler on Windows. - Issue #3488: Provide convenient shorthand functions ``gzip.compress`` and ``gzip.decompress``. Original patch by Anand B. Pillai. - Issue #8807: poplib.POP3_SSL class now accepts a context parameter, which is a ssl.SSLContext object allowing bundling SSL configuration options, certificates and private keys into a single (potentially long-lived) structure. - Issue #8866: parameters passed to socket.getaddrinfo can now be specified as single keyword arguments. - Address XXX comment in dis.py by having inspect.py prefer to reuse the dis.py compiler flag values over defining its own. - Issue #9147: Added dis.code_info() which is similar to show_code() but returns formatted code information in a string rather than displaying on screen. - Issue #9567: functools.update_wrapper now adds a __wrapped__ attribute pointing to the original callable. - Issue #3445: functools.update_wrapper now tolerates missing attributes on wrapped callables. - Issue #5867: Add abc.abstractclassmethod and abc.abstractstaticmethod. - Issue #9605: posix.getlogin() decodes the username with file filesystem encoding and surrogateescape error handler. Patch written by David Watson. - Issue #9604: posix.initgroups() encodes the username using the fileystem encoding and surrogateescape error handler. Patch written by David Watson. - Issue #9603: posix.ttyname() and posix.ctermid() decode the terminal name using the filesystem encoding and surrogateescape error handler. Patch written by David Watson. - Issue #7647: The posix module now has the ST_RDONLY and ST_NOSUID constants, for use with the statvfs() function. Patch by Adam Jackson. - Issue #8688: MANIFEST files created by distutils now include a magic comment indicating they are generated. Manually maintained MANIFESTs without this marker will not be overwritten or removed. - Issue #7467: when reading a file from a ZIP archive, its CRC is checked and a BadZipfile error is raised if it doesn't match (as used to be the case in Python 2.5 and earlier). - Issue #9550: a BufferedReader could issue an additional read when the original read request had been satisfied, which could block indefinitely when the underlying raw IO channel was e.g. a socket. Report and original patch by Jason V. Miller. - Issue #3757: thread-local objects now support cyclic garbage collection. Thread-local objects involved in reference cycles will be deallocated timely by the cyclic GC, even if the underlying thread is still running. - Issue #9452: Add read_file, read_string, and read_dict to the configparser API; new source attribute to exceptions. - Issue #6231: Fix xml.etree.ElementInclude to include the tail of the current node. - Issue #8047: Fix the xml.etree serializer to return bytes by default. Use ``encoding="unicode"`` to generate a Unicode string. - Issue #8280: urllib2's Request method will remove fragments in the url. This is how it is supposed to work, wget and curl do the same. Previous behavior was wrong. - Issue #6683: For SMTP logins we now try all authentication methods advertised by the server. Many servers are buggy and advertise authentication methods they do not support in reality. - Issue #8814: function annotations (the ``__annotations__`` attribute) are now included in the set of attributes copied by default by functools.wraps and functools.update_wrapper. Patch by Terrence Cole. - Issue #2944: asyncore doesn't handle connection refused correctly. - Issue #4184: Private attributes on smtpd.SMTPChannel made public and deprecate the private attributes. Add tests for smtpd module. - Issue #3196: email header decoding is now forgiving if an RFC2047 encoded word encoded in base64 is lacking padding. - Issue #9444: Argparse now uses the first element of prefix_chars as the option character for the added 'h/help' option if prefix_chars does not contain a '-', instead of raising an error. - Issue #7372: Fix pstats regression when stripping paths from profile data generated with the profile module. - Issue #9428: Fix running scripts with the profile/cProfile modules from the command line. - Issue #7781: Fix restricting stats by entry counts in the pstats interactive browser. - Issue #9209: Do not crash in the pstats interactive browser on invalid regular expressions. - Update collections.OrderedDict to match the implementation in Py2.7 (based on lists instead of weakly referenced Link objects). - Issue #8397: Raise an error when attempting to mix iteration and regular reads on a BZ2File object, rather than returning incorrect results. - Issue #9448: Fix a leak of OS resources (mutexes or semaphores) when re-initializing a buffered IO object by calling its ``__init__`` method. - 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 #7395: Fix tracebacks in pstats interactive browser. - Issue #8230: Fix Lib/test/sortperf.py. - Issue #8620: when a cmd.Cmd() is fed input that reaches EOF without a final newline, it no longer truncates the last character of the last command line. - 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 #7909: Do not touch paths with the special prefixes ``\\.\`` or ``\\?\`` in ntpath.normpath(). - Issue #1286: Allow using fileinput.FileInput as a context manager. - Add lru_cache() decorator to the functools module. Tools/Demos ----------- - Fix ``Tools/scripts/checkpyc.py`` after PEP 3147. - Issue #8867: Fix ``Tools/scripts/serve.py`` to work with files containing non-ASCII content. Tests ----- - Issue #9601: Provide a test case for ftplib.parse257. - Issue #8857: Provide a test case for socket.getaddrinfo. - Issue #7564: Skip test_ioctl if another process is attached to /dev/tty. - Issue #8433: Fix test_curses failure with newer versions of ncurses. - Issue #9496: Provide a test suite for the rlcompleter module. Patch by Michele Orrù. - Issue #8687: provide a test suite for sched.py module. Build ----- - Issue #1303434: Generate ZIP file containing all PDBs. - Issue #9193: PEP 3149 is accepted. - Issue #3101: Helper functions _add_one_to_index_C() and _add_one_to_index_F() become _Py_add_one_to_index_C() and _Py_add_one_to_index_F(), respectively. - Issue #9700: define HAVE_BROKEN_POSIX_SEMAPHORES under AIX 6.x. Patch by Sébastien Sablé. - Don't run pgen twice when using make -j. What's New in Python 3.2 Alpha 1? ================================= *Release date: 01-Aug-2010* Core and Builtins ----------------- - Issue #8991: convertbuffer() rejects discontigious buffers. - Issue #7616: Fix copying of overlapping memoryview slices with the Intel compiler. - Issue #8413: structsequence now subclasses tuple. - 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 #9011: A negated imaginary literal (e.g., "-7j") now has real part -0.0 rather than 0.0. So "-7j" is now exactly equivalent to "-(7j)". - Be more specific in error messages about positional arguments. - Issue #8949: "z" format of PyArg_Parse*() functions doesn't accept bytes objects, as described in the documentation. - Issue #6543: Write the traceback in the terminal encoding instead of utf-8. Fix the encoding of the modules filename. Patch written by Amaury Forgeot d'Arc. - Issue #9011: Remove buggy and unnecessary (in 3.x) ST->AST compilation code dealing with unary minus applied to a constant. The removed code was mutating the ST, causing a second compilation to fail. - Issue #850997: mbcs encoding (Windows only) handles errors argument: strict mode raises unicode errors. The encoder only supports "strict" and "replace" error handlers, the decoder only supports "strict" and "ignore" error handlers. Patch written by Mark Hammond. - Issue #8850: Remove "w" and "w#" formats from PyArg_Parse*() functions, use "w*" format instead. Add tests for "w*" format. - Issue #8592: PyArg_Parse*() functions raise a TypeError for "y", "u" and "Z" formats if the string contains a null byte/character. Write unit tests for string formats. - Issue #7490: To facilitate sharing of doctests between 2.x and 3.x test suites, the IGNORE_EXCEPTION_DETAIL directive now also ignores the module location of the raised exception. - Issue #8969: On Windows, use mbcs codec in strict mode to encode and decode filenames and enable os.fsencode(). - 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 #8950: (See also issue #5080). Py_ArgParse*() functions now raise TypeError instead of giving a DeprecationWarning when a float is parsed using the 'L' code (for long long). (All other integer codes already raise TypeError in this case.) - Issue #8922: Normalize the encoding name in PyUnicode_AsEncodedString() to enable shortcuts for upper case encoding name. Add also a shortcut for "iso-8859-1" in PyUnicode_AsEncodedString() and PyUnicode_Decode(). - Issue #8838: Remove codecs.charbuffer_encode() function. The buffer protocol doesn't support "char buffer" anymore in Python 3. - Issue #8339: Remove "t#" format of PyArg_Parse*() functions, use "s#" or "s*" instead. codecs.charbuffer_encode() now accepts modifiable buffer objects like bytearray. - Issue #8837: Remove "O?" format of PyArg_Parse*() functions. The format is no used anymore and it was never documented. - In str.format(), raise a ValueError when indexes to arguments are too large. - Issue #2844: Make int('42', n) consistently raise ValueError for invalid integers n (including n = -909). - Issue #8188: Introduce a new scheme for computing hashes of numbers (instances of int, float, complex, decimal.Decimal and fractions.Fraction) that makes it easy to maintain the invariant that hash(x) == hash(y) whenever x and y have equal value. - Issue #8748: Fix two issues with comparisons between complex and integer objects. (1) The comparison could incorrectly return True in some cases (2**53+1 == complex(2**53) == 2**53), breaking transitivity of equality. (2) The comparison raised an OverflowError for large integers, leading to unpredictable exceptions when combining integers and complex objects in sets or dicts. - Issue #8766: Initialize _warnings module before importing the first module. Fix a crash if an empty directory called "encodings" exists in sys.path. - Issue #8589: Decode PYTHONWARNINGS environment variable with the file system encoding and surrogateescape error handler instead of the locale encoding to be consistent with os.environ. Add PySys_AddWarnOptionUnicode() function. - PyObject_Dump() encodes unicode objects to utf8 with backslashreplace (instead of strict) error handler to escape surrogates. - Issue #8715: Create PyUnicode_EncodeFSDefault() function: Encode a Unicode object to Py_FileSystemDefaultEncoding with the "surrogateescape" error handler, and return bytes. If Py_FileSystemDefaultEncoding is not set, fall back to UTF-8. - Enable shortcuts for common encodings in PyUnicode_AsEncodedString() for any error handler, not only the default error handler (strict). - Issue #8610: Load file system codec at startup, and display a fatal error on failure. Set the file system encoding to utf-8 (instead of None) if getting the locale encoding failed, or if nl_langinfo(CODESET) function is missing. - PyFile_FromFd() uses PyUnicode_DecodeFSDefault() instead of PyUnicode_FromString() to support surrogates in the filename and use the right encoding. - Issue #7507: Quote "!" in pipes.quote(); it is special to some shells. - PyUnicode_DecodeFSDefaultAndSize() uses surrogateescape error handler. - Issue #8419: Prevent the dict constructor from accepting non-string keyword arguments. - Issue #8124: PySys_WriteStdout() and PySys_WriteStderr() don't execute indirectly Python signal handlers anymore because mywrite() ignores exceptions (KeyboardInterrupt). - Issue #8092: Fix PyUnicode_EncodeUTF8() to support error handler producing unicode string (eg. backslashreplace). - Issue #8485: PyUnicode_FSConverter() doesn't accept byteearray objects anymore, you have to convert your bytearray filenames to bytes. - Issue #7332: Remove the 16KB stack-based buffer in PyMarshal_ReadLastObjectFromFile, which doesn't bring any noticeable benefit compared to the dynamic memory allocation fallback. Patch by Charles-François Natali. - Issue #8417: Raise an OverflowError when an integer larger than sys.maxsize is passed to bytes or bytearray. - Issue #7301: Add environment variable $PYTHONWARNINGS. - Issue #8329: Don't return the same lists from select.select when no fds are changed. - Issue #8259: 1L << (2**31) no longer produces an 'outrageous shift error' on 64-bit machines. The shift count for either left or right shift is permitted to be up to sys.maxsize. - Ensure that tokenization of identifiers is not affected by locale. - Issue #1222585: Added LDCXXSHARED for C++ support. Patch by Arfrever. - Raise a TypeError when trying to delete a T_STRING_INPLACE struct member. - Issue #8211: Save/restore CFLAGS around AC_PROG_CC in configure.in, in case it is set. - Issue #8226: sys.setfilesystemencoding() raises a LookupError if the encoding is unknown. - Issue #1583863: A str subclass can now override the __str__ method. - Issue #8014: Setting a T_UINT or T_PYSSIZET attribute of an object with PyMemberDefs could produce an internal error; raise TypeError instead. - Issue #7845: Rich comparison methods on the complex type now return NotImplemented rather than raising a TypeError when comparing with an incompatible type; this allows user-defined classes to implement their own comparisons with complex. - Issue #3137: Don't ignore errors at startup, especially a keyboard interrupt (SIGINT). If an error occurs while importing the site module, the error is printed and Python exits. Initialize the GIL before importing the site module. - Issue #7173: Generator finalization could invalidate sys.exc_info(). - 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. - Handle errors from looking up __prepare__ correctly. - Issue #5939: Add additional runtime checking to ensure a valid capsule in Modules/_ctypes/callproc.c. - Issue #7309: Fix unchecked attribute access when converting UnicodeEncodeError, UnicodeDecodeError, and UnicodeTranslateError to strings. - Issue #6902: Fix problem with built-in types format incorrectly with 0 padding. - Issue #7988: Fix default alignment to be right aligned for complex.__format__. Now it matches other numeric types. - Issue #5988: Remove deprecated functions PyOS_ascii_formatd, PyOS_ascii_strtod, and PyOS_ascii_atof. Use PyOS_double_to_string and PyOS_string_to_double instead. See issue #5835 for the original deprecations. - Issue #7385: Fix a crash in `MemoryView_FromObject` when `PyObject_GetBuffer` fails. Patch by Florent Xicluna. - Issue #7788: Fix an interpreter crash produced by deleting a list slice with very large step value. - Issue #7766: Change sys.getwindowsversion() return value to a named tuple and add the additional members returned in an OSVERSIONINFOEX structure. The new members are service_pack_major, service_pack_minor, suite_mask, and product_type. - Issue #7561: Operations on empty bytearrays (such as `int(bytearray())`) could crash in many places because of the PyByteArray_AS_STRING() macro returning NULL. The macro now returns a statically allocated empty string instead. - Issue #6690: Optimize the bytecode for expressions such as `x in {1, 2, 3}`, where the right hand operand is a set of constants, by turning the set into a frozenset and pre-building it as a constant. The comparison operation is made against the constant instead of building a new set each time it is executed (a similar optimization already existed which turned a list of constants into a pre-built tuple). Patch and additional tests by Dave Malcolm. - Issue #7622: Improve the split(), rsplit(), splitlines() and replace() methods of bytes, bytearray and unicode objects by using a common implementation based on stringlib's fast search. Patch by Florent Xicluna. - Issue #7632: Fix various str -> float conversion bugs present in 2.7 alpha 2, including: (1) a serious 'wrong output' bug that could occur for long (> 40 digit) input strings, (2) a crash in dtoa.c that occurred in debug builds when parsing certain long numeric strings corresponding to subnormal values, (3) a memory leak for some values large enough to cause overflow, and (4) a number of flaws that could lead to incorrectly rounded results. - The __complex__ method is now looked up on the class of instances to make it consistent with other special methods. - Issue #7462: Implement the stringlib fast search algorithm for the `rfind`, `rindex`, `rsplit` and `rpartition` methods. Patch by Florent Xicluna. - Issue #7604: Deleting an unset slotted attribute did not raise an AttributeError. - Issue #7534: Fix handling of IEEE specials (infinities, nans, negative zero) in ** operator. The behaviour now conforms to that described in C99 Annex F. - Issue #1811: improve accuracy and cross-platform consistency for true division of integers: the result of a/b is now correctly rounded for ints a and b (at least on IEEE 754 platforms), and in particular does not depend on the internal representation of an int. - Issue #6834: replace the implementation for the 'python' and 'pythonw' executables on OSX. These executables now work properly with the arch(1) command: ``arch -ppc python`` will start a universal binary version of python in PPC mode (unlike previous releases). - Issue #7466: Segmentation fault when the garbage collector is called in the middle of populating a tuple. Patch by Florent Xicluna. - Issue #7419: setlocale() could crash the interpreter on Windows when called with invalid values. - Issue #6077: On Windows, files opened with tempfile.TemporaryFile in "wt+" mode would appear truncated on the first '0x1a' byte (aka. Ctrl+Z). - Issue #7085: Fix crash when importing some extensions in a thread on MacOSX 10.6. - Issue #1757126: Fix the cyrillic-asian alias for the ptcp154 encoding. - Issue #6970: Remove redundant calls when comparing objects that don't implement the relevant rich comparison methods. - Issue #7298: Fixes for range and reversed(range(...)). Iteration over range(a, b, c) incorrectly gave an empty iterator when a, b and c fit in C long but the length of the range did not. Also fix several cases where reversed(range(a, b, c)) gave wrong results, and fix a refleak for reversed(range(a, b, c)) with large arguments. - Issue #7244: itertools.izip_longest() no longer ignores exceptions raised during the formation of an output tuple. - Issue #3297: On wide unicode builds, do not split unicode characters into surrogates. - Remove length limitation when constructing a complex number from a string. - Issue #1087418: Boost performance of bitwise operations for longs. - Support for AtheOS has been completely removed from the code base. It was disabled since Python 3.0. - Support for several legacy threading libraries has been disabled. These libraries are: Mach C threads, SunOS LWP, GNU pth, Irix threads. Support code will be entirely removed in 3.3. - Support for OSF* has been disabled. If nobody stands up, support will be removed in 3.3. See <http://bugs.python.org/issue8606>. - Peephole constant folding had missed UNARY_POSITIVE. - 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 #7147: Remove support for compiling Python without complex number support. - Issue #7120: logging: Removed import of multiprocessing which is causing crash in GAE. - Issue #1754094: Improve the stack depth calculation in the compiler. There should be no other effect than a small decrease in memory use. Patch by Christopher Tur Lesniewski-Laas. - Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when using byte values greater than 127. Patch by Derk Drukker. - Issue #1571184: The Unicode database contains properties for more characters. The tables for code points representing numeric values, white spaces or line breaks are now generated from the official Unicode Character Database files, and include information from the Unihan.txt file. - Issue #7019: Raise ValueError when unmarshalling bad long data, instead of producing internally inconsistent Python longs. - Issue #6990: Fix threading.local subclasses leaving old state around after a reference cycle GC which could be recycled by new locals. - Issue #5460: Fix an ambiguity in the grammar. - Issue #1766304: Improve performance of membership tests on range objects. - Issue #6713: Improve performance of integer -> string conversions. - Issue #6846: Fix bug where bytearray.pop() returns negative integers. - Issue #6750: A text file opened with io.open() could duplicate its output when writing from multiple threads at the same time. - 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 #1616979: Added the cp720 (Arabic DOS) encoding. - Issue #6428: Since Python 3.0, the __bool__ method must return a bool object, and not an int. Fix the corresponding error message, and the documentation. - The deprecated PyCObject has been removed. - Issue #6347: Include inttypes.h as well as stdint.h in pyport.h. This fixes a build failure on HP-UX: int32_t and uint32_t are defined in inttypes.h instead of stdint.h on that platform. - Issue #6373: Fixed a SystemError when encoding with the latin-1 codec and the 'surrogateescape' error handler, a string which contains unpaired surrogates. - Issue #4856: Remove checks for win NT. - Issue #6687: PyBytes_FromObject() no longer accepts an integer as its argument to construct a null-initialized bytes object. - Issue #1023290: Add from_bytes() and to_bytes() methods to integers. These methods allow the conversion of integers to bytes, and vice-versa. - Issue #7382: Fix bug in bytes.__getnewargs__ that prevented bytes instances from being copied with copy.copy(), and bytes subclasses from being pickled properly. - Code objects now support weak references. - Issue #7072: isspace(0xa0) is true on Mac OS X. - Issue #8084: PEP 370 now conforms to system conventions for framework builds on MacOS X. That is, "python setup.py install --user" will install into "~/Library/Python/2.7" instead of "~/.local". C-API ----- - Issue #2443: A new macro, `Py_VA_COPY`, copies the state of the variable argument list. `Py_VA_COPY` is equivalent to C99 `va_copy`, but available on all python platforms. - PySlice_GetIndicesEx now clips the step to [-PY_SSIZE_T_MAX, PY_SSIZE_T_MAX] instead of [-PY_SSIZE_T_MAX-1, PY_SSIZE_T_MAX]. This makes it safe to do "step = -step" when reversing a slice. - Issue #5753: A new C API function, `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>`_. - Add PyArg_ValidateKeywordArguments, which checks if all keyword arguments are strings in an efficient manner. - Issue #8276: PyEval_CallObject() is now only available in macro form. The function declaration, which was kept for backwards compatibility reasons, is now removed (the macro was introduced in 1997!). - Issue #7767: New function PyLong_AsLongLongAndOverflow added, analogous to PyLong_AsLongAndOverflow. - Make PyUnicode_CompareWithASCIIString return not equal if the Python string has '\0' at the end. - Issue #5080: The argument parsing functions PyArg_ParseTuple, PyArg_ParseTupleAndKeywords, PyArg_VaParse, PyArg_VaParseTupleAndKeywords and PyArg_Parse now raise a DeprecationWarning for float arguments passed with the 'L' format code. This will become a TypeError in a future version of Python, to match the behaviour of the other integer format codes. - Issue #7033: Function ``PyErr_NewExceptionWithDoc()`` added. - Issue #7414: 'C' code wasn't being skipped properly (for keyword arguments) in PyArg_ParseTupleAndKeywords. - Issue #7228: Add '%lld' and '%llu' support to PyString_FromFormat(V) and PyErr_Format, on machines with HAVE_LONG_LONG defined. - Issue #6151: Made PyDescr_COMMON conform to standard C (like PyObject_HEAD in PEP 3123). The PyDescr_TYPE and PyDescr_NAME macros should be used for accessing the d_type and d_name members of structures using PyDescr_COMMON. - Issue #6405: Remove duplicate type declarations in descrobject.h. - The code flags for old __future__ features are now available again. - Issue #5954: Add a PyFrame_GetLineNumber() function to replace most uses of PyCode_Addr2Line(). - Issue #5959: Add a PyCode_NewEmpty() function to create a new empty code object at a specified file, function, and line number. - Issue #1419652: Change the first argument to PyImport_AppendInittab() to ``const char *`` as the string is stored beyond the call. - Issue #2422: When compiled with the ``--with-valgrind`` option, the pymalloc allocator will be automatically disabled when running under Valgrind. This gives improved memory leak detection when running under Valgrind, while taking advantage of pymalloc at other times. Library ------- - In pdb, when Ctrl-C is entered while defining commands for a breakpoint, the old commands are restored. - For traceback debugging, the pdb listing now also shows the locations where the exception was originally (re)raised, if it differs from the last line executed (e.g. in case of finally clauses). - The pdb command "source" has been added. It displays the source code for a given object, if possible. - The pdb command "longlist" has been added. It displays the whole source code for the current function. - Issue #1503502: Make pdb.Pdb easier to subclass by putting message and error output into methods. - Issue #809887: Make the output of pdb's breakpoint deletions more consistent; emit a message when a breakpoint is enabled or disabled. - 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. - In pdb, allow giving a line number to the "until" command. - Issue #1437051: For pdb, allow "continue" and related commands in .pdbrc files. Also, add a command-line option "-c" that runs a command as if given in .pdbrc. - Issue #4179: In pdb, allow "list ." as a command to return to the currently debugged line. - Issue #4108: In urllib.robotparser, if there are multiple ``User-agent: *`` entries, consider the first one. - Issue #6630: Allow customizing regex flags when subclassing the string.Template class. - Issue #9411: Allow specifying an encoding for config files in the configparser module. - Issue #1682942: Improvements to configparser: support alternate delimiters, alternate comment prefixes and empty lines in values. - Issue #9354: Provide getsockopt() in asyncore's file_wrapper. - Issue #8966: ctypes: Remove implicit bytes-unicode conversion. - Issue #9378: python -m pickle <pickle file> will now load and display the first object in the pickle file. - Issue #4770: Restrict binascii module to accept only bytes (as specified). And fix the email package to encode to ASCII instead of ``raw-unicode-escape`` before ASCII-to-binary decoding. - Issue #9384: ``python -m tkinter`` will now display a simple demo applet. - The default size of the re module's compiled regular expression cache has been increased from 100 to 500 and the cache replacement policy has changed from simply clearing the entire cache on overflow to forgetting the least recently used cached compiled regular expressions. This is a performance win for applications that use a lot of regular expressions and limits the impact of the performance hit anytime the cache is exceeded. - Issue #7113: Speed up loading in configparser. Patch by Łukasz Langa. - Issue #9032: XML-RPC client retries the request on EPIPE error. The EPIPE error occurs when the server closes the socket and the client sends a big XML-RPC request. - Issue #4629: getopt raises an error if an argument ends with "=", whereas getopt doesn't accept a value (eg. --help= is rejected if getopt uses ['help='] long options). - Issue #7989: Added pure python implementation of the `datetime` module. The C module is renamed to `_datetime` and if available, overrides all classes defined in datetime with fast C impementation. Python implementation is based on the original python prototype for the datetime module by Tim Peters with minor modifications by the PyPy project. The test suite now tests `datetime` module with and without `_datetime` acceleration using the same test cases. - Issue #7895: platform.mac_ver() no longer crashes after calling os.fork(). - Issue #9323: Fixed a bug in trace.py that resulted in losing the name of the script being traced. Patch by Eli Bendersky. - Issue #9282: Fixed --listfuncs option of trace.py. Thanks Eli Bendersky for the patch. - Issue #3704: http.cookiejar was not properly handling URLs with a / in the parameters. - Issue #9268: ``pickletools.dis()`` now has an optional *annotate* argument which controls printing of opcode descriptions in ``dis()`` output. - Issue #1555570: email no longer inserts extra blank lines when a \r\n combo crosses an 8192 byte boundary. - Issue #9243: Fix sndhdr module and add unit tests, contributed by James Lee. - ``ast.literal_eval()`` now allows byte literals. - Issue #9137: Fix issue in MutableMapping.update, which incorrectly treated keyword arguments called 'self' or 'other' specially. - ``ast.literal_eval()`` now allows set literals. - Issue #9164: Ensure that sysconfig handles duplicate -arch flags in CFLAGS. - 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 #9186: Fix math.log1p(-1.0) to raise ValueError, not OverflowError. - Issue #9130: Fix validation of relative imports in parser module. - Issue #9128: Fix validation of class decorators in parser module. - Issue #9094: python -m pickletools will now disassemble pickle files listed in the command line arguments. See output of python -m pickletools -h for more details. - Issue #5468: urlencode to handle bytes type and other encodings in its query parameter. Patch by Dan Mahn. - 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 #6507: Accept source strings in dis.dis(). Original patch by Daniel Urban. - Issue #7829: Clearly document that the dis module is exposing an implementation detail that is not stable between Python VMs or releases. - Issue #6589: cleanup asyncore.socket_map in case smtpd.SMTPServer constructor raises an exception. - Issue #9110: Addition of ContextDecorator to contextlib, for creating APIs that act as both context managers and decorators. contextmanager changes to use ContextDecorator. - Implement importlib.abc.SourceLoader and deprecate PyLoader and PyPycLoader for removal in Python 3.4. - Issue #9064: pdb's "up" and "down" commands now accept an optional argument giving the number of frames to go. - Issue #9018: os.path.normcase() now raises a TypeError if the argument is not ``str`` or ``bytes``. - Issue #9075: In the ssl module, remove the setting of a ``debug`` flag on an OpenSSL structure. - Issue #8682: The ssl module now temporary increments the reference count of a socket object got through ``PyWeakref_GetObject``, so as to avoid possible deallocation while the object is still being used. - Issue #1368368: FancyURLOpener class changed to throw an Exception on wrong password instead of presenting an interactive prompt. Older behavior can be obtained by passing retry=True to http_error_xxx methods of FancyURLOpener. - Issue #8720: Fix regression caused by fix for #4050 by making getsourcefile smart enough to find source files in the linecache. - 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 #8986: math.erfc was incorrectly raising OverflowError for values between -27.3 and -30.0 on some platforms. - Issue #8784: Set tarfile default encoding to 'utf-8' on Windows. - Issue #8966: If a ctypes structure field is an array of c_char, convert its value to bytes instead of str (as done for c_char and c_char_p). - Issue #8188: Comparisons between Decimal and Fraction objects are now permitted, returning a result based on the exact numerical values of the operands. This builds on issue #2531, which allowed Decimal-to-float comparisons; all comparisons involving numeric types (bool, int, float, complex, Decimal, Fraction) should now act as expected. - Issue #8897: Fix sunau module, use bytes to write the header. Patch written by Thomas Jollans. - Issue #8899: time.struct_time now has class and attribute docstrings. - Issue #6470: Drop UNC prefix in FixTk. - Issue #4768: base64 encoded email body parts were incorrectly stored as binary strings. They are now correctly converted to strings. - Issue #8833: tarfile created hard link entries with a size field != 0 by mistake. - Charset.body_encode now correctly handles base64 encoding by encoding with the output_charset before calling base64mime.encode. Passes the tests from 2.x issue #1368247. - Issue #8845: sqlite3 Connection objects now have a read-only in_transaction attribute that is True iff there are uncommitted changes. - Issue #1289118: datetime.timedelta objects can now be multiplied by float and divided by float and int objects. Results are rounded to the nearest multiple of timedelta.resolution with ties resolved using round-half-to-even method. - Issue #7150: Raise OverflowError if the result of adding or subtracting timedelta from date or datetime falls outside of the MINYEAR:MAXYEAR range. - Issue #8806: add SSL contexts support to ftplib. - Issue #4769: Fix main() function of the base64 module, use sys.stdin.buffer and sys.stdout.buffer (instead of sys.stdin and sys.stdout) to use the bytes API. - Issue #8770: Now sysconfig displays information when it's called as a script. Initial idea by Sridhar Ratnakumar. - Issue #6662: Fix parsing of malformatted charref (&#bad;), patch written by Fredrik Håård. - Issue #8540: Decimal module: rename the Context._clamp attribute to Context.clamp and make it public. This is useful in creating contexts that correspond to the decimal interchange formats specified in IEEE 754. - 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 #3798: sys.exit(message) writes the message to sys.stderr file, instead of the C file stderr, to use stderr encoding and error handler. - 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 #8774: tabnanny uses the encoding cookie (#coding:...) to use the correct encoding. - Issue #4870: Add an `options` attribute to SSL contexts, as well as several ``OP_*`` constants to the `ssl` module. This allows selectively disabling protocol versions, when used in combination with `PROTOCOL_SSLv23`. - Issue #8759: Fixed user paths in sysconfig for posix and os2 schemes. - Issue #8663: distutils.log emulates backslashreplace error handler. Fix compilation in a non-ASCII directory if stdout encoding is ASCII (eg. if stdout is not a TTY). - Issue #8513: os.get_exec_path() supports b'PATH' key and bytes value. subprocess.Popen() and os._execvpe() support bytes program name. Add os.supports_bytes_environ flag: True if the native OS type of the environment is bytes (eg. False on Windows). - Issue #8633: tarfile is now able to read and write archives with "raw" binary pax headers as described in POSIX.1-2008. - Issue #1285086: Speed up urllib.parse functions: quote, quote_from_bytes, unquote, unquote_to_bytes. - Issue #8688: Distutils now recalculates MANIFEST every time. - Issue #8477: ssl.RAND_egd() and ssl._test_decode_cert() support str with surrogates and bytes for the filename. - Issue #8550: Add first class ``SSLContext`` objects to the ssl module. - Issue #8681: Make the zlib module's error messages more informative when the zlib itself doesn't give any detailed explanation. - The audioop module now supports sound fragments of length greater than 2**31 bytes on 64-bit machines, and is PY_SSIZE_T_CLEAN. - Issue #4972: Add support for the context management protocol to the ftplib.FTP class. - Issue #8664: In py_compile, create __pycache__ when the compiled path is given. - Issue #8514: Add os.fsencode() function (Unix only): encode a string to bytes for use in the file system, environment variables or the command line. - 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 #8603: Support bytes environmental variables on Unix: Add os.environb mapping and os.getenvb() function. os.unsetenv() encodes str argument to the file system encoding with the surrogateescape error handler (instead of utf8/strict) and accepts bytes. posix.environ keys and values are now bytes. - Issue #8573: asyncore _strerror() function might throw ValueError. - Issue #8483: asyncore.dispatcher's __getattr__ method produced confusing error messages when accessing undefined class attributes because of the cheap inheritance with the underlying socket object. The cheap inheritance has been deprecated. - Issue #4265: shutil.copyfile() was leaking file descriptors when disk fills. Patch by Tres Seaver. - Issue #8390: tarfile uses surrogateescape as the default error handler (instead of replace in read mode or strict in write mode). - Issue #7755: Use an unencumbered audio file for tests. - Issue #8621: uuid.uuid4() returned the same sequence of values in the parent and any children created using ``os.fork`` on MacOS X 10.6. - 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 ``io`` objects should not swallow exceptions raised by the implicit flush(). Also qensure that calling close() several times is supported. Patch by Pascal Chambon. - Issue #4687: Fix accuracy of garbage collection runtimes displayed with gc.DEBUG_STATS. - Issue #8354: The siginterrupt setting is now preserved for all signals, not just SIGCHLD. - Issue #7192: webbrowser.get("firefox") now works on Mac OS X, as does webbrowser.get("safari"). - Issue #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 #8295: Added shutil.unpack_archive. - Issue #6312: Fixed http HEAD request when the transfer encoding is chunked. It should correctly return an empty response now. - Issue #8546: Reject None given as the buffering argument to _pyio.open. - Issue #8549: Fix compiling the _ssl extension under AIX. Patch by Sridhar Ratnakumar. - Issue #6656: fix locale.format_string to handle escaped percents and mappings. - Issue #2302: Fix a race condition in SocketServer.BaseServer.shutdown, where the method could block indefinitely if called just before the event loop started running. This also fixes the occasional freezes witnessed in test_httpservers. - Issue #8524: When creating an SSL socket, the timeout value of the original socket wasn't retained (instead, a socket with a positive timeout would be turned into a non-blocking SSL socket). - 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 #8391: os.execvpe() and os.getenv() supports unicode with surrogates and bytes strings for environment keys and values. - Issue #8467: Pure Python implementation of subprocess encodes the error message using surrogatepass error handler to support surrogates in the message. - Issue #8468: bz2.BZ2File() accepts str with surrogates and bytes filenames. - Issue #8451: Syslog module now uses basename(sys.argv[0]) instead of the string "python" as the *ident*. openlog() arguments are all optional and keywords. - Issue #8108: Fix the unwrap() method of SSL objects when the socket has a non-infinite timeout. Also make that method friendlier with applications wanting to continue using the socket in clear-text mode, by disabling OpenSSL's internal readahead. Thanks to Darryl Miles for guidance. - Issue #8496: make mailcap.lookup() always return a list, rather than an iterator. Patch by Gregory Nofi. - Issue #8195: Fix a crash in sqlite Connection.create_collation() if the collation name contains a surrogate character. - 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 #6547: Added the ignore_dangling_symlinks option to shutil.copytree. - Issue #1540112: Now allowing the choice of a copy function in shutil.copytree. - Issue #4814: timeout parameter is now applied also for connections resulting from PORT/EPRT commands. - Issue #8463: added missing reference to bztar in shutil's documentation. - Issue #7154: urllib.request can now detect the proxy settings on OSX 10.6 (as long as the user didn't specify 'automatic proxy configuration'). - Issue #3817: ftplib.FTP.abort() method now considers 225 a valid response code as stated in RFC-959 at chapter 5.4. - Issue #8394: _ctypes.dlopen() accepts bytes, bytearray and str with surrogates. - Issue #850728: Add a *timeout* parameter to the `acquire()` method of `threading.Semaphore` objects. Original patch by Torsten Landschoff. - Issue #8322: Add a *ciphers* argument to SSL sockets, so as to change the available cipher list. Helps fix test_ssl with OpenSSL 1.0.0. - Issue #8393: subprocess accepts bytes, bytearray and str with surrogates for the current working directory. - Issue #7606: XML-RPC traceback stored in X-traceback is now encoded to ASCII using backslashreplace error handler. - Issue #8412: os.system() now accepts bytes, bytearray and str with surrogates. - Issue #2987: RFC2732 support for urlparse (IPv6 addresses). Patch by Tony Locke and Hans Ulrich Niedermann. - Issue #5277: Fix quote counting when parsing RFC 2231 encoded parameters. - Issue #7316: The acquire() method of lock objects in the ``threading`` module now takes an optional timeout argument in seconds. Timeout support relies on the system threading library, so as to avoid a semi-busy wait loop. - Issue #8383: pickle and pickletools use surrogatepass error handler when encoding unicode as utf8 to support lone surrogates and stay compatible with Python 2.x and 3.x. - Issue #7585: difflib context and unified diffs now place a tab between filename and date, conforming to the 'standards' they were originally designed to follow. This improves compatibility with patch tools. - Issue #7472: Fixed typo in email.encoders module; messages using ISO-2022 character sets will now consistently use a Content-Transfer-Encoding of 7bit rather than sometimes being marked as 8bit. - Issue #8375: test_distutils now checks if the temporary directory are still present before it cleans them. - Issue #8374: Update the internal alias table in the ``locale`` module to cover recent locale changes and additions. - Issue #8321: Give access to OpenSSL version numbers from the `ssl` module, using the new attributes `ssl.OPENSSL_VERSION`, `ssl.OPENSSL_VERSION_INFO` and `ssl.OPENSSL_VERSION_NUMBER`. - Add functools.total_ordering() and functools.cmp_to_key(). - Issue #8257: The Decimal construct now accepts a float instance directly, converting that float to a Decimal of equal value: >>> Decimal(1.1) Decimal('1.100000000000000088817841970012523233890533447265625') - Issue #8294: The Fraction constructor now accepts Decimal and float instances directly. - Issue #7279: Comparisons involving a Decimal signaling NaN now signal InvalidOperation instead of returning False. (Comparisons involving a quiet NaN are unchanged.) Also, Decimal quiet NaNs are now hashable; Decimal signaling NaNs remain unhashable. - Issue #2531: Comparison operations between floats and Decimal instances now return a result based on the numeric values of the operands; previously they returned an arbitrary result based on the relative ordering of id(float) and id(Decimal). See also issue #8188, which adds Decimal-to-Fraction comparisons. - Added a subtract() method to collections.Counter(). - Issue #8233: When run as a script, py_compile.py optionally takes a single argument `-` which tells it to read files to compile from stdin. Each line is read on demand and the named file is compiled immediately. (Original patch by Piotr Ożarowski). - Backwards incompatible change: Unicode codepoints line tabulation (0x0B) and form feed (0x0C) are now considered linebreaks, as specified in Unicode Standard Annex #14. See issue #7643. http://www.unicode.org/reports/tr14/ - Comparisons using one of <, <=, >, >= between a complex instance and a Fractions instance now raise TypeError instead of returning True/False. This makes Fraction <=> complex comparisons consistent with int <=> complex, float <=> complex, and complex <=> complex comparisons. - Issue #8139: ossaudiodev didn't initialize its types properly, therefore some methods (such as oss_mixer_device.fileno()) were not available. Initial patch by Bertrand Janin. - Issue #8205: Remove the "Modules" directory from sys.path when Python is running from the build directory (POSIX only). - 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 #7860: platform.uname now reports the correct 'machine' type when Python is running in WOW64 mode on 64 bit Windows. - 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 #4282: Fix the main function of the profile module for a non-ASCII script, open the file in binary mode and not in text mode with the default (utf8) encoding. - Issue #8179: Fix macpath.realpath() on a non-existing path. - Issue #8024: Update the Unicode database to 5.2. - Issue #8168: py_compile now handles files with utf-8 BOMS. - ``tokenize.detect_encoding`` now returns ``'utf-8-sig'`` when a UTF-8 BOM is detected. - Issue #6716/2: Backslash-replace error output in compilall. - Issue #4961: Inconsistent/wrong result of askyesno function in tkMessageBox with Tcl/Tk-8.5. - Issue #8140: extend compileall to compile single files. Add -i option. - Issue #7356: ctypes.util: Make parsing of ldconfig output independent of the locale. - The internals of the subprocess module on POSIX systems have been replaced by an extension module (_posixsubprocess) so that the fork()+exec() can be done safely without the possibility of deadlock in multithreaded applications. - subprocess.Popen now has restore_signals and start_new_session features. The default of restore_signals=True is a new behavior compared to earlier Python versions. This means that signals such as SIGPIPE are not ignored by default in subprocesses launched by Python (Issue #1652). - Issue #6472: The xml.etree package is updated to ElementTree 1.3. The cElementTree module is updated too. - Issue #7774: Set sys.executable to an empty string if argv[0] has been set to a non existent program name and Python is unable to retrieve the real program name. - Issue #7880: Fix sysconfig when the python executable is a symbolic link. - Issue #6509: fix re.sub to work properly when the pattern, the string, and the replacement were all bytes. Patch by Antoine Pitrou. - The sqlite3 module was updated to pysqlite 2.6.0. This fixes several obscure bugs and allows loading SQLite extensions from shared libraries. - Issue #1054943: Fix ``unicodedata.normalize('NFC', text)`` for the Public Review Issue #29 (http://unicode.org/review/pr-29.html). - Issue #7494: fix a crash in _lsprof (cProfile) after clearing the profiler, reset also the pointer to the current pointer context. - Issue #7232: Add support for the context management protocol to the TarFile class. - Issue #7250: Fix info leak of os.environ across multi-run uses of wsgiref.handlers.CGIHandler. - Issue #1729305: Fix doctest to handle encode error with "backslashreplace". - Issue #691291: codecs.open() should not convert end of lines on reading and writing. - Issue #7869: logging: improved diagnostic for format-time errors. - Issue #7868: logging: added loggerClass attribute to Manager. - logging: Implemented PEP 391. - Issue #1537721: Add a writeheader() method to csv.DictWriter. - Issue #7959: ctypes callback functions are now registered correctly with the cycle garbage collector. - Issue #5801: removed spurious empty lines in wsgiref. - Issue #6666: fix bug in trace.py that applied the list of directories to be ignored only to the first file. Noted by Bogdan Opanchuk. - Issue #7597: curses.use_env() can now be called before initscr(). Noted by Kan-Ru Chen. - Issue #7310: fix the __repr__ of os.environ to show the environment variables. - Issue #7970: email.Generator.flatten now correctly flattens message/rfc822 messages parsed by email.Parser.HeaderParser. - Issue #7361: Importlib was not properly checking the number of bytes in bytecode file when it was less than 8 bytes. - Issue #7633: In the decimal module, Context class methods (with the exception of canonical and is_canonical) now accept instances of int and long wherever a Decimal instance is accepted, and implicitly convert that argument to Decimal. Previously only some arguments were converted. - Issue #7835: shelve should no longer produce mysterious warnings during interpreter shutdown. - Issue #2746: Don't escape ampersands and angle brackets ("&", "<", ">") in XML processing instructions and comments. These raw characters are allowed by the XML specification, and are necessary when outputting e.g. PHP code in a processing instruction. Patch by Neil Muller. - Issue #6233: ElementTree failed converting unicode characters to XML entities when they could't be represented in the requested output encoding. Patch by Jerry Chen. - Issue #6003: add an argument to ``zipfile.Zipfile.writestr`` to specify the compression type. - 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 #7610: Reworked implementation of the internal ``zipfile.ZipExtFile`` class used to represent files stored inside an archive. The new implementation is significantly faster and can be wrapped in an ``io.BufferedReader`` object for more speedups. It also solves an issue where interleaved calls to `read()` and `readline()` give wrong results. Patch by Nir Aides. - Issue #6963: Added "maxtasksperchild" argument to multiprocessing.Pool, allowing for a maximum number of tasks within the pool to be completed by the worker before that worker is terminated, and a new one created to replace it. - Issue #7792: Registering non-classes to ABCs raised an obscure error. - Issue #7785: Don't accept bytes in FileIO.write(). - Removed the functions 'verify' and 'vereq' from Lib/test/support.py. - Issue #7773: Fix an UnboundLocalError in platform.linux_distribution() when the release file is empty. - Issue #7561: Fix crashes when using bytearray objects with the posix module. - 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 #7703: Add support for the new buffer API to `binascii.a2bhqx`. Patch by Florent Xicluna, along with some additional tests. - 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 #2846: Add support for gzip.GzipFile reading zero-padded files. Patch by Brian Curtin. - Issue #7681: Use floor division in appropriate places in the wave module. - 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 #7105: Make WeakKeyDictionary and WeakValueDictionary robust against the destruction of weakref'ed objects while iterating. - Issue #7455: Fix possible crash in cPickle on invalid input. Patch by Victor Stinner. - 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 #7471: Improve the performance of GzipFile's buffering mechanism, and make it implement the `io.BufferedIOBase` ABC to allow for further speedups by wrapping it in an `io.BufferedReader`. Patch by Nir Aides. - Issue #3972: http.client.HTTPConnection now accepts an optional source_address parameter to allow specifying where your connections come from. - socket.create_connection now accepts an optional source_address parameter. - Issue #5511: now zipfile.ZipFile can be used as a context manager. Initial patch by Brian Curtin. - Issue #7556: Make sure Distutils' msvc9compile reads and writes the MSVC XML Manifest file in text mode so string patterns can be used in regular expressions. - 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 #4757: `zlib.compress` and other methods in the zlib module now raise a TypeError when given an `str` object (rather than a `bytes`-like object). Patch by Victor Stinner and Florent Xicluna. - Issue #7349: Make methods of file objects in the io module accept None as an argument where file-like objects (ie StringIO and BytesIO) accept them to mean the same as passing no argument. - Issue #7357: tarfile no longer suppresses fatal extraction errors by default. - Issue #5949: added check for correct lineends in input from IMAP server in imaplib. - Add count() and reverse() methods to collections.deque(). - Fix variations of extending deques: d.extend(d) d.extendleft(d) d+=d - Issue #6986: Fix crash in the JSON C accelerator when called with the wrong parameter types. Patch by Victor Stinner. - Issue #7457: added a read_pkg_file method to distutils.dist.DistributionMetadata. - logging: Added optional `secure` parameter to SMTPHandler, to enable use of TLS with authentication credentials. - Issue #1923: Fixed the removal of meaningful spaces when PKG-INFO is generated in Distutils. Patch by Stephen Emslie. - Issue #4120: Drop reference to CRT from manifest when building extensions with msvc9compiler. - Issue #7333: The `posix` module gains an `initgroups()` function providing access to the initgroups(3) C library call on Unix systems which implement it. Patch by Jean-Paul Calderone. - Issue #7408: Fixed distutils.tests.sdist so it doesn't check for group ownership when the group is not forced, because the group may be different from the user's group and inherit from its container when the test is run. - Issue #4486: When an exception has an explicit cause, do not print its implicit context too. This affects the `traceback` module as well as built-in exception printing. - Issue #1515: Enable use of deepcopy() with instance methods. Patch by Robert Collins. - Issue #7403: logging: Fixed possible race condition in lock creation. - Issue #6845: Add restart support for binary upload in ftplib. The `storbinary()` method of FTP and FTP_TLS objects gains an optional `rest` argument. Patch by Pablo Mouzo. - Issue #5788: `datetime.timedelta` objects get a new `total_seconds()` method returning the total number of seconds in the duration. Patch by Brian Quinlan. - Issue #7133: SSL objects now support the new buffer API. - Issue #1488943: difflib.Differ() doesn't always add hints for tab characters. - Issue #6123: tarfile now opens empty archives correctly and consistently raises ReadError on empty files. - Issue #7354: distutils.tests.test_msvc9compiler - dragfullwindows can be 2. - Issue #5037: Proxy the __bytes__ special method instead to __bytes__ instead of __str__. - Issue #7341: Close the internal file object in the TarFile constructor in case of an error. - Issue #7293: distutils.test_msvc9compiler is fixed to work on any fresh Windows box. Help provided by David Bolen. - Issue #2054: ftplib now provides an FTP_TLS class to do secure FTP using TLS or SSL. Patch by Giampaolo Rodola'. - Issue #7328: pydoc no longer corrupts sys.path when run with the '-m' switch. - Issue #4969: The mimetypes module now reads the MIME database from the registry under Windows. Patch by Gabriel Genellina. - Issue #6816: runpy now provides a run_path function that allows Python code to execute file paths that refer to source or compiled Python files as well as zipfiles, directories and other valid sys.path entries that contain a __main__.py file. This allows applications that run other Python scripts to support the same flexibility as the CPython command line itself. - Issue #7318: multiprocessing now uses a timeout when it fails to establish a connection with another process, rather than looping endlessly. The default timeout is 20 seconds, which should be amply sufficient for local connections. - Issue #7197: Allow unittest.TextTestRunner objects to be pickled and unpickled. This fixes crashes under Windows when trying to run test_multiprocessing in verbose mode. - Issue #7893: ``unittest.TextTestResult`` is made public and a ``resultclass`` argument added to the TextTestRunner constructor allowing a different result class to be used without having to subclass. - Issue #7588: ``unittest.TextTestResult.getDescription`` now includes the test name in failure reports even if the test has a docstring. - Issue #3001: Add a C implementation of recursive locks which is used by default when instantiating a `threading.RLock` object. This makes recursive locks as fast as regular non-recursive locks (previously, they were slower by 10x to 15x). - 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 #7187: Importlib would not silence the IOError raised when trying to write new bytecode when it was made read-only. - Issue #7264: Fix a possible deadlock when deallocating thread-local objects which are part of a reference cycle. - Issue #7211: Allow 64-bit values for the `ident` and `data` fields of kevent objects on 64-bit systems. Patch by Michael Broghton. - Issue #6896: mailbox.Maildir now invalidates its internal cache each time a modification is done through it. This fixes inconsistencies and test failures on systems with slightly bogus mtime behaviour. - Issue #7246 & Issue #7208: getpass now properly flushes input before reading from stdin so that existing input does not confuse it and lead to incorrect entry or an IOError. It also properly flushes it afterwards to avoid the terminal echoing the input afterwards on OSes such as Solaris. - Issue #7233: Fix a number of two-argument Decimal methods to make sure that they accept an int or long as the second argument. Also fix buggy handling of large arguments (those with coefficient longer than the current precision) in shift and rotate. - Issue #4750: Store the basename of the original filename in the gzip FNAME header as required by RFC 1952. - Issue #1180: Added a new global option to ignore ~/.pydistutils.cfg in Distutils. - Issue #7218: Fix test_site for win32, the directory comparison was done with an uppercase. - Issue #7205: Fix a possible deadlock when using a BZ2File object from several threads at once. - Issue #7077: logging: SysLogHandler now treats Unicode as per RFC 5424. - Issue #7099: Decimal.is_normal now returns True for numbers with exponent larger than emax. - Issue #7080: locale.strxfrm() raises a MemoryError on 64-bit non-Windows platforms, and assorted locale fixes by Derk Drukker. - Issue #5833: Fix extra space character in readline completion with the GNU readline library version 6.0. - Issue #6894: Fixed the issue urllib2 doesn't respect "no_proxy" environment. - Issue #7086: Added TCP support to SysLogHandler, and tidied up some anachronisms in the code which were a relic of 1.5.2 compatibility. - Issue #7082: When falling back to the MIME 'name' parameter, the correct place to look for it is the Content-Type header. - Make tokenize.detect_coding() normalize utf-8 and iso-8859-1 variants like the builtin tokenizer. - Issue #7048: Force Decimal.logb to round its result when that result is too large to fit in the current precision. - Issue #6236, #6348: Fix various failures in the I/O library under AIX and other platforms, when using a non-gcc compiler. Patch by Derk Drukker. - Issue #4606: Passing 'None' if ctypes argtype is set to POINTER(...) does now always result in NULL. - Issue #5042: Structure sub-subclass does now initialize correctly with base class positional arguments. - Issue #6882: Import uuid creates zombies processes. - Issue #6635: Fix profiler printing usage message. - Issue #6856: Add a filter keyword argument to TarFile.add(). - Issue #6888: pdb's alias command was broken when no arguments were given. - Issue #6857: Default format() alignment should be '>' for Decimal instances. - Issue #6795: int(Decimal('nan')) now raises ValueError instead of returning NaN or raising InvalidContext. Also, fix infinite recursion in long(Decimal('nan')). - Issue #6850: Fix bug in Decimal._parse_format_specifier for formats with no type specifier. - Issue #6239: ctypes.c_char_p return value must return bytes. - Issue #6838: Use a list to accumulate the value instead of repeatedly concatenating strings in http.client's HTTPResponse._read_chunked providing a significant speed increase when downloading large files servend with a Transfer-Encoding of 'chunked'. - Trying to import a submodule from a module that is not a package, ImportError should be raised, not AttributeError. - When the globals past to importlib.__import__() has __package__ set to None, fall back to computing what __package__ should be instead of giving up. - Raise a TypeError when the name of a module to be imported for importlib.__import__ is not a string (was raising an AttributeError before). - Allow the fromlist passed into importlib.__import__ to be any iterable. - Have importlib raise ImportError if None is found in sys.modules. - Issue #6054: Do not normalize stored pathnames in tarfile. - Issue #6794: Fix Decimal.compare_total and Decimal.compare_total_mag: NaN payloads are now ordered by integer value rather than lexicographically. - Issue #1356969: Add missing info methods in tix.HList. - Issue #1522587: New constants and methods for the tix.Grid widget. - Issue #1250469: Fix the return value of tix.PanedWindow.panes. - Issue #1119673: Do not override tkinter.Text methods when creating a ScrolledText. - Issue #6665: Fix fnmatch to properly match filenames with newlines in them. - Issue #1135: Add the XView and YView mix-ins to avoid duplicating the xview* and yview* methods. - Issue #6629: Fix a data corruption issue in the new I/O library, which could occur when writing to a BufferedRandom object (e.g. a file opened in "rb+" or "wb+" mode) after having buffered a certain amount of data for reading. This bug was not present in the pure Python implementation. - Issue #6622: Fix "local variable 'secret' referenced before assignment" bug in POP3.apop. - Issue #2715: Remove remnants of Carbon.File from binhex module. - 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 #6106: telnetlib.Telnet.process_rawq doesn't handle default WILL/WONT DO/DONT correctly. - Issue #1424152: Fix for http.client, urllib.request to support SSL while working through proxy. Original patch by Christopher Li, changes made by Senthil Kumaran. - Add importlib.abc.ExecutionLoader to represent the PEP 302 protocol for loaders that allow for modules to be executed. Both importlib.abc.PyLoader and PyPycLoader inherit from this class and provide implementations in relation to other methods required by the ABCs. - importlib.abc.PyLoader did not inherit from importlib.abc.ResourceLoader like the documentation said it did even though the code in PyLoader relied on the abstract method required by ResourceLoader. - Issue #6431: Make Fraction type return NotImplemented when it doesn't know how to handle a comparison without loss of precision. Also add correct handling of infinities and nans for comparisons with float. - Issue #6415: Fixed warnings.warn segfault on bad formatted string. - Issue #6358: The exit status of a command started with os.popen() was reported differently than it did with python 2.x. - Issue #6323: The pdb debugger did not exit when running a script with a syntax error. - Issue #3392: The subprocess communicate() method no longer fails in select() when file descriptors are large; communicate() now uses poll() when possible. - Issue #6369: Fix an RLE decompression bug in the binhex module. - Issue #6344: Fixed a crash of mmap.read() when passed a negative argument. - The deprecated function string.maketrans has been removed. - Issue #4005: Fixed a crash of pydoc when there was a zip file present in sys.path. - Issue #6218: io.StringIO and io.BytesIO instances are now picklable. - The os.get_exec_path() function to return the list of directories that will be searched for an executable when launching a subprocess was added. - Issue #7481: When a threading.Thread failed to start it would leave the instance stuck in initial state and present in threading.enumerate(). - Issue #1068268: The subprocess module now handles EINTR in internal os.waitpid and os.read system calls where appropriate. - Issue #6729: Added ctypes.c_ssize_t to represent ssize_t. - Issue #6247: The argparse module has been added to the standard library. - Issue #8235: _socket: Add the constant ``SO_SETFIB``. SO_SETFIB is a socket option available on FreeBSD 7.1 and newer. - Issue #9315: Fix for the trace module to record correct class name for tracing methods. Extension Modules ----------------- - Issue #9959: Tweak formula used for computing math.log of an integer, making it marginally more accurate for exact powers of 2. - 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 basically always returns the same information as the id command. os.getgroups() can now return more than 16 groups on MacOSX. - Issue #6095: Make directory argument to os.listdir optional. - 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 #5180: Fixed a bug that prevented loading 2.x pickles in 3.x python when they contain instances of old-style classes. - Issue #9165: Add new functions math.isfinite and cmath.isfinite, to accompany existing isinf and isnan functions. - Issue #1578269: Implement os.symlink for Windows 6.0+. Patch by Jason R. Coombs. - In struct.pack, correctly propagate exceptions from computing the truth of an object in the '?' format. - Issue #9000: datetime.timezone objects now have eval-friendly repr. - In the math module, correctly lookup __trunc__, __ceil__, and __floor__ as special methods. - Issue #9005: Prevent utctimetuple() from producing year 0 or year 10,000. Prior to this change, timezone adjustment in utctimetuple() could produce tm_year value of 0 or 10,000. Now an OverflowError is raised in these edge cases. - Issue #6641: The ``datetime.strptime`` method now supports the ``%z`` directive. When the ``%z`` directive is present in the format string, an aware ``datetime`` object is returned with ``tzinfo`` bound to a ``datetime.timezone`` instance constructed from the parsed offset. If both ``%z`` and ``%Z`` are present, the data in ``%Z`` field is used for timezone name, but ``%Z`` data without ``%z`` is discarded. - Issue #5094: The ``datetime`` module now has a simple concrete class implementing ``datetime.tzinfo`` interface. Instances of the new class, ``datetime.timezone``, return fixed name and UTC offset from their ``tzname(dt)`` and ``utcoffset(dt)`` methods. The ``dst(dt)`` method always returns ``None``. A class attribute, ``utc`` contains an instance representing the UTC timezone. Original patch by Rafe Kaplan. - Issue #8973: Add __all__ to struct module; this ensures that help(struct) includes documentation for the struct.Struct class. - Issue #3129: Trailing digits in struct format string are no longer ignored. For example, "1" or "ilib123" are now invalid formats and cause ``struct.error`` to be raised. Patch by Caleb Deveraux. - Issue #7384: If the system readline library is linked against ncurses, the curses module must be linked against ncurses as well. Otherwise it is not safe to load both the readline and curses modules in an application. - Issue #2810: Fix cases where the Windows registry API returns ERROR_MORE_DATA, requiring a re-try in order to get the complete result. - Issue #8692: Optimize math.factorial: replace the previous naive algorithm with an improved 'binary-split' algorithm that uses fewer multiplications and allows many of the multiplications to be performed using plain C integer arithmetic instead of PyLong arithmetic. Also uses a lookup table for small arguments. - Issue #8674: Fixed a number of incorrect or undefined-behaviour-inducing overflow checks in the audioop module. - Issue #8644: The accuracy of td.total_seconds() has been improved (by calculating with integer arithmetic instead of float arithmetic internally): the result is now always correctly rounded, and is equivalent to ``td / timedelta(seconds=1)``. - Issue #2706: Allow division of a timedelta by another timedelta: timedelta / timedelta, timedelta % timedelta, timedelta // timedelta and divmod(timedelta, timedelta) are all supported. - Issue #8314: Fix unsigned long long bug in libffi on Sparc v8. - Issue #8300: When passing a non-integer argument to struct.pack with any integer format code, struct.pack first attempts to convert the non-integer using its __index__ method. If that method is non-existent or raises TypeError it goes on to try the __int__ method, as described below. - Issue #8142: Update libffi to the 3.0.9 release. - Issue #6949: Allow the _dbm extension to be built with db 4.8.x. - Issue #6544: Fix a reference leak in the kqueue implementation's error handling. - Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as msvcr100.dll is not a platform assembly anymore. - Issue #6508: Add posix.{getresuid,getresgid,setresuid,setresgid}. - Issue #7078: Set struct.__doc__ from _struct.__doc__. - Issue #3366: Add erf, erfc, expm1, gamma, lgamma functions to math module. - Issue #6877: It is now possible to link the readline extension to the libedit readline emulation on OSX 10.5 or later. - Issue #6848: Fix curses module build failure on OS X 10.6. - Fix a segfault that could be triggered by expat with specially formed input. - Issue #6561: '\d' in a regex now matches only characters with Unicode category 'Nd' (Number, Decimal Digit). Previously it also matched characters with category 'No'. - Issue #4509: Array objects are no longer modified after an operation failing due to the resize restriction in-place when the object has exported buffers. - Issue #2389: Array objects are now pickled in a portable manner. - 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 the ossaudio extension on GNU/kFreeBSD. - Issue #7347: winreg: Add CreateKeyEx and DeleteKeyEx, as well as fix a bug in the return value of QueryReflectionKey. - Issue #7567: PyCurses_setupterm: Don't call ``setupterm`` twice. Build ----- - Use OpenSSL 1.0.0a on Windows. - Issue #9280: Make sharedinstall depend on sharedmods. - Issue #9189: Make a user-specified CFLAGS, CPPFLAGS, or LDFLAGS setting override the configure and makefile defaults, without deleting options the user didn't intend to override. Developers should no longer need to specify OPT or EXTRA_CFLAGS, although those variables are still present for backward-compatibility. - Issue #8854: Fix finding Visual Studio 2008 on Windows x64. - Issue #1759169, #8864: Drop _XOPEN_SOURCE on Solaris, define it for multiprocessing only. - Issue #8625: Turn off optimization in --with-pydebug builds with gcc. (Optimization was unintentionally turned on in gcc --with-pydebug builds as a result of the issue #1628484 fix, combined with autoconf's strange choice of default CFLAGS produced by AC_PROG_CC for gcc.) - Issue #3646: It is now easily possible to install a Python framework into your home directory on MacOSX, see Mac/README for more information. - Issue #3928: os.mknod() now available in Solaris, also. - Issue #3326: Build Python without -fno-strict-aliasing when the gcc does not give false warnings. - Issue #1628484: The Makefile doesn't ignore the CFLAGS environment variable anymore. It also forwards the LDFLAGS settings to the linker when building a shared library. - Issue #6716: Quote -x arguments of compileall in MSI installer. Exclude 2to3 tests from compileall. - Issue #3920, #7903: Define _BSD_SOURCE on OpenBSD 4.4 through 4.9. - Issue #7632: When Py_USING_MEMORY_DEBUGGER is defined, disable the private memory allocation scheme in dtoa.c and use PyMem_Malloc and PyMem_Free instead. Also disable caching of powers of 5. - Issue #6491: Allow --with-dbmliborder to specify that no dbms will be built. - Issue #6943: Use pkg-config to find the libffi headers when the --with-system-ffi flag is used. - Issue #7609: Add a --with-system-expat option that causes the system's expat library to be used for the pyexpat module instead of the one included with Python. - Issue #7589: Only build the nis module when the correct header files are found. - Switch to OpenSSL 0.9.8l and sqlite 3.6.21 on Windows. - Issue #5792: Extend the short float repr support to x86 systems using icc or suncc. - 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. - Issue #6802: Fix build issues on MacOSX 10.6. - Issue #6244: Allow detect_tkinter to look for Tcl/Tk 8.6. - Issue #4601: 'make install' did not set the appropriate permissions on directories. - Issue #5390: Add uninstall icon independent of whether file extensions are installed. - Issue #7541: When using ``python-config`` with a framework install the compiler might use the wrong library. - python-config now supports multiple options on the same command line. - Issue #8509: Fix quoting in help strings and code snippets in configure.in. - Issue #8510: Update to autoconf2.65. Documentation ------------- - Issue #9817: Add expat COPYING file; add expat, libffi and expat licenses to Doc/license.rst. - Issue #9524: Document that two CTRL* signals are meant for use only with os.kill. - Issue #9255: Document that the 'test' package is meant for internal Python use only. - A small WSGI server was added as Tools/scripts/serve.py, and is used to implement a local documentation server via 'make serve' in the doc directory. - Updating `Using Python` documentation to include description of CPython's -J and -X options. - Document that importing a module that has None in sys.modules triggers an ImportError. - Issue #6556: Fixed the Distutils configuration files location explanation for Windows. - Update python manual page (options -B, -O0, -s, environment variables PYTHONDONTWRITEBYTECODE, PYTHONNOUSERSITE). - Issue #8909: Added the size of the bitmap used in the installer created by distutils' bdist_wininst. Patch by Anatoly Techtonik. Tests ----- - Issue #9251: test_threaded_import didn't fail when run through regrtest if the import lock was disabled. - Issue #8605: Skip test_gdb if Python is compiled with optimizations. - Issue #7449: Skip test_socketserver if threading support is disabled. - 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 #8533: regrtest uses backslashreplace error handler for stdout to avoid UnicodeEncodeError (write non-ASCII character to stdout using ASCII encoding). - Issue #8576: Remove use of find_unused_port() in test_smtplib and test_multiprocessing. Patch by Paul Moore. - Issue #7449: Fix many tests to support Python compiled without thread support. Patches written by Jerry Seutter. - Issue #8108: test_ftplib's non-blocking SSL server now has proper handling of SSL shutdowns. - Issues #8279, #8330, #8437, #8480, #8495: Fix test_gdb failures, patch written by Dave Malcolm. - 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. - Issue #8248: Add some tests for the bool type. Patch by Gregory Nofi. - Issue #8263: Now regrtest.py will report a failure if it receives a KeyboardInterrupt (SIGINT). - Issue #8180 and #8207: Fix test_pep277 on OS X and add more tests for special Unicode normalization cases. - Issue #7783: test.support.open_urlresource invalidates the outdated files from the local cache. - Issue #7849: Now the utility ``check_warnings`` verifies if the warnings are effectively raised. - The four path modules (genericpath, macpath, ntpath, posixpath) share a common TestCase for some tests: test_genericpath.CommonTest. - Print platform information when running the whole test suite, or using the --verbose flag. - Issue #767675: enable test_pep277 on POSIX platforms with Unicode-friendly filesystem encoding. - Issue #6292: for the moment at least, the test suite runs cleanly if python is run with the -OO flag. Tests requiring docstrings are skipped. - Issue #7712: test.support gained a new `temp_cwd` context manager which is now also used by regrtest to run all the tests in a temporary directory. The original CWD is saved in `support.SAVEDCWD`. Thanks to Florent Xicluna who helped with the patch. - Issue #7924: Fix an intermittent 'XXX undetected error' failure in test_capi (only seen so far on platforms where the curses module wasn't built), due to an uncleared exception. - Issue #7728: test_timeout was changed to use support.bind_port instead of a hard coded port. - Issue #7376: Instead of running a self-test (which was failing) when called with no arguments, doctest.py now gives a usage message. - Issue #7396: fix regrtest -s, which was broken by the -j enhancement. - Issue #7498: test_multiprocessing now uses test.support.find_unused_port instead of a hardcoded port number in test_rapid_restart. - Issue #7431: Use TESTFN in test_linecache instead of trying to create a file in the Lib/test directory, which might be read-only for the user running the tests. - Issue #7324: Add a sanity check to regrtest argument parsing to catch the case of an option with no handler. - Issue #7312: Add a -F flag to run the selected tests in a loop until a test fails. Can be combined with -j. - Issue #6551: test_zipimport could import and then destroy some modules of the encodings package, which would make other tests fail further down the road because the internally cached encoders and decoders would point to empty global variables. - 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 #7248 (part 2): Use a unique temporary directory for importlib source tests instead of tempfile.tempdir. This prevents the tests from sharing state between concurrent executions on the same system. - Issue #7248: In importlib.test.source.util a try/finally block did not make sure that some referenced objects actually were created in the block before calling methods on the object. - Issue #7222: Make thread "reaping" more reliable so that reference leak-chasing test runs give sensible results. The previous method of reaping threads could return successfully while some Thread objects were still referenced. This also introduces a new private function: ``_thread._count()``. - Issue #7151: Fixed regrtest -j so that output to stderr from a test no longer runs the risk of causing the worker thread to fail. - Issue #7055: test___all__ now greedily detects all modules which have an __all__ attribute, rather than using a hardcoded and incomplete list. - Issue #7058: Added save/restore for things like sys.argv and cwd to runtest_inner in regrtest, with warnings if the called test modifies them, and a new section in the summary report at the end. - Issue #7042: Fix test_signal (test_itimer_virtual) failure on OS X 10.6. - Fixed tests in importlib.test.source.test_abc_loader that were masking the proper exceptions that should be raised for missing or improper code object bytecode. - Removed importlib's custom test discovery code and switched to unittest.TestLoader.discover(). Tools/Demos ----------- - Issue #5464, #8974: Implement plural forms in msgfmt.py. - iobench (a file I/O benchmark) and ccbench (a concurrency benchmark) were added to the `Tools/` directory. They were previously living in the sandbox. What's New in Python 3.1? ========================= *Release date: 27-June-2009* Core and Builtins ----------------- - Issue #6334: Fix bug in range length calculation for ranges with large arguments. - Issue #6329: Fixed iteration for memoryview objects (it was being blocked because it wasn't recognized as a sequence). Library ------- - Issue #6126: Fixed pdb command-line usage. - Issue #6314: logging: performs extra checks on the "level" argument. - Issue #6274: Fixed possible file descriptors leak in subprocess.py - Accessing io.StringIO.buffer now raises an AttributeError instead of io.UnsupportedOperation. - Issue #6271: mmap tried to close invalid file handle (-1) when anonymous. (On Unix) - Issue #1202: zipfile module would cause a struct.error when attempting to store files with a CRC32 > 2**31-1. Extension Modules ----------------- - Issue #5590: Remove unused global variable in pyexpat extension. What's New in Python 3.1 Release Candidate 2? ============================================= *Release date: 13-June-2009* Core and Builtins ----------------- - Fixed SystemError triggered by "range([], 1, -1)". - Issue #5924: On Windows, a large PYTHONPATH environment variable (more than 255 characters) would be completely ignored. - Issue #4547: When debugging a very large function, it was not always possible to update the lineno attribute of the current frame. - Issue #5330: C functions called with keyword arguments were not reported by the various profiling modules (profile, cProfile). Patch by Hagen Fürstenau. Library ------- - Issue #6438: Fixed distutils.cygwinccompiler.get_versions : the regular expression string pattern was trying to match against a bytes returned by Popen. Tested under win32 to build the py-postgresql project. - Issue #6258: Support AMD64 in bdist_msi. - Issue #6195: fixed doctest to no longer try to read 'source' data from binary files. - Issue #5262: Fixed bug in next rollover time computation in TimedRotatingFileHandler. - Issue #6217: The C implementation of io.TextIOWrapper didn't include the errors property. Additionally, the errors and encoding properties of StringIO are always None now. - Issue #6137: The pickle module now translates module names when loading or dumping pickles with a 2.x-compatible protocol, in order to make data sharing and migration easier. This behaviour can be disabled using the new `fix_imports` optional argument. - Removed the ipaddr module. - Issue #3613: base64.{encode,decode}string are now called base64.{encode,decode}bytes which reflects what type they accept and return. The old names are still there as deprecated aliases. - Issue #5767: Remove sgmlop support from xmlrpc.client. - Issue #6150: Fix test_unicode on wide-unicode builds. - Issue #6149: Fix initialization of WeakValueDictionary objects from non-empty parameters. Windows ------- - Issue #6221: Delete test registry key before running the test. - Issue #6158: Package Sine-1000Hz-300ms.aif in MSI file. C-API ----- - Issue #5735: Python compiled with --with-pydebug should throw an ImportError when trying to import modules compiled without --with-pydebug, and vice-versa. Build ----- - Issue #6154: Make sure the intl library is added to LIBS if needed. Also added LIBS to OS X framework builds. - Issue #5809: Specifying both --enable-framework and --enable-shared is an error. Configure now explicitly tells you about this. What's New in Python 3.1 release candidate 1? ============================================= *Release date: 2009-05-30* Core and Builtins ----------------- - Issue #6097: Escape UTF-8 surrogates resulting from mbstocs conversion of the command line. - Issue #6012: Add cleanup support to O& argument parsing. - Issue #6089: Fixed str.format with certain invalid field specifiers that would raise SystemError. - Issue #5982: staticmethod and classmethod now expose the wrapped function with __func__. - Added support for multiple context managers in the same with-statement. Deprecated contextlib.nested() which is no longer needed. - Issue #5829: complex("1e500") no longer raises OverflowError. This makes it consistent with float("1e500") and interpretation of real and imaginary literals. - Issue #3527: Removed Py_WIN_WIDE_FILENAMES which is not used any more. - Issue #5994: the marshal module now has docstrings. - Issue #5981: Fix three minor inf/nan issues in float.fromhex: (1) inf and nan strings with trailing whitespace were incorrectly rejected; (2) parsing of strings representing infinities and nans was locale aware; and (3) the interpretation of fromhex('-nan') didn't match that of float('-nan'). Library ------- - Issue #4859: Implement PEP 383 for pwd, spwd, and grp. - smtplib 'login' and 'cram-md5' login are also fixed (see Issue #5259). - Issue #6121: pydoc now ignores leading and trailing spaces in the argument to the 'help' function. - Issue #6118: urllib.parse.quote_plus ignored the encoding and errors arguments for strings with a space in them. - collections.namedtuple() was not working with the following field names: cls, self, tuple, itemgetter, and property. - In unittest, using a skipping decorator on a class is now equivalent to skipping every test on the class. The ClassTestSuite class has been removed. - Issue #6050: Don't fail extracting a directory from a zipfile if the directory already exists. - Issue #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 #5761: Add the name of the underlying file to the repr() of various IO objects. - Issue #5259: smtplib plain auth login no longer gives a traceback. Fix by Musashi Tamura, tests by Marcin Bachry. - 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 #2116: Weak references and weak dictionaries now support copy()ing and deepcopy()ing. - Issue #1655: Make imaplib IPv6-capable. Patch by Derek Morr. - Issue #5918: Fix a crash in the parser module. - Issue #1664: Make nntplib IPv6-capable. Patch by Derek Morr. - Issue #5006: Better handling of unicode byte-order marks (BOM) in the io library. This means, for example, that opening a 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 #4050: inspect.findsource/getsource now raise an IOError if the 'source' file is a binary. Patch by Brodie Rao, tests by Daniel Diniz. This fix corrects a pydoc regression. - 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. Installation ------------ - Issue #6047: fullinstall has been removed because Python 3's executable will now be known as python3. - Lib/smtpd.py is no longer installed as a script. Extension Modules ----------------- - Issue #3061: Use wcsftime for time.strftime where available. - Issue #4873: Fix resource leaks in error cases of pwd and grp. - Issue #6093: Fix off-by-one error in locale.strxfrm. - The _functools and _locale modules are now built into the libpython shared library instead of as extension modules. Build ----- - Issue #3585: Add pkg-config support. It creates a python-2.7.pc file and a python3.pc symlink in the $(LIBDIR)/pkgconfig directory. Patch by Clinton Roy. Tests ----- - Issue #5442: Tests for importlib were not properly skipping case-sensitivity tests on darwin even when the OS was installed on a case-sensitive filesystem. Also fixed tests that should not be run when sys.dont_write_bytecode is true. What's New in Python 3.1 beta 1? ================================ *Release date: 2009-05-06* Core and Builtins ----------------- - Issue #5914: Add new C API function PyOS_string_to_double, and deprecate PyOS_ascii_strtod and PyOS_ascii_atof. - Issue #3382: float.__format__, complex.__format__, and %-formatting no longer map 'F' to 'f'. Because of issue #5859 (below), this only affects nan -> NAN and inf -> INF. - Issue #5799: ntpath (ie, os.path on Windows) fully supports UNC pathnames in all operations, including splitdrive, split, etc. splitunc() now issues a PendingDeprecation warning. - Issue #5920: For float.__format__, change the behavior with the empty presentation type (that is, not one of 'e', 'f', 'g', or 'n') to be like 'g' but with at least one decimal point and with a default precision of 12. Previously, the behavior the same but with a default precision of 6. This more closely matches str(), and reduces surprises when adding alignment flags to the empty presentation type. This also affects the new complex.__format__ in the same way. - Implement PEP 383, Non-decodable Bytes in System Character Interfaces. - Issue #5890: in subclasses of 'property' the __doc__ attribute was shadowed by classtype's, even if it was None. property now inserts the __doc__ into the subclass instance __dict__. - Issue #4426: The UTF-7 decoder was too strict and didn't accept some legal sequences. Patch by Nick Barnes and Victor Stinner. - Issue #3672: Reject surrogates in utf-8 codec; add surrogatepass error handler. - Issue #5883: In the io module, the BufferedIOBase and TextIOBase ABCs have received a new method, detach(). detach() disconnects the underlying stream from the buffer or text IO and returns it. - Issue #5859: Remove switch from '%f' to '%g'-style formatting for floats with absolute value over 1e50. Also remove length restrictions for float formatting: '%.67f' % 12.34 and '%.120e' % 12.34 no longer raise an exception. - Issue #1588: Add complex.__format__. For example, format(complex(1, 2./3), '.5') now produces a sensible result. - Issue #5864: Fix empty format code formatting for floats so that it never gives more than the requested number of significant digits. - Issue #5793: Rationalize isdigit / isalpha / tolower, etc. Includes new Py_ISDIGIT / Py_ISALPHA / Py_TOLOWER, etc. in pctypes.h. - Issue #5835: Deprecate PyOS_ascii_formatd. - Issue #4971: Fix titlecase for characters that are their own titlecase, but not their own uppercase. - Issue #5283: Setting __class__ in __del__ caused a segfault. - Issue #5816: complex(repr(z)) now recovers z exactly, even when z involves nans, infs or negative zeros. - Issue #3166: Make int -> float conversions correctly rounded. - Issue #1869 (and many duplicates): make round(x, n) correctly rounded for a float x, by using the decimal <-> binary conversions from Python/dtoa.c. As a consequence, (e.g.) round(x, 2) now consistently agrees with format(x, '.2f'). - Issue #5787: object.__getattribute__(some_type, "__bases__") segfaulted on some builtin types. - Issue #5772: format(1e100, '<') produces '1e+100', not '1.0e+100'. - Issue #5515: str.format() type 'n' combined with commas and leading zeros no longer gives odd results with ints and floats. - Implement PEP 378, Format Specifier for Thousands Separator, for floats. - The str function switches to exponential notation at 1e11, not 1e12. This avoids printing 13 significant digits in situations where only 12 of them are correct. Example problem value: str(1e11 + 0.5). (This minor issue has existed in 2.x for a long time.) - Issue #1580: On most platforms, use a 'short' float repr: for a finite float x, repr(x) now outputs a string based on the shortest sequence of decimal digits that rounds to x. Previous behaviour was to output 17 significant digits and then strip trailing zeros. Another minor difference is that the new repr switches to exponential notation at 1e16 instead of the previous 1e17; this avoids misleading output in some cases. There's a new sys attribute sys.float_repr_style, which takes the value 'short' to indicate that we're using short float repr, and 'legacy' if the short float repr isn't available for one reason or another. The float repr change involves incorporating David Gay's 'perfect rounding' code into the Python core (it's in Python/dtoa.c). As a secondary consequence, all string-to-float and float-to-string conversions (including all float formatting operations) will be correctly rounded on these platforms. See issue #1580 discussions for details of platforms for which this change does not apply. - Issue #5759: float() didn't call __float__ on str subclasses. - The string.maketrans() function is deprecated; there is a new static method maketrans() on the bytes and bytearray classes. This removes confusion about the types string.maketrans() is supposed to work with, and mirrors the methods available on the str class. - Issue #2170: refactored xml.dom.minidom.normalize, increasing both its clarity and its speed. - Issue #1113244: Py_XINCREF, Py_DECREF, Py_XDECREF: Add ``do { ... } while (0)`` to avoid compiler warnings. - Issue #3739: The unicode-internal encoder now reports the number of characters consumed like any other encoder (instead of the number of bytes). Installation ------------ - Issue #5756: Install idle and pydoc with a 3 suffix. Library ------- - Issue #8203: Fix IDLE Credits dialog: view_file() uses its encoding argument. - Issue #5311: bdist_msi can now build packages that do not depend on a specific Python version. - Issue #5150: IDLE's format menu now has an option to strip trailing whitespace. - Issue #5940: distutils.command.build_clib.check_library_list was not doing the right type checkings anymore. - Issue #4875: On win32, ctypes.util.find_library does no longer return directories. - Issue #5142: Add the ability to skip modules while stepping to pdb. - Issue #1309567: Fix linecache behavior of stripping subdirectories when looking for files given by a relative filename. - Issue #5923: Update the ``turtle`` module to version 1.1, add two new turtle demos in Demo/turtle. - Issue #5692: In ``zipfile.Zipfile``, fix wrong path calculation when extracting a file to the root directory. - Issue #5913: os.listdir() should fail for empty path on windows. - Issue #5084: unpickling now interns the attribute names of pickled objects, saving memory and avoiding growth in size of subsequent pickles. Proposal and original patch by Jake McGuire. - The json module now works exclusively with str and not bytes. - Issue #3959: The ipaddr module has been added to the standard library. Contributed by Google. - Issue #3002: ``shutil.copyfile()`` and ``shutil.copytree()`` now raise an error when a named pipe is encountered, rather than blocking infinitely. - Issue #5857: tokenize.tokenize() now returns named tuples. - Issue #4305: ctypes should now build again on mipsel-linux-gnu - Issue #1734234: Massively speedup ``unicodedata.normalize()`` when the string is already in normalized form, by performing a quick check beforehand. Original patch by Rauli Ruohonen. - Issue #5853: calling a function of the mimetypes module from several threads at once could hit the recursion limit if the mimetypes database hadn't been initialized before. - Issue #5854: Updated __all__ to include some missing names and remove some names which should not be exported. - Issue #3102: All global symbols that the _ctypes extension defines are now prefixed with 'Py' or '_ctypes'. - Issue #5041: ctypes does now allow pickling wide character. - Issue #5812: For the two-argument form of the Fraction constructor, Fraction(m, n), m and n are permitted to be arbitrary Rational instances. - Issue #5812: Fraction('1e6') is valid: more generally, any string that's valid for float() is now valid for Fraction(), with the exception of strings representing NaNs and infinities. - Issue #5734: BufferedRWPair was poorly tested and had several glaring bugs. Patch by Brian Quinlan. - 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 #2703: SimpleXMLRPCDispatcher.__init__: Provide default values for new arguments introduced in 2.5. - Issue #5828 (Invalid behavior of unicode.lower): Fixed bogus logic in makeunicodedata.py and regenerated the Unicode database (This fixes u'\u1d79'.lower() == '\x00'). Extension Modules ----------------- - Issue #5881: Remove old undocumented compatibility interfaces in hashlib and pwd. - Issue #5463: In struct module, remove deprecated float coercion for integer type codes: struct.pack('L', 0.3) should now raise an error. The _PY_STRUCT_FLOAT_COERCE constant has been removed. The version number has been bumped to 0.3. - Issue #5359: Readd the Berkeley DB detection code to allow _dbm be built using Berkeley DB. Tests ----- - Issue #5354: New test support function import_fresh_module() makes it easy to import both normal and optimised versions of modules. test_heapq and test_warnings have been adjusted to use it, tests for other modules with both C and Python implementations in the stdlib can be adjusted to use it over time. - Issue #5837: Certain sequences of calls to set() and unset() for support.EnvironmentVarGuard objects restored the environment variables incorrectly on __exit__. C-API ----- - Issue #5630: A replacement PyCObject API, PyCapsule, has been added. What's New in Python 3.1 alpha 2? ================================= *Release date: 2009-4-4* Core and Builtins ----------------- - Implement PEP 378, Format Specifier for Thousands Separator, for integers. - Issue #5666: Py_BuildValue's 'c' code should create byte strings. - Issue #5499: The 'c' code for argument parsing functions now only accepts a byte, and the 'C' code only accepts a unicode character. - 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. - Fix a segfault when running test_exceptions with coverage, caused by insufficient checks in accessors of Exception.__context__. - Issue #5604: non-ASCII characters in module name passed to imp.find_module() were converted to UTF-8 while the path is converted to the default filesystem encoding, causing nonsense. - Issue #5126: str.isprintable() returned False for space characters. - Issue #4865: On MacOSX /Library/Python/2.7/site-packages is added to the end sys.path, for compatibility with the system install of Python. - Issue #4688: Add a heuristic so that tuples and dicts containing only untrackable objects are not tracked by the garbage collector. This can reduce the size of collections and therefore the garbage collection overhead on long-running programs, depending on their particular use of datatypes. - Issue #5512: Rewrite PyLong long division algorithm (x_divrem) to improve its performance. Long divisions and remainder operations are now between 50% and 150% faster. - Issue #4258: Make it possible to use base 2**30 instead of base 2**15 for the internal representation of integers, for performance reasons. Base 2**30 is enabled by default on 64-bit machines. Add --enable-big-digits option to configure, which overrides the default. Add sys.int_info structseq to provide information about the internal format. - Issue #4474: PyUnicode_FromWideChar now converts characters outside the BMP to surrogate pairs, on systems with sizeof(wchar_t) == 4 and sizeof(Py_UNICODE) == 2. - Issue #5237: Allow auto-numbered fields in str.format(). For example: '{} {}'.format(1, 2) == '1 2'. - Issue #5392: when a very low recursion limit was set, the interpreter would abort with a fatal error after the recursion limit was hit twice. - Issue #3845: In PyRun_SimpleFileExFlags avoid invalid memory access with short file names. Library ------- - Issue #2625: added missing items() call to the for loop in mailbox.MH.get_message(). - Issue #5640: Fix _multibytecodec so that CJK codecs don't repeat error substitutions from non-strict codec error callbacks in incrementalencoder and StreamWriter. - Issue #5656: Fix the coverage reporting when running the test suite with the -T argument. - Issue #5647: MutableSet.__iand__() no longer mutates self during iteration. - Issue #5624: Fix the _winreg module name still used in several modules. - Issue #5628: Fix io.TextIOWrapper.read() with an unreadable buffer. - Issue #5619: Multiprocessing children disobey the debug flag and causes popups on windows buildbots. Patch applied to work around this issue. - Issue #5400: Added patch for multiprocessing on netbsd compilation/support - Issue #5387: Fixed mmap.move crash by integer overflow. - Issue #5261: Patch multiprocessing's semaphore.c to support context manager use: "with multiprocessing.Lock()" works now. - Issue #5236: Change time.strptime() to only take strings. Didn't work with bytes already but the failure was non-obvious. - 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. - Issue #5595: Fix UnboundedLocalError in ntpath.ismount(). - Issue #1174606: Calling read() without arguments of an unbounded file (typically /dev/zero under Unix) could crash the interpreter. - The max_buffer_size arguments of io.BufferedWriter, io.BufferedRWPair, and io.BufferedRandom have been deprecated for removal in Python 3.2. - 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 #2110: Add support for thousands separator and 'n' type specifier to Decimal.__format__ - Fix Decimal.__format__ bug that swapped the meanings of the '<' and '>' alignment characters. - The error detection code in FileIO.close() could fail to reflect the `errno` value, and report it as -1 instead. - Issue #5016: FileIO.seekable() could return False if the file position was negative when truncated to a C int. Patch by Victor Stinner. Extension Modules ----------------- - Issue #5391: mmap now deals exclusively with bytes. - Issue #5463: In struct module, remove deprecated overflow wrapping when packing an integer: struct.pack('=L', -1) now raises struct.error instead of returning b'\xff\xff\xff\xff'. The _PY_STRUCT_RANGE_CHECKING and _PY_STRUCT_OVERFLOW_MASKING constants have been removed from the struct module. What's New in Python 3.1 alpha 1 ================================ *Release date: 2009-03-07* Core and Builtins ----------------- - The io module has been reimplemented in C for speed. - Give dict views an informative __repr__. - Issue #5247: Improve error message when unknown format codes are used when using str.format() with str, int, and float arguments. - Issue #5249: time.strftime returned malformed string when format string contained non ascii character on windows. - Issue #4626: compile(), exec(), and eval() ignore the coding cookie if the source has already been decoded into str. - Issue #5186: Reduce hash collisions for objects with no __hash__ method by rotating the object pointer by 4 bits to the right. - Issue #4575: Fix Py_IS_INFINITY macro to work correctly on x87 FPUs: it now forces its argument to double before testing for infinity. - Issue #5137: Make len() correctly raise a TypeError when a __len__ method returns a non-number type. - Issue #5182: Removed memoryview.__str__. - Issue #1717: Removed builtin cmp() function, dropped tp_compare slot, the C API functions PyObject_Compare and PyUnicode_Compare and the type definition cmpfunc. The tp_compare slot has been renamed to tp_reserved, and is reserved for future usage. - Issue #1242657: the __len__() and __length_hint__() calls in several tools were suppressing all exceptions. These include list() and bytearray(). - Issue #4707: round(x, n) now returns an integer if x is an integer. Previously it returned a float. - Issue #4753: By enabling a configure option named '--with-computed-gotos' on compilers that support it (notably: gcc, SunPro, icc), the bytecode evaluation loop is compiled with a new dispatch mechanism which gives speedups of up to 20%, depending on the system, on various benchmarks. - Issue #4874: Most builtin decoders now reject unicode input. - Issue #4842: Don't allow trailing 'L' when constructing an integer from a string. - Issue #4991: os.fdopen now raises an OSError for invalid file descriptors. - Issue #4838: When a module is deallocated, free the memory backing the optional module state data. - Issue #4910: Rename nb_long slot to nb_reserved, and change its type to ``(void *)``. - Issue #4935: The overflow checking code in the expandtabs() method common to str, bytes and bytearray could be optimized away by the compiler, letting the interpreter segfault instead of raising an error. - Issue #3720: Fix a crash when an iterator modifies its class and removes its __next__ method. - Issue #4910: Builtin int() function and PyNumber_Long/PyNumber_Int API function no longer attempt to call the __long__ slot to convert an object to an integer. Only the __int__ and __trunc__ slots are examined. - Issue #4893: Use NT threading on CE. - Issue #4915: Port sysmodule to Windows CE. - Issue #4868: utf-8, utf-16 and latin1 decoding are now 2x to 4x faster. The common cases are optimized thanks to a dedicated fast path and a moderate amount of loop unrolling. - Issue #4074: Change the criteria for doing a full garbage collection (i.e. collecting the oldest generation) so that allocating lots of objects without destroying them does not show quadratic performance. Based on a proposal by Martin von Löwis at http://mail.python.org/pipermail/python-dev/2008-June/080579.html. - Issue #4604: Some objects of the I/O library could still be used after having been closed (for instance, a read() call could return some previously buffered data). Patch by Dmitry Vasiliev. - Issue #4705: Fix the -u ("unbuffered binary stdout and stderr") command-line flag to work properly. Furthermore, when specifying -u, the text stdout and stderr streams have line-by-line buffering enabled (the default being to buffer arbitrary chunks of data). - The internal table, _PyLong_DigitValue, is now an array of unsigned chars instead of ints (reducing its size from 4 to 8 times thereby reducing Python's overall memory). - 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 #4580: Fix slicing of memoryviews when the item size is greater than one byte. Also fixes the meaning of len() so that it returns the number of items, rather than the size in bytes. - Issue #4075: Use OutputDebugStringW in Py_FatalError. - Issue #4747: When the terminal does not use utf-8, executing a script with non-ascii characters in its name could fail with a "SyntaxError: None" error. - Issue #4797: IOError.filename was not set when ``_fileio.FileIO`` failed to open file with a bytes 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 #4759: None is now allowed as the first argument of bytearray.translate(). It was always allowed for bytes.translate(). - Added test case to ensure attempts to read from a file opened for writing fail. - Issue #3106: Speedup some comparisons (str/str and int/int). - Issue #2183: Simplify and optimize bytecode for list, dict and set comprehensions. Original patch for list comprehensions by Neal Norwitz. - Issue #2467: gc.DEBUG_STATS reported invalid elapsed times. Also, always print elapsed times, not only when some objects are uncollectable / unreachable. Original patch by Neil Schemenauer. - Issue #3439: Add a bit_length method to int. - Issue #2173: When getting device encoding, check that return value of nl_langinfo is not the empty string. This was causing silent build failures on OS X. - Issue #4597: Fixed several opcodes that weren't always propagating exceptions. - Issue #4589: Fixed exception handling when the __exit__ function of a context manager returns a value that cannot be converted to a bool. - Issue #4445: Replace "sizeof(PyBytesObject)" with "offsetof(PyBytesObject, ob_sval) + 1" when allocating memory for bytes instances. On a typical machine this saves 3 bytes of memory (on average) per allocation of a bytes instance. - Issue #4533: File read operation was dreadfully slow due to a slowly growing read buffer. Fixed by using the same growth rate algorithm as Python 2.x. - Issue #4509: Various issues surrounding resize of bytearray objects to which there are buffer exports (e.g. memoryview instances). - 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 #4569: Interpreter crash when mutating a memoryview with an item size larger than 1. - Issue #4748: Lambda generators no longer return a value. - The re.sub(), re.subn() and re.split() functions now accept a flags parameter. - Issue #5108: Handle %s like %S, %R and %A 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 #7071: byte-compilation in Distutils is now done with respect to sys.dont_write_bytecode. - Issue #7066: archive_util.make_archive now restores the cwd if an error is raised. Initial patch by Ezio Melotti. - Issue #6516: Added owner/group support when creating tar archives in Distutils. - Issue #6954: Fixed crash when using DISTUTILS_DEBUG flag in Distutils. - Issue #6163: Fixed HP-UX runtime library dir options in distutils.unixcompiler. Initial patch by Sridhar Ratnakumar and Michael Haubenwallner. - Issue #6693: New functions in site.py to get user/global site packages paths. - Issue #6511: ZipFile now raises BadZipfile (instead of an IOError) when opening an empty or very small file. - Issue #6545: Removed assert statements in distutils.Extension, so the behavior is similar when used with -O. - unittest has been split up into a package. All old names should still work. - Issue #6466: now distutils.cygwinccompiler and distutils.emxccompiler uses the same refactored function to get gcc/ld/dllwrap versions numbers. It's `distutils.util.get_compiler_versions`. Added deprecation warnings for the obsolete get_versions() functions. - Issue #6433: fixed issues with multiprocessing.pool.map hanging on empty list - Issue #6314: logging: Extra checks on the "level" argument in more places. - Issue #2622: Fixed an ImportError when importing email.message from a standalone application built with py2exe or py2app. - Issue #6455: Fixed test_build_ext under win32. - Issue #6377: Enabled the compiler option, and deprecate its usage as an attribute. - Issue #6413: Fixed the log level in distutils.dist for announce. - Issue #6403: Fixed package path usage in build_ext. - Issues #5155, 5313, 5331: multiprocessing.Process._bootstrap was unconditionally calling "os.close(sys.stdin.fileno())" resulting in file descriptor errors - Issue #6365: Distutils build_ext inplace mode was copying the compiled extension in a subdirectory if the extension name had dots. - Issue #6164: Added an AIX specific linker argument in Distutils unixcompiler. Original patch by Sridhar Ratnakumar. - Issue #6286: Now Distutils upload command is based on urllib2 instead of httplib, allowing the usage of http_proxy. - 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 #6131: test_modulefinder leaked when run after test_distutils. Patch by Hirokazu Yamamoto. - Issue #6048: Now Distutils uses the tarfile module in archive_util. - Issue #6062: In distutils, fixed the package option of build_ext. Feedback and tests on pywin32 by Tim Golden. - Issue #6053: Fixed distutils tests on win32. patch by Hirokazu Yamamoto. - Issue #6046: Fixed the library extension when distutils build_ext is used inplace. Initial patch by Roumen Petrov. - Issue #6041: Now distutils `sdist` and `register` commands use `check` as a subcommand. - Issue #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 #5976: Fixed Distutils test_check_environ. - Issue #5941: Distutils build_clib command was not working anymore because of an incomplete customization of the archiver command. Added ARFLAGS in the Makefile besides AR and make Distutils use it. Original patch by David Cournapeau. - Issue #2245: aifc now skips chunk types it doesn't recognize, per spec. - Issue #5874: distutils.tests.test_config_cmd is not locale-sensitive anymore. - Issue #5810: Fixed Distutils test_build_scripts so it uses sysconfig.get_config_vars. - Issue #4951: Fixed failure in test_httpservers. - Issue #5795: Fixed test_distutils failure on Debian ppc. - Issue #5607: fixed Distutils test_get_platform for Mac OS X fat binaries. - Issue #5741: don't disallow "%%" (which is an escape for "%") when setting a value in SafeConfigParser. - Issue #5732: added a new command in Distutils: check. - Issue #5731: Distutils bdist_wininst no longer worked on non-Windows platforms. Initial patch by Paul Moore. - Issue #5095: Added bdist_msi to the list of bdist supported formats. Initial fix by Steven Bethard. - Issue #1491431: Fixed distutils.filelist.glob_to_re for edge cases. Initial fix by Wayne Davison. - Issue #5694: removed spurious test output in Distutils (test_clean). - Issue #1326077: fix the formatting of SyntaxErrors by the traceback 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 #2522: locale.format now checks its first argument to ensure it has been passed only one pattern, avoiding mysterious errors where it appeared that it was failing to do localization. - Issue #5583: Added optional Extensions in Distutils. Initial patch by Georg Brandl. - Issue #1222: locale.format() bug when the thousands separator is a space character. - Issue #5472: Fixed distutils.test_util tear down. Original patch by Tim Golden. - collections.deque() objects now have a read-only attribute called maxlen. - Issue #2638: Show a window constructed with tkSimpleDialog.Dialog only after it is has been populated and properly configured in order to prevent window flashing. - Issue #4792: Prevent a segfault in _tkinter by using the guaranteed to be safe interp argument given to the PythonCmd in place of the Tcl interpreter taken from a PythonCmd_ClientData. - Issue #5193: Guarantee that tkinter.Text.search returns a string. - Issue #5394: removed > 2.3 syntax from distutils.msvc9compiler. Original patch by Akira Kitada. - Issue #5334: array.fromfile() failed to insert values when EOFError was raised. - Issue #5385: Fixed mmap crash after resize failure on windows. - Issue #5179: Fixed subprocess handle leak on failure on windows. - PEP 372: Added collections.OrderedDict(). - The _asdict() for method for namedtuples now returns an OrderedDict(). - configparser now defaults to using an ordered dictionary. - Issue #5401: Fixed a performance problem in mimetypes when ``from mimetypes import guess_extension`` was used. - Issue #1733986: Fixed mmap crash in accessing elements of second map object with same tagname but larger size than first map. (Windows) - Issue #5386: mmap.write_byte didn't check map size, so it could cause buffer overrun. - Issue #1533164: Installed but not listed ``*.pyo`` was breaking Distutils bdist_rpm command. - Issue #5378: added --quiet option to Distutils bdist_rpm command. - Issue #5052: make Distutils compatible with 2.3 again. - Issue #5316: Fixed buildbot failures introduced by multiple inheritance in Distutils tests. - Issue #5287: Add exception handling around findCaller() call to help out IronPython. - Issue #5282: Fixed mmap resize on 32bit windows and unix. When offset > 0, The file was resized to wrong size. - Issue #5292: Fixed mmap crash on its boundary access m[len(m)]. - Issue #2279: distutils.sdist.add_defaults now add files from the package_data and the data_files metadata. - Issue #5257: refactored all tests in distutils, so they use support.TempdirManager, to avoid writing in the tests directory. - Issue #4524: distutils build_script command failed with --with-suffix=3. Initial patch by Amaury Forgeot d'Arc. - Issue #2461: added tests for distutils.util - Issue #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 #4631: Fix urlopen() result when an HTTP response uses chunked encoding. - Issue #5203: Fixed ctypes segfaults when passing a unicode string to a function without argtypes (only occurs if HAVE_USABLE_WCHAR_T is false). - Issue #3386: distutils.sysconfig.get_python_lib prefix argument was ignored under NT and OS2. Patch by Philip Jenvey. - Issue #5128: Make compileall properly inspect bytecode to determine if needs to be recreated. This avoids a timing hole thanks to the old reliance on the ctime of the files involved. - Issue #5122: Synchronize tk load failure check to prevent a potential deadlock. - Issue #1818: collections.namedtuple() now supports a keyword argument 'rename' which lets invalid fieldnames be automatically converted to positional names in the form, _1, _2, ... - Issue #4890: Handle empty text search pattern in Tkinter.Text.search. - Issue #4512 (part 2): Promote ``ZipImporter._get_filename()`` to be a public documented method ``ZipImporter.get_filename()``. - Issue #4195: The ``runpy`` module (and the ``-m`` switch) now support the execution of packages by looking for and executing a ``__main__`` submodule when a package name is supplied. Initial patch by Andi Vajda. - Issue #1731706: Call Tcl_ConditionFinalize for Tcl_Conditions that will not be used again (this requires Tcl/Tk 8.3.1), also fix a memory leak in Tkapp_Call when calling from a thread different than the one that created the Tcl interpreter. Patch by Robert Hancock. - Issue #4285: Change sys.version_info to be a named tuple. Patch by Ross Light. - Issue #1520877: Now distutils.sysconfig reads $AR from the environment/Makefile. Patch by Douglas Greiman. - Issue #1276768: The verbose option was not used in the code of distutils.file_util and distutils.dir_util. - Issue #5132: Fixed trouble building extensions under Solaris with --enabled-shared activated. Initial patch by Dave Peterson. - Issue #1581476: Always use the Tcl global namespace when calling into Tcl. - The shelve module now defaults to pickle protocol 3. - Fix a bug in the trace module where a bytes object from co_lnotab had its items being passed through ord(). - 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"). - Added the ttk module. See issue #2983: Ttk support for Tkinter. - Removed isSequenceType(), isMappingType, and isNumberType() from the operator module; use the abstract base classes instead. Also removed the repeat() function; use mul() instead. - Issue #5021: doctest.testfile() did not create __name__ and collections.namedtuple() relied on __name__ being defined. - Backport importlib from Python 3.1. Only the import_module() function has been backported to help facilitate transitions from 2.7 to 3.1. - Issue #1885: distutils. When running sdist with --formats=tar,gztar the tar file was overridden by the gztar one. - Issue #4863: distutils.mwerkscompiler has been removed. - Added a new itertools functions: combinations_with_replacement() and compress(). - Issue #5032: added a step argument to itertools.count() and allowed non-integer arguments. - Fix and properly document the multiprocessing module's logging support, expose the internal levels and provide proper usage examples. - Issue #1672332: fix unpickling of subnormal floats, which was producing a ValueError on some platforms. - Issue #3881: Help Tcl to load even when started through the unreadable local symlink to "Program Files" on Vista. - Issue #4710: Extract directories properly in the zipfile module; allow adding directories to a zipfile. - Issue #3807: _multiprocessing build fails when configure is passed --without-threads argument. When this occurs, _multiprocessing will be disabled, and not compiled. - Issue #5008: When a file is opened in append mode with the new IO library, do an explicit seek to the end of file (so that e.g. tell() returns the file size rather than 0). This is consistent with the behaviour of the traditional 2.x file object. - Issue #5013: Fixed a bug in FileHandler which occurred when the delay parameter was set. - Issue #4842: Always append a trailing 'L' when pickling longs using pickle protocol 0. When reading, the 'L' is optional. - Add the importlib package. - Issue #4301: Patch the logging module to add processName support, remove _check_logger_class from multiprocessing. - Issue #3325: Remove python2.x try: except: imports for old cPickle from multiprocessing. - Issue #4959: inspect.formatargspec now works for keyword only arguments without defaults. - Issue #3321: ``_multiprocessing.Connection()`` doesn't check handle; added checks for Unix machines for negative handles and large int handles. Without this check it is possible to segfault the interpreter. - Issue #4449: AssertionError in mp_benchmarks.py, caused by an underlying issue in sharedctypes.py. - Issue #1225107: inspect.isclass() returned True for instances with a custom __getattr__. - Issue #3826 and #4791: The socket module now closes the underlying socket appropriately when it is being used via socket.makefile() objects rather than delaying the close by waiting for garbage collection to do it. - Issue #1696199: Add collections.Counter() for rapid and convenient counting. - Issue #3860: GzipFile and BZ2File now support the context management protocol. - Issue #4867: Fixed a crash in ctypes when passing a string to a function without defining argtypes. - Issue #4272: Add an optional argument to the GzipFile constructor to override the timestamp in the gzip stream. The default value remains the current time. The information can be used by e.g. gunzip when decompressing. Patch by Jacques Frechet. - Restore Python 2.3 compatibility for decimal.py. - Issue #3638: Remove functions from _tkinter module level that depend on TkappObject to work with multiple threads. - Issue #4718: Adapt the wsgiref package so that it actually works with Python 3.x, in accordance with the `official amendments of the spec <http://www.wsgi.org/wsgi/Amendments_1.0>`_. - Issue #4796: Added Decimal.from_float() and Context.create_decimal_from_float() to the decimal module. - Fractions.from_float() no longer loses precision for integers too big to cast as floats. - Issue #4812: add missing underscore prefix to some internal-use-only constants in the decimal module. (Dec_0 becomes _Dec_0, etc.) - 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 #4795: inspect.isgeneratorfunction() returns False instead of None when the function is not a generator. - Issue #4702: Throwing a DistutilsPlatformError instead of IOError in case no MSVC compiler is found under Windows. Original patch by Philip Jenvey. - Issue #4646: distutils was choking on empty options arg in the setup function. Original patch by Thomas Heller. - Issue #3767: Convert Tk object to string in tkColorChooser. - Issue #3248: Allow placing ScrolledText in a PanedWindow. - Issue #4444: Allow assertRaises() to be used as a context handler, so that the code under test can be written inline if more practical. - Issue #4739: Add pydoc help topics for symbols, so that e.g. help('@') works as expected in the interactive environment. - Issue #4756: zipfile.is_zipfile() now supports file-like objects. Patch by Gabriel Genellina. - Issue #4574: reading a UTF16-encoded text file crashes if \r on 64-char boundary. - Issue #4223: inspect.getsource() will now correctly display source code for packages loaded via zipimport (or any other conformant PEP 302 loader). Original patch by Alexander Belopolsky. - Issue #4201: pdb can now access and display source code loaded via zipimport (or any other conformant PEP 302 loader). Original patch by Alexander Belopolsky. - Issue #4197: doctests in modules loaded via zipimport (or any other PEP 302 conformant loader) will now work correctly in most cases (they are still subject to the constraints that exist for all code running from inside a module loaded via a PEP 302 loader and attempting to perform IO operations based on __file__). Original patch by Alexander Belopolsky. - Issues #4082 and #4512: Add runpy support to zipimport in a manner that allows backporting to maintenance branches. Original patch by Alexander Belopolsky. - Issue #4163: textwrap module: allow word splitting on a hyphen preceded by a non-ASCII letter. - Issue #4616: TarFile.utime(): Restore directory times on Windows. - Issue #4021: tokenize.detect_encoding() now raises a SyntaxError when the codec cannot be found. This is for compatibility with the builtin behavior. - 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 #4483: _dbm module now builds on systems with gdbm & gdbm_compat libs. - Added the subprocess.check_call_output() convenience function to get output from a subprocess on success or raise an exception on error. - Issue #1055234: cgi.parse_header(): Fixed parsing of header parameters to support unusual filenames (such as those containing semi-colons) in Content-Disposition headers. - Issue #4384: Added logging integration with warnings module using captureWarnings(). This change includes a NullHandler which does nothing; it will be of use to library developers who want to avoid the "No handlers could be found for logger XXX" message which can appear if the library user doesn't configure logging. - Issue #3741: DISTUTILS_USE_SDK set causes msvc9compiler.py to raise an exception. - Issue #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 #4542: On Windows, binascii.crc32 still accepted str as binary input; the corresponding tests now pass. - Issue #4537: webbrowser.UnixBrowser would fail to open the browser because it was calling the wrong open() function. - 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 #4861: ctypes.util.find_library(): Robustify. Fix library detection on biarch systems. Try to rely on ldconfig only, without using objdump and gcc. - Issue #5104: The socket module now raises OverflowError when 16-bit port and protocol numbers are supplied outside the allowed 0-65536 range on bind() and getservbyport(). - Windows locale mapping updated to Vista. Tools/Demos ----------- - Issue #4704: remove use of cmp() in pybench, bump its version number to 2.1, and make it 2.6-compatible. - Ttk demos added in Demo/tkinter/ttk/ - Issue #4677: add two list comprehension tests to pybench. Build ----- - Issue #6094: Build correctly with Subversion 1.7. - Issue #5847: Remove -n switch on "Edit with IDLE" menu item. - Issue #5726: Make Modules/ld_so_aix return the actual exit code of the linker, rather than always exit successfully. Patch by Floris Bruynooghe. - Issue #4587: Add configure option --with-dbmliborder=db1:db2:... to specify the order that backends for the dbm extension are checked. - Link the shared python library with $(MODLIBS). - Issue #5134: Silence compiler warnings when compiling sqlite with VC++. - Issue #4494: Fix build with Py_NO_ENABLE_SHARED on Windows. - Issue #4895: Use _strdup on Windows CE. - Issue #4472: "configure --enable-shared" now works on OSX - Issues #4728 and #4060: WORDS_BIGEDIAN is now correct in Universal builds. - Issue #4389: Add icon to the uninstall entry in "add-and-remove-programs". - Issue #4289: Remove Cancel button from AdvancedDlg. - Issue #1656675: Register a drop handler for .py* files on Windows. - Issue #4120: Exclude manifest from extension modules in VS2008. - Issue #4091: Install pythonxy.dll in system32 again. - Issue #4018: Disable "for me" installations on Vista. - Issue #3758: Add ``patchcheck`` build target to .PHONY. - Issue #4204: Fixed module build errors on FreeBSD 4. C-API ----- - Issue #6624: yArg_ParseTuple with "s" format when parsing argument with NUL: Bogus TypeError detail string. - Issue #5175: PyLong_AsUnsignedLongLong now raises OverflowError for negative arguments. Previously, it raised TypeError. - Issue #4720: The format for PyArg_ParseTupleAndKeywords can begin with '|'. - Issue #3632: from the gdb debugger, the 'pyo' macro can now be called when the GIL is released, or owned by another thread. - Issue #4122: On Windows, fix a compilation error when using the Py_UNICODE_ISSPACE macro in an extension module. Extension Modules ----------------- - Issue #3745: Fix hashlib to always reject unicode and non buffer-api supporting objects as input no matter how it was compiled (built in implementations or external openssl library). - Issue #4397: Fix occasional test_socket failure on OS X. - Issue #4279: Fix build of parsermodule under Cygwin. - Issue #4751: hashlib now releases the GIL when hashing large buffers (with a hardwired threshold of 2048 bytes), allowing better parallelization on multi-CPU systems. Contributed by Lukas Lueg (ebfe) and Victor Stinner. - Issue #4051: Prevent conflict of UNICODE macros in cPickle. - Issue #4738: Each zlib object now has a separate lock, allowing several streams to be compressed or decompressed at once on multi-CPU systems. Also, the GIL is now released when computing the CRC of a large buffer. Patch by ebfe. - Issue #4228: Pack negative values the same way as 2.4 in struct's L format. - Issue #1040026: Fix os.times result on systems where HZ is incorrect. - Issues #3167, #3682: Fix test_math failures for log, log10 on Solaris, OpenBSD. - Issue #4583: array.array would not always prohibit resizing when a buffer has been exported, resulting in an interpreter crash when accessing the buffer. - Issue #5228: Make functools.partial objects can now be pickled. Tests ----- - Issue #6152: New option '-j'/'--multiprocess' for regrtest allows running regression tests in parallel, shortening the total runtime. - Issue #5450: Moved tests involving loading tk from Lib/test/test_tcl to Lib/tkinter/test/test_tkinter/test_loadtk. With this, these tests demonstrate the same behaviour as test_ttkguionly (and now also test_tk) which is to skip the tests if DISPLAY is defined but can't be used. - 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. Docs ---- What's New in Python 3.0 final ============================== *Release date: 03-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 #3689: The list reversed iterator now supports __length_hint__ instead of __len__. Behavior now matches other reversed iterators. - Issue #4367: Python would segfault during compiling when the unicodedata module couldn't be imported and \N escapes were present. - Fix build failure of _cursesmodule.c building with -D_FORTIFY_SOURCE=2. Library ------- - Issue #4387: binascii now refuses to accept str as binary input. - Issue #4073: Add 2to3 support to build_scripts, refactor that support in build_py. - IDLE would print a "Unhandled server exception!" message when internal debugging is enabled. - Issue #4455: IDLE failed to display the windows list when two windows have the same title. - Issue #3741: DISTUTILS_USE_SDK set causes msvc9compiler.py to raise an exception. - Issue #4433: Fixed an access violation when garbage collecting _ctypes.COMError instances. - Issue #4429: Fixed UnicodeDecodeError in ctypes. - Issue #4373: Corrected a potential reference leak in the pickle module and silenced a false positive ref leak in distutils.tests.test_build_ext. - Issue #4382: dbm.dumb did not specify the expected file encoding for opened files. - Issue #4383: When IDLE cannot make the connection to its subprocess, it would fail to properly display the error message. Build ----- - Issue #4407: Fix source file that caused the compileall step in Windows installer to fail. Docs ---- - Issue #4449: Fixed multiprocessing examples - Issue #3799: Document that dbm.gnu and dbm.ndbm will accept string arguments for keys and values which will be converted to bytes before committal. What's New in Python 3.0 release candidate 3? ============================================= *Release date: 20-Nov-2008* Core and Builtins ----------------- - Issue #4349: sys.path included a non-existent platform directory because of a faulty Makefile. - Issue #3327: Don't overallocate in the modules_by_index list. - Issue #1721812: Binary set operations and copy() returned the input type instead of the appropriate base type. This was incorrect because set subclasses would be created without their __init__() method being called. The corrected behavior brings sets into line with lists and dicts. - Issue #4296: Fix PyObject_RichCompareBool so that "x in [x]" evaluates to True, even when x doesn't compare equal to itself. This was a regression from 2.6. - Issue #3705: Command-line arguments were not correctly decoded when the terminal does not use UTF8. Library ------- - Issue #4363: The uuid.uuid1() and uuid.uuid4() functions now work even if the ctypes module is not present. - FileIO's mode attribute now always includes ``"b"``. - Issue #3799: Fix dbm.dumb to accept strings as well as bytes for keys. String keys are now written out in UTF-8. - Issue #4338: Fix distutils upload command. - Issue #4354: Fix distutils register command. - Issue #4116: Resolve member name conflict in ScrolledCanvas.__init__. - Issue #4307: The named tuple that ``inspect.getfullargspec()`` returns now uses ``kwonlydefaults`` instead of ``kwdefaults``. - Issue #4298: Fix a segfault when pickle.loads is passed ill-formed input. - Issue #4283: Fix a left-over "iteritems" call in distutils. 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. Tools/Demos ----------- - Demos of the socketserver module now work with Python 3. What's New in Python 3.0 release candidate 2 ============================================ *Release date: 05-Nov-2008* Core and Builtins ----------------- - Issue #4211: The __path__ attribute of frozen packages is now a list instead of a string as required by PEP 302. - Issue #3727: Fixed poplib. - Issue #3714: Fixed nntplib by using bytes where appropriate. - Issue #1210: Fixed imaplib and its documentation. - 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 #3626: On cygwin, starting python with a non-existent script name would not display anything if the file name is only 1 character long. - Issue #4176: Fixed a crash when pickling an object which ``__reduce__`` method does not return iterators for the 4th and 5th items. - Issue #3723: Fixed initialization of subinterpreters. - Issue #4213: The file system encoding is now normalized by the codec subsystem, for example UTF-8 is turned into utf-8. - Issue #4200: Changed the atexit module to store its state in its PyModuleDef atexitmodule. This fixes a bug with multiple subinterpeters. - Issue #4237: io.FileIO() was raising invalid warnings caused by insufficient initialization of PyFileIOObject struct members. - Issue #4170: Pickling a collections.defaultdict object would crash the interpreter. - Issue #4146: Compilation on OpenBSD has been restored. - Issue #3574: compile() incorrectly handled source code encoded as Latin-1. - Issues #2384 and #3975: Tracebacks were not correctly printed when the source file contains a ``coding:`` header: the wrong line was displayed, and the encoding was not respected. - Issue #3740: Null-initialize module state. - Issue #3946: PyObject_CheckReadBuffer crashed on a memoryview object. - Issue #1688: On Windows, the input() prompt was not correctly displayed if it contains non-ascii characters. - Bug #3951: Py_USING_MEMORY_DEBUGGER should not be enabled by default. Library ------- - Issue #3664: The pickle module could segfault if a subclass of Pickler fails to call the base __init__ method. - Issue #3725: telnetlib now works completely in bytes. - Issue #4072: Restore build_py_2to3. - Issue #4014: Don't claim that Python has an Alpha release status, in addition to claiming it is Mature. - Issue #3187: Add sys.setfilesystemencoding. - Issue #3187: Better support for "undecodable" filenames. Code by Victor Stinner, with small tweaks by GvR. - Issue #3965: Allow repeated calls to turtle.Screen, by making it a true singleton object. - Issue #3911: ftplib.FTP.makeport() could give invalid port numbers. - Issue #3929: When the database cannot be opened, dbm.open() would incorrectly raise a TypeError: "'tuple' object is not callable" instead of the expected dbm.error. - Bug #3884: Make the turtle module toplevel again. - Issue #3547: Fixed ctypes structures bitfields of varying integer sizes. Extension Modules ----------------- - Issue #3659: Subclasses of str didn't work as SQL parameters. Build ----- - 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 #4204: Fixed module build errors on FreeBSD 4. Tools/Demos ----------- - Issue #3717: Fix Demo/embed/demo.c. - Issue #4072: Add a distutils demo for build_py_2to3. What's New in Python 3.0 release candidate 1 ============================================ *Release date: 17-Sep-2008* Core and Builtins ----------------- - Issue #3827: memoryview lost its size attribute in favor of using len(view). - Issue #3813: could not lanch python.exe via symbolic link on cygwin. - Issue #3705: fix crash when given a non-ascii value on the command line for the "-c" and "-m" parameters. Now the behaviour is as expected under Linux, although under Windows it fails at a later point. - Issue #3279: Importing site at interpreter was failing silently because the site module uses the open builtin which was not initialized at the time. - Issue #3660: Corrected a reference leak in str.encode() when the encoder does not return a bytes object. - Issue #3774: Added a few more checks in PyTokenizer_FindEncoding to handle error conditions. - Issue #3594: Fix Parser/tokenizer.c:fp_setreadl() to open the file being tokenized by either a file path or file pointer for the benefit of PyTokenizer_FindEncoding(). - Issue #3696: Error parsing arguments on OpenBSD <= 4.4 and Cygwin. On these systems, the mbstowcs() function is slightly buggy and must be replaced with strlen() for the purpose of counting of number of wide characters needed to represent the multi-byte character string. - Issue #3697: "Fatal Python error: Cannot recover from stack overflow" could be easily encountered under Windows in debug mode when exercising the recursion limit checking code, due to bogus handling of recursion limit when USE_STACKCHEK was enabled. - Issue #3639: The _warnings module could segfault the interpreter when unexpected types were passed in as arguments. - Issue #3712: The memoryview object had a reference leak and didn't support cyclic garbage collection. - 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 #3611: An exception __context__ could be cleared in a complex pattern involving a __del__ method re-raising an exception. - 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. - Issue #3663: Py_None was decref'd when printing SyntaxErrors. - Issue #3651: Fix various memory leaks when using the buffer interface, or when the "s#" code of PyArg_ParseTuple is given a bytes object. - Issue #3657: Fix uninitialized memory read when pickling longs. Found by valgrind. - Apply security patches from Apple. - 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. - Issue #3650: Fixed a reference leak in bytes.split('x'). - bytes(o) now tries to use o.__bytes__() before using fallbacks. - 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 ----- - PyObject_Bytes and PyBytes_FromObject were added. Library ------- - Issue #3756: make re.escape() handle bytes as well as str. - Issue #3800: fix filter() related bug in formatter.py. - Issue #874900: fix behaviour of threading module after a fork. - 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 #3660: fix a memory leak in the C accelerator of the pickle module. - Issue #3160: the "bdist_wininst" distutils command didn't work. - Issue #1658: tkinter changes dict size during iteration in both tkinter.BaseWidget and tkinter.scrolledtext.ScrolledText. - The bsddb module (and therefore the dbm.bsd module) has been removed. It is now maintained outside of the standard library at http://www.jcea.es/programacion/pybsddb.htm. - Issue #600362: Relocated parse_qs() and parse_qsl(), from the cgi module to the urlparse one. Added a DeprecationWarning in the old module, it will be deprecated in the future. - Issue #3719: platform.architecture() fails if there are spaces in the path to the Python binary. - Issue #3602: As part of the merge of r66135, make the parameters on warnings.catch_warnings() keyword-only. Also remove a DeprecationWarning. - The deprecation warnings for the camelCase threading API names were removed. - Issue #3110: multiprocessing fails to compiel on solaris 10 due to missing SEM_VALUE_MAX. Extension Modules ----------------- - Issue #3782: os.write() must not accept unicode strings. - 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. - bsddb code updated to version 4.7.3pre2. This code is the same than Python 2.6 one, since the intention is to keep a unified 2.x/3.x codebase. The Python code is automatically translated using "2to3". Please, do not update this code in Python 3.0 by hand. Update the 2.6 one and then do "2to3". - The _bytesio and _stringio modules are now compiled into the python binary. - Issue #3492 and #3790: Fixed the zlib module and zipimport module uses of mutable bytearray objects where they should have been using immutable bytes. - Issue #3797: Fixed the dbm, marshal, mmap, ossaudiodev, & winreg modules to return bytes objects instead of bytearray objects. Tools/Demos ----------- - Fix Misc/gdbinit so it works. Build ----- - Issue #3812: Failed to build python if configure --without-threads. - Issue #3791: Remove the bsddb module from the Windows installer, and the core bsddb library from the Windows build files. What's new in Python 3.0b3? =========================== *Release date: 20-Aug-2008* Core and Builtins ----------------- - Issue #3653: Fix a segfault when sys.excepthook was called with invalid arguments. - Issue #2394: implement more of the memoryview API, with the caveat that only one-dimensional contiguous buffers are supported and exercised right now. Slicing, slice assignment and comparison (equality and inequality) have been added. Also, the tolist() method has been implemented, but only for byte buffers. Finally, the API has been updated to return bytes objects wherever it used to return bytearrays. - Issue #3560: clean up the new C PyMemoryView API so that naming is internally consistent; add macros PyMemoryView_GET_BASE() and PyMemoryView_GET_BUFFER() to access useful properties of a memory views without relying on a particular implementation; remove the ill-named PyMemoryView() function (PyMemoryView_GET_BUFFER() can be used instead). - ctypes function pointers that are COM methods have a boolean True value again. - Issue #1819: function calls with several named parameters are now on average 35% faster (as measured by pybench). - The undocumented C APIs PyUnicode_AsString() and PyUnicode_AsStringAndSize() were made private to the interpreter, in order to be able to refine their interfaces for Python 3.1. If you need to access the UTF-8 representation of a Unicode object as bytes string, please use PyUnicode_AsUTF8String() instead. - Issue #3460: PyUnicode_Join() implementation is 10% to 80% faster thanks to Python 3.0's stricter semantics which allow avoiding successive reallocations of the result string (this also affects str.join()). Library ------- - Issue #1276: Added temporary aliases for CJK Mac encodings to resolve a build problem on MacOS with CJK locales. It adds four temporary mappings to existing legacy codecs that are virtually compatible with Mac encodings. They will be replaced by codecs correctly implemented in 3.1. - Issue #3614: Corrected a typo in xmlrpc.client, leading to a NameError "global name 'header' is not defined". - Issue #2834: update the regular expression library to match the unicode standards of py3k. In other words, mixing bytes and unicode strings (be it as pattern, search string or replacement string) raises a TypeError. Moreover, the re.UNICODE flag is enabled automatically for unicode patterns, and can be disabled by specifying a new re.ASCII flag; as for bytes patterns, ASCII matching is the only option and trying to specify re.UNICODE for such patterns raises a ValueError. - Issue #3300: make urllib.parse.[un]quote() default to UTF-8. Code contributed by Matt Giuca. quote() now encodes the input before quoting, unquote() decodes after unquoting. There are new arguments to change the encoding and errors settings. There are also new APIs to skip the encode/decode steps. [un]quote_plus() are also affected. - Issue #2235: numbers.Number now blocks inheritance of the default id() based hash because that hash mechanism is not correct for numeric types. All concrete numeric types that inherit from Number (rather than just registering with it) must explicitly provide a hash implementation in order for their instances to be hashable. - 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. - Issue #1342811: Fix leak in Tkinter.Menu.delete. Commands associated to menu entries were not deleted. - Remove the TarFileCompat class from tarfile.py. - Issue #2491: os.fdopen is now almost an alias for the built-in open(), and accepts the same parameters. It just checks that its first argument is an integer. - 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 #2523: Fix quadratic behaviour when read()ing a binary file without asking for a specific length. Extension Modules ----------------- - Bug #3542: Support Unicode strings in _msi module. What's new in Python 3.0b2? =========================== *Release date: 17-Jul-2008* Core and Builtins ----------------- - 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 #3083: Add alternate (#) formatting for bin, oct, hex output for str.format(). This adds the prefix 0b, 0o, or 0x, respectively. - Issue #3280: like chr(), the "%c" format now accepts unicode code points beyond the Basic Multilingual Plane (above 0xffff) on all configurations. On "narrow Unicode" builds, the result is a string of 2 code units, forming a UTF-16 surrogate pair. - Issue #3282: str.isprintable() should return False for undefined Unicode characters. - Issue #3236: Return small longs from PyLong_FromString. - Exception tracebacks now support exception chaining. Library ------- - Removed the sunaudio module. Use sunau instead. - 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. - Removed "ast" function aliases from the parser module. - 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 #2683: Fix inconsistency in subprocess.Popen.communicate(): the argument now must be a bytes object in any case. - Issue #3145: help("modules whatever") failed when trying to load the source code of every single module of the standard library, including invalid files used in the test suite. - The gettext library now consistently uses Unicode strings for message ids and message strings, and ``ugettext()`` and the like don't exist anymore. - The traceback module has been expanded to handle chained exceptions. C API ----- - Issue #3247: the function Py_FindMethod was removed. Modern types should use the tp_methods slot instead. Tools/Demos ----------- - The Mac/Demos directory has been removed. - All of the Mac scripts have been removed (including BuildApplet.py). What's new in Python 3.0b1? =========================== *Release date: 18-Jun-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. - Issue #2630: implement PEP 3138. repr() now returns printable Unicode characters unescaped, to get an ASCII-only representation of an object use ascii(). - Issue #1342: On windows, Python could not start when installed in a directory with non-ascii characters. - Implement PEP 3121: new module initialization and finalization API. - Removed the already-defunct ``-t`` option. - Issue #2957: Corrected a ValueError "recursion limit exceeded", when unmarshalling many code objects, which happens when importing a large .pyc file (~1000 functions). - Issue #2963: fix merging oversight that disabled method cache for all types. - Issue #2964: fix a missing INCREF in instancemethod_descr_get. - Issue #2895: Don't crash when given bytes objects as keyword names. - Issue #2798: When parsing arguments with PyArg_ParseTuple, the "s" code now allows any unicode string and returns a utf-8 encoded buffer, just like the "s#" code already does. The "z" code was corrected as well. - 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. - The ``--with-toolbox-glue`` option (and the associated pymactoolbox.h) have been removed. - Issue #2196: hasattr() now lets exceptions which do not inherit Exception (KeyboardInterrupt, and SystemExit) propagate instead of ignoring them. - #3021 Exception reraising sematics have been significantly improved. However, f_exc_type, f_exc_value, and f_exc_traceback cannot be accessed from Python code anymore. - Three of PyNumberMethods' members, nb_coerce, nb_hex, and nb_oct, have been removed. Extension Modules ----------------- - Renamed ``_winreg`` module to ``winreg``. - 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. - Issue #2870: cmathmodule.c compile error. Library ------- - The methods ``is_in_tuple()``, ``is_vararg()``, and ``is_keywordarg()`` of symtable.Symbol have been removed. - Patch #3133: http.server.CGIHTTPRequestHandler did not work on windows. - a new ``urllib`` package was created. It consists of code from ``urllib``, ``urllib2``, ``urlparse``, and ``robotparser``. The old modules have all been removed. The new package has five submodules: ``urllib.parse``, ``urllib.request``, ``urllib.response``, ``urllib.error``, and ``urllib.robotparser``. The ``urllib.request.urlopen()`` function uses the url opener from ``urllib2``. (Note that the unittests have not been renamed for the beta, but they will be renamed in the future.) - rfc822 has been removed in favor of the email package. - mimetools has been removed in favor of the email package. - Patch #2849: Remove use of rfc822 module from standard library. - Added C optimized implementation of io.StringIO. - The ``pickle`` module is now automatically use an optimized C implementation of Pickler and Unpickler when available. The ``cPickle`` module is no longer needed. - Removed the ``htmllib`` and ``sgmllib`` modules. - The deprecated ``SmartCookie`` and ``SimpleCookie`` classes have been removed from ``http.cookies``. - The ``commands`` module has been removed. Its getoutput() and getstatusoutput() functions have been moved to the ``subprocess`` module. - The ``http`` package was created; it contains the old ``httplib`` as ``http.client``, ``Cookie`` as ``http.cookies``, ``cookielib`` as ``http.cookiejar``, and the content of the three ``HTTPServer`` modules as ``http.server``. - The ``xmlrpc`` package was created; it contains the old ``xmlrpclib`` module as ``xmlrpc.client`` and the content of the old ``SimpleXMLRPCServer`` and ``DocXMLRPCServer`` modules as ``xmlrpc.server``. - The ``dbm`` package was created, containing the old modules ``anydbm`` and ``whichdb`` in its ``__init__.py``, and having ``dbm.gnu`` (was ``gdbm``), ``dbm.bsd`` (was ``dbhash``), ``dbm.ndbm`` (was ``dbm``) and ``dbm.dumb`` (was ``dumbdbm``) as submodules. - The ``repr`` module has been renamed to ``reprlib``. - The ``statvfs`` module has been removed. - Issue #1713041: fix pprint's handling of maximum depth. - Issue #2250: Exceptions raised during evaluation of names in rlcompleter's ``Completer.complete()`` method are now caught and ignored. - Patch #2659: Added ``break_on_hyphens`` option to textwrap's ``TextWrapper`` class. - 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 ``ConfigParser`` module has been renamed to ``configparser``. - Issue #2865: webbrowser.open() works again in a KDE environment. - The ``multifile`` module has been removed. - The ``SocketServer`` module has been renamed to ``socketserver``. - Fixed the ``__all__`` setting on ``collections`` to include ``UserList`` and ``UserString``. - The sre module has been removed. - The Queue module has been renamed to queue. - The copy_reg module has been renamed to copyreg. - The mhlib module has been removed. - The ihooks module has been removed. - The fpformat module has been removed. - The dircache module has been removed. - The Canvas module has been removed. - The Decimal module gained the magic methods __round__, __ceil__, __floor__ and __trunc__, to give support for round, math.ceil, math.floor and math.trunc. - The user module has been removed. - The mutex module has been removed. - The imputil module has been removed. - os.path.walk has been removed in favor of os.walk. - pdb gained the "until" command. - The test.test_support module has been renamed to test.support. - The threading module API was renamed to be PEP 8 compliant. The old names are still present, but will be removed in the near future. Tools/Demos ----------- - The bgen tool has been removed. Build ----- What's New in Python 3.0a5? =========================== *Release date: 08-May-2008* Core and Builtins ----------------- - Fixed misbehaviour of PyLong_FromSsize_t on systems where sizeof(size_t) > sizeof(long). - Issue #2221: Corrected a SystemError "error return without exception set", when the code executed by exec() raises an exception, and sys.stdout.flush() also raises an error. - Bug #2565: The repr() of type objects now calls them 'class', not 'type' - whether they are builtin types or not. - The command line processing was converted to pass Unicode strings through as unmodified as possible; as a consequence, the C API related to command line arguments was changed to use wchar_t. - All backslashes in raw strings are interpreted literally. This means that '\u' and '\U' escapes are not treated specially. Extension Modules ----------------- Library ------- - ctypes objects now support the PEP3118 buffer interface. - Issue #2682: ctypes callback functions now longer contain a cyclic reference to themselves. - Issue #2058: Remove the buf attribute and add __slots__ to the TarInfo class in order to reduce tarfile's memory usage. - Bug #2606: Avoid calling .sort() on a dict_keys object. - 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. Build ----- - Issue #1496032: On alpha, use -mieee when gcc is the compiler. - "make install" is now an alias for "make altinstall", to prevent accidentally overwriting a Python 2.x installation. Use "make fullinstall" to force Python 3.0 to be installed as "python". - Issue #2544: On HP-UX systems, use 'gcc -shared' for linking when gcc is used as compiler. What's New in Python 3.0a4? =========================== *Release date: 02-Apr-2008* Core and Builtins ----------------- - Bug #2301: Don't try decoding the source code into the original encoding for syntax errors. Extension Modules ----------------- - The dl module was removed, use the ctypes module instead. - Use wchar_t functions in _locale module. Library ------- - The class distutils.commands.build_py.build_py_2to3 can be used as a build_py replacement to automatically run 2to3 on modules that are going to be installed. - A new pickle protocol (protocol 3) is added with explicit support for bytes. This is the default protocol. It intentionally cannot be unpickled by Python 2.x. - When a pickle written by Python 2.x contains an (8-bit) str instance, this is now decoded to a (Unicode) str instance. The encoding used to do this defaults to ASCII, but can be overridden via two new keyword arguments to the Unpickler class. Previously this would create bytes instances, which is usually wrong: str instances are often used to pickle attribute names etc., and text is more common than binary data anyway. - Default to ASCII as the locale.getpreferredencoding, if the POSIX system doesn't support CODESET and LANG isn't set or doesn't allow deduction of an encoding. - Issue #1202: zlib.crc32 and zlib.adler32 now return an unsigned value. - Issue #719888: Updated tokenize to use a bytes API. generate_tokens has been renamed tokenize and now works with bytes rather than strings. A new detect_encoding function has been added for determining source file encoding according to PEP-0263. Token sequences returned by tokenize always start with an ENCODING token which specifies the encoding used to decode the file. This token is used to encode the output of untokenize back to bytes. What's New in Python 3.0a3? =========================== *Release date: 29-Feb-2008* Core and Builtins ----------------- - Issue #2282: io.TextIOWrapper was not overriding seekable() from io.IOBase. - 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 list during a gc.collect() of the highest generation in order to allow pymalloc to free more arenas. Python may give back memory to the OS earlier. - Issue #2045: Fix an infinite recursion triggered when printing a subclass of collections.defaultdict, if its default_factory is set to a bound method. - Fixed a minor memory leak in dictobject.c. The content of the free list was not freed on interpreter shutdown. - Limit free list of method and builtin function objects to 256 entries each. - Patch #1953: Added ``sys._compact_freelists()`` and the C API functions ``PyInt_CompactFreeList`` and ``PyFloat_CompactFreeList`` to compact the internal free lists of pre-allocted ints and floats. - Bug #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: Added tuple.count() and tuple.index() methods to comply with the collections.Sequence API. - Fixed multiple reinitialization of the Python interpreter. The small int list in longobject.c has caused a seg fault during the third finalization. - Issue #1973: bytes.fromhex('') raised SystemError. - Issue #1771: remove cmp parameter from sorted() and list.sort(). - Issue #1969: split and rsplit in bytearray are inconsistent. - map() no longer accepts None for the first argument. Use zip() instead. - Issue #1769: Now int("- 1") is not allowed any more. - Object/longobject.c: long(float('nan')) raises an OverflowError instead of returning 0. - Issue #1762972: __file__ points to the source file instead of the pyc/pyo file if the py file exists. - Issue #1393: object_richcompare() returns NotImplemented instead of False if the objects aren't equal, to give the other side a chance. - Issue #1692: Interpreter was not displaying location of SyntaxError. - 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'. Also use Unicode strings to deal with non-English locales. - Issue #1587: Added instancemethod wrapper for PyCFunctions. The Python C API has gained a new type *PyInstanceMethod_Type* and the functions *PyInstanceMethod_Check(o)*, *PyInstanceMethod_New(func)* and *PyInstanceMethod_Function(im)*. - Constants gc.DEBUG_OBJECT and gc.DEBUG_INSTANCE have been removed from the gc module; gc.DEBUG_COLLECTABLE or gc.DEBUG_UNCOLLECTABLE are now enough to print the corresponding list of objects considered by the garbage collector. - Issue #1573: Improper use of the keyword-only syntax makes the parser crash. - Issue #1564: The set implementation should special-case PyUnicode instead of PyString. - Patch #1031213: Decode source line in SyntaxErrors back to its original source encoding. - inspect.getsource() includes the decorators again. - Bug #1713: posixpath.ismount() claims symlink to a mountpoint is a mountpoint. - 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. Extension Modules ----------------- - Code for itertools ifilter(), imap(), and izip() moved to bultins and renamed to filter(), map(), and zip(). Also, renamed izip_longest() to zip_longest() and ifilterfalse() to filterfalse(). - Issue #1762972: Readded the reload() function as imp.reload(). - Bug #2111: mmap segfaults when trying to write a block opened with PROT_READ. - Issue #2063: correct order of utime and stime in os.times() result on Windows. Library ------- - Weakref dictionaries now inherit from MutableMapping. - Created new UserDict class in collections module. This one inherits from and complies with the MutableMapping ABC. Also, moved UserString and UserList to the collections module. The MutableUserString class was removed. - Removed UserDict.DictMixin. Replaced all its uses with collections.MutableMapping. - Issue #1703: getpass() should flush after writing prompt. - Issue #1585: IDLE uses non-existent xrange() function. - Issue #1578: Problems in win_getpass. Build ----- - Renamed --enable-unicode configure flag to --with-wide-unicode, since Unicode strings can't be disabled anymore. C API ----- - Issue #1629: Renamed Py_Size, Py_Type and Py_Refcnt to Py_SIZE, Py_TYPE and Py_REFCNT. - New API PyImport_ImportModuleNoBlock(), works like PyImport_ImportModule() but won't block on the import lock (returning an error instead). What's New in Python 3.0a2? =========================== *Release date: 07-Dec-2007* (Note: this list is incomplete.) Core and Builtins ----------------- - str8 now has the same construction signature as bytes. - Comparisons between str and str8 now return False/True for ==/!=. sqlite3 returns str8 when recreating on object from it's __conform__ value. The struct module returns str8 for all string-related formats. This was true before this change, but becomes more apparent thanks to string comparisons always being False. - Replaced `PyFile_FromFile()` with `PyFile_FromFd(fd, name. mode, buffer, encoding, newline)`. - Fixed `imp.find_module()` to obey the -*- coding: -*- header. - Changed `__file__` and `co_filename` to unicode. The path names are decoded with `Py_FileSystemDefaultEncoding` and a new API method `PyUnicode_DecodeFSDefault(char*)` was added. - io.open() and _fileio.FileIO have grown a new argument closefd. A false value disables the closing of the file descriptor. - Added a new option -b to issues warnings (-bb for errors) about certain operations between bytes/buffer and str like str(b'') and comparison. - The standard streams sys.stdin, stdout and stderr may be None when the C runtime library returns an invalid file descriptor for the streams (fileno(stdin) < 0). For now this happens only for Windows GUI apps and scripts started with `pythonw.exe`. - Added PCbuild9 directory for VS 2008. - Renamed structmember.h WRITE_RESTRICTED to PY_WRITE_RESTRICTED to work around a name clash with VS 2008 on Windows. - Unbound methods are gone for good. ClassObject.method returns an ordinary function object, instance.method still returns a bound method object. The API of bound methods is cleaned up, too. The im_class attribute is removed and im_func + im_self are renamed to __func__ and __self__. The factory PyMethod_New takes only func and instance as argument. - intobject.h is no longer included by Python.h. The remains were moved to longobject.h. It still exists to define several aliases from PyInt to PyLong functions. - Removed sys.maxint, use sys.maxsize instead. Extension Modules ----------------- - The `hotshot` profiler has been removed; use `cProfile` instead. Library ------- - When loading an external file using testfile(), the passed-in encoding argument was being ignored if __loader__ is defined and forcing the source to be UTF-8. - The methods `os.tmpnam()`, `os.tempnam()` and `os.tmpfile()` have been removed in favor of the tempfile module. - Removed the 'new' module. - Removed all types from the 'types' module that are easily accessible through builtins. What's New in Python 3.0a1? =========================== *Release date: 31-Aug-2007* Core and Builtins ----------------- - PEP 3131: Support non-ASCII identifiers. - PEP 3120: Change default encoding to UTF-8. - PEP 3123: Use proper C inheritance for PyObject. - Removed the __oct__ and __hex__ special methods and added a bin() builtin function. - PEP 3127: octal literals now start with "0o". Old-style octal literals are invalid. There are binary literals with a prefix of "0b". This also affects int(x, 0). - None, True, False are now keywords. - PEP 3119: isinstance() and issubclass() can be overridden. - Remove BaseException.message. - Remove tuple parameter unpacking (PEP 3113). - Remove the f_restricted attribute from frames. This naturally leads to the removal of PyEval_GetRestricted() and PyFrame_IsRestricted(). - PEP 3132 was accepted. That means that you can do ``a, *b = range(5)`` to assign 0 to a and [1, 2, 3, 4] to b. - range() now returns an iterator rather than a list. Floats are not allowed. xrange() is no longer defined. - Patch #1660500: hide iteration variable in list comps, add set comps and use common code to handle compilation of iterative expressions. - By default, != returns the opposite of ==, unless the latter returns NotImplemented. - Patch #1680961: sys.exitfunc has been removed and replaced with a private C-level API. - PEP 3115: new metaclasses: the metaclass is now specified as a keyword arg in the class statement, which can now use the full syntax of a parameter list. Also, the metaclass can implement a __prepare__ function which will be called to create the dictionary for the new class namespace. - The long-deprecated argument "pend" of PyFloat_FromString() has been removed. - 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__(). - Removed support for __members__ and __methods__. - Removed indexing/slicing on BaseException. - input() became raw_input(): the name input() now implements the functionality formerly known as raw_input(); the name raw_input() is no longer defined. - Classes listed in an 'except' clause must inherit from BaseException. - PEP 3106: dict.iterkeys(), .iteritems(), .itervalues() are now gone; and .keys(), .items(), .values() return dict views, which behave like sets. - PEP 3105: print is now a function. Also (not in the PEP) the 'softspace' attribute of files is now gone (since print() doesn't use it). A side effect of this change is that you can get incomplete output lines in interactive sessions: >>> print(42, end="") 42>>> We may be able to fix this after the I/O library rewrite. - PEP 3102: keyword-only arguments. - Int/Long unification is complete. The 'long' built-in type and literals with trailing 'L' or 'l' have been removed. Performance may be sub-optimal (haven't really benchmarked). - 'except E, V' must now be spelled as 'except E as V' and deletes V at the end of the except clause; V must be a simple name. - Added function annotations per PEP 3107. - Added nonlocal declaration from PEP 3104: >>> def f(x): ... def inc(): ... nonlocal x ... x += 1 ... return x ... return inc ... >>> inc = f(0) >>> inc() 1 >>> inc() 2 - Moved intern() to sys.intern(). - exec is now a function. - Renamed nb_nonzero to nb_bool and __nonzero__ to __bool__. - Classic classes are a thing of the past. All classes are new style. - Exceptions *must* derive from BaseException. - Integer division always returns a float. The -Q option is no more. All the following are gone: * PyNumber_Divide and PyNumber_InPlaceDivide * __div__, __rdiv__, and __idiv__ * nb_divide, nb_inplace_divide * operator.div, operator.idiv, operator.__div__, operator.__idiv__ (Only __truediv__ and __floordiv__ remain, not sure how to handle them if we want to re-use __div__ and friends. If we do, it will make it harder to write code for both 2.x and 3.x.) - 'as' and 'with' are keywords. - Absolute import is the default behavior for 'import foo' etc. - Removed support for syntax: backticks (ie, `x`), <>. - Removed these Python builtins: apply(), callable(), coerce(), execfile(), file(), reduce(), reload(). - Removed these Python methods: {}.has_key. - Removed these opcodes: BINARY_DIVIDE, INPLACE_DIVIDE, UNARY_CONVERT. - Remove C API support for restricted execution. - zip(), map() and filter() now return iterators, behaving like their itertools counterparts. This also affect map()'s behavior on sequences of unequal length -- it now stops after the shortest one is exhausted. - Additions: set literals, set comprehensions, ellipsis literal. - Added class decorators per PEP 3129. Extension Modules ----------------- - Removed the imageop module. Obsolete long with its unit tests becoming useless from the removal of rgbimg and imgfile. - Removed these attributes from the operator module: div, idiv, __div__, __idiv__, isCallable, sequenceIncludes. - Removed these attributes from the sys module: exc_clear(), exc_type, exc_value, exc_traceback. Library ------- - Removed the compiler package. Use of the _ast module and (an eventual) AST -> bytecode mechanism. - Removed these modules: audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2, rexec, sets, sha, stringold, strop, sunaudiodev, timing, xmllib. - Moved the toaiff module to Tools/Demos. - Removed obsolete IRIX modules: al/AL, cd/CD, cddb, cdplayer, cl/CL, DEVICE, ERRNO, FILE, fl/FL, flp, fm, GET, gl/GL, GLWS, IN, imgfile, IOCTL, jpeg, panel, panelparser, readcd, sgi, sv/SV, torgb, WAIT. - Removed obsolete functions: commands.getstatus(), os.popen*(). - Removed functions in the string module that are also string methods; Remove string.{letters, lowercase, uppercase}. - Removed support for long obsolete platforms: plat-aix3, plat-irix5. - Removed xmlrpclib.SlowParser. It was based on xmllib. - Patch #1680961: atexit has been reimplemented in C. - Add new codecs for UTF-32, UTF-32-LE and UTF-32-BE. Build ----- C API ----- - Removed these Python slots: __coerce__, __div__, __idiv__, __rdiv__. - Removed these C APIs: PyNumber_Coerce(), PyNumber_CoerceEx(), PyMember_Get, PyMember_Set. - Removed these C slots/fields: nb_divide, nb_inplace_divide. - Removed these macros: staticforward, statichere, PyArg_GetInt, PyArg_NoArgs, _PyObject_Del. - Removed these typedefs: intargfunc, intintargfunc, intobjargproc, intintobjargproc, getreadbufferproc, getwritebufferproc, getsegcountproc, getcharbufferproc, memberlist. Tests ----- - Removed test.testall as test.regrtest replaces it. Documentation ------------- Mac --- - The cfmfile module was removed. Platforms --------- - Support for BeOS and AtheOS was removed (according to PEP 11). - Support for RiscOS, Irix, Tru64 was removed (allegedly). Tools/Demos ----------- What's New in Python 2.5 release candidate 1? ============================================= *Release date: 17-AUG-2006* Core and builtins ----------------- - Unicode objects will no longer raise an exception when being compared equal or unequal to a string and a UnicodeDecodeError exception occurs, e.g. as result of a decoding failure. Instead, the equal (==) and unequal (!=) comparison operators will now issue a UnicodeWarning and interpret the two objects as unequal. The UnicodeWarning can be filtered as desired using the warning framework, e.g. silenced completely, turned into an exception, logged, etc. Note that compare operators other than equal and unequal will still raise UnicodeDecodeError exceptions as they've always done. - Fix segfault when doing string formatting on subclasses of long. - Fix bug related to __len__ functions using values > 2**32 on 64-bit machines with new-style classes. - Fix bug related to __len__ functions returning negative values with classic classes. - Patch #1538606, Fix __index__() clipping. There were some problems discovered with the API and how integers that didn't fit into Py_ssize_t were handled. This patch attempts to provide enough alternatives to effectively use __index__. - Bug #1536021: __hash__ may now return long int; the final hash value is obtained by invoking hash on the long int. - Bug #1536786: buffer comparison could emit a RuntimeWarning. - Bug #1535165: fixed a segfault in input() and raw_input() when sys.stdin is closed. - On Windows, the PyErr_Warn function is now exported from the Python dll again. - Bug #1191458: tracing over for loops now produces a line event on each iteration. Fixing this problem required changing the .pyc magic number. This means that .pyc files generated before 2.5c1 will be regenerated. - Bug #1333982: string/number constants were inappropriately stored in the byte code and co_consts even if they were not used, ie immediately popped off the stack. - Fixed a reference-counting problem in property(). Library ------- - Fix a bug in the ``compiler`` package that caused invalid code to be generated for generator expressions. - The distutils version has been changed to 2.5.0. The change to keep it programmatically in sync with the Python version running the code (introduced in 2.5b3) has been reverted. It will continue to be maintained manually as static string literal. - If the Python part of a ctypes callback function returns None, and this cannot be converted to the required C type, an exception is printed with PyErr_WriteUnraisable. Before this change, the C callback returned arbitrary values to the calling code. - The __repr__ method of a NULL ctypes.py_object() no longer raises an exception. - uuid.UUID now has a bytes_le attribute. This returns the UUID in little-endian byte order for Windows. In addition, uuid.py gained some workarounds for clocks with low resolution, to stop the code yielding duplicate UUIDs. - Patch #1540892: site.py Quitter() class attempts to close sys.stdin before raising SystemExit, allowing IDLE to honor quit() and exit(). - Bug #1224621: make tabnanny recognize IndentationErrors raised by tokenize. - Patch #1536071: trace.py should now find the full module name of a file correctly even on Windows. - logging's atexit hook now runs even if the rest of the module has already been cleaned up. - Bug #1112549, fix DoS attack on cgi.FieldStorage. - Bug #1531405, format_exception no longer raises an exception if str(exception) raised an exception. - Fix a bug in the ``compiler`` package that caused invalid code to be generated for nested functions. Extension Modules ----------------- - Patch #1511317: don't crash on invalid hostname (alias) info. - Patch #1535500: fix segfault in BZ2File.writelines and make sure it raises the correct exceptions. - Patch # 1536908: enable building ctypes on OpenBSD/AMD64. The '-no-stack-protector' compiler flag for OpenBSD has been removed. - Patch #1532975 was applied, which fixes Bug #1533481: ctypes now uses the _as_parameter_ attribute when objects are passed to foreign function calls. The ctypes version number was changed to 1.0.1. - Bug #1530559, struct.pack raises TypeError where it used to convert. Passing float arguments to struct.pack when integers are expected now triggers a DeprecationWarning. Tests ----- - test_socketserver should now work on cygwin and not fail sporadically on other platforms. - test_mailbox should now work on cygwin versions 2006-08-10 and later. - Bug #1535182: really test the xreadlines() method of bz2 objects. - test_threading now skips testing alternate thread stack sizes on platforms that don't support changing thread stack size. Documentation ------------- - Patch #1534922: unittest docs were corrected and enhanced. Build ----- - Bug #1535502, build _hashlib on Windows, and use masm assembler code in OpenSSL. - Bug #1534738, win32 debug version of _msi should be _msi_d.pyd. - Bug #1530448, ctypes build failure on Solaris 10 was fixed. C API ----- - New API for Unicode rich comparisons: PyUnicode_RichCompare() - Bug #1069160. Internal correctness changes were made to ``PyThreadState_SetAsyncExc()``. A test case was added, and the documentation was changed to state that the return value is always 1 (normal) or 0 (if the specified thread wasn't found). What's New in Python 2.5 beta 3? ================================ *Release date: 03-AUG-2006* Core and builtins ----------------- - _PyWeakref_GetWeakrefCount() now returns a Py_ssize_t; it previously returned a long (see PEP 353). - Bug #1515471: string.replace() accepts character buffers again. - Add PyErr_WarnEx() so C code can pass the stacklevel to warnings.warn(). This provides the proper warning for struct.pack(). PyErr_Warn() is now deprecated in favor of PyErr_WarnEx(). - Patch #1531113: Fix augmented assignment with yield expressions. Also fix a SystemError when trying to assign to yield expressions. - Bug #1529871: The speed enhancement patch #921466 broke Python's compliance with PEP 302. This was fixed by adding an ``imp.NullImporter`` type that is used in ``sys.path_importer_cache`` to cache non-directory paths and avoid excessive filesystem operations during imports. - Bug #1521947: When checking for overflow, ``PyOS_strtol()`` used some operations on signed longs that are formally undefined by C. Unfortunately, at least one compiler now cares about that, so complicated the code to make that compiler happy again. - Bug #1524310: Properly report errors from FindNextFile in os.listdir. - Patch #1232023: Stop including current directory in search path on Windows. - Fix some potential crashes found with failmalloc. - Fix warnings reported by Klocwork's static analysis tool. - Bug #1512814, Fix incorrect lineno's when code within a function had more than 255 blank lines. - Patch #1521179: Python now accepts the standard options ``--help`` and ``--version`` as well as ``/?`` on Windows. - Bug #1520864: unpacking singleton tuples in a 'for' loop (for x, in) works again. Fixing this problem required changing the .pyc magic number. This means that .pyc files generated before 2.5b3 will be regenerated. - Bug #1524317: Compiling Python ``--without-threads`` failed. The Python core compiles again, and, in a build without threads, the new ``sys._current_frames()`` returns a dictionary with one entry, mapping the faux "thread id" 0 to the current frame. - Bug #1525447: build on MacOS X on a case-sensitive filesystem. Library ------- - Fix #1693149. Now you can pass several modules separated by comma to trace.py in the same --ignore-module option. - Correction of patch #1455898: In the mbcs decoder, set final=False for stream decoder, but final=True for the decode function. - os.urandom no longer masks unrelated exceptions like SystemExit or KeyboardInterrupt. - Bug #1525866: Don't copy directory stat times in shutil.copytree on Windows - Bug #1002398: The documentation for os.path.sameopenfile now correctly refers to file descriptors, not file objects. - The renaming of the xml package to xmlcore, and the import hackery done to make it appear at both names, has been removed. Bug #1511497, #1513611, and probably others. - Bug #1441397: The compiler module now recognizes module and function docstrings correctly as it did in Python 2.4. - Bug #1529297: The rewrite of doctest for Python 2.4 unintentionally lost that tests are sorted by name before being run. This rarely matters for well-written tests, but can create baffling symptoms if side effects from one test to the next affect outcomes. ``DocTestFinder`` has been changed to sort the list of tests it returns. - The distutils version has been changed to 2.5.0, and is now kept in sync with sys.version_info[:3]. - Bug #978833: Really close underlying socket in _socketobject.close. - Bug #1459963: urllib and urllib2 now normalize HTTP header names with title(). - Patch #1525766: In pkgutil.walk_packages, correctly pass the onerror callback to recursive calls and call it with the failing package name. - Bug #1525817: Don't truncate short lines in IDLE's tool tips. - Patch #1515343: Fix printing of deprecated string exceptions with a value in the traceback module. - Resync optparse with Optik 1.5.3: minor tweaks for/to tests. - Patch #1524429: Use repr() instead of backticks in Tkinter again. - Bug #1520914: Change time.strftime() to accept a zero for any position in its argument tuple. For arguments where zero is illegal, the value is forced to the minimum value that is correct. This is to support an undocumented but common way people used to fill in inconsequential information in the time tuple pre-2.4. - Patch #1220874: Update the binhex module for Mach-O. - The email package has improved RFC 2231 support, specifically for recognizing the difference between encoded (name*0*=<blah>) and non-encoded (name*0=<blah>) parameter continuations. This may change the types of values returned from email.message.Message.get_param() and friends. Specifically in some cases where non-encoded continuations were used, get_param() used to return a 3-tuple of (None, None, string) whereas now it will just return the string (since non-encoded continuations don't have charset and language parts). Also, whereas % values were decoded in all parameter continuations, they are now only decoded in encoded parameter parts. - Bug #1517990: IDLE keybindings on MacOS X now work correctly - Bug #1517996: IDLE now longer shows the default Tk menu when a path browser, class browser or debugger is the frontmost window on MacOS X - Patch #1520294: Support for getset and member descriptors in types.py, inspect.py, and pydoc.py. Specifically, this allows for querying the type of an object against these built-in types and more importantly, for getting their docstrings printed in the interactive interpreter's help() function. Extension Modules ----------------- - Patch #1519025 and bug #926423: If a KeyboardInterrupt occurs during a socket operation on a socket with a timeout, the exception will be caught correctly. Previously, the exception was not caught. - Patch #1529514: The _ctypes extension is now compiled on more openbsd target platforms. - The ``__reduce__()`` method of the new ``collections.defaultdict`` had a memory leak, affecting pickles and deep copies. - Bug #1471938: Fix curses module build problem on Solaris 8; patch by Paul Eggert. - Patch #1448199: Release interpreter lock in _winreg.ConnectRegistry. - Patch #1521817: Index range checking on ctypes arrays containing exactly one element enabled again. This allows iterating over these arrays, without the need to check the array size before. - Bug #1521375: When the code in ctypes.util.find_library was run with root privileges, it could overwrite or delete /dev/null in certain cases; this is now fixed. - Bug #1467450: On Mac OS X 10.3, RTLD_GLOBAL is now used as the default mode for loading shared libraries in ctypes. - Because of a misspelled preprocessor symbol, ctypes was always compiled without thread support; this is now fixed. - pybsddb Bug #1527939: bsddb module DBEnv dbremove and dbrename methods now allow their database parameter to be None as the sleepycat API allows. - Bug #1526460: Fix socketmodule compile on NetBSD as it has a different bluetooth API compared with Linux and FreeBSD. Tests ----- - Bug #1501330: Change test_ossaudiodev to be much more tolerant in terms of how long the test file should take to play. Now accepts taking 2.93 secs (exact time) +/- 10% instead of the hard-coded 3.1 sec. - Patch #1529686: The standard tests ``test_defaultdict``, ``test_iterlen``, ``test_uuid`` and ``test_email_codecs`` didn't actually run any tests when run via ``regrtest.py``. Now they do. Build ----- - Bug #1439538: Drop usage of test -e in configure as it is not portable. Mac --- - PythonLauncher now works correctly when the path to the script contains characters that are treated specially by the shell (such as quotes). - Bug #1527397: PythonLauncher now launches scripts with the working directory set to the directory that contains the script instead of the user home directory. That latter was an implementation accident and not what users expect. What's New in Python 2.5 beta 2? ================================ *Release date: 11-JUL-2006* Core and builtins ----------------- - Bug #1441486: The literal representation of -(sys.maxint - 1) again evaluates to an int object, not a long. - Bug #1501934: The scope of global variables that are locally assigned using augmented assignment is now correctly determined. - Bug #927248: Recursive method-wrapper objects can now safely be released. - Bug #1417699: Reject locale-specific decimal point in float() and atof(). - Bug #1511381: codec_getstreamcodec() in codec.c is corrected to omit a default "error" argument for NULL pointer. This allows the parser to take a codec from cjkcodecs again. - Bug #1519018: 'as' is now validated properly in import statements. - On 64 bit systems, int literals that use less than 64 bits are now ints rather than longs. - Bug #1512814, Fix incorrect lineno's when code at module scope started after line 256. - New function ``sys._current_frames()`` returns a dict mapping thread id to topmost thread stack frame. This is for expert use, and is especially useful for debugging application deadlocks. The functionality was previously available in Fazal Majid's ``threadframe`` extension module, but it wasn't possible to do this in a wholly threadsafe way from an extension. Library ------- - Bug #1257728: Mention Cygwin in distutils error message about a missing VS 2003. - Patch #1519566: Update turtle demo, make begin_fill idempotent. - Bug #1508010: msvccompiler now requires the DISTUTILS_USE_SDK environment variable to be set in order to the SDK environment for finding the compiler, include files, etc. - Bug #1515998: Properly generate logical ids for files in bdist_msi. - warnings.py now ignores ImportWarning by default - string.Template() now correctly handles tuple-values. Previously, multi-value tuples would raise an exception and single-value tuples would be treated as the value they contain, instead. - Bug #822974: Honor timeout in telnetlib.{expect,read_until} even if some data are received. - Bug #1267547: Put proper recursive setup.py call into the spec file generated by bdist_rpm. - Bug #1514693: Update turtle's heading when switching between degrees and radians. - Reimplement turtle.circle using a polyline, to allow correct filling of arcs. - Bug #1514703: Only setup canvas window in turtle when the canvas is created. - Bug #1513223: .close() of a _socketobj now releases the underlying socket again, which then gets closed as it becomes unreferenced. - Bug #1504333: Make sgmllib support angle brackets in quoted attribute values. - Bug #853506: Fix IPv6 address parsing in unquoted attributes in sgmllib ('[' and ']' were not accepted). - Fix a bug in the turtle module's end_fill function. - Bug #1510580: The 'warnings' module improperly required that a Warning category be either a types.ClassType and a subclass of Warning. The proper check is just that it is a subclass with Warning as the documentation states. - The compiler module now correctly compiles the new try-except-finally statement (bug #1509132). - The wsgiref package is now installed properly on Unix. - A bug was fixed in logging.config.fileConfig() which caused a crash on shutdown when fileConfig() was called multiple times. - The sqlite3 module did cut off data from the SQLite database at the first null character before sending it to a custom converter. This has been fixed now. Extension Modules ----------------- - #1494314: Fix a regression with high-numbered sockets in 2.4.3. This means that select() on sockets > FD_SETSIZE (typically 1024) work again. The patch makes sockets use poll() internally where available. - Assigning None to pointer type fields in ctypes structures possible overwrote the wrong fields, this is fixed now. - Fixed a segfault in _ctypes when ctypes.wintypes were imported on non-Windows platforms. - Bug #1518190: The ctypes.c_void_p constructor now accepts any integer or long, without range checking. - Patch #1517790: It is now possible to use custom objects in the ctypes foreign function argtypes sequence as long as they provide a from_param method, no longer is it required that the object is a ctypes type. - The '_ctypes' extension module now works when Python is configured with the --without-threads option. - Bug #1513646: os.access on Windows now correctly determines write access, again. - Bug #1512695: cPickle.loads could crash if it was interrupted with a KeyboardInterrupt. - Bug #1296433: parsing XML with a non-default encoding and a CharacterDataHandler could crash the interpreter in pyexpat. - Patch #1516912: improve Modules support for OpenVMS. Build ----- - Automate Windows build process for the Win64 SSL module. - 'configure' now detects the zlib library the same way as distutils. Previously, the slight difference could cause compilation errors of the 'zlib' module on systems with more than one version of zlib. - The MSI compileall step was fixed to also support a TARGETDIR with spaces in it. - Bug #1517388: sqlite3.dll is now installed on Windows independent of Tcl/Tk. - Bug #1513032: 'make install' failed on FreeBSD 5.3 due to lib-old trying to be installed even though it's empty. Tests ----- - Call os.waitpid() at the end of tests that spawn child processes in order to minimize resources (zombies). Documentation ------------- - Cover ImportWarning, PendingDeprecationWarning and simplefilter() in the documentation for the warnings module. - Patch #1509163: MS Toolkit Compiler no longer available. - Patch #1504046: Add documentation for xml.etree. What's New in Python 2.5 beta 1? ================================ *Release date: 20-JUN-2006* Core and builtins ----------------- - Patch #1507676: Error messages returned by invalid abstract object operations (such as iterating over an integer) have been improved and now include the type of the offending object to help with debugging. - Bug #992017: A classic class that defined a __coerce__() method that returned its arguments swapped would infinitely recurse and segfault the interpreter. - Fix the socket tests so they can be run concurrently. - Removed 5 integers from C frame objects (PyFrameObject). f_nlocals, f_ncells, f_nfreevars, f_stack_size, f_restricted. - Bug #532646: object.__call__() will continue looking for the __call__ attribute on objects until one without one is found. This leads to recursion when you take a class and set its __call__ attribute to an instance of the class. Originally fixed for classic classes, but this fix is for new-style. Removes the infinite_rec_3 crasher. - The string and unicode methods startswith() and endswith() now accept a tuple of prefixes/suffixes to look for. Implements RFE #1491485. - Buffer objects, at the C level, never used the char buffer implementation even when the char buffer for the wrapped object was explicitly requested (originally returned the read or write buffer). Now a TypeError is raised if the char buffer is not present but is requested. - Patch #1346214: Statements like "if 0: suite" are now again optimized away like they were in Python 2.4. - Builtin exceptions are now full-blown new-style classes instead of instances pretending to be classes, which speeds up exception handling by about 80% in comparison to 2.5a2. - Patch #1494554: Update unicodedata.numeric and unicode.isnumeric to Unicode 4.1. - Patch #921466: sys.path_importer_cache is now used to cache valid and invalid file paths for the built-in import machinery which leads to fewer open calls on startup. - Patch #1442927: ``long(str, base)`` is now up to 6x faster for non-power- of-2 bases. The largest speedup is for inputs with about 1000 decimal digits. Conversion from non-power-of-2 bases remains quadratic-time in the number of input digits (it was and remains linear-time for bases 2, 4, 8, 16 and 32). - Bug #1334662: ``int(string, base)`` could deliver a wrong answer when ``base`` was not 2, 4, 8, 10, 16 or 32, and ``string`` represented an integer close to ``sys.maxint``. This was repaired by patch #1335972, which also gives a nice speedup. - Patch #1337051: reduced size of frame objects. - PyErr_NewException now accepts a tuple of base classes as its "base" parameter. - Patch #876206: function call speedup by retaining allocated frame objects. - Bug #1462152: file() now checks more thoroughly for invalid mode strings and removes a possible "U" before passing the mode to the C library function. - Patch #1488312, Fix memory alignment problem on SPARC in unicode - Bug #1487966: Fix SystemError with conditional expression in assignment - WindowsError now has two error code attributes: errno, which carries the error values from errno.h, and winerror, which carries the error values from winerror.h. Previous versions put the winerror.h values (from GetLastError()) into the errno attribute. - Patch #1475845: Raise IndentationError for unexpected indent. - Patch #1479181: split open() and file() from being aliases for each other. - Patch #1497053 & bug #1275608: Exceptions occurring in ``__eq__()`` methods were always silently ignored by dictionaries when comparing keys. They are now passed through (except when using the C API function ``PyDict_GetItem()``, whose semantics did not change). - Bug #1456209: In some obscure cases it was possible for a class with a custom ``__eq__()`` method to confuse dict internals when class instances were used as a dict's keys and the ``__eq__()`` method mutated the dict. No, you don't have any code that did this ;-) Extension Modules ----------------- - Bug #1295808: expat symbols should be namespaced in pyexpat - Patch #1462338: Upgrade pyexpat to expat 2.0.0 - Change binascii.hexlify to accept a read-only buffer instead of only a char buffer and actually follow its documentation. - Fixed a potentially invalid memory access of CJKCodecs' shift-jis decoder. - Patch #1478788 (modified version): The functional extension module has been renamed to _functools and a functools Python wrapper module added. This provides a home for additional function related utilities that are not specifically about functional programming. See PEP 309. - Patch #1493701: performance enhancements for struct module. - Patch #1490224: time.altzone is now set correctly on Cygwin. - Patch #1435422: zlib's compress and decompress objects now have a copy() method. - Patch #1454481: thread stack size is now tunable at runtime for thread enabled builds on Windows and systems with Posix threads support. - On Win32, os.listdir now supports arbitrarily-long Unicode path names (up to the system limit of 32K characters). - Use Win32 API to implement os.{access,chdir,chmod,mkdir,remove,rename,rmdir,utime}. As a result, these functions now raise WindowsError instead of OSError. - ``time.clock()`` on Win64 should use the high-performance Windows ``QueryPerformanceCounter()`` now (as was already the case on 32-bit Windows platforms). - Calling Tk_Init twice is refused if the first call failed as that may deadlock. - bsddb: added the DB_ARCH_REMOVE flag and fixed db.DBEnv.log_archive() to accept it without potentially using an uninitialized pointer. - bsddb: added support for the DBEnv.log_stat() and DBEnv.lsn_reset() methods assuming BerkeleyDB >= 4.0 and 4.4 respectively. [pybsddb project SF patch numbers 1494885 and 1494902] - bsddb: added an interface for the BerkeleyDB >= 4.3 DBSequence class. [pybsddb project SF patch number 1466734] - bsddb: fix DBCursor.pget() bug with keyword argument names when no data parameter is supplied. [SF pybsddb bug #1477863] - bsddb: the __len__ method of a DB object has been fixed to return correct results. It could previously incorrectly return 0 in some cases. Fixes SF bug 1493322 (pybsddb bug 1184012). - bsddb: the bsddb.dbtables Modify method now raises the proper error and aborts the db transaction safely when a modifier callback fails. Fixes SF python patch/bug #1408584. - bsddb: multithreaded DB access using the simple bsddb module interface now works reliably. It has been updated to use automatic BerkeleyDB deadlock detection and the bsddb.dbutils.DeadlockWrap wrapper to retry database calls that would previously deadlock. [SF python bug #775414] - Patch #1446489: add support for the ZIP64 extensions to zipfile. - Patch #1506645: add Python wrappers for the curses functions is_term_resized, resize_term and resizeterm. Library ------- - Patch #815924: Restore ability to pass type= and icon= in tkMessageBox functions. - Patch #812986: Update turtle output even if not tracing. - Patch #1494750: Destroy master after deleting children in Tkinter.BaseWidget. - Patch #1096231: Add ``default`` argument to Tkinter.Wm.wm_iconbitmap. - Patch #763580: Add name and value arguments to Tkinter variable classes. - Bug #1117556: SimpleHTTPServer now tries to find and use the system's mime.types file for determining MIME types. - Bug #1339007: Shelf objects now don't raise an exception in their __del__ method when initialization failed. - Patch #1455898: The MBCS codec now supports the incremental mode for double-byte encodings. - ``difflib``'s ``SequenceMatcher.get_matching_blocks()`` was changed to guarantee that adjacent triples in the return list always describe non-adjacent blocks. Previously, a pair of matching blocks could end up being described by multiple adjacent triples that formed a partition of the matching pair. - Bug #1498146: fix optparse to handle Unicode strings in option help, description, and epilog. - Bug #1366250: minor optparse documentation error. - Bug #1361643: fix textwrap.dedent() so it handles tabs appropriately; clarify docs. - The wsgiref package has been added to the standard library. - The functions update_wrapper() and wraps() have been added to the functools module. These make it easier to copy relevant metadata from the original function when writing wrapper functions. - The optional ``isprivate`` argument to ``doctest.testmod()``, and the ``doctest.is_private()`` function, both deprecated in 2.4, were removed. - Patch #1359618: Speed up charmap encoder by using a trie structure for lookup. - The functions in the ``pprint`` module now sort dictionaries by key before computing the display. Before 2.5, ``pprint`` sorted a dictionary if and only if its display required more than one line, although that wasn't documented. The new behavior increases predictability; e.g., using ``pprint.pprint(a_dict)`` in a doctest is now reliable. - Patch #1497027: try HTTP digest auth before basic auth in urllib2 (thanks for J. J. Lee). - Patch #1496206: improve urllib2 handling of passwords with respect to default HTTP and HTTPS ports. - Patch #1080727: add "encoding" parameter to doctest.DocFileSuite. - Patch #1281707: speed up gzip.readline. - Patch #1180296: Two new functions were added to the locale module: format_string() to get the effect of "format % items" but locale-aware, and currency() to format a monetary number with currency sign. - Patch #1486962: Several bugs in the turtle Tk demo module were fixed and several features added, such as speed and geometry control. - Patch #1488881: add support for external file objects in bz2 compressed tarfiles. - Patch #721464: pdb.Pdb instances can now be given explicit stdin and stdout arguments, making it possible to redirect input and output for remote debugging. - Patch #1484695: Update the tarfile module to version 0.8. This fixes a couple of issues, notably handling of long file names using the GNU LONGNAME extension. - Patch #1478292. ``doctest.register_optionflag(name)`` shouldn't create a new flag when ``name`` is already the name of an option flag. - Bug #1385040: don't allow "def foo(a=1, b): pass" in the compiler package. - Patch #1472854: make the rlcompleter.Completer class usable on non- UNIX platforms. - Patch #1470846: fix urllib2 ProxyBasicAuthHandler. - Bug #1472827: correctly escape newlines and tabs in attribute values in the saxutils.XMLGenerator class. Build ----- - Bug #1502728: Correctly link against librt library on HP-UX. - OpenBSD 3.9 is supported now. - Patch #1492356: Port to Windows CE. - Bug/Patch #1481770: Use .so extension for shared libraries on HP-UX for ia64. - Patch #1471883: Add --enable-universalsdk. C API ----- Tests ----- Tools ----- Documentation ------------- What's New in Python 2.5 alpha 2? ================================= *Release date: 27-APR-2006* Core and builtins ----------------- - Bug #1465834: 'bdist_wininst preinstall script support' was fixed by converting these apis from macros into exported functions again: PyParser_SimpleParseFile PyParser_SimpleParseString PyRun_AnyFile PyRun_AnyFileEx PyRun_AnyFileFlags PyRun_File PyRun_FileEx PyRun_FileFlags PyRun_InteractiveLoop PyRun_InteractiveOne PyRun_SimpleFile PyRun_SimpleFileEx PyRun_SimpleString PyRun_String Py_CompileString - Under COUNT_ALLOCS, types are not necessarily immortal anymore. - All uses of PyStructSequence_InitType have been changed to initialize the type objects only once, even if the interpreter is initialized multiple times. - Bug #1454485, array.array('u') could crash the interpreter. This was due to PyArgs_ParseTuple(args, 'u#', ...) trying to convert buffers (strings) to unicode when it didn't make sense. 'u#' now requires a unicode string. - Py_UNICODE is unsigned. It was always documented as unsigned, but due to a bug had a signed value in previous versions. - Patch #837242: ``id()`` of any Python object always gives a positive number now, which might be a long integer. ``PyLong_FromVoidPtr`` and ``PyLong_AsVoidPtr`` have been changed accordingly. Note that it has never been correct to implement a ``__hash()__`` method that returns the ``id()`` of an object: def __hash__(self): return id(self) # WRONG because a hash result must be a (short) Python int but it was always possible for ``id()`` to return a Python long. However, because ``id()`` could return negative values before, on a 32-bit box an ``id()`` result was always usable as a hash value before this patch. That's no longer necessarily so. - Python on OS X 10.3 and above now uses dlopen() (via dynload_shlib.c) to load extension modules and now provides the dl module. As a result, sys.setdlopenflags() now works correctly on these systems. (SF patch #1454844) - Patch #1463867: enhanced garbage collection to allow cleanup of cycles involving generators that have paused outside of any ``try`` or ``with`` blocks. (In 2.5a1, a paused generator that was part of a reference cycle could not be garbage collected, regardless of whether it was paused in a ``try`` or ``with`` block.) Extension Modules ----------------- - Patch #1191065: Fix preprocessor problems on systems where recvfrom is a macro. - Bug #1467952: os.listdir() now correctly raises an error if readdir() fails with an error condition. - Fixed bsddb.db.DBError derived exceptions so they can be unpickled. - Bug #1117761: bsddb.*open() no longer raises an exception when using the cachesize parameter. - Bug #1149413: bsddb.*open() no longer raises an exception when using a temporary db (file=None) with the 'n' flag to truncate on open. - Bug #1332852: bsddb module minimum BerkeleyDB version raised to 3.3 as older versions cause excessive test failures. - Patch #1062014: AF_UNIX sockets under Linux have a special abstract namespace that is now fully supported. Library ------- - Bug #1223937: subprocess.CalledProcessError reports the exit status of the process using the returncode attribute, instead of abusing errno. - Patch #1475231: ``doctest`` has a new ``SKIP`` option, which causes a doctest to be skipped (the code is not run, and the expected output or exception is ignored). - Fixed contextlib.nested to cope with exceptions being raised and caught inside exit handlers. - Updated optparse module to Optik 1.5.1 (allow numeric constants in hex, octal, or binary; add ``append_const`` action; keep going if gettext cannot be imported; added ``OptionParser.destroy()`` method; added ``epilog`` for better help generation). - Bug #1473760: ``tempfile.TemporaryFile()`` could hang on Windows, when called from a thread spawned as a side effect of importing a module. - The pydoc module now supports documenting packages contained in .zip or .egg files. - The pkgutil module now has several new utility functions, such as ``walk_packages()`` to support working with packages that are either in the filesystem or zip files. - The mailbox module can now modify and delete messages from mailboxes, in addition to simply reading them. Thanks to Gregory K. Johnson for writing the code, and to the 2005 Google Summer of Code for funding his work. - The ``__del__`` method of class ``local`` in module ``_threading_local`` returned before accomplishing any of its intended cleanup. - Patch #790710: Add breakpoint command lists in pdb. - Patch #1063914: Add Tkinter.Misc.clipboard_get(). - Patch #1191700: Adjust column alignment in bdb breakpoint lists. - SimpleXMLRPCServer relied on the fcntl module, which is unavailable on Windows. Bug #1469163. - The warnings, linecache, inspect, traceback, site, and doctest modules were updated to work correctly with modules imported from zipfiles or via other PEP 302 __loader__ objects. - Patch #1467770: Reduce usage of subprocess._active to processes which the application hasn't waited on. - Patch #1462222: Fix Tix.Grid. - Fix exception when doing glob.glob('anything*/') - The pstats.Stats class accepts an optional stream keyword argument to direct output to an alternate file-like object. Build ----- - The Makefile now has a reindent target, which runs reindent.py on the library. - Patch #1470875: Building Python with MS Free Compiler - Patch #1161914: Add a python-config script. - Patch #1324762:Remove ccpython.cc; replace --with-cxx with --with-cxx-main. Link with C++ compiler only if --with-cxx-main was specified. (Can be overridden by explicitly setting LINKCC.) Decouple CXX from --with-cxx-main, see description in README. - Patch #1429775: Link extension modules with the shared libpython. - Fixed a libffi build problem on MIPS systems. - ``PyString_FromFormat``, ``PyErr_Format``, and ``PyString_FromFormatV`` now accept formats "%u" for unsigned ints, "%lu" for unsigned longs, and "%zu" for unsigned integers of type ``size_t``. Tests ----- - test_contextlib now checks contextlib.nested can cope with exceptions being raised and caught inside exit handlers. - test_cmd_line now checks operation of the -m and -c command switches - The test_contextlib test in 2.5a1 wasn't actually run unless you ran it separately and by hand. It also wasn't cleaning up its changes to the current Decimal context. - regrtest.py now has a -M option to run tests that test the new limits of containers, on 64-bit architectures. Running these tests is only sensible on 64-bit machines with more than two gigabytes of memory. The argument passed is the maximum amount of memory for the tests to use. Tools ----- - Added the Python benchmark suite pybench to the Tools/ directory; contributed by Marc-Andre Lemburg. Documentation ------------- - Patch #1473132: Improve docs for ``tp_clear`` and ``tp_traverse``. - PEP 343: Added Context Types section to the library reference and attempted to bring other PEP 343 related documentation into line with the implementation and/or python-dev discussions. - Bug #1337990: clarified that ``doctest`` does not support examples requiring both expected output and an exception. What's New in Python 2.5 alpha 1? ================================= *Release date: 05-APR-2006* Core and builtins ----------------- - PEP 338: -m command line switch now delegates to runpy.run_module allowing it to support modules in packages and zipfiles - On Windows, .DLL is not an accepted file name extension for extension modules anymore; extensions are only found if they end in .PYD. - Bug #1421664: sys.stderr.encoding is now set to the same value as sys.stdout.encoding. - __import__ accepts keyword arguments. - Patch #1460496: round() now accepts keyword arguments. - Fixed bug #1459029 - unicode reprs were double-escaped. - Patch #1396919: The system scope threads are reenabled on FreeBSD 5.4 and later versions. - Bug #1115379: Compiling a Unicode string with an encoding declaration now gives a SyntaxError. - Previously, Python code had no easy way to access the contents of a cell object. Now, a ``cell_contents`` attribute has been added (closes patch #1170323). - Patch #1123430: Python's small-object allocator now returns an arena to the system ``free()`` when all memory within an arena becomes unused again. Prior to Python 2.5, arenas (256KB chunks of memory) were never freed. Some applications will see a drop in virtual memory size now, especially long-running applications that, from time to time, temporarily use a large number of small objects. Note that when Python returns an arena to the platform C's ``free()``, there's no guarantee that the platform C library will in turn return that memory to the operating system. The effect of the patch is to stop making that impossible, and in tests it appears to be effective at least on Microsoft C and gcc-based systems. Thanks to Evan Jones for hard work and patience. - Patch #1434038: property() now uses the getter's docstring if there is no "doc" argument given. This makes it possible to legitimately use property() as a decorator to produce a read-only property. - PEP 357, patch 1436368: add an __index__ method to int/long and a matching nb_index slot to the PyNumberMethods struct. The slot is consulted instead of requiring an int or long in slicing and a few other contexts, enabling other objects (e.g. Numeric Python's integers) to be used as slice indices. - Fixed various bugs reported by Coverity's Prevent tool. - PEP 352, patch #1104669: Make exceptions new-style objects. Introduced the new exception base class, BaseException, which has a new message attribute. KeyboardInterrupt and SystemExit to directly inherit from BaseException now. Raising a string exception now raises a DeprecationWarning. - Patch #1438387, PEP 328: relative and absolute imports. Imports can now be explicitly relative, using 'from .module import name' to mean 'from the same package as this module is in. Imports without dots still default to the old relative-then-absolute, unless 'from __future__ import absolute_import' is used. - Properly check if 'warnings' raises an exception (usually when a filter set to "error" is triggered) when raising a warning for raising string exceptions. - CO_GENERATOR_ALLOWED is no longer defined. This behavior is the default. The name was removed from Include/code.h. - PEP 308: conditional expressions were added: (x if cond else y). - Patch 1433928: - The copy module now "copies" function objects (as atomic objects). - dict.__getitem__ now looks for a __missing__ hook before raising KeyError. - PEP 343: with statement implemented. Needs ``from __future__ import with_statement``. Use of 'with' as a variable will generate a warning. Use of 'as' as a variable will also generate a warning (unless it's part of an import statement). The following objects have __context__ methods: - The built-in file type. - The thread.LockType type. - The following types defined by the threading module: Lock, RLock, Condition, Semaphore, BoundedSemaphore. - The decimal.Context class. - Fix the encodings package codec search function to only search inside its own package. Fixes problem reported in patch #1433198. Note: Codec packages should implement and register their own codec search function. PEP 100 has the details. - PEP 353: Using ``Py_ssize_t`` as the index type. - ``PYMALLOC_DEBUG`` builds now add ``4*sizeof(size_t)`` bytes of debugging info to each allocated block, since the ``Py_ssize_t`` changes (PEP 353) now allow Python to make use of memory blocks exceeding 2**32 bytes for some purposes on 64-bit boxes. A ``PYMALLOC_DEBUG`` build was limited to 4-byte allocations before. - Patch #1400181, fix unicode string formatting to not use the locale. This is how string objects work. u'%f' could use , instead of . for the decimal point. Now both strings and unicode always use periods. - Bug #1244610, #1392915, fix build problem on OpenBSD 3.7 and 3.8. configure would break checking curses.h. - Bug #959576: The pwd module is now built in. This allows Python to be built on UNIX platforms without $HOME set. - Bug #1072182, fix some potential problems if characters are signed. - Bug #889500, fix line number on SyntaxWarning for global declarations. - Bug #1378022, UTF-8 files with a leading BOM crashed the interpreter. - Support for converting hex strings to floats no longer works. This was not portable. float('0x3') now raises a ValueError. - Patch #1382163: Expose Subversion revision number to Python. New C API function Py_GetBuildNumber(). New attribute sys.subversion. Build number is now displayed in interactive prompt banner. - Implementation of PEP 341 - Unification of try/except and try/finally. "except" clauses can now be written together with a "finally" clause in one try statement instead of two nested ones. Patch #1355913. - Bug #1379994: Builtin unicode_escape and raw_unicode_escape codec now encodes backslash correctly. - Patch #1350409: Work around signal handling bug in Visual Studio 2005. - Bug #1281408: Py_BuildValue now works correctly even with unsigned longs and long longs. - SF Bug #1350188, "setdlopenflags" leads to crash upon "import" It was possible for dlerror() to return a NULL pointer, so it will now use a default error message in this case. - Replaced most Unicode charmap codecs with new ones using the new Unicode translate string feature in the built-in charmap codec; the codecs were created from the mapping tables available at ftp.unicode.org and contain a few updates (e.g. the Mac OS encodings now include a mapping for the Apple logo) - Added a few more codecs for Mac OS encodings - Sped up some Unicode operations. - A new AST parser implementation was completed. The abstract syntax tree is available for read-only (non-compile) access to Python code; an _ast module was added. - SF bug #1167751: fix incorrect code being produced for generator expressions. The following code now raises a SyntaxError: foo(a = i for i in range(10)) - SF Bug #976608: fix SystemError when mtime of an imported file is -1. - SF Bug #887946: fix segfault when redirecting stdin from a directory. Provide a warning when a directory is passed on the command line. - Fix segfault with invalid coding. - SF bug #772896: unknown encoding results in MemoryError. - All iterators now have a Boolean value of True. Formerly, some iterators supported a __len__() method which evaluated to False when the iterator was empty. - On 64-bit platforms, when __len__() returns a value that cannot be represented as a C int, raise OverflowError. - test__locale is skipped on OS X < 10.4 (only partial locale support is present). - SF bug #893549: parsing keyword arguments was broken with a few format codes. - Changes donated by Elemental Security to make it work on AIX 5.3 with IBM's 64-bit compiler (SF patch #1284289). This also closes SF bug #105470: test_pwd fails on 64bit system (Opteron). - Changes donated by Elemental Security to make it work on HP-UX 11 on Itanium2 with HP's 64-bit compiler (SF patch #1225212). - Disallow keyword arguments for type constructors that don't use them (fixes bug #1119418). - Forward UnicodeDecodeError into SyntaxError for source encoding errors. - SF bug #900092: When tracing (e.g. for hotshot), restore 'return' events for exceptions that cause a function to exit. - The implementation of set() and frozenset() was revised to use its own internal data structure. Memory consumption is reduced by 1/3 and there are modest speed-ups as well. The API is unchanged. - SF bug #1238681: freed pointer is used in longobject.c:long_pow(). - SF bug #1229429: PyObject_CallMethod failed to decrement some reference counts in some error exit cases. - SF bug #1185883: Python's small-object memory allocator took over a block managed by the platform C library whenever a realloc specified a small new size. However, there's no portable way to know then how much of the address space following the pointer is valid, so there's no portable way to copy data from the C-managed block into Python's small-object space without risking a memory fault. Python's small-object realloc now leaves such blocks under the control of the platform C realloc. - SF bug #1232517: An overflow error was not detected properly when attempting to convert a large float to an int in os.utime(). - SF bug #1224347: hex longs now print with lowercase letters just like their int counterparts. - SF bug #1163563: the original fix for bug #1010677 ("thread Module Breaks PyGILState_Ensure()") broke badly in the case of multiple interpreter states; back out that fix and do a better job (see http://mail.python.org/pipermail/python-dev/2005-June/054258.html for a longer write-up of the problem). - SF patch #1180995: marshal now uses a binary format by default when serializing floats. - SF patch #1181301: on platforms that appear to use IEEE 754 floats, the routines that promise to produce IEEE 754 binary representations of floats now simply copy bytes around. - bug #967182: disallow opening files with 'wU' or 'aU' as specified by PEP 278. - patch #1109424: int, long, float, complex, and unicode now check for the proper magic slot for type conversions when subclassed. Previously the magic slot was ignored during conversion. Semantics now match the way subclasses of str always behaved. int/long/float, conversion of an instance to the base class has been moved to the proper nb_* magic slot and out of PyNumber_*(). Thanks Walter Dörwald. - Descriptors defined in C with a PyGetSetDef structure, where the setter is NULL, now raise an AttributeError when attempting to set or delete the attribute. Previously a TypeError was raised, but this was inconsistent with the equivalent pure-Python implementation. - It is now safe to call PyGILState_Release() before PyEval_InitThreads() (note that if there is reason to believe there are multiple threads around you still must call PyEval_InitThreads() before using the Python API; this fix is for extension modules that have no way of knowing if Python is multi-threaded yet). - Typing Ctrl-C whilst raw_input() was waiting in a build with threads disabled caused a crash. - Bug #1165306: instancemethod_new allowed the creation of a method with im_class == im_self == NULL, which caused a crash when called. - Move exception finalisation later in the shutdown process - this fixes the crash seen in bug #1165761 - Added two new builtins, any() and all(). - Defining a class with empty parentheses is now allowed (e.g., ``class C(): pass`` is no longer a syntax error). Patch #1176012 added support to the 'parser' module and 'compiler' package (thanks to logistix for that added support). - Patch #1115086: Support PY_LONGLONG in structmember. - Bug #1155938: new style classes did not check that __init__() was returning None. - Patch #802188: Report characters after line continuation character ('\') with a specific error message. - Bug #723201: Raise a TypeError for passing bad objects to 'L' format. - Bug #1124295: the __name__ attribute of file objects was inadvertently made inaccessible in restricted mode. - Bug #1074011: closing sys.std{out,err} now causes a flush() and an ferror() call. - min() and max() now support key= arguments with the same meaning as in list.sort(). - The peephole optimizer now performs simple constant folding in expressions: (2+3) --> (5). - set and frozenset objects can now be marshalled. SF #1098985. - Bug #1077106: Poor argument checking could cause memory corruption in calls to os.read(). - The parser did not complain about future statements in illegal positions. It once again reports a syntax error if a future statement occurs after anything other than a doc string. - Change the %s format specifier for str objects so that it returns a unicode instance if the argument is not an instance of basestring and calling __str__ on the argument returns a unicode instance. - Patch #1413181: changed ``PyThreadState_Delete()`` to forget about the current thread state when the auto-GIL-state machinery knows about it (since the thread state is being deleted, continuing to remember it can't help, but can hurt if another thread happens to get created with the same thread id). Extension Modules ----------------- - Patch #1380952: fix SSL objects timing out on consecutive read()s - Patch #1309579: wait3 and wait4 were added to the posix module. - Patch #1231053: The audioop module now supports encoding/decoding of alaw. In addition, the existing ulaw code was updated. - RFE #567972: Socket objects' family, type and proto properties are now exposed via new attributes. - Everything under lib-old was removed. This includes the following modules: Para, addpack, cmp, cmpcache, codehack, dircmp, dump, find, fmt, grep, lockfile, newdir, ni, packmail, poly, rand, statcache, tb, tzparse, util, whatsound, whrandom, zmod - The following modules were removed: regsub, reconvert, regex, regex_syntax. - re and sre were swapped, so help(re) provides full help. importing sre is deprecated. The undocumented re.engine variable no longer exists. - Bug #1448490: Fixed a bug that ISO-2022 codecs could not handle SS2 (single-shift 2) escape sequences correctly. - The unicodedata module was updated to the 4.1 version of the Unicode database. The 3.2 version is still available as unicodedata.db_3_2_0 for applications that require this specific version (such as IDNA). - The timing module is no longer built by default. It was deprecated in PEP 4 in Python 2.0 or earlier. - Patch 1433928: Added a new type, defaultdict, to the collections module. This uses the new __missing__ hook behavior added to dict (see above). - Bug #854823: socketmodule now builds on Sun platforms even when INET_ADDRSTRLEN is not defined. - Patch #1393157: os.startfile() now has an optional argument to specify a "command verb" to invoke on the file. - Bug #876637, prevent stack corruption when socket descriptor is larger than FD_SETSIZE. - Patch #1407135, bug #1424041: harmonize mmap behavior of anonymous memory. mmap.mmap(-1, size) now returns anonymous memory in both Unix and Windows. mmap.mmap(0, size) should not be used on Windows for anonymous memory. - Patch #1422385: The nis module now supports access to domains other than the system default domain. - Use Win32 API to implement os.stat/fstat. As a result, subsecond timestamps are reported, the limit on path name lengths is removed, and stat reports WindowsError now (instead of OSError). - Add bsddb.db.DBEnv.set_tx_timestamp allowing time based database recovery. - Bug #1413192, fix seg fault in bsddb if a transaction was deleted before the env. - Patch #1103116: Basic AF_NETLINK support. - Bug #1402308, (possible) segfault when using mmap.mmap(-1, ...) - Bug #1400822, _curses over{lay,write} doesn't work when passing 6 ints. Also fix ungetmouse() which did not accept arguments properly. The code now conforms to the documented signature. - Bug #1400115, Fix segfault when calling curses.panel.userptr() without prior setting of the userptr. - Fix 64-bit problems in bsddb. - Patch #1365916: fix some unsafe 64-bit mmap methods. - Bug #1290333: Added a workaround for cjkcodecs' _codecs_cn build problem on AIX. - Bug #869197: os.setgroups rejects long integer arguments - Bug #1346533, select.poll() doesn't raise an error if timeout > sys.maxint - Bug #1344508, Fix UNIX mmap leaking file descriptors - Patch #1338314, Bug #1336623: fix tarfile so it can extract REGTYPE directories from tarfiles written by old programs. - Patch #1407992, fixes broken bsddb module db associate when using BerkeleyDB 3.3, 4.0 or 4.1. - Get bsddb module to build with BerkeleyDB version 4.4 - Get bsddb module to build with BerkeleyDB version 3.2 - Patch #1309009, Fix segfault in pyexpat when the XML document is in latin_1, but Python incorrectly assumes it is in UTF-8 format - Fix parse errors in the readline module when compiling without threads. - Patch #1288833: Removed thread lock from socket.getaddrinfo on FreeBSD 5.3 and later versions which got thread-safe getaddrinfo(3). - Patches #1298449 and #1298499: Add some missing checks for error returns in cStringIO.c. - Patch #1297028: fix segfault if call type on MultibyteCodec, MultibyteStreamReader, or MultibyteStreamWriter - Fix memory leak in posix.access(). - Patch #1213831: Fix typo in unicodedata._getcode. - Bug #1007046: os.startfile() did not accept unicode strings encoded in the file system encoding. - Patch #756021: Special-case socket.inet_aton('255.255.255.255') for platforms that don't have inet_aton(). - Bug #1215928: Fix bz2.BZ2File.seek() for 64-bit file offsets. - Bug #1191043: Fix bz2.BZ2File.(x)readlines for files containing one line without newlines. - Bug #728515: mmap.resize() now resizes the file on Unix as it did on Windows. - Patch #1180695: Add nanosecond stat resolution, and st_gen, st_birthtime for FreeBSD. - Patch #1231069: The fcntl.ioctl function now uses the 'I' code for the request code argument, which results in more C-like behaviour for large or negative values. - Bug #1234979: For the argument of thread.Lock.acquire, the Windows implementation treated all integer values except 1 as false. - Bug #1194181: bz2.BZ2File didn't handle mode 'U' correctly. - Patch #1212117: os.stat().st_flags is now accessible as an attribute if available on the platform. - Patch #1103951: Expose O_SHLOCK and O_EXLOCK in the posix module if available on the platform. - Bug #1166660: The readline module could segfault if hook functions were set in a different thread than that which called readline. - collections.deque objects now support a remove() method. - operator.itemgetter() and operator.attrgetter() now support retrieving multiple fields. This provides direct support for sorting on multiple keys (primary, secondary, etc). - os.access now supports Unicode path names on non-Win32 systems. - Patches #925152, #1118602: Avoid reading after the end of the buffer in pyexpat.GetInputContext. - Patches #749830, #1144555: allow UNIX mmap size to default to current file size. - Added functional.partial(). See PEP309. - Patch #1093585: raise a ValueError for negative history items in readline. {remove_history,replace_history} - The spwd module has been added, allowing access to the shadow password database. - stat_float_times is now True. - array.array objects are now picklable. - the cPickle module no longer accepts the deprecated None option in the args tuple returned by __reduce__(). - itertools.islice() now accepts None for the start and step arguments. This allows islice() to work more readily with slices: islice(s.start, s.stop, s.step) - datetime.datetime() now has a strptime class method which can be used to create datetime object using a string and format. - Patch #1117961: Replace the MD5 implementation from RSA Data Security Inc with the implementation from http://sourceforge.net/projects/libmd5-rfc/. Library ------- - Patch #1388073: Numerous __-prefixed attributes of unittest.TestCase have been renamed to have only a single underscore prefix. This was done to make subclassing easier. - PEP 338: new module runpy defines a run_module function to support executing modules which provide access to source code or a code object via the PEP 302 import mechanisms. - The email module's parsedate_tz function now sets the daylight savings flag to -1 (unknown) since it can't tell from the date whether it should be set. - Patch #624325: urlparse.urlparse() and urlparse.urlsplit() results now sport attributes that provide access to the parts of the result. - Patch #1462498: sgmllib now handles entity and character references in attribute values. - Added the sqlite3 package. This is based on pysqlite2.1.3, and provides a DB-API interface in the standard library. You'll need sqlite 3.0.8 or later to build this - if you have an earlier version, the C extension module will not be built. - Bug #1460340: ``random.sample(dict)`` failed in various ways. Dicts aren't officially supported here, and trying to use them will probably raise an exception some day. But dicts have been allowed, and "mostly worked", so support for them won't go away without warning. - Bug #1445068: getpass.getpass() can now be given an explicit stream argument to specify where to write the prompt. - Patch #1462313, bug #1443328: the pickle modules now can handle classes that have __private names in their __slots__. - Bug #1250170: mimetools now handles socket.gethostname() failures gracefully. - patch #1457316: "setup.py upload" now supports --identity to select the key to be used for signing the uploaded code. - Queue.Queue objects now support .task_done() and .join() methods to make it easier to monitor when daemon threads have completed processing all enqueued tasks. Patch #1455676. - popen2.Popen objects now preserve the command in a .cmd attribute. - Added the ctypes ffi package. - email 4.0 package now integrated. This is largely the same as the email 3.0 package that was included in Python 2.3, except that PEP 8 module names are now used (e.g. mail.message instead of email.Message). The MIME classes have been moved to a subpackage (e.g. email.mime.text instead of email.MIMEText). The old names are still supported for now. Several deprecated Message methods have been removed and lots of bugs have been fixed. More details can be found in the email package documentation. - Patches #1436130/#1443155: codecs.lookup() now returns a CodecInfo object (a subclass of tuple) that provides incremental decoders and encoders (a way to use stateful codecs without the stream API). Python functions codecs.getincrementaldecoder() and codecs.getincrementalencoder() as well as C functions PyCodec_IncrementalEncoder() and PyCodec_IncrementalDecoder() have been added. - Patch #1359365: Calling next() on a closed StringIO.String object raises a ValueError instead of a StopIteration now (like file and cString.String do). cStringIO.StringIO.isatty() will raise a ValueError now if close() has been called before (like file and StringIO.StringIO do). - A regrtest option -w was added to re-run failed tests in verbose mode. - Patch #1446372: quit and exit can now be called from the interactive interpreter to exit. - The function get_count() has been added to the gc module, and gc.collect() grew an optional 'generation' argument. - A library msilib to generate Windows Installer files, and a distutils command bdist_msi have been added. - PEP 343: new module contextlib.py defines decorator @contextmanager and helpful context managers nested() and closing(). - The compiler package now supports future imports after the module docstring. - Bug #1413790: zipfile now sanitizes absolute archive names that are not allowed by the specs. - Patch #1215184: FileInput now can be given an opening hook which can be used to control how files are opened. - Patch #1212287: fileinput.input() now has a mode parameter for specifying the file mode input files should be opened with. - Patch #1215184: fileinput now has a fileno() function for getting the current file number. - Patch #1349274: gettext.install() now optionally installs additional translation functions other than _() in the builtins namespace. - Patch #1337756: fileinput now accepts Unicode filenames. - Patch #1373643: The chunk module can now read chunks larger than two gigabytes. - Patch #1417555: SimpleHTTPServer now returns Last-Modified headers. - Bug #1430298: It is now possible to send a mail with an empty return address using smtplib. - Bug #1432260: The names of lambda functions are now properly displayed in pydoc. - Patch #1412872: zipfile now sets the creator system to 3 (Unix) unless the system is Win32. - Patch #1349118: urllib now supports user:pass@ style proxy specifications, raises IOErrors when proxies for unsupported protocols are defined, and uses the https proxy on https redirections. - Bug #902075: urllib2 now supports 'host:port' style proxy specifications. - Bug #1407902: Add support for sftp:// URIs to urlparse. - Bug #1371247: Update Windows locale identifiers in locale.py. - Bug #1394565: SimpleHTTPServer now doesn't choke on query parameters any more. - Bug #1403410: The warnings module now doesn't get confused when it can't find out the module name it generates a warning for. - Patch #1177307: Added a new codec utf_8_sig for UTF-8 with a BOM signature. - Patch #1157027: cookielib mishandles RFC 2109 cookies in Netscape mode - Patch #1117398: cookielib.LWPCookieJar and .MozillaCookieJar now raise LoadError as documented, instead of IOError. For compatibility, LoadError subclasses IOError. - Added the hashlib module. It provides secure hash functions for MD5 and SHA1, 224, 256, 384, and 512. Note that recent developments make the historic MD5 and SHA1 unsuitable for cryptographic-strength applications. In <http://mail.python.org/pipermail/python-dev/2005-December/058850.html> Ronald L. Rivest offered this advice for Python: "The consensus of researchers in this area (at least as expressed at the NIST Hash Function Workshop 10/31/05), is that SHA-256 is a good choice for the time being, but that research should continue, and other alternatives may arise from this research. The larger SHA's also seem OK." - Added a subset of Fredrik Lundh's ElementTree package. Available modules are xml.etree.ElementTree, xml.etree.ElementPath, and xml.etree.ElementInclude, from ElementTree 1.2.6. - Patch #1162825: Support non-ASCII characters in IDLE window titles. - Bug #1365984: urllib now opens "data:" URLs again. - Patch #1314396: prevent deadlock for threading.Thread.join() when an exception is raised within the method itself on a previous call (e.g., passing in an illegal argument) - Bug #1340337: change time.strptime() to always return ValueError when there is an error in the format string. - Patch #754022: Greatly enhanced webbrowser.py (by Oleg Broytmann). - Bug #729103: pydoc.py: Fix docother() method to accept additional "parent" argument. - Patch #1300515: xdrlib.py: Fix pack_fstring() to really use null bytes for padding. - Bug #1296004: httplib.py: Limit maximal amount of data read from the socket to avoid a MemoryError on Windows. - Patch #1166948: locale.py: Prefer LC_ALL, LC_CTYPE and LANG over LANGUAGE to get the correct encoding. - Patch #1166938: locale.py: Parse LANGUAGE as a colon separated list of languages. - Patch #1268314: Cache lines in StreamReader.readlines for performance. - Bug #1290505: Fix clearing the regex cache for time.strptime(). - Bug #1167128: Fix size of a symlink in a tarfile to be 0. - Patch #810023: Fix off-by-one bug in urllib.urlretrieve reporthook functionality. - Bug #1163178: Make IDNA return an empty string when the input is empty. - Patch #848017: Make Cookie more RFC-compliant. Use CRLF as default output separator and do not output trailing semicolon. - Patch #1062060: urllib.urlretrieve() now raises a new exception, named ContentTooShortException, when the actually downloaded size does not match the Content-Length header. - Bug #1121494: distutils.dir_utils.mkpath now accepts Unicode strings. - Bug #1178484: Return complete lines from codec stream readers even if there is an exception in later lines, resulting in correct line numbers for decoding errors in source code. - Bug #1192315: Disallow negative arguments to clear() in pdb. - Patch #827386: Support absolute source paths in msvccompiler.py. - Patch #1105730: Apply the new implementation of commonprefix in posixpath to ntpath, macpath, os2emxpath and riscospath. - Fix a problem in Tkinter introduced by SF patch #869468: delete bogus __hasattr__ and __delattr__ methods on class Tk that were breaking Tkdnd. - Bug #1015140: disambiguated the term "article id" in nntplib docs and docstrings to either "article number" or "message id". - Bug #1238170: threading.Thread.__init__ no longer has "kwargs={}" as a parameter, but uses the usual "kwargs=None". - textwrap now processes text chunks at O(n) speed instead of O(n**2). Patch #1209527 (Contributed by Connelly). - urllib2 has now an attribute 'httpresponses' mapping from HTTP status code to W3C name (404 -> 'Not Found'). RFE #1216944. - Bug #1177468: Don't cache the /dev/urandom file descriptor for os.urandom, as this can cause problems with apps closing all file descriptors. - Bug #839151: Fix an attempt to access sys.argv in the warnings module; it can be missing in embedded interpreters - Bug #1155638: Fix a bug which affected HTTP 0.9 responses in httplib. - Bug #1100201: Cross-site scripting was possible on BaseHTTPServer via error messages. - Bug #1108948: Cookie.py produced invalid JavaScript code. - The tokenize module now detects and reports indentation errors. Bug #1224621. - The tokenize module has a new untokenize() function to support a full roundtrip from lexed tokens back to Python source code. In addition, the generate_tokens() function now accepts a callable argument that terminates by raising StopIteration. - Bug #1196315: fix weakref.WeakValueDictionary constructor. - Bug #1213894: os.path.realpath didn't resolve symlinks that were the first component of the path. - Patch #1120353: The xmlrpclib module provides better, more transparent, support for datetime.{datetime,date,time} objects. With use_datetime set to True, applications shouldn't have to fiddle with the DateTime wrapper class at all. - distutils.commands.upload was added to support uploading distribution files to PyPI. - distutils.commands.register now encodes the data as UTF-8 before posting them to PyPI. - decimal operator and comparison methods now return NotImplemented instead of raising a TypeError when interacting with other types. This allows other classes to implement __radd__ style methods and have them work as expected. - Bug #1163325: Decimal infinities failed to hash. Attempting to hash a NaN raised an InvalidOperation instead of a TypeError. - Patch #918101: Add tarfile open mode r|* for auto-detection of the stream compression; add, for symmetry reasons, r:* as a synonym of r. - Patch #1043890: Add extractall method to tarfile. - Patch #1075887: Don't require MSVC in distutils if there is nothing to build. - Patch #1103407: Properly deal with tarfile iterators when untarring symbolic links on Windows. - Patch #645894: Use getrusage for computing the time consumption in profile.py if available. - Patch #1046831: Use get_python_version where appropriate in sysconfig.py. - Patch #1117454: Remove code to special-case cookies without values in LWPCookieJar. - Patch #1117339: Add cookielib special name tests. - Patch #1112812: Make bsddb/__init__.py more friendly for modulefinder. - Patch #1110248: SYNC_FLUSH the zlib buffer for GZipFile.flush. - Patch #1107973: Allow iterating over the lines of a tarfile.ExFileObject. - Patch #1104111: Alter setup.py --help and --help-commands. - Patch #1121234: Properly cleanup _exit and tkerror commands. - Patch #1049151: xdrlib now unpacks booleans as True or False. - Fixed bug in a NameError bug in cookielib. Patch #1116583. - Applied a security fix to SimpleXMLRPCserver (PSF-2005-001). This disables recursive traversal through instance attributes, which can be exploited in various ways. - Bug #1222790: in SimpleXMLRPCServer, set the reuse-address and close-on-exec flags on the HTTP listening socket. - Bug #792570: SimpleXMLRPCServer had problems if the request grew too large. Fixed by reading the HTTP body in chunks instead of one big socket.read(). - Patches #893642, #1039083: add allow_none, encoding arguments to constructors of SimpleXMLRPCServer and CGIXMLRPCRequestHandler. - Bug #1110478: Revert os.environ.update to do putenv again. - Bug #1103844: fix distutils.install.dump_dirs() with negated options. - os.{SEEK_SET, SEEK_CUR, SEEK_END} have been added for convenience. - Enhancements to the csv module: + Dialects are now validated by the underlying C code, better reflecting its capabilities, and improving its compliance with PEP 305. + Dialect parameter parsing has been re-implemented to improve error reporting. + quotechar=None and quoting=QUOTE_NONE now work the way PEP 305 dictates. + the parser now removes the escapechar prefix from escaped characters. + when quoting=QUOTE_NONNUMERIC, the writer now tests for numeric types, rather than any object that can be represented as a numeric. + when quoting=QUOTE_NONNUMERIC, the reader now casts unquoted fields to floats. + reader now allows \r characters to be quoted (previously it only allowed \n to be quoted). + writer doublequote handling improved. + Dialect classes passed to the module are no longer instantiated by the module before being parsed (the former validation scheme required this, but the mechanism was unreliable). + The dialect registry now contains instances of the internal C-coded dialect type, rather than references to python objects. + the internal c-coded dialect type is now immutable. + register_dialect now accepts the same keyword dialect specifications as the reader and writer, allowing the user to register dialects without first creating a dialect class. + a configurable limit to the size of parsed fields has been added - previously, an unmatched quote character could result in the entire file being read into the field buffer before an error was reported. + A new module method csv.field_size_limit() has been added that sets the parser field size limit (returning the former limit). The initial limit is 128kB. + A line_num attribute has been added to the reader object, which tracks the number of lines read from the source iterator. This is not the same as the number of records returned, as records can span multiple lines. + reader and writer objects were not being registered with the cyclic-GC. This has been fixed. - _DummyThread objects in the threading module now delete self.__block that is inherited from _Thread since it uses up a lock allocated by 'thread'. The lock primitives tend to be limited in number and thus should not be wasted on a _DummyThread object. Fixes bug #1089632. - The imghdr module now detects Exif files. - StringIO.truncate() now correctly adjusts the size attribute. (Bug #951915). - locale.py now uses an updated locale alias table (built using Tools/i18n/makelocalealias.py, a tool to parse the X11 locale alias file); the encoding lookup was enhanced to use Python's encoding alias table. - moved deprecated modules to Lib/lib-old: whrandom, tzparse, statcache. - the pickle module no longer accepts the deprecated None option in the args tuple returned by __reduce__(). - optparse now optionally imports gettext. This allows its use in setup.py. - the pickle module no longer uses the deprecated bin parameter. - the shelve module no longer uses the deprecated binary parameter. - the pstats module no longer uses the deprecated ignore() method. - the filecmp module no longer uses the deprecated use_statcache argument. - unittest.TestCase.run() and unittest.TestSuite.run() can now be successfully extended or overridden by subclasses. Formerly, the subclassed method would be ignored by the rest of the module. (Bug #1078905). - heapq.nsmallest() and heapq.nlargest() now support key= arguments with the same meaning as in list.sort(). - Bug #1076985: ``codecs.StreamReader.readline()`` now calls ``read()`` only once when a size argument is given. This prevents a buffer overflow in the tokenizer with very long source lines. - Bug #1083110: ``zlib.decompress.flush()`` would segfault if called immediately after creating the object, without any intervening ``.decompress()`` calls. - The reconvert.quote function can now emit triple-quoted strings. The reconvert module now has some simple documentation. - ``UserString.MutableString`` now supports negative indices in ``__setitem__`` and ``__delitem__`` - Bug #1149508: ``textwrap`` now handles hyphenated numbers (eg. "2004-03-05") correctly. - Partial fixes for SF bugs #1163244 and #1175396: If a chunk read by ``codecs.StreamReader.readline()`` has a trailing "\r", read one more character even if the user has passed a size parameter to get a proper line ending. Remove the special handling of a "\r\n" that has been split between two lines. - Bug #1251300: On UCS-4 builds the "unicode-internal" codec will now complain about illegal code points. The codec now supports PEP 293 style error handlers. - Bug #1235646: ``codecs.StreamRecoder.next()`` now reencodes the data it reads from the input stream, so that the output is a byte string in the correct encoding instead of a unicode string. - Bug #1202493: Fixing SRE parser to handle '{}' as perl does, rather than considering it exactly like a '*'. - Bug #1245379: Add "unicode-1-1-utf-7" as an alias for "utf-7" to ``encodings.aliases``. - ` uu.encode()`` and ``uu.decode()`` now support unicode filenames. - Patch #1413711: Certain patterns of differences were making difflib touch the recursion limit. - Bug #947906: An object oriented interface has been added to the calendar module. It's possible to generate HTML calendar now and the module can be called as a script (e.g. via ``python -mcalendar``). Localized month and weekday names can be output (even if an exotic encoding is used) using special classes that use unicode. Build ----- - Fix test_float, test_long, and test_struct failures on Tru64 with gcc by using -mieee gcc option. - Patch #1432345: Make python compile on DragonFly. - Build support for Win64-AMD64 was added. - Patch #1428494: Prefer linking against ncursesw over ncurses library. - Patch #881820: look for openpty and forkpty also in libbsd. - The sources of zlib are now part of the Python distribution (zlib 1.2.3). The zlib module is now built in on Windows. - Use -xcode=pic32 for CCSHARED on Solaris with SunPro. - Bug #1189330: configure did not correctly determine the necessary value of LINKCC if python was built with GCC 4.0. - Upgrade Windows build to zlib 1.2.3 which eliminates a potential security vulnerability in zlib 1.2.1 and 1.2.2. - EXTRA_CFLAGS has been introduced as an environment variable to hold compiler flags that change binary compatibility. Changes were also made to distutils.sysconfig to also use the environment variable when used during compilation of the interpreter and of C extensions through distutils. - SF patch 1171735: Darwin 8's headers are anal about POSIX compliance, and linking has changed (prebinding is now deprecated, and libcc_dynamic no longer exists). This configure patch makes things right. - Bug #1158607: Build with --disable-unicode again. - spwdmodule.c is built only if either HAVE_GETSPNAM or HAVE_HAVE_GETSPENT is defined. Discovered as a result of not being able to build on OS X. - setup.py now uses the directories specified in LDFLAGS using the -L option and in CPPFLAGS using the -I option for adding library and include directories, respectively, for compiling extension modules against. This has led to the core being compiled using the values in CPPFLAGS. It also removes the need for the special-casing of both DarwinPorts and Fink for darwin since the proper directories can be specified in LDFLAGS (``-L/sw/lib`` for Fink, ``-L/opt/local/lib`` for DarwinPorts) and CPPFLAGS (``-I/sw/include`` for Fink, ``-I/opt/local/include`` for DarwinPorts). - Test in configure.in that checks for tzset no longer dependent on tm->tm_zone to exist in the struct (not required by either ISO C nor the UNIX 2 spec). Tests for sanity in tzname when HAVE_TZNAME defined were also defined. Closes bug #1096244. Thanks Gregory Bond. C API ----- - ``PyMem_{Del, DEL}`` and ``PyMem_{Free, FREE}`` no longer map to ``PyObject_{Free, FREE}``. They map to the system ``free()`` now. If memory is obtained via the ``PyObject_`` family, it must be released via the ``PyObject_`` family, and likewise for the ``PyMem_`` family. This has always been officially true, but when Python's small-object allocator was introduced, an attempt was made to cater to a few extension modules discovered at the time that obtained memory via ``PyObject_New`` but released it via ``PyMem_DEL``. It's years later, and if such code still exists it will fail now (probably with segfaults, but calling wrong low-level memory management functions can yield many symptoms). - Added a C API for set and frozenset objects. - Removed PyRange_New(). - Patch #1313939: PyUnicode_DecodeCharmap() accepts a unicode string as the mapping argument now. This string is used as a mapping table. Byte values greater than the length of the string and 0xFFFE are treated as undefined mappings. Tests ----- - In test_os, st_?time is now truncated before comparing it with ST_?TIME. - Patch #1276356: New resource "urlfetch" is implemented. This enables even impatient people to run tests that require remote files. Documentation ------------- - Bug #1402224: Add warning to dl docs about crashes. - Bug #1396471: Document that Windows' ftell() can return invalid values for text files with UNIX-style line endings. - Bug #1274828: Document os.path.splitunc(). - Bug #1190204: Clarify which directories are searched by site.py. - Bug #1193849: Clarify os.path.expanduser() documentation. - Bug #1243192: re.UNICODE and re.LOCALE affect \d, \D, \s and \S. - Bug #755617: Document the effects of os.chown() on Windows. - Patch #1180012: The documentation for modulefinder is now in the library reference. - Patch #1213031: Document that os.chown() accepts argument values of -1. - Bug #1190563: Document os.waitpid() return value with WNOHANG flag. - Bug #1175022: Correct the example code for property(). - Document the IterableUserDict class in the UserDict module. Closes bug #1166582. - Remove all latent references for "Macintosh" that referred to semantics for Mac OS 9 and change to reflect the state for OS X. Closes patch #1095802. Thanks Jack Jansen. Mac --- New platforms ------------- - FreeBSD 7 support is added. Tools/Demos ----------- - Created Misc/Vim/vim_syntax.py to auto-generate a python.vim file in that directory for syntax highlighting in Vim. Vim directory was added and placed vimrc to it (was previous up a level). - Added two new files to Tools/scripts: pysource.py, which recursively finds Python source files, and findnocoding.py, which finds Python source files that need an encoding declaration. Patch #784089, credits to Oleg Broytmann. - Bug #1072853: pindent.py used an uninitialized variable. - Patch #1177597: Correct Complex.__init__. - Fixed a display glitch in Pynche, which could cause the right arrow to wiggle over by a pixel. What's New in Python 2.4 final? =============================== *Release date: 30-NOV-2004* Core and builtins ----------------- - Bug 875692: Improve signal handling, especially when using threads, by forcing an early re-execution of PyEval_EvalFrame() "periodic" code when things_to_do is not cleared by Py_MakePendingCalls(). What's New in Python 2.4 (release candidate 1) ============================================== *Release date: 18-NOV-2004* Core and builtins ----------------- - Bug 1061968: Fixes in 2.4a3 to address thread bug 1010677 reintroduced the years-old thread shutdown race bug 225673. Numeric history lesson aside, all bugs in all three reports are fixed now. Library ------- - Bug 1052242: If exceptions are raised by an atexit handler function an attempt is made to execute the remaining handlers. The last exception raised is re-raised. - ``doctest``'s new support for adding ``pdb.set_trace()`` calls to doctests was broken in a dramatic but shallow way. Fixed. - Bug 1065388: ``calendar``'s ``day_name``, ``day_abbr``, ``month_name``, and ``month_abbr`` attributes emulate sequences of locale-correct spellings of month and day names. Because the locale can change at any time, the correct spelling is recomputed whenever one of these is indexed. In the worst case, the index may be a slice object, so these recomputed every day or month name each time they were indexed. This is much slower than necessary in the usual case, when the index is just an integer. In that case, only the single spelling needed is recomputed now; and, when the index is a slice object, only the spellings needed by the slice are recomputed now. - Patch 1061679: Added ``__all__`` to pickletools.py. Build ----- - Bug 1034277 / Patch 1035255: Remove compilation of core against CoreServices and CoreFoundation on OS X. Involved removing PyMac_GetAppletScriptFile() which has no known users. Thanks Bob Ippolito. C API ----- - The PyRange_New() function is deprecated. What's New in Python 2.4 beta 2? ================================ *Release date: 03-NOV-2004* License ------- The Python Software Foundation changed the license under which Python is released, to remove Python version numbers. There were no other changes to the license. So, for example, wherever the license for Python 2.3 said "Python 2.3", the new license says "Python". The intent is to make it possible to refer to the PSF license in a more durable way. For example, some people say they're confused by that the Open Source Initiative's entry for the Python Software Foundation License:: http://www.opensource.org/licenses/PythonSoftFoundation.php says "Python 2.1.1" all over it, wondering whether it applies only to Python 2.1.1. The official name of the new license is the Python Software Foundation License Version 2. Core and builtins ----------------- - Bug #1055820 Cyclic garbage collection was not protecting against that calling a live weakref to a piece of cyclic trash could resurrect an insane mutation of the trash if any Python code ran during gc (via running a dead object's __del__ method, running another callback on a weakref to a dead object, or via any Python code run in any other thread that managed to obtain the GIL while a __del__ or callback was running in the thread doing gc). The most likely symptom was "impossible" ``AttributeError`` exceptions, appearing seemingly at random, on weakly referenced objects. The cure was to clear all weakrefs to unreachable objects before allowing any callbacks to run. - Bug #1054139 _PyString_Resize() now invalidates its cached hash value. Extension Modules ----------------- - Bug #1048870: the compiler now generates distinct code objects for functions with identical bodies. This was producing confusing traceback messages which pointed to the function where the code object was first defined rather than the function being executed. Library ------- - Patch #1056967 changes the semantics of Template.safe_substitute() so that no ValueError is raised on an 'invalid' match group. Now the delimiter is returned. - Bug #1052503 pdb.runcall() was not passing along keyword arguments. - Bug #902037: XML.sax.saxutils.prepare_input_source() now combines relative paths with a base path before checking os.path.isfile(). - The whichdb module can now be run from the command line. - Bug #1045381: time.strptime() can now infer the date using %U or %W (week of the year) when the day of the week and year are also specified. - Bug #1048816: fix bug in Ctrl-K at start of line in curses.textpad.Textbox - Bug #1017553: fix bug in tarfile.filemode() - Patch #737473: fix bug that old source code is shown in tracebacks even if the source code is updated and reloaded. Build ----- - Patch #1044395: --enable-shared is allowed in FreeBSD also. What's New in Python 2.4 beta 1? ================================ *Release date: 15-OCT-2004* Core and builtins ----------------- - Patch #975056: Restartable signals were not correctly disabled on BSD systems. Consistently use PyOS_setsig() instead of signal(). - The internal portable implementation of thread-local storage (TLS), used by the ``PyGILState_Ensure()``/``PyGILState_Release()`` API, was not thread-correct. This could lead to a variety of problems, up to and including segfaults. See bug 1041645 for an example. - Added a command line option, -m module, which searches sys.path for the module and then runs it. (Contributed by Nick Coghlan.) - The bytecode optimizer now folds tuples of constants into a single constant. - SF bug #513866: Float/long comparison anomaly. Prior to 2.4b1, when an integer was compared to a float, the integer was coerced to a float. That could yield spurious overflow errors (if the integer was very large), and to anomalies such as ``long(1e200)+1 == 1e200 == long(1e200)-1``. Coercion to float is no longer performed, and cases like ``long(1e200)-1 < 1e200``, ``long(1e200)+1 > 1e200`` and ``(1 << 20000) > 1e200`` are computed correctly now. Extension modules ----------------- - ``collections.deque`` objects didn't play quite right with garbage collection, which could lead to a segfault in a release build, or an assert failure in a debug build. Also, added overflow checks, better detection of mutation during iteration, and shielded deque comparisons from unusual subclass overrides of the __iter__() method. Library ------- - Patch 1046644: distutils build_ext grew two new options - --swig for specifying the swig executable to use, and --swig-opts to specify options to pass to swig. --swig-opts="-c++" is the new way to spell --swig-cpp. - Patch 983206: distutils now obeys environment variable LDSHARED, if it is set. - Added Peter Astrand's subprocess.py module. See PEP 324 for details. - time.strptime() now properly escapes timezones and all other locale-specific strings for regex-specific symbols. Was breaking under Japanese Windows when the timezone was specified as "Tokyo (standard time)". Closes bug #1039270. - Updates for the email package: + email.Utils.formatdate() grew a 'usegmt' argument for HTTP support. + All deprecated APIs that in email 2.x issued warnings have been removed: _encoder argument to the MIMEText constructor, Message.add_payload(), Utils.dump_address_pair(), Utils.decode(), Utils.encode() + New deprecations: Generator.__call__(), Message.get_type(), Message.get_main_type(), Message.get_subtype(), the 'strict' argument to the Parser constructor. These will be removed in email 3.1. + Support for Python earlier than 2.3 has been removed (see PEP 291). + All defect classes have been renamed to end in 'Defect'. + Some FeedParser fixes; also a MultipartInvariantViolationDefect will be added to messages that claim to be multipart but really aren't. + Updates to documentation. - re's findall() and finditer() functions now take an optional flags argument just like the compile(), search(), and match() functions. Also, documented the previously existing start and stop parameters for the findall() and finditer() methods of regular expression objects. - rfc822 Messages now support iterating over the headers. - The (undocumented) tarfile.Tarfile.membernames has been removed; applications should use the getmember function. - httplib now offers symbolic constants for the HTTP status codes. - SF bug #1028306: Trying to compare a ``datetime.date`` to a ``datetime.datetime`` mistakenly compared only the year, month and day. Now it acts like a mixed-type comparison: ``False`` for ``==``, ``True`` for ``!=``, and raises ``TypeError`` for other comparison operators. Because datetime is a subclass of date, comparing only the base class (date) members can still be done, if that's desired, by forcing using of the appropriate date method; e.g., ``a_date.__eq__(a_datetime)`` is true if and only if the year, month and day members of ``a_date`` and ``a_datetime`` are equal. - bdist_rpm now supports command line options --force-arch, {pre,post}-install, {pre,post}-uninstall, and {prep,build,install,clean,verify}-script. - SF patch #998993: The UTF-8 and the UTF-16 stateful decoders now support decoding incomplete input (when the input stream is temporarily exhausted). ``codecs.StreamReader`` now implements buffering, which enables proper readline support for the UTF-16 decoders. ``codecs.StreamReader.read()`` has a new argument ``chars`` which specifies the number of characters to return. ``codecs.StreamReader.readline()`` and ``codecs.StreamReader.readlines()`` have a new argument ``keepends``. Trailing "\n"s will be stripped from the lines if ``keepends`` is false. - The documentation for doctest is greatly expanded, and now covers all the new public features (of which there are many). - ``doctest.master`` was put back in, and ``doctest.testmod()`` once again updates it. This isn't good, because every ``testmod()`` call contributes to bloating the "hidden" state of ``doctest.master``, but some old code apparently relies on it. For now, all we can do is encourage people to stitch doctests together via doctest's unittest integration features instead. - httplib now handles ipv6 address/port pairs. - SF bug #1017864: ConfigParser now correctly handles default keys, processing them with ``ConfigParser.optionxform`` when supplied, consistent with the handling of config file entries and runtime-set options. - SF bug #997050: Document, test, & check for non-string values in ConfigParser. Moved the new string-only restriction added in rev. 1.65 to the SafeConfigParser class, leaving existing ConfigParser & RawConfigParser behavior alone, and documented the conditions under which non-string values work. Build ----- - Building on darwin now includes /opt/local/include and /opt/local/lib for building extension modules. This is so as to include software installed as a DarwinPorts port <http://darwinports.opendarwin.org/> - pyport.h now defines a Py_IS_NAN macro. It works as-is when the platform C computes true for ``x != x`` if and only if X is a NaN. Other platforms can override the default definition with a platform- specific spelling in that platform's pyconfig.h. You can also override pyport.h's default Py_IS_INFINITY definition now. C API ----- - SF patch 1044089: New function ``PyEval_ThreadsInitialized()`` returns non-zero if PyEval_InitThreads() has been called. - The undocumented and unused extern int ``_PyThread_Started`` was removed. - The C API calls ``PyInterpreterState_New()`` and ``PyThreadState_New()`` are two of the very few advertised as being safe to call without holding the GIL. However, this wasn't true in a debug build, as bug 1041645 demonstrated. In a debug build, Python redirects the ``PyMem`` family of calls to Python's small-object allocator, to get the benefit of its extra debugging capabilities. But Python's small-object allocator isn't threadsafe, relying on the GIL to avoid the expense of doing its own locking. ``PyInterpreterState_New()`` and ``PyThreadState_New()`` call the platform ``malloc()`` directly now, regardless of build type. - PyLong_AsUnsignedLong[Mask] now support int objects as well. - SF patch #998993: ``PyUnicode_DecodeUTF8Stateful`` and ``PyUnicode_DecodeUTF16Stateful`` have been added, which implement stateful decoding. Tests ----- - test__locale ported to unittest Mac --- - ``plistlib`` now supports non-dict root objects. There is also a new interface for reading and writing plist files: ``readPlist(pathOrFile)`` and ``writePlist(rootObject, pathOrFile)`` Tools/Demos ----------- - The text file comparison scripts ``ndiff.py`` and ``diff.py`` now read the input files in universal-newline mode. This spares them from consuming a great deal of time to deduce the useless result that, e.g., a file with Windows line ends and a file with Linux line ends have no lines in common. What's New in Python 2.4 alpha 3? ================================= *Release date: 02-SEP-2004* Core and builtins ----------------- - SF patch #1007189: ``from ... import ...`` statements now allow the name list to be surrounded by parentheses. - Some speedups for long arithmetic, thanks to Trevor Perrin. Gradeschool multiplication was sped a little by optimizing the C code. Gradeschool squaring was sped by about a factor of 2, by exploiting that about half the digit products are duplicates in a square. Because exponentiation uses squaring often, this also speeds long power. For example, the time to compute 17**1000000 dropped from about 14 seconds to 9 on my box due to this much. The cutoff for Karatsuba multiplication was raised, since gradeschool multiplication got quicker, and the cutoff was aggressively small regardless. The exponentiation algorithm was switched from right-to-left to left-to-right, which is more efficient for small bases. In addition, if the exponent is large, the algorithm now does 5 bits (instead of 1 bit) at a time. That cut the time to compute 17**1000000 on my box in half again, down to about 4.5 seconds. - OverflowWarning is no longer generated. PEP 237 scheduled this to occur in Python 2.3, but since OverflowWarning was disabled by default, nobody realized it was still being generated. On the chance that user code is still using them, the Python builtin OverflowWarning, and corresponding C API PyExc_OverflowWarning, will exist until Python 2.5. - Py_InitializeEx has been added. - Fix the order of application of decorators. The proper order is bottom-up; the first decorator listed is the last one called. - SF patch #1005778. Fix a seg fault if the list size changed while calling list.index(). This could happen if a rich comparison function modified the list. - The ``func_name`` (a.k.a. ``__name__``) attribute of user-defined functions is now writable. - code_new (a.k.a new.code()) now checks its arguments sufficiently carefully that passing them on to PyCode_New() won't trigger calls to Py_FatalError() or PyErr_BadInternalCall(). It is still the case that the returned code object might be entirely insane. - Subclasses of string can no longer be interned. The semantics of interning were not clear here -- a subclass could be mutable, for example -- and had bugs. Explicitly interning a subclass of string via intern() will raise a TypeError. Internal operations that attempt to intern a string subclass will have no effect. - Bug 1003935: xrange() could report bogus OverflowErrors. Documented what xrange() intends, and repaired tests accordingly. Extension modules ----------------- - difflib now supports HTML side-by-side diff. - os.urandom has been added for systems that support sources of random data. - Patch 1012740: truncate() on a writable cStringIO now resets the position to the end of the stream. This is consistent with the original StringIO module and avoids inadvertently resurrecting data that was supposed to have been truncated away. - Added socket.socketpair(). - Added CurrentByteIndex, CurrentColumnNumber, CurrentLineNumber members to xml.parsers.expat.XMLParser object. - The mpz, rotor, and xreadlines modules, all deprecated in earlier versions of Python, have now been removed. Library ------- - Patch #934356: if a module defines __all__, believe that rather than using heuristics for filtering out imported names. - Patch #941486: added os.path.lexists(), which returns True for broken symlinks, unlike os.path.exists(). - the random module now uses os.urandom() for seeding if it is available. Added a new generator based on os.urandom(). - difflib and diff.py can now generate HTML. - bdist_rpm now includes version and release in the BuildRoot, and replaces - by ``_`` in version and release. - distutils build/build_scripts now has an -e option to specify the path to the Python interpreter for installed scripts. - PEP 292 classes Template and SafeTemplate are added to the string module. - tarfile now generates GNU tar files by default. - HTTPResponse has now a getheaders method. - Patch #1006219: let inspect.getsource handle '@' decorators. Thanks Simon Percivall. - logging.handlers.SMTPHandler.date_time has been removed; the class now uses email.Utils.formatdate to generate the time stamp. - A new function tkFont.nametofont was added to return an existing font. The Font class constructor now has an additional exists argument which, if True, requests to return/configure an existing font, rather than creating a new one. - Updated the decimal package's min() and max() methods to match the latest revision of the General Decimal Arithmetic Specification. Quiet NaNs are ignored and equal values are sorted based on sign and exponent. - The decimal package's Context.copy() method now returns deep copies. - Deprecated sys.exitfunc in favor of the atexit module. The sys.exitfunc attribute will be kept around for backwards compatibility and atexit will just become the one preferred way to do it. - patch #675551: Add get_history_item and replace_history_item functions to the readline module. - bug #989672: pdb.doc and the help messages for the help_d and help_u methods of the pdb.Pdb class gives have been corrected. d(own) goes to a newer frame, u(p) to an older frame, not the other way around. - bug #990669: os.path.realpath() will resolve symlinks before normalizing the path, as normalizing the path may alter the meaning of the path if it contains symlinks. - bug #851123: shutil.copyfile will raise an exception when trying to copy a file onto a link to itself. Thanks Gregory Ball. - bug #570300: Fix inspect to resolve file locations using os.path.realpath() so as to properly list all functions in a module when the module itself is reached through a symlink. Thanks Johannes Gijsbers. - doctest refactoring continued. See the docs for details. As part of this effort, some old and little- (never?) used features are now deprecated: the Tester class, the module is_private() function, and the isprivate argument to testmod(). The Tester class supplied a feeble "by hand" way to combine multiple doctests, if you knew exactly what you were doing. The newer doctest features for unittest integration already did a better job of that, are stronger now than ever, and the new DocTestRunner class is a saner foundation if you want to do it by hand. The "private name" filtering gimmick was a mistake from the start, and testmod() changed long ago to ignore it by default. If you want to filter out tests, the new DocTestFinder class can be used to return a list of all doctests, and you can filter that list by any computable criteria before passing it to a DocTestRunner instance. - Bug #891637, patch #1005466: fix inspect.getargs() crash on def foo((bar)). Tools/Demos ----------- - IDLE's shortcut keys for windows are now case insensitive so that Control-V works the same as Control-v. - pygettext.py: Generate POT-Creation-Date header in ISO format. Build ----- - Backward incompatibility: longintrepr.h now triggers a compile-time error if SHIFT (the number of bits in a Python long "digit") isn't divisible by 5. This new requirement allows simple code for the new 5-bits-at-a-time long_pow() implementation. If necessary, the restriction could be removed (by complicating long_pow(), or by falling back to the 1-bit-at-a-time algorithm), but there are no plans to do so. - bug #991962: When building with --disable-toolbox-glue on Darwin no attempt to build Mac-specific modules occurs. - The --with-tsc flag to configure to enable VM profiling with the processor's timestamp counter now works on PPC platforms. - patch #1006629: Define _XOPEN_SOURCE to 500 on Solaris 8/9 to match GCC's definition and avoid redefinition warnings. - Detect pthreads support (provided by gnu pth pthread emulation) on GNU/k*BSD systems. - bug #1005737, #1007249: Fixed several build problems and warnings found on old/legacy C compilers of HP-UX, IRIX and Tru64. C API ----- .. Documentation ------------- - patch #1005936, bug #1009373: fix index entries which contain an underscore when viewed with Acrobat. - bug #990669: os.path.normpath may alter the meaning of a path if it contains symbolic links. This has been documented in a comment since 1992, but is now in the library reference as well. New platforms ------------- - FreeBSD 6 is now supported. Tests ----- .. Windows ------- - Boosted the stack reservation for python.exe and pythonw.exe from the default 1MB to 2MB. Stack frames under VC 7.1 for 2.4 are enough bigger than under VC 6.0 for 2.3.4 that deeply recursive progams within the default sys.getrecursionlimit() default value of 1000 were able to suffer undetected C stack overflows. The standard test program test_compiler was one such program. If a Python process on Windows "just vanishes" without a trace, and without an error message of any kind, but with an exit code of 128, undetected stack overflow may be the problem. Mac --- .. What's New in Python 2.4 alpha 2? ================================= *Release date: 05-AUG-2004* Core and builtins ----------------- - Patch #980695: Implements efficient string concatenation for statements of the form s=s+t and s+=t. This will vary across implementations. Accordingly, the str.join() method is strongly preferred for performance sensitive code. - PEP-0318, Function Decorators have been added to the language. These are implemented using the Java-style @decorator syntax, like so:: @staticmethod def foo(bar): (The PEP needs to be updated to reflect the current state) - When importing a module M raises an exception, Python no longer leaves M in sys.modules. Before 2.4a2 it did, and a subsequent import of M would succeed, picking up a module object from sys.modules reflecting as much of the initialization of M as completed before the exception was raised. Subsequent imports got no indication that M was in a partially- initialized state, and the importers could get into arbitrarily bad trouble as a result (the M they got was in an unintended state, arbitrarily far removed from M's author's intent). Now subsequent imports of M will continue raising exceptions (but if, for example, the source code for M is edited between import attempts, then perhaps later attempts will succeed, or raise a different exception). This can break existing code, but in such cases the code was probably working before by accident. In the Python source, the only case of breakage discovered was in a test accidentally relying on a damaged module remaining in sys.modules. Cases are also known where tests deliberately provoking import errors remove damaged modules from sys.modules themselves, and such tests will break now if they do an unconditional del sys.modules[M]. - u'%s' % obj will now try obj.__unicode__() first and fallback to obj.__str__() if no __unicode__ method can be found. - Patch #550732: Add PyArg_VaParseTupleAndKeywords(). Analogous to PyArg_VaParse(). Both are now documented. Thanks Greg Chapman. - Allow string and unicode return types from .encode()/.decode() methods on string and unicode objects. Added unicode.decode() which was missing for no apparent reason. - An attempt to fix the mess that is Python's behaviour with signal handlers and threads, complicated by readline's behaviour. It's quite possible that there are still bugs here. - Added C macros Py_CLEAR and Py_VISIT to ease the implementation of types that support garbage collection. - Compiler now treats None as a constant. - The type of values returned by __int__, __float__, __long__, __oct__, and __hex__ are now checked. Returning an invalid type will cause a TypeError to be raised. This matches the behavior of Jython. - Implemented bind_textdomain_codeset() in locale module. - Added a workaround for proper string operations in BSDs. str.split and str.is* methods can now work correctly with UTF-8 locales. - Bug #989185: unicode.iswide() and unicode.width() is dropped and the East Asian Width support is moved to unicodedata extension module. - Patch #941229: The source code encoding in interactive mode now refers sys.stdin.encoding not just ISO-8859-1 anymore. This allows for non-latin-1 users to write unicode strings directly. Extension modules ----------------- - cpickle now supports the same keyword arguments as pickle. Library ------- - Added new codecs and aliases for ISO_8859-11, ISO_8859-16 and TIS-620 - Thanks to Edward Loper, doctest has been massively refactored, and many new features were added. Full docs will appear later. For now the doctest module comments and new test cases give good coverage. The refactoring provides many hook points for customizing behavior (such as how to report errors, and how to compare expected to actual output). New features include a <BLANKLINE> marker for expected output containing blank lines, options to produce unified or context diffs when actual output doesn't match expectations, an option to normalize whitespace before comparing, and an option to use an ellipsis to signify "don't care" regions of output. - Tkinter now supports the wish -sync and -use options. - The following methods in time support passing of None: ctime(), gmtime(), and localtime(). If None is provided, the current time is used (the same as when the argument is omitted). [SF bug 658254, patch 663482] - nntplib does now allow ignoring a .netrc file. - urllib2 now recognizes Basic authentication even if other authentication schemes are offered. - Bug #1001053. wave.open() now accepts unicode filenames. - gzip.GzipFile has a new fileno() method, to retrieve the handle of the underlying file object (provided it has a fileno() method). This is needed if you want to use os.fsync() on a GzipFile. - imaplib has two new methods: deleteacl and myrights. - nntplib has two new methods: description and descriptions. They use a more RFC-compliant way of getting a newsgroup description. - Bug #993394. Fix a possible red herring of KeyError in 'threading' being raised during interpreter shutdown from a registered function with atexit when dummy_threading is being used. - Bug #857297/Patch #916874. Fix an error when extracting a hard link from a tarfile. - Patch #846659. Fix an error in tarfile.py when using GNU longname/longlink creation. - The obsolete FCNTL.py has been deleted. The built-in fcntl module has been available (on platforms that support fcntl) since Python 1.5a3, and all FCNTL.py did is export fcntl's names, after generating a deprecation warning telling you to use fcntl directly. - Several new unicode codecs are added: big5hkscs, euc_jis_2004, iso2022_jp_2004, shift_jis_2004. - Bug #788520. Queue.{get, get_nowait, put, put_nowait} have new implementations, exploiting Conditions (which didn't exist at the time Queue was introduced). A minor semantic change is that the Full and Empty exceptions raised by non-blocking calls now occur only if the queue truly was full or empty at the instant the queue was checked (of course the Queue may no longer be full or empty by the time a calling thread sees those exceptions, though). Before, the exceptions could also be raised if it was "merely inconvenient" for the implementation to determine the true state of the Queue (because the Queue was locked by some other method in progress). - Bugs #979794 and #980117: difflib.get_grouped_opcodes() now handles the case of comparing two empty lists. This affected both context_diff() and unified_diff(), - Bug #980938: smtplib now prints debug output to sys.stderr. - Bug #930024: posixpath.realpath() now handles infinite loops in symlinks by returning the last point in the path that was not part of any loop. Thanks AM Kuchling. - Bug #980327: ntpath not handles compressing erroneous slashes between the drive letter and the rest of the path. Also clearly handles UNC addresses now as well. Thanks Paul Moore. - bug #679953: zipfile.py should now work for files over 2 GB. The packed data for file sizes (compressed and uncompressed) was being stored as signed instead of unsigned. - decimal.py now only uses signals in the IBM spec. The other conditions are no longer part of the public API. - codecs module now has two new generic APIs: encode() and decode() which don't restrict the return types (unlike the unicode and string methods of the same name). - Non-blocking SSL sockets work again; they were broken in Python 2.3. SF patch 945642. - doctest unittest integration improvements: o Improved the unitest test output for doctest-based unit tests o Can now pass setUp and tearDown functions when creating DocTestSuites. - The threading module has a new class, local, for creating objects that provide thread-local data. - Bug #990307: when keep_empty_values is True, cgi.parse_qsl() no longer returns spurious empty fields. - Implemented bind_textdomain_codeset() in gettext module. - Introduced in gettext module the l*gettext() family of functions, which return translation strings encoded in the preferred encoding, as informed by locale module's getpreferredencoding(). - optparse module (and tests) upgraded to Optik 1.5a1. Changes: - Add expansion of default values in help text: the string "%default" in an option's help string is expanded to str() of that option's default value, or "none" if no default value. - Bug #955889: option default values that happen to be strings are now processed in the same way as values from the command line; this allows generation of nicer help when using custom types. Can be disabled with parser.set_process_default_values(False). - Bug #960515: don't crash when generating help for callback options that specify 'type', but not 'dest' or 'metavar'. - Feature #815264: change the default help format for short options that take an argument from e.g. "-oARG" to "-o ARG"; add set_short_opt_delimiter() and set_long_opt_delimiter() methods to HelpFormatter to allow (slight) customization of the formatting. - Patch #736940: internationalize Optik: all built-in user- targeted literal strings are passed through gettext.gettext(). (If you want translations (.po files), they're not included with Python -- you'll find them in the Optik source distribution from http://optik.sourceforge.net/ .) - Bug #878453: respect $COLUMNS environment variable for wrapping help output. - Feature #988122: expand "%prog" in the 'description' passed to OptionParser, just like in the 'usage' and 'version' strings. (This is *not* done in the 'description' passed to OptionGroup.) C API ----- - PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx(): if an error occurs while loading the module, these now delete the module's entry from sys.modules. All ways of loading modules eventually call one of these, so this is an error-case change in semantics for all ways of loading modules. In rare cases, a module loader may wish to keep a module object in sys.modules despite that the module's code cannot be executed. In such cases, the module loader must arrange to reinsert the name and module object in sys.modules. PyImport_ReloadModule() has been changed to reinsert the original module object into sys.modules if the module reload fails, so that its visible semantics have not changed. - A large pile of datetime field-extraction macros is now documented, thanks to Anthony Tuininga (patch #986010). Documentation ------------- - Improved the tutorial on creating types in C. - point out the importance of reassigning data members before assigning their values - correct my misconception about return values from visitprocs. Sigh. - mention the labor saving Py_VISIT and Py_CLEAR macros. - Major rewrite of the math module docs, to address common confusions. Tests ----- - The test data files for the decimal test suite are now installed on platforms that use the Makefile. - SF patch 995225: The test file testtar.tar accidentally contained CVS keywords (like $Id$), which could cause spurious failures in test_tarfile.py depending on how the test file was checked out. What's New in Python 2.4 alpha 1? ================================= *Release date: 08-JUL-2004* Core and builtins ----------------- - weakref.ref is now the type object also known as weakref.ReferenceType; it can be subclassed like any other new-style class. There's less per-entry overhead in WeakValueDictionary objects now (one object instead of three). - Bug #951851: Python crashed when reading import table of certain Windows DLLs. - Bug #215126. The locals argument to eval(), execfile(), and exec now accept any mapping type. - marshal now shares interned strings. This change introduces a new .pyc magic. - Bug #966623. classes created with type() in an exec(, {}) don't have a __module__, but code in typeobject assumed it would always be there. - Python no longer relies on the LC_NUMERIC locale setting to be the "C" locale; as a result, it no longer tries to prevent changing the LC_NUMERIC category. - Bug #952807: Unpickling pickled instances of subclasses of datetime.date, datetime.datetime and datetime.time could yield insane objects. Thanks to Jiwon Seo for a fix. - Bug #845802: Python crashes when __init__.py is a directory. - Unicode objects received two new methods: iswide() and width(). These query East Asian width information, as specified in Unicode TR11. - Improved the tuple hashing algorithm to give fewer collisions in common cases. Fixes bug #942952. - Implemented generator expressions (PEP 289). Coded by Jiwon Seo. - Enabled the profiling of C extension functions (and builtins) - check new documentation and modified profile and bdb modules for more details - Set file.name to the object passed to open (instead of a new string) - Moved tracebackobject into traceback.h and renamed to PyTracebackObject - Optimized the byte coding for multiple assignments like "a,b=b,a" and "a,b,c=1,2,3". Improves their speed by 25% to 30%. - Limit the nested depth of a tuple for the second argument to isinstance() and issubclass() to the recursion limit of the interpreter. Fixes bug #858016 . - Optimized dict iterators, creating separate types for each and having them reveal their length. Also optimized the methods: keys(), values(), and items(). - Implemented a newcode opcode, LIST_APPEND, that simplifies the generated bytecode for list comprehensions and further improves their performance (about 35%). - Implemented rich comparisons for floats, which seems to make comparisons involving NaNs somewhat less surprising when the underlying C compiler actually implements C99 semantics. - Optimized list.extend() to save memory and no longer create intermediate sequences. Also, extend() now pre-allocates the needed memory whenever the length of the iterable is known in advance -- this halves the time to extend the list. - Optimized list resize operations to make fewer calls to the system realloc(). Significantly speeds up list appends, list pops, list comprehensions, and the list constructor (when the input iterable length is not known). - Changed the internal list over-allocation scheme. For larger lists, overallocation ranged between 3% and 25%. Now, it is a constant 12%. For smaller lists (n<8), overallocation was upto eight elements. Now, the overallocation is no more than three elements -- this improves space utilization for applications that have large numbers of small lists. - Most list bodies now get re-used rather than freed. Speeds up list instantiation and deletion by saving calls to malloc() and free(). - The dict.update() method now accepts all the same argument forms as the dict() constructor. This now includes item lists and/or keyword arguments. - Support for arbitrary objects supporting the read-only buffer interface as the co_code field of code objects (something that was only possible to create from C code) has been removed. - Made omitted callback and None equivalent for weakref.ref() and weakref.proxy(); the None case wasn't handled correctly in all cases. - Fixed problem where PyWeakref_NewRef() and PyWeakref_NewProxy() assumed that initial existing entries in an object's weakref list would not be removed while allocating a new weakref object. Since GC could be invoked at that time, however, that assumption was invalid. In a truly obscure case of GC being triggered during creation for a new weakref object for a referent which already has a weakref without a callback which is only referenced from cyclic trash, a memory error can occur. This consistently created a segfault in a debug build, but provided less predictable behavior in a release build. - input() built-in function now respects compiler flags such as __future__ statements. SF patch 876178. - Removed PendingDeprecationWarning from apply(). apply() remains deprecated, but the nuisance warning will not be issued. - At Python shutdown time (Py_Finalize()), 2.3 called cyclic garbage collection twice, both before and after tearing down modules. The call after tearing down modules has been disabled, because too much of Python has been torn down then for __del__ methods and weakref callbacks to execute sanely. The most common symptom was a sequence of uninformative messages on stderr when Python shut down, produced by threads trying to raise exceptions, but unable to report the nature of their problems because too much of the sys module had already been destroyed. - Removed FutureWarnings related to hex/oct literals and conversions and left shifts. (Thanks to Kalle Svensson for SF patch 849227.) This addresses most of the remaining semantic changes promised by PEP 237, except for repr() of a long, which still shows the trailing 'L'. The PEP appears to promise warnings for operations that changed semantics compared to Python 2.3, but this is not implemented; we've suffered through enough warnings related to hex/oct literals and I think it's best to be silent now. - For str and unicode objects, the ljust(), center(), and rjust() methods now accept an optional argument specifying a fill character other than a space. - When method objects have an attribute that can be satisfied either by the function object or by the method object, the function object's attribute usually wins. Christian Tismer pointed out that this is really a mistake, because this only happens for special methods (like __reduce__) where the method object's version is really more appropriate than the function's attribute. So from now on, all method attributes will have precedence over function attributes with the same name. - Critical bugfix, for SF bug 839548: if a weakref with a callback, its callback, and its weakly referenced object, all became part of cyclic garbage during a single run of garbage collection, the order in which they were torn down was unpredictable. It was possible for the callback to see partially-torn-down objects, leading to immediate segfaults, or, if the callback resurrected garbage objects, to resurrect insane objects that caused segfaults (or other surprises) later. In one sense this wasn't surprising, because Python's cyclic gc had no knowledge of Python's weakref objects. It does now. When weakrefs with callbacks become part of cyclic garbage now, those weakrefs are cleared first. The callbacks don't trigger then, preventing the problems. If you need callbacks to trigger, then just as when cyclic gc is not involved, you need to write your code so that weakref objects outlive the objects they weakly reference. - Critical bugfix, for SF bug 840829: if cyclic garbage collection happened to occur during a weakref callback for a new-style class instance, subtle memory corruption was the result (in a release build; in a debug build, a segfault occurred reliably very soon after). This has been repaired. - Compiler flags set in PYTHONSTARTUP are now active in __main__. - Added two built-in types, set() and frozenset(). - Added a reversed() built-in function that returns a reverse iterator over a sequence. - Added a sorted() built-in function that returns a new sorted list from any iterable. - CObjects are now mutable (on the C level) through PyCObject_SetVoidPtr. - list.sort() now supports three keyword arguments: cmp, key, and reverse. The key argument can be a function of one argument that extracts a comparison key from the original record: mylist.sort(key=str.lower). The reverse argument is a boolean value and if True will change the sort order as if the comparison arguments were reversed. In addition, the documentation has been amended to provide a guarantee that all sorts starting with Py2.3 are guaranteed to be stable (the relative order of records with equal keys is unchanged). - Added test whether wchar_t is signed or not. A signed wchar_t is not usable as internal unicode type base for Py_UNICODE since the unicode implementation assumes an unsigned type. - Fixed a bug in the cache of length-one Unicode strings that could lead to a seg fault. The specific problem occurred when an earlier, non-fatal error left an uninitialized Unicode object in the freelist. - The % formatting operator now supports '%F' which is equivalent to '%f'. This has always been documented but never implemented. - complex(obj) could leak a little memory if obj wasn't a string or number. - zip() with no arguments now returns an empty list instead of raising a TypeError exception. - obj.__contains__() now returns True/False instead of 1/0. SF patch 820195. - Python no longer tries to be smart about recursive comparisons. When comparing containers with cyclic references to themselves it will now just hit the recursion limit. See SF patch 825639. - str and unicode built-in types now have an rsplit() method that is same as split() except that it scans the string from the end working towards the beginning. See SF feature request 801847. - Fixed a bug in object.__reduce_ex__ when using protocol 2. Failure to clear the error when attempts to get the __getstate__ attribute fail caused intermittent errors and odd behavior. - buffer objects based on other objects no longer cache a pointer to the data and the data length. Instead, the appropriate tp_as_buffer method is called as necessary. - fixed: if a file is opened with an explicit buffer size >= 1, repeated close() calls would attempt to free() the buffer already free()ed on the first call. Extension modules ----------------- - Added socket.getservbyport(), and make the second argument in getservbyname() and getservbyport() optional. - time module code that deals with input POSIX timestamps will now raise ValueError if more than a second is lost in precision when the timestamp is cast to the platform C time_t type. There's no chance that the platform will do anything sensible with the result in such cases. This includes ctime(), localtime() and gmtime(). Assorted fromtimestamp() and utcfromtimestamp() methods in the datetime module were also protected. Closes bugs #919012 and 975996. - fcntl.ioctl now warns if the mutate flag is not specified. - nt now properly allows referring to UNC roots, e.g. in nt.stat(). - the weakref module now supports additional objects: array.array, sre.pattern_objects, file objects, and sockets. - operator.isMappingType() and operator.isSequenceType() now give fewer false positives. - socket.sslerror is now a subclass of socket.error . Also added socket.error to the socket module's C API. - Bug #920575: A problem where the _locale module segfaults on nl_langinfo(ERA) caused by GNU libc's illegal NULL return is fixed. - array objects now support the copy module. Also, their resizing scheme has been updated to match that used for list objects. This improves the performance (speed and memory usage) of append() operations. Also, array.array() and array.extend() now accept any iterable argument for repeated appends without needing to create another temporary array. - cStringIO.writelines() now accepts any iterable argument and writes the lines one at a time rather than joining them and writing once. Made a parallel change to StringIO.writelines(). Saves memory and makes suitable for use with generator expressions. - time.strftime() now checks that the values in its time tuple argument are within the proper boundaries to prevent possible crashes from the platform's C library implementation of strftime(). Can possibly break code that uses values outside the range that didn't cause problems previously (such as sitting day of year to 0). Fixes bug #897625. - The socket module now supports Bluetooth sockets, if the system has <bluetooth/bluetooth.h> - Added a collections module containing a new datatype, deque(), offering high-performance, thread-safe, memory friendly appends and pops on either side of the deque. - Several modules now take advantage of collections.deque() for improved performance: Queue, mutex, shlex, threading, and pydoc. - The operator module has two new functions, attrgetter() and itemgetter() which are useful for creating fast data extractor functions for map(), list.sort(), itertools.groupby(), and other functions that expect a function argument. - socket.SHUT_{RD,WR,RDWR} was added. - os.getsid was added. - The pwd module incorrectly advertised its struct type as struct_pwent; this has been renamed to struct_passwd. (The old name is still supported for backwards compatibility.) - The xml.parsers.expat module now provides Expat 1.95.7. - socket.IPPROTO_IPV6 was added. - readline.clear_history was added. - select.select() now accepts sequences for its first three arguments. - cStringIO now supports the f.closed attribute. - The signal module now exposes SIGRTMIN and SIGRTMAX (if available). - curses module now supports use_default_colors(). [patch #739124] - Bug #811028: ncurses.h breakage on FreeBSD/MacOS X - Bug #814613: INET_ADDRSTRLEN fix needed for all compilers on SGI - Implemented non-recursive SRE matching scheme (#757624). - Implemented (?(id/name)yes|no) support in SRE (#572936). - random.seed() with no arguments or None uses time.time() as a default seed. Modified to match Py2.2 behavior and use fractional seconds so that successive runs are more likely to produce different sequences. - random.Random has a new method, getrandbits(k), which returns an int with k random bits. This method is now an optional part of the API for user defined generators. Any generator that defines genrandbits() can now use randrange() for ranges with a length >= 2**53. Formerly, randrange would return only even numbers for ranges that large (see SF bug #812202). Generators that do not define genrandbits() now issue a warning when randrange() is called with a range that large. - itertools has a new function, groupby() for aggregating iterables into groups sharing the same key (as determined by a key function). It offers some of functionality of SQL's groupby keyword and of the Unix uniq filter. - itertools now has a new tee() function which produces two independent iterators from a single iterable. - itertools.izip() with no arguments now returns an empty iterator instead of raising a TypeError exception. - Fixed #853061: allow BZ2Compressor.compress() to receive an empty string as parameter. Library ------- - Added a new module: cProfile, a C profiler with the same interface as the profile module. cProfile avoids some of the drawbacks of the hotshot profiler and provides a bit more information than the other two profilers. Based on "lsprof" (patch #1212837). - Bug #1266283: The new function "lexists" is now in os.path.__all__. - Bug #981530: Fix UnboundLocalError in shutil.rmtree(). This affects the documented behavior: the function passed to the onerror() handler can now also be os.listdir. - Bug #754449: threading.Thread objects no longer mask exceptions raised during interpreter shutdown with another exception from attempting to handle the original exception. - Added decimal.py per PEP 327. - Bug #981299: rsync is now a recognized protocol in urlparse that uses a "netloc" portion of a URL. - Bug #919012: shutil.move() will not try to move a directory into itself. Thanks Johannes Gijsbers. - Bug #934282: pydoc.stripid() is now case-insensitive. Thanks Robin Becker. - Bug #823209: cmath.log() now takes an optional base argument so that its API matches math.log(). - Bug #957381: distutils bdist_rpm no longer fails on recent RPM versions that generate a -debuginfo.rpm - os.path.devnull has been added for all supported platforms. - Fixed #877165: distutils now picks the right C++ compiler command on cygwin and mingw32. - urllib.urlopen().readline() now handles HTTP/0.9 correctly. - refactored site.py into functions. Also wrote regression tests for the module. - The distutils install command now supports the --home option and installation scheme for all platforms. - asyncore.loop now has a repeat count parameter that defaults to looping forever. - The distutils sdist command now ignores all .svn directories, in addition to CVS and RCS directories. .svn directories hold administrative files for the Subversion source control system. - Added a new module: cookielib. Automatic cookie handling for HTTP clients. Also, support for cookielib has been added to urllib2, so urllib2.urlopen() can transparently handle cookies. - stringprep.py now uses built-in set() instead of sets.Set(). - Bug #876278: Unbounded recursion in modulefinder - Bug #780300: Swap public and system ID in LexicalHandler.startDTD. Applications relying on the wrong order need to be corrected. - Bug #926075: Fixed a bug that returns a wrong pattern object for a string or unicode object in sre.compile() when a different type pattern with the same value exists. - Added countcallers arg to trace.Trace class (--trackcalls command line arg when run from the command prompt). - Fixed a caching bug in platform.platform() where the argument of 'terse' was not taken into consideration when caching value. - Added two new command-line arguments for profile (output file and default sort). - Added global runctx function to profile module - Add hlist missing entryconfigure and entrycget methods. - The ptcp154 codec was added for Kazakh character set support. - Support non-anonymous ftp URLs in urllib2. - The encodings package will now apply codec name aliases first before starting to try the import of the codec module. This simplifies overriding built-in codecs with external packages, e.g. the included CJK codecs with the JapaneseCodecs package, by adjusting the aliases dictionary in encodings.aliases accordingly. - base64 now supports RFC 3548 Base16, Base32, and Base64 encoding and decoding standards. - urllib2 now supports processors. A processor is a handler that implements an xxx_request or xxx_response method. These methods are called for all requests. - distutils compilers now compile source files in the same order as they are passed to the compiler. - pprint.pprint() and pprint.pformat() now have additional parameters indent, width and depth. - Patch #750542: pprint now will pretty print subclasses of list, tuple and dict too, as long as they don't overwrite __repr__(). - Bug #848614: distutils' msvccompiler fails to find the MSVC6 compiler because of incomplete registry entries. - httplib.HTTP.putrequest now offers to omit the implicit Accept-Encoding. - Patch #841977: modulefinder didn't find extension modules in packages - imaplib.IMAP4.thread was added. - Plugged a minor hole in tempfile.mktemp() due to the use of os.path.exists(), switched to using os.lstat() directly if possible. - bisect.py and heapq.py now have underlying C implementations for better performance. - heapq.py has two new functions, nsmallest() and nlargest(). - traceback.format_exc has been added (similar to print_exc but it returns a string). - xmlrpclib.MultiCall has been added. - poplib.POP3_SSL has been added. - tmpfile.mkstemp now returns an absolute path even if dir is relative. - urlparse is RFC 2396 compliant. - The fieldnames argument to the csv module's DictReader constructor is now optional. If omitted, the first row of the file will be used as the list of fieldnames. - encodings.bz2_codec was added for access to bz2 compression using "a long string".encode('bz2') - Various improvements to unittest.py, realigned with PyUnit CVS. - dircache now passes exceptions to the caller, instead of returning empty lists. - The bsddb module and dbhash module now support the iterator and mapping protocols which make them more substitutable for dictionaries and shelves. - The csv module's DictReader and DictWriter classes now accept keyword arguments. This was an omission in the initial implementation. - The email package handles some RFC 2231 parameters with missing CHARSET fields better. It also includes a patch to parameter parsing when semicolons appear inside quotes. - sets.py now runs under Py2.2. In addition, the argument restrictions for most set methods (but not the operators) have been relaxed to allow any iterable. - _strptime.py now has a behind-the-scenes caching mechanism for the most recent TimeRE instance used along with the last five unique directive patterns. The overall module was also made more thread-safe. - random.cunifvariate() and random.stdgamma() were deprecated in Py2.3 and removed in Py2.4. - Bug #823328: urllib2.py's HTTP Digest Auth support works again. - Patch #873597: CJK codecs are imported into rank of default codecs. Tools/Demos ----------- - A hotshotmain script was added to the Tools/scripts directory that makes it easy to run a script under control of the hotshot profiler. - The db2pickle and pickle2db scripts can now dump/load gdbm files. - The file order on the command line of the pickle2db script was reversed. It is now [ picklefile ] dbfile. This provides better symmetry with db2pickle. The file arguments to both scripts are now source followed by destination in situations where both files are given. - The pydoc script will display a link to the module documentation for modules determined to be part of the core distribution. The documentation base directory defaults to http://www.python.org/doc/current/lib/ but can be changed by setting the PYTHONDOCS environment variable. - texcheck.py now detects double word errors. - md5sum.py mistakenly opened input files in text mode by default, a silent and dangerous change from previous releases. It once again opens input files in binary mode by default. The -t and -b flags remain for compatibility with the 2.3 release, but -b is the default now. - py-electric-colon now works when pending-delete/delete-selection mode is in effect - py-help-at-point is no longer bound to the F1 key - it's still bound to C-c C-h - Pynche was fixed to not crash when there is no ~/.pynche file and no -d option was given. Build ----- - Bug #978645: Modules/getpath.c now builds properly in --disable-framework build under OS X. - Profiling using gprof is now available if Python is configured with --enable-profiling. - Profiling the VM using the Pentium TSC is now possible if Python is configured --with-tsc. - In order to find libraries, setup.py now also looks in /lib64, for use on AMD64. - Bug #934635: Fixed a bug where the configure script couldn't detect getaddrinfo() properly if the KAME stack had SCTP support. - Support for missing ANSI C header files (limits.h, stddef.h, etc) was removed. - Systems requiring the D4, D6 or D7 variants of pthreads are no longer supported (see PEP 11). - Universal newline support can no longer be disabled (see PEP 11). - Support for DGUX, SunOS 4, IRIX 4 and Minix was removed (see PEP 11). - Support for systems requiring --with-dl-dld or --with-sgi-dl was removed (see PEP 11). - Tests for sizeof(char) were removed since ANSI C mandates that sizeof(char) must be 1. C API ----- - Thanks to Anthony Tuininga, the datetime module now supplies a C API containing type-check macros and constructors. See new docs in the Python/C API Reference Manual for details. - Private function _PyTime_DoubleToTimet added, to convert a Python timestamp (C double) to platform time_t with some out-of-bounds checking. Declared in new header file timefuncs.h. It would be good to expose some other internal timemodule.c functions there. - New public functions PyEval_EvaluateFrame and PyGen_New to expose generator objects. - New public functions Py_IncRef() and Py_DecRef(), exposing the functionality of the Py_XINCREF() and Py_XDECREF macros. Useful for runtime dynamic embedding of Python. See patch #938302, by Bob Ippolito. - Added a new macro, PySequence_Fast_ITEMS, which retrieves a fast sequence's underlying array of PyObject pointers. Useful for high speed looping. - Created a new method flag, METH_COEXIST, which causes a method to be loaded even if already defined by a slot wrapper. This allows a __contains__ method, for example, to co-exist with a defined sq_contains slot. This is helpful because the PyCFunction can take advantage of optimized calls whenever METH_O or METH_NOARGS flags are defined. - Added a new function, PyDict_Contains(d, k) which is like PySequence_Contains() but is specific to dictionaries and executes about 10% faster. - Added three new macros: Py_RETURN_NONE, Py_RETURN_TRUE, and Py_RETURN_FALSE. Each return the singleton they mention after Py_INCREF()ing them. - Added a new function, PyTuple_Pack(n, ...) for constructing tuples from a variable length argument list of Python objects without having to invoke the more complex machinery of Py_BuildValue(). PyTuple_Pack(3, a, b, c) is equivalent to Py_BuildValue("(OOO)", a, b, c). Windows ------- - The _winreg module could segfault when reading very large registry values, due to unchecked alloca() calls (SF bug 851056). The fix is uses either PyMem_Malloc(n) or PyString_FromStringAndSize(NULL, n), as appropriate, followed by a size check. - file.truncate() could misbehave if the file was open for update (modes r+, rb+, w+, wb+), and the most recent file operation before the truncate() call was an input operation. SF bug 801631. What's New in Python 2.3 final? =============================== *Release date: 29-Jul-2003* IDLE ---- - Bug 778400: IDLE hangs when selecting "Edit with IDLE" from explorer. This was unique to Windows, and was fixed by adding an -n switch to the command the Windows installer creates to execute "Edit with IDLE" context-menu actions. - IDLE displays a new message upon startup: some "personal firewall" kinds of programs (for example, ZoneAlarm) open a dialog of their own when any program opens a socket. IDLE does use sockets, talking on the computer's internal loopback interface. This connection is not visible on any external interface and no data is sent to or received from the Internet. So, if you get such a dialog when opening IDLE, asking whether to let pythonw.exe talk to address 127.0.0.1, say yes, and rest assured no communication external to your machine is taking place. If you don't allow it, IDLE won't be able to start. What's New in Python 2.3 release candidate 2? ============================================= *Release date: 24-Jul-2003* Core and builtins ----------------- - It is now possible to import from zipfiles containing additional data bytes before the zip compatible archive. Zipfiles containing a comment at the end are still unsupported. Extension modules ----------------- - A longstanding bug in the parser module's initialization could cause fatal internal refcount confusion when the module got initialized more than once. This has been fixed. - Fixed memory leak in pyexpat; using the parser's ParseFile() method with open files that aren't instances of the standard file type caused an instance of the bound .read() method to be leaked on every call. - Fixed some leaks in the locale module. Library ------- - Lib/encodings/rot_13.py when used as a script, now more properly uses the first Python interpreter on your path. - Removed caching of TimeRE (and thus LocaleTime) in _strptime.py to fix a locale related bug in the test suite. Although another patch was needed to actually fix the problem, the cache code was not restored. IDLE ---- - Calltips patches. Build ----- - For MacOSX, added -mno-fused-madd to BASECFLAGS to fix test_coercion on Panther (OSX 10.3). C API ----- Windows ------- - The tempfile module could do insane imports on Windows if PYTHONCASEOK was set, making temp file creation impossible. Repaired. - Add a patch to workaround pthread_sigmask() bugs in Cygwin. Mac --- - Various fixes to pimp. - Scripts runs with pythonw no longer had full window manager access. - Don't force boot-disk-only install, for reasons unknown it causes more problems than it solves. What's New in Python 2.3 release candidate 1? ============================================= *Release date: 18-Jul-2003* Core and builtins ----------------- - The new function sys.getcheckinterval() returns the last value set by sys.setcheckinterval(). - Several bugs in the symbol table phase of the compiler have been fixed. Errors could be lost and compilation could fail without reporting an error. SF patch 763201. - The interpreter is now more robust about importing the warnings module. In an executable generated by freeze or similar programs, earlier versions of 2.3 would fail if the warnings module could not be found on the file system. Fixes SF bug 771097. - A warning about assignments to module attributes that shadow builtins, present in earlier releases of 2.3, has been removed. - It is not possible to create subclasses of built-in types like str and tuple that define an itemsize. Earlier releases of Python 2.3 allowed this by mistake, leading to crashes and other problems. - The thread_id is now initialized to 0 in a non-thread build. SF bug 770247. - SF bug 762891: "del p[key]" on proxy object no longer raises SystemError. Extension modules ----------------- - weakref.proxy() can now handle "del obj[i]" for proxy objects defining __delitem__. Formerly, it generated a SystemError. - SSL no longer crashes the interpreter when the remote side disconnects. - On Unix the mmap module can again be used to map device files. - time.strptime now exclusively uses the Python implementation contained within the _strptime module. - The print slot of weakref proxy objects was removed, because it was not consistent with the object's repr slot. - The mmap module only checks file size for regular files, not character or block devices. SF patch 708374. - The cPickle Pickler garbage collection support was fixed to traverse the find_class attribute, if present. - There are several fixes for the bsddb3 wrapper module. bsddb3 no longer crashes if an environment is closed before a cursor (SF bug 763298). The DB and DBEnv set_get_returns_none function was extended to take a level instead of a boolean flag. The new level 2 means that in addition, cursor.set()/.get() methods return None instead of raising an exception. A typo was fixed in DBCursor.join_item(), preventing a crash. Library ------- - distutils now supports MSVC 7.1 - doctest now examines all docstrings by default. Previously, it would skip over functions with private names (as indicated by the underscore naming convention). The old default created too much of a risk that user tests were being skipped inadvertently. Note, this change could break code in the unlikely case that someone had intentionally put failing tests in the docstrings of private functions. The breakage is easily fixable by specifying the old behavior when calling testmod() or Tester(). - There were several fixes to the way dumbdbms are closed. It's vital that a dumbdbm database be closed properly, else the on-disk data and directory files can be left in mutually inconsistent states. dumbdbm.py's _Database.__del__() method attempted to close the database properly, but a shutdown race in _Database._commit() could prevent this from working, so that a program trusting __del__() to get the on-disk files in synch could be badly surprised. The race has been repaired. A sync() method was also added so that shelve can guarantee data is written to disk. The close() method can now be called more than once without complaint. - The classes in threading.py are now new-style classes. That they weren't before was an oversight. - The urllib2 digest authentication handlers now define the correct auth_header. The earlier versions would fail at runtime. - SF bug 763023: fix uncaught ZeroDivisionError in difflib ratio methods when there are no lines. - SF bug 763637: fix exception in Tkinter with after_cancel which could occur with Tk 8.4 - SF bug 770601: CGIHTTPServer.py now passes the entire environment to child processes. - SF bug 765238: add filter to fnmatch's __all__. - SF bug 748201: make time.strptime() error messages more helpful. - SF patch 764470: Do not dump the args attribute of a Fault object in xmlrpclib. - SF patch 549151: urllib and urllib2 now redirect POSTs on 301 responses. - SF patch 766650: The whichdb module was fixed to recognize dbm files generated by gdbm on OS/2 EMX. - SF bugs 763047 and 763052: fixes bug of timezone value being left as -1 when ``time.tzname[0] == time.tzname[1] and not time.daylight`` is true when it should only when time.daylight is true. - SF bug 764548: re now allows subclasses of str and unicode to be used as patterns. - SF bug 763637: In Tkinter, change after_cancel() to handle tuples of varying sizes. Tk 8.4 returns a different number of values than Tk 8.3. - SF bug 763023: difflib.ratio() did not catch zero division. - The Queue module now has an __all__ attribute. Tools/Demos ----------- - See Lib/idlelib/NEWS.txt for IDLE news. - SF bug 753592: webchecker/wsgui now handles user supplied directories. - The trace.py script has been removed. It is now in the standard library. Build ----- - Python now compiles with -fno-strict-aliasing if possible (SF bug 766696). - The socket module compiles on IRIX 6.5.10. - An irix64 system is treated the same way as an irix6 system (SF patch 764560). - Several definitions were missing on FreeBSD 5.x unless the __BSD_VISIBLE symbol was defined. configure now defines it as needed. C API ----- - Unicode objects now support mbcs as a built-in encoding, so the C API can use it without deferring to the encodings package. Windows ------- - The Windows implementation of PyThread_start_new_thread() never checked error returns from Windows functions correctly. As a result, it could claim to start a new thread even when the Microsoft _beginthread() function failed (due to "too many threads" -- this is on the order of thousands when it happens). In these cases, the Python exception :: thread.error: can't start new thread is raised now. - SF bug 766669: Prevent a GPF on interpreter exit when sockets are in use. The interpreter now calls WSACleanup() from Py_Finalize() instead of from DLL teardown. Mac --- - Bundlebuilder now inherits default values in the right way. It was previously possible for app bundles to get a type of "BNDL" instead of "APPL." Other improvements include, a --build-id option to specify the CFBundleIdentifier and using the --python option to set the executable in the bundle. - Fixed two bugs in MacOSX framework handling. - pythonw did not allow user interaction in 2.3rc1, this has been fixed. - Python is now compiled with -mno-fused-madd, making all tests pass on Panther. What's New in Python 2.3 beta 2? ================================ *Release date: 29-Jun-2003* Core and builtins ----------------- - A program can now set the environment variable PYTHONINSPECT to some string value in Python, and cause the interpreter to enter the interactive prompt at program exit, as if Python had been invoked with the -i option. - list.index() now accepts optional start and stop arguments. Similar changes were made to UserList.index(). SF feature request 754014. - SF patch 751998 fixes an unwanted side effect of the previous fix for SF bug 742860 (the next item). - SF bug 742860: "WeakKeyDictionary __delitem__ uses iterkeys". This wasn't threadsafe, was very inefficient (expected time O(len(dict)) instead of O(1)), and could raise a spurious RuntimeError if another thread mutated the dict during __delitem__, or if a comparison function mutated it. It also neglected to raise KeyError when the key wasn't present; didn't raise TypeError when the key wasn't of a weakly referencable type; and broke various more-or-less obscure dict invariants by using a sequence of equality comparisons over the whole set of dict keys instead of computing the key's hash code to narrow the search to those keys with the same hash code. All of these are considered to be bugs. A new implementation of __delitem__ repairs all that, but note that fixing these bugs may change visible behavior in code relying (whether intentionally or accidentally) on old behavior. - SF bug 734869: Fixed a compiler bug that caused a fatal error when compiling a list comprehension that contained another list comprehension embedded in a lambda expression. - SF bug 705231: builtin pow() no longer lets the platform C pow() raise -1.0 to integer powers, because (at least) glibc gets it wrong in some cases. The result should be -1.0 if the power is odd and 1.0 if the power is even, and any float with a sufficiently large exponent is (mathematically) an exact even integer. - SF bug 759227: A new-style class that implements __nonzero__() must return a bool or int (but not an int subclass) from that method. This matches the restriction on classic classes. - The encoding attribute has been added for file objects, and set to the terminal encoding on Unix and Windows. - The softspace attribute of file objects became read-only by oversight. It's writable again. - Reverted a 2.3 beta 1 change to iterators for subclasses of list and tuple. By default, the iterators now access data elements directly instead of going through __getitem__. If __getitem__ access is preferred, then __iter__ can be overridden. - SF bug 735247: The staticmethod and super types participate in garbage collection. Before this change, it was possible for leaks to occur in functions with non-global free variables that used these types. Extension modules ----------------- - the socket module has a new exception, socket.timeout, to allow timeouts to be handled separately from other socket errors. - SF bug 751276: cPickle has fixed to propagate exceptions raised in user code. In earlier versions, cPickle caught and ignored any exception when it performed operations that it expected to raise specific exceptions like AttributeError. - cPickle Pickler and Unpickler objects now participate in garbage collection. - mimetools.choose_boundary() could return duplicate strings at times, especially likely on Windows. The strings returned are now guaranteed unique within a single program run. - thread.interrupt_main() raises KeyboardInterrupt in the main thread. dummy_thread has also been modified to try to simulate the behavior. - array.array.insert() now treats negative indices as being relative to the end of the array, just like list.insert() does. (SF bug #739313) - The datetime module classes datetime, time, and timedelta are now properly subclassable. - _tkinter.{get|set}busywaitinterval was added. - itertools.islice() now accepts stop=None as documented. Fixes SF bug #730685. - the bsddb185 module is built in one restricted instance - /usr/include/db.h exists and defines HASHVERSION to be 2. This is true for many BSD-derived systems. Library ------- - Some happy doctest extensions from Jim Fulton have been added to doctest.py. These are already being used in Zope3. The two primary ones: doctest.debug(module, name) extracts the doctests from the named object in the given module, puts them in a temp file, and starts pdb running on that file. This is great when a doctest fails. doctest.DocTestSuite(module=None) returns a synthesized unittest TestSuite instance, to be run by the unittest framework, which runs all the doctests in the module. This allows writing tests in doctest style (which can be clearer and shorter than writing tests in unittest style), without losing unittest's powerful testing framework features (which doctest lacks). - For compatibility with doctests created before 2.3, if an expected output block consists solely of "1" and the actual output block consists solely of "True", it's accepted as a match; similarly for "0" and "False". This is quite un-doctest-like, but is practical. The behavior can be disabled by passing the new doctest module constant DONT_ACCEPT_TRUE_FOR_1 to the new optionflags optional argument. - ZipFile.testzip() now only traps BadZipfile exceptions. Previously, a bare except caught to much and reported all errors as a problem in the archive. - The logging module now has a new function, makeLogRecord() making LogHandler easier to interact with DatagramHandler and SocketHandler. - The cgitb module has been extended to support plain text display (SF patch 569574). - A brand new version of IDLE (from the IDLEfork project at SourceForge) is now included as Lib/idlelib. The old Tools/idle is no more. - Added a new module: trace (documentation missing). This module used to be distributed in Tools/scripts. It uses sys.settrace() to trace code execution -- either function calls or individual lines. It can generate tracing output during execution or a post-mortem report of code coverage. - The threading module has new functions settrace() and setprofile() that cooperate with the functions of the same name in the sys module. A function registered with the threading module will be used for all threads it creates. The new trace module uses this to provide tracing for code running in threads. - copy.py: applied SF patch 707900, fixing bug 702858, by Steven Taschuk. Copying a new-style class that had a reference to itself didn't work. (The same thing worked fine for old-style classes.) Builtin functions are now treated as atomic, fixing bug #746304. - difflib.py has two new functions: context_diff() and unified_diff(). - More fixes to urllib (SF 549151): (a) When redirecting, always use GET. This is common practice and more-or-less sanctioned by the HTTP standard. (b) Add a handler for 307 redirection, which becomes an error for POST, but a regular redirect for GET and HEAD - Added optional 'onerror' argument to os.walk(), to control error handling. - inspect.is{method|data}descriptor was added, to allow pydoc display __doc__ of data descriptors. - Fixed socket speed loss caused by use of the _socketobject wrapper class in socket.py. - timeit.py now checks the current directory for imports. - urllib2.py now knows how to order proxy classes, so the user doesn't have to insert it in front of other classes, nor do dirty tricks like inserting a "dummy" HTTPHandler after a ProxyHandler when building an opener with proxy support. - Iterators have been added for dbm keys. - random.Random objects can now be pickled. Tools/Demos ----------- - pydoc now offers help on keywords and topics. - Tools/idle is gone; long live Lib/idlelib. - diff.py prints file diffs in context, unified, or ndiff formats, providing a command line interface to difflib.py. - texcheck.py is a new script for making a rough validation of Python LaTeX files. Build ----- - Setting DESTDIR during 'make install' now allows specifying a different root directory. C API ----- - PyType_Ready(): If a type declares that it participates in gc (Py_TPFLAGS_HAVE_GC), and its base class does not, and its base class's tp_free slot is the default _PyObject_Del, and type does not define a tp_free slot itself, _PyObject_GC_Del is assigned to type->tp_free. Previously _PyObject_Del was inherited, which could at best lead to a segfault. In addition, if even after this magic the type's tp_free slot is _PyObject_Del or NULL, and the type is a base type (Py_TPFLAGS_BASETYPE), TypeError is raised: since the type is a base type, its dealloc function must call type->tp_free, and since the type is gc'able, tp_free must not be NULL or _PyObject_Del. - PyThreadState_SetAsyncExc(): A new API (deliberately accessible only from C) to interrupt a thread by sending it an exception. It is intentional that you have to write your own C extension to call it from Python. New platforms ------------- None this time. Tests ----- - test_imp rewritten so that it doesn't raise RuntimeError if run as a side effect of being imported ("import test.autotest"). Windows ------- - The Windows installer ships with Tcl/Tk 8.4.3 (upgraded from 8.4.1). - The installer always suggested that Python be installed on the C: drive, due to a hardcoded "C:" generated by the Wise installation wizard. People with machines where C: is not the system drive usually want Python installed on whichever drive is their system drive instead. We removed the hardcoded "C:", and two testers on machines where C: is not the system drive report that the installer now suggests their system drive. Note that you can always select the directory you want in the "Select Destination Directory" dialog -- that's what it's for. Mac --- - There's a new module called "autoGIL", which offers a mechanism to automatically release the Global Interpreter Lock when an event loop goes to sleep, allowing other threads to run. It's currently only supported on OSX, in the Mach-O version. - The OSA modules now allow direct access to properties of the toplevel application class (in AppleScript terminology). - The Package Manager can now update itself. SourceForge Bugs and Patches Applied ------------------------------------ 430160, 471893, 501716, 542562, 549151, 569574, 595837, 596434, 598163, 604210, 604716, 610332, 612627, 614770, 620190, 621891, 622042, 639139, 640236, 644345, 649742, 649742, 658233, 660022, 661318, 661676, 662807, 662923, 666219, 672855, 678325, 682347, 683486, 684981, 685773, 686254, 692776, 692959, 693094, 696777, 697989, 700827, 703666, 708495, 708604, 708901, 710733, 711902, 713722, 715782, 718286, 719359, 719367, 723136, 723831, 723962, 724588, 724767, 724767, 725942, 726150, 726446, 726869, 727051, 727719, 727719, 727805, 728277, 728563, 728656, 729096, 729103, 729293, 729297, 729300, 729317, 729395, 729622, 729817, 730170, 730296, 730594, 730685, 730826, 730963, 731209, 731403, 731504, 731514, 731626, 731635, 731643, 731644, 731644, 731689, 732124, 732143, 732234, 732284, 732284, 732479, 732761, 732783, 732951, 733667, 733781, 734118, 734231, 734869, 735051, 735293, 735527, 735613, 735694, 736962, 736962, 737970, 738066, 739313, 740055, 740234, 740301, 741806, 742126, 742741, 742860, 742860, 742911, 744041, 744104, 744238, 744687, 744877, 745055, 745478, 745525, 745620, 746012, 746304, 746366, 746801, 746953, 747348, 747667, 747954, 748846, 748849, 748973, 748975, 749191, 749210, 749759, 749831, 749911, 750008, 750092, 750542, 750595, 751038, 751107, 751276, 751451, 751916, 751941, 751956, 751998, 752671, 753451, 753602, 753617, 753845, 753925, 754014, 754340, 754447, 755031, 755087, 755147, 755245, 755683, 755987, 756032, 756996, 757058, 757229, 757818, 757821, 757822, 758112, 758910, 759227, 759889, 760257, 760703, 760792, 761104, 761337, 761519, 761830, 762455 What's New in Python 2.3 beta 1? ================================ *Release date: 25-Apr-2003* Core and builtins ----------------- - New format codes B, H, I, k and K have been implemented for PyArg_ParseTuple and PyBuild_Value. - New built-in function sum(seq, start=0) returns the sum of all the items in iterable object seq, plus start (items are normally numbers, and cannot be strings). - bool() called without arguments now returns False rather than raising an exception. This is consistent with calling the constructors for the other built-in types -- called without argument they all return the false value of that type. (SF patch #724135) - In support of PEP 269 (making the pgen parser generator accessible from Python), some changes to the pgen code structure were made; a few files that used to be linked only with pgen are now linked with Python itself. - The repr() of a weakref object now shows the __name__ attribute of the referenced object, if it has one. - super() no longer ignores data descriptors, except __class__. See the thread started at http://mail.python.org/pipermail/python-dev/2003-April/034338.html - list.insert(i, x) now interprets negative i as it would be interpreted by slicing, so negative values count from the end of the list. This was the only place where such an interpretation was not placed on a list index. - range() now works even if the arguments are longs with magnitude larger than sys.maxint, as long as the total length of the sequence fits. E.g., range(2**100, 2**101, 2**100) is the following list: [1267650600228229401496703205376L]. (SF patch #707427.) - Some horridly obscure problems were fixed involving interaction between garbage collection and old-style classes with "ambitious" getattr hooks. If an old-style instance didn't have a __del__ method, but did have a __getattr__ hook, and the instance became reachable only from an unreachable cycle, and the hook resurrected or deleted unreachable objects when asked to resolve "__del__", anything up to a segfault could happen. That's been repaired. - dict.pop now takes an optional argument specifying a default value to return if the key is not in the dict. If a default is not given and the key is not found, a KeyError will still be raised. Parallel changes were made to UserDict.UserDict and UserDict.DictMixin. [SF patch #693753] (contributed by Michael Stone.) - sys.getfilesystemencoding() was added to expose Py_FileSystemDefaultEncoding. - New function sys.exc_clear() clears the current exception. This is rarely needed, but can sometimes be useful to release objects referenced by the traceback held in sys.exc_info()[2]. (SF patch #693195.) - On 64-bit systems, a dictionary could contain duplicate long/int keys if the key value was larger than 2**32. See SF bug #689659. - Fixed SF bug #663074. The codec system was using global static variables to store internal data. As a result, any attempts to use the unicode system with multiple active interpreters, or successive interpreter executions, would fail. - "%c" % u"a" now returns a unicode string instead of raising a TypeError. u"%c" % 0xffffffff now raises an OverflowError instead of a ValueError to be consistent with "%c" % 256. See SF patch #710127. Extension modules ----------------- - The socket module now provides the functions inet_pton and inet_ntop for converting between string and packed representation of IP addresses. There is also a new module variable, has_ipv6, which is True iff the current Python has IPv6 support. See SF patch #658327. - Tkinter wrappers around Tcl variables now pass objects directly to Tcl, instead of first converting them to strings. - The .*? pattern in the re module is now special-cased to avoid the recursion limit. (SF patch #720991 -- many thanks to Gary Herron and Greg Chapman.) - New function sys.call_tracing() allows pdb to debug code recursively. - New function gc.get_referents(obj) returns a list of objects directly referenced by obj. In effect, it exposes what the object's tp_traverse slot does, and can be helpful when debugging memory leaks. - The iconv module has been removed from this release. - The platform-independent routines for packing floats in IEEE formats (struct.pack's <f, >f, <d, and >d codes; pickle and cPickle's protocol 1 pickling of floats) ignored that rounding can cause a carry to propagate. The worst consequence was that, in rare cases, <f and >f could produce strings that, when unpacked again, were a factor of 2 away from the original float. This has been fixed. See SF bug #705836. - New function time.tzset() provides access to the C library tzset() function, if supported. (SF patch #675422.) - Using createfilehandler, deletefilehandler, createtimerhandler functions on Tkinter.tkinter (_tkinter module) no longer crashes the interpreter. See SF bug #692416. - Modified the fcntl.ioctl() function to allow modification of a passed mutable buffer (for details see the reference documentation). - Made user requested changes to the itertools module. Subsumed the times() function into repeat(). Added chain() and cycle(). - The rotor module is now deprecated; the encryption algorithm it uses is not believed to be secure, and including crypto code with Python has implications for exporting and importing it in various countries. - The socket module now always uses the _socketobject wrapper class, even on platforms which have dup(2). The makefile() method is built directly on top of the socket without duplicating the file descriptor, allowing timeouts to work properly. Library ------- - New generator function os.walk() is an easy-to-use alternative to os.path.walk(). See os module docs for details. os.path.walk() isn't deprecated at this time, but may become deprecated in a future release. - Added new module "platform" which provides a wide range of tools for querying platform dependent features. - netrc now allows ASCII punctuation characters in passwords. - shelve now supports the optional writeback argument, and exposes pickle protocol versions. - Several methods of nntplib.NNTP have grown an optional file argument which specifies a file where to divert the command's output (already supported by the body() method). (SF patch #720468) - The self-documenting XML server library DocXMLRPCServer was added. - Support for internationalized domain names has been added through the 'idna' and 'punycode' encodings, the 'stringprep' module, the 'mkstringprep' tool, and enhancements to the socket and httplib modules. - htmlentitydefs has two new dictionaries: name2codepoint maps HTML entity names to Unicode codepoints (as integers). codepoint2name is the reverse mapping. See SF patch #722017. - pdb has a new command, "debug", which lets you step through arbitrary code from the debugger's (pdb) prompt. - unittest.failUnlessEqual and its equivalent unittest.assertEqual now return 'not a == b' rather than 'a != b'. This gives the desired result for classes that define __eq__ without defining __ne__. - sgmllib now supports SGML marked sections, in particular the MS Office extensions. - The urllib module now offers support for the iterator protocol. SF patch 698520 contributed by Brett Cannon. - New module timeit provides a simple framework for timing the execution speed of expressions and statements. - sets.Set objects now support mixed-type __eq__ and __ne__, instead of raising TypeError. If x is a Set object and y is a non-Set object, x == y is False, and x != y is True. This is akin to the change made for mixed-type comparisons of datetime objects in 2.3a2; more info about the rationale is in the NEWS entry for that. See also SF bug report <http://www.python.org/sf/693121>. - On Unix platforms, if os.listdir() is called with a Unicode argument, it now returns Unicode strings. (This behavior was added earlier to the Windows NT/2k/XP version of os.listdir().) - Distutils: both 'py_modules' and 'packages' keywords can now be specified in core.setup(). Previously you could supply one or the other, but not both of them. (SF patch #695090 from Bernhard Herzog) - New csv package makes it easy to read/write CSV files. - Module shlex has been extended to allow posix-like shell parsings, including a split() function for easy spliting of quoted strings and commands. An iterator interface was also implemented. Tools/Demos ----------- - New script combinerefs.py helps analyze new PYTHONDUMPREFS output. See the module docstring for details. Build ----- - Fix problem building on OSF1 because the compiler only accepted preprocessor directives that start in column 1. (SF bug #691793.) C API ----- - Added PyGC_Collect(), equivalent to calling gc.collect(). - PyThreadState_GetDict() was changed not to raise an exception or issue a fatal error when no current thread state is available. This makes it possible to print dictionaries when no thread is active. - LONG_LONG was renamed to PY_LONG_LONG. Extensions that use this and need compatibility with previous versions can use this: #ifndef PY_LONG_LONG #define PY_LONG_LONG LONG_LONG #endif - Added PyObject_SelfIter() to fill the tp_iter slot for the typical case where the method returns its self argument. - The extended type structure used for heap types (new-style classes defined by Python code using a class statement) is now exported from object.h as PyHeapTypeObject. (SF patch #696193.) New platforms ------------- None this time. Tests ----- - test_timeout now requires -u network to be passed to regrtest to run. See SF bug #692988. Windows ------- - os.fsync() now exists on Windows, and calls the Microsoft _commit() function. - New function winsound.MessageBeep() wraps the Win32 API MessageBeep(). Mac --- - os.listdir() now returns Unicode strings on MacOS X when called with a Unicode argument. See the general news item under "Library". - A new method MacOS.WMAvailable() returns true if it is safe to access the window manager, false otherwise. - EasyDialogs dialogs are now movable-modal, and if the application is currently in the background they will ask to be moved to the foreground before displaying. - OSA Scripting support has improved a lot, and gensuitemodule.py can now be used by mere mortals. The documentation is now also more or less complete. - The IDE (in a framework build) now includes introductory documentation in Apple Help Viewer format. What's New in Python 2.3 alpha 2? ================================= *Release date: 19-Feb-2003* Core and builtins ----------------- - Negative positions returned from PEP 293 error callbacks are now treated as being relative to the end of the input string. Positions that are out of bounds raise an IndexError. - sys.path[0] (the directory from which the script is loaded) is now turned into an absolute pathname, unless it is the empty string. (SF patch #664376.) - Finally fixed the bug in compile() and exec where a string ending with an indented code block but no newline would raise SyntaxError. This would have been a four-line change in parsetok.c... Except codeop.py depends on this behavior, so a compilation flag had to be invented that causes the tokenizer to revert to the old behavior; this required extra changes to 2 .h files, 2 .c files, and 2 .py files. (Fixes SF bug #501622.) - If a new-style class defines neither __new__ nor __init__, its constructor would ignore all arguments. This is changed now: the constructor refuses arguments in this case. This might break code that worked under Python 2.2. The simplest fix is to add a no-op __init__: ``def __init__(self, *args, **kw): pass``. - Through a bytecode optimizer bug (and I bet you didn't even know Python *had* a bytecode optimizer :-), "unsigned" hex/oct constants with a leading minus sign would come out with the wrong sign. ("Unsigned" hex/oct constants are those with a face value in the range sys.maxint+1 through sys.maxint*2+1, inclusive; these have always been interpreted as negative numbers through sign folding.) E.g. 0xffffffff is -1, and -(0xffffffff) is 1, but -0xffffffff would come out as -4294967295. This was the case in Python 2.2 through 2.2.2 and 2.3a1, and in Python 2.4 it will once again have that value, but according to PEP 237 it really needs to be 1 now. This will be backported to Python 2.2.3 a well. (SF #660455) - int(s, base) sometimes sign-folds hex and oct constants; it only does this when base is 0 and s.strip() starts with a '0'. When the sign is actually folded, as in int("0xffffffff", 0) on a 32-bit machine, which returns -1, a FutureWarning is now issued; in Python 2.4, this will return 4294967295L, as do int("+0xffffffff", 0) and int("0xffffffff", 16) right now. (PEP 347) - super(X, x): x may now be a proxy for an X instance, i.e. issubclass(x.__class__, X) but not issubclass(type(x), X). - isinstance(x, X): if X is a new-style class, this is now equivalent to issubclass(type(x), X) or issubclass(x.__class__, X). Previously only type(x) was tested. (For classic classes this was already the case.) - compile(), eval() and the exec statement now fully support source code passed as unicode strings. - int subclasses can be initialized with longs if the value fits in an int. See SF bug #683467. - long(string, base) takes time linear in len(string) when base is a power of 2 now. It used to take time quadratic in len(string). - filter returns now Unicode results for Unicode arguments. - raw_input can now return Unicode objects. - List objects' sort() method now accepts None as the comparison function. Passing None is semantically identical to calling sort() with no arguments. - Fixed crash when printing a subclass of str and __str__ returned self. See SF bug #667147. - Fixed an invalid RuntimeWarning and an undetected error when trying to convert a long integer into a float which couldn't fit. See SF bug #676155. - Function objects now have a __module__ attribute that is bound to the name of the module in which the function was defined. This applies for C functions and methods as well as functions and methods defined in Python. This attribute is used by pickle.whichmodule(), which changes the behavior of whichmodule slightly. In Python 2.2 whichmodule() returns "__main__" for functions that are not defined at the top-level of a module (examples: methods, nested functions). Now whichmodule() will return the proper module name. Extension modules ----------------- - operator.isNumberType() now checks that the object has a nb_int or nb_float slot, rather than simply checking whether it has a non-NULL tp_as_number pointer. - The imp module now has ways to acquire and release the "import lock": imp.acquire_lock() and imp.release_lock(). Note: this is a reentrant lock, so releasing the lock only truly releases it when this is the last release_lock() call. You can check with imp.lock_held(). (SF bug #580952 and patch #683257.) - Change to cPickle to match pickle.py (see below and PEP 307). - Fix some bugs in the parser module. SF bug #678518. - Thanks to Scott David Daniels, a subtle bug in how the zlib extension implemented flush() was fixed. Scott also rewrote the zlib test suite using the unittest module. (SF bug #640230 and patch #678531.) - Added an itertools module containing high speed, memory efficient looping constructs inspired by tools from Haskell and SML. - The SSL module now handles sockets with a timeout set correctly (SF patch #675750, fixing SF bug #675552). - os/posixmodule has grown the sysexits.h constants (EX_OK and friends). - Fixed broken threadstate swap in readline that could cause fatal errors when a readline hook was being invoked while a background thread was active. (SF bugs #660476 and #513033.) - fcntl now exposes the strops.h I_* constants. - Fix a crash on Solaris that occurred when calling close() on an mmap'ed file which was already closed. (SF patch #665913) - Fixed several serious bugs in the zipimport implementation. - datetime changes: The date class is now properly subclassable. (SF bug #720908) The datetime and datetimetz classes have been collapsed into a single datetime class, and likewise the time and timetz classes into a single time class. Previously, a datetimetz object with tzinfo=None acted exactly like a datetime object, and similarly for timetz. This wasn't enough of a difference to justify distinct classes, and life is simpler now. today() and now() now round system timestamps to the closest microsecond <http://www.python.org/sf/661086>. This repairs an irritation most likely seen on Windows systems. In dt.astimezone(tz), if tz.utcoffset(dt) returns a duration, ValueError is raised if tz.dst(dt) returns None (2.3a1 treated it as 0 instead, but a tzinfo subclass wishing to participate in time zone conversion has to take a stand on whether it supports DST; if you don't care about DST, then code dst() to return 0 minutes, meaning that DST is never in effect). The tzinfo methods utcoffset() and dst() must return a timedelta object (or None) now. In 2.3a1 they could also return an int or long, but that was an unhelpfully redundant leftover from an earlier version wherein they couldn't return a timedelta. TOOWTDI. The example tzinfo class for local time had a bug. It was replaced by a later example coded by Guido. datetime.astimezone(tz) no longer raises an exception when the input datetime has no UTC equivalent in tz. For typical "hybrid" time zones (a single tzinfo subclass modeling both standard and daylight time), this case can arise one hour per year, at the hour daylight time ends. See new docs for details. In short, the new behavior mimics the local wall clock's behavior of repeating an hour in local time. dt.astimezone() can no longer be used to convert between naive and aware datetime objects. If you merely want to attach, or remove, a tzinfo object, without any conversion of date and time members, use dt.replace(tzinfo=whatever) instead, where "whatever" is None or a tzinfo subclass instance. A new method tzinfo.fromutc(dt) can be overridden in tzinfo subclasses to give complete control over how a UTC time is to be converted to a local time. The default astimezone() implementation calls fromutc() as its last step, so a tzinfo subclass can affect that too by overriding fromutc(). It's expected that the default fromutc() implementation will be suitable as-is for "almost all" time zone subclasses, but the creativity of political time zone fiddling appears unbounded -- fromutc() allows the highly motivated to emulate any scheme expressible in Python. datetime.now(): The optional tzinfo argument was undocumented (that's repaired), and its name was changed to tz ("tzinfo" is overloaded enough already). With a tz argument, now(tz) used to return the local date and time, and attach tz to it, without any conversion of date and time members. This was less than useful. Now now(tz) returns the current date and time as local time in tz's time zone, akin to :: tz.fromutc(datetime.utcnow().replace(tzinfo=utc)) where "utc" is an instance of a tzinfo subclass modeling UTC. Without a tz argument, now() continues to return the current local date and time, as a naive datetime object. datetime.fromtimestamp(): Like datetime.now() above, this had less than useful behavior when the optional tinzo argument was specified. See also SF bug report <http://www.python.org/sf/660872>. date and datetime comparison: In order to prevent comparison from falling back to the default compare-object-addresses strategy, these raised TypeError whenever they didn't understand the other object type. They still do, except when the other object has a "timetuple" attribute, in which case they return NotImplemented now. This gives other datetime objects (e.g., mxDateTime) a chance to intercept the comparison. date, time, datetime and timedelta comparison: When the exception for mixed-type comparisons in the last paragraph doesn't apply, if the comparison is == then False is returned, and if the comparison is != then True is returned. Because dict lookup and the "in" operator only invoke __eq__, this allows, for example, :: if some_datetime in some_sequence: and :: some_dict[some_timedelta] = whatever to work as expected, without raising TypeError just because the sequence is heterogeneous, or the dict has mixed-type keys. [This seems like a good idea to implement for all mixed-type comparisons that don't want to allow falling back to address comparison.] The constructors building a datetime from a timestamp could raise ValueError if the platform C localtime()/gmtime() inserted "leap seconds". Leap seconds are ignored now. On such platforms, it's possible to have timestamps that differ by a second, yet where datetimes constructed from them are equal. The pickle format of date, time and datetime objects has changed completely. The undocumented pickler and unpickler functions no longer exist. The undocumented __setstate__() and __getstate__() methods no longer exist either. Library ------- - The logging module was updated slightly; the WARN level was renamed to WARNING, and the matching function/method warn() to warning(). - The pickle and cPickle modules were updated with a new pickling protocol (documented by pickletools.py, see below) and several extensions to the pickle customization API (__reduce__, __setstate__ etc.). The copy module now uses more of the pickle customization API to copy objects that don't implement __copy__ or __deepcopy__. See PEP 307 for details. - The distutils "register" command now uses http://www.python.org/pypi as the default repository. (See PEP 301.) - the platform dependent path related variables sep, altsep, pathsep, curdir, pardir and defpath are now defined in the platform dependent path modules (e.g. ntpath.py) rather than os.py, so these variables are now available via os.path. They continue to be available from the os module. (see <http://www.python.org/sf/680789>). - array.array was added to the types repr.py knows about (see <http://www.python.org/sf/680789>). - The new pickletools.py contains lots of documentation about pickle internals, and supplies some helpers for working with pickles, such as a symbolic pickle disassembler. - xmlrpclib.py now supports the built-in boolean type. - py_compile has a new 'doraise' flag and a new PyCompileError exception. - SimpleXMLRPCServer now supports CGI through the CGIXMLRPCRequestHandler class. - The sets module now raises TypeError in __cmp__, to clarify that sets are not intended to be three-way-compared; the comparison operators are overloaded as subset/superset tests. - Bastion.py and rexec.py are disabled. These modules are not safe in Python 2.2. or 2.3. - realpath is now exported when doing ``from poxixpath import *``. It is also exported for ntpath, macpath, and os2emxpath. See SF bug #659228. - New module tarfile from Lars Gustäbel provides a comprehensive interface to tar archive files with transparent gzip and bzip2 compression. See SF patch #651082. - urlparse can now parse imap:// URLs. See SF feature request #618024. - Tkinter.Canvas.scan_dragto() provides an optional parameter to support the gain value which is passed to Tk. SF bug# 602259. - Fix logging.handlers.SysLogHandler protocol when using UNIX domain sockets. See SF patch #642974. - The dospath module was deleted. Use the ntpath module when manipulating DOS paths from other platforms. Tools/Demos ----------- - Two new scripts (db2pickle.py and pickle2db.py) were added to the Tools/scripts directory to facilitate conversion from the old bsddb module to the new one. While the user-visible API of the new module is compatible with the old one, it's likely that the version of the underlying database library has changed. To convert from the old library, run the db2pickle.py script using the old version of Python to convert it to a pickle file. After upgrading Python, run the pickle2db.py script using the new version of Python to reconstitute your database. For example: % python2.2 db2pickle.py -h some.db > some.pickle % python2.3 pickle2db.py -h some.db.new < some.pickle Run the scripts without any args to get a usage message. Build ----- - The audio driver tests (test_ossaudiodev.py and test_linuxaudiodev.py) are no longer run by default. This is because they don't always work, depending on your hardware and software. To run these tests, you must use an invocation like :: ./python Lib/test/regrtest.py -u audio test_ossaudiodev - On systems which build using the configure script, compiler flags which used to be lumped together using the OPT flag have been split into two groups, OPT and BASECFLAGS. OPT is meant to carry just optimization- and debug-related flags like "-g" and "-O3". BASECFLAGS is meant to carry compiler flags that are required to get a clean compile. On some platforms (many Linux flavors in particular) BASECFLAGS will be empty by default. On others, such as Mac OS X and SCO, it will contain required flags. This change allows people building Python to override OPT without fear of clobbering compiler flags which are required to get a clean build. - On Darwin/Mac OS X platforms, /sw/lib and /sw/include are added to the relevant search lists in setup.py. This allows users building Python to take advantage of the many packages available from the fink project <http://fink.sf.net/>. - A new Makefile target, scriptsinstall, installs a number of useful scripts from the Tools/scripts directory. C API ----- - PyEval_GetFrame() is now declared to return a ``PyFrameObject *`` instead of a plain ``PyObject *``. (SF patch #686601.) - PyNumber_Check() now checks that the object has a nb_int or nb_float slot, rather than simply checking whether it has a non-NULL tp_as_number pointer. - A C type that inherits from a base type that defines tp_as_buffer will now inherit the tp_as_buffer pointer if it doesn't define one. (SF #681367) - The PyArg_Parse functions now issue a DeprecationWarning if a float argument is provided when an integer is specified (this affects the 'b', 'B', 'h', 'H', 'i', and 'l' codes). Future versions of Python will raise a TypeError. Tests ----- - Several tests weren't being run from regrtest.py (test_timeout.py, test_tarfile.py, test_netrc.py, test_multifile.py, test_importhooks.py and test_imp.py). Now they are. (Note to developers: please read Lib/test/README when creating a new test, to make sure to do it right! All tests need to use either unittest or pydoc.) - Added test_posix.py, a test suite for the posix module. - Added test_hexoct.py, a test suite for hex/oct constant folding. Windows ------- - The timeout code for socket connect() didn't work right; this has now been fixed. test_timeout.py should pass (at least most of the time). - distutils' msvccompiler class now passes the preprocessor options to the resource compiler. See SF patch #669198. - The bsddb module now ships with Sleepycat's 4.1.25.NC, the latest release without strong cryptography. - sys.path[0], if it contains a directory name, is now always an absolute pathname. (SF patch #664376.) - The new logging package is now installed by the Windows installer. It wasn't in 2.3a1 due to oversight. Mac --- - There are new dialogs EasyDialogs.AskFileForOpen, AskFileForSave and AskFolder. The old macfs.StandardGetFile and friends are deprecated. - Most of the standard library now uses pathnames or FSRefs in preference of FSSpecs, and use the underlying Carbon.File and Carbon.Folder modules in stead of macfs. macfs will probably be deprecated in the future. - Type Carbon.File.FSCatalogInfo and supporting methods have been implemented. This also makes macfs.FSSpec.SetDates() work again. - There is a new module pimp, the package install manager for Python, and accompanying applet PackageManager. These allow you to easily download and install pretested extension packages either in source or binary form. Only in MacPython-OSX. - Applets are now built with bundlebuilder in MacPython-OSX, which should make them more robust and also provides a path towards BuildApplication. The downside of this change is that applets can no longer be run from the Terminal window, this will hopefully be fixed in the 2.3b1. What's New in Python 2.3 alpha 1? ================================= *Release date: 31-Dec-2002* Type/class unification and new-style classes -------------------------------------------- - One can now assign to __bases__ and __name__ of new-style classes. - dict() now accepts keyword arguments so that dict(one=1, two=2) is the equivalent of {"one": 1, "two": 2}. Accordingly, the existing (but undocumented) 'items' keyword argument has been eliminated. This means that dict(items=someMapping) now has a different meaning than before. - int() now returns a long object if the argument is outside the integer range, so int("4" * 1000), int(1e200) and int(1L<<1000) will all return long objects instead of raising an OverflowError. - Assignment to __class__ is disallowed if either the old or the new class is a statically allocated type object (such as defined by an extension module). This prevents anomalies like 2.__class__ = bool. - New-style object creation and deallocation have been sped up significantly; they are now faster than classic instance creation and deallocation. - The __slots__ variable can now mention "private" names, and the right thing will happen (e.g. __slots__ = ["__foo"]). - The built-ins slice() and buffer() are now callable types. The types classobj (formerly class), code, function, instance, and instancemethod (formerly instance-method), which have no built-in names but are accessible through the types module, are now also callable. The type dict-proxy is renamed to dictproxy. - Cycles going through the __class__ link of a new-style instance are now detected by the garbage collector. - Classes using __slots__ are now properly garbage collected. [SF bug 519621] - Tightened the __slots__ rules: a slot name must be a valid Python identifier. - The constructor for the module type now requires a name argument and takes an optional docstring argument. Previously, this constructor ignored its arguments. As a consequence, deriving a class from a module (not from the module type) is now illegal; previously this created an unnamed module, just like invoking the module type did. [SF bug 563060] - A new type object, 'basestring', is added. This is a common base type for 'str' and 'unicode', and can be used instead of types.StringTypes, e.g. to test whether something is "a string": isinstance(x, basestring) is True for Unicode and 8-bit strings. This is an abstract base class and cannot be instantiated directly. - Changed new-style class instantiation so that when C's __new__ method returns something that's not a C instance, its __init__ is not called. [SF bug #537450] - Fixed super() to work correctly with class methods. [SF bug #535444] - If you try to pickle an instance of a class that has __slots__ but doesn't define or override __getstate__, a TypeError is now raised. This is done by adding a bozo __getstate__ to the class that always raises TypeError. (Before, this would appear to be pickled, but the state of the slots would be lost.) Core and builtins ----------------- - Import from zipfiles is now supported. The name of a zipfile placed on sys.path causes the import statement to look for importable Python modules (with .py, pyc and .pyo extensions) and packages inside the zipfile. The zipfile import follows the specification (though not the sample implementation) of PEP 273. The semantics of __path__ are compatible with those that have been implemented in Jython since Jython 2.1. - PEP 302 has been accepted. Although it was initially developed to support zipimport, it offers a new, general import hook mechanism. Several new variables have been added to the sys module: sys.meta_path, sys.path_hooks, and sys.path_importer_cache; these make extending the import statement much more convenient than overriding the __import__ built-in function. For a description of these, see PEP 302. - A frame object's f_lineno attribute can now be written to from a trace function to change which line will execute next. A command to exploit this from pdb has been added. [SF patch #643835] - The _codecs support module for codecs.py was turned into a built-in module to assure that at least the built-in codecs are available to the Python parser for source code decoding according to PEP 263. - issubclass now supports a tuple as the second argument, just like isinstance does. ``issubclass(X, (A, B))`` is equivalent to ``issubclass(X, A) or issubclass(X, B)``. - Thanks to Armin Rigo, the last known way to provoke a system crash by cleverly arranging for a comparison function to mutate a list during a list.sort() operation has been fixed. The effect of attempting to mutate a list, or even to inspect its contents or length, while a sort is in progress, is not defined by the language. The C implementation of Python 2.3 attempts to detect mutations, and raise ValueError if one occurs, but there's no guarantee that all mutations will be caught, or that any will be caught across releases or implementations. - Unicode file name processing for Windows (PEP 277) is implemented. All platforms now have an os.path.supports_unicode_filenames attribute, which is set to True on Windows NT/2000/XP, and False elsewhere. - Codec error handling callbacks (PEP 293) are implemented. Error handling in unicode.encode or str.decode can now be customized. - A subtle change to the semantics of the built-in function intern(): interned strings are no longer immortal. You must keep a reference to the return value intern() around to get the benefit. - Use of 'None' as a variable, argument or attribute name now issues a SyntaxWarning. In the future, None may become a keyword. - SET_LINENO is gone. co_lnotab is now consulted to determine when to call the trace function. C code that accessed f_lineno should call PyCode_Addr2Line instead (f_lineno is still there, but only kept up to date when there is a trace function set). - There's a new warning category, FutureWarning. This is used to warn about a number of situations where the value or sign of an integer result will change in Python 2.4 as a result of PEP 237 (integer unification). The warnings implement stage B0 mentioned in that PEP. The warnings are about the following situations: - Octal and hex literals without 'L' prefix in the inclusive range [0x80000000..0xffffffff]; these are currently negative ints, but in Python 2.4 they will be positive longs with the same bit pattern. - Left shifts on integer values that cause the outcome to lose bits or have a different sign than the left operand. To be precise: x<<n where this currently doesn't yield the same value as long(x)<<n; in Python 2.4, the outcome will be long(x)<<n. - Conversions from ints to string that show negative values as unsigned ints in the inclusive range [0x80000000..0xffffffff]; this affects the functions hex() and oct(), and the string formatting codes %u, %o, %x, and %X. In Python 2.4, these will show signed values (e.g. hex(-1) currently returns "0xffffffff"; in Python 2.4 it will return "-0x1"). - The bits manipulated under the cover by sys.setcheckinterval() have been changed. Both the check interval and the ticker used to be per-thread values. They are now just a pair of global variables. In addition, the default check interval was boosted from 10 to 100 bytecode instructions. This may have some effect on systems that relied on the old default value. In particular, in multi-threaded applications which try to be highly responsive, response time will increase by some (perhaps imperceptible) amount. - When multiplying very large integers, a version of the so-called Karatsuba algorithm is now used. This is most effective if the inputs have roughly the same size. If they both have about N digits, Karatsuba multiplication has O(N**1.58) runtime (the exponent is log_base_2(3)) instead of the previous O(N**2). Measured results may be better or worse than that, depending on platform quirks. Besides the O() improvement in raw instruction count, the Karatsuba algorithm appears to have much better cache behavior on extremely large integers (starting in the ballpark of a million bits). Note that this is a simple implementation, and there's no intent here to compete with, e.g., GMP. It gives a very nice speedup when it applies, but a package devoted to fast large-integer arithmetic should run circles around it. - u'%c' will now raise a ValueError in case the argument is an integer outside the valid range of Unicode code point ordinals. - The tempfile module has been overhauled for enhanced security. The mktemp() function is now deprecated; new, safe replacements are mkstemp() (for files) and mkdtemp() (for directories), and the higher-level functions NamedTemporaryFile() and TemporaryFile(). Use of some global variables in this module is also deprecated; the new functions have keyword arguments to provide the same functionality. All Lib, Tools and Demo modules that used the unsafe interfaces have been updated to use the safe replacements. Thanks to Zack Weinberg! - When x is an object whose class implements __mul__ and __rmul__, 1.0*x would correctly invoke __rmul__, but 1*x would erroneously invoke __mul__. This was due to the sequence-repeat code in the int type. This has been fixed now. - Previously, "str1 in str2" required str1 to be a string of length 1. This restriction has been relaxed to allow str1 to be a string of any length. Thus "'el' in 'hello world'" returns True now. - File objects are now their own iterators. For a file f, iter(f) now returns f (unless f is closed), and f.next() is similar to f.readline() when EOF is not reached; however, f.next() uses a readahead buffer that messes up the file position, so mixing f.next() and f.readline() (or other methods) doesn't work right. Calling f.seek() drops the readahead buffer, but other operations don't. It so happens that this gives a nice additional speed boost to "for line in file:"; the xreadlines method and corresponding module are now obsolete. Thanks to Oren Tirosh! - Encoding declarations (PEP 263, phase 1) have been implemented. A comment of the form "# -*- coding: <encodingname> -*-" in the first or second line of a Python source file indicates the encoding. - list.sort() has a new implementation. While cross-platform results may vary, and in data-dependent ways, this is much faster on many kinds of partially ordered lists than the previous implementation, and reported to be just as fast on randomly ordered lists on several major platforms. This sort is also stable (if A==B and A precedes B in the list at the start, A precedes B after the sort too), although the language definition does not guarantee stability. A potential drawback is that list.sort() may require temp space of len(list)*2 bytes (``*4`` on a 64-bit machine). It's therefore possible for list.sort() to raise MemoryError now, even if a comparison function does not. See <http://www.python.org/sf/587076> for full details. - All standard iterators now ensure that, once StopIteration has been raised, all future calls to next() on the same iterator will also raise StopIteration. There used to be various counterexamples to this behavior, which could have caused confusion or subtle program breakage, without any benefits. (Note that this is still an iterator's responsibility; the iterator framework does not enforce this.) - Ctrl+C handling on Windows has been made more consistent with other platforms. KeyboardInterrupt can now reliably be caught, and Ctrl+C at an interactive prompt no longer terminates the process under NT/2k/XP (it never did under Win9x). Ctrl+C will interrupt time.sleep() in the main thread, and any child processes created via the popen family (on win2k; we can't make win9x work reliably) are also interrupted (as generally happens on for Linux/Unix.) [SF bugs 231273, 439992 and 581232] - sys.getwindowsversion() has been added on Windows. This returns a tuple with information about the version of Windows currently running. - Slices and repetitions of buffer objects now consistently return a string. Formerly, strings would be returned most of the time, but a buffer object would be returned when the repetition count was one or when the slice range was all inclusive. - Unicode objects in sys.path are no longer ignored but treated as directory names. - Fixed string.startswith and string.endswith built-in methods so they accept negative indices. [SF bug 493951] - Fixed a bug with a continue inside a try block and a yield in the finally clause. [SF bug 567538] - Most built-in sequences now support "extended slices", i.e. slices with a third "stride" parameter. For example, "hello world"[::-1] gives "dlrow olleh". - A new warning PendingDeprecationWarning was added to provide direction on features which are in the process of being deprecated. The warning will not be printed by default. To see the pending deprecations, use -Walways::PendingDeprecationWarning:: as a command line option or warnings.filterwarnings() in code. - Deprecated features of xrange objects have been removed as promised. The start, stop, and step attributes and the tolist() method no longer exist. xrange repetition and slicing have been removed. - New built-in function enumerate(x), from PEP 279. Example: enumerate("abc") is an iterator returning (0,"a"), (1,"b"), (2,"c"). The argument can be an arbitrary iterable object. - The assert statement no longer tests __debug__ at runtime. This means that assert statements cannot be disabled by assigning a false value to __debug__. - A method zfill() was added to str and unicode, that fills a numeric string to the left with zeros. For example, "+123".zfill(6) -> "+00123". - Complex numbers supported divmod() and the // and % operators, but these make no sense. Since this was documented, they're being deprecated now. - String and unicode methods lstrip(), rstrip() and strip() now take an optional argument that specifies the characters to strip. For example, "Foo!!!?!?!?".rstrip("?!") -> "Foo". - There's a new dictionary constructor (a class method of the dict class), dict.fromkeys(iterable, value=None). It constructs a dictionary with keys taken from the iterable and all values set to a single value. It can be used for building sets and for removing duplicates from sequences. - Added a new dict method pop(key). This removes and returns the value corresponding to key. [SF patch #539949] - A new built-in type, bool, has been added, as well as built-in names for its two values, True and False. Comparisons and sundry other operations that return a truth value have been changed to return a bool instead. Read PEP 285 for an explanation of why this is backward compatible. - Fixed two bugs reported as SF #535905: under certain conditions, deallocating a deeply nested structure could cause a segfault in the garbage collector, due to interaction with the "trashcan" code; access to the current frame during destruction of a local variable could access a pointer to freed memory. - The optional object allocator ("pymalloc") has been enabled by default. The recommended practice for memory allocation and deallocation has been streamlined. A header file is included, Misc/pymemcompat.h, which can be bundled with 3rd party extensions and lets them use the same API with Python versions from 1.5.2 onwards. - PyErr_Display will provide file and line information for all exceptions that have an attribute print_file_and_line, not just SyntaxErrors. - The UTF-8 codec will now encode and decode Unicode surrogates correctly and without raising exceptions for unpaired ones. - Universal newlines (PEP 278) is implemented. Briefly, using 'U' instead of 'r' when opening a text file for reading changes the line ending convention so that any of '\r', '\r\n', and '\n' is recognized (even mixed in one file); all three are converted to '\n', the standard Python line end character. - file.xreadlines() now raises a ValueError if the file is closed: Previously, an xreadlines object was returned which would raise a ValueError when the xreadlines.next() method was called. - sys.exit() inadvertently allowed more than one argument. An exception will now be raised if more than one argument is used. - Changed evaluation order of dictionary literals to conform to the general left to right evaluation order rule. Now {f1(): f2()} will evaluate f1 first. - Fixed bug #521782: when a file was in non-blocking mode, file.read() could silently lose data or wrongly throw an unknown error. - The sq_repeat, sq_inplace_repeat, sq_concat and sq_inplace_concat slots are now always tried after trying the corresponding nb_* slots. This fixes a number of minor bugs (see bug #624807). - Fix problem with dynamic loading on 64-bit AIX (see bug #639945). Extension modules ----------------- - Added three operators to the operator module: operator.pow(a,b) which is equivalent to: a**b. operator.is_(a,b) which is equivalent to: a is b. operator.is_not(a,b) which is equivalent to: a is not b. - posix.openpty now works on all systems that have /dev/ptmx. - A module zipimport exists to support importing code from zip archives. - The new datetime module supplies classes for manipulating dates and times. The basic design came from the Zope "fishbowl process", and favors practical commercial applications over calendar esoterica. See http://www.zope.org/Members/fdrake/DateTimeWiki/FrontPage - _tkinter now returns Tcl objects, instead of strings. Objects which have Python equivalents are converted to Python objects, other objects are wrapped. This can be configured through the wantobjects method, or Tkinter.wantobjects. - The PyBSDDB wrapper around the Sleepycat Berkeley DB library has been added as the package bsddb. The traditional bsddb module is still available in source code, but not built automatically anymore, and is now named bsddb185. This supports Berkeley DB versions from 3.0 to 4.1. For help converting your databases from the old module (which probably used an obsolete version of Berkeley DB) to the new module, see the db2pickle.py and pickle2db.py scripts described in the Tools/Demos section above. - unicodedata was updated to Unicode 3.2. It supports normalization and names for Hangul syllables and CJK unified ideographs. - resource.getrlimit() now returns longs instead of ints. - readline now dynamically adjusts its input/output stream if sys.stdin/stdout changes. - The _tkinter module (and hence Tkinter) has dropped support for Tcl/Tk 8.0 and 8.1. Only Tcl/Tk versions 8.2, 8.3 and 8.4 are supported. - cPickle.BadPickleGet is now a class. - The time stamps in os.stat_result are floating point numbers after stat_float_times has been called. - If the size passed to mmap.mmap() is larger than the length of the file on non-Windows platforms, a ValueError is raised. [SF bug 585792] - The xreadlines module is slated for obsolescence. - The strptime function in the time module is now always available (a Python implementation is used when the C library doesn't define it). - The 'new' module is no longer an extension, but a Python module that only exists for backwards compatibility. Its contents are no longer functions but callable type objects. - The bsddb.*open functions can now take 'None' as a filename. This will create a temporary in-memory bsddb that won't be written to disk. - posix.getloadavg, posix.lchown, posix.killpg, posix.mknod, and posix.getpgid have been added where available. - The locale module now exposes the C library's gettext interface. It also has a new function getpreferredencoding. - A security hole ("double free") was found in zlib-1.1.3, a popular third party compression library used by some Python modules. The hole was quickly plugged in zlib-1.1.4, and the Windows build of Python now ships with zlib-1.1.4. - pwd, grp, and resource return enhanced tuples now, with symbolic field names. - array.array is now a type object. A new format character 'u' indicates Py_UNICODE arrays. For those, .tounicode and .fromunicode methods are available. Arrays now support __iadd__ and __imul__. - dl now builds on every system that has dlfcn.h. Failure in case of sizeof(int)!=sizeof(long)!=sizeof(void*) is delayed until dl.open is called. - The sys module acquired a new attribute, api_version, which evaluates to the value of the PYTHON_API_VERSION macro with which the interpreter was compiled. - Fixed bug #470582: sre module would return a tuple (None, 'a', 'ab') when applying the regular expression '^((a)c)?(ab)$' on 'ab'. It now returns (None, None, 'ab'), as expected. Also fixed handling of lastindex/lastgroup match attributes in similar cases. For example, when running the expression r'(a)(b)?b' over 'ab', lastindex must be 1, not 2. - Fixed bug #581080: sre scanner was not checking the buffer limit before increasing the current pointer. This was creating an infinite loop in the search function, once the pointer exceeded the buffer limit. - The os.fdopen function now enforces a file mode starting with the letter 'r', 'w' or 'a', otherwise a ValueError is raised. This fixes bug #623464. - The linuxaudiodev module is now deprecated; it is being replaced by ossaudiodev. The interface has been extended to cover a lot more of OSS (see www.opensound.com), including most DSP ioctls and the OSS mixer API. Documentation forthcoming in 2.3a2. Library ------- - imaplib.py now supports SSL (Tino Lange and Piers Lauder). - Freeze's modulefinder.py has been moved to the standard library; slightly improved so it will issue less false missing submodule reports (see sf path #643711 for details). Documentation will follow with Python 2.3a2. - os.path exposes getctime. - unittest.py now has two additional methods called assertAlmostEqual() and failIfAlmostEqual(). They implement an approximate comparison by rounding the difference between the two arguments and comparing the result to zero. Approximate comparison is essential for unit tests of floating point results. - calendar.py now depends on the new datetime module rather than the time module. As a result, the range of allowable dates has been increased. - pdb has a new 'j(ump)' command to select the next line to be executed. - The distutils created windows installers now can run a postinstallation script. - doctest.testmod can now be called without argument, which means to test the current module. - When canceling a server that implemented threading with a keyboard interrupt, the server would shut down but not terminate (waiting on client threads). A new member variable, daemon_threads, was added to the ThreadingMixIn class in SocketServer.py to make it explicit that this behavior needs to be controlled. - A new module, optparse, provides a fancy alternative to getopt for command line parsing. It is a slightly modified version of Greg Ward's Optik package. - UserDict.py now defines a DictMixin class which defines all dictionary methods for classes that already have a minimum mapping interface. This greatly simplifies writing classes that need to be substitutable for dictionaries (such as the shelve module). - shelve.py now subclasses from UserDict.DictMixin. Now shelve supports all dictionary methods. This eases the transition to persistent storage for scripts originally written with dictionaries in mind. - shelve.open and the various classes in shelve.py now accept an optional binary flag, which defaults to False. If True, the values stored in the shelf are binary pickles. - A new package, logging, implements the logging API defined by PEP 282. The code is written by Vinay Sajip. - StreamReader, StreamReaderWriter and StreamRecoder in the codecs modules are iterators now. - gzip.py now handles files exceeding 2GB. Files over 4GB also work now (provided the OS supports it, and Python is configured with large file support), but in that case the underlying gzip file format can record only the least-significant 32 bits of the file size, so that some tools working with gzipped files may report an incorrect file size. - xml.sax.saxutils.unescape has been added, to replace entity references with their entity value. - Queue.Queue.{put,get} now support an optional timeout argument. - Various features of Tk 8.4 are exposed in Tkinter.py. The multiple option of tkFileDialog is exposed as function askopenfile{,name}s. - Various configure methods of Tkinter have been stream-lined, so that tag_configure, image_configure, window_configure now return a dictionary when invoked with no argument. - Importing the readline module now no longer has the side effect of calling setlocale(LC_CTYPE, ""). The initial "C" locale, or whatever locale is explicitly set by the user, is preserved. If you want repr() of 8-bit strings in your preferred encoding to preserve all printable characters of that encoding, you have to add the following code to your $PYTHONSTARTUP file or to your application's main(): import locale locale.setlocale(locale.LC_CTYPE, "") - shutil.move was added. shutil.copytree now reports errors as an exception at the end, instead of printing error messages. - Encoding name normalization was generalized to not only replace hyphens with underscores, but also all other non-alphanumeric characters (with the exception of the dot which is used for Python package names during lookup). The aliases.py mapping was updated to the new standard. - mimetypes has two new functions: guess_all_extensions() which returns a list of all known extensions for a mime type, and add_type() which adds one mapping between a mime type and an extension to the database. - New module: sets, defines the class Set that implements a mutable set type using the keys of a dict to represent the set. There's also a class ImmutableSet which is useful when you need sets of sets or when you need to use sets as dict keys, and a class BaseSet which is the base class of the two. - Added random.sample(population,k) for random sampling without replacement. Returns a k length list of unique elements chosen from the population. - random.randrange(-sys.maxint-1, sys.maxint) no longer raises OverflowError. That is, it now accepts any combination of 'start' and 'stop' arguments so long as each is in the range of Python's bounded integers. - Thanks to Raymond Hettinger, random.random() now uses a new core generator. The Mersenne Twister algorithm is implemented in C, threadsafe, faster than the previous generator, has an astronomically large period (2**19937-1), creates random floats to full 53-bit precision, and may be the most widely tested random number generator in existence. The random.jumpahead(n) method has different semantics for the new generator. Instead of jumping n steps ahead, it uses n and the existing state to create a new state. This means that jumpahead() continues to support multi-threaded code needing generators of non-overlapping sequences. However, it will break code which relies on jumpahead moving a specific number of steps forward. The attributes random.whseed and random.__whseed have no meaning for the new generator. Code using these attributes should switch to a new class, random.WichmannHill which is provided for backward compatibility and to make an alternate generator available. - New "algorithms" module: heapq, implements a heap queue. Thanks to Kevin O'Connor for the code and François Pinard for an entertaining write-up explaining the theory and practical uses of heaps. - New encoding for the Palm OS character set: palmos. - binascii.crc32() and the zipfile module had problems on some 64-bit platforms. These have been fixed. On a platform with 8-byte C longs, crc32() now returns a signed-extended 4-byte result, so that its value as a Python int is equal to the value computed a 32-bit platform. - xml.dom.minidom.toxml and toprettyxml now take an optional encoding argument. - Some fixes in the copy module: when an object is copied through its __reduce__ method, there was no check for a __setstate__ method on the result [SF patch 565085]; deepcopy should treat instances of custom metaclasses the same way it treats instances of type 'type' [SF patch 560794]. - Sockets now support timeout mode. After s.settimeout(T), where T is a float expressing seconds, subsequent operations raise an exception if they cannot be completed within T seconds. To disable timeout mode, use s.settimeout(None). There's also a module function, socket.setdefaulttimeout(T), which sets the default for all sockets created henceforth. - getopt.gnu_getopt was added. This supports GNU-style option processing, where options can be mixed with non-option arguments. - Stop using strings for exceptions. String objects used for exceptions are now classes deriving from Exception. The objects changed were: Tkinter.TclError, bdb.BdbQuit, macpath.norm_error, tabnanny.NannyNag, and xdrlib.Error. - Constants BOM_UTF8, BOM_UTF16, BOM_UTF16_LE, BOM_UTF16_BE, BOM_UTF32, BOM_UTF32_LE and BOM_UTF32_BE that represent the Byte Order Mark in UTF-8, UTF-16 and UTF-32 encodings for little and big endian systems were added to the codecs module. The old names BOM32_* and BOM64_* were off by a factor of 2. - Added conversion functions math.degrees() and math.radians(). - math.log() now takes an optional argument: math.log(x[, base]). - ftplib.retrlines() now tests for callback is None rather than testing for False. Was causing an error when given a callback object which was callable but also returned len() as zero. The change may create new breakage if the caller relied on the undocumented behavior and called with callback set to [] or some other False value not identical to None. - random.gauss() uses a piece of hidden state used by nothing else, and the .seed() and .whseed() methods failed to reset it. In other words, setting the seed didn't completely determine the sequence of results produced by random.gauss(). It does now. Programs repeatedly mixing calls to a seed method with calls to gauss() may see different results now. - The pickle.Pickler class grew a clear_memo() method to mimic that provided by cPickle.Pickler. - difflib's SequenceMatcher class now does a dynamic analysis of which elements are so frequent as to constitute noise. For comparing files as sequences of lines, this generally works better than the IS_LINE_JUNK function, and function ndiff's linejunk argument defaults to None now as a result. A happy benefit is that SequenceMatcher may run much faster now when applied to large files with many duplicate lines (for example, C program text with lots of repeated "}" and "return NULL;" lines). - New Text.dump() method in Tkinter module. - New distutils commands for building packagers were added to support pkgtool on Solaris and swinstall on HP-UX. - distutils now has a new abstract binary packager base class command/bdist_packager, which simplifies writing packagers. This will hopefully provide the missing bits to encourage people to submit more packagers, e.g. for Debian, FreeBSD and other systems. - The UTF-16, -LE and -BE stream readers now raise a NotImplementedError for all calls to .readline(). Previously, they used to just produce garbage or fail with an encoding error -- UTF-16 is a 2-byte encoding and the C lib's line reading APIs don't work well with these. - compileall now supports quiet operation. - The BaseHTTPServer now implements optional HTTP/1.1 persistent connections. - socket module: the SSL support was broken out of the main _socket module C helper and placed into a new _ssl helper which now gets imported by socket.py if available and working. - encodings package: added aliases for all supported IANA character sets - ftplib: to safeguard the user's privacy, anonymous login will use "anonymous@" as default password, rather than the real user and host name. - webbrowser: tightened up the command passed to os.system() so that arbitrary shell code can't be executed because a bogus URL was passed in. - gettext.translation has an optional fallback argument, and gettext.find an optional all argument. Translations will now fallback on a per-message basis. The module supports plural forms, by means of gettext.[d]ngettext and Translation.[u]ngettext. - distutils bdist commands now offer a --skip-build option. - warnings.warn now accepts a Warning instance as first argument. - The xml.sax.expatreader.ExpatParser class will no longer create circular references by using itself as the locator that gets passed to the content handler implementation. [SF bug #535474] - The email.Parser.Parser class now properly parses strings regardless of their line endings, which can be any of \r, \n, or \r\n (CR, LF, or CRLF). Also, the Header class's constructor default arguments has changed slightly so that an explicit maxlinelen value is always honored, and so unicode conversion error handling can be specified. - distutils' build_ext command now links C++ extensions with the C++ compiler available in the Makefile or CXX environment variable, if running under \*nix. - New module bz2: provides a comprehensive interface for the bz2 compression library. It implements a complete file interface, one-shot (de)compression functions, and types for sequential (de)compression. - New pdb command 'pp' which is like 'p' except that it pretty-prints the value of its expression argument. - Now bdist_rpm distutils command understands a verify_script option in the config file, including the contents of the referred filename in the "%verifyscript" section of the rpm spec file. - Fixed bug #495695: webbrowser module would run graphic browsers in a unix environment even if DISPLAY was not set. Also, support for skipstone browser was included. - Fixed bug #636769: rexec would run unallowed code if subclasses of strings were used as parameters for certain functions. Tools/Demos ----------- - pygettext.py now supports globbing on Windows, and accepts module names in addition to accepting file names. - The SGI demos (Demo/sgi) have been removed. Nobody thought they were interesting any more. (The SGI library modules and extensions are still there; it is believed that at least some of these are still used and useful.) - IDLE supports the new encoding declarations (PEP 263); it can also deal with legacy 8-bit files if they use the locale's encoding. It allows non-ASCII strings in the interactive shell and executes them in the locale's encoding. - freeze.py now produces binaries which can import shared modules, unlike before when this failed due to missing symbol exports in the generated binary. Build ----- - On Unix, IDLE is now installed automatically. - The fpectl module is not built by default; it's dangerous or useless except in the hands of experts. - The public Python C API will generally be declared using PyAPI_FUNC and PyAPI_DATA macros, while Python extension module init functions will be declared with PyMODINIT_FUNC. DL_EXPORT/DL_IMPORT macros are deprecated. - A bug was fixed that could cause COUNT_ALLOCS builds to segfault, or get into infinite loops, when a new-style class got garbage-collected. Unfortunately, to avoid this, the way COUNT_ALLOCS works requires that new-style classes be immortal in COUNT_ALLOCS builds. Note that COUNT_ALLOCS is not enabled by default, in either release or debug builds, and that new-style classes are immortal only in COUNT_ALLOCS builds. - Compiling out the cyclic garbage collector is no longer an option. The old symbol WITH_CYCLE_GC is now ignored, and Python.h arranges that it's always defined (for the benefit of any extension modules that may be conditionalizing on it). A bonus is that any extension type participating in cyclic gc can choose to participate in the Py_TRASHCAN mechanism now too; in the absence of cyclic gc, this used to require editing the core to teach the trashcan mechanism about the new type. - According to Annex F of the current C standard, The Standard C macro HUGE_VAL and its float and long double analogs, HUGE_VALF and HUGE_VALL, expand to expressions whose values are positive infinities. Python only uses the double HUGE_VAL, and only to #define its own symbol Py_HUGE_VAL. Some platforms have incorrect definitions for HUGE_VAL. pyport.h used to try to worm around that, but the workarounds triggered other bugs on other platforms, so we gave up. If your platform defines HUGE_VAL incorrectly, you'll need to #define Py_HUGE_VAL to something that works on your platform. The only instance of this I'm sure about is on an unknown subset of Cray systems, described here: http://www.cray.com/swpubs/manuals/SN-2194_2.0/html-SN-2194_2.0/x3138.htm Presumably 2.3a1 breaks such systems. If anyone uses such a system, help! - The configure option --without-doc-strings can be used to remove the doc strings from the built-in functions and modules; this reduces the size of the executable. - The universal newlines option (PEP 278) is on by default. On Unix it can be disabled by passing --without-universal-newlines to the configure script. On other platforms, remove WITH_UNIVERSAL_NEWLINES from pyconfig.h. - On Unix, a shared libpython2.3.so can be created with --enable-shared. - All uses of the CACHE_HASH, INTERN_STRINGS, and DONT_SHARE_SHORT_STRINGS preprocessor symbols were eliminated. The internal decisions they controlled stopped being experimental long ago. - The tools used to build the documentation now work under Cygwin as well as Unix. - The bsddb and dbm module builds have been changed to try and avoid version skew problems and disable linkage with Berkeley DB 1.85 unless the installer knows what s/he's doing. See the section on building these modules in the README file for details. C API ----- - PyNumber_Check() now returns true for string and unicode objects. This is a result of these types having a partially defined tp_as_number slot. (This is not a feature, but an indication that PyNumber_Check() is not very useful to determine numeric behavior. It may be deprecated.) - The string object's layout has changed: the pointer member ob_sinterned has been replaced by an int member ob_sstate. On some platforms (e.g. most 64-bit systems) this may change the offset of the ob_sval member, so as a precaution the API_VERSION has been incremented. The apparently unused feature of "indirect interned strings", supported by the ob_sinterned member, is gone. Interned strings are now usually mortal; there is a new API, PyString_InternImmortal() that creates immortal interned strings. (The ob_sstate member can only take three values; however, while making it a char saves a few bytes per string object on average, in it also slowed things down a bit because ob_sval was no longer aligned.) - The Py_InitModule*() functions now accept NULL for the 'methods' argument. Modules without global functions are becoming more common now that factories can be types rather than functions. - New C API PyUnicode_FromOrdinal() which exposes unichr() at C level. - New functions PyErr_SetExcFromWindowsErr() and PyErr_SetExcFromWindowsErrWithFilename(). Similar to PyErr_SetFromWindowsErrWithFilename() and PyErr_SetFromWindowsErr(), but they allow specifying the exception type to raise. Available on Windows. - Py_FatalError() is now declared as taking a const char* argument. It was previously declared without const. This should not affect working code. - Added new macro PySequence_ITEM(o, i) that directly calls sq_item without rechecking that o is a sequence and without adjusting for negative indices. - PyRange_New() now raises ValueError if the fourth argument is not 1. This is part of the removal of deprecated features of the xrange object. - PyNumber_Coerce() and PyNumber_CoerceEx() now also invoke the type's coercion if both arguments have the same type but this type has the CHECKTYPES flag set. This is to better support proxies. - The type of tp_free has been changed from "``void (*)(PyObject *)``" to "``void (*)(void *)``". - PyObject_Del, PyObject_GC_Del are now functions instead of macros. - A type can now inherit its metatype from its base type. Previously, when PyType_Ready() was called, if ob_type was found to be NULL, it was always set to &PyType_Type; now it is set to base->ob_type, where base is tp_base, defaulting to &PyObject_Type. - PyType_Ready() accidentally did not inherit tp_is_gc; now it does. - The PyCore_* family of APIs have been removed. - The "u#" parser marker will now pass through Unicode objects as-is without going through the buffer API. - The enumerators of cmp_op have been renamed to use the prefix ``PyCmp_``. - An old #define of ANY as void has been removed from pyport.h. This hasn't been used since Python's pre-ANSI days, and the #define has been marked as obsolete since then. SF bug 495548 says it created conflicts with other packages, so keeping it around wasn't harmless. - Because Python's magic number scheme broke on January 1st, we decided to stop Python development. Thanks for all the fish! - Some of us don't like fish, so we changed Python's magic number scheme to a new one. See Python/import.c for details. New platforms ------------- - OpenVMS is now supported. - AtheOS is now supported. - the EMX runtime environment on OS/2 is now supported. - GNU/Hurd is now supported. Tests ----- - The regrtest.py script's -u option now provides a way to say "allow all resources except this one." For example, to allow everything except bsddb, give the option '-uall,-bsddb'. Windows ------- - The Windows distribution now ships with version 4.0.14 of the Sleepycat Berkeley database library. This should be a huge improvement over the previous Berkeley DB 1.85, which had many bugs. XXX What are the licensing issues here? XXX If a user has a database created with a previous version of XXX Python, what must they do to convert it? XXX I'm still not sure how to link this thing (see PCbuild/readme.txt). XXX The version # is likely to change before 2.3a1. - The Windows distribution now ships with a Secure Sockets Library (SLL) module (_ssl.pyd) - The Windows distribution now ships with Tcl/Tk version 8.4.1 (it previously shipped with Tcl/Tk 8.3.2). - When Python is built under a Microsoft compiler, sys.version now includes the compiler version number (_MSC_VER). For example, under MSVC 6, sys.version contains the substring "MSC v.1200 ". 1200 is the value of _MSC_VER under MSVC 6. - Sometimes the uninstall executable (UNWISE.EXE) vanishes. One cause of that has been fixed in the installer (disabled Wise's "delete in- use files" uninstall option). - Fixed a bug in urllib's proxy handling in Windows. [SF bug #503031] - The installer now installs Start menu shortcuts under (the local equivalent of) "All Users" when doing an Admin install. - file.truncate([newsize]) now works on Windows for all newsize values. It used to fail if newsize didn't fit in 32 bits, reflecting a limitation of MS _chsize (which is no longer used). - os.waitpid() is now implemented for Windows, and can be used to block until a specified process exits. This is similar to, but not exactly the same as, os.waitpid() on POSIX systems. If you're waiting for a specific process whose pid was obtained from one of the spawn() functions, the same Python os.waitpid() code works across platforms. See the docs for details. The docs were changed to clarify that spawn functions return, and waitpid requires, a process handle on Windows (not the same thing as a Windows process id). - New tempfile.TemporaryFile implementation for Windows: this doesn't need a TemporaryFileWrapper wrapper anymore, and should be immune to a nasty problem: before 2.3, if you got a temp file on Windows, it got wrapped in an object whose close() method first closed the underlying file, then deleted the file. This usually worked fine. However, the spawn family of functions on Windows create (at a low C level) the same set of open files in the spawned process Q as were open in the spawning process P. If a temp file f was among them, then doing f.close() in P first closed P's C-level file handle on f, but Q's C-level file handle on f remained open, so the attempt in P to delete f blew up with a "Permission denied" error (Windows doesn't allow deleting open files). This was surprising, subtle, and difficult to work around. - The os module now exports all the symbolic constants usable with the low-level os.open() on Windows: the new constants in 2.3 are O_NOINHERIT, O_SHORT_LIVED, O_TEMPORARY, O_RANDOM and O_SEQUENTIAL. The others were also available in 2.2: O_APPEND, O_BINARY, O_CREAT, O_EXCL, O_RDONLY, O_RDWR, O_TEXT, O_TRUNC and O_WRONLY. Contrary to Microsoft docs, O_SHORT_LIVED does not seem to imply O_TEMPORARY (so specify both if you want both; note that neither is useful unless specified with O_CREAT too). Mac ---- - Mac/Relnotes is gone, the release notes are now here. - Python (the OSX-only, unix-based version, not the OS9-compatible CFM version) now fully supports unicode strings as arguments to various file system calls, eg. open(), file(), os.stat() and os.listdir(). - The current naming convention for Python on the Macintosh is that MacPython refers to the unix-based OSX-only version, and MacPython-OS9 refers to the CFM-based version that runs on both OS9 and OSX. - All MacPython-OS9 functionality is now available in an OSX unix build, including the Carbon modules, the IDE, OSA support, etc. A lot of this will only work correctly in a framework build, though, because you cannot talk to the window manager unless your application is run from a .app bundle. There is a command line tool "pythonw" that runs your script with an interpreter living in such a .app bundle, this interpreter should be used to run any Python script using the window manager (including Tkinter or wxPython scripts). - Most of Mac/Lib has moved to Lib/plat-mac, which is again used both in MacPython-OSX and MacPython-OS9. The only modules remaining in Mac/Lib are specifically for MacPython-OS9 (CFM support, preference resources, etc). - A new utility PythonLauncher will start a Python interpreter when a .py or .pyw script is double-clicked in the Finder. By default .py scripts are run with a normal Python interpreter in a Terminal window and .pyw files are run with a window-aware pythonw interpreter without a Terminal window, but all this can be customized. - MacPython-OS9 is now Carbon-only, so it runs on Mac OS 9 or Mac OS X and possibly on Mac OS 8.6 with the right CarbonLib installed, but not on earlier releases. - Many tools such as BuildApplet.py and gensuitemodule.py now support a command line interface too. - All the Carbon classes are now PEP253 compliant, meaning that you can subclass them from Python. Most of the attributes have gone, you should now use the accessor function call API, which is also what Apple's documentation uses. Some attributes such as grafport.visRgn are still available for convenience. - New Carbon modules File (implementing the APIs in Files.h and Aliases.h) and Folder (APIs from Folders.h). The old macfs built-in module is gone, and replaced by a Python wrapper around the new modules. - Pathname handling should now be fully consistent: MacPython-OSX always uses unix pathnames and MacPython-OS9 always uses colon-separated Mac pathnames (also when running on Mac OS X). - New Carbon modules Help and AH give access to the Carbon Help Manager. There are hooks in the IDE to allow accessing the Python documentation (and Apple's Carbon and Cocoa documentation) through the Help Viewer. See Mac/OSX/README for converting the Python documentation to a Help Viewer compatible form and installing it. - OSA support has been redesigned and the generated Python classes now mirror the inheritance defined by the underlying OSA classes. - MacPython no longer maps both \r and \n to \n on input for any text file. This feature has been replaced by universal newline support (PEP278). - The default encoding for Python sourcefiles in MacPython-OS9 is no longer mac-roman (or whatever your local Mac encoding was) but "ascii", like on other platforms. If you really need sourcefiles with Mac characters in them you can change this in site.py. What's New in Python 2.2 final? =============================== *Release date: 21-Dec-2001* Type/class unification and new-style classes -------------------------------------------- - pickle.py, cPickle: allow pickling instances of new-style classes with a custom metaclass. Core and builtins ----------------- - weakref proxy object: when comparing, unwrap both arguments if both are proxies. Extension modules ----------------- - binascii.b2a_base64(): fix a potential buffer overrun when encoding very short strings. - cPickle: the obscure "fast" mode was suspected of causing stack overflows on the Mac. Hopefully fixed this by setting the recursion limit much smaller. If the limit is too low (it only affects performance), you can change it by defining PY_CPICKLE_FAST_LIMIT when compiling cPickle.c (or in pyconfig.h). Library ------- - dumbdbm.py: fixed a dumb old bug (the file didn't get synched at close or delete time). - rfc822.py: fixed a bug where the address '<>' was converted to None instead of an empty string (also fixes the email.Utils module). - xmlrpclib.py: version 1.0.0; uses precision for doubles. - test suite: the pickle and cPickle tests were not executing any code when run from the standard regression test. Tools/Demos ----------- Build ----- C API ----- New platforms ------------- Tests ----- Windows ------- - distutils package: fixed broken Windows installers (bdist_wininst). - tempfile.py: prevent mysterious warnings when TemporaryFileWrapper instances are deleted at process exit time. - socket.py: prevent mysterious warnings when socket instances are deleted at process exit time. - posixmodule.c: fix a Windows crash with stat() of a filename ending in backslash. Mac ---- - The Carbon toolbox modules have been upgraded to Universal Headers 3.4, and experimental CoreGraphics and CarbonEvents modules have been added. All only for framework-enabled MacOSX. What's New in Python 2.2c1? =========================== *Release date: 14-Dec-2001* Type/class unification and new-style classes -------------------------------------------- - Guido's tutorial introduction to the new type/class features has been extensively updated. See http://www.python.org/2.2/descrintro.html That remains the primary documentation in this area. - Fixed a leak: instance variables declared with __slots__ were never deleted! - The "delete attribute" method of descriptor objects is called __delete__, not __del__. In previous releases, it was mistakenly called __del__, which created an unfortunate overloading condition with finalizers. (The "get attribute" and "set attribute" methods are still called __get__ and __set__, respectively.) - Some subtle issues with the super built-in were fixed: (a) When super itself is subclassed, its __get__ method would still return an instance of the base class (i.e., of super). (b) super(C, C()).__class__ would return C rather than super. This is confusing. To fix this, I decided to change the semantics of super so that it only applies to code attributes, not to data attributes. After all, overriding data attributes is not supported anyway. (c) The __get__ method didn't check whether the argument was an instance of the type used in creation of the super instance. - Previously, hash() of an instance of a subclass of a mutable type (list or dictionary) would return some value, rather than raising TypeError. This has been fixed. Also, directly calling dict.__hash__ and list.__hash__ now raises the same TypeError (previously, these were the same as object.__hash__). - New-style objects now support deleting their __dict__. This is for all intents and purposes equivalent to assigning a brand new empty dictionary, but saves space if the object is not used further. Core and builtins ----------------- - -Qnew now works as documented in PEP 238: when -Qnew is passed on the command line, all occurrences of "/" use true division instead of classic division. See the PEP for details. Note that "all" means all instances in library and 3rd-party modules, as well as in your own code. As the PEP says, -Qnew is intended for use only in educational environments with control over the libraries in use. Note that test_coercion.py in the standard Python test suite fails under -Qnew; this is expected, and won't be repaired until true division becomes the default (in the meantime, test_coercion is testing the current rules). - complex() now only allows the first argument to be a string argument, and raises TypeError if either the second arg is a string or if the second arg is specified when the first is a string. Extension modules ----------------- - gc.get_referents was renamed to gc.get_referrers. Library ------- - Functions in the os.spawn() family now release the global interpreter lock around calling the platform spawn. They should always have done this, but did not before 2.2c1. Multithreaded programs calling an os.spawn function with P_WAIT will no longer block all Python threads until the spawned program completes. It's possible that some programs relies on blocking, although more likely by accident than by design. - webbrowser defaults to netscape.exe on OS/2 now. - Tix.ResizeHandle exposes detach_widget, hide, and show. - The charset alias windows_1252 has been added. - types.StringTypes is a tuple containing the defined string types; usually this will be (str, unicode), but if Python was compiled without Unicode support it will be just (str,). - The pulldom and minidom modules were synchronized to PyXML. Tools/Demos ----------- - A new script called Tools/scripts/google.py was added, which fires off a search on Google. Build ----- - Note that release builds of Python should arrange to define the preprocessor symbol NDEBUG on the command line (or equivalent). In the 2.2 pre-release series we tried to define this by magic in Python.h instead, but it proved to cause problems for extension authors. The Unix, Windows and Mac builds now all define NDEBUG in release builds via cmdline (or equivalent) instead. Ports to other platforms should do likewise. - It is no longer necessary to use --with-suffix when building on a case-insensitive file system (such as Mac OS X HFS+). In the build directory an extension is used, but not in the installed python. C API ----- - New function PyDict_MergeFromSeq2() exposes the built-in dict constructor's logic for updating a dictionary from an iterable object producing key-value pairs. - PyArg_ParseTupleAndKeywords() requires that the number of entries in the keyword list equal the number of argument specifiers. This wasn't checked correctly, and PyArg_ParseTupleAndKeywords could even dump core in some bad cases. This has been repaired. As a result, PyArg_ParseTupleAndKeywords may raise RuntimeError in bad cases that previously went unchallenged. New platforms ------------- Tests ----- Windows ------- Mac ---- - In unix-Python on Mac OS X (and darwin) sys.platform is now "darwin", without any trailing digits. - Changed logic for finding python home in Mac OS X framework Pythons. Now sys.executable points to the executable again, in stead of to the shared library. The latter is used only for locating the python home. What's New in Python 2.2b2? =========================== *Release date: 16-Nov-2001* Type/class unification and new-style classes -------------------------------------------- - Multiple inheritance mixing new-style and classic classes in the list of base classes is now allowed, so this works now: class Classic: pass class Mixed(Classic, object): pass The MRO (method resolution order) for each base class is respected according to its kind, but the MRO for the derived class is computed using new-style MRO rules if any base class is a new-style class. This needs to be documented. - The new built-in dictionary() constructor, and dictionary type, have been renamed to dict. This reflects a decade of common usage. - dict() now accepts an iterable object producing 2-sequences. For example, dict(d.items()) == d for any dictionary d. The argument, and the elements of the argument, can be any iterable objects. - New-style classes can now have a __del__ method, which is called when the instance is deleted (just like for classic classes). - Assignment to object.__dict__ is now possible, for objects that are instances of new-style classes that have a __dict__ (unless the base class forbids it). - Methods of built-in types now properly check for keyword arguments (formerly these were silently ignored). The only built-in methods that take keyword arguments are __call__, __init__ and __new__. - The socket function has been converted to a type; see below. Core and builtins ----------------- - Assignment to __debug__ raises SyntaxError at compile-time. This was promised when 2.1c1 was released as "What's New in Python 2.1c1" (see below) says. - Clarified the error messages for unsupported operands to an operator (like 1 + ''). Extension modules ----------------- - mmap has a new keyword argument, "access", allowing a uniform way for both Windows and Unix users to create read-only, write-through and copy-on-write memory mappings. This was previously possible only on Unix. A new keyword argument was required to support this in a uniform way because the mmap() signatures had diverged across platforms. Thanks to Jay T Miller for repairing this! - By default, the gc.garbage list now contains only those instances in unreachable cycles that have __del__ methods; in 2.1 it contained all instances in unreachable cycles. "Instances" here has been generalized to include instances of both new-style and old-style classes. - The socket module defines a new method for socket objects, sendall(). This is like send() but may make multiple calls to send() until all data has been sent. Also, the socket function has been converted to a subclassable type, like list and tuple (etc.) before it; socket and SocketType are now the same thing. - Various bugfixes to the curses module. There is now a test suite for the curses module (you have to run it manually). - binascii.b2a_base64 no longer places an arbitrary restriction of 57 bytes on its input. Library ------- - tkFileDialog exposes a Directory class and askdirectory convenience function. - Symbolic group names in regular expressions must be unique. For example, the regexp r'(?P<abc>)(?P<abc>)' is not allowed, because a single name can't mean both "group 1" and "group 2" simultaneously. Python 2.2 detects this error at regexp compilation time; previously, the error went undetected, and results were unpredictable. Also in sre, the pattern.split(), pattern.sub(), and pattern.subn() methods have been rewritten in C. Also, an experimental function/method finditer() has been added, which works like findall() but returns an iterator. - Tix exposes more commands through the classes DirSelectBox, DirSelectDialog, ListNoteBook, Meter, CheckList, and the methods tix_addbitmapdir, tix_cget, tix_configure, tix_filedialog, tix_getbitmap, tix_getimage, tix_option_get, and tix_resetoptions. - Traceback objects are now scanned by cyclic garbage collection, so cycles created by casual use of sys.exc_info() no longer cause permanent memory leaks (provided garbage collection is enabled). - mimetypes.py has optional support for non-standard, but commonly found types. guess_type() and guess_extension() now accept an optional 'strict' flag, defaulting to true, which controls whether recognize non-standard types or not. A few non-standard types we know about have been added. Also, when run as a script, there are new -l and -e options. - statcache is now deprecated. - email.Utils.formatdate() now produces the preferred RFC 2822 style dates with numeric timezones (it used to produce obsolete dates hard coded to "GMT" timezone). An optional 'localtime' flag is added to produce dates in the local timezone, with daylight savings time properly taken into account. - In pickle and cPickle, instead of masking errors in load() by transforming them into SystemError, we let the original exception propagate out. Also, implement support for __safe_for_unpickling__ in pickle, as it already was supported in cPickle. Tools/Demos ----------- Build ----- - The dbm module is built using libdb1 if available. The bsddb module is built with libdb3 if available. - Misc/Makefile.pre.in has been removed by BDFL pronouncement. C API ----- - New function PySequence_Fast_GET_SIZE() returns the size of a non- NULL result from PySequence_Fast(), more quickly than calling PySequence_Size(). - New argument unpacking function PyArg_UnpackTuple() added. - New functions PyObject_CallFunctionObjArgs() and PyObject_CallMethodObjArgs() have been added to make it more convenient and efficient to call functions and methods from C. - PyArg_ParseTupleAndKeywords() no longer masks errors, so it's possible that this will propagate errors it didn't before. - New function PyObject_CheckReadBuffer(), which returns true if its argument supports the single-segment readable buffer interface. New platforms ------------- - We've finally confirmed that this release builds on HP-UX 11.00, *with* threads, and passes the test suite. - Thanks to a series of patches from Michael Muller, Python may build again under OS/2 Visual Age C++. - Updated RISCOS port by Dietmar Schwertberger. Tests ----- - Added a test script for the curses module. It isn't run automatically; regrtest.py must be run with '-u curses' to enable it. Windows ------- Mac ---- - PythonScript has been moved to unsupported and is slated to be removed completely in the next release. - It should now be possible to build applets that work on both OS9 and OSX. - The core is now linked with CoreServices not Carbon; as a side result, default 8bit encoding on OSX is now ASCII. - Python should now build on OSX 10.1.1 What's New in Python 2.2b1? =========================== *Release date: 19-Oct-2001* Type/class unification and new-style classes -------------------------------------------- - New-style classes are now always dynamic (except for built-in and extension types). There is no longer a performance penalty, and I no longer see another reason to keep this baggage around. One relic remains: the __dict__ of a new-style class is a read-only proxy; you must set the class's attribute to modify it. As a consequence, the __defined__ attribute of new-style types no longer exists, for lack of need: there is once again only one __dict__ (although in the future a __cache__ may be resurrected with a similar function, if I can prove that it actually speeds things up). - C.__doc__ now works as expected for new-style classes (in 2.2a4 it always returned None, even when there was a class docstring). - doctest now finds and runs docstrings attached to new-style classes, class methods, static methods, and properties. Core and builtins ----------------- - A very subtle syntactical pitfall in list comprehensions was fixed. For example: [a+b for a in 'abc', for b in 'def']. The comma in this example is a mistake. Previously, this would silently let 'a' iterate over the singleton tuple ('abc',), yielding ['abcd', 'abce', 'abcf'] rather than the intended ['ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf']. Now, this is flagged as a syntax error. Note that [a for a in <singleton>] is a convoluted way to say [<singleton>] anyway, so it's not like any expressiveness is lost. - getattr(obj, name, default) now only catches AttributeError, as documented, rather than returning the default value for all exceptions (which could mask bugs in a __getattr__ hook, for example). - Weak reference objects are now part of the core and offer a C API. A bug which could allow a core dump when binary operations involved proxy reference has been fixed. weakref.ReferenceError is now a built-in exception. - unicode(obj) now behaves more like str(obj), accepting arbitrary objects, and calling a __unicode__ method if it exists. unicode(obj, encoding) and unicode(obj, encoding, errors) still require an 8-bit string or character buffer argument. - isinstance() now allows any object as the first argument and a class, a type or something with a __bases__ tuple attribute for the second argument. The second argument may also be a tuple of a class, type, or something with __bases__, in which case isinstance() will return true if the first argument is an instance of any of the things contained in the second argument tuple. E.g. isinstance(x, (A, B)) returns true if x is an instance of A or B. Extension modules ----------------- - thread.start_new_thread() now returns the thread ID (previously None). - binascii has now two quopri support functions, a2b_qp and b2a_qp. - readline now supports setting the startup_hook and the pre_event_hook, and adds the add_history() function. - os and posix supports chroot(), setgroups() and unsetenv() where available. The stat(), fstat(), statvfs() and fstatvfs() functions now return "pseudo-sequences" -- the various fields can now be accessed as attributes (e.g. os.stat("/").st_mtime) but for backwards compatibility they also behave as a fixed-length sequence. Some platform-specific fields (e.g. st_rdev) are only accessible as attributes. - time: localtime(), gmtime() and strptime() now return a pseudo-sequence similar to the os.stat() return value, with attributes like tm_year etc. - Decompression objects in the zlib module now accept an optional second parameter to decompress() that specifies the maximum amount of memory to use for the uncompressed data. - optional SSL support in the socket module now exports OpenSSL functions RAND_add(), RAND_egd(), and RAND_status(). These calls are useful on platforms like Solaris where OpenSSL does not automatically seed its PRNG. Also, the keyfile and certfile arguments to socket.ssl() are now optional. - posixmodule (and by extension, the os module on POSIX platforms) now exports O_LARGEFILE, O_DIRECT, O_DIRECTORY, and O_NOFOLLOW. Library ------- - doctest now excludes functions and classes not defined by the module being tested, thanks to Tim Hochberg. - HotShot, a new profiler implemented using a C-based callback, has been added. This substantially reduces the overhead of profiling, but it is still quite preliminary. Support modules and documentation will be added in upcoming releases (before 2.2 final). - profile now produces correct output in situations where an exception raised in Python is cleared by C code (e.g. hasattr()). This used to cause wrong output, including spurious claims of recursive functions and attribution of time spent to the wrong function. The code and documentation for the derived OldProfile and HotProfile profiling classes was removed. The code hasn't worked for years (if you tried to use them, they raised exceptions). OldProfile intended to reproduce the behavior of the profiler Python used more than 7 years ago, and isn't interesting anymore. HotProfile intended to provide a faster profiler (but producing less information), and that's a worthy goal we intend to meet via a different approach (but without losing information). - Profile.calibrate() has a new implementation that should deliver a much better system-specific calibration constant. The constant can now be specified in an instance constructor, or as a Profile class or instance variable, instead of by editing profile.py's source code. Calibration must still be done manually (see the docs for the profile module). Note that Profile.calibrate() must be overridden by subclasses. Improving the accuracy required exploiting detailed knowledge of profiler internals; the earlier method abstracted away the details and measured a simplified model instead, but consequently computed a constant too small by a factor of 2 on some modern machines. - quopri's encode and decode methods take an optional header parameter, which indicates whether output is intended for the header 'Q' encoding. - The SocketServer.ThreadingMixIn class now closes the request after finish_request() returns. (Not when it errors out though.) - The nntplib module's NNTP.body() method has grown a 'file' argument to allow saving the message body to a file. - The email package has added a class email.Parser.HeaderParser which only parses headers and does not recurse into the message's body. Also, the module/class MIMEAudio has been added for representing audio data (contributed by Anthony Baxter). - ftplib should be able to handle files > 2GB. - ConfigParser.getboolean() now also interprets TRUE, FALSE, YES, NO, ON, and OFF. - xml.dom.minidom NodeList objects now support the length attribute and item() method as required by the DOM specifications. Tools/Demos ----------- - Demo/dns was removed. It no longer serves any purpose; a package derived from it is now maintained by Anthony Baxter, see http://PyDNS.SourceForge.net. - The freeze tool has been made more robust, and two new options have been added: -X and -E. Build ----- - configure will use CXX in LINKCC if CXX is used to build main() and the system requires to link a C++ main using the C++ compiler. C API ----- - The documentation for the tp_compare slot is updated to require that the return value must be -1, 0, 1; an arbitrary number <0 or >0 is not correct. This is not yet enforced but will be enforced in Python 2.3; even later, we may use -2 to indicate errors and +2 for "NotImplemented". Right now, -1 should be used for an error return. - PyLong_AsLongLong() now accepts int (as well as long) arguments. Consequently, PyArg_ParseTuple's 'L' code also accepts int (as well as long) arguments. - PyThread_start_new_thread() now returns a long int giving the thread ID, if one can be calculated; it returns -1 for error, 0 if no thread ID is calculated (this is an incompatible change, but only the thread module used this API). This code has only really been tested on Linux and Windows; other platforms please beware (and report any bugs or strange behavior). - PyUnicode_FromEncodedObject() no longer accepts Unicode objects as input. New platforms ------------- Tests ----- Windows ------- - Installer: If you install IDLE, and don't disable file-extension registration, a new "Edit with IDLE" context (right-click) menu entry is created for .py and .pyw files. - The signal module now supports SIGBREAK on Windows, thanks to Steven Scott. Note that SIGBREAK is unique to Windows. The default SIGBREAK action remains to call Win32 ExitProcess(). This can be changed via signal.signal(). For example:: # Make Ctrl+Break raise KeyboardInterrupt, like Python's default Ctrl+C # (SIGINT) behavior. import signal signal.signal(signal.SIGBREAK, signal.default_int_handler) try: while 1: pass except KeyboardInterrupt: # We get here on Ctrl+C or Ctrl+Break now; if we had not changed # SIGBREAK, only on Ctrl+C (and Ctrl+Break would terminate the # program without the possibility for any Python-level cleanup). print "Clean exit" What's New in Python 2.2a4? =========================== *Release date: 28-Sep-2001* Type/class unification and new-style classes -------------------------------------------- - pydoc and inspect are now aware of new-style classes; e.g. help(list) at the interactive prompt now shows proper documentation for all operations on list objects. - Applications using Jim Fulton's ExtensionClass module can now safely be used with Python 2.2. In particular, Zope 2.4.1 now works with Python 2.2 (as well as with Python 2.1.1). The Demo/metaclass examples also work again. It is hoped that Gtk and Boost also work with 2.2a4 and beyond. (If you can confirm this, please write webmaster@python.org; if there are still problems, please open a bug report on SourceForge.) - property() now takes 4 keyword arguments: fget, fset, fdel and doc. These map to read-only attributes 'fget', 'fset', 'fdel', and '__doc__' in the constructed property object. fget, fset and fdel weren't discoverable from Python in 2.2a3. __doc__ is new, and allows associating a docstring with a property. - Comparison overloading is now more completely implemented. For example, a str subclass instance can properly be compared to a str instance, and it can properly overload comparison. Ditto for most other built-in object types. - The repr() of new-style classes has changed; instead of <type 'M.Foo'> a new-style class is now rendered as <class 'M.Foo'>, *except* for built-in types, which are still rendered as <type 'Foo'> (to avoid upsetting existing code that might parse or otherwise rely on repr() of certain type objects). - The repr() of new-style objects is now always <Foo object at XXX>; previously, it was sometimes <Foo instance at XXX>. - For new-style classes, what was previously called __getattr__ is now called __getattribute__. This method, if defined, is called for *every* attribute access. A new __getattr__ hook more similar to the one in classic classes is defined which is called only if regular attribute access raises AttributeError; to catch *all* attribute access, you can use __getattribute__ (for new-style classes). If both are defined, __getattribute__ is called first, and if it raises AttributeError, __getattr__ is called. - The __class__ attribute of new-style objects can be assigned to. The new class must have the same C-level object layout as the old class. - The built-in file type can be subclassed now. In the usual pattern, "file" is the name of the built-in type, and file() is a new built-in constructor, with the same signature as the built-in open() function. file() is now the preferred way to open a file. - Previously, __new__ would only see sequential arguments passed to the type in a constructor call; __init__ would see both sequential and keyword arguments. This made no sense whatsoever any more, so now both __new__ and __init__ see all arguments. - Previously, hash() applied to an instance of a subclass of str or unicode always returned 0. This has been repaired. - Previously, an operation on an instance of a subclass of an immutable type (int, long, float, complex, tuple, str, unicode), where the subtype didn't override the operation (and so the operation was handled by the built-in type), could return that instance instead a value of the base type. For example, if s was of a str subclass type, s[:] returned s as-is. Now it returns a str with the same value as s. - Provisional support for pickling new-style objects has been added. Core ---- - file.writelines() now accepts any iterable object producing strings. - PyUnicode_FromEncodedObject() now works very much like PyObject_Str(obj) in that it tries to use __str__/tp_str on the object if the object is not a string or buffer. This makes unicode() behave like str() when applied to non-string/buffer objects. - PyFile_WriteObject now passes Unicode objects to the file's write method. As a result, all file-like objects which may be the target of a print statement must support Unicode objects, i.e. they must at least convert them into ASCII strings. - Thread scheduling on Solaris should be improved; it is no longer necessary to insert a small sleep at the start of a thread in order to let other runnable threads be scheduled. Library ------- - StringIO.StringIO instances and cStringIO.StringIO instances support read character buffer compatible objects for their .write() methods. These objects are converted to strings and then handled as such by the instances. - The "email" package has been added. This is basically a port of the mimelib package <http://sf.net/projects/mimelib> with API changes and some implementations updated to use iterators and generators. - difflib.ndiff() and difflib.Differ.compare() are generators now. This restores the ability of Tools/scripts/ndiff.py to start producing output before the entire comparison is complete. - StringIO.StringIO instances and cStringIO.StringIO instances support iteration just like file objects (i.e. their .readline() method is called for each iteration until it returns an empty string). - The codecs module has grown four new helper APIs to access built-in codecs: getencoder(), getdecoder(), getreader(), getwriter(). - SimpleXMLRPCServer: a new module (based upon SimpleHTMLServer) simplifies writing XML RPC servers. - os.path.realpath(): a new function that returns the absolute pathname after interpretation of symbolic links. On non-Unix systems, this is an alias for os.path.abspath(). - operator.indexOf() (PySequence_Index() in the C API) now works with any iterable object. - smtplib now supports various authentication and security features of the SMTP protocol through the new login() and starttls() methods. - hmac: a new module implementing keyed hashing for message authentication. - mimetypes now recognizes more extensions and file types. At the same time, some mappings not sanctioned by IANA were removed. - The "compiler" package has been brought up to date to the state of Python 2.2 bytecode generation. It has also been promoted from a Tool to a standard library package. (Tools/compiler still exists as a sample driver.) Build ----- - Large file support (LFS) is now automatic when the platform supports it; no more manual configuration tweaks are needed. On Linux, at least, it's possible to have a system whose C library supports large files but whose kernel doesn't; in this case, large file support is still enabled but doesn't do you any good unless you upgrade your kernel or share your Python executable with another system whose kernel has large file support. - The configure script now supplies plausible defaults in a cross-compilation environment. This doesn't mean that the supplied values are always correct, or that cross-compilation now works flawlessly -- but it's a first step (and it shuts up most of autoconf's warnings about AC_TRY_RUN). - The Unix build is now a bit less chatty, courtesy of the parser generator. The build is completely silent (except for errors) when using "make -s", thanks to a -q option to setup.py. C API ----- - The "structmember" API now supports some new flag bits to deny read and/or write access to attributes in restricted execution mode. New platforms ------------- - Compaq's iPAQ handheld, running the "familiar" Linux distribution (http://familiar.handhelds.org). Tests ----- - The "classic" standard tests, which work by comparing stdout to an expected-output file under Lib/test/output/, no longer stop at the first mismatch. Instead the test is run to completion, and a variant of ndiff-style comparison is used to report all differences. This is much easier to understand than the previous style of reporting. - The unittest-based standard tests now use regrtest's test_main() convention, instead of running as a side-effect of merely being imported. This allows these tests to be run in more natural and flexible ways as unittests, outside the regrtest framework. - regrtest.py is much better integrated with unittest and doctest now, especially in regard to reporting errors. Windows ------- - Large file support now also works for files > 4GB, on filesystems that support it (NTFS under Windows 2000). See "What's New in Python 2.2a3" for more detail. What's New in Python 2.2a3? =========================== *Release Date: 07-Sep-2001* Core ---- - Conversion of long to float now raises OverflowError if the long is too big to represent as a C double. - The 3-argument builtin pow() no longer allows a third non-None argument if either of the first two arguments is a float, or if both are of integer types and the second argument is negative (in which latter case the arguments are converted to float, so this is really the same restriction). - The builtin dir() now returns more information, and sometimes much more, generally naming all attributes of an object, and all attributes reachable from the object via its class, and from its class's base classes, and so on from them too. Example: in 2.2a2, dir([]) returned an empty list. In 2.2a3, >>> dir([]) ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__eq__', '__ge__', '__getattr__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__repr__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] dir(module) continues to return only the module's attributes, though. - Overflowing operations on plain ints now return a long int rather than raising OverflowError. This is a partial implementation of PEP 237. You can use -Wdefault::OverflowWarning to enable a warning for this situation, and -Werror::OverflowWarning to revert to the old OverflowError exception. - A new command line option, -Q<arg>, is added to control run-time warnings for the use of classic division. (See PEP 238.) Possible values are -Qold, -Qwarn, -Qwarnall, and -Qnew. The default is -Qold, meaning the / operator has its classic meaning and no warnings are issued. Using -Qwarn issues a run-time warning about all uses of classic division for int and long arguments; -Qwarnall also warns about classic division for float and complex arguments (for use with fixdiv.py). [Note: the remainder of this item (preserved below) became obsolete in 2.2c1 -- -Qnew has global effect in 2.2] :: Using -Qnew is questionable; it turns on new division by default, but only in the __main__ module. You can usefully combine -Qwarn or -Qwarnall and -Qnew: this gives the __main__ module new division, and warns about classic division everywhere else. - Many built-in types can now be subclassed. This applies to int, long, float, str, unicode, and tuple. (The types complex, list and dictionary can also be subclassed; this was introduced earlier.) Note that restrictions apply when subclassing immutable built-in types: you can only affect the value of the instance by overloading __new__. You can add mutable attributes, and the subclass instances will have a __dict__ attribute, but you cannot change the "value" (as implemented by the base class) of an immutable subclass instance once it is created. - The dictionary constructor now takes an optional argument, a mapping-like object, and initializes the dictionary from its (key, value) pairs. - A new built-in type, super, has been added. This facilitates making "cooperative super calls" in a multiple inheritance setting. For an explanation, see http://www.python.org/2.2/descrintro.html#cooperation - A new built-in type, property, has been added. This enables the creation of "properties". These are attributes implemented by getter and setter functions (or only one of these for read-only or write-only attributes), without the need to override __getattr__. See http://www.python.org/2.2/descrintro.html#property - The syntax of floating-point and imaginary literals has been liberalized, to allow leading zeroes. Examples of literals now legal that were SyntaxErrors before: 00.0 0e3 0100j 07.5 00000000000000000008. - An old tokenizer bug allowed floating point literals with an incomplete exponent, such as 1e and 3.1e-. Such literals now raise SyntaxError. Library ------- - telnetlib includes symbolic names for the options, and support for setting an option negotiation callback. It also supports processing of suboptions. - The new C standard no longer requires that math libraries set errno to ERANGE on overflow. For platform libraries that exploit this new freedom, Python's overflow-checking was wholly broken. A new overflow- checking scheme attempts to repair that, but may not be reliable on all platforms (C doesn't seem to provide anything both useful and portable in this area anymore). - Asynchronous timeout actions are available through the new class threading.Timer. - math.log and math.log10 now return sensible results for even huge long arguments. For example, math.log10(10 ** 10000) ~= 10000.0. - A new function, imp.lock_held(), returns 1 when the import lock is currently held. See the docs for the imp module. - pickle, cPickle and marshal on 32-bit platforms can now correctly read dumps containing ints written on platforms where Python ints are 8 bytes. When read on a box where Python ints are 4 bytes, such values are converted to Python longs. - In restricted execution mode (using the rexec module), unmarshalling code objects is no longer allowed. This plugs a security hole. - unittest.TestResult instances no longer store references to tracebacks generated by test failures. This prevents unexpected dangling references to objects that should be garbage collected between tests. Tools ----- - Tools/scripts/fixdiv.py has been added which can be used to fix division operators as per PEP 238. Build ----- - If you are an adventurous person using Mac OS X you may want to look at Mac/OSX. There is a Makefile there that will build Python as a real Mac application, which can be used for experimenting with Carbon or Cocoa. Discussion of this on pythonmac-sig, please. C API ----- - New function PyObject_Dir(obj), like Python __builtin__.dir(obj). - Note that PyLong_AsDouble can fail! This has always been true, but no callers checked for it. It's more likely to fail now, because overflow errors are properly detected now. The proper way to check:: double x = PyLong_AsDouble(some_long_object); if (x == -1.0 && PyErr_Occurred()) { /* The conversion failed. */ } - The GC API has been changed. Extensions that use the old API will still compile but will not participate in GC. To upgrade an extension module: - rename Py_TPFLAGS_GC to PyTPFLAGS_HAVE_GC - use PyObject_GC_New or PyObject_GC_NewVar to allocate objects and PyObject_GC_Del to deallocate them - rename PyObject_GC_Init to PyObject_GC_Track and PyObject_GC_Fini to PyObject_GC_UnTrack - remove PyGC_HEAD_SIZE from object size calculations - remove calls to PyObject_AS_GC and PyObject_FROM_GC - Two new functions: PyString_FromFormat() and PyString_FromFormatV(). These can be used safely to construct string objects from a sprintf-style format string (similar to the format string supported by PyErr_Format()). New platforms ------------- - Stephen Hansen contributed patches sufficient to get a clean compile under Borland C (Windows), but he reports problems running it and ran out of time to complete the port. Volunteers? Expect a MemoryError when importing the types module; this is probably shallow, and causing later failures too. Tests ----- Windows ------- - Large file support is now enabled on Win32 platforms as well as on Win64. This means that, for example, you can use f.tell() and f.seek() to manipulate files larger than 2 gigabytes (provided you have enough disk space, and are using a Windows filesystem that supports large partitions). Windows filesystem limits: FAT has a 2GB (gigabyte) filesize limit, and large file support makes no difference there. FAT32's limit is 4GB, and files >= 2GB are easier to use from Python now. NTFS has no practical limit on file size, and files of any size can be used from Python now. - The w9xpopen hack is now used on Windows NT and 2000 too when COMPSPEC points to command.com (patch from Brian Quinlan). What's New in Python 2.2a2? =========================== *Release Date: 22-Aug-2001* Build ----- - Tim Peters developed a brand new Windows installer using Wise 8.1, generously donated to us by Wise Solutions. - configure supports a new option --enable-unicode, with the values ucs2 and ucs4 (new in 2.2a1). With --disable-unicode, the Unicode type and supporting code is completely removed from the interpreter. - A new configure option --enable-framework builds a Mac OS X framework, which "make frameworkinstall" will install. This provides a starting point for more mac-like functionality, join pythonmac-sig@python.org if you are interested in helping. - The NeXT platform is no longer supported. - The 'new' module is now statically linked. Tools ----- - The new Tools/scripts/cleanfuture.py can be used to automatically edit out obsolete future statements from Python source code. See the module docstring for details. Tests ----- - regrtest.py now knows which tests are expected to be skipped on some platforms, allowing clearer test result output to be given. regrtest also has optional --use/-u switch to run normally disabled tests which require network access or consume significant disk resources. - Several new tests in the standard test suite, with special thanks to Nick Mathewson. Core ---- - The floor division operator // has been added as outlined in PEP 238. The / operator still provides classic division (and will until Python 3.0) unless "from __future__ import division" is included, in which case the / operator will provide true division. The operator module provides truediv() and floordiv() functions. Augmented assignment variants are included, as are the equivalent overloadable methods and C API methods. See the PEP for a full discussion: <http://python.sf.net/peps/pep-0238.html> - Future statements are now effective in simulated interactive shells (like IDLE). This should "just work" by magic, but read Michael Hudson's "Future statements in simulated shells" PEP 264 for full details: <http://python.sf.net/peps/pep-0264.html>. - The type/class unification (PEP 252-253) was integrated into the trunk and is not so tentative any more (the exact specification of some features is still tentative). A lot of work has done on fixing bugs and adding robustness and features (performance still has to come a long way). - Warnings about a mismatch in the Python API during extension import now use the Python warning framework (which makes it possible to write filters for these warnings). - A function's __dict__ (aka func_dict) will now always be a dictionary. It used to be possible to delete it or set it to None, but now both actions raise TypeErrors. It is still legal to set it to a dictionary object. Getting func.__dict__ before any attributes have been assigned now returns an empty dictionary instead of None. - A new command line option, -E, was added which disables the use of all environment variables, or at least those that are specifically significant to Python. Usually those have a name starting with "PYTHON". This was used to fix a problem where the tests fail if the user happens to have PYTHONHOME or PYTHONPATH pointing to an older distribution. Library ------- - New class Differ and new functions ndiff() and restore() in difflib.py. These package the algorithms used by the popular Tools/scripts/ndiff.py, for programmatic reuse. - New function xml.sax.saxutils.quoteattr(): Quote an XML attribute value using the minimal quoting required for the value; more reliable than using xml.sax.saxutils.escape() for attribute values. - Readline completion support for cmd.Cmd was added. - Calling os.tempnam() or os.tmpnam() generate RuntimeWarnings. - Added function threading.BoundedSemaphore() - Added Ka-Ping Yee's cgitb.py module. - The 'new' module now exposes the CO_xxx flags. - The gc module offers the get_referents function. New platforms ------------- C API ----- - Two new APIs PyOS_snprintf() and PyOS_vsnprintf() were added which provide a cross-platform implementations for the relatively new snprintf()/vsnprintf() C lib APIs. In contrast to the standard sprintf() and vsprintf() C lib APIs, these versions apply bounds checking on the used buffer which enhances protection against buffer overruns. - Unicode APIs now use name mangling to assure that mixing interpreters and extensions using different Unicode widths is rendered next to impossible. Trying to import an incompatible Unicode-aware extension will result in an ImportError. Unicode extensions writers must make sure to check the Unicode width compatibility in their extensions by using at least one of the mangled Unicode APIs in the extension. - Two new flags METH_NOARGS and METH_O are available in method definition tables to simplify implementation of methods with no arguments and a single untyped argument. Calling such methods is more efficient than calling corresponding METH_VARARGS methods. METH_OLDARGS is now deprecated. Windows ------- - "import module" now compiles module.pyw if it exists and nothing else relevant is found. What's New in Python 2.2a1? =========================== *Release date: 18-Jul-2001* Core ---- - TENTATIVELY, a large amount of code implementing much of what's described in PEP 252 (Making Types Look More Like Classes) and PEP 253 (Subtyping Built-in Types) was added. This will be released with Python 2.2a1. Documentation will be provided separately through http://www.python.org/2.2/. The purpose of releasing this with Python 2.2a1 is to test backwards compatibility. It is possible, though not likely, that a decision is made not to release this code as part of 2.2 final, if any serious backwards incompatibilities are found during alpha testing that cannot be repaired. - Generators were added; this is a new way to create an iterator (see below) using what looks like a simple function containing one or more 'yield' statements. See PEP 255. Since this adds a new keyword to the language, this feature must be enabled by including a future statement: "from __future__ import generators" (see PEP 236). Generators will become a standard feature in a future release (probably 2.3). Without this future statement, 'yield' remains an ordinary identifier, but a warning is issued each time it is used. (These warnings currently don't conform to the warnings framework of PEP 230; we intend to fix this in 2.2a2.) - The UTF-16 codec was modified to be more RFC compliant. It will now only remove BOM characters at the start of the string and then only if running in native mode (UTF-16-LE and -BE won't remove a leading BMO character). - Strings now have a new method .decode() to complement the already existing .encode() method. These two methods provide direct access to the corresponding decoders and encoders of the registered codecs. To enhance the usability of the .encode() method, the special casing of Unicode object return values was dropped (Unicode objects were auto-magically converted to string using the default encoding). Both methods will now return whatever the codec in charge of the requested encoding returns as object, e.g. Unicode codecs will return Unicode objects when decoding is requested ("äöü".decode("latin-1") will return u"äöü"). This enables codec writer to create codecs for various simple to use conversions. New codecs were added to demonstrate these new features (the .encode() and .decode() columns indicate the type of the returned objects): +---------+-----------+-----------+-----------------------------+ |Name | .encode() | .decode() | Description | +=========+===========+===========+=============================+ |uu | string | string | UU codec (e.g. for email) | +---------+-----------+-----------+-----------------------------+ |base64 | string | string | base64 codec | +---------+-----------+-----------+-----------------------------+ |quopri | string | string | quoted-printable codec | +---------+-----------+-----------+-----------------------------+ |zlib | string | string | zlib compression | +---------+-----------+-----------+-----------------------------+ |hex | string | string | 2-byte hex codec | +---------+-----------+-----------+-----------------------------+ |rot-13 | string | Unicode | ROT-13 Unicode charmap codec| +---------+-----------+-----------+-----------------------------+ - Some operating systems now support the concept of a default Unicode encoding for file system operations. Notably, Windows supports 'mbcs' as the default. The Macintosh will also adopt this concept in the medium term, although the default encoding for that platform will be other than 'mbcs'. On operating system that support non-ASCII filenames, it is common for functions that return filenames (such as os.listdir()) to return Python string objects pre-encoded using the default file system encoding for the platform. As this encoding is likely to be different from Python's default encoding, converting this name to a Unicode object before passing it back to the Operating System would result in a Unicode error, as Python would attempt to use its default encoding (generally ASCII) rather than the default encoding for the file system. In general, this change simply removes surprises when working with Unicode and the file system, making these operations work as you expect, increasing the transparency of Unicode objects in this context. See [????] for more details, including examples. - Float (and complex) literals in source code were evaluated to full precision only when running from a .py file; the same code loaded from a .pyc (or .pyo) file could suffer numeric differences starting at about the 12th significant decimal digit. For example, on a machine with IEEE-754 floating arithmetic, x = 9007199254740992.0 print long(x) printed 9007199254740992 if run directly from .py, but 9007199254740000 if from a compiled (.pyc or .pyo) file. This was due to marshal using str(float) instead of repr(float) when building code objects. marshal now uses repr(float) instead, which should reproduce floats to full machine precision (assuming the platform C float<->string I/O conversion functions are of good quality). This may cause floating-point results to change in some cases, and usually for the better, but may also cause numerically unstable algorithms to break. - The implementation of dicts suffers fewer collisions, which has speed benefits. However, the order in which dict entries appear in dict.keys(), dict.values() and dict.items() may differ from previous releases for a given dict. Nothing is defined about this order, so no program should rely on it. Nevertheless, it's easy to write test cases that rely on the order by accident, typically because of printing the str() or repr() of a dict to an "expected results" file. See Lib/test/test_support.py's new sortdict(dict) function for a simple way to display a dict in sorted order. - Many other small changes to dicts were made, resulting in faster operation along the most common code paths. - Dictionary objects now support the "in" operator: "x in dict" means the same as dict.has_key(x). - The update() method of dictionaries now accepts generic mapping objects. Specifically the argument object must support the .keys() and __getitem__() methods. This allows you to say, for example, {}.update(UserDict()) - Iterators were added; this is a generalized way of providing values to a for loop. See PEP 234. There's a new built-in function iter() to return an iterator. There's a new protocol to get the next value from an iterator using the next() method (in Python) or the tp_iternext slot (in C). There's a new protocol to get iterators using the __iter__() method (in Python) or the tp_iter slot (in C). Iterating (i.e. a for loop) over a dictionary generates its keys. Iterating over a file generates its lines. - The following functions were generalized to work nicely with iterator arguments:: map(), filter(), reduce(), zip() list(), tuple() (PySequence_Tuple() and PySequence_Fast() in C API) max(), min() join() method of strings extend() method of lists 'x in y' and 'x not in y' (PySequence_Contains() in C API) operator.countOf() (PySequence_Count() in C API) right-hand side of assignment statements with multiple targets, such as :: x, y, z = some_iterable_object_returning_exactly_3_values - Accessing module attributes is significantly faster (for example, random.random or os.path or yourPythonModule.yourAttribute). - Comparing dictionary objects via == and != is faster, and now works even if the keys and values don't support comparisons other than ==. - Comparing dictionaries in ways other than == and != is slower: there were insecurities in the dict comparison implementation that could cause Python to crash if the element comparison routines for the dict keys and/or values mutated the dicts. Making the code bulletproof slowed it down. - Collisions in dicts are resolved via a new approach, which can help dramatically in bad cases. For example, looking up every key in a dict d with d.keys() == [i << 16 for i in range(20000)] is approximately 500x faster now. Thanks to Christian Tismer for pointing out the cause and the nature of an effective cure (last December! better late than never). - repr() is much faster for large containers (dict, list, tuple). Library ------- - The constants ascii_letters, ascii_lowercase. and ascii_uppercase were added to the string module. These a locale-independent constants, unlike letters, lowercase, and uppercase. These are now use in appropriate locations in the standard library. - The flags used in dlopen calls can now be configured using sys.setdlopenflags and queried using sys.getdlopenflags. - Fredrik Lundh's xmlrpclib is now a standard library module. This provides full client-side XML-RPC support. In addition, Demo/xmlrpc/ contains two server frameworks (one SocketServer-based, one asyncore-based). Thanks to Eric Raymond for the documentation. - The xrange() object is simplified: it no longer supports slicing, repetition, comparisons, efficient 'in' checking, the tolist() method, or the start, stop and step attributes. See PEP 260. - A new function fnmatch.filter to filter lists of file names was added. - calendar.py uses month and day names based on the current locale. - strop is now *really* obsolete (this was announced before with 1.6), and issues DeprecationWarning when used (except for the four items that are still imported into string.py). - Cookie.py now sorts key+value pairs by key in output strings. - pprint.isrecursive(object) didn't correctly identify recursive objects. Now it does. - pprint functions now much faster for large containers (tuple, list, dict). - New 'q' and 'Q' format codes in the struct module, corresponding to C types "long long" and "unsigned long long" (on Windows, __int64). In native mode, these can be used only when the platform C compiler supports these types (when HAVE_LONG_LONG is #define'd by the Python config process), and then they inherit the sizes and alignments of the C types. In standard mode, 'q' and 'Q' are supported on all platforms, and are 8-byte integral types. - The site module installs a new built-in function 'help' that invokes pydoc.help. It must be invoked as 'help()'; when invoked as 'help', it displays a message reminding the user to use 'help()' or 'help(object)'. Tests ----- - New test_mutants.py runs dict comparisons where the key and value comparison operators mutate the dicts randomly during comparison. This rapidly causes Python to crash under earlier releases (not for the faint of heart: it can also cause Win9x to freeze or reboot!). - New test_pprint.py verifies that pprint.isrecursive() and pprint.isreadable() return sensible results. Also verifies that simple cases produce correct output. C API ----- - Removed the unused last_is_sticky argument from the internal _PyTuple_Resize(). If this affects you, you were cheating. What's New in Python 2.1 (final)? ================================= We only changed a few things since the last release candidate, all in Python library code: - A bug in the locale module was fixed that affected locales which define no grouping for numeric formatting. - A few bugs in the weakref module's implementations of weak dictionaries (WeakValueDictionary and WeakKeyDictionary) were fixed, and the test suite was updated to check for these bugs. - An old bug in the os.path.walk() function (introduced in Python 2.0!) was fixed: a non-existent file would cause an exception instead of being ignored. - Fixed a few bugs in the new symtable module found by Neil Norwitz's PyChecker. What's New in Python 2.1c2? =========================== A flurry of small changes, and one showstopper fixed in the nick of time made it necessary to release another release candidate. The list here is the *complete* list of patches (except version updates): Core - Tim discovered a nasty bug in the dictionary code, caused by PyDict_Next() calling dict_resize(), and the GC code's use of PyDict_Next() violating an assumption in dict_items(). This was fixed with considerable amounts of band-aid, but the net effect is a saner and more robust implementation. - Made a bunch of symbols static that were accidentally global. Build and Ports - The setup.py script didn't check for a new enough version of zlib (1.1.3 is needed). Now it does. - Changed "make clean" target to also remove shared libraries. - Added a more general warning about the SGI Irix optimizer to README. Library - Fix a bug in urllib.basejoin("http://host", "../file.html") which omitted the slash between host and file.html. - The mailbox module's _Mailbox class contained a completely broken and undocumented seek() method. Ripped it out. - Fixed a bunch of typos in various library modules (urllib2, smtpd, sgmllib, netrc, chunk) found by Neil Norwitz's PyChecker. - Fixed a few last-minute bugs in unittest. Extensions - Reverted the patch to the OpenSSL code in socketmodule.c to support RAND_status() and the EGD, and the subsequent patch that tried to fix it for pre-0.9.5 versions; the problem with the patch is that on some systems it issues a warning whenever socket is imported, and that's unacceptable. Tests - Fixed the pickle tests to work with "import test.test_pickle". - Tweaked test_locale.py to actually run the test Windows. - In distutils/archive_util.py, call zipfile.ZipFile() with mode "w", not "wb" (which is not a valid mode at all). - Fix pstats browser crashes. Import readline if it exists to make the user interface nicer. - Add "import thread" to the top of test modules that import the threading module (test_asynchat and test_threadedtempfile). This prevents test failures caused by a broken threading module resulting from a previously caught failed import. - Changed test_asynchat.py to set the SO_REUSEADDR option; this was needed on some platforms (e.g. Solaris 8) when the tests are run twice in succession. - Skip rather than fail test_sunaudiodev if no audio device is found. What's New in Python 2.1c1? =========================== This list was significantly updated when 2.1c2 was released; the 2.1c1 release didn't mention most changes that were actually part of 2.1c1: Legal - Copyright was assigned to the Python Software Foundation (PSF) and a PSF license (very similar to the CNRI license) was added. - The CNRI copyright notice was updated to include 2001. Core - After a public outcry, assignment to __debug__ is no longer illegal; instead, a warning is issued. It will become illegal in 2.2. - Fixed a core dump with "%#x" % 0, and changed the semantics so that "%#x" now always prepends "0x", even if the value is zero. - Fixed some nits in the bytecode compiler. - Fixed core dumps when calling certain kinds of non-functions. - Fixed various core dumps caused by reference count bugs. Build and Ports - Use INSTALL_SCRIPT to install script files. - New port: SCO Unixware 7, by Billy G. Allie. - Updated RISCOS port. - Updated BeOS port and notes. - Various other porting problems resolved. Library - The TERMIOS and SOCKET modules are now truly obsolete and unnecessary. Their symbols are incorporated in the termios and socket modules. - Fixed some 64-bit bugs in pickle, cPickle, and struct, and added better tests for pickling. - threading: make Condition.wait() robust against KeyboardInterrupt. - zipfile: add support to zipfile to support opening an archive represented by an open file rather than a file name. Fix bug where the archive was not properly closed. Fixed a bug in this bugfix where flush() was called for a read-only file. - imputil: added an uninstall() method to the ImportManager. - Canvas: fixed bugs in lower() and tkraise() methods. - SocketServer: API change (added overridable close_request() method) so that the TCP server can explicitly close the request. - pstats: Eric Raymond added a simple interactive statistics browser, invoked when the module is run as a script. - locale: fixed a problem in format(). - webbrowser: made it work when the BROWSER environment variable has a value like "/usr/bin/netscape". Made it auto-detect Konqueror for KDE 2. Fixed some other nits. - unittest: changes to allow using a different exception than AssertionError, and added a few more function aliases. Some other small changes. - urllib, urllib2: fixed redirect problems and a coupleof other nits. - asynchat: fixed a critical bug in asynchat that slipped through the 2.1b2 release. Fixed another rare bug. - Fix some unqualified except: clauses (always a bad code example). XML - pyexpat: new API get_version_string(). - Fixed some minidom bugs. Extensions - Fixed a core dump in _weakref. Removed the weakref.mapping() function (it adds nothing to the API). - Rationalized the use of header files in the readline module, to make it compile (albeit with some warnings) with the very recent readline 4.2, without breaking for earlier versions. - Hopefully fixed a buffering problem in linuxaudiodev. - Attempted a fix to make the OpenSSL support in the socket module work again with pre-0.9.5 versions of OpenSSL. Tests - Added a test case for asynchat and asyncore. - Removed coupling between tests where one test failing could break another. Tools - Ping added an interactive help browser to pydoc, fixed some nits in the rest of the pydoc code, and added some features to his inspect module. - An updated python-mode.el version 4.1 which integrates Ken Manheimer's pdbtrack.el. This makes debugging Python code via pdb much nicer in XEmacs and Emacs. When stepping through your program with pdb, in either the shell window or the *Python* window, the source file and line will be tracked by an arrow. Very cool! - IDLE: syntax warnings in interactive mode are changed into errors. - Some improvements to Tools/webchecker (ignore some more URL types, follow some more links). - Brought the Tools/compiler package up to date. What's New in Python 2.1 beta 2? ================================ (Unlisted are many fixed bugs, more documentation, etc.) Core language, builtins, and interpreter - The nested scopes work (enabled by "from __future__ import nested_scopes") is completed; in particular, the future now extends into code executed through exec, eval() and execfile(), and into the interactive interpreter. - When calling a base class method (e.g. BaseClass.__init__(self)), this is now allowed even if self is not strictly spoken a class instance (e.g. when using metaclasses or the Don Beaudry hook). - Slice objects are now comparable but not hashable; this prevents dict[:] from being accepted but meaningless. - Complex division is now calculated using less braindead algorithms. This doesn't change semantics except it's more likely to give useful results in extreme cases. Complex repr() now uses full precision like float repr(). - sgmllib.py now calls handle_decl() for simple <!...> declarations. - It is illegal to assign to the name __debug__, which is set when the interpreter starts. It is effectively a compile-time constant. - A warning will be issued if a global statement for a variable follows a use or assignment of that variable. Standard library - unittest.py, a unit testing framework by Steve Purcell (PyUNIT, inspired by JUnit), is now part of the standard library. You now have a choice of two testing frameworks: unittest requires you to write testcases as separate code, doctest gathers them from docstrings. Both approaches have their advantages and disadvantages. - A new module Tix was added, which wraps the Tix extension library for Tk. With that module, it is not necessary to statically link Tix with _tkinter, since Tix will be loaded with Tcl's "package require" command. See Demo/tix/. - tzparse.py is now obsolete. - In gzip.py, the seek() and tell() methods are removed -- they were non-functional anyway, and it's better if callers can test for their existence with hasattr(). Python/C API - PyDict_Next(): it is now safe to call PyDict_SetItem() with a key that's already in the dictionary during a PyDict_Next() iteration. This used to fail occasionally when a dictionary resize operation could be triggered that would rehash all the keys. All other modifications to the dictionary are still off-limits during a PyDict_Next() iteration! - New extended APIs related to passing compiler variables around. - New abstract APIs PyObject_IsInstance(), PyObject_IsSubclass() implement isinstance() and issubclass(). - Py_BuildValue() now has a "D" conversion to create a Python complex number from a Py_complex C value. - Extensions types which support weak references must now set the field allocated for the weak reference machinery to NULL themselves; this is done to avoid the cost of checking each object for having a weakly referencable type in PyObject_INIT(), since most types are not weakly referencable. - PyFrame_FastToLocals() and PyFrame_LocalsToFast() copy bindings for free variables and cell variables to and from the frame's f_locals. - Variants of several functions defined in pythonrun.h have been added to support the nested_scopes future statement. The variants all end in Flags and take an extra argument, a PyCompilerFlags *; examples: PyRun_AnyFileExFlags(), PyRun_InteractiveLoopFlags(). These variants may be removed in Python 2.2, when nested scopes are mandatory. Distutils - the sdist command now writes a PKG-INFO file, as described in PEP 241, into the release tree. - several enhancements to the bdist_wininst command from Thomas Heller (an uninstaller, more customization of the installer's display) - from Jack Jansen: added Mac-specific code to generate a dialog for users to specify the command-line (because providing a command-line with MacPython is awkward). Jack also made various fixes for the Mac and the Metrowerks compiler. - added 'platforms' and 'keywords' to the set of metadata that can be specified for a distribution. - applied patches from Jason Tishler to make the compiler class work with Cygwin. What's New in Python 2.1 beta 1? ================================ Core language, builtins, and interpreter - Following an outcry from the community about the amount of code broken by the nested scopes feature introduced in 2.1a2, we decided to make this feature optional, and to wait until Python 2.2 (or at least 6 months) to make it standard. The option can be enabled on a per-module basis by adding "from __future__ import nested_scopes" at the beginning of a module (before any other statements, but after comments and an optional docstring). See PEP 236 (Back to the __future__) for a description of the __future__ statement. PEP 227 (Statically Nested Scopes) has been updated to reflect this change, and to clarify the semantics in a number of endcases. - The nested scopes code, when enabled, has been hardened, and most bugs and memory leaks in it have been fixed. - Compile-time warnings are now generated for a number of conditions that will break or change in meaning when nested scopes are enabled: - Using "from...import *" or "exec" without in-clause in a function scope that also defines a lambda or nested function with one or more free (non-local) variables. The presence of the import* or bare exec makes it impossible for the compiler to determine the exact set of local variables in the outer scope, which makes it impossible to determine the bindings for free variables in the inner scope. To avoid the warning about import *, change it into an import of explicitly name object, or move the import* statement to the global scope; to avoid the warning about bare exec, use exec...in... (a good idea anyway -- there's a possibility that bare exec will be deprecated in the future). - Use of a global variable in a nested scope with the same name as a local variable in a surrounding scope. This will change in meaning with nested scopes: the name in the inner scope will reference the variable in the outer scope rather than the global of the same name. To avoid the warning, either rename the outer variable, or use a global statement in the inner function. - An optional object allocator has been included. This allocator is optimized for Python objects and should be faster and use less memory than the standard system allocator. It is not enabled by default because of possible thread safety problems. The allocator is only protected by the Python interpreter lock and it is possible that some extension modules require a thread safe allocator. The object allocator can be enabled by providing the "--with-pymalloc" option to configure. Standard library - pyexpat now detects the expat version if expat.h defines it. A number of additional handlers are provided, which are only available since expat 1.95. In addition, the methods SetParamEntityParsing and GetInputContext of Parser objects are available with 1.95.x only. Parser objects now provide the ordered_attributes and specified_attributes attributes. A new module expat.model was added, which offers a number of additional constants if 1.95.x is used. - xml.dom offers the new functions registerDOMImplementation and getDOMImplementation. - xml.dom.minidom offers a toprettyxml method. A number of DOM conformance issues have been resolved. In particular, Element now has a hasAttributes method, and the handling of namespaces was improved. - Ka-Ping Yee contributed two new modules: inspect.py, a module for getting information about live Python code, and pydoc.py, a module for interactively converting docstrings to HTML or text. Tools/scripts/pydoc, which is now automatically installed into <prefix>/bin, uses pydoc.py to display documentation; try running "pydoc -h" for instructions. "pydoc -g" pops up a small GUI that lets you browse the module docstrings using a web browser. - New library module difflib.py, primarily packaging the SequenceMatcher class at the heart of the popular ndiff.py file-comparison tool. - doctest.py (a framework for verifying Python code examples in docstrings) is now part of the std library. Windows changes - A new entry in the Start menu, "Module Docs", runs "pydoc -g" -- a small GUI that lets you browse the module docstrings using your default web browser. - Import is now case-sensitive. PEP 235 (Import on Case-Insensitive Platforms) is implemented. See http://python.sourceforge.net/peps/pep-0235.html for full details, especially the "Current Lower-Left Semantics" section. The new Windows import rules are simpler than before: A. If the PYTHONCASEOK environment variable exists, same as before: silently accept the first case-insensitive match of any kind; raise ImportError if none found. B. Else search sys.path for the first case-sensitive match; raise ImportError if none found. The same rules have been implemented on other platforms with case- insensitive but case-preserving filesystems too (including Cygwin, and several flavors of Macintosh operating systems). - winsound module: Under Win9x, winsound.Beep() now attempts to simulate what it's supposed to do (and does do under NT and 2000) via direct port manipulation. It's unknown whether this will work on all systems, but it does work on my Win98SE systems now and was known to be useless on all Win9x systems before. - Build: Subproject _test (effectively) renamed to _testcapi. New platforms - 2.1 should compile and run out of the box under MacOS X, even using HFS+. Thanks to Steven Majewski! - 2.1 should compile and run out of the box on Cygwin. Thanks to Jason Tishler! - 2.1 contains new files and patches for RISCOS, thanks to Dietmar Schwertberger! See RISCOS/README for more information -- it seems that because of the bizarre filename conventions on RISCOS, no port to that platform is easy. What's New in Python 2.1 alpha 2? ================================= Core language, builtins, and interpreter - Scopes nest. If a name is used in a function or class, but is not local, the definition in the nearest enclosing function scope will be used. One consequence of this change is that lambda statements could reference variables in the namespaces where the lambda is defined. In some unusual cases, this change will break code. In all previous version of Python, names were resolved in exactly three namespaces -- the local namespace, the global namespace, and the builtins namespace. According to this old definition, if a function A is defined within a function B, the names bound in B are not visible in A. The new rules make names bound in B visible in A, unless A contains a name binding that hides the binding in B. Section 4.1 of the reference manual describes the new scoping rules in detail. The test script in Lib/test/test_scope.py demonstrates some of the effects of the change. The new rules will cause existing code to break if it defines nested functions where an outer function has local variables with the same name as globals or builtins used by the inner function. Example: def munge(str): def helper(x): return str(x) if type(str) != type(''): str = helper(str) return str.strip() Under the old rules, the name str in helper() is bound to the built-in function str(). Under the new rules, it will be bound to the argument named str and an error will occur when helper() is called. - The compiler will report a SyntaxError if "from ... import *" occurs in a function or class scope. The language reference has documented that this case is illegal, but the compiler never checked for it. The recent introduction of nested scope makes the meaning of this form of name binding ambiguous. In a future release, the compiler may allow this form when there is no possibility of ambiguity. - repr(string) is easier to read, now using hex escapes instead of octal, and using \t, \n and \r instead of \011, \012 and \015 (respectively): >>> "\texample \r\n" + chr(0) + chr(255) '\texample \r\n\x00\xff' # in 2.1 '\011example \015\012\000\377' # in 2.0 - Functions are now compared and hashed by identity, not by value, since the func_code attribute is writable. - Weak references (PEP 205) have been added. This involves a few changes in the core, an extension module (_weakref), and a Python module (weakref). The weakref module is the public interface. It includes support for "explicit" weak references, proxy objects, and mappings with weakly held values. - A 'continue' statement can now appear in a try block within the body of a loop. It is still not possible to use continue in a finally clause. Standard library - mailbox.py now has a new class, PortableUnixMailbox which is identical to UnixMailbox but uses a more portable scheme for determining From_ separators. Also, the constructors for all the classes in this module have a new optional `factory' argument, which is a callable used when new message classes must be instantiated by the next() method. - random.py is now self-contained, and offers all the functionality of the now-deprecated whrandom.py. See the docs for details. random.py also supports new functions getstate() and setstate(), for saving and restoring the internal state of the generator; and jumpahead(n), for quickly forcing the internal state to be the same as if n calls to random() had been made. The latter is particularly useful for multi- threaded programs, creating one instance of the random.Random() class for each thread, then using .jumpahead() to force each instance to use a non-overlapping segment of the full period. - random.py's seed() function is new. For bit-for-bit compatibility with prior releases, use the whseed function instead. The new seed function addresses two problems: (1) The old function couldn't produce more than about 2**24 distinct internal states; the new one about 2**45 (the best that can be done in the Wichmann-Hill generator). (2) The old function sometimes produced identical internal states when passed distinct integers, and there was no simple way to predict when that would happen; the new one guarantees to produce distinct internal states for all arguments in [0, 27814431486576L). - The socket module now supports raw packets on Linux. The socket family is AF_PACKET. - test_capi.py is a start at running tests of the Python C API. The tests are implemented by the new Modules/_testmodule.c. - A new extension module, _symtable, provides provisional access to the internal symbol table used by the Python compiler. A higher-level interface will be added on top of _symtable in a future release. - Removed the obsolete soundex module. - xml.dom.minidom now uses the standard DOM exceptions. Node supports the isSameNode method; NamedNodeMap the get method. - xml.sax.expatreader supports the lexical handler property; it generates comment, startCDATA, and endCDATA events. Windows changes - Build procedure: the zlib project is built in a different way that ensures the zlib header files used can no longer get out of synch with the zlib binary used. See PCbuild\readme.txt for details. Your old zlib-related directories can be deleted; you'll need to download fresh source for zlib and unpack it into a new directory. - Build: New subproject _test for the benefit of test_capi.py (see above). - Build: New subproject _symtable, for new DLL _symtable.pyd (a nascent interface to some Python compiler internals). - Build: Subproject ucnhash is gone, since the code was folded into the unicodedata subproject. What's New in Python 2.1 alpha 1? ================================= Core language, builtins, and interpreter - There is a new Unicode companion to the PyObject_Str() API called PyObject_Unicode(). It behaves in the same way as the former, but assures that the returned value is a Unicode object (applying the usual coercion if necessary). - The comparison operators support "rich comparison overloading" (PEP 207). C extension types can provide a rich comparison function in the new tp_richcompare slot in the type object. The cmp() function and the C function PyObject_Compare() first try the new rich comparison operators before trying the old 3-way comparison. There is also a new C API PyObject_RichCompare() (which also falls back on the old 3-way comparison, but does not constrain the outcome of the rich comparison to a Boolean result). The rich comparison function takes two objects (at least one of which is guaranteed to have the type that provided the function) and an integer indicating the opcode, which can be Py_LT, Py_LE, Py_EQ, Py_NE, Py_GT, Py_GE (for <, <=, ==, !=, >, >=), and returns a Python object, which may be NotImplemented (in which case the tp_compare slot function is used as a fallback, if defined). Classes can overload individual comparison operators by defining one or more of the methods__lt__, __le__, __eq__, __ne__, __gt__, __ge__. There are no explicit "reflected argument" versions of these; instead, __lt__ and __gt__ are each other's reflection, likewise for__le__ and __ge__; __eq__ and __ne__ are their own reflection (similar at the C level). No other implications are made; in particular, Python does not assume that == is the Boolean inverse of !=, or that < is the Boolean inverse of >=. This makes it possible to define types with partial orderings. Classes or types that want to implement (in)equality tests but not the ordering operators (i.e. unordered types) should implement == and !=, and raise an error for the ordering operators. It is possible to define types whose rich comparison results are not Boolean; e.g. a matrix type might want to return a matrix of bits for A < B, giving elementwise comparisons. Such types should ensure that any interpretation of their value in a Boolean context raises an exception, e.g. by defining __nonzero__ (or the tp_nonzero slot at the C level) to always raise an exception. - Complex numbers use rich comparisons to define == and != but raise an exception for <, <=, > and >=. Unfortunately, this also means that cmp() of two complex numbers raises an exception when the two numbers differ. Since it is not mathematically meaningful to compare complex numbers except for equality, I hope that this doesn't break too much code. - The outcome of comparing non-numeric objects of different types is not defined by the language, other than that it's arbitrary but consistent (see the Reference Manual). An implementation detail changed in 2.1a1 such that None now compares less than any other object. Code relying on this new behavior (like code that relied on the previous behavior) does so at its own risk. - Functions and methods now support getting and setting arbitrarily named attributes (PEP 232). Functions have a new __dict__ (a.k.a. func_dict) which hold the function attributes. Methods get and set attributes on their underlying im_func. It is a TypeError to set an attribute on a bound method. - The xrange() object implementation has been improved so that xrange(sys.maxint) can be used on 64-bit platforms. There's still a limitation that in this case len(xrange(sys.maxint)) can't be calculated, but the common idiom "for i in xrange(sys.maxint)" will work fine as long as the index i doesn't actually reach 2**31. (Python uses regular ints for sequence and string indices; fixing that is much more work.) - Two changes to from...import: 1) "from M import X" now works even if (after loading module M) sys.modules['M'] is not a real module; it's basically a getattr() operation with AttributeError exceptions changed into ImportError. 2) "from M import *" now looks for M.__all__ to decide which names to import; if M.__all__ doesn't exist, it uses M.__dict__.keys() but filters out names starting with '_' as before. Whether or not __all__ exists, there's no restriction on the type of M. - File objects have a new method, xreadlines(). This is the fastest way to iterate over all lines in a file: for line in file.xreadlines(): ...do something to line... See the xreadlines module (mentioned below) for how to do this for other file-like objects. - Even if you don't use file.xreadlines(), you may expect a speedup on line-by-line input. The file.readline() method has been optimized quite a bit in platform-specific ways: on systems (like Linux) that support flockfile(), getc_unlocked(), and funlockfile(), those are used by default. On systems (like Windows) without getc_unlocked(), a complicated (but still thread-safe) method using fgets() is used by default. You can force use of the fgets() method by #define'ing USE_FGETS_IN_GETLINE at build time (it may be faster than getc_unlocked()). You can force fgets() not to be used by #define'ing DONT_USE_FGETS_IN_GETLINE (this is the first thing to try if std test test_bufio.py fails -- and let us know if it does!). - In addition, the fileinput module, while still slower than the other methods on most platforms, has been sped up too, by using file.readlines(sizehint). - Support for run-time warnings has been added, including a new command line option (-W) to specify the disposition of warnings. See the description of the warnings module below. - Extensive changes have been made to the coercion code. This mostly affects extension modules (which can now implement mixed-type numerical operators without having to use coercion), but occasionally, in boundary cases the coercion semantics have changed subtly. Since this was a terrible gray area of the language, this is considered an improvement. Also note that __rcmp__ is no longer supported -- instead of calling __rcmp__, __cmp__ is called with reflected arguments. - In connection with the coercion changes, a new built-in singleton object, NotImplemented is defined. This can be returned for operations that wish to indicate they are not implemented for a particular combination of arguments. From C, this is Py_NotImplemented. - The interpreter accepts now bytecode files on the command line even if they do not have a .pyc or .pyo extension. On Linux, after executing import imp,sys,string magic = string.join(["\\x%.2x" % ord(c) for c in imp.get_magic()],"") reg = ':pyc:M::%s::%s:' % (magic, sys.executable) open("/proc/sys/fs/binfmt_misc/register","wb").write(reg) any byte code file can be used as an executable (i.e. as an argument to execve(2)). - %[xXo] formats of negative Python longs now produce a sign character. In 1.6 and earlier, they never produced a sign, and raised an error if the value of the long was too large to fit in a Python int. In 2.0, they produced a sign if and only if too large to fit in an int. This was inconsistent across platforms (because the size of an int varies across platforms), and inconsistent with hex() and oct(). Example: >>> "%x" % -0x42L '-42' # in 2.1 'ffffffbe' # in 2.0 and before, on 32-bit machines >>> hex(-0x42L) '-0x42L' # in all versions of Python The behavior of %d formats for negative Python longs remains the same as in 2.0 (although in 1.6 and before, they raised an error if the long didn't fit in a Python int). %u formats don't make sense for Python longs, but are allowed and treated the same as %d in 2.1. In 2.0, a negative long formatted via %u produced a sign if and only if too large to fit in an int. In 1.6 and earlier, a negative long formatted via %u raised an error if it was too big to fit in an int. - Dictionary objects have an odd new method, popitem(). This removes an arbitrary item from the dictionary and returns it (in the form of a (key, value) pair). This can be useful for algorithms that use a dictionary as a bag of "to do" items and repeatedly need to pick one item. Such algorithms normally end up running in quadratic time; using popitem() they can usually be made to run in linear time. Standard library - In the time module, the time argument to the functions strftime, localtime, gmtime, asctime and ctime is now optional, defaulting to the current time (in the local timezone). - The ftplib module now defaults to passive mode, which is deemed a more useful default given that clients are often inside firewalls these days. Note that this could break if ftplib is used to connect to a *server* that is inside a firewall, from outside; this is expected to be a very rare situation. To fix that, you can call ftp.set_pasv(0). - The module site now treats .pth files not only for path configuration, but also supports extensions to the initialization code: Lines starting with import are executed. - There's a new module, warnings, which implements a mechanism for issuing and filtering warnings. There are some new built-in exceptions that serve as warning categories, and a new command line option, -W, to control warnings (e.g. -Wi ignores all warnings, -We turns warnings into errors). warnings.warn(message[, category]) issues a warning message; this can also be called from C as PyErr_Warn(category, message). - A new module xreadlines was added. This exports a single factory function, xreadlines(). The intention is that this code is the absolutely fastest way to iterate over all lines in an open file(-like) object: import xreadlines for line in xreadlines.xreadlines(file): ...do something to line... This is equivalent to the previous the speed record holder using file.readlines(sizehint). Note that if file is a real file object (as opposed to a file-like object), this is equivalent: for line in file.xreadlines(): ...do something to line... - The bisect module has new functions bisect_left, insort_left, bisect_right and insort_right. The old names bisect and insort are now aliases for bisect_right and insort_right. XXX_right and XXX_left methods differ in what happens when the new element compares equal to one or more elements already in the list: the XXX_left methods insert to the left, the XXX_right methods to the right. Code that doesn't care where equal elements end up should continue to use the old, short names ("bisect" and "insort"). - The new curses.panel module wraps the panel library that forms part of SYSV curses and ncurses. Contributed by Thomas Gellekum. - The SocketServer module now sets the allow_reuse_address flag by default in the TCPServer class. - A new function, sys._getframe(), returns the stack frame pointer of the caller. This is intended only as a building block for higher-level mechanisms such as string interpolation. - The pyexpat module supports a number of new handlers, which are available only in expat 1.2. If invocation of a callback fails, it will report an additional frame in the traceback. Parser objects participate now in garbage collection. If expat reports an unknown encoding, pyexpat will try to use a Python codec; that works only for single-byte charsets. The parser type objects is exposed as XMLParserObject. - xml.dom now offers standard definitions for symbolic node type and exception code constants, and a hierarchy of DOM exceptions. minidom was adjusted to use them. - The conformance of xml.dom.minidom to the DOM specification was improved. It detects a number of additional error cases; the previous/next relationship works even when the tree is modified; Node supports the normalize() method; NamedNodeMap, DocumentType and DOMImplementation classes were added; Element supports the hasAttribute and hasAttributeNS methods; and Text supports the splitText method. Build issues - For Unix (and Unix-compatible) builds, configuration and building of extension modules is now greatly automated. Rather than having to edit the Modules/Setup file to indicate which modules should be built and where their include files and libraries are, a distutils-based setup.py script now takes care of building most extension modules. All extension modules built this way are built as shared libraries. Only a few modules that must be linked statically are still listed in the Setup file; you won't need to edit their configuration. - Python should now build out of the box on Cygwin. If it doesn't, mail to Jason Tishler (jlt63 at users.sourceforge.net). - Python now always uses its own (renamed) implementation of getopt() -- there's too much variation among C library getopt() implementations. - C++ compilers are better supported; the CXX macro is always set to a C++ compiler if one is found. Windows changes - select module: By default under Windows, a select() call can specify no more than 64 sockets. Python now boosts this Microsoft default to 512. If you need even more than that, see the MS docs (you'll need to #define FD_SETSIZE and recompile Python from source). - Support for Windows 3.1, DOS and OS/2 is gone. The Lib/dos-8x3 subdirectory is no more! What's New in Python 2.0? ========================= Below is a list of all relevant changes since release 1.6. Older changes are in the file HISTORY. If you are making the jump directly from Python 1.5.2 to 2.0, make sure to read the section for 1.6 in the HISTORY file! Many important changes listed there. Alternatively, a good overview of the changes between 1.5.2 and 2.0 is the document "What's New in Python 2.0" by Kuchling and Moshe Zadka: http://www.amk.ca/python/2.0/. --Guido van Rossum (home page: http://www.pythonlabs.com/~guido/) ====================================================================== What's new in 2.0 (since release candidate 1)? ============================================== Standard library - The copy_reg module was modified to clarify its intended use: to register pickle support for extension types, not for classes. pickle() will raise a TypeError if it is passed a class. - Fixed a bug in gettext's "normalize and expand" code that prevented it from finding an existing .mo file. - Restored support for HTTP/0.9 servers in httplib. - The math module was changed to stop raising OverflowError in case of underflow, and return 0 instead in underflow cases. Whether Python used to raise OverflowError in case of underflow was platform- dependent (it did when the platform math library set errno to ERANGE on underflow). - Fixed a bug in StringIO that occurred when the file position was not at the end of the file and write() was called with enough data to extend past the end of the file. - Fixed a bug that caused Tkinter error messages to get lost on Windows. The bug was fixed by replacing direct use of interp->result with Tcl_GetStringResult(interp). - Fixed bug in urllib2 that caused it to fail when it received an HTTP redirect response. - Several changes were made to distutils: Some debugging code was removed from util. Fixed the installer used when an external zip program (like WinZip) is not found; the source code for this installer is in Misc/distutils. check_lib() was modified to behave more like AC_CHECK_LIB by add other_libraries() as a parameter. The test for whether installed modules are on sys.path was changed to use both normcase() and normpath(). - Several minor bugs were fixed in the xml package (the minidom, pulldom, expatreader, and saxutils modules). - The regression test driver (regrtest.py) behavior when invoked with -l changed: It now reports a count of objects that are recognized as garbage but not freed by the garbage collector. - The regression test for the math module was changed to test exceptional behavior when the test is run in verbose mode. Python cannot yet guarantee consistent exception behavior across platforms, so the exception part of test_math is run only in verbose mode, and may fail on your platform. Internals - PyOS_CheckStack() has been disabled on Win64, where it caused test_sre to fail. Build issues - Changed compiler flags, so that gcc is always invoked with -Wall and -Wstrict-prototypes. Users compiling Python with GCC should see exactly one warning, except if they have passed configure the --with-pydebug flag. The expected warning is for getopt() in Modules/main.c. This warning will be fixed for Python 2.1. - Fixed configure to add -threads argument during linking on OSF1. Tools and other miscellany - The compiler in Tools/compiler was updated to support the new language features introduced in 2.0: extended print statement, list comprehensions, and augmented assignments. The new compiler should also be backwards compatible with Python 1.5.2; the compiler will always generate code for the version of the interpreter it runs under. What's new in 2.0 release candidate 1 (since beta 2)? ===================================================== What is release candidate 1? We believe that release candidate 1 will fix all known bugs that we intend to fix for the 2.0 final release. This release should be a bit more stable than the previous betas. We would like to see even more widespread testing before the final release, so we are producing this release candidate. The final release will be exactly the same unless any show-stopping (or brown bag) bugs are found by testers of the release candidate. All the changes since the last beta release are bug fixes or changes to support building Python for specific platforms. Core language, builtins, and interpreter - A bug that caused crashes when __coerce__ was used with augmented assignment, e.g. +=, was fixed. - Raise ZeroDivisionError when raising zero to a negative number, e.g. 0.0 ** -2.0. Note that math.pow is unrelated to the built-in power operator and the result of math.pow(0.0, -2.0) will vary by platform. On Linux, it raises a ValueError. - A bug in Unicode string interpolation was fixed that occasionally caused errors with formats including "%%". For example, the following expression "%% %s" % u"abc" no longer raises a TypeError. - Compilation of deeply nested expressions raises MemoryError instead of SyntaxError, e.g. eval("[" * 50 + "]" * 50). - In 2.0b2 on Windows, the interpreter wrote .pyc files in text mode, rendering them useless. They are now written in binary mode again. Standard library - Keyword arguments are now accepted for most pattern and match object methods in SRE, the standard regular expression engine. - In SRE, fixed error with negative lookahead and lookbehind that manifested itself as a runtime error in patterns like "(?<!abc)(def)". - Several bugs in the Unicode handling and error handling in _tkinter were fixed. - Fix memory management errors in Merge() and Tkapp_Call() routines. - Several changes were made to cStringIO to make it compatible with the file-like object interface and with StringIO. If operations are performed on a closed object, an exception is raised. The truncate method now accepts a position argument and readline accepts a size argument. - There were many changes made to the linuxaudiodev module and its test suite; as a result, a short, unexpected audio sample should now play when the regression test is run. Note that this module is named poorly, because it should work correctly on any platform that supports the Open Sound System (OSS). The module now raises exceptions when errors occur instead of crashing. It also defines the AFMT_A_LAW format (logarithmic A-law audio) and defines a getptr() method that calls the SNDCTL_DSP_GETxPTR ioctl defined in the OSS Programmer's Guide. - The library_version attribute, introduced in an earlier beta, was removed because it can not be supported with early versions of the C readline library, which provides no way to determine the version at compile-time. - The binascii module is now enabled on Win64. - tokenize.py no longer suffers "recursion depth" errors when parsing programs with very long string literals. Internals - Fixed several buffer overflow vulnerabilities in calculate_path(), which is called when the interpreter starts up to determine where the standard library is installed. These vulnerabilities affect all previous versions of Python and can be exploited by setting very long values for PYTHONHOME or argv[0]. The risk is greatest for a setuid Python script, although use of the wrapper in Misc/setuid-prog.c will eliminate the vulnerability. - Fixed garbage collection bugs in instance creation that were triggered when errors occurred during initialization. The solution, applied in cPickle and in PyInstance_New(), is to call PyObject_GC_Init() after the initialization of the object's container attributes is complete. - pyexpat adds definitions of PyModule_AddStringConstant and PyModule_AddObject if the Python version is less than 2.0, which provides compatibility with PyXML on Python 1.5.2. - If the platform has a bogus definition for LONG_BIT (the number of bits in a long), an error will be reported at compile time. - Fix bugs in _PyTuple_Resize() which caused hard-to-interpret garbage collection crashes and possibly other, unreported crashes. - Fixed a memory leak in _PyUnicode_Fini(). Build issues - configure now accepts a --with-suffix option that specifies the executable suffix. This is useful for builds on Cygwin and Mac OS X, for example. - The mmap.PAGESIZE constant is now initialized using sysconf when possible, which eliminates a dependency on -lucb for Reliant UNIX. - The md5 file should now compile on all platforms. - The select module now compiles on platforms that do not define POLLRDNORM and related constants. - Darwin (Mac OS X): Initial support for static builds on this platform. - BeOS: A number of changes were made to the build and installation process. ar-fake now operates on a directory of object files. dl_export.h is gone, and its macros now appear on the mwcc command line during build on PPC BeOS. - Platform directory in lib/python2.0 is "plat-beos5" (or "plat-beos4", if building on BeOS 4.5), rather than "plat-beos". - Cygwin: Support for shared libraries, Tkinter, and sockets. - SunOS 4.1.4_JL: Fix test for directory existence in configure. Tools and other miscellany - Removed debugging prints from main used with freeze. - IDLE auto-indent no longer crashes when it encounters Unicode characters. What's new in 2.0 beta 2 (since beta 1)? ======================================== Core language, builtins, and interpreter - Add support for unbounded ints in %d,i,u,x,X,o formats; for example "%d" % 2L**64 == "18446744073709551616". - Add -h and -V command line options to print the usage message and Python version number and exit immediately. - eval() and exec accept Unicode objects as code parameters. - getattr() and setattr() now also accept Unicode objects for the attribute name, which are converted to strings using the default encoding before lookup. - Multiplication on string and Unicode now does proper bounds checking; e.g. 'a' * 65536 * 65536 will raise ValueError, "repeated string is too long." - Better error message when continue is found in try statement in a loop. Standard library and extensions - socket module: the OpenSSL code now adds support for RAND_status() and EGD (Entropy Gathering Device). - array: reverse() method of array now works. buffer_info() now does argument checking; it still takes no arguments. - asyncore/asynchat: Included most recent version from Sam Rushing. - cgi: Accept '&' or ';' as separator characters when parsing form data. - CGIHTTPServer: Now works on Windows (and perhaps even Mac). - ConfigParser: When reading the file, options spelled in upper case letters are now correctly converted to lowercase. - copy: Copy Unicode objects atomically. - cPickle: Fail gracefully when copy_reg can't be imported. - cStringIO: Implemented readlines() method. - dbm: Add get() and setdefault() methods to dbm object. Add constant `library' to module that names the library used. Added doc strings and method names to error messages. Uses configure to determine which ndbm.h file to include; Berkeley DB's nbdm and GDBM's ndbm is now available options. - distutils: Update to version 0.9.3. - dl: Add several dl.RTLD_ constants. - fpectl: Now supported on FreeBSD. - gc: Add DEBUG_SAVEALL option. When enabled all garbage objects found by the collector will be saved in gc.garbage. This is useful for debugging a program that creates reference cycles. - httplib: Three changes: Restore support for set_debuglevel feature of HTTP class. Do not close socket on zero-length response. Do not crash when server sends invalid content-length header. - mailbox: Mailbox class conforms better to qmail specifications. - marshal: When reading a short, sign-extend on platforms where shorts are bigger than 16 bits. When reading a long, repair the unportable sign extension that was being done for 64-bit machines. (It assumed that signed right shift sign-extends.) - operator: Add contains(), invert(), __invert__() as aliases for __contains__(), inv(), and __inv__() respectively. - os: Add support for popen2() and popen3() on all platforms where fork() exists. (popen4() is still in the works.) - os: (Windows only:) Add startfile() function that acts like double- clicking on a file in Explorer (or passing the file name to the DOS "start" command). - os.path: (Windows, DOS:) Treat trailing colon correctly in os.path.join. os.path.join("a:", "b") yields "a:b". - pickle: Now raises ValueError when an invalid pickle that contains a non-string repr where a string repr was expected. This behavior matches cPickle. - posixfile: Remove broken __del__() method. - py_compile: support CR+LF line terminators in source file. - readline: Does not immediately exit when ^C is hit when readline and threads are configured. Adds definition of rl_library_version. (The latter addition requires GNU readline 2.2 or later.) - rfc822: Domain literals returned by AddrlistClass method getdomainliteral() are now properly wrapped in brackets. - site: sys.setdefaultencoding() should only be called in case the standard default encoding ("ascii") is changed. This saves quite a few cycles during startup since the first call to setdefaultencoding() will initialize the codec registry and the encodings package. - socket: Support for size hint in readlines() method of object returned by makefile(). - sre: Added experimental expand() method to match objects. Does not use buffer interface on Unicode strings. Does not hang if group id is followed by whitespace. - StringIO: Size hint in readlines() is now supported as documented. - struct: Check ranges for bytes and shorts. - urllib: Improved handling of win32 proxy settings. Fixed quote and quote_plus functions so that the always encode a comma. - Tkinter: Image objects are now guaranteed to have unique ids. Set event.delta to zero if Tk version doesn't support mousewheel. Removed some debugging prints. - UserList: now implements __contains__(). - webbrowser: On Windows, use os.startfile() instead of os.popen(), which works around a bug in Norton AntiVirus 2000 that leads directly to a Blue Screen freeze. - xml: New version detection code allows PyXML to override standard XML package if PyXML version is greater than 0.6.1. - xml.dom: DOM level 1 support for basic XML. Includes xml.dom.minidom (conventional DOM), and xml.dom.pulldom, which allows building the DOM tree only for nodes which are sufficiently interesting to a specific application. Does not provide the HTML-specific extensions. Still undocumented. - xml.sax: SAX 2 support for Python, including all the handler interfaces needed to process XML 1.0 compliant XML. Some documentation is already available. - pyexpat: Renamed to xml.parsers.expat since this is part of the new, packagized XML support. C API - Add three new convenience functions for module initialization -- PyModule_AddObject(), PyModule_AddIntConstant(), and PyModule_AddStringConstant(). - Cleaned up definition of NULL in C source code; all definitions were removed and add #error to Python.h if NULL isn't defined after #include of stdio.h. - Py_PROTO() macros that were removed in 2.0b1 have been restored for backwards compatibility (at the source level) with old extensions. - A wrapper API was added for signal() and sigaction(). Instead of either function, always use PyOS_getsig() to get a signal handler and PyOS_setsig() to set one. A new convenience typedef PyOS_sighandler_t is defined for the type of signal handlers. - Add PyString_AsStringAndSize() function that provides access to the internal data buffer and size of a string object -- or the default encoded version of a Unicode object. - PyString_Size() and PyString_AsString() accept Unicode objects. - The standard header <limits.h> is now included by Python.h (if it exists). INT_MAX and LONG_MAX will always be defined, even if <limits.h> is not available. - PyFloat_FromString takes a second argument, pend, that was effectively useless. It is now officially useless but preserved for backwards compatibility. If the pend argument is not NULL, *pend is set to NULL. - PyObject_GetAttr() and PyObject_SetAttr() now accept Unicode objects for the attribute name. See note on getattr() above. - A few bug fixes to argument processing for Unicode. PyArg_ParseTupleAndKeywords() now accepts "es#" and "es". PyArg_Parse() special cases "s#" for Unicode objects; it returns a pointer to the default encoded string data instead of to the raw UTF-16. - Py_BuildValue accepts B format (for bgen-generated code). Internals - On Unix, fix code for finding Python installation directory so that it works when argv[0] is a relative path. - Added a true unicode_internal_encode() function and fixed the unicode_internal_decode function() to support Unicode objects directly rather than by generating a copy of the object. - Several of the internal Unicode tables are much smaller now, and the source code should be much friendlier to weaker compilers. - In the garbage collector: Fixed bug in collection of tuples. Fixed bug that caused some instances to be removed from the container set while they were still live. Fixed parsing in gc.set_debug() for platforms where sizeof(long) > sizeof(int). - Fixed refcount problem in instance deallocation that only occurred when Py_REF_DEBUG was defined and Py_TRACE_REFS was not. - On Windows, getpythonregpath is now protected against null data in registry key. - On Unix, create .pyc/.pyo files with O_EXCL flag to avoid a race condition. Build and platform-specific issues - Better support of GNU Pth via --with-pth configure option. - Python/C API now properly exposed to dynamically-loaded extension modules on Reliant UNIX. - Changes for the benefit of SunOS 4.1.4 (really!). mmapmodule.c: Don't define MS_SYNC to be zero when it is undefined. Added missing prototypes in posixmodule.c. - Improved support for HP-UX build. Threads should now be correctly configured (on HP-UX 10.20 and 11.00). - Fix largefile support on older NetBSD systems and OpenBSD by adding define for TELL64. Tools and other miscellany - ftpmirror: Call to main() is wrapped in if __name__ == "__main__". - freeze: The modulefinder now works with 2.0 opcodes. - IDLE: Move hackery of sys.argv until after the Tk instance has been created, which allows the application-specific Tkinter initialization to be executed if present; also pass an explicit className parameter to the Tk() constructor. What's new in 2.0 beta 1? ========================= Source Incompatibilities ------------------------ None. Note that 1.6 introduced several incompatibilities with 1.5.2, such as single-argument append(), connect() and bind(), and changes to str(long) and repr(float). Binary Incompatibilities ------------------------ - Third party extensions built for Python 1.5.x or 1.6 cannot be used with Python 2.0; these extensions will have to be rebuilt for Python 2.0. - On Windows, attempting to import a third party extension built for Python 1.5.x or 1.6 results in an immediate crash; there's not much we can do about this. Check your PYTHONPATH environment variable! - Python bytecode files (*.pyc and *.pyo) are not compatible between releases. Overview of Changes Since 1.6 ----------------------------- There are many new modules (including brand new XML support through the xml package, and i18n support through the gettext module); a list of all new modules is included below. Lots of bugs have been fixed. The process for making major new changes to the language has changed since Python 1.6. Enhancements must now be documented by a Python Enhancement Proposal (PEP) before they can be accepted. There are several important syntax enhancements, described in more detail below: - Augmented assignment, e.g. x += 1 - List comprehensions, e.g. [x**2 for x in range(10)] - Extended import statement, e.g. import Module as Name - Extended print statement, e.g. print >> file, "Hello" Other important changes: - Optional collection of cyclical garbage Python Enhancement Proposal (PEP) --------------------------------- PEP stands for Python Enhancement Proposal. A PEP is a design document providing information to the Python community, or describing a new feature for Python. The PEP should provide a concise technical specification of the feature and a rationale for the feature. We intend PEPs to be the primary mechanisms for proposing new features, for collecting community input on an issue, and for documenting the design decisions that have gone into Python. The PEP author is responsible for building consensus within the community and documenting dissenting opinions. The PEPs are available at http://python.sourceforge.net/peps/. Augmented Assignment -------------------- This must have been the most-requested feature of the past years! Eleven new assignment operators were added: += -= *= /= %= **= <<= >>= &= ^= |= For example, A += B is similar to A = A + B except that A is evaluated only once (relevant when A is something like dict[index].attr). However, if A is a mutable object, A may be modified in place. Thus, if A is a number or a string, A += B has the same effect as A = A+B (except A is only evaluated once); but if a is a list, A += B has the same effect as A.extend(B)! Classes and built-in object types can override the new operators in order to implement the in-place behavior; the not-in-place behavior is used automatically as a fallback when an object doesn't implement the in-place behavior. For classes, the method name is derived from the method name for the corresponding not-in-place operator by inserting an 'i' in front of the name, e.g. __iadd__ implements in-place __add__. Augmented assignment was implemented by Thomas Wouters. List Comprehensions ------------------- This is a flexible new notation for lists whose elements are computed from another list (or lists). The simplest form is: [<expression> for <variable> in <sequence>] For example, [i**2 for i in range(4)] yields the list [0, 1, 4, 9]. This is more efficient than a for loop with a list.append() call. You can also add a condition: [<expression> for <variable> in <sequence> if <condition>] For example, [w for w in words if w == w.lower()] would yield the list of words that contain no uppercase characters. This is more efficient than a for loop with an if statement and a list.append() call. You can also have nested for loops and more than one 'if' clause. For example, here's a function that flattens a sequence of sequences:: def flatten(seq): return [x for subseq in seq for x in subseq] flatten([[0], [1,2,3], [4,5], [6,7,8,9], []]) This prints [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] List comprehensions originated as a patch set from Greg Ewing; Skip Montanaro and Thomas Wouters also contributed. Described by PEP 202. Extended Import Statement ------------------------- Many people have asked for a way to import a module under a different name. This can be accomplished like this: import foo bar = foo del foo but this common idiom gets old quickly. A simple extension of the import statement now allows this to be written as follows: import foo as bar There's also a variant for 'from ... import': from foo import bar as spam This also works with packages; e.g. you can write this: import test.regrtest as regrtest Note that 'as' is not a new keyword -- it is recognized only in this context (this is only possible because the syntax for the import statement doesn't involve expressions). Implemented by Thomas Wouters. Described by PEP 221. Extended Print Statement ------------------------ Easily the most controversial new feature, this extension to the print statement adds an option to make the output go to a different file than the default sys.stdout. For example, to write an error message to sys.stderr, you can now write: print >> sys.stderr, "Error: bad dog!" As a special feature, if the expression used to indicate the file evaluates to None, the current value of sys.stdout is used. Thus: print >> None, "Hello world" is equivalent to print "Hello world" Design and implementation by Barry Warsaw. Described by PEP 214. Optional Collection of Cyclical Garbage --------------------------------------- Python is now equipped with a garbage collector that can hunt down cyclical references between Python objects. It's no replacement for reference counting; in fact, it depends on the reference counts being correct, and decides that a set of objects belong to a cycle if all their reference counts can be accounted for from their references to each other. This devious scheme was first proposed by Eric Tiedemann, and brought to implementation by Neil Schemenauer. There's a module "gc" that lets you control some parameters of the garbage collection. There's also an option to the configure script that lets you enable or disable the garbage collection. In 2.0b1, it's on by default, so that we (hopefully) can collect decent user experience with this new feature. There are some questions about its performance. If it proves to be too much of a problem, we'll turn it off by default in the final 2.0 release. Smaller Changes --------------- A new function zip() was added. zip(seq1, seq2, ...) is equivalent to map(None, seq1, seq2, ...) when the sequences have the same length; i.e. zip([1,2,3], [10,20,30]) returns [(1,10), (2,20), (3,30)]. When the lists are not all the same length, the shortest list wins: zip([1,2,3], [10,20]) returns [(1,10), (2,20)]. See PEP 201. sys.version_info is a tuple (major, minor, micro, level, serial). Dictionaries have an odd new method, setdefault(key, default). dict.setdefault(key, default) returns dict[key] if it exists; if not, it sets dict[key] to default and returns that value. Thus: dict.setdefault(key, []).append(item) does the same work as this common idiom: if not dict.has_key(key): dict[key] = [] dict[key].append(item) There are two new variants of SyntaxError that are raised for indentation-related errors: IndentationError and TabError. Changed \x to consume exactly two hex digits; see PEP 223. Added \U escape that consumes exactly eight hex digits. The limits on the size of expressions and file in Python source code have been raised from 2**16 to 2**32. Previous versions of Python were limited because the maximum argument size the Python VM accepted was 2**16. This limited the size of object constructor expressions, e.g. [1,2,3] or {'a':1, 'b':2}, and the size of source files. This limit was raised thanks to a patch by Charles Waldman that effectively fixes the problem. It is now much more likely that you will be limited by available memory than by an arbitrary limit in Python. The interpreter's maximum recursion depth can be modified by Python programs using sys.getrecursionlimit and sys.setrecursionlimit. This limit is the maximum number of recursive calls that can be made by Python code. The limit exists to prevent infinite recursion from overflowing the C stack and causing a core dump. The default value is 1000. The maximum safe value for a particular platform can be found by running Tools/scripts/find_recursionlimit.py. New Modules and Packages ------------------------ atexit - for registering functions to be called when Python exits. imputil - Greg Stein's alternative API for writing custom import hooks. pyexpat - an interface to the Expat XML parser, contributed by Paul Prescod. xml - a new package with XML support code organized (so far) in three subpackages: xml.dom, xml.sax, and xml.parsers. Describing these would fill a volume. There's a special feature whereby a user-installed package named _xmlplus overrides the standard xmlpackage; this is intended to give the XML SIG a hook to distribute backwards-compatible updates to the standard xml package. webbrowser - a platform-independent API to launch a web browser. Changed Modules --------------- array -- new methods for array objects: count, extend, index, pop, and remove binascii -- new functions b2a_hex and a2b_hex that convert between binary data and its hex representation calendar -- Many new functions that support features including control over which day of the week is the first day, returning strings instead of printing them. Also new symbolic constants for days of week, e.g. MONDAY, ..., SUNDAY. cgi -- FieldStorage objects have a getvalue method that works like a dictionary's get method and returns the value attribute of the object. ConfigParser -- The parser object has new methods has_option, remove_section, remove_option, set, and write. They allow the module to be used for writing config files as well as reading them. ftplib -- ntransfercmd(), transfercmd(), and retrbinary() all now optionally support the RFC 959 REST command. gzip -- readline and readlines now accept optional size arguments httplib -- New interfaces and support for HTTP/1.1 by Greg Stein. See the module doc strings for details. locale -- implement getdefaultlocale for Win32 and Macintosh marshal -- no longer dumps core when marshaling deeply nested or recursive data structures os -- new functions isatty, seteuid, setegid, setreuid, setregid os/popen2 -- popen2/popen3/popen4 support under Windows. popen2/popen3 support under Unix. os/pty -- support for openpty and forkpty os.path -- fix semantics of os.path.commonprefix smtplib -- support for sending very long messages socket -- new function getfqdn() readline -- new functions to read, write and truncate history files. The readline section of the library reference manual contains an example. select -- add interface to poll system call shutil -- new copyfileobj function SimpleHTTPServer, CGIHTTPServer -- Fix problems with buffering in the HTTP server. Tkinter -- optimization of function flatten urllib -- scans environment variables for proxy configuration, e.g. http_proxy. whichdb -- recognizes dumbdbm format Obsolete Modules ---------------- None. However note that 1.6 made a whole slew of modules obsolete: stdwin, soundex, cml, cmpcache, dircache, dump, find, grep, packmail, poly, zmod, strop, util, whatsound. Changed, New, Obsolete Tools ---------------------------- None. C-level Changes --------------- Several cleanup jobs were carried out throughout the source code. All C code was converted to ANSI C; we got rid of all uses of the Py_PROTO() macro, which makes the header files a lot more readable. Most of the portability hacks were moved to a new header file, pyport.h; several other new header files were added and some old header files were removed, in an attempt to create a more rational set of header files. (Few of these ever need to be included explicitly; they are all included by Python.h.) Trent Mick ensured portability to 64-bit platforms, under both Linux and Win64, especially for the new Intel Itanium processor. Mick also added large file support for Linux64 and Win64. The C APIs to return an object's size have been update to consistently use the form PyXXX_Size, e.g. PySequence_Size and PyDict_Size. In previous versions, the abstract interfaces used PyXXX_Length and the concrete interfaces used PyXXX_Size. The old names, e.g. PyObject_Length, are still available for backwards compatibility at the API level, but are deprecated. The PyOS_CheckStack function has been implemented on Windows by Fredrik Lundh. It prevents Python from failing with a stack overflow on Windows. The GC changes resulted in creation of two new slots on object, tp_traverse and tp_clear. The augmented assignment changes result in the creation of a new slot for each in-place operator. The GC API creates new requirements for container types implemented in C extension modules. See Include/objimpl.h for details. PyErr_Format has been updated to automatically calculate the size of the buffer needed to hold the formatted result string. This change prevents crashes caused by programmer error. New C API calls: PyObject_AsFileDescriptor, PyErr_WriteUnraisable. PyRun_AnyFileEx, PyRun_SimpleFileEx, PyRun_FileEx -- New functions that are the same as their non-Ex counterparts except they take an extra flag argument that tells them to close the file when done. XXX There were other API changes that should be fleshed out here. Windows Changes --------------- New popen2/popen3/peopen4 in os module (see Changed Modules above). os.popen is much more usable on Windows 95 and 98. See Microsoft Knowledge Base article Q150956. The Win9x workaround described there is implemented by the new w9xpopen.exe helper in the root of your Python installation. Note that Python uses this internally; it is not a standalone program. Administrator privileges are no longer required to install Python on Windows NT or Windows 2000. If you have administrator privileges, Python's registry info will be written under HKEY_LOCAL_MACHINE. Otherwise the installer backs off to writing Python's registry info under HKEY_CURRENT_USER. The latter is sufficient for all "normal" uses of Python, but will prevent some advanced uses from working (for example, running a Python script as an NT service, or possibly from CGI). [This was new in 1.6] The installer no longer runs a separate Tcl/Tk installer; instead, it installs the needed Tcl/Tk files directly in the Python directory. If you already have a Tcl/Tk installation, this wastes some disk space (about 4 Megs) but avoids problems with conflicting Tcl/Tk installations, and makes it much easier for Python to ensure that Tcl/Tk can find all its files. [This was new in 1.6] The Windows installer now installs by default in \Python20\ on the default volume, instead of \Program Files\Python-2.0\. Updates to the changes between 1.5.2 and 1.6 -------------------------------------------- The 1.6 NEWS file can't be changed after the release is done, so here is some late-breaking news: New APIs in locale.py: normalize(), getdefaultlocale(), resetlocale(), and changes to getlocale() and setlocale(). The new module is now enabled per default. It is not true that the encodings codecs cannot be used for normal strings: the string.encode() (which is also present on 8-bit strings !) allows using them for 8-bit strings too, e.g. to convert files from cp1252 (Windows) to latin-1 or vice-versa. Japanese codecs are available from Tamito KAJIYAMA: http://pseudo.grad.sccs.chukyo-u.ac.jp/~kajiyama/python/ ====================================================================== ======================================= ==> Release 1.6 (September 5, 2000) <== ======================================= What's new in release 1.6? ========================== Below is a list of all relevant changes since release 1.5.2. Source Incompatibilities ------------------------ Several small incompatible library changes may trip you up: - The append() method for lists can no longer be invoked with more than one argument. This used to append a single tuple made out of all arguments, but was undocumented. To append a tuple, use e.g. l.append((a, b, c)). - The connect(), connect_ex() and bind() methods for sockets require exactly one argument. Previously, you could call s.connect(host, port), but this was undocumented. You must now write s.connect((host, port)). - The str() and repr() functions are now different more often. For long integers, str() no longer appends a 'L'. Thus, str(1L) == '1', which used to be '1L'; repr(1L) is unchanged and still returns '1L'. For floats, repr() now gives 17 digits of precision, to ensure no precision is lost (on all current hardware). - The -X option is gone. Built-in exceptions are now always classes. Many more library modules also have been converted to class-based exceptions. Binary Incompatibilities ------------------------ - Third party extensions built for Python 1.5.x cannot be used with Python 1.6; these extensions will have to be rebuilt for Python 1.6. - On Windows, attempting to import a third party extension built for Python 1.5.x results in an immediate crash; there's not much we can do about this. Check your PYTHONPATH environment variable! Overview of Changes since 1.5.2 ------------------------------- For this overview, I have borrowed from the document "What's New in Python 2.0" by Andrew Kuchling and Moshe Zadka: http://www.amk.ca/python/2.0/ . There are lots of new modules and lots of bugs have been fixed. A list of all new modules is included below. Probably the most pervasive change is the addition of Unicode support. We've added a new fundamental datatype, the Unicode string, a new built-in function unicode(), and numerous C APIs to deal with Unicode and encodings. See the file Misc/unicode.txt for details, or http://starship.python.net/crew/lemburg/unicode-proposal.txt. Two other big changes, related to the Unicode support, are the addition of string methods and (yet another) new regular expression engine. - String methods mean that you can now say s.lower() etc. instead of importing the string module and saying string.lower(s) etc. One peculiarity is that the equivalent of string.join(sequence, delimiter) is delimiter.join(sequence). Use " ".join(sequence) for the effect of string.join(sequence); to make this more readable, try space=" " first. Note that the maxsplit argument defaults in split() and replace() have changed from 0 to -1. - The new regular expression engine, SRE by Fredrik Lundh, is fully backwards compatible with the old engine, and is in fact invoked using the same interface (the "re" module). You can explicitly invoke the old engine by import pre, or the SRE engine by importing sre. SRE is faster than pre, and supports Unicode (which was the main reason to put effort in yet another new regular expression engine -- this is at least the fourth!). Other Changes ------------- Other changes that won't break code but are nice to know about: Deleting objects is now safe even for deeply nested data structures. Long/int unifications: long integers can be used in seek() calls, as slice indexes. String formatting (s % args) has a new formatting option, '%r', which acts like '%s' but inserts repr(arg) instead of str(arg). (Not yet in alpha 1.) Greg Ward's "distutils" package is included: this will make installing, building and distributing third party packages much simpler. There's now special syntax that you can use instead of the apply() function. f(*args, **kwds) is equivalent to apply(f, args, kwds). You can also use variations f(a1, a2, *args, **kwds) and you can leave one or the other out: f(*args), f(**kwds). The built-ins int() and long() take an optional second argument to indicate the conversion base -- of course only if the first argument is a string. This makes string.atoi() and string.atol() obsolete. (string.atof() was already obsolete). When a local variable is known to the compiler but undefined when used, a new exception UnboundLocalError is raised. This is a class derived from NameError so code catching NameError should still work. The purpose is to provide better diagnostics in the following example: x = 1 def f(): print x x = x+1 This used to raise a NameError on the print statement, which confused even experienced Python programmers (especially if there are several hundreds of lines of code between the reference and the assignment to x :-). You can now override the 'in' operator by defining a __contains__ method. Note that it has its arguments backwards: x in a causes a.__contains__(x) to be called. That's why the name isn't __in__. The exception AttributeError will have a more friendly error message, e.g.: <code>'Spam' instance has no attribute 'eggs'</code>. This may <b>break code</b> that expects the message to be exactly the attribute name. New Modules in 1.6 ------------------ UserString - base class for deriving from the string type. distutils - tools for distributing Python modules. robotparser - parse a robots.txt file, for writing web spiders. (Moved from Tools/webchecker/.) linuxaudiodev - audio for Linux. mmap - treat a file as a memory buffer. (Windows and Unix.) sre - regular expressions (fast, supports unicode). Currently, this code is very rough. Eventually, the re module will be reimplemented using sre (without changes to the re API). filecmp - supersedes the old cmp.py and dircmp.py modules. tabnanny - check Python sources for tab-width dependance. (Moved from Tools/scripts/.) urllib2 - new and improved but incompatible version of urllib (still experimental). zipfile - read and write zip archives. codecs - support for Unicode encoders/decoders. unicodedata - provides access to the Unicode 3.0 database. _winreg - Windows registry access. encodings - package which provides a large set of standard codecs -- currently only for the new Unicode support. It has a drop-in extension mechanism which allows you to add new codecs by simply copying them into the encodings package directory. Asian codec support will probably be made available as separate distribution package built upon this technique and the new distutils package. Changed Modules --------------- readline, ConfigParser, cgi, calendar, posix, readline, xmllib, aifc, chunk, wave, random, shelve, nntplib - minor enhancements. socket, httplib, urllib - optional OpenSSL support (Unix only). _tkinter - support for 8.0 up to 8.3. Support for versions older than 8.0 has been dropped. string - most of this module is deprecated now that strings have methods. This no longer uses the built-in strop module, but takes advantage of the new string methods to provide transparent support for both Unicode and ordinary strings. Changes on Windows ------------------ The installer no longer runs a separate Tcl/Tk installer; instead, it installs the needed Tcl/Tk files directly in the Python directory. If you already have a Tcl/Tk installation, this wastes some disk space (about 4 Megs) but avoids problems with conflincting Tcl/Tk installations, and makes it much easier for Python to ensure that Tcl/Tk can find all its files. Note: the alpha installers don't include the documentation. The Windows installer now installs by default in \Python16\ on the default volume, instead of \Program Files\Python-1.6\. Changed Tools ------------- IDLE - complete overhaul. See the <a href="../idle/">IDLE home page</a> for more information. (Python 1.6 alpha 1 will come with IDLE 0.6.) Tools/i18n/pygettext.py - Python equivalent of xgettext(1). A message text extraction tool used for internationalizing applications written in Python. Obsolete Modules ---------------- stdwin and everything that uses it. (Get Python 1.5.2 if you need it. :-) soundex. (Skip Montanaro has a version in Python but it won't be included in the Python release.) cmp, cmpcache, dircmp. (Replaced by filecmp.) dump. (Use pickle.) find. (Easily coded using os.walk().) grep. (Not very useful as a library module.) packmail. (No longer has any use.) poly, zmod. (These were poor examples at best.) strop. (No longer needed by the string module.) util. (This functionality was long ago built in elsewhere). whatsound. (Use sndhdr.) Detailed Changes from 1.6b1 to 1.6 ---------------------------------- - Slight changes to the CNRI license. A copyright notice has been added; the requirement to indicate the nature of modifications now applies when making a derivative work available "to others" instead of just "to the public"; the version and date are updated. The new license has a new handle. - Added the Tools/compiler package. This is a project led by Jeremy Hylton to write the Python bytecode generator in Python. - The function math.rint() is removed. - In Python.h, "#define _GNU_SOURCE 1" was added. - Version 0.9.1 of Greg Ward's distutils is included (instead of version 0.9). - A new version of SRE is included. It is more stable, and more compatible with the old RE module. Non-matching ranges are indicated by -1, not None. (The documentation said None, but the PRE implementation used -1; changing to None would break existing code.) - The winreg module has been renamed to _winreg. (There are plans for a higher-level API called winreg, but this has not yet materialized in a form that is acceptable to the experts.) - The _locale module is enabled by default. - Fixed the configuration line for the _curses module. - A few crashes have been fixed, notably <file>.writelines() with a list containing non-string objects would crash, and there were situations where a lost SyntaxError could dump core. - The <list>.extend() method now accepts an arbitrary sequence argument. - If __str__() or __repr__() returns a Unicode object, this is converted to an 8-bit string. - Unicode string comparisons is no longer aware of UTF-16 encoding peculiarities; it's a straight 16-bit compare. - The Windows installer now installs the LICENSE file and no longer registers the Python DLL version in the registry (this is no longer needed). It now uses Tcl/Tk 8.3.2. - A few portability problems have been fixed, in particular a compilation error involving socklen_t. - The PC configuration is slightly friendlier to non-Microsoft compilers. ====================================================================== ====================================== ==> Release 1.5.2 (April 13, 1999) <== ====================================== From 1.5.2c1 to 1.5.2 (final) ============================= Tue Apr 13 15:44:49 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * PCbuild/python15.wse: Bump version to 1.5.2 (final) * PCbuild/python15.dsp: Added shamodule.c * PC/config.c: Added sha module! * README, Include/patchlevel.h: Prepare for final release. * Misc/ACKS: More (Cameron Laird is honorary; the others are 1.5.2c1 testers). * Python/thread_solaris.h: While I can't really test this thoroughly, Pat Knight and the Solaris man pages suggest that the proper thing to do is to add THR_NEW_LWP to the flags on thr_create(), and that there really isn't a downside, so I'll do that. * Misc/ACKS: Bunch of new names who helped iron out the last wrinkles of 1.5.2. * PC/python_nt.rc: Bump the myusterious M$ version number from 1,5,2,1 to 1,5,2,3. (I can't even display this on NT, maybe Win/98 can?) * Lib/pstats.py: Fix mysterious references to jprofile that were in the source since its creation. I'm assuming these were once valid references to "Jim Roskind's profile"... * Lib/Attic/threading_api.py: Removed; since long subsumed in Doc/lib/libthreading.tex * Modules/socketmodule.c: Put back __osf__ support for gethostbyname_r(); the real bug was that it was being used even without threads. This of course might be an all-platform problem so now we only use the _r variant when we are using threads. Mon Apr 12 22:51:20 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Modules/cPickle.c: Fix accidentally reversed NULL test in load_mark(). Suggested by Tamito Kajiyama. (This caused a bug only on platforms where malloc(0) returns NULL.) * README: Add note about popen2 problem on Linux noticed by Pablo Bleyer. * README: Add note about -D_REENTRANT for HP-UX 10.20. * Modules/Makefile.pre.in: 'clean' target should remove hassignal. * PC/Attic/vc40.mak, PC/readme.txt: Remove all VC++ info (except VC 1.5) from readme.txt; remove the VC++ 4.0 project file; remove the unused _tkinter extern defs. * README: Clarify PC build instructions (point to PCbuild). * Modules/zlibmodule.c: Cast added by Jack Jansen (for Mac port). * Lib/plat-sunos5/CDIO.py, Lib/plat-linux2/CDROM.py: Forgot to add this file. CDROM device parameters. * Lib/gzip.py: Two different changes. 1. Jack Jansen reports that on the Mac, the time may be negative, and solves this by adding a write32u() function that writes an unsigned long. 2. On 64-bit platforms the CRC comparison fails; I've fixed this by casting both values to be compared to "unsigned long" i.e. modulo 0x100000000L. Sat Apr 10 18:42:02 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * PC/Attic/_tkinter.def: No longer needed. * Misc/ACKS: Correct missed character in Andrew Dalke's name. * README: Add DEC Ultrix notes (from Donn Cave's email). * configure: The usual * configure.in: Quote a bunch of shell variables used in test, related to long-long. * Objects/fileobject.c, Modules/shamodule.c, Modules/regexpr.c: casts for picky compilers. * Modules/socketmodule.c: 3-arg gethostbyname_r doesn't really work on OSF/1. * PC/vc15_w31/_.c, PC/vc15_lib/_.c, Tools/pynche/__init__.py: Avoid totally empty files. Fri Apr 9 14:56:35 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Tools/scripts/fixps.py: Use re instead of regex. Don't rewrite the file in place. (Reported by Andy Dustman.) * Lib/netrc.py, Lib/shlex.py: Get rid of #! line Thu Apr 8 23:13:37 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * PCbuild/python15.wse: Use the Tcl 8.0.5 installer. Add a variable %_TCL_% that makes it easier to switch to a different version. ====================================================================== From 1.5.2b2 to 1.5.2c1 ======================= Thu Apr 8 23:13:37 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * PCbuild/python15.wse: Release 1.5.2c1. Add IDLE and Uninstall to program group. Don't distribute zlib.dll. Tweak some comments. * PCbuild/zlib.dsp: Now using static zlib 1.1.3 * Lib/dos-8x3/userdict.py, Lib/dos-8x3/userlist.py, Lib/dos-8x3/test_zli.py, Lib/dos-8x3/test_use.py, Lib/dos-8x3/test_pop.py, Lib/dos-8x3/test_pic.py, Lib/dos-8x3/test_ntp.py, Lib/dos-8x3/test_gzi.py, Lib/dos-8x3/test_fcn.py, Lib/dos-8x3/test_cpi.py, Lib/dos-8x3/test_bsd.py, Lib/dos-8x3/posixfil.py, Lib/dos-8x3/mimetype.py, Lib/dos-8x3/nturl2pa.py, Lib/dos-8x3/compilea.py, Lib/dos-8x3/exceptio.py, Lib/dos-8x3/basehttp.py: The usual * Include/patchlevel.h: Release 1.5.2c1 * README: Release 1.5.2c1. * Misc/NEWS: News for the 1.5.2c1 release. * Lib/test/test_strftime.py: On Windows, we suddenly find, strftime() may return "" for an unsupported format string. (I guess this is because the logic for deciding whether to reallocate the buffer or not has been improved.) This caused the test code to crash on result[0]. Fix this by assuming an empty result also means the format is not supported. * Demo/tkinter/matt/window-creation-w-location.py: This demo imported some private code from Matt. Make it cripple along. * Lib/lib-tk/Tkinter.py: Delete an accidentally checked-in feature that actually broke more than was worth it: when deleting a canvas item, it would try to automatically delete the bindings for that item. Since there's nothing that says you can't reuse the tag and still have the bindings, this is not correct. Also, it broke at least one demo (Demo/tkinter/matt/rubber-band-box-demo-1.py). * Python/thread_wince.h: Win/CE thread support by Mark Hammond. Wed Apr 7 20:23:17 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Modules/zlibmodule.c: Patch by Andrew Kuchling to unflush() (flush() for deflating). Without this, if inflate() returned Z_BUF_ERROR asking for more output space, we would report the error; now, we increase the buffer size and try again, just as for Z_OK. * Lib/test/test_gzip.py: Use binary mode for all gzip files we open. * Tools/idle/ChangeLog: New change log. * Tools/idle/README.txt, Tools/idle/NEWS.txt: New version. * Python/pythonrun.c: Alas, get rid of the Win specific hack to ask the user to press Return before exiting when an error happened. This didn't work right when Python is invoked from a daemon. * Tools/idle/idlever.py: Version bump awaiting impending new release. (Not much has changed :-( ) * Lib/lib-tk/Tkinter.py: lower, tkraise/lift hide Misc.lower, Misc.tkraise/lift, so the preferred name for them is tag_lower, tag_raise (similar to tag_bind, and similar to the Text widget); unfortunately can't delete the old ones yet (maybe in 1.6) * Python/thread.c, Python/strtod.c, Python/mystrtoul.c, Python/import.c, Python/ceval.c: Changes by Mark Hammond for Windows CE. Mostly of the form #ifdef DONT_HAVE_header_H ... #endif around #include <header.h>. * Python/bltinmodule.c: Remove unused variable from complex_from_string() code. * Include/patchlevel.h: Add the possibility of a gamma release (release candidate). Add '+' to string version number to indicate we're beyond b2 now. * Modules/posixmodule.c: Add extern decl for fsync() for SunOS 4.x. * Lib/smtplib.py: Changes by Per Cederquist and The Dragon. Per writes: """ The application where Signum Support uses smtplib needs to be able to report good error messages to the user when sending email fails. To help in diagnosing problems it is useful to be able to report the entire message sent by the server, not only the SMTP error code of the offending command. A lot of the functions in sendmail.py unfortunately discards the message, leaving only the code. The enclosed patch fixes that problem. The enclosed patch also introduces a base class for exceptions that include an SMTP error code and error message, and make the code and message available on separate attributes, so that surrounding code can deal with them in whatever way it sees fit. I've also added some documentation to the exception classes. The constructor will now raise an exception if it cannot connect to the SMTP server. The data() method will raise an SMTPDataError if it doesn't receive the expected 354 code in the middle of the exchange. According to section 5.2.10 of RFC 1123 a smtp client must accept "any text, including no text at all" after the error code. If the response of a HELO command contains no text self.helo_resp will be set to the empty string (""). The patch fixes the test in the sendmail() method so that helo_resp is tested against None; if it has the empty string as value the sendmail() method would invoke the helo() method again. The code no longer accepts a -1 reply from the ehlo() method in sendmail(). [Text about removing SMTPRecipientsRefused deleted --GvR] """ and also: """ smtplib.py appends an extra blank line to the outgoing mail if the `msg' argument to the sendmail method already contains a trailing newline. This patch should fix the problem. """ The Dragon writes: """ Mostly I just re-added the SMTPRecipientsRefused exception (the exeption object now has the appropriate info in it ) [Per had removed this in his patch --GvR] and tweaked the behavior of the sendmail method whence it throws the newly added SMTPHeloException (it was closing the connection, which it shouldn't. whatever catches the exception should do that. ) I pondered the change of the return values to tuples all around, and after some thinking I decided that regularizing the return values was too much of the Right Thing (tm) to not do. My one concern is that code expecting an integer & getting a tuple may fail silently. (i.e. if it's doing : x.somemethod() >= 400: expecting an integer, the expression will always be true if it gets a tuple instead. ) However, most smtplib code I've seen only really uses the sendmail() method, so this wouldn't bother it. Usually code I've seen that calls the other methods usually only calls helo() and ehlo() for doing ESMTP, a feature which was not in the smtplib included with 1.5.1, and thus I would think not much code uses it yet. """ Tue Apr 6 19:38:18 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/test/test_ntpath.py: Fix the tests now that splitdrive() no longer treats UNC paths special. (Some tests converted to splitunc() tests.) * Lib/ntpath.py: Withdraw the UNC support from splitdrive(). Instead, a new function splitunc() parses UNC paths. The contributor of the UNC parsing in splitdrive() doesn't like it, but I haven't heard a good reason to keep it, and it causes some problems. (I think there's a philosophical problem -- to me, the split*() functions are purely syntactical, and the fact that \\foo is not a valid path doesn't mean that it shouldn't be considered an absolute path.) Also (quite separately, but strangely related to the philosophical issue above) fix abspath() so that if win32api exists, it doesn't fail when the path doesn't actually exist -- if GetFullPathName() fails, fall back on the old strategy (join with getcwd() if necessary, and then use normpath()). * configure.in, configure, config.h.in, acconfig.h: For BeOS PowerPC. Chris Herborth. Mon Apr 5 21:54:14 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Modules/timemodule.c: Jonathan Giddy notes, and Chris Lawrence agrees, that some comments on #else/#endif are wrong, and that #if HAVE_TM_ZONE should be #ifdef. * Misc/ACKS: Bunch of new contributors, including 9 who contributed to the Docs, reported by Fred. Mon Apr 5 18:37:59 1999 Fred Drake <fdrake@eric.cnri.reston.va.us> * Lib/gzip.py: Oops, missed mode parameter to open(). * Lib/gzip.py: Made the default mode 'rb' instead of 'r', for better cross-platform support. (Based on comment on the documentation by Bernhard Reiter <bernhard@csd.uwm.edu>). Fri Apr 2 22:18:25 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Tools/scripts/dutree.py: For reasons I dare not explain, this script should always execute main() when imported (in other words, it is not usable as a module). Thu Apr 1 15:32:30 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/test/test_cpickle.py: Jonathan Giddy write: In test_cpickle.py, the module os got imported, but the line to remove the temp file has gone missing. Tue Mar 30 20:17:31 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/BaseHTTPServer.py: Per Cederqvist writes: If you send something like "PUT / HTTP/1.0" to something derived from BaseHTTPServer that doesn't define do_PUT, you will get a response that begins like this: HTTP/1.0 501 Unsupported method ('do_PUT') Server: SimpleHTTP/0.3 Python/1.5 Date: Tue, 30 Mar 1999 18:53:53 GMT The server should complain about 'PUT' instead of 'do_PUT'. This patch should fix the problem. Mon Mar 29 20:33:21 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/smtplib.py: Patch by Per Cederqvist, who writes: """ - It needlessly used the makefile() method for each response that is read from the SMTP server. - If the remote SMTP server closes the connection unexpectedly the code raised an IndexError. It now raises an SMTPServerDisconnected exception instead. - The code now checks that all lines in a multiline response actually contains an error code. """ The Dragon approves. Mon Mar 29 20:25:40 1999 Fred Drake <fdrake@eric.cnri.reston.va.us> * Lib/compileall.py: When run as a script, report failures in the exit code as well. Patch largely based on changes by Andrew Dalke, as discussed in the distutils-sig. Mon Mar 29 20:23:41 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/urllib.py: Hack so that if a 302 or 301 redirect contains a relative URL, the right thing "just happens" (basejoin() with old URL). * Modules/cPickle.c: Protection against picling to/from closed (real) file. The problem was reported by Moshe Zadka. * Lib/test/test_cpickle.py: Test protection against picling to/from closed (real) file. * Modules/timemodule.c: Chris Lawrence writes: """ The GNU folks, in their infinite wisdom, have decided not to implement altzone in libc6; this would not be horrible, except that timezone (which is implemented) includes the current DST setting (i.e. timezone for Central is 18000 in summer and 21600 in winter). So Python's timezone and altzone variables aren't set correctly during DST. Here's a patch relative to 1.5.2b2 that (a) makes timezone and altzone show the "right" thing on Linux (by using the tm_gmtoff stuff available in BSD, which is how the GLIBC manual claims things should be done) and (b) should cope with the southern hemisphere. In pursuit of (b), I also took the liberty of renaming the "summer" and "winter" variables to "july" and "jan". This patch should also make certain time calculations on Linux actually work right (like the tz-aware functions in the rfc822 module). (It's hard to find DST that's currently being used in the southern hemisphere; I tested using Africa/Windhoek.) """ * Lib/test/output/test_gzip: Jonathan Giddy discovered this file was missing. * Modules/shamodule.c: Avoid warnings from AIX compiler. Reported by Vladimir (AIX is my middlename) Marangozov, patch coded by Greg Stein. * Tools/idle/ScriptBinding.py, Tools/idle/PyShell.py: At Tim Peters' recommendation, add a dummy flush() method to PseudoFile. Sun Mar 28 17:55:32 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Tools/scripts/ndiff.py: Tim Peters writes: I should have waited overnight <wink/sigh>. Nothing wrong with the one I sent, but I couldn't resist going on to add new -r1 / -r2 cmdline options for recreating the original files from ndiff's output. That's attached, if you're game! Us Windows guys don't usually have a sed sitting around <wink>. Sat Mar 27 13:34:01 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Tools/scripts/ndiff.py: Tim Peters writes: Attached is a cleaned-up version of ndiff (added useful module docstring, now echo'ed in case of cmd line mistake); added -q option to suppress initial file identification lines; + other minor cleanups, & a slightly faster match engine. Fri Mar 26 22:36:00 1999 Fred Drake <fdrake@eric.cnri.reston.va.us> * Tools/scripts/dutree.py: During display, if EPIPE is raised, it's probably because a pager was killed. Discard the error in that case, but propagate it otherwise. Fri Mar 26 16:20:45 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/test/output/test_userlist, Lib/test/test_userlist.py: Test suite for UserList. * Lib/UserList.py: Use isinstance() where appropriate. Reformatted with 4-space indent. Fri Mar 26 16:11:40 1999 Barry Warsaw <bwarsaw@eric.cnri.reston.va.us> * Tools/pynche/PyncheWidget.py: Helpwin.__init__(): The text widget should get focus. * Tools/pynche/pyColorChooser.py: Removed unnecessary import `from PyncheWidget import PyncheWidget' Fri Mar 26 15:32:05 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/test/output/test_userdict, Lib/test/test_userdict.py: Test suite for UserDict * Lib/UserDict.py: Improved a bunch of things. The constructor now takes an optional dictionary. Use isinstance() where appropriate. Thu Mar 25 22:38:49 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/test/output/test_pickle, Lib/test/output/test_cpickle, Lib/test/test_pickle.py, Lib/test/test_cpickle.py: Basic regr tests for pickle/cPickle * Lib/pickle.py: Don't use "exec" in find_class(). It's slow, unnecessary, and (as AMK points out) it doesn't work in JPython Applets. Thu Mar 25 21:50:27 1999 Andrew Kuchling <akuchlin@eric.cnri.reston.va.us> * Lib/test/test_gzip.py: Added a simple test suite for gzip. It simply opens a temp file, writes a chunk of compressed data, closes it, writes another chunk, and reads the contents back to verify that they are the same. * Lib/gzip.py: Based on a suggestion from bruce@hams.com, make a trivial change to allow using the 'a' flag as a mode for opening a GzipFile. gzip files, surprisingly enough, can be concatenated and then decompressed; the effect is to concatenate the two chunks of data. If we support it on writing, it should also be supported on reading. This *wasn't* trivial, and required rearranging the code in the reading path, particularly the _read() method. Raise IOError instead of RuntimeError in two cases, 'Not a gzipped file' and 'Unknown compression method' Thu Mar 25 21:25:01 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/test/test_b1.py: Add tests for float() and complex() with string args (Nick/Stephanie Lockwood). Thu Mar 25 21:21:08 1999 Andrew Kuchling <akuchlin@eric.cnri.reston.va.us> * Modules/zlibmodule.c: Add an .unused_data attribute to decompressor objects. If .unused_data is not an empty string, this means that you have arrived at the end of the stream of compressed data, and the contents of .unused_data are whatever follows the compressed stream. Thu Mar 25 21:16:07 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Python/bltinmodule.c: Patch by Nick and Stephanie Lockwood to implement complex() with a string argument. This closes TODO item 2.19. Wed Mar 24 19:09:00 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Tools/webchecker/wcnew.py: Added Samuel Bayer's new webchecker. Unfortunately his code breaks wcgui.py in a way that's not easy to fix. I expect that this is a temporary situation -- eventually Sam's changes will be merged back in. (The changes add a -t option to specify exceptions to the -x option, and explicit checking for #foo style fragment ids.) * Objects/dictobject.c: Vladimir Marangozov contributed updated comments. * Objects/bufferobject.c: Folded long lines. * Lib/test/output/test_sha, Lib/test/test_sha.py: Added Jeremy's test code for the sha module. * Modules/shamodule.c, Modules/Setup.in: Added Greg Stein and Andrew Kuchling's sha module. Fix comments about zlib version and URL. * Lib/test/test_bsddb.py: Remove the temp file when we're done. * Include/pythread.h: Conform to standard boilerplate. * configure.in, configure, BeOS/linkmodule, BeOS/ar-fake: Chris Herborth: the new compiler in R4.1 needs some new options to work... * Modules/socketmodule.c: Implement two suggestions by Jonathan Giddy: (1) in AIX, clear the data struct before calling gethostby{name,addr}_r(); (2) ignore the 3/5/6 args determinations made by the configure script and switch on platform identifiers instead: AIX, OSF have 3 args Sun, SGI have 5 args Linux has 6 args On all other platforms, undef HAVE_GETHOSTBYNAME_R altogether. * Modules/socketmodule.c: Vladimir Marangozov implements the AIX 3-arg gethostbyname_r code. * Lib/mailbox.py: Add readlines() to _Subfile class. Not clear who would need it, but Chris Lawrence sent me a broken version; this one is a tad simpler and more conforming to the standard. Tue Mar 23 23:05:34 1999 Jeremy Hylton <jhylton@eric.cnri.reston.va.us> * Lib/gzip.py: use struct instead of bit-manipulate in Python Tue Mar 23 19:00:55 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Modules/Makefile.pre.in: Add $(EXE) to various occurrences of python so it will work on Cygwin with egcs (after setting EXE=.exe). Patch by Norman Vine. * configure, configure.in: Ack! It never defined HAVE_GETHOSTBYNAME_R so that code was never tested! Mon Mar 22 22:25:39 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Include/thread.h: Adding thread.h -- unused but for b/w compatibility. As requested by Bill Janssen. * configure.in, configure: Add code to test for all sorts of gethostbyname_r variants, donated by David Arnold. * config.h.in, acconfig.h: Add symbols for gethostbyname_r variants (sigh). * Modules/socketmodule.c: Clean up pass for the previous patches. - Use HAVE_GETHOSTBYNAME_R_6_ARG instead of testing for Linux and glibc2. - If gethostbyname takes 3 args, undefine HAVE_GETHOSTBYNAME_R -- don't know what code should be used. - New symbol USE_GETHOSTBYNAME_LOCK defined iff the lock should be used. - Modify the gethostbyaddr() code to also hold on to the lock until after it is safe to release, overlapping with the Python lock. (Note: I think that it could in theory be possible that Python code executed while gethostbyname_lock is held could attempt to reacquire the lock -- e.g. in a signal handler or destructor. I will simply say "don't do that then.") * Modules/socketmodule.c: Jonathan Giddy writes: Here's a patch to fix the race condition, which wasn't fixed by Rob's patch. It holds the gethostbyname lock until the results are copied out, which means that this lock and the Python global lock are held at the same time. This shouldn't be a problem as long as the gethostbyname lock is always acquired when the global lock is not held. Mon Mar 22 19:25:30 1999 Andrew Kuchling <akuchlin@eric.cnri.reston.va.us> * Modules/zlibmodule.c: Fixed the flush() method of compression objects; the test for the end of loop was incorrect, and failed when the flushmode != Z_FINISH. Logic cleaned up and commented. * Lib/test/test_zlib.py: Added simple test for the flush() method of compression objects, trying the different flush values Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FULL_FLUSH. Mon Mar 22 15:28:08 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/shlex.py: Bug reported by Tobias Thelen: missing "self." in assignment target. Fri Mar 19 21:50:11 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Modules/arraymodule.c: Use an unsigned cast to avoid a warning in VC++. * Lib/dospath.py, Lib/ntpath.py: New code for split() by Tim Peters, behaves more like posixpath.split(). * Objects/floatobject.c: Fix a problem with Vladimir's PyFloat_Fini code: clear the free list; if a block cannot be freed, add its free items back to the free list. This is necessary to avoid leaking when Python is reinitialized later. * Objects/intobject.c: Fix a problem with Vladimir's PyInt_Fini code: clear the free list; if a block cannot be freed, add its free items back to the free list, and add its valid ints back to the small_ints array if they are in range. This is necessary to avoid leaking when Python is reinitialized later. * Lib/types.py: Added BufferType, the type returned by the new builtin buffer(). Greg Stein. * Python/bltinmodule.c: New builtin buffer() creates a derived read-only buffer from any object that supports the buffer interface (e.g. strings, arrays). * Objects/bufferobject.c: Added check for negative offset for PyBuffer_FromObject and check for negative size for PyBuffer_FromMemory. Greg Stein. Thu Mar 18 15:10:44 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/urlparse.py: Sjoerd Mullender writes: If a filename on Windows starts with \\, it is converted to a URL which starts with ////. If this URL is passed to urlparse.urlparse you get a path that starts with // (and an empty netloc). If you pass the result back to urlparse.urlunparse, you get a URL that starts with //, which is parsed differently by urlparse.urlparse. The fix is to add the (empty) netloc with accompanying slashes if the path in urlunparse starts with //. Do this for all schemes that use a netloc. * Lib/nturl2path.py: Sjoerd Mullender writes: Pathnames of files on other hosts in the same domain (\\host\path\to\file) are not translated correctly to URLs and back. The URL should be something like file:////host/path/to/file. Note that a combination of drive letter and remote host is not possible. Wed Mar 17 22:30:10 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/urlparse.py: Delete non-standard-conforming code in urljoin() that would use the netloc from the base url as the default netloc for the resulting url even if the schemes differ. Once upon a time, when the web was wild, this was a valuable hack because some people had a URL referencing an ftp server colocated with an http server without having the host in the ftp URL (so they could replicate it or change the hostname easily). More recently, after the file: scheme got added back to the list of schemes that accept a netloc, it turns out that this caused weirdness when joining an http: URL with a file: URL -- the resulting file: URL would always inherit the host from the http: URL because the file: scheme supports a netloc but in practice never has one. There are two reasons to get rid of the old, once-valuable hack, instead of removing the file: scheme from the uses_netloc list. One, the RFC says that file: uses the netloc syntax, and does not endorse the old hack. Two, neither netscape 4.5 nor IE 4.0 support the old hack. * Include/ceval.h, Include/abstract.h: Add DLL level b/w compat for PySequence_In and PyEval_CallObject Tue Mar 16 21:54:50 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/lib-tk/Tkinter.py: Bug reported by Jim Robinson: An attempt to execute grid_slaves with arguments (0,0) results in *all* of the slaves being returned, not just the slave associated with row 0, column 0. This is because the test for arguments in the method does not test to see if row (and column) does not equal None, but rather just whether is evaluates to non-false. A value of 0 fails this test. Tue Mar 16 14:17:48 1999 Fred Drake <fdrake@eric.cnri.reston.va.us> * Modules/cmathmodule.c: Docstring fix: acosh() returns the hyperbolic arccosine, not the hyperbolic cosine. Problem report via David Ascher by one of his students. Mon Mar 15 21:40:59 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * configure.in: Should test for gethost*by*name_r, not for gethostname_r (which doesn't exist and doesn't make sense). * Modules/socketmodule.c: Patch by Rob Riggs for Linux -- glibc2 has a different argument converntion for gethostbyname_r() etc. than Solaris! * Python/thread_pthread.h: Rob Riggs wrote: """ Spec says that on success pthread_create returns 0. It does not say that an error code will be < 0. Linux glibc2 pthread_create() returns ENOMEM (12) when one exceed process limits. (It looks like it should return EAGAIN, but that's another story.) For reference, see: http://www.opengroup.org/onlinepubs/7908799/xsh/pthread_create.html """ [I have a feeling that similar bugs were fixed before; perhaps someone could check that all error checks no check for != 0?] * Tools/bgen/bgen/bgenObjectDefinition.py: New mixin class that defines cmp and hash that use the ob_itself pointer. This allows (when using the mixin) different Python objects pointing to the same C object and behaving well as dictionary keys. Or so sez Jack Jansen... * Lib/urllib.py: Yet another patch by Sjoerd Mullender: Don't convert URLs to URLs using pathname2url. Fri Mar 12 22:15:43 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/cmd.py: Patch by Michael Scharf. He writes: The module cmd requires for each do_xxx command a help_xxx function. I think this is a little old fashioned. Here is a patch: use the docstring as help if no help_xxx function can be found. [I'm tempted to rip out all the help_* functions from pdb, but I'll resist it. Any takers? --Guido] * Tools/freeze/freeze.py: Bug submitted by Wayne Knowles, who writes: Under Windows, python freeze.py -o hello hello.py creates all the correct files in the hello subdirectory, but the Makefile has the directory prefix in it for frozen_extensions.c nmake fails because it tries to locate hello/frozen_extensions.c (His fix adds a call to os.path.basename() in the appropriate place.) * Objects/floatobject.c, Objects/intobject.c: Vladimir has restructured his code somewhat so that the blocks are now represented by an explicit structure. (There are still too many casts in the code, but that may be unavoidable.) Also added code so that with -vv it is very chatty about what it does. * Demo/zlib/zlibdemo.py, Demo/zlib/minigzip.py: Change #! line to modern usage; also chmod +x * Demo/pdist/rrcs, Demo/pdist/rcvs, Demo/pdist/rcsbump: Change #! line to modern usage * Lib/nturl2path.py, Lib/urllib.py: From: Sjoerd Mullender The filename to URL conversion didn't properly quote special characters. The URL to filename didn't properly unquote special chatacters. * Objects/floatobject.c: OK, try again. Vladimir gave me a fix for the alignment bus error, so here's his patch again. This time it works (at least on Solaris, Linux and Irix). Thu Mar 11 23:21:23 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Tools/idle/PathBrowser.py: Don't crash when sys.path contains an empty string. * Tools/idle/PathBrowser.py: - Don't crash in the case where a superclass is a string instead of a pyclbr.Class object; this can happen when the superclass is unrecognizable (to pyclbr), e.g. when module renaming is used. - Show a watch cursor when calling pyclbr (since it may take a while recursively parsing imported modules!). Thu Mar 11 16:04:04 1999 Fred Drake <fdrake@eric.cnri.reston.va.us> * Lib/mimetypes.py: Added .rdf and .xsl as application/xml types. (.rdf is for the Resource Description Framework, a metadata encoding, and .xsl is for the Extensible Stylesheet Language.) Thu Mar 11 13:26:23 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/test/output/test_popen2, Lib/test/test_popen2.py: Test for popen2 module, by Chris Tismer. * Objects/floatobject.c: Alas, Vladimir's patch caused a bus error (probably double alignment?), and I didn't test it. Withdrawing it for now. Wed Mar 10 22:55:47 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Objects/floatobject.c: Patch by Vladimir Marangoz to allow freeing of the allocated blocks of floats on finalization. * Objects/intobject.c: Patch by Vladimir Marangoz to allow freeing of the allocated blocks of integers on finalization. * Tools/idle/EditorWindow.py, Tools/idle/Bindings.py: Add PathBrowser to File module * Tools/idle/PathBrowser.py: "Path browser" - 4 scrolled lists displaying: directories on sys.path modules in selected directory classes in selected module methods of selected class Sinlge clicking in a directory, module or class item updates the next column with info about the selected item. Double clicking in a module, class or method item opens the file (and selects the clicked item if it is a class or method). I guess eventually I should be using a tree widget for this, but the ones I've seen don't work well enough, so for now I use the old Smalltalk or NeXT style multi-column hierarchical browser. * Tools/idle/MultiScrolledLists.py: New utility: multiple scrolled lists in parallel * Tools/idle/ScrolledList.py: - White background. - Display "(None)" (or text of your choosing) when empty. - Don't set the focus. Tue Mar 9 19:31:21 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/urllib.py: open_http also had the 'data is None' test backwards. don't call with the extra argument if data is None. * Demo/embed/demo.c: Call Py_SetProgramName() instead of redefining getprogramname(), reflecting changes in the runtime around 1.5 or earlier. * Python/ceval.c: Always test for an error return (usually NULL or -1) without setting an exception. * Modules/timemodule.c: Patch by Chris Herborth for BeOS code. He writes: I had an off-by-1000 error in floatsleep(), and the problem with time.clock() is that it's not implemented properly on QNX... ANSI says it's supposed to return _CPU_ time used by the process, but on QNX it returns the amount of real time used... so I was confused. * Tools/bgen/bgen/macsupport.py: Small change by Jack Jansen. Test for self.returntype behaving like OSErr rather than being it. Thu Feb 25 16:14:58 1999 Jeremy Hylton <jhylton@eric.cnri.reston.va.us> * Lib/urllib.py: http_error had the 'data is None' test backwards. don't call with the extra argument if data is None. * Lib/urllib.py: change indentation from 8 spaces to 4 spaces * Lib/urllib.py: pleasing the tabnanny Thu Feb 25 14:26:02 1999 Fred Drake <fdrake@eric.cnri.reston.va.us> * Lib/colorsys.py: Oops, one more "x, y, z" to convert... * Lib/colorsys.py: Adjusted comment at the top to be less confusing, following Fredrik Lundh's example. Converted comment to docstring. Wed Feb 24 18:49:15 1999 Fred Drake <fdrake@eric.cnri.reston.va.us> * Lib/toaiff.py: Use sndhdr instead of the obsolete whatsound module. Wed Feb 24 18:42:38 1999 Jeremy Hylton <jhylton@eric.cnri.reston.va.us> * Lib/urllib.py: When performing a POST request, i.e. when the second argument to urlopen is used to specify form data, make sure the second argument is threaded through all of the http_error_NNN calls. This allows error handlers like the redirect and authorization handlers to properly re-start the connection. Wed Feb 24 16:25:17 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/mhlib.py: Patch by Lars Wirzenius: o the initial comment is wrong: creating messages is already implemented o Message.getbodytext: if the mail or it's part contains an empty content-transfer-encoding header, the code used to break; the change below treats an empty encoding value the same as the other types that do not need decoding o SubMessage.getbodytext was missing the decode argument; the change below adds it; I also made it unconditionally return the raw text if decoding was not desired, because my own routines needed that (and it was easier than rewriting my own routines ;-) Wed Feb 24 00:35:43 1999 Barry Warsaw <bwarsaw@eric.cnri.reston.va.us> * Python/bltinmodule.c (initerrors): Make sure that the exception tuples ("base-classes" when string-based exceptions are used) reflect the real class hierarchy, i.e. that SystemExit derives from Exception not StandardError. * Lib/exceptions.py: Document the correct class hierarchy for SystemExit. It is not an error and so it derives from Exception and not SystemError. The docstring was incorrect but the implementation was fine. Tue Feb 23 23:07:51 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/shutil.py: Add import sys, needed by reference to sys.exc_info() in rmtree(). Discovered by Mitch Chapman. * config.h.in: Now that we don't have AC_CHECK_LIB(m, pow), the HAVE_LIBM symbol disappears. It wasn't used anywhere anyway... * Modules/arraymodule.c: Carefully check for overflow when allocating the memory for fromfile -- someone tried to pass in sys.maxint and got bitten by the bogus calculations. * configure.in: Get rid of AC_CHECK_LIB(m, pow) since this is taken care of later with LIBM (from --with-libm=...); this actually broke the customizability offered by the latter option. Thanks go to Clay Spence for reporting this. * Lib/test/test_dl.py: 1. Print the error message (carefully) when a dl.open() fails in verbose mode. 2. When no test case worked, raise ImportError instead of failing. * Python/bltinmodule.c: Patch by Tim Peters to improve the range checks for range() and xrange(), especially for platforms where int and long are different sizes (so sys.maxint isn't actually the theoretical limit for the length of a list, but the largest C int is -- sys.maxint is the largest Python int, which is actually a C long). * Makefile.in: 1. Augment the DG/UX rule so it doesn't break the BeOS build. 2. Add $(EXE) to various occurrences of python so it will work on Cygwin with egcs (after setting EXE=.exe). These patches by Norman Vine. * Lib/posixfile.py: According to Jeffrey Honig, bsd/os 2.0 - 4.0 should be added to the list (of bsd variants that have a different lock structure). * Lib/test/test_fcntl.py: According to Jeffrey Honig, bsd/os 4.0 should be added to the list. * Modules/timemodule.c: Patch by Tadayoshi Funaba (with some changes) to be smarter about guessing what happened when strftime() returns 0. Is it buffer overflow or was the result simply 0 bytes long? (This happens for an empty format string, or when the format string is a single %Z and the timezone is unknown.) if the buffer is at least 256 times as long as the format, assume the latter. Mon Feb 22 19:01:42 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/urllib.py: As Des Barry points out, we need to call pathname2url(file) in two calls to addinfourl() in open_file(). * Modules/Setup.in: Document *static* -- in two places! * Modules/timemodule.c: We don't support leap seconds, so the seconds field of a time 9-tuple should be in the range [0-59]. Noted by Tadayoshi Funaba. * Modules/stropmodule.c: In atoi(), don't use isxdigit() to test whether the last character converted was a "digit" -- use isalnum(). This test is there only to guard against "+" or "-" being interpreted as a valid int literal. Reported by Takahiro Nakayama. * Lib/os.py: As Finn Bock points out, _P_WAIT etc. don't have a leading underscore so they don't need to be treated specially here. Mon Feb 22 15:38:58 1999 Fred Drake <fdrake@eric.cnri.reston.va.us> * Misc/NEWS: Typo: "apparentlt" --> "apparently" Mon Feb 22 15:38:46 1999 Guido van Rossum <guido@eric.cnri.reston.va.us> * Lib/urlparse.py: Steve Clift pointed out that 'file' allows a netloc. * Modules/posixmodule.c: The docstring for ttyname(..) claims a second "mode" argument. The actual code does not allow such an argument. (Finn Bock.) * Lib/lib-old/poly.py: Dang. Even though this is obsolete code, somebody found a bug, and I fix it. Oh well. Thu Feb 18 20:51:50 1999 Fred Drake <fdrake@eric.cnri.reston.va.us> * Lib/pyclbr.py: Bow to font-lock at the end of the docstring, since it throws stuff off. Make sure the path parameter to readmodule() is a list before adding it with sys.path, or the addition could fail. ====================================================================== From 1.5.2b1 to 1.5.2b2 ======================= General ------- - Many memory leaks fixed. - Many small bugs fixed. - Command line option -OO (or -O -O) suppresses inclusion of doc strings in resulting bytecode. Windows-specific changes ------------------------ - New built-in module winsound provides an interface to the Win32 PlaySound() call. - Re-enable the audioop module in the config.c file. - On Windows, support spawnv() and associated P_* symbols. - Fixed the conversion of times() return values on Windows. - Removed freeze from the installer -- it doesn't work without the source tree. (See FAQ 8.11.) - On Windows 95/98, the Tkinter module now is smart enough to find Tcl/Tk even when the PATH environment variable hasn't been set -- when the import of _tkinter fails, it searches in a standard locations, patches os.environ["PATH"], and tries again. When it still fails, a clearer error message is produced. This should avoid most installation problems with Tkinter use (e.g. in IDLE). - The -i option doesn't make any calls to set[v]buf() for stdin -- this apparently screwed up _kbhit() and the _tkinter main loop. - The ntpath module (and hence, os.path on Windows) now parses out UNC paths (e.g. \\host\mountpoint\dir\file) as "drive letters", so that splitdrive() will \\host\mountpoint as the drive and \dir\file as the path. ** EXPERIMENTAL ** - Added a hack to the exit code so that if (1) the exit status is nonzero and (2) we think we have our own DOS box (i.e. we're not started from a command line shell), we print a message and wait for the user to hit a key before the DOS box is closed. - Updated the installer to WISE 5.0g. Added a dialog warning about the imminent Tcl installation. Added a dialog to specify the program group name in the start menu. Upgraded the Tcl installer to Tcl 8.0.4. Changes to intrinsics --------------------- - The repr() or str() of a module object now shows the __file__ attribute (i.e., the file which it was loaded), or the string "(built-in)" if there is no __file__ attribute. - The range() function now avoids overflow during its calculations (if at all possible). - New info string sys.hexversion, which is an integer encoding the version in hexadecimal. In other words, hex(sys.hexversion) == 0x010502b2 for Python 1.5.2b2. New or improved ports --------------------- - Support for Nextstep descendants (future Mac systems). - Improved BeOS support. - Support dynamic loading of shared libraries on NetBSD platforms that use ELF (i.e., MIPS and Alpha systems). Configuration/build changes --------------------------- - The Lib/test directory is no longer included in the default module search path (sys.path) -- "test" has been a package ever since 1.5. - Now using autoconf 2.13. New library modules ------------------- - New library modules asyncore and asynchat: these form Sam Rushing's famous asynchronous socket library. Sam has gracefully allowed me to incorporate these in the standard Python library. - New module statvfs contains indexing constants for [f]statvfs() return tuple. Changes to the library ---------------------- - The wave module (platform-independent support for Windows sound files) has been fixed to actually make it work. - The sunau module (platform-independent support for Sun/NeXT sound files) has been fixed to work across platforms. Also, a weird encoding bug in the header of the audio test data file has been corrected. - Fix a bug in the urllib module that occasionally tripped up webchecker and other ftp retrieves. - ConfigParser's get() method now accepts an optional keyword argument (vars) that is substituted on top of the defaults that were setup in __init__. You can now also have recusive references in your configuration file. - Some improvements to the Queue module, including a put_nowait() module and an optional "block" second argument, to get() and put(), defaulting to 1. - The updated xmllib module is once again compatible with the version present in Python 1.5.1 (this was accidentally broken in 1.5.2b1). - The bdb module (base class for the debugger) now supports canonicalizing pathnames used in breakpoints. The derived class must override the new canonical() method for this to work. Also changed clear_break() to the backwards compatible old signature, and added clear_bpbynumber() for the new functionality. - In sgmllib (and hence htmllib), recognize attributes even if they don't have space in front of them. I.e. '<a name="foo"href="bar.html">' will now have two attributes recognized. - In the debugger (pdb), change clear syntax to support three alternatives: clear; clear file:line; clear bpno bpno ... - The os.path module now pretends to be a submodule within the os "package", so you can do things like "from os.path import exists". - The standard exceptions now have doc strings. - In the smtplib module, exceptions are now classes. Also avoid inserting a non-standard space after "TO" in rcpt() command. - The rfc822 module's getaddrlist() method now uses all occurrences of the specified header instead of just the first. Some other bugfixes too (to handle more weird addresses found in a very large test set, and to avoid crashes on certain invalid dates), and a small test module has been added. - Fixed bug in urlparse in the common-case code for HTTP URLs; it would lose the query, fragment, and/or parameter information. - The sndhdr module no longer supports whatraw() -- it depended on a rare extenral program. - The UserList module/class now supports the extend() method, like real list objects. - The uu module now deals better with trailing garbage generated by some broke uuencoders. - The telnet module now has a my_interact() method which uses threads instead of select. The interact() method uses this by default on Windows (where the single-threaded version doesn't work). - Add a class to mailbox.py for dealing with qmail directory mailboxes. The test code was extended to notice these being used as well. Changes to extension modules ---------------------------- - Support for the [f]statvfs() system call, where it exists. - Fixed some bugs in cPickle where bad input could cause it to dump core. - Fixed cStringIO to make the writelines() function actually work. - Added strop.expandtabs() so string.expandtabs() is now much faster. - Added fsync() and fdatasync(), if they appear to exist. - Support for "long files" (64-bit seek pointers). - Fixed a bug in the zlib module's flush() function. - Added access() system call. It returns 1 if access granted, 0 if not. - The curses module implements an optional nlines argument to w.scroll(). (It then calls wscrl(win, nlines) instead of scoll(win).) Changes to tools ---------------- - Some changes to IDLE; see Tools/idle/NEWS.txt. - Latest version of Misc/python-mode.el included. Changes to Tkinter ------------------ - Avoid tracebacks when an image is deleted after its root has been destroyed. Changes to the Python/C API --------------------------- - When parentheses are used in a PyArg_Parse[Tuple]() call, any sequence is now accepted, instead of requiring a tuple. This is in line with the general trend towards accepting arbitrary sequences. - Added PyModule_GetFilename(). - In PyNumber_Power(), remove unneeded and even harmful test for float to the negative power (which is already and better done in floatobject.c). - New version identification symbols; read patchlevel.h for info. The version numbers are now exported by Python.h. - Rolled back the API version change -- it's back to 1007! - The frozenmain.c function calls PyInitFrozenExtensions(). - Added 'N' format character to Py_BuildValue -- like 'O' but doesn't INCREF. ====================================================================== From 1.5.2a2 to 1.5.2b1 ======================= Changes to intrinsics --------------------- - New extension NotImplementedError, derived from RuntimeError. Not used, but recommended use is for "abstract" methods to raise this. - The parser will now spit out a warning or error when -t or -tt is used for parser input coming from a string, too. - The code generator now inserts extra SET_LINENO opcodes when compiling multi-line argument lists. - When comparing bound methods, use identity test on the objects, not equality test. New or improved ports --------------------- - Chris Herborth has redone his BeOS port; it now works on PowerPC (R3/R4) and x86 (R4 only). Threads work too in this port. Renaming -------- - Thanks to Chris Herborth, the thread primitives now have proper Py* names in the source code (they already had those for the linker, through some smart macros; but the source still had the old, un-Py names). Configuration/build changes --------------------------- - Improved support for FreeBSD/3. - Check for pthread_detach instead of pthread_create in libc. - The makesetup script now searches EXECINCLUDEPY before INCLUDEPY. - Misc/Makefile.pre.in now also looks at Setup.thread and Setup.local. Otherwise modules such as thread didn't get incorporated in extensions. New library modules ------------------- - shlex.py by Eric Raymond provides a lexical analyzer class for simple shell-like syntaxes. - netrc.py by Eric Raymond provides a parser for .netrc files. (The undocumented Netrc class in ftplib.py is now obsolete.) - codeop.py is a new module that contains the compile_command() function that was previously in code.py. This is so that JPython can provide its own version of this function, while still sharing the higher-level classes in code.py. - turtle.py is a new module for simple turtle graphics. I'm still working on it; let me know if you use this to teach Python to children or other novices without prior programming experience. Obsoleted library modules ------------------------- - poly.py and zmod.py have been moved to Lib/lib-old to emphasize their status of obsoleteness. They don't do a particularly good job and don't seem particularly relevant to the Python core. New tools --------- - I've added IDLE: my Integrated DeveLopment Environment for Python. Requires Tcl/Tk (and Tkinter). Works on Windows and Unix (and should work on Macintosh, but I haven't been able to test it there; it does depend on new features in 1.5.2 and perhaps even new features in 1.5.2b1, especially the new code module). This is very much a work in progress. I'd like to hear how people like it compared to PTUI (or any other IDE they are familiar with). - New tools by Barry Warsaw: = audiopy: controls the Solaris Audio device = pynche: The PYthonically Natural Color and Hue Editor = world: Print mappings between country names and DNS country codes New demos --------- - Demo/scripts/beer.py prints the lyrics to an arithmetic drinking song. - Demo/tkinter/guido/optionmenu.py shows how to do an option menu in Tkinter. (By Fredrik Lundh -- not by me!) Changes to the library ---------------------- - compileall.py now avoids recompiling .py files that haven't changed; it adds a -f option to force recompilation. - New version of xmllib.py by Sjoerd Mullender (0.2 with latest patches). - nntplib.py: statparse() no longer lowercases the message-id. - types.py: use type(__stdin__) for FileType. - urllib.py: fix translations for filenames with "funny" characters. Patch by Sjoerd Mullender. Note that if you subclass one of the URLopener classes, and you have copied code from the old urllib.py, your subclass may stop working. A long-term solution is to provide more methods so that you don't have to copy code. - cgi.py: In read_multi, allow a subclass to override the class we instantiate when we create a recursive instance, by setting the class variable 'FieldStorageClass' to the desired class. By default, this is set to None, in which case we use self.__class__ (as before). Also, a patch by Jim Fulton to pass additional arguments to recursive calls to the FieldStorage constructor from its read_multi method. - UserList.py: In __getslice__, use self.__class__ instead of UserList. - In SimpleHTTPServer.py, the server specified in test() should be BaseHTTPServer.HTTPServer, in case the request handler should want to reference the two attributes added by BaseHTTPServer.server_bind. (By Jeff Rush, for Bobo). Also open the file in binary mode, so serving images from a Windows box might actually work. - In CGIHTTPServer.py, the list of acceptable formats is -split- on spaces but -joined- on commas, resulting in double commas in the joined text. (By Jeff Rush.) - SocketServer.py, patch by Jeff Bauer: a minor change to declare two new threaded versions of Unix Server classes, using the ThreadingMixIn class: ThreadingUnixStreamServer, ThreadingUnixDatagramServer. - bdb.py: fix bomb on deleting a temporary breakpoint: there's no method do_delete(); do_clear() was meant. By Greg Ward. - getopt.py: accept a non-list sequence for the long options (request by Jack Jansen). Because it might be a common mistake to pass a single string, this situation is treated separately. Also added docstrings (copied from the library manual) and removed the (now redundant) module comments. - tempfile.py: improvements to avoid security leaks. - code.py: moved compile_command() to new module codeop.py. - pickle.py: support pickle format 1.3 (binary float added). By Jim Fulton. Also get rid of the undocumented obsolete Pickler dump_special method. - uu.py: Move 'import sys' to top of module, as noted by Tim Peters. - imaplib.py: fix problem with some versions of IMAP4 servers that choose to mix the case in their CAPABILITIES response. - cmp.py: use (f1, f2) as cache key instead of f1 + ' ' + f2. Noted by Fredrik Lundh. Changes to extension modules ---------------------------- - More doc strings for several modules were contributed by Chris Petrilli: math, cmath, fcntl. - Fixed a bug in zlibmodule.c that could cause core dumps on decompression of rarely occurring input. - cPickle.c: new version from Jim Fulton, with Open Source copyright notice. Also, initialize self->safe_constructors early on to prevent crash in early dealloc. - cStringIO.c: new version from Jim Fulton, with Open Source copyright notice. Also fixed a core dump in cStringIO.c when doing seeks. - mpzmodule.c: fix signed character usage in mpz.mpz(stringobjecty). - readline.c: Bernard Herzog pointed out that rl_parse_and_bind modifies its argument string (bad function!), so we make a temporary copy. - sunaudiodev.c: Barry Warsaw added more smarts to get the device and control pseudo-device, per audio(7I). Changes to tools ---------------- - New, improved version of Barry Warsaw's Misc/python-mode.el (editing support for Emacs). - tabnanny.py: added a -q ('quiet') option to tabnanny, which causes only the names of offending files to be printed. - freeze: when printing missing modules, also print the module they were imported from. - untabify.py: patch by Detlef Lannert to implement -t option (set tab size). Changes to Tkinter ------------------ - grid_bbox(): support new Tk API: grid bbox ?column row? ?column2 row2? - _tkinter.c: RajGopal Srinivasan noted that the latest code (1.5.2a2) doesn't work when running in a non-threaded environment. He added some #ifdefs that fix this. Changes to the Python/C API --------------------------- - Bumped API version number to 1008 -- enough things have changed! - There's a new macro, PyThreadState_GET(), which does the same work as PyThreadState_Get() without the overhead of a function call (it also avoids the error check). The two top calling locations of PyThreadState_Get() have been changed to use this macro. - All symbols intended for export from a DLL or shared library are now marked as such (with the DL_IMPORT() macro) in the header file that declares them. This was needed for the BeOS port, and should also make some other ports easier. The PC port no longer needs the file with exported symbols (PC/python_nt.def). There's also a DL_EXPORT macro which is only used for init methods in extension modules, and for Py_Main(). Invisible changes to internals ------------------------------ - Fixed a bug in new_buffersize() in fileobject.c which could return a buffer size that was way too large. - Use PySys_WriteStderr instead of fprintf in most places. - dictobject.c: remove dead code discovered by Vladimir Marangozov. - tupleobject.c: make tuples less hungry -- an extra item was allocated but never used. Tip by Vladimir Marangozov. - mymath.h: Metrowerks PRO4 finally fixes the hypot snafu. (Jack Jansen) - import.c: Jim Fulton fixes a reference count bug in PyEval_GetGlobals. - glmodule.c: check in the changed version after running the stubber again -- this solves the conflict with curses over the 'clear' entry point much nicer. (Jack Jansen had checked in the changes to cstubs eons ago, but I never regenrated glmodule.c :-( ) - frameobject.c: fix reference count bug in PyFrame_New. Vladimir Marangozov. - stropmodule.c: add a missing DECREF in an error exit. Submitted by Jonathan Giddy. ====================================================================== From 1.5.2a1 to 1.5.2a2 ======================= General ------- - It is now a syntax error to have a function argument without a default following one with a default. - __file__ is now set to the .py file if it was parsed (it used to always be the .pyc/.pyo file). - Don't exit with a fatal error during initialization when there's a problem with the exceptions.py module. - New environment variable PYTHONOPTIMIZE can be used to set -O. - New version of python-mode.el for Emacs. Miscellaneous fixed bugs ------------------------ - No longer print the (confusing) error message about stack underflow while compiling. - Some threading and locking bugs fixed. - When errno is zero, report "Error", not "Success". Documentation ------------- - Documentation will be released separately. - Doc strings added to array and md5 modules by Chris Petrilli. Ports and build procedure ------------------------- - Stop installing when a move or copy fails. - New version of the OS/2 port code by Jeff Rush. - The makesetup script handles absolute filenames better. - The 'new' module is now enabled by default in the Setup file. - I *think* I've solved the problem with the Linux build blowing up sometimes due to a conflict between sigcheck/intrcheck and signalmodule. Built-in functions ------------------ - The second argument to apply() can now be any sequence, not just a tuple. Built-in types -------------- - Lists have a new method: L1.extend(L2) is equivalent to the common idiom L1[len(L1):] = L2. - Better error messages when a sequence is indexed with a non-integer. - Bettter error message when calling a non-callable object (include the type in the message). Python services --------------- - New version of cPickle.c fixes some bugs. - pickle.py: improved instantiation error handling. - code.py: reworked quite a bit. New base class InteractiveInterpreter and derived class InteractiveConsole. Fixed several problems in compile_command(). - py_compile.py: print error message and continue on syntax errors. Also fixed an old bug with the fstat code (it was never used). - pyclbr.py: support submodules of packages. String Services --------------- - StringIO.py: raise the right exception (ValueError) for attempted I/O on closed StringIO objects. - re.py: fixed a bug in subn(), which caused .groups() to fail inside the replacement function called by sub(). - The struct module has a new format 'P': void * in native mode. Generic OS Services ------------------- - Module time: Y2K robustness. 2-digit year acceptance depends on value of time.accept2dyear, initialized from env var PYTHONY2K, default 0. Years 00-68 mean 2000-2068, while 69-99 mean 1969-1999 (POSIX or X/Open recommendation). - os.path: normpath(".//x") should return "x", not "/x". - getpass.py: fall back on default_getpass() when sys.stdin.fileno() doesn't work. - tempfile.py: regenerate the template after a fork() call. Optional OS Services -------------------- - In the signal module, disable restarting interrupted system calls when we have siginterrupt(). Debugger -------- - No longer set __args__; this feature is no longer supported and can affect the debugged code. - cmd.py, pdb.py and bdb.py have been overhauled by Richard Wolff, who added aliases and some other useful new features, e.g. much better breakpoint support: temporary breakpoint, disabled breakpoints, breakpoints with ignore counts, and conditions; breakpoints can be set on a file before it is loaded. Profiler -------- - Changes so that JPython can use it. Also fix the calibration code so it actually works again . Internet Protocols and Support ------------------------------ - imaplib.py: new version from Piers Lauder. - smtplib.py: change sendmail() method to accept a single string or a list or strings as the destination (commom newbie mistake). - poplib.py: LIST with a msg argument fixed. - urlparse.py: some optimizations for common case (http). - urllib.py: support content-length in info() for ftp protocol; support for a progress meter through a third argument to urlretrieve(); commented out gopher test (the test site is dead). Internet Data handling ---------------------- - sgmllib.py: support tags with - or . in their name. - mimetypes.py: guess_type() understands 'data' URLs. Restricted Execution -------------------- - The classes rexec.RModuleLoader and rexec.RModuleImporter no longer exist. Tkinter ------- - When reporting an exception, store its info in sys.last_*. Also, write all of it to stderr. - Added NS, EW, and NSEW constants, for grid's sticky option. - Fixed last-minute bug in 1.5.2a1 release: need to include "mytime.h". - Make bind variants without a sequence return a tuple of sequences (formerly it returned a string, which wasn't very convenient). - Add image commands to the Text widget (these are new in Tk 8.0). - Added new listbox and canvas methods: {xview,yview}_{scroll,moveto}.) - Improved the thread code (but you still can't call update() from another thread on Windows). - Fixed unnecessary references to _default_root in the new dialog modules. - Miscellaneous problems fixed. Windows General --------------- - Call LoadLibraryEx(..., ..., LOAD_WITH_ALTERED_SEARCH_PATH) to search for dependent dlls in the directory containing the .pyd. - In debugging mode, call DebugBreak() in Py_FatalError(). Windows Installer ----------------- - Install zlib.dll in the DLLs directory instead of in the win32 system directory, to avoid conflicts with other applications that have their own zlib.dll. Test Suite ---------- - test_long.py: new test for long integers, by Tim Peters. - regrtest.py: improved so it can be used for other test suites as well. - test_strftime.py: use re to compare test results, to support legal variants (e.g. on Linux). Tools and Demos --------------- - Four new scripts in Tools/scripts: crlf.py and lfcr.py (to remove/add Windows style '\r\n' line endings), untabify.py (to remove tabs), and rgrep.yp (reverse grep). - Improvements to Tools/freeze/. Each Python module is now written to its own C file. This prevents some compilers or assemblers from blowing up on large frozen programs, and saves recompilation time if only a few modules are changed. Other changes too, e.g. new command line options -x and -i. - Much improved (and smaller!) version of Tools/scripts/mailerdaemon.py. Python/C API ------------ - New mechanism to support extensions of the type object while remaining backward compatible with extensions compiled for previous versions of Python 1.5. A flags field indicates presence of certain fields. - Addition to the buffer API to differentiate access to bytes and 8-bit characters (in anticipation of Unicode characters). - New argument parsing format t# ("text") to indicate 8-bit characters; s# simply means 8-bit bytes, for backwards compatibility. - New object type, bufferobject.c is an example and can be used to create buffers from memory. - Some support for 64-bit longs, including some MS platforms. - Many calls to fprintf(stderr, ...) have been replaced with calls to PySys_WriteStderr(...). - The calling context for PyOS_Readline() has changed: it must now be called with the interpreter lock held! It releases the lock around the call to the function pointed to by PyOS_ReadlineFunctionPointer (default PyOS_StdioReadline()). - New APIs PyLong_FromVoidPtr() and PyLong_AsVoidPtr(). - Renamed header file "thread.h" to "pythread.h". - The code string of code objects may now be anything that supports the buffer API. ====================================================================== From 1.5.1 to 1.5.2a1 ===================== General ------- - When searching for the library, a landmark that is a compiled module (string.pyc or string.pyo) is also accepted. - When following symbolic links to the python executable, use a loop so that a symlink to a symlink can work. - Added a hack so that when you type 'quit' or 'exit' at the interpreter, you get a friendly explanation of how to press Ctrl-D (or Ctrl-Z) to exit. - New and improved Misc/python-mode.el (Python mode for Emacs). - Revert a new feature in Unix dynamic loading: for one or two revisions, modules were loaded using the RTLD_GLOBAL flag. It turned out to be a bad idea. Miscellaneous fixed bugs ------------------------ - All patches on the patch page have been integrated. (But much more has been done!) - Several memory leaks plugged (e.g. the one for classes with a __getattr__ method). - Removed the only use of calloc(). This triggered an obscure bug on multiprocessor Sparc Solaris 2.6. - Fix a peculiar bug that would allow "import sys.time" to succeed (believing the built-in time module to be a part of the sys package). - Fix a bug in the overflow checking when converting a Python long to a C long (failed to convert -2147483648L, and some other cases). Documentation ------------- - Doc strings have been added to many extension modules: __builtin__, errno, select, signal, socket, sys, thread, time. Also to methods of list objects (try [].append.__doc__). A doc string on a type will now automatically be propagated to an instance if the instance has methods that are accessed in the usual way. - The documentation has been expanded and the formatting improved. (Remember that the documentation is now unbundled and has its own release cycle though; see http://www.python.org/doc/.) - Added Misc/Porting -- a mini-FAQ on porting to a new platform. Ports and build procedure ------------------------- - The BeOS port is now integrated. Courtesy Chris Herborth. - Symbol files for FreeBSD 2.x and 3.x have been contributed (Lib/plat-freebsd[23]/*). - Support HPUX 10.20 DCE threads. - Finally fixed the configure script so that (on SGI) if -OPT:Olimit=0 works, it won't also use -Olimit 1500 (which gives a warning for every file). Also support the SGI_ABI environment variable better. - The makesetup script now understands absolute pathnames ending in .o in the module -- it assumes it's a file for which we have no source. - Other miscellaneous improvements to the configure script and Makefiles. - The test suite now uses a different sound sample. Built-in functions ------------------ - Better checks for invalid input to int(), long(), string.atoi(), string.atol(). (Formerly, a sign without digits would be accepted as a legal ways to spell zero.) - Changes to map() and filter() to use the length of a sequence only as a hint -- if an IndexError happens earlier, take that. (Formerly, this was considered an error.) - Experimental feature in getattr(): a third argument can specify a default (instead of raising AttributeError). - Implement round() slightly different, so that for negative ndigits no additional errors happen in the last step. - The open() function now adds the filename to the exception when it fails. Built-in exceptions ------------------- - New standard exceptions EnvironmentError and PosixError. EnvironmentError is the base class for IOError and PosixError; PosixError is the same as os.error. All this so that either exception class can be instantiated with a third argument indicating a filename. The built-in function open() and most os/posix functions that take a filename argument now use this. Built-in types -------------- - List objects now have an experimental pop() method; l.pop() returns and removes the last item; l.pop(i) returns and removes the item at i. Also, the sort() method is faster again. Sorting is now also safer: it is impossible for the sorting function to modify the list while the sort is going on (which could cause core dumps). - Changes to comparisons: numbers are now smaller than any other type. This is done to prevent the circularity where [] < 0L < 1 < [] is true. As a side effect, cmp(None, 0) is now positive instead of negative. This *shouldn't* affect any working code, but I've found that the change caused several "sleeping" bugs to become active, so beware! - Instance methods may now have other callable objects than just Python functions as their im_func. Use new.instancemethod() or write your own C code to create them; new.instancemethod() may be called with None for the instance to create an unbound method. - Assignment to __name__, __dict__ or __bases__ of a class object is now allowed (with stringent type checks); also allow assignment to __getattr__ etc. The cached values for __getattr__ etc. are recomputed after such assignments (but not for derived classes :-( ). - Allow assignment to some attributes of function objects: func_code, func_defaults and func_doc / __doc__. (With type checks except for __doc__ / func_doc .) Python services --------------- - New tests (in Lib/test): reperf.py (regular expression benchmark), sortperf.py (list sorting benchmark), test_MimeWriter.py (test case for the MimeWriter module). - Generalized test/regrtest.py so that it is useful for testing other packages. - The ihooks.py module now understands package imports. - In code.py, add a class that subsumes Fredrik Lundh's PythonInterpreter class. The interact() function now uses this. - In rlcompleter.py, in completer(), return None instead of raising an IndexError when there are no more completions left. - Fixed the marshal module to test for certain common kinds of invalid input. (It's still not foolproof!) - In the operator module, add an alias (now the preferred name) "contains" for "sequenceincludes". String Services --------------- - In the string and strop modules, in the replace() function, treat an empty pattern as an error (since it's not clear what was meant!). - Some speedups to re.py, especially the string substitution and split functions. Also added new function/method findall(), to find all occurrences of a given substring. - In cStringIO, add better argument type checking and support the readonly 'closed' attribute (like regular files). - In the struct module, unsigned 1-2 byte sized formats no longer result in long integer values. Miscellaneous services ---------------------- - In whrandom.py, added new method and function randrange(), same as choice(range(start, stop, step)) but faster. This addresses the problem that randint() was accidentally defined as taking an inclusive range. Also, randint(a, b) is now redefined as randrange(a, b+1), adding extra range and type checking to its arguments! - Add some semi-thread-safety to random.gauss() (it used to be able to crash when invoked from separate threads; now the worst it can do is give a duplicate result occasionally). - Some restructuring and generalization done to cmd.py. - Major upgrade to ConfigParser.py; converted to using 're', added new exceptions, support underscore in section header and option name. No longer add 'name' option to every section; instead, add '__name__'. - In getpass.py, don't use raw_input() to ask for the password -- we don't want it to show up in the readline history! Also don't catch interrupts (the try-finally already does all necessary cleanup). Generic OS Services ------------------- - New functions in os.py: makedirs(), removedirs(), renames(). New variable: linesep (the line separator as found in binary files, i.e. '\n' on Unix, '\r\n' on DOS/Windows, '\r' on Mac. Do *not* use this with files opened in (default) text mode; the line separator used will always be '\n'! - Changes to the 'os.path' submodule of os.py: added getsize(), getmtime(), getatime() -- these fetch the most popular items from the stat return tuple. - In the time module, add strptime(), if it exists. (This parses a time according to a format -- the inverse of strftime().) Also, remove the call to mktime() from strftime() -- it messed up the formatting of some non-local times. - In the socket module, added a new function gethostbyname_ex(). Also, don't use #ifdef to test for some symbols that are enums on some platforms (and should exist everywhere). Optional OS Services -------------------- - Some fixes to gzip.py. In particular, the readlines() method now returns the lines *with* trailing newline characters, like readlines() of regular file objects. Also, it didn't work together with cPickle; fixed that. - In whichdb.py, support byte-swapped dbhash (bsddb) files. - In anydbm.py, look at the type of an existing database to determine which module to use to open it. (The anydbm.error exception is now a tuple.) Unix Services ------------- - In the termios module, in tcsetattr(), initialize the structure vy calling tcgetattr(). - Added some of the "wait status inspection" macros as functions to the posix module (and thus to the os module): WEXITSTATUS(), WIFEXITED(), WIFSIGNALED(), WIFSTOPPED(), WSTOPSIG(), WTERMSIG(). - In the syslog module, make the default facility more intuitive (matching the docs). Debugger -------- - In pdb.py, support for setting breaks on files/modules that haven't been loaded yet. Internet Protocols and Support ------------------------------ - Changes in urllib.py; sped up unquote() and quote(). Fixed an obscure bug in quote_plus(). Added urlencode(dict) -- convenience function for sending a POST request with urlopen(). Use the getpass module to ask for a password. Rewrote the (test) main program so that when used as a script, it can retrieve one or more URLs to stdout. Use -t to run the self-test. Made the proxy code work again. - In cgi.py, treat "HEAD" the same as "GET", so that CGI scripts don't fail when someone asks for their HEAD. Also, for POST, set the default content-type to application/x-www-form-urlencoded. Also, in FieldStorage.__init__(), when method='GET', always get the query string from environ['QUERY_STRING'] or sys.argv[1] -- ignore an explicitly passed in fp. - The smtplib.py module now supports ESMTP and has improved standard compliance, for picky servers. - Improved imaplib.py. - Fixed UDP support in SocketServer.py (it never worked). - Fixed a small bug in CGIHTTPServer.py. Internet Data handling ---------------------- - In rfc822.py, add a new class AddressList. Also support a new overridable method, isheader(). Also add a get() method similar to dictionaries (and make getheader() an alias for it). Also, be smarter about seekable (test whether fp.tell() works) and test for presence of unread() method before trying seeks. - In sgmllib.py, restore the call to report_unbalanced() that was lost long ago. Also some other improvements: handle <? processing instructions >, allow . and - in entity names, and allow \r\n as line separator. - Some restructuring and generalization done to multifile.py; support a 'seekable' flag. Restricted Execution -------------------- - Improvements to rexec.py: package support; support a (minimal) sys.exc_info(). Also made the (test) main program a bit fancier (you can now use it to run arbitrary Python scripts in restricted mode). Tkinter ------- - On Unix, Tkinter can now safely be used from a multi-threaded application. (Formerly, no threads would make progress while Tkinter's mainloop() was active, because it didn't release the Python interpreter lock.) Unfortunately, on Windows, threads other than the main thread should not call update() or update_idletasks() because this will deadlock the application. - An interactive interpreter that uses readline and Tkinter no longer uses up all available CPU time. - Even if readline is not used, Tk windows created in an interactive interpreter now get continuously updated. (This even works in Windows as long as you don't hit a key.) - New demos in Demo/tkinter/guido/: brownian.py, redemo.py, switch.py. - No longer register Tcl_finalize() as a low-level exit handler. It may call back into Python, and that's a bad idea. - Allow binding of Tcl commands (given as a string). - Some minor speedups; replace explicitly coded getint() with int() in most places. - In FileDialog.py, remember the directory of the selected file, if given. - Change the names of all methods in the Wm class: they are now wm_title(), etc. The old names (title() etc.) are still defined as aliases. - Add a new method of interpreter objects, interpaddr(). This returns the address of the Tcl interpreter object, as an integer. Not very useful for the Python programmer, but this can be called by another C extension that needs to make calls into the Tcl/Tk C API and needs to get the address of the Tcl interpreter object. A simple cast of the return value to (Tcl_Interp *) will do the trick. Windows General --------------- - Don't insist on proper case for module source files if the filename is all uppercase (e.g. FOO.PY now matches foo; but FOO.py still doesn't). This should address problems with this feature on oldfashioned filesystems (Novell servers?). Windows Library --------------- - os.environ is now all uppercase, but accesses are case insensitive, and the putenv() calls made as a side effect of changing os.environ are case preserving. - Removed samefile(), sameopenfile(), samestat() from os.path (aka ntpath.py) -- these cannot be made to work reliably (at least I wouldn't know how). - Fixed os.pipe() so that it returns file descriptors acceptable to os.read() and os.write() (like it does on Unix), rather than Windows file handles. - Added a table of WSA error codes to socket.py. - In the select module, put the (huge) file descriptor arrays on the heap. - The getpass module now raises KeyboardInterrupt when it sees ^C. - In mailbox.py, fix tell/seek when using files opened in text mode. - In rfc822.py, fix tell/seek when using files opened in text mode. - In the msvcrt extension module, release the interpreter lock for calls that may block: _locking(), _getch(), _getche(). Also fix a bogus error return when open_osfhandle() doesn't have the right argument list. Windows Installer ----------------- - The registry key used is now "1.5" instead of "1.5.x" -- so future versions of 1.5 and Mark Hammond's win32all installer don't need to be resynchronized. Windows Tools ------------- - Several improvements to freeze specifically for Windows. Windows Build Procedure ----------------------- - The VC++ project files and the WISE installer have been moved to the PCbuild subdirectory, so they are distributed in the same subdirectory where they must be used. This avoids confusion. - New project files for Windows 3.1 port by Jim Ahlstrom. - Got rid of the obsolete subdirectory PC/setup_nt/. - The projects now use distinct filenames for the .exe, .dll, .lib and .pyd files built in debug mode (by appending "_d" to the base name, before the extension). This makes it easier to switch between the two and get the right versions. There's a pragma in config.h that directs the linker to include the appropriate .lib file (so python15.lib no longer needs to be explicit in your project). - The installer now installs more files (e.g. config.h). The idea is that you shouldn't need the source distribution if you want build your own extensions in C or C++. Tools and Demos --------------- - New script nm2def.py by Marc-Andre Lemburg, to construct PC/python_nt.def automatically (some hand editing still required). - New tool ndiff.py: Tim Peters' text diffing tool. - Various and sundry improvements to the freeze script. - The script texi2html.py (which was part of the Doc tree but is no longer used there) has been moved to the Tools/scripts subdirectory. - Some generalizations in the webchecker code. There's now a primnitive gui for websucker.py: wsgui.py. (In Tools/webchecker/.) - The ftpmirror.py script now handles symbolic links properly, and also files with multiple spaces in their names. - The 1.5.1 tabnanny.py suffers an assert error if fed a script whose last line is both indented and lacks a newline. This is now fixed. Python/C API ------------ - Added missing prototypes for PyEval_CallFunction() and PyEval_CallMethod(). - New macro PyList_SET_ITEM(). - New macros to access object members for PyFunction, PyCFunction objects. - New APIs PyImport_AppendInittab() and PyImport_ExtendInittab() to dynamically add one or many entries to the table of built-in modules. - New macro Py_InitModule3(name, methods, doc) which calls Py_InitModule4() with appropriate arguments. (The -4 variant requires you to pass an obscure version number constant which is always the same.) - New APIs PySys_WriteStdout() and PySys_WriteStderr() to write to sys.stdout or sys.stderr using a printf-like interface. (Used in _tkinter.c, for example.) - New APIs for conversion between Python longs and C 'long long' if your compiler supports it. - PySequence_In() is now called PySequence_Contains(). (PySequence_In() is still supported for b/w compatibility; it is declared obsolete because its argument order is confusing.) - PyDict_GetItem() and PyDict_GetItemString() are changed so that they *never* raise an exception -- (even if the hash() fails, simply clear the error). This was necessary because there is lots of code out there that already assumes this. - Changes to PySequence_Tuple() and PySequence_List() to use the length of a sequence only as a hint -- if an IndexError happens earlier, take that. (Formerly, this was considered an error.) - Reformatted abstract.c to give it a more familiar "look" and fixed many error checking bugs. - Add NULL pointer checks to all calls of a C function through a type object and extensions (e.g. nb_add). - The code that initializes sys.path now calls Py_GetPythonHome() instead of getenv("PYTHONHOME"). This, together with the new API Py_SetPythonHome(), makes it easier for embedding applications to change the notion of Python's "home" directory (where the libraries etc. are sought). - Fixed a very old bug in the parsing of "O?" format specifiers. ====================================================================== ======================================== ==> Release 1.5.1 (October 31, 1998) <== ======================================== From 1.5 to 1.5.1 ================= General ------- - The documentation is now unbundled. It has also been extensively modified (mostly to implement a new and more uniform formatting style). We figure that most people will prefer to download one of the preformatted documentation sets (HTML, PostScript or PDF) and that only a minority have a need for the LaTeX or FrameMaker sources. Of course, the unbundled documentation sources still released -- just not in the same archive file, and perhaps not on the same date. - All bugs noted on the errors page (and many unnoted) are fixed. All new bugs take their places. - No longer a core dump when attempting to print (or repr(), or str()) a list or dictionary that contains an instance of itself; instead, the recursive entry is printed as [...] or {...}. See Py_ReprEnter() and Py_ReprLeave() below. Comparisons of such objects still go beserk, since this requires a different kind of fix; fortunately, this is a less common scenario in practice. Syntax change ------------- - The raise statement can now be used without arguments, to re-raise a previously set exception. This should be used after catching an exception with an except clause only, either in the except clause or later in the same function. Import and module handling -------------------------- - The implementation of import has changed to use a mutex (when threading is supported). This means that when two threads simultaneously import the same module, the import statements are serialized. Recursive imports are not affected. - Rewrote the finalization code almost completely, to be much more careful with the order in which modules are destroyed. Destructors will now generally be able to reference built-in names such as None without trouble. - Case-insensitive platforms such as Mac and Windows require the case of a module's filename to match the case of the module name as specified in the import statement (see below). - The code for figuring out the default path now distinguishes between files, modules, executable files, and directories. When expecting a module, we also look for the .pyc or .pyo file. Parser/tokenizer changes ------------------------ - The tokenizer can now warn you when your source code mixes tabs and spaces for indentation in a manner that depends on how much a tab is worth in spaces. Use "python -t" or "python -v" to enable this option. Use "python -tt" to turn the warnings into errors. (See also tabnanny.py and tabpolice.py below.) - Return unsigned characters from tok_nextc(), so '\377' isn't mistaken for an EOF character. - Fixed two pernicious bugs in the tokenizer that only affected AIX. One was actually a general bug that was triggered by AIX's smaller I/O buffer size. The other was a bug in the AIX optimizer's loop unrolling code; swapping two statements made the problem go away. Tools, demos and miscellaneous files ------------------------------------ - There's a new version of Misc/python-mode.el (the Emacs mode for Python) which is much smarter about guessing the indentation style used in a particular file. Lots of other cool features too! - There are two new tools in Tools/scripts: tabnanny.py and tabpolice.py, implementing two different ways of checking whether a file uses indentation in a way that is sensitive to the interpretation of a tab. The preferred module is tabnanny.py (by Tim Peters). - Some new demo programs: Demo/tkinter/guido/paint.py -- Dave Mitchell Demo/sockets/unixserver.py -- Piet van Oostrum - Much better freeze support. The freeze script can now freeze hierarchical module names (with a corresponding change to import.c), and has a few extra options (e.g. to suppress freezing specific modules). It also does much more on Windows NT. - Version 1.0 of the faq wizard is included (only very small changes since version 0.9.0). - New feature for the ftpmirror script: when removing local files (i.e., only when -r is used), do a recursive delete. Configuring and building Python ------------------------------- - Get rid of the check for -linet -- recent Sequent Dynix systems don't need this any more and apparently it screws up their configuration. - Some changes because gcc on SGI doesn't support '-all'. - Changed the build rules to use $(LIBRARY) instead of -L.. -lpython$(VERSION) since the latter trips up the SunOS 4.1.x linker (sigh). - Fix the bug where the '# dgux is broken' comment in the Makefile tripped over Make on some platforms. - Changes for AIX: install the python.exp file; properly use $(srcdir); the makexp_aix script now removes C++ entries of the form Class::method. - Deleted some Makefile targets only used by the (long obsolete) gMakefile hacks. Extension modules ----------------- - Performance and threading improvements to the socket and bsddb modules, by Christopher Lindblad of Infoseek. - Added operator.__not__ and operator.not_. - In the thread module, when a thread exits due to an unhandled exception, don't store the exception information in sys.last_*; it prevents proper calling of destructors of local variables. - Fixed a number of small bugs in the cPickle module. - Changed find() and rfind() in the strop module so that find("x","",2) returns -1, matching the implementation in string.py. - In the time module, be more careful with the result of ctime(), and test for HAVE_MKTIME before usinmg mktime(). - Doc strings contributed by Mitch Chapman to the termios, pwd, gdbm modules. - Added the LOG_SYSLOG constant to the syslog module, if defined. Standard library modules ------------------------ - All standard library modules have been converted to an indentation style using either only tabs or only spaces -- never a mixture -- if they weren't already consistent according to tabnanny. This means that the new -t option (see above) won't complain about standard library modules. - New standard library modules: threading -- GvR and the thread-sig Java style thread objects -- USE THIS!!! getpass -- Piers Lauder simple utilities to prompt for a password and to retrieve the current username imaplib -- Piers Lauder interface for the IMAP4 protocol poplib -- David Ascher, Piers Lauder interface for the POP3 protocol smtplib -- Dragon De Monsyne interface for the SMTP protocol - Some obsolete modules moved to a separate directory (Lib/lib-old) which is *not* in the default module search path: Para addpack codehack fmt lockfile newdir ni rand tb - New version of the PCRE code (Perl Compatible Regular Expressions -- the re module and the supporting pcre extension) by Andrew Kuchling. Incompatible new feature in re.sub(): the handling of escapes in the replacement string has changed. - Interface change in the copy module: a __deepcopy__ method is now called with the memo dictionary as an argument. - Feature change in the tokenize module: differentiate between NEWLINE token (an official newline) and NL token (a newline that the grammar ignores). - Several bugfixes to the urllib module. It is now truly thread-safe, and several bugs and a portability problem have been fixed. New features, all due to Sjoerd Mullender: When creating a temporary file, it gives it an appropriate suffix. Support the "data:" URL scheme. The open() method uses the tempcache. - New version of the xmllib module (this time with a test suite!) by Sjoerd Mullender. - Added debugging code to the telnetlib module, to be able to trace the actual traffic. - In the rfc822 module, added support for deleting a header (still no support for adding headers, though). Also fixed a bug where an illegal address would cause a crash in getrouteaddr(), fixed a sign reversal in mktime_tz(), and use the local timezone by default (the latter two due to Bill van Melle). - The normpath() function in the dospath and ntpath modules no longer does case normalization -- for that, use the separate function normcase() (which always existed); normcase() has been sped up and fixed (it was the cause of a crash in Mark Hammond's installer in certain locales). - New command supported by the ftplib module: rmd(); also fixed some minor bugs. - The profile module now uses a different timer function by default -- time.clock() is generally better than os.times(). This makes it work better on Windows NT, too. - The tempfile module now recovers when os.getcwd() raises an exception. - Fixed some bugs in the random module; gauss() was subtly wrong, and vonmisesvariate() should return a full circle. Courtesy Mike Miller, Lambert Meertens (gauss()), and Magnus Kessler (vonmisesvariate()). - Better default seed in the whrandom module, courtesy Andrew Kuchling. - Fix slow close() in shelve module. - The Unix mailbox class in the mailbox module is now more robust when a line begins with the string "From " but is definitely not the start of a new message. The pattern used can be changed by overriding a method or class variable. - Added a rmtree() function to the copy module. - Fixed several typos in the pickle module. Also fixed problems when unpickling in restricted execution environments. - Added docstrings and fixed a typo in the py_compile and compileall modules. At Mark Hammond's repeated request, py_compile now append a newline to the source if it needs one. Both modules support an extra parameter to specify the purported source filename (to be used in error messages). - Some performance tweaks by Jeremy Hylton to the gzip module. - Fixed a bug in the merge order of dictionaries in the ConfigParser module. Courtesy Barry Warsaw. - In the multifile module, support the optional second parameter to seek() when possible. - Several fixes to the gopherlib module by Lars Marius Garshol. Also, urlparse now correctly handles Gopher URLs with query strings. - Fixed a tiny bug in format_exception() in the traceback module. Also rewrite tb_lineno() to be compatible with JPython (and not disturb the current exception!); by Jim Hugunin. - The httplib module is more robust when servers send a short response -- courtesy Tim O'Malley. Tkinter and friends ------------------- - Various typos and bugs fixed. - New module Tkdnd implements a drag-and-drop protocol (within one application only). - The event_*() widget methods have been restructured slightly -- they no longer use the default root. - The interfaces for the bind*() and unbind() widget methods have been redesigned; the bind*() methods now return the name of the Tcl command created for the callback, and this can be passed as an optional argument to unbind() in order to delete the command (normally, such commands are automatically unbound when the widget is destroyed, but for some applications this isn't enough). - Variable objects now have trace methods to interface to Tcl's variable tracing facilities. - Image objects now have an optional keyword argument, 'master', to specify a widget (tree) to which they belong. The image_names() and image_types() calls are now also widget methods. - There's a new global call, Tkinter.NoDefaultRoot(), which disables all use of the default root by the Tkinter library. This is useful to debug applications that are in the process of being converted from relying on the default root to explicit specification of the root widget. - The 'exit' command is deleted from the Tcl interpreter, since it provided a loophole by which one could (accidentally) exit the Python interpreter without invoking any cleanup code. - Tcl_Finalize() is now registered as a Python low-level exit handle, so Tcl will be finalized when Python exits. The Python/C API ---------------- - New function PyThreadState_GetDict() returns a per-thread dictionary intended for storing thread-local global variables. - New functions Py_ReprEnter() and Py_ReprLeave() use the per-thread dictionary to allow recursive container types to detect recursion in their repr(), str() and print implementations. - New function PyObject_Not(x) calculates (not x) according to Python's standard rules (basically, it negates the outcome PyObject_IsTrue(x). - New function _PyModule_Clear(), which clears a module's dictionary carefully without removing the __builtins__ entry. This is implied when a module object is deallocated (this used to clear the dictionary completely). - New function PyImport_ExecCodeModuleEx(), which extends PyImport_ExecCodeModule() by adding an extra parameter to pass it the true file. - New functions Py_GetPythonHome() and Py_SetPythonHome(), intended to allow embedded applications to force a different value for PYTHONHOME. - New global flag Py_FrozenFlag is set when this is a "frozen" Python binary; it suppresses warnings about not being able to find the standard library directories. - New global flag Py_TabcheckFlag is incremented by the -t option and causes the tokenizer to issue warnings or errors about inconsistent mixing of tabs and spaces for indentation. Miscellaneous minor changes and bug fixes ----------------------------------------- - Improved the error message when an attribute of an attribute-less object is requested -- include the name of the attribute and the type of the object in the message. - Sped up int(), long(), float() a bit. - Fixed a bug in list.sort() that would occasionally dump core. - Fixed a bug in PyNumber_Power() that caused numeric arrays to fail when taken tothe real power. - Fixed a number of bugs in the file reading code, at least one of which could cause a core dump on NT, and one of which would occasionally cause file.read() to return less than the full contents of the file. - Performance hack by Vladimir Marangozov for stack frame creation. - Make sure setvbuf() isn't used unless HAVE_SETVBUF is defined. Windows 95/NT ------------- - The .lib files are now part of the distribution; they are collected in the subdirectory "libs" of the installation directory. - The extension modules (.pyd files) are now collected in a separate subdirectory of the installation directory named "DLLs". - The case of a module's filename must now match the case of the module name as specified in the import statement. This is an experimental feature -- if it turns out to break in too many situations, it will be removed (or disabled by default) in the future. It can be disabled on a per-case basis by setting the environment variable PYTHONCASEOK (to any value). ====================================================================== ===================================== ==> Release 1.5 (January 3, 1998) <== ===================================== From 1.5b2 to 1.5 ================= - Newly documentated module: BaseHTTPServer.py, thanks to Greg Stein. - Added doc strings to string.py, stropmodule.c, structmodule.c, thanks to Charles Waldman. - Many nits fixed in the manuals, thanks to Fred Drake and many others (especially Rob Hooft and Andrew Kuchling). The HTML version now uses HTML markup instead of inline GIF images for tables; only two images are left (for obsure bits of math). The index of the HTML version has also been much improved. Finally, it is once again possible to generate an Emacs info file from the library manual (but I don't commit to supporting this in future versions). - New module: telnetlib.py (a simple telnet client library). - New tool: Tools/versioncheck/, by Jack Jansen. - Ported zlibmodule.c and bsddbmodule.c to NT; The project file for MS DevStudio 5.0 now includes new subprojects to build the zlib and bsddb extension modules. - Many small changes again to Tkinter.py -- mostly bugfixes and adding missing routines. Thanks to Greg McFarlane for reporting a bunch of problems and proofreading my fixes. - The re module and its documentation are up to date with the latest version released to the string-sig (Dec. 22). - Stop test_grp.py from failing when the /etc/group file is empty (yes, this happens!). - Fix bug in integer conversion (mystrtoul.c) that caused 4294967296==0 to be true! - The VC++ 4.2 project file should be complete again. - In tempfile.py, use a better template on NT, and add a new optional argument "suffix" with default "" to specify a specific extension for the temporary filename (needed sometimes on NT but perhaps also handy elsewhere). - Fixed some bugs in the FAQ wizard, and converted it to use re instead of regex. - Fixed a mysteriously undetected error in dlmodule.c (it was using a totally bogus routine name to raise an exception). - Fixed bug in import.c which wasn't using the new "dos-8x3" name yet. - Hopefully harmless changes to the build process to support shared libraries on DG/UX. This adds a target to create libpython$(VERSION).so; however this target is *only* for DG/UX. - Fixed a bug in the new format string error checking in getargs.c. - A simple fix for infinite recursion when printing __builtins__: reset '_' to None before printing and set it to the printed variable *after* printing (and only when printing is successful). - Fixed lib-tk/SimpleDialog.py to keep the dialog visible even if the parent window is not (Skip Montanaro). - Fixed the two most annoying problems with ftp URLs in urllib.urlopen(); an empty file now correctly raises an error, and it is no longer required to explicitly close the returned "file" object before opening another ftp URL to the same host and directory. ====================================================================== From 1.5b1 to 1.5b2 =================== - Fixed a bug in cPickle.c that caused it to crash right away because the version string had a different format. - Changes in pickle.py and cPickle.c: when unpickling an instance of a class that doesn't define the __getinitargs__() method, the __init__() constructor is no longer called. This makes a much larger group of classes picklable by default, but may occasionally change semantics. To force calling __init__() on unpickling, define a __getinitargs__() method. Other changes too, in particular cPickle now handles classes defined in packages correctly. The same change applies to copying instances with copy.py. The cPickle.c changes and some pickle.py changes are courtesy Jim Fulton. - Locale support in he "re" (Perl regular expressions) module. Use the flag re.L (or re.LOCALE) to enable locale-specific matching rules for \w and \b. The in-line syntax for this flag is (?L). - The built-in function isinstance(x, y) now also succeeds when y is a type object and type(x) is y. - repr() and str() of class and instance objects now reflect the package/module in which the class is defined. - Module "ni" has been removed. (If you really need it, it's been renamed to "ni1". Let me know if this causes any problems for you. Package authors are encouraged to write __init__.py files that support both ni and 1.5 package support, so the same version can be used with Python 1.4 as well as 1.5.) - The thread module is now automatically included when threads are configured. (You must remove it from your existing Setup file, since it is now in its own Setup.thread file.) - New command line option "-x" to skip the first line of the script; handy to make executable scripts on non-Unix platforms. - In importdl.c, add the RTLD_GLOBAL to the dlopen() flags. I haven't checked how this affects things, but it should make symbols in one shared library available to the next one. - The Windows installer now installs in the "Program Files" folder on the proper volume by default. - The Windows configuration adds a new main program, "pythonw", and registers a new extension, ".pyw" that invokes this. This is a pstandard Python interpreter that does not pop up a console window; handy for pure Tkinter applications. All output to the original stdout and stderr is lost; reading from the original stdin yields EOF. Also, both python.exe and pythonw.exe now have a pretty icon (a green snake in a box, courtesy Mark Hammond). - Lots of improvements to emacs-mode.el again. See Barry's web page: http://www.python.org/ftp/emacs/pmdetails.html. - Lots of improvements and additions to the library reference manual; many by Fred Drake. - Doc strings for the following modules: rfc822.py, posixpath.py, ntpath.py, httplib.py. Thanks to Mitch Chapman and Charles Waldman. - Some more regression testing. - An optional 4th (maxsplit) argument to strop.replace(). - Fixed handling of maxsplit in string.splitfields(). - Tweaked os.environ so it can be pickled and copied. - The portability problems caused by indented preprocessor commands and C++ style comments should be gone now. - In random.py, added Pareto and Weibull distributions. - The crypt module is now disabled in Modules/Setup.in by default; it is rarely needed and causes errors on some systems where users often don't know how to deal with those. - Some improvements to the _tkinter build line suggested by Case Roole. - A full suite of platform specific files for NetBSD 1.x, submitted by Anders Andersen. - New Solaris specific header STROPTS.py. - Moved a confusing occurrence of *shared* from the comments in Modules/Setup.in (people would enable this one instead of the real one, and get disappointing results). - Changed the default mode for directories to be group-writable when the installation process creates them. - Check for pthread support in "-l_r" for FreeBSD/NetBSD, and support shared libraries for both. - Support FreeBSD and NetBSD in posixfile.py. - Support for the "event" command, new in Tk 4.2. By Case Roole. - Add Tix_SafeInit() support to tkappinit.c. - Various bugs fixed in "re.py" and "pcre.c". - Fixed a bug (broken use of the syntax table) in the old "regexpr.c". - In frozenmain.c, stdin is made unbuffered too when PYTHONUNBUFFERED is set. - Provide default blocksize for retrbinary in ftplib.py (Skip Montanaro). - In NT, pick the username up from different places in user.py (Jeff Bauer). - Patch to urlparse.urljoin() for ".." and "..#1", Marc Lemburg. - Many small improvements to Jeff Rush' OS/2 support. - ospath.py is gone; it's been obsolete for so many years now... - The reference manual is now set up to prepare better HTML (still using webmaker, alas). - Add special handling to /Tools/freeze for Python modules that are imported implicitly by the Python runtime: 'site' and 'exceptions'. - Tools/faqwiz 0.8.3 -- add an option to suppress URL processing inside <PRE>, by "Scott". - Added ConfigParser.py, a generic parser for sectioned configuration files. - In _localemodule.c, LC_MESSAGES is not always defined; put it between #ifdefs. - Typo in resource.c: RUSAGE_CHILDERN -> RUSAGE_CHILDREN. - Demo/scripts/newslist.py: Fix the way the version number is gotten out of the RCS revision. - PyArg_Parse[Tuple] now explicitly check for bad characters at the end of the format string. - Revamped PC/example_nt to support VC++ 5.x. - <listobject>.sort() now uses a modified quicksort by Raymund Galvin, after studying the GNU libg++ quicksort. This should be much faster if there are lots of duplicates, and otherwise at least as good. - Added "uue" as an alias for "uuencode" to mimetools.py. (Hm, the uudecode bug where it complaints about trailing garbage is still there :-( ). - pickle.py requires integers in text mode to be in decimal notation (it used to accept octal and hex, even though it would only generate decimal numbers). - In string.atof(), don't fail when the "re" module is unavailable. Plug the ensuing security leak by supplying an empty __builtins__ directory to eval(). - A bunch of small fixes and improvements to Tkinter.py. - Fixed a buffer overrun in PC/getpathp.c. ====================================================================== From 1.5a4 to 1.5b1 =================== - The Windows NT/95 installer now includes full HTML of all manuals. It also has a checkbox that lets you decide whether to install the interpreter and library. The WISE installer script for the installer is included in the source tree as PC/python15.wse, and so are the icons used for Python files. The config.c file for the Windows build is now complete with the pcre module. - sys.ps1 and sys.ps2 can now arbitrary objects; their str() is evaluated for the prompt. - The reference manual is brought up to date (more or less -- it still needs work, e.g. in the area of package import). - The icons used by latex2html are now included in the Doc subdirectory (mostly so that tarring up the HTML files can be fully automated). A simple index.html is also added to Doc (it only works after you have successfully run latex2html). - For all you would-be proselytizers out there: a new version of Misc/BLURB describes Python more concisely, and Misc/comparisons compares Python to several other languages. Misc/BLURB.WINDOWS contains a blurb specifically aimed at Windows programmers (by Mark Hammond). - A new version of the Python mode for Emacs is included as Misc/python-mode.el. There are too many new features to list here. See http://www.python.org/ftp/emacs/pmdetails.html for more info. - New module fileinput makes iterating over the lines of a list of files easier. (This still needs some more thinking to make it more extensible.) - There's full OS/2 support, courtesy Jeff Rush. To build the OS/2 version, see PC/readme.txt and PC/os2vacpp. This is for IBM's Visual Age C++ compiler. I expect that Jeff will also provide a binary release for this platform. - On Linux, the configure script now uses '-Xlinker -export-dynamic' instead of '-rdynamic' to link the main program so that it exports its symbols to shared libraries it loads dynamically. I hope this doesn't break on older Linux versions; it is needed for mklinux and appears to work on Linux 2.0.30. - Some Tkinter resstructuring: the geometry methods that apply to a master are now properly usable on toplevel master widgets. There's a new (internal) widget class, BaseWidget. New, longer "official" names for the geometry manager methods have been added, e.g. "grid_columnconfigure()" instead of "columnconfigure()". The old shorter names still work, and where there's ambiguity, pack wins over place wins over grid. Also, the bind_class method now returns its value. - New, RFC-822 conformant parsing of email addresses and address lists in the rfc822 module, courtesy Ben Escoto. - New, revamped tkappinit.c with support for popular packages (PIL, TIX, BLT, TOGL). For the last three, you need to execute the Tcl command "load {} Tix" (or Blt, or Togl) to gain access to them. The Modules/Setup line for the _tkinter module has been rewritten using the cool line-breaking feature of most Bourne shells. - New socket method connect_ex() returns the error code from connect() instead of raising an exception on errors; this makes the logic required for asynchronous connects simpler and more efficient. - New "locale" module with (still experimental) interface to the standard C library locale interface, courtesy Martin von Löwis. This does not repeat my mistake in 1.5a4 of always calling setlocale(LC_ALL, ""). In fact, we've pretty much decided that Python's standard numerical formatting operations should always use the conventions for the C locale; the locale module contains utility functions to format numbers according to the user specified locale. (All this is accomplished by an explicit call to setlocale(LC_NUMERIC, "C") after locale-changing calls.) See the library manual. (Alas, the promised changes to the "re" module for locale support have not been materialized yet. If you care, volunteer!) - Memory leak plugged in Py_BuildValue when building a dictionary. - Shared modules can now live inside packages (hierarchical module namespaces). No changes to the shared module itself are needed. - Improved policy for __builtins__: this is a module in __main__ and a dictionary everywhere else. - Python no longer catches SIGHUP and SIGTERM by default. This was impossible to get right in the light of thread contexts. If you want your program to clean up when a signal happens, use the signal module to set up your own signal handler. - New Python/C API PyNumber_CoerceEx() does not return an exception when no coercion is possible. This is used to fix a problem where comparing incompatible numbers for equality would raise an exception rather than return false as in Python 1.4 -- it once again will return false. - The errno module is changed again -- the table of error messages (errorstr) is removed. Instead, you can use os.strerror(). This removes redundance and a potential locale dependency. - New module xmllib, to parse XML files. By Sjoerd Mullender. - New C API PyOS_AfterFork() is called after fork() in posixmodule.c. It resets the signal module's notion of what the current process ID and thread are, so that signal handlers will work after (and across) calls to os.fork(). - Fixed most occurrences of fatal errors due to missing thread state. - For vgrind (a flexible source pretty printer) fans, there's a simple Python definition in Misc/vgrindefs, courtesy Neale Pickett. - Fixed memory leak in exec statement. - The test.pystone module has a new function, pystones(loops=LOOPS), which returns a (benchtime, stones) tuple. The main() function now calls this and prints the report. - Package directories now *require* the presence of an __init__.py (or __init__.pyc) file before they are considered as packages. This is done to prevent accidental subdirectories with common names from overriding modules with the same name. - Fixed some strange exceptions in __del__ methods in library modules (e.g. urllib). This happens because the built-in names are already deleted by the time __del__ is called. The solution (a hack, but it works) is to set some instance variables to 0 instead of None. - The table of built-in module initializers is replaced by a pointer variable. This makes it possible to switch to a different table at run time, e.g. when a collection of modules is loaded from a shared library. (No example code of how to do this is given, but it is possible.) The table is still there of course, its name prefixed with an underscore and used to initialize the pointer. - The warning about a thread still having a frame now only happens in verbose mode. - Change the signal finalization so that it also resets the signal handlers. After this has been called, our signal handlers are no longer active! - New version of tokenize.py (by Ka-Ping Yee) recognizes raw string literals. There's now also a test fort this module. - The copy module now also uses __dict__.update(state) instead of going through individual attribute assignments, for class instances without a __setstate__ method. - New module reconvert translates old-style (regex module) regular expressions to new-style (re module, Perl-style) regular expressions. - Most modules that used to use the regex module now use the re module. The grep module has a new pgrep() function which uses Perl-style regular expressions. - The (very old, backwards compatibility) regexp.py module has been deleted. - Restricted execution (rexec): added the pcre module (support for the re module) to the list of trusted extension modules. - New version of Jim Fulton's CObject object type, adds PyCObject_FromVoidPtrAndDesc() and PyCObject_GetDesc() APIs. - Some patches to Lee Busby's fpectl mods that accidentally didn't make it into 1.5a4. - In the string module, add an optional 4th argument to count(), matching find() etc. - Patch for the nntplib module by Charles Waldman to add optional user and password arguments to NNTP.__init__(), for nntp servers that need them. - The str() function for class objects now returns "modulename.classname" instead of returning the same as repr(). - The parsing of \xXX escapes no longer relies on sscanf(). - The "sharedmodules" subdirectory of the installation is renamed to "lib-dynload". (You may have to edit your Modules/Setup file to fix this in an existing installation!) - Fixed Don Beaudry's mess-up with the OPT test in the configure script. Certain SGI platforms will still issue a warning for each compile; there's not much I can do about this since the compiler's exit status doesn't indicate that I was using an obsolete option. - Fixed Barry's mess-up with {}.get(), and added test cases for it. - Shared libraries didn't quite work under AIX because of the change in status of the GNU readline interface. Fix due to by Vladimir Marangozov. ====================================================================== From 1.5a3 to 1.5a4 =================== - faqwiz.py: version 0.8; Recognize https:// as URL; <html>...</html> feature; better install instructions; removed faqmain.py (which was an older version). - nntplib.py: Fixed some bugs reported by Lars Wirzenius (to Debian) about the treatment of lines starting with '.'. Added a minimal test function. - struct module: ignore most whitespace in format strings. - urllib.py: close the socket and temp file in URLopener.retrieve() so that multiple retrievals using the same connection work. - All standard exceptions are now classes by default; use -X to make them strings (for backward compatibility only). - There's a new standard exception hierarchy, defined in the standard library module exceptions.py (which you never need to import explicitly). See http://grail.cnri.reston.va.us/python/essays/stdexceptions.html for more info. - Three new C API functions: - int PyErr_GivenExceptionMatches(obj1, obj2) Returns 1 if obj1 and obj2 are the same object, or if obj1 is an instance of type obj2, or of a class derived from obj2 - int PyErr_ExceptionMatches(obj) Higher level wrapper around PyErr_GivenExceptionMatches() which uses PyErr_Occurred() as obj1. This will be the more commonly called function. - void PyErr_NormalizeException(typeptr, valptr, tbptr) Normalizes exceptions, and places the normalized values in the arguments. If type is not a class, this does nothing. If type is a class, then it makes sure that value is an instance of the class by: 1. if instance is of the type, or a class derived from type, it does nothing. 2. otherwise it instantiates the class, using the value as an argument. If value is None, it uses an empty arg tuple, and if the value is a tuple, it uses just that. - Another new C API function: PyErr_NewException() creates a new exception class derived from Exception; when -X is given, it creates a new string exception. - core interpreter: remove the distinction between tuple and list unpacking; allow an arbitrary sequence on the right hand side of any unpack instruction. (UNPACK_LIST and UNPACK_TUPLE now do the same thing, which should really be called UNPACK_SEQUENCE.) - classes: Allow assignments to an instance's __dict__ or __class__, so you can change ivars (including shared ivars -- shock horror) and change classes dynamically. Also make the check on read-only attributes of classes less draconic -- only the specials names __dict__, __bases__, __name__ and __{get,set,del}attr__ can't be assigned. - Two new built-in functions: issubclass() and isinstance(). Both take classes as their second arguments. The former takes a class as the first argument and returns true iff first is second, or is a subclass of second. The latter takes any object as the first argument and returns true iff first is an instance of the second, or any subclass of second. - configure: Added configuration tests for presence of alarm(), pause(), and getpwent(). - Doc/Makefile: changed latex2html targets. - classes: Reverse the search order for the Don Beaudry hook so that the first class with an applicable hook wins. Makes more sense. - Changed the checks made in Py_Initialize() and Py_Finalize(). It is now legal to call these more than once. The first call to Py_Initialize() initializes, the first call to Py_Finalize() finalizes. There's also a new API, Py_IsInitialized() which checks whether we are already initialized (in case you want to leave things as they were). - Completely disable the declarations for malloc(), realloc() and free(). Any 90's C compiler has these in header files, and the tests to decide whether to suppress the declarations kept failing on some platforms. - *Before* (instead of after) signalmodule.o is added, remove both intrcheck.o and sigcheck.o. This should get rid of warnings in ar or ld on various systems. - Added reop to PC/config.c - configure: Decided to use -Aa -D_HPUX_SOURCE on HP-UX platforms. Removed outdated HP-UX comments from README. Added Cray T3E comments. - Various renames of statically defined functions that had name conflicts on some systems, e.g. strndup (GNU libc), join (Cray), roundup (sys/types.h). - urllib.py: Interpret three slashes in file: URL as local file (for Netscape on Windows/Mac). - copy.py: Make sure the objects returned by __getinitargs__() are kept alive (in the memo) to avoid a certain kind of nasty crash. (Not easily reproducible because it requires a later call to __getinitargs__() to return a tuple that happens to be allocated at the same address.) - Added definition of AR to toplevel Makefile. Renamed @buildno temp file to buildno1. - Moved Include/assert.h to Parser/assert.h, which seems to be the only place where it's needed. - Tweaked the dictionary lookup code again for some more speed (Vladimir Marangozov). - NT build: Changed the way python15.lib is included in the other projects. Per Mark Hammond's suggestion, add it to the extra libs in Settings instead of to the project's source files. - regrtest.py: Change default verbosity so that there are only three levels left: -q, default and -v. In default mode, the name of each test is now printed. -v is the same as the old -vv. -q is more quiet than the old default mode. - Removed the old FAQ from the distribution. You now have to get it from the web! - Removed the PC/make_nt.in file from the distribution; it is no longer needed. - Changed the build sequence so that shared modules are built last. This fixes things for AIX and doesn't hurt elsewhere. - Improved test for GNU MP v1 in mpzmodule.c - fileobject.c: ftell() on Linux discards all buffered data; changed read() code to use lseek() instead to get the same effect - configure.in, configure, importdl.c: NeXT sharedlib fixes - tupleobject.c: PyTuple_SetItem asserts refcnt==1 - resource.c: Different strategy regarding whether to declare getrusage() and getpagesize() -- #ifdef doesn't work, Linux has conflicting decls in its headers. Choice: only declare the return type, not the argument prototype, and not on Linux. - importdl.c, configure*: set sharedlib extensions properly for NeXT - configure*, Makefile.in, Modules/Makefile.pre.in: AIX shared libraries fixed; moved addition of PURIFY to LINKCC to configure - reopmodule.c, regexmodule.c, regexpr.c, zlibmodule.c: needed casts added to shup up various compilers. - _tkinter.c: removed buggy mac #ifndef - Doc: various Mac documentation changes, added docs for 'ic' module - PC/make_nt.in: deleted - test_time.py, test_strftime.py: tweaks to catch %Z (which may return "") - test_rotor.py: print b -> print `b` - Tkinter.py: (tagOrId) -> (tagOrId,) - Tkinter.py: the Tk class now also has a configure() method and friends (they have been moved to the Misc class to accomplish this). - dict.get(key[, default]) returns dict[key] if it exists, or default if it doesn't. The default defaults to None. This is quicker for some applications than using either has_key() or try:...except KeyError:.... - Tools/webchecker/: some small changes to webchecker.py; added websucker.py (a simple web site mirroring script). - Dictionary objects now have a get() method (also in UserDict.py). dict.get(key, default) returns dict[key] if it exists and default otherwise; default defaults to None. - Tools/scripts/logmerge.py: print the author, too. - Changes to import: support for "import a.b.c" is now built in. See http://grail.cnri.reston.va.us/python/essays/packages.html for more info. Most important deviations from "ni.py": __init__.py is executed in the package's namespace instead of as a submodule; and there's no support for "__" or "__domain__". Note that "ni.py" is not changed to match this -- it is simply declared obsolete (while at the same time, it is documented...:-( ). Unfortunately, "ihooks.py" has not been upgraded (but see "knee.py" for an example implementation of hierarchical module import written in Python). - More changes to import: the site.py module is now imported by default when Python is initialized; use -S to disable it. The site.py module extends the path with several more directories: site-packages inside the lib/python1.5/ directory, site-python in the lib/ directory, and pathnames mentioned in *.pth files found in either of those directories. See http://grail.cnri.reston.va.us/python/essays/packages.html for more info. - Changes to standard library subdirectory names: those subdirectories that are not packages have been renamed with a hypen in their name, e.g. lib-tk, lib-stdwin, plat-win, plat-linux2, plat-sunos5, dos-8x3. The test suite is now a package -- to run a test, you must now use "import test.test_foo". - A completely new re.py module is provided (thanks to Andrew Kuchling, Tim Peters and Jeffrey Ollie) which uses Philip Hazel's "pcre" re compiler and engine. For a while, the "old" re.py (which was new in 1.5a3!) will be kept around as re1.py. The "old" regex module and underlying parser and engine are still present -- while regex is now officially obsolete, it will probably take several major release cycles before it can be removed. - The posix module now has a strerror() function which translates an error code to a string. - The emacs.py module (which was long obsolete) has been removed. - The universal makefile Misc/Makefile.pre.in now features an "install" target. By default, installed shared libraries go into $exec_prefix/lib/python$VERSION/site-packages/. - The install-sh script is installed with the other configuration specific files (in the config/ subdirectory). - It turns out whatsound.py and sndhdr.py were identical modules. Since there's also an imghdr.py file, I propose to make sndhdr.py the official one. For compatibility, whatsound.py imports * from sndhdr.py. - Class objects have a new attribute, __module__, giving the name of the module in which they were declared. This is useful for pickle and for printing the full name of a class exception. - Many extension modules no longer issue a fatal error when their initialization fails; the importing code now checks whether an error occurred during module initialization, and correctly propagates the exception to the import statement. - Most extension modules now raise class-based exceptions (except when -X is used). - Subtle changes to PyEval_{Save,Restore}Thread(): always swap the thread state -- just don't manipulate the lock if it isn't there. - Fixed a bug in Python/getopt.c that made it do the wrong thing when an option was a single '-'. Thanks to Andrew Kuchling. - New module mimetypes.py will guess a MIME type from a filename's extension. - Windows: the DLL version is now settable via a resource rather than being hardcoded. This can be used for "branding" a binary Python distribution. - urllib.py is now threadsafe -- it now uses re instead of regex, and sys.exc_info() instead of sys.exc_{type,value}. - Many other library modules that used to use sys.exc_{type,value,traceback} are now more thread-safe by virtue of using sys.exc_info(). - The functions in popen2 have an optional buffer size parameter. Also, the command argument can now be either a string (passed to the shell) or a list of arguments (passed directly to execv). - Alas, the thread support for _tkinter released with 1.5a3 didn't work. It's been rewritten. The bad news is that it now requires a modified version of a file in the standard Tcl distribution, which you must compile with a -I option pointing to the standard Tcl source tree. For this reason, the thread support is disabled by default. - The errno extension module adds two tables: errorcode maps errno numbers to errno names (e.g. EINTR), and errorstr maps them to message strings. (The latter is redundant because the new call posix.strerror() now does the same, but alla...) (Marc-Andre Lemburg) - The readline extension module now provides some interfaces to internal readline routines that make it possible to write a completer in Python. An example completer, rlcompleter.py, is provided. When completing a simple identifier, it completes keywords, built-ins and globals in __main__; when completing NAME.NAME..., it evaluates (!) the expression up to the last dot and completes its attributes. It's very cool to do "import string" type "string.", hit the completion key (twice), and see the list of names defined by the string module! Tip: to use the tab key as the completion key, call readline.parse_and_bind("tab: complete") - The traceback.py module has a new function tb_lineno() by Marc-Andre Lemburg which extracts the line number from the linenumber table in the code object. Apparently the traceback object doesn't contain the right linenumber when -O is used. Rather than guessing whether -O is on or off, the module itself uses tb_lineno() unconditionally. - Fixed Demo/tkinter/matt/canvas-moving-or-creating.py: change bind() to tag_bind() so it works again. - The pystone script is now a standard library module. Example use: "import test.pystone; test.pystone.main()". - The import of the readline module in interactive mode is now also attempted when -i is specified. (Yes, I know, giving in to Marc-Andre Lemburg, who asked for this. :-) - rfc822.py: Entirely rewritten parseaddr() function by Sjoerd Mullender, to be closer to the standard. This fixes the getaddr() method. Unfortunately, getaddrlist() is as broken as ever, since it splits on commas without regard for RFC 822 quoting conventions. - pprint.py: correctly emit trailing "," in singleton tuples. - _tkinter.c: export names for its type objects, TkappType and TkttType. - pickle.py: use __module__ when defined; fix a particularly hard to reproduce bug that confuses the memo when temporary objects are returned by custom pickling interfaces; and a semantic change: when unpickling the instance variables of an instance, use inst.__dict__.update(value) instead of a for loop with setattr() over the value.keys(). This is more consistent (the pickling doesn't use getattr() either but pickles inst.__dict__) and avoids problems with instances that have a __setattr__ hook. But it *is* a semantic change (because the setattr hook is no longer used). So beware! - config.h is now installed (at last) in $exec_prefix/include/python1.5/. For most sites, this means that it is actually in $prefix/include/python1.5/, with all the other Python include files, since $prefix and $exec_prefix are the same by default. - The imp module now supports parts of the functionality to implement import of hierarchical module names. It now supports find_module() and load_module() for all types of modules. Docstrings have been added for those functions in the built-in imp module that are still relevant (some old interfaces are obsolete). For a sample implementation of hierarchical module import in Python, see the new library module knee.py. - The % operator on string objects now allows arbitrary nested parens in a %(...)X style format. (Brad Howes) - Reverse the order in which Setup and Setup.local are passed to the makesetup script. This allows variable definitions in Setup.local to override definitions in Setup. (But you'll still have to edit Setup if you want to disable modules that are enabled by default, or if such modules need non-standard options.) - Added PyImport_ImportModuleEx(name, globals, locals, fromlist); this is like PyImport_ImporModule(name) but receives the globals and locals dict and the fromlist arguments as well. (The name is a char*; the others are PyObject*s). - The 'p' format in the struct extension module alloded to above is new in 1.5a4. - The types.py module now uses try-except in a few places to make it more likely that it can be imported in restricted mode. Some type names are undefined in that case, e.g. CodeType (inaccessible), FileType (not always accessible), and TracebackType and FrameType (inaccessible). - In urllib.py: added separate administration of temporary files created y URLopener.retrieve() so cleanup() can properly remove them. The old code removed everything in tempcache which was a bad idea if the user had passed a non-temp file into it. Also, in basejoin(), interpret relative paths starting in "../". This is necessary if the server uses symbolic links. - The Windows build procedure and project files are now based on Microsoft Visual C++ 5.x. The build now takes place in the PCbuild directory. It is much more robust, and properly builds separate Debug and Release versions. (The installer will be added shortly.) - Added casts and changed some return types in regexpr.c to avoid compiler warnings or errors on some platforms. - The AIX build tools for shared libraries now supports VPATH. (Donn Cave) - By default, disable the "portable" multimedia modules audioop, imageop, and rgbimg, since they don't work on 64-bit platforms. - Fixed a nasty bug in cStringIO.c when code was actually using the close() method (the destructors would try to free certain fields a second time). - For those who think they need it, there's a "user.py" module. This is *not* imported by default, but can be imported to run user-specific setup commands, ~/.pythonrc.py. - Various speedups suggested by Fredrik Lundh, Marc-Andre Lemburg, Vladimir Marangozov, and others. - Added os.altsep; this is '/' on DOS/Windows, and None on systems with a sane filename syntax. - os.py: Write out the dynamic OS choice, to avoid exec statements. Adding support for a new OS is now a bit more work, but I bet that 'dos' or 'nt' will cover most situations... - The obsolete exception AccessError is now really gone. - Tools/faqwiz/: New installation instructions show how to maintain multiple FAQs. Removed bootstrap script from end of faqwiz.py module. Added instructions to bootstrap script, too. Version bumped to 0.8.1. Added <html>...</html> feature suggested by Skip Montanaro. Added leading text for Roulette, default to 'Hit Reload ...'. Fix typo in default SRCDIR. - Documentation for the relatively new modules "keyword" and "symbol" has been added (to the end of the section on the parser extension module). - In module bisect.py, but functions have two optional argument 'lo' and 'hi' which allow you to specify a subsequence of the array to operate on. - In ftplib.py, changed most methods to return their status (even when it is always "200 OK") rather than swallowing it. - main() now calls setlocale(LC_ALL, ""), if setlocale() and <locale.h> are defined. - Changes to configure.in, the configure script, and both Makefile.pre.in files, to support SGI's SGI_ABI platform selection environment variable. ====================================================================== From 1.4 to 1.5a3 ================= Security -------- - If you are using the setuid script C wrapper (Misc/setuid-prog.c), please use the new version. The old version has a huge security leak. Miscellaneous ------------- - Because of various (small) incompatible changes in the Python bytecode interpreter, the magic number for .pyc files has changed again. - The default module search path is now much saner. Both on Unix and Windows, it is essentially derived from the path to the executable (which can be overridden by setting the environment variable $PYTHONHOME). The value of $PYTHONPATH on Windows is now inserted in front of the default path, like in Unix (instead of overriding the default path). On Windows, the directory containing the executable is added to the end of the path. - A new version of python-mode.el for Emacs has been included. Also, a new file ccpy-style.el has been added to configure Emacs cc-mode for the preferred style in Python C sources. - On Unix, when using sys.argv[0] to insert the script directory in front of sys.path, expand a symbolic link. You can now install a program in a private directory and have a symbolic link to it in a public bin directory, and it will put the private directory in the module search path. Note that the symlink is expanded in sys.path[0] but not in sys.argv[0], so you can still tell the name by which you were invoked. - It is now recommended to use ``#!/usr/bin/env python'' instead of ``#!/usr/local/bin/python'' at the start of executable scripts, except for CGI scripts. It has been determined that the use of /usr/bin/env is more portable than that of /usr/local/bin/python -- scripts almost never have to be edited when the Python interpreter lives in a non-standard place. Note that this doesn't work for CGI scripts since the python executable often doesn't live in the HTTP server's default search path. - The silly -s command line option and the corresponding PYTHONSUPPRESS environment variable (and the Py_SuppressPrint global flag in the Python/C API) are gone. - Most problems on 64-bit platforms should now be fixed. Andrew Kuchling helped. Some uncommon extension modules are still not clean (image and audio ops?). - Fixed a bug where multiple anonymous tuple arguments would be mixed up when using the debugger or profiler (reported by Just van Rossum). The simplest example is ``def f((a,b),(c,d)): print a,b,c,d''; this would print the wrong value when run under the debugger or profiler. - The hacks that the dictionary implementation used to speed up repeated lookups of the same C string were removed; these were a source of subtle problems and don't seem to serve much of a purpose any longer. - All traces of support for the long dead access statement have been removed from the sources. - Plugged the two-byte memory leak in the tokenizer when reading an interactive EOF. - There's a -O option to the interpreter that removes SET_LINENO instructions and assert statements (see below); it uses and produces .pyo files instead of .pyc files. The speedup is only a few percent in most cases. The line numbers are still available in the .pyo file, as a separate table (which is also available in .pyc files). However, the removal of the SET_LINENO instructions means that the debugger (pdb) can't set breakpoints on lines in -O mode. The traceback module contains a function to extract a line number from the code object referenced in a traceback object. In the future it should be possible to write external bytecode optimizers that create better optimized .pyo files, and there should be more control over optimization; consider the -O option a "teaser". Without -O, the assert statement actually generates code that first checks __debug__; if this variable is false, the assertion is not checked. __debug__ is a built-in variable whose value is initialized to track the -O flag (it's true iff -O is not specified). With -O, no code is generated for assert statements, nor for code of the form ``if __debug__: <something>''. Sorry, no further constant folding happens. Performance ----------- - It's much faster (almost twice for pystone.py -- see Tools/scripts). See the entry on string interning below. - Some speedup by using separate free lists for method objects (both the C and the Python variety) and for floating point numbers. - Big speedup by allocating frame objects with a single malloc() call. The Python/C API for frames is changed (you shouldn't be using this anyway). - Significant speedup by inlining some common opcodes for common operand types (e.g. i+i, i-i, and list[i]). Fredrik Lundh. - Small speedup by reordering the method tables of some common objects (e.g. list.append is now first). - Big optimization to the read() method of file objects. A read() without arguments now attempts to use fstat to allocate a buffer of the right size; for pipes and sockets, it will fall back to doubling the buffer size. While that the improvement is real on all systems, it is most dramatic on Windows. Documentation ------------- - Many new pieces of library documentation were contributed, mostly by Andrew Kuchling. Even cmath is now documented! There's also a chapter of the library manual, "libundoc.tex", which provides a listing of all undocumented modules, plus their status (e.g. internal, obsolete, or in need of documentation). Also contributions by Sue Williams, Skip Montanaro, and some module authors who succumbed to pressure to document their own contributed modules :-). Note that printing the documentation now kills fewer trees -- the margins have been reduced. - I have started documenting the Python/C API. Unfortunately this project hasn't been completed yet. It will be complete before the final release of Python 1.5, though. At the moment, it's better to read the LaTeX source than to attempt to run it through LaTeX and print the resulting dvi file. - The posix module (and hence os.py) now has doc strings! Thanks to Neil Schemenauer. I received a few other contributions of doc strings. In most other places, doc strings are still wishful thinking... Language changes ---------------- - Private variables with leading double underscore are now a permanent feature of the language. (These were experimental in release 1.4. I have favorable experience using them; I can't label them "experimental" forever.) - There's new string literal syntax for "raw strings". Prefixing a string literal with the letter r (or R) disables all escape processing in the string; for example, r'\n' is a two-character string consisting of a backslash followed by the letter n. This combines with all forms of string quotes; it is actually useful for triple quoted doc strings which might contain references to \n or \t. An embedded quote prefixed with a backslash does not terminate the string, but the backslash is still included in the string; for example, r'\'' is a two-character string consisting of a backslash and a quote. (Raw strings are also affectionately known as Robin strings, after their inventor, Robin Friedrich.) - There's a simple assert statement, and a new exception AssertionError. For example, ``assert foo > 0'' is equivalent to ``if not foo > 0: raise AssertionError''. Sorry, the text of the asserted condition is not available; it would be too complicated to generate code for this (since the code is generated from a parse tree). However, the text is displayed as part of the traceback! - The raise statement has a new feature: when using "raise SomeClass, somevalue" where somevalue is not an instance of SomeClass, it instantiates SomeClass(somevalue). In 1.5a4, if somevalue is an instance of a *derived* class of SomeClass, the exception class raised is set to somevalue.__class__, and SomeClass is ignored after that. - Duplicate keyword arguments are now detected at compile time; f(a=1,a=2) is now a syntax error. Changes to built-in features ---------------------------- - There's a new exception FloatingPointError (used only by Lee Busby's patches to catch floating point exceptions, at the moment). - The obsolete exception ConflictError (presumably used by the long obsolete access statement) has been deleted. - There's a new function sys.exc_info() which returns the tuple (sys.exc_type, sys.exc_value, sys.exc_traceback) in a thread-safe way. - There's a new variable sys.executable, pointing to the executable file for the Python interpreter. - The sort() methods for lists no longer uses the C library qsort(); I wrote my own quicksort implementation, with lots of help (in the form of a kind of competition) from Tim Peters. This solves a bug in dictionary comparisons on some Solaris versions when Python is built with threads, and makes sorting lists even faster. - The semantics of comparing two dictionaries have changed, to make comparison of unequal dictionaries faster. A shorter dictionary is always considered smaller than a larger dictionary. For dictionaries of the same size, the smallest differing element determines the outcome (which yields the same results as before in this case, without explicit sorting). Thanks to Aaron Watters for suggesting something like this. - The semantics of try-except have changed subtly so that calling a function in an exception handler that itself raises and catches an exception no longer overwrites the sys.exc_* variables. This also alleviates the problem that objects referenced in a stack frame that caught an exception are kept alive until another exception is caught -- the sys.exc_* variables are restored to their previous value when returning from a function that caught an exception. - There's a new "buffer" interface. Certain objects (e.g. strings and arrays) now support the "buffer" protocol. Buffer objects are acceptable whenever formerly a string was required for a write operation; mutable buffer objects can be the target of a read operation using the call f.readinto(buffer). A cool feature is that regular expression matching now also work on array objects. Contribution by Jack Jansen. (Needs documentation.) - String interning: dictionary lookups are faster when the lookup string object is the same object as the key in the dictionary, not just a string with the same value. This is done by having a pool of "interned" strings. Most names generated by the interpreter are now automatically interned, and there's a new built-in function intern(s) that returns the interned version of a string. Interned strings are not a different object type, and interning is totally optional, but by interning most keys a speedup of about 15% was obtained for the pystone benchmark. - Dictionary objects have several new methods; clear() and copy() have the obvious semantics, while update(d) merges the contents of another dictionary d into this one, overriding existing keys. The dictionary implementation file is now called dictobject.c rather than the confusing mappingobject.c. - The intrinsic function dir() is much smarter; it looks in __dict__, __members__ and __methods__. - The intrinsic functions int(), long() and float() can now take a string argument and then do the same thing as string.atoi(), string.atol(), and string.atof(). No second 'base' argument is allowed, and complex() does not take a string (nobody cared enough). - When a module is deleted, its globals are now deleted in two phases. In the first phase, all variables whose name begins with exactly one underscore are replaced by None; in the second phase, all variables are deleted. This makes it possible to have global objects whose destructors depend on other globals. The deletion order within each phase is still random. - It is no longer an error for a function to be called without a global variable __builtins__ -- an empty directory will be provided by default. - Guido's corollary to the "Don Beaudry hook": it is now possible to do metaprogramming by using an instance as a base class. Not for the faint of heart; and undocumented as yet, but basically if a base class is an instance, its class will be instantiated to create the new class. Jim Fulton will love it -- it also works with instances of his "extension classes", since it is triggered by the presence of a __class__ attribute on the purported base class. See Demo/metaclasses/index.html for an explanation and see that directory for examples. - Another change is that the Don Beaudry hook is now invoked when *any* base class is special. (Up to 1.5a3, the *last* special base class is used; in 1.5a4, the more rational choice of the *first* special base class is used.) - New optional parameter to the readlines() method of file objects. This indicates the number of bytes to read (the actual number of bytes read will be somewhat larger due to buffering reading until the end of the line). Some optimizations have also been made to speed it up (but not as much as read()). - Complex numbers no longer have the ".conj" pseudo attribute; use z.conjugate() instead, or complex(z.real, -z.imag). Complex numbers now *do* support the __members__ and __methods__ special attributes. - The complex() function now looks for a __complex__() method on class instances before giving up. - Long integers now support arbitrary shift counts, so you can now write 1L<<1000000, memory permitting. (Python 1.4 reports "outrageous shift count for this.) - The hex() and oct() functions have been changed so that for regular integers, they never emit a minus sign. For example, on a 32-bit machine, oct(-1) now returns '037777777777' and hex(-1) returns '0xffffffff'. While this may seem inconsistent, it is much more useful. (For long integers, a minus sign is used as before, to fit the result in memory :-) - The hash() function computes better hashes for several data types, including strings, floating point numbers, and complex numbers. New extension modules --------------------- - New extension modules cStringIO.c and cPickle.c, written by Jim Fulton and other folks at Digital Creations. These are much more efficient than their Python counterparts StringIO.py and pickle.py, but don't support subclassing. cPickle.c clocks up to 1000 times faster than pickle.py; cStringIO.c's improvement is less dramatic but still significant. - New extension module zlibmodule.c, interfacing to the free zlib library (gzip compatible compression). There's also a module gzip.py which provides a higher level interface. Written by Andrew Kuchling and Jeremy Hylton. - New module readline; see the "miscellaneous" section above. - New Unix extension module resource.c, by Jeremy Hylton, provides access to getrlimit(), getrusage(), setrusage(), getpagesize(), and related symbolic constants. - New extension puremodule.c, by Barry Warsaw, which interfaces to the Purify(TM) C API. See also the file Misc/PURIFY.README. It is also possible to enable Purify by simply setting the PURIFY Makefile variable in the Modules/Setup file. Changes in extension modules ---------------------------- - The struct extension module has several new features to control byte order and word size. It supports reading and writing IEEE floats even on platforms where this is not the native format. It uses uppercase format codes for unsigned integers of various sizes (always using Python long ints for 'I' and 'L'), 's' with a size prefix for strings, and 'p' for "Pascal strings" (with a leading length byte, included in the size; blame Hannu Krosing; new in 1.5a4). A prefix '>' forces big-endian data and '<' forces little-endian data; these also select standard data sizes and disable automatic alignment (use pad bytes as needed). - The array module supports uppercase format codes for unsigned data formats (like the struct module). - The fcntl extension module now exports the needed symbolic constants. (Formerly these were in FCNTL.py which was not available or correct for all platforms.) - The extension modules dbm, gdbm and bsddb now check that the database is still open before making any new calls. - The dbhash module is no more. Use bsddb instead. (There's a third party interface for the BSD 2.x code somewhere on the web; support for bsddb will be deprecated.) - The gdbm module now supports a sync() method. - The socket module now has some new functions: getprotobyname(), and the set {ntoh,hton}{s,l}(). - Various modules now export their type object: socket.SocketType, array.ArrayType. - The socket module's accept() method now returns unknown addresses as a tuple rather than raising an exception. (This can happen in promiscuous mode.) Theres' also a new function getprotobyname(). - The pthread support for the thread module now works on most platforms. - STDWIN is now officially obsolete. Support for it will eventually be removed from the distribution. - The binascii extension module is now hopefully fully debugged. (XXX Oops -- Fredrik Lundh promised me a uuencode fix that I never received.) - audioop.c: added a ratecv() function; better handling of overflow in add(). - posixmodule.c: now exports the O_* flags (O_APPEND etc.). On Windows, also O_TEXT and O_BINARY. The 'error' variable (the exception is raises) is renamed -- its string value is now "os.error", so newbies don't believe they have to import posix (or nt) to catch it when they see os.error reported as posix.error. The execve() function now accepts any mapping object for the environment. - A new version of the al (audio library) module for SGI was contributed by Sjoerd Mullender. - The regex module has a new function get_syntax() which retrieves the syntax setting set by set_syntax(). The code was also sanitized, removing worries about unclean error handling. See also below for its successor, re.py. - The "new" module (which creates new objects of various types) once again has a fully functioning new.function() method. Dangerous as ever! Also, new.code() has several new arguments. - A problem has been fixed in the rotor module: on systems with signed characters, rotor-encoded data was not portable when the key contained 8-bit characters. Also, setkey() now requires its argument rather than having broken code to default it. - The sys.builtin_module_names variable is now a tuple. Another new variables in sys is sys.executable (the full path to the Python binary, if known). - The specs for time.strftime() have undergone some revisions. It appears that not all format characters are supported in the same way on all platforms. Rather than reimplement it, we note these differences in the documentation, and emphasize the shared set of features. There's also a thorough test set (that occasionally finds problems in the C library implementation, e.g. on some Linuxes), thanks to Skip Montanaro. - The nis module seems broken when used with NIS+; unfortunately nobody knows how to fix it. It should still work with old NIS. New library modules ------------------- - New (still experimental) Perl-style regular expression module, re.py, which uses a new interface for matching as well as a new syntax; the new interface avoids the thread-unsafety of the regex interface. This comes with a helper extension reopmodule.c and vastly rewritten regexpr.c. Most work on this was done by Jeffrey Ollie, Tim Peters, and Andrew Kuchling. See the documentation libre.tex. In 1.5, the old regex module is still fully supported; in the future, it will become obsolete. - New module gzip.py; see zlib above. - New module keyword.py exports knowledge about Python's built-in keywords. (New version by Ka-Ping Yee.) - New module pprint.py (with documentation) which supports pretty-printing of lists, tuples, & dictionaries recursively. By Fred Drake. - New module code.py. The function code.compile_command() can determine whether an interactively entered command is complete or not, distinguishing incomplete from invalid input. (XXX Unfortunately, this seems broken at this moment, and I don't have the time to fix it. It's probably better to add an explicit interface to the parser for this.) - There is now a library module xdrlib.py which can read and write the XDR data format as used by Sun RPC, for example. It uses the struct module. Changes in library modules -------------------------- - Module codehack.py is now completely obsolete. - The pickle.py module has been updated to make it compatible with the new binary format that cPickle.c produces. By default it produces the old all-ASCII format compatible with the old pickle.py, still much faster than pickle.py; it will read both formats automatically. A few other updates have been made. - A new helper module, copy_reg.py, is provided to register extensions to the pickling code. - Revamped module tokenize.py is much more accurate and has an interface that makes it a breeze to write code to colorize Python source code. Contributed by Ka-Ping Yee. - In ihooks.py, ModuleLoader.load_module() now closes the file under all circumstances. - The tempfile.py module has a new class, TemporaryFile, which creates an open temporary file that will be deleted automatically when closed. This works on Windows and MacOS as well as on Unix. (Jim Fulton.) - Changes to the cgi.py module: Most imports are now done at the top of the module, which provides a speedup when using ni (Jim Fulton). The problem with file upload to a Windows platform is solved by using the new tempfile.TemporaryFile class; temporary files are now always opened in binary mode (Jim Fulton). The cgi.escape() function now takes an optional flag argument that quotes '"' to '"'. It is now possible to invoke cgi.py from a command line script, to test cgi scripts more easily outside an http server. There's an optional limit to the size of uploads to POST (Skip Montanaro). Added a 'strict_parsing' option to all parsing functions (Jim Fulton). The function parse_qs() now uses urllib.unquote() on the name as well as the value of fields (Clarence Gardner). The FieldStorage class now has a __len__() method. - httplib.py: the socket object is no longer closed; all HTTP/1.* responses are now accepted; and it is now thread-safe (by not using the regex module). - BaseHTTPModule.py: treat all HTTP/1.* versions the same. - The popen2.py module is now rewritten using a class, which makes access to the standard error stream and the process id of the subprocess possible. - Added timezone support to the rfc822.py module, in the form of a getdate_tz() method and a parsedate_tz() function; also a mktime_tz(). Also added recognition of some non-standard date formats, by Lars Wirzenius, and RFC 850 dates (Chris Lawrence). - mhlib.py: various enhancements, including almost compatible parsing of message sequence specifiers without invoking a subprocess. Also added a createmessage() method by Lars Wirzenius. - The StringIO.StringIO class now supports readline(nbytes). (Lars Wirzenius.) (Of course, you should be using cStringIO for performance.) - UserDict.py supports the new dictionary methods as well. - Improvements for whrandom.py by Tim Peters: use 32-bit arithmetic to speed it up, and replace 0 seed values by 1 to avoid degeneration. A bug was fixed in the test for invalid arguments. - Module ftplib.py: added support for parsing a .netrc file (Fred Drake). Also added an ntransfercmd() method to the FTP class, which allows access to the expected size of a transfer when available, and a parse150() function to the module which parses the corresponding 150 response. - urllib.py: the ftp cache is now limited to 10 entries. Added quote_plus() and unquote_plus() functions which are like quote() and unquote() but also replace spaces with '+' or vice versa, for encoding/decoding CGI form arguments. Catch all errors from the ftp module. HTTP requests now add the Host: header line. The proxy variable names are now mapped to lower case, for Windows. The spliturl() function no longer erroneously throws away all data past the first newline. The basejoin() function now intereprets "../" correctly. I *believe* that the problems with "exception raised in __del__" under certain circumstances have been fixed (mostly by changes elsewher in the interpreter). - In urlparse.py, there is a cache for results in urlparse.urlparse(); its size limit is set to 20. Also, new URL schemes shttp, https, and snews are "supported". - shelve.py: use cPickle and cStringIO when available. Also added a sync() method, which calls the database's sync() method if there is one. - The mimetools.py module now uses the available Python modules for decoding quoted-printable, uuencode and base64 formats, rather than creating a subprocess. - The python debugger (pdb.py, and its base class bdb.py) now support conditional breakpoints. See the docs. - The modules base64.py, uu.py and quopri.py can now be used as simple command line utilities. - Various small fixes to the nntplib.py module that I can't bother to document in detail. - Sjoerd Mullender's mimify.py module now supports base64 encoding and includes functions to handle the funny encoding you sometimes see in mail headers. It is now documented. - mailbox.py: Added BabylMailbox. Improved the way the mailbox is gotten from the environment. - Many more modules now correctly open files in binary mode when this is necessary on non-Unix platforms. - The copying functions in the undocumented module shutil.py are smarter. - The Writer classes in the formatter.py module now have a flush() method. - The sgmllib.py module accepts hyphens and periods in the middle of attribute names. While this is against the SGML standard, there is some HTML out there that uses this... - The interface for the Python bytecode disassembler module, dis.py, has been enhanced quite a bit. There's now one main function, dis.dis(), which takes almost any kind of object (function, module, class, instance, method, code object) and disassembles it; without arguments it disassembles the last frame of the last traceback. The other functions have changed slightly, too. - The imghdr.py module recognizes new image types: BMP, PNG. - The string.py module has a new function replace(str, old, new, [maxsplit]) which does substring replacements. It is actually implemented in C in the strop module. The functions [r]find() an [r]index() have an optional 4th argument indicating the end of the substring to search, alsoo implemented by their strop counterparts. (Remember, never import strop -- import string uses strop when available with zero overhead.) - The string.join() function now accepts any sequence argument, not just lists and tuples. - The string.maketrans() requires its first two arguments to be present. The old version didn't require them, but there's not much point without them, and the documentation suggests that they are required, so we fixed the code to match the documentation. - The regsub.py module has a function clear_cache(), which clears its internal cache of compiled regular expressions. Also, the cache now takes the current syntax setting into account. (However, this module is now obsolete -- use the sub() or subn() functions or methods in the re module.) - The undocumented module Complex.py has been removed, now that Python has built-in complex numbers. A similar module remains as Demo/classes/Complex.py, as an example. Changes to the build process ---------------------------- - The way GNU readline is configured is totally different. The --with-readline configure option is gone. It is now an extension module, which may be loaded dynamically. You must enable it (and specify the correct libraries to link with) in the Modules/Setup file. Importing the module installs some hooks which enable command line editing. When the interpreter shell is invoked interactively, it attempts to import the readline module; when this fails, the default input mechanism is used. The hook variables are PyOS_InputHook and PyOS_ReadlineFunctionPointer. (Code contributed by Lee Busby, with ideas from William Magro.) - New build procedure: a single library, libpython1.5.a, is now built, which contains absolutely everything except for a one-line main() program (which calls Py_Main(argc, argv) to start the interpreter shell). This makes life much simpler for applications that need to embed Python. The serial number of the build is now included in the version string (sys.version). - As far as I can tell, neither gcc -Wall nor the Microsoft compiler emits a single warning any more when compiling Python. - A number of new Makefile variables have been added for special situations, e.g. LDLAST is appended to the link command. These are used by editing the Makefile or passing them on the make command line. - A set of patches from Lee Busby has been integrated that make it possible to catch floating point exceptions. Use the configure option --with-fpectl to enable the patches; the extension modules fpectl and fpetest provide control to enable/disable and test the feature, respectively. - The support for shared libraries under AIX is now simpler and more robust. Thanks to Vladimir Marangozov for revamping his own patches! - The Modules/makesetup script now reads a file Setup.local as well as a file Setup. Most changes to the Setup script can be done by editing Setup.local instead, which makes it easier to carry a particular setup over from one release to the next. - The Modules/makesetup script now copies any "include" lines it encounters verbatim into the output Makefile. It also recognizes .cxx and .cpp as C++ source files. - The configure script is smarter about C compiler options; e.g. with gcc it uses -O2 and -g when possible, and on some other platforms it uses -Olimit 1500 to avoid a warning from the optimizer about the main loop in ceval.c (which has more than 1000 basic blocks). - The configure script now detects whether malloc(0) returns a NULL pointer or a valid block (of length zero). This avoids the nonsense of always adding one byte to all malloc() arguments on most platforms. - The configure script has a new option, --with-dec-threads, to enable DEC threads on DEC Alpha platforms. Also, --with-threads is now an alias for --with-thread (this was the Most Common Typo in configure arguments). - Many changes in Doc/Makefile; amongst others, latex2html is now used to generate HTML from all latex documents. Change to the Python/C API -------------------------- - Because some interfaces have changed, the PYTHON_API macro has been bumped. Most extensions built for the old API version will still run, but I can't guarantee this. Python prints a warning message on version mismatches; it dumps core when the version mismatch causes a serious problem :-) - I've completed the Grand Renaming, with the help of Roger Masse and Barry Warsaw. This makes reading or debugging the code much easier. Many other unrelated code reorganizations have also been carried out. The allobjects.h header file is gone; instead, you would have to include Python.h followed by rename2.h. But you're better off running Tools/scripts/fixcid.py -s Misc/RENAME on your source, so you can omit the rename2.h; it will disappear in the next release. - Various and sundry small bugs in the "abstract" interfaces have been fixed. Thanks to all the (involuntary) testers of the Python 1.4 version! Some new functions have been added, e.g. PySequence_List(o), equivalent to list(o) in Python. - New API functions PyLong_FromUnsignedLong() and PyLong_AsUnsignedLong(). - The API functions in the file cgensupport.c are no longer supported. This file has been moved to Modules and is only ever compiled when the SGI specific 'gl' module is built. - PyObject_Compare() can now raise an exception. Check with PyErr_Occurred(). The comparison function in an object type may also raise an exception. - The slice interface uses an upper bound of INT_MAX when no explicit upper bound is given (e.x. for a[1:]). It used to ask the object for its length and do the calculations. - Support for multiple independent interpreters. See Doc/api.tex, functions Py_NewInterpreter() and Py_EndInterpreter(). Since the documentation is incomplete, also see the new Demo/pysvr example (which shows how to use these in a threaded application) and the source code. - There is now a Py_Finalize() function which "de-initializes" Python. It is possible to completely restart the interpreter repeatedly by calling Py_Finalize() followed by Py_Initialize(). A change of functionality in Py_Initialize() means that it is now a fatal error to call it while the interpreter is already initialized. The old, half-hearted Py_Cleanup() routine is gone. Use of Py_Exit() is deprecated (it is nothing more than Py_Finalize() followed by exit()). - There are no known memory leaks left. While Py_Finalize() doesn't free *all* allocated memory (some of it is hard to track down), repeated calls to Py_Finalize() and Py_Initialize() do not create unaccessible heap blocks. - There is now explicit per-thread state. (Inspired by, but not the same as, Greg Stein's free threading patches.) - There is now better support for threading C applications. There are now explicit APIs to manipulate the interpreter lock. Read the source or the Demo/pysvr example; the new functions are PyEval_{Acquire,Release}{Lock,Thread}(). - The test macro DEBUG has changed to Py_DEBUG, to avoid interference with other libraries' DEBUG macros. Likewise for any other test macros that didn't yet start with Py_. - New wrappers around malloc() and friends: Py_Malloc() etc. call malloc() and call PyErr_NoMemory() when it fails; PyMem_Malloc() call just malloc(). Use of these wrappers could be essential if multiple memory allocators exist (e.g. when using certain DLL setups under Windows). (Idea by Jim Fulton.) - New C API PyImport_Import() which uses whatever __import__() hook that is installed for the current execution environment. By Jim Fulton. - It is now possible for an extension module's init function to fail non-fatally, by calling one of the PyErr_* functions and returning. - The PyInt_AS_LONG() and PyFloat_AS_DOUBLE() macros now cast their argument to the proper type, like the similar PyString macros already did. (Suggestion by Marc-Andre Lemburg.) Similar for PyList_GET_SIZE and PyList_GET_ITEM. - Some of the Py_Get* function, like Py_GetVersion() (but not yet Py_GetPath()) are now declared as returning a const char *. (More should follow.) - Changed the run-time library to check for exceptions after object comparisons. PyObject_Compare() can now return an exception; use PyErr_Occurred() to check (there is *no* special return value). - PyFile_WriteString() and Py_Flushline() now return error indicators instead of clearing exceptions. This fixes an obscure bug where using these would clear a pending exception, discovered by Just van Rossum. - There's a new function, PyArg_ParseTupleAndKeywords(), which parses an argument list including keyword arguments. Contributed by Geoff Philbrick. - PyArg_GetInt() is gone. - It's no longer necessary to include graminit.h when calling one of the extended parser API functions. The three public grammar start symbols are now in Python.h as Py_single_input, Py_file_input, and Py_eval_input. - The CObject interface has a new function, PyCObject_Import(module, name). It calls PyCObject_AsVoidPtr() on the object referenced by "module.name". Tkinter ------- - On popular demand, _tkinter once again installs a hook for readline that processes certain Tk events while waiting for the user to type (using PyOS_InputHook). - A patch by Craig McPheeters plugs the most obnoxious memory leaks, caused by command definitions referencing widget objects beyond their lifetime. - New standard dialog modules: tkColorChooser.py, tkCommonDialog.py, tkMessageBox.py, tkFileDialog.py, tkSimpleDialog.py These interface with the new Tk dialog scripts, and provide more "native platform" style file selection dialog boxes on some platforms. Contributed by Fredrik Lundh. - Tkinter.py: when the first Tk object is destroyed, it sets the hiddel global _default_root to None, so that when another Tk object is created it becomes the new default root. Other miscellaneous changes and fixes. - The Image class now has a configure method. - Added a bunch of new winfo options to Tkinter.py; we should now be up to date with Tk 4.2. The new winfo options supported are: mananger, pointerx, pointerxy, pointery, server, viewable, visualid, visualsavailable. - The broken bind() method on Canvas objects defined in the Canvas.py module has been fixed. The CanvasItem and Group classes now also have an unbind() method. - The problem with Tkinter.py falling back to trying to import "tkinter" when "_tkinter" is not found has been fixed -- it no longer tries "tkinter", ever. This makes diagnosing the problem "_tkinter not configured" much easier and will hopefully reduce the newsgroup traffic on this topic. - The ScrolledText module once again supports the 'cnf' parameter, to be compatible with the examples in Mark Lutz' book (I know, I know, too late...) - The _tkinter.c extension module has been revamped. It now support Tk versions 4.1 through 8.0; support for 4.0 has been dropped. It works well under Windows and Mac (with the latest Tk ports to those platforms). It also supports threading -- it is safe for one (Python-created) thread to be blocked in _tkinter.mainloop() while other threads modify widgets. To make the changes visible, those threads must use update_idletasks()method. (The patch for threading in 1.5a3 was broken; in 1.5a4, it is back in a different version, which requires access to the Tcl sources to get it to work -- hence it is disabled by default.) - A bug in _tkinter.c has been fixed, where Split() with a string containing an unmatched '"' could cause an exception or core dump. - Unfortunately, on Windows and Mac, Tk 8.0 no longer supports CreateFileHandler, so _tkinter.createfilehandler is not available on those platforms when using Tk 8.0 or later. I will have to rethink how to interface with Tcl's lower-level event mechanism, or with its channels (which are like Python's file-like objects). Jack Jansen has provided a fix for the Mac, so createfilehandler *is* actually supported there; maybe I can adapt his fix for Windows. Tools and Demos --------------- - A new regression test suite is provided, which tests most of the standard and built-in modules. The regression test is run by invoking the script Lib/test/regrtest.py. Barry Warsaw wrote the test harnass; he and Roger Masse contributed most of the new tests. - New tool: faqwiz -- the CGI script that is used to maintain the Python FAQ (http://grail.cnri.reston.va.us/cgi-bin/faqw.py). In Tools/faqwiz. - New tool: webchecker -- a simple extensible web robot that, when aimed at a web server, checks that server for dead links. Available are a command line utility as well as a Tkinter based GUI version. In Tools/webchecker. A simplified version of this program is dissected in my article in O'Reilly's WWW Journal, the issue on Scripting Languages (Vol 2, No 2); Scripting the Web with Python (pp 97-120). Includes a parser for robots.txt files by Skip Montanaro. - New small tools: cvsfiles.py (prints a list of all files under CVS n a particular directory tree), treesync.py (a rather Guido-specific script to synchronize two source trees, one on Windows NT, the other one on Unix under CVS but accessible from the NT box), and logmerge.py (sort a collection of RCS or CVS logs by date). In Tools/scripts. - The freeze script now also works under Windows (NT). Another feature allows the -p option to be pointed at the Python source tree instead of the installation prefix. This was loosely based on part of xfreeze by Sam Rushing and Bill Tutt. - New examples (Demo/extend) that show how to use the generic extension makefile (Misc/Makefile.pre.in). - Tools/scripts/h2py.py now supports C++ comments. - Tools/scripts/pystone.py script is upgraded to version 1.1; there was a bug in version 1.0 (distributed with Python 1.4) that leaked memory. Also, in 1.1, the LOOPS variable is incremented to 10000. - Demo/classes/Rat.py completely rewritten by Sjoerd Mullender. Windows (NT and 95) ------------------- - New project files for Developer Studio (Visual C++) 5.0 for Windows NT (the old VC++ 4.2 Makefile is also still supported, but will eventually be withdrawn due to its bulkiness). - See the note on the new module search path in the "Miscellaneous" section above. - Support for Win32s (the 32-bit Windows API under Windows 3.1) is basically withdrawn. If it still works for you, you're lucky. - There's a new extension module, msvcrt.c, which provides various low-level operations defined in the Microsoft Visual C++ Runtime Library. These include locking(), setmode(), get_osfhandle(), set_osfhandle(), and console I/O functions like kbhit(), getch() and putch(). - The -u option not only sets the standard I/O streams to unbuffered status, but also sets them in binary mode. (This can also be done using msvcrt.setmode(), by the way.) - The, sys.prefix and sys.exec_prefix variables point to the directory where Python is installed, or to the top of the source tree, if it was run from there. - The various os.path modules (posixpath, ntpath, macpath) now support passing more than two arguments to the join() function, so os.path.join(a, b, c) is the same as os.path.join(a, os.path.join(b, c)). - The ntpath module (normally used as os.path) supports ~ to $HOME expansion in expanduser(). - The freeze tool now works on Windows. - See also the Tkinter category for a sad note on _tkinter.createfilehandler(). - The truncate() method for file objects now works on Windows. - Py_Initialize() is no longer called when the DLL is loaded. You must call it yourself. - The time module's clock() function now has good precision through the use of the Win32 API QueryPerformanceCounter(). - Mark Hammond will release Python 1.5 versions of PythonWin and his other Windows specific code: the win32api extensions, COM/ActiveX support, and the MFC interface. Mac --- - As always, the Macintosh port will be done by Jack Jansen. He will make a separate announcement for the Mac specific source code and the binary distribution(s) when these are ready. ====================================================================== ===================================== ==> Release 1.4 (October 25 1996) <== ===================================== (Starting in reverse chronological order:) - Changed disclaimer notice. - Added SHELL=/bin/sh to Misc/Makefile.pre.in -- some Make versions default to the user's login shell. - In Lib/tkinter/Tkinter.py, removed bogus binding of <Delete> in Text widget, and bogus bspace() function. - In Lib/cgi.py, bumped __version__ to 2.0 and restored a truncated paragraph. - Fixed the NT Makefile (PC/vc40.mak) for VC 4.0 to set /MD for all subprojects, and to remove the (broken) experimental NumPy subprojects. - In Lib/py_compile.py, cast mtime to long() so it will work on Mac (where os.stat() returns mtimes as floats.) - Set self.rfile unbuffered (like self.wfile) in SocketServer.py, to fix POST in CGIHTTPServer.py. - Version 2.83 of Misc/python-mode.el for Emacs is included. - In Modules/regexmodule.c, fixed symcomp() to correctly handle a new group starting immediately after a group tag. - In Lib/SocketServer.py, changed the mode for rfile to unbuffered. - In Objects/stringobject.c, fixed the compare function to do the first char comparison in unsigned mode, for consistency with the way other characters are compared by memcmp(). - In Lib/tkinter/Tkinter.py, fixed Scale.get() to support floats. - In Lib/urllib.py, fix another case where openedurl wasn't set. (XXX Sorry, the rest is in totally random order. No time to fix it.) - SyntaxError exceptions detected during code generation (e.g. assignment to an expression) now include a line number. - Don't leave trailing / or \ in script directory inserted in front of sys.path. - Added a note to Tools/scripts/classfix.py abouts its historical importance. - Added Misc/Makefile.pre.in, a universal Makefile for extensions built outside the distribution. - Rewritten Misc/faq2html.py, by Ka-Ping Yee. - Install shared modules with mode 555 (needed for performance on some platforms). - Some changes to standard library modules to avoid calling append() with more than one argument -- while supported, this should be outlawed, and I don't want to set a bad example. - bdb.py (and hence pdb.py) supports calling run() with a code object instead of a code string. - Fixed an embarrassing bug cgi.py which prevented correct uploading of binary files from Netscape (which doesn't distinguish between binary and text files). Also added dormant logging support, which makes it easier to debug the cgi module itself. - Added default writer to constructor of NullFormatter class. - Use binary mode for socket.makefile() calls in ftplib.py. - The ihooks module no longer "installs" itself upon import -- this was an experimental feature that helped ironing out some bugs but that slowed down code that imported it without the need to install it (e.g. the rexec module). Also close the file in some cases and add the __file__ attribute to loaded modules. - The test program for mailbox.py is now more useful. - Added getparamnames() to Message class in mimetools.py -- it returns the names of parameters to the content-type header. - Fixed a typo in ni that broke the loop stripping "__." from names. - Fix sys.path[0] for scripts run via pdb.py's new main program. - profile.py can now also run a script, like pdb. - Fix a small bug in pyclbr -- don't add names starting with _ when emulating from ... import *. - Fixed a series of embarrassing typos in rexec's handling of standard I/O redirection. Added some more "safe" built-in modules: cmath, errno, operator. - Fixed embarrassing typo in shelve.py. - Added SliceType and EllipsisType to types.py. - In urllib.py, added handling for error 301 (same as 302); added geturl() method to get the URL after redirection. - Fixed embarrassing typo in xdrlib.py. Also fixed typo in Setup.in for _xdrmodule.c and removed redundant #include from _xdrmodule.c. - Fixed bsddbmodule.c to add binary mode indicator on platforms that have it. This should make it working on Windows NT. - Changed last uses of #ifdef NT to #ifdef MS_WINDOWS or MS_WIN32, whatever applies. Also rationalized some other tests for various MS platforms. - Added the sources for the NT installer script used for Python 1.4beta3. Not tested with this release, but better than nothing. - A compromise in pickle's defenses against Trojan horses: a user-defined function is now okay where a class is expected. A built-in function is not okay, to prevent pickling something that will execute os.system("rm -f *") when unpickling. - dis.py will print the name of local variables referenced by local load/store/delete instructions. - Improved portability of SimpleHTTPServer module to non-Unix platform. - The thread.h interface adds an extra argument to down_sema(). This only affects other C code that uses thread.c; the Python thread module doesn't use semaphores (which aren't provided on all platforms where Python threads are supported). Note: on NT, this change is not implemented. - Fixed some typos in abstract.h; corrected signature of PyNumber_Coerce, added PyMapping_DelItem. Also fixed a bug in abstract.c's PyObject_CallMethod(). - apply(classname, (), {}) now works even if the class has no __init__() method. - Implemented complex remainder and divmod() (these would dump core!). Conversion of complex numbers to int, long int or float now raises an exception, since there is no meaningful way to do it without losing information. - Fixed bug in built-in complex() function which gave the wrong result for two real arguments. - Change the hash algorithm for strings -- the multiplier is now 1000003 instead of 3, which gives better spread for short strings. - New default path for Windows NT, the registry structure now supports default paths for different install packages. (Mark Hammond -- the next PythonWin release will use this.) - Added more symbols to the python_nt.def file. - When using GNU readline, set rl_readline_name to "python". - The Ellipses built-in name has been renamed to Ellipsis -- this is the correct singular form. Thanks to Ka-Ping Yee, who saved us from eternal embarrassment. - Bumped the PYTHON_API_VERSION to 1006, due to the Ellipses -> Ellipsis name change. - Updated the library reference manual. Added documentation of restricted mode (rexec, Bastion) and the formatter module (for use with the htmllib module). Fixed the documentation of htmllib (finally). - The reference manual is now maintained in FrameMaker. - Upgraded scripts Doc/partparse.py and Doc/texi2html.py. - Slight improvements to Doc/Makefile. - Added fcntl.lockf(). This should be used for Unix file locking instead of the posixfile module; lockf() is more portable. - The getopt module now supports long option names, thanks to Lars Wizenius. - Plenty of changes to Tkinter and Canvas, mostly due to Fred Drake and Nils Fischbeck. - Use more bits of time.time() in whrandom's default seed(). - Performance hack for regex module's regs attribute. - Don't close already closed socket in socket module. - Correctly handle separators containing embedded nulls in strop.split, strop.find and strop.rfind. Also added more detail to error message for strop.atoi and friends. - Moved fallback definition for hypot() to Python/hypot.c. - Added fallback definition for strdup, in Python/strdup.c. - Fixed some bugs where a function would return 0 to indicate an error where it should return -1. - Test for error returned by time.localtime(), and rationalized its MS tests. - Added Modules/Setup.local file, which is processed after Setup. - Corrected bug in toplevel Makefile.in -- execution of regen script would not use the right PATH and PYTHONPATH. - Various and sundry NeXT configuration changes (sigh). - Support systems where libreadline needs neither termcap nor curses. - Improved ld_so_aix script and python.exp file (for AIX). - More stringent test for working <stdarg.h> in configure script. - Removed Demo/www subdirectory -- it was totally out of date. - Improved demos and docs for Fred Drake's parser module; fixed one typo in the module itself. ========================================= ==> Release 1.4beta3 (August 26 1996) <== ========================================= (XXX This is less readable that it should. I promise to restructure it for the final 1.4 release.) What's new in 1.4beta3 (since beta2)? ------------------------------------- - Name mangling to implement a simple form of class-private variables. A name of the form "__spam" can't easily be used outside the class. (This was added in 1.4beta3, but left out of the 1.4beta3 release message.) - In urllib.urlopen(): HTTP URLs containing user:passwd@host are now handled correctly when using a proxy server. - In ntpath.normpath(): don't truncate to 8+3 format. - In mimetools.choose_boundary(): don't die when getuid() or getpid() aren't defined. - Module urllib: some optimizations to (un)quoting. - New module MimeWriter for writing MIME documents. - More changes to formatter module. - The freeze script works once again and is much more robust (using sys.prefix etc.). It also supports a -o option to specify an output directory. - New module whichdb recognizes dbm, gdbm and bsddb/dbhash files. - The Doc/Makefile targets have been reorganized somewhat to remove the insistence on always generating PostScript. - The texinfo to html filter (Doc/texi2html.py) has been improved somewhat. - "errors.h" has been renamed to "pyerrors.h" to resolve a long-standing name conflict on the Mac. - Linking a module compiled with a different setting for Py_TRACE_REFS now generates a linker error rather than a core dump. - The cgi module has a new convenience function print_exception(), which formats a python exception using HTML. It also fixes a bug in the compatibility code and adds a dubious feature which makes it possible to have two query strings, one in the URL and one in the POST data. - A subtle change in the unpickling of class instances makes it possible to unpickle in restricted execution mode, where the __dict__ attribute is not available (but setattr() is). - Documentation for os.path.splitext() (== posixpath.splitext()) has been cleared up. It splits at the *last* dot. - posixfile locking is now also correctly supported on AIX. - The tempfile module once again honors an initial setting of tmpdir. It now works on Windows, too. - The traceback module has some new functions to extract, format and print the active stack. - Some translation functions in the urllib module have been made a little less sluggish. - The addtag_* methods for Canvas widgets in Tkinter as well as in the separate Canvas class have been fixed so they actually do something meaningful. - A tiny _test() function has been added to Tkinter.py. - A generic Makefile for dynamically loaded modules is provided in the Misc subdirectory (Misc/gMakefile). - A new version of python-mode.el for Emacs is provided. See http://www.python.org/ftp/emacs/pmdetails.html for details. The separate file pyimenu.el is no longer needed, imenu support is folded into python-mode.el. - The configure script can finally correctly find the readline library in a non-standard location. The LDFLAGS variable is passed on the Makefiles from the configure script. - Shared libraries are now installed as programs (i.e. with executable permission). This is required on HP-UX and won't hurt on other systems. - The objc.c module is no longer part of the distribution. Objective-C support may become available as contributed software on the ftp site. - The sybase module is no longer part of the distribution. A much improved sybase module is available as contributed software from the ftp site. - _tkinter is now compatible with Tcl 7.5 / Tk 4.1 patch1 on Windows and Mac (don't use unpatched Tcl/Tk!). The default line in the Setup.in file now links with Tcl 7.5 / Tk 4.1 rather than 7.4/4.0. - In Setup, you can now write "*shared*" instead of "*noconfig*", and you can use *.so and *.sl as shared libraries. - Some more fidgeting for AIX shared libraries. - The mpz module is now compatible with GMP 2.x. (Not tested by me.) (Note -- a complete replacement by Niels Mo"ller, called gpmodule, is available from the contrib directory on the ftp site.) - A warning is written to sys.stderr when a __del__ method raises an exception (formerly, such exceptions were completely ignored). - The configure script now defines HAVE_OLD_CPP if the C preprocessor is incapable of ANSI style token concatenation and stringification. - All source files (except a few platform specific modules) are once again compatible with K&R C compilers as well as ANSI compilers. In particular, ANSI-isms have been removed or made conditional in complexobject.c, getargs.c and operator.c. - The abstract object API has three new functions, PyObject_DelItem, PySequence_DelItem, and PySequence_DelSlice. - The operator module has new functions delitem and delslice, and the functions "or" and "and" are renamed to "or_" and "and_" (since "or" and "and" are reserved words). ("__or__" and "__and__" are unchanged.) - The environment module is no longer supported; putenv() is now a function in posixmodule (also under NT). - Error in filter(<function>, "") has been fixed. - Unrecognized keyword arguments raise TypeError, not KeyError. - Better portability, fewer bugs and memory leaks, fewer compiler warnings, some more documentation. - Bug in float power boundary case (0.0 to the negative integer power) fixed. - The test of negative number to the float power has been moved from the built-in pow() function to floatobject.c (so complex numbers can yield the correct result). - The bug introduced in beta2 where shared libraries loaded (using dlopen()) from the current directory would fail, has been fixed. - Modules imported as shared libraries now also have a __file__ attribute, giving the filename from which they were loaded. The only modules without a __file__ attribute now are built-in modules. - On the Mac, dynamically loaded modules can end in either ".slb" or ".<platform>.slb" where <platform> is either "CFM68K" or "ppc". The ".slb" extension should only be used for "fat" binaries. - C API addition: marshal.c now supports PyMarshal_WriteObjectToString(object). - C API addition: getargs.c now supports PyArg_ParseTupleAndKeywords(args, kwdict, format, kwnames, ...) to parse keyword arguments. - The PC versioning scheme (sys.winver) has changed once again. the version number is now "<digit>.<digit>.<digit>.<apiversion>", where the first three <digit>s are the Python version (e.g. "1.4.0" for Python 1.4, "1.4.1" for Python 1.4.1 -- the beta level is not included) and <apiversion> is the four-digit PYTHON_API_VERSION (currently 1005). - h2py.py accepts whitespace before the # in CPP directives - On Solaris 2.5, it should now be possible to use either Posix threads or Solaris threads (XXX: how do you select which is used???). (Note: the Python pthreads interface doesn't fully support semaphores yet -- anyone care to fix this?) - Thread support should now work on AIX, using either DCE threads or pthreads. - New file Demo/sockets/unicast.py - Working Mac port, with CFM68K support, with Tk 4.1 support (though not both) (XXX) - New project setup for PC port, now compatible with PythonWin, with _tkinter and NumPy support (XXX) - New module site.py (XXX) - New module xdrlib.py and optional support module _xdrmodule.c (XXX) - parser module adapted to new grammar, complete w/ Doc & Demo (XXX) - regen script fixed (XXX) - new machdep subdirectories Lib/{aix3,aix4,next3_3,freebsd2,linux2} (XXX) - testall now also tests math module (XXX) - string.atoi c.s. now raise an exception for an empty input string. - At last, it is no longer necessary to define HAVE_CONFIG_H in order to have config.h included at various places. - Unrecognized keyword arguments now raise TypeError rather than KeyError. - The makesetup script recognizes files with extension .so or .sl as (shared) libraries. - 'access' is no longer a reserved word, and all code related to its implementation is gone (or at least #ifdef'ed out). This should make Python a little speedier too! - Performance enhancements suggested by Sjoerd Mullender. This includes the introduction of two new optional function pointers in type object, getattro and setattro, which are like getattr and setattr but take a string object instead of a C string pointer. - New operations in string module: lstrip(s) and rstrip(s) strip whitespace only on the left or only on the right, A new optional third argument to split() specifies the maximum number of separators honored (so splitfields(s, sep, n) returns a list of at most n+1 elements). (Since 1.3, splitfields(s, None) is totally equivalent to split(s).) string.capwords() has an optional second argument specifying the separator (which is passed to split()). - regsub.split() has the same addition as string.split(). regsub.splitx(s, sep, maxsep) implements the functionality that was regsub.split(s, 1) in 1.4beta2 (return a list containing the delimiters as well as the words). - Final touch for AIX loading, rewritten Misc/AIX-NOTES. - In Modules/_tkinter.c, when using Tk 4.1 or higher, use className argument to _tkinter.create() to set Tcl's argv0 variable, so X resources use the right resource class again. - Add #undef fabs to Modules/mathmodule.c for macintosh. - Added some macro renames for AIX in Modules/operator.c. - Removed spurious 'E' from Doc/liberrno.tex. - Got rid of some cruft in Misc/ (dlMakefile, pyimenu.el); added new Misc/gMakefile and new version of Misc/python-mode.el. - Fixed typo in Lib/ntpath.py (islink has "return false" which gives a NameError). - Added missing "from types import *" to Lib/tkinter/Canvas.py. - Added hint about using default args for __init__ to pickle docs. - Corrected typo in Inclide/abstract.h: PySequence_Lenth -> PySequence_Length. - Some improvements to Doc/texi2html.py. - In Python/import.c, Cast unsigned char * in struct _frozen to char * in calls to rds_object(). - In doc/ref4.tex, added note about scope of lambda bodies. What's new in 1.4beta2 (since beta1)? ------------------------------------- - Portability bug in the md5.h header solved. - The PC build procedure now really works, and sets sys.platform to a meaningful value (a few things were botched in beta 1). Lib/dos_8x3 is now a standard part of the distribution (alas). - More improvements to the installation procedure. Typing "make install" now inserts the version number in the pathnames of almost everything installed, and creates the machine dependent modules (FCNTL.py etc.) if not supplied by the distribution. (XXX There's still a problem with the latter because the "regen" script requires that Python is installed. Some manual intervention may still be required.) (This has been fixed in 1.4beta3.) - New modules: errno, operator (XXX). - Changes for use with Numerical Python: built-in function slice() and Ellipses object, and corresponding syntax: x[lo:hi:stride] == x[slice(lo, hi, stride)] x[a, ..., z] == x[(a, Ellipses, z)] - New documentation for errno and cgi modules. - The directory containing the script passed to the interpreter is inserted in from of sys.path; "." is no longer a default path component. - Optional third string argument to string.translate() specifies characters to delete. New function string.maketrans() creates a translation table for translate() or for regex.compile(). - Module posix (and hence module os under Unix) now supports putenv(). Moreover, module os is enhanced so that if putenv() is supported, assignments to os.environ entries make the appropriate putenv() call. (XXX the putenv() implementation can leak a small amount of memory per call.) - pdb.py can now be invoked from the command line to debug a script: python pdb.py <script> <arg> ... - Much improved parseaddr() in rfc822. - In cgi.py, you can now pass an alternative value for environ to nearly all functions. - You can now assign to instance variables whose name begins and ends with '__'. - New version of Fred Drake's parser module and associates (token, symbol, AST). - New PYTHON_API_VERSION value and .pyc file magic number (again!). - The "complex" internal structure type is now called "Py_complex" to avoid name conflicts. - Numerous small bugs fixed. - Slight pickle speedups. - Some slight speedups suggested by Sjoerd (more coming in 1.4 final). - NeXT portability mods by Bill Bumgarner integrated. - Modules regexmodule.c, bsddbmodule.c and xxmodule.c have been converted to new naming style. What's new in 1.4beta1 (since 1.3)? ----------------------------------- - Added sys.platform and sys.exec_platform for Bill Janssen. - Installation has been completely overhauled. "make install" now installs everything, not just the python binary. Installation uses the install-sh script (borrowed from X11) to install each file. - New functions in the posix module: mkfifo, plock, remove (== unlink), and ftruncate. More functions are also available under NT. - New function in the fcntl module: flock. - Shared library support for FreeBSD. - The --with-readline option can now be used without a DIRECTORY argument, for systems where libreadline.* is in one of the standard places. It is also possible for it to be a shared library. - The extension tkinter has been renamed to _tkinter, to avoid confusion with Tkinter.py oncase insensitive file systems. It now supports Tk 4.1 as well as 4.0. - Author's change of address from CWI in Amsterdam, The Netherlands, to CNRI in Reston, VA, USA. - The math.hypot() function is now always available (if it isn't found in the C math library, Python provides its own implementation). - The latex documentation is now compatible with latex2e, thanks to David Ascher. - The expression x**y is now equivalent to pow(x, y). - The indexing expression x[a, b, c] is now equivalent to x[(a, b, c)]. - Complex numbers are now supported. Imaginary constants are written with a 'j' or 'J' prefix, general complex numbers can be formed by adding a real part to an imaginary part, like 3+4j. Complex numbers are always stored in floating point form, so this is equivalent to 3.0+4.0j. It is also possible to create complex numbers with the new built-in function complex(re, [im]). For the footprint-conscious, complex number support can be disabled by defining the symbol WITHOUT_COMPLEX. - New built-in function list() is the long-awaited counterpart of tuple(). - There's a new "cmath" module which provides the same functions as the "math" library but with complex arguments and results. (There are very good reasons why math.sqrt(-1) still raises an exception -- you have to use cmath.sqrt(-1) to get 1j for an answer.) - The Python.h header file (which is really the same as allobjects.h except it disables support for old style names) now includes several more files, so you have to have fewer #include statements in the average extension. - The NDEBUG symbol is no longer used. Code that used to be dependent on the presence of NDEBUG is now present on the absence of DEBUG. TRACE_REFS and REF_DEBUG have been renamed to Py_TRACE_REFS and Py_REF_DEBUG, respectively. At long last, the source actually compiles and links without errors when this symbol is defined. - Several symbols that didn't follow the new naming scheme have been renamed (usually by adding to rename2.h) to use a Py or _Py prefix. There are no external symbols left without a Py or _Py prefix, not even those defined by sources that were incorporated from elsewhere (regexpr.c, md5c.c). (Macros are a different story...) - There are now typedefs for the structures defined in config.c and frozen.c. - New PYTHON_API_VERSION value and .pyc file magic number. - New module Bastion. (XXX) - Improved performance of StringIO module. - UserList module now supports + and * operators. - The binhex and binascii modules now actually work. - The cgi module has been almost totally rewritten and documented. It now supports file upload and a new data type to handle forms more flexibly. - The formatter module (for use with htmllib) has been overhauled (again). - The ftplib module now supports passive mode and has doc strings. - In (ideally) all places where binary files are read or written, the file is now correctly opened in binary mode ('rb' or 'wb') so the code will work on Mac or PC. - Dummy versions of os.path.expandvars() and expanduser() are now provided on non-Unix platforms. - Module urllib now has two new functions url2pathname and pathname2url which turn local filenames into "file:..." URLs using the same rules as Netscape (why be different). it also supports urlretrieve() with a pathname parameter, and honors the proxy environment variables (http_proxy etc.). The URL parsing has been improved somewhat, too. - Micro improvements to urlparse. Added urlparse.urldefrag() which removes a trailing ``#fragment'' if any. - The mailbox module now supports MH style message delimiters as well. - The mhlib module contains some new functionality: setcontext() to set the current folder and parsesequence() to parse a sequence as commonly passed to MH commands (e.g. 1-10 or last:5). - New module mimify for conversion to and from MIME format of email messages. - Module ni now automatically installs itself when first imported -- this is against the normal rule that modules should define classes and functions but not invoke them, but appears more useful in the case that two different, independent modules want to use ni's features. - Some small performance enhancements in module pickle. - Small interface change to the profile.run*() family of functions -- more sensible handling of return values. - The officially registered Mac creator for Python files is 'Pyth'. This replaces 'PYTH' which was used before but never registered. - Added regsub.capwords(). (XXX) - Added string.capwords(), string.capitalize() and string.translate(). (XXX) - Fixed an interface bug in the rexec module: it was impossible to pass a hooks instance to the RExec class. rexec now also supports the dynamic loading of modules from shared libraries. Some other interfaces have been added too. - Module rfc822 now caches the headers in a dictionary for more efficient lookup. - The sgmllib module now understands a limited number of SGML "shorthands" like <A/.../ for <A>...</A>. (It's not clear that this was a good idea...) - The tempfile module actually tries a number of different places to find a usable temporary directory. (This was prompted by certain Linux installations that appear to be missing a /usr/tmp directory.) [A bug in the implementation that would ignore a pre-existing tmpdir global has been fixed in beta3.] - Much improved and enhanved FileDialog module for Tkinter. - Many small changes to Tkinter, to bring it more in line with Tk 4.0 (as well as Tk 4.1). - New socket interfaces include ntohs(), ntohl(), htons(), htonl(), and s.dup(). Sockets now work correctly on Windows. On Windows, the built-in extension is called _socket and a wrapper module win/socket.py provides "makefile()" and "dup()" functionality. On Windows, the select module works only with socket objects. - Bugs in bsddb module fixed (e.g. missing default argument values). - The curses extension now includes <ncurses.h> when available. - The gdbm module now supports opening databases in "fast" mode by specifying 'f' as the second character or the mode string. - new variables sys.prefix and sys.exec_prefix pass corresponding configuration options / Makefile variables to the Python programmer. - The ``new'' module now supports creating new user-defined classes as well as instances thereof. - The soundex module now sports get_soundex() to get the soundex value for an arbitrary string (formerly it would only do soundex-based string comparison) as well as doc strings. - New object type "cobject" to safely wrap void pointers for passing them between various extension modules. - More efficient computation of float**smallint. - The mysterious bug whereby "x.x" (two occurrences of the same one-character name) typed from the commandline would sometimes fail mysteriously. - The initialization of the readline function can now be invoked by a C extension through PyOS_ReadlineInit(). - There's now an externally visible pointer PyImport_FrozenModules which can be changed by an embedding application. - The argument parsing functions now support a new format character 'D' to specify complex numbers. - Various memory leaks plugged and bugs fixed. - Improved support for posix threads (now that real implementations are beginning to apepar). Still no fully functioning semaphores. - Some various and sundry improvements and new entries in the Tools directory. ===================================== ==> Release 1.3 (13 October 1995) <== ===================================== Major change ============ Two words: Keyword Arguments. See the first section of Chapter 12 of the Tutorial. (The rest of this file is textually the same as the remaining sections of that chapter.) Changes to the WWW and Internet tools ===================================== The "htmllib" module has been rewritten in an incompatible fashion. The new version is considerably more complete (HTML 2.0 except forms, but including all ISO-8859-1 entity definitions), and easy to use. Small changes to "sgmllib" have also been made, to better match the tokenization of HTML as recognized by other web tools. A new module "formatter" has been added, for use with the new "htmllib" module. The "urllib"and "httplib" modules have been changed somewhat to allow overriding unknown URL types and to support authentication. They now use "mimetools.Message" instead of "rfc822.Message" to parse headers. The "endrequest()" method has been removed from the HTTP class since it breaks the interaction with some servers. The "rfc822.Message" class has been changed to allow a flag to be passed in that says that the file is unseekable. The "ftplib" module has been fixed to be (hopefully) more robust on Linux. Several new operations that are optionally supported by servers have been added to "nntplib": "xover", "xgtitle", "xpath" and "date". Other Language Changes ====================== The "raise" statement now takes an optional argument which specifies the traceback to be used when printing the exception's stack trace. This must be a traceback object, such as found in "sys.exc_traceback". When omitted or given as "None", the old behavior (to generate a stack trace entry for the current stack frame) is used. The tokenizer is now more tolerant of alien whitespace. Control-L in the leading whitespace of a line resets the column number to zero, while Control-R just before the end of the line is ignored. Changes to Built-in Operations ============================== For file objects, "f.read(0)" and "f.readline(0)" now return an empty string rather than reading an unlimited number of bytes. For the latter, omit the argument altogether or pass a negative value. A new system variable, "sys.platform", has been added. It specifies the current platform, e.g. "sunos5" or "linux1". The built-in functions "input()" and "raw_input()" now use the GNU readline library when it has been configured (formerly, only interactive input to the interpreter itself was read using GNU readline). The GNU readline library provides elaborate line editing and history. The Python debugger ("pdb") is the first beneficiary of this change. Two new built-in functions, "globals()" and "locals()", provide access to dictionaries containming current global and local variables, respectively. (These augment rather than replace "vars()", which returns the current local variables when called without an argument, and a module's global variables when called with an argument of type module.) The built-in function "compile()" now takes a third possible value for the kind of code to be compiled: specifying "'single'" generates code for a single interactive statement, which prints the output of expression statements that evaluate to something else than "None". Library Changes =============== There are new module "ni" and "ihooks" that support importing modules with hierarchical names such as "A.B.C". This is enabled by writing "import ni; ni.ni()" at the very top of the main program. These modules are amply documented in the Python source. The module "rexec" has been rewritten (incompatibly) to define a class and to use "ihooks". The "string.split()" and "string.splitfields()" functions are now the same function (the presence or absence of the second argument determines which operation is invoked); similar for "string.join()" and "string.joinfields()". The "Tkinter" module and its helper "Dialog" have been revamped to use keyword arguments. Tk 4.0 is now the standard. A new module "FileDialog" has been added which implements standard file selection dialogs. The optional built-in modules "dbm" and "gdbm" are more coordinated --- their "open()" functions now take the same values for their "flag" argument, and the "flag" and "mode" argument have default values (to open the database for reading only, and to create the database with mode "0666" minuse the umask, respectively). The memory leaks have finally been fixed. A new dbm-like module, "bsddb", has been added, which uses the BSD DB package's hash method. A portable (though slow) dbm-clone, implemented in Python, has been added for systems where none of the above is provided. It is aptly dubbed "dumbdbm". The module "anydbm" provides a unified interface to "bsddb", "gdbm", "dbm", and "dumbdbm", choosing the first one available. A new extension module, "binascii", provides a variety of operations for conversion of text-encoded binary data. There are three new or rewritten companion modules implemented in Python that can encode and decode the most common such formats: "uu" (uuencode), "base64" and "binhex". A module to handle the MIME encoding quoted-printable has also been added: "quopri". The parser module (which provides an interface to the Python parser's abstract syntax trees) has been rewritten (incompatibly) by Fred Drake. It now lets you change the parse tree and compile the result! The \code{syslog} module has been upgraded and documented. Other Changes ============= The dynamic module loader recognizes the fact that different filenames point to the same shared library and loads the library only once, so you can have a single shared library that defines multiple modules. (SunOS / SVR4 style shared libraries only.) Jim Fulton's ``abstract object interface'' has been incorporated into the run-time API. For more detailes, read the files "Include/abstract.h" and "Objects/abstract.c". The Macintosh version is much more robust now. Numerous things I have forgotten or that are so obscure no-one will notice them anyway :-) =================================== ==> Release 1.2 (13 April 1995) <== =================================== - Changes to Misc/python-mode.el: - Wrapping and indentation within triple quote strings should work properly now. - `Standard' bug reporting mechanism (use C-c C-b) - py-mark-block was moved to C-c C-m - C-c C-v shows you the python-mode version - a basic python-font-lock-keywords has been added for Emacs 19 font-lock colorizations. - proper interaction with pending-del and del-sel modes. - New py-electric-colon (:) command for improved outdenting. Also py-indent-line (TAB) should handle outdented lines better. - New commands py-outdent-left (C-c C-l) and py-indent-right (C-c C-r) - The Library Reference has been restructured, and many new and existing modules are now documented, in particular the debugger and the profiler, as well as the persistency and the WWW/Internet support modules. - All known bugs have been fixed. For example the pow(2,2,3L) bug on Linux has been fixed. Also the re-entrancy problems with __del__ have been fixed. - All known memory leaks have been fixed. - Phase 2 of the Great Renaming has been executed. The header files now use the new names (PyObject instead of object, etc.). The linker also sees the new names. Most source files still use the old names, by virtue of the rename2.h header file. If you include Python.h, you only see the new names. Dynamically linked modules have to be recompiled. (Phase 3, fixing the rest of the sources, will be executed gradually with the release later versions.) - The hooks for implementing "safe-python" (better called "restricted execution") are in place. Specifically, the import statement is implemented by calling the built-in function __import__, and the built-in names used in a particular scope are taken from the dictionary __builtins__ in that scope's global dictionary. See also the new (unsupported, undocumented) module rexec.py. - The import statement now supports the syntax "import a.b.c" and "from a.b.c import name". No officially supported implementation exists, but one can be prototyped by replacing the built-in __import__ function. A proposal by Ken Manheimer is provided as newimp.py. - All machinery used by the import statement (or the built-in __import__ function) is now exposed through the new built-in module "imp" (see the library reference manual). All dynamic loading machinery is moved to the new file importdl.c. - Persistent storage is supported through the use of the modules "pickle" and "shelve" (implemented in Python). There's also a "copy" module implementing deepcopy and normal (shallow) copy operations. See the library reference manual. - Documentation strings for many object types are accessible through the __doc__ attribute. Modules, classes and functions support special syntax to initialize the __doc__ attribute: if the first statement consists of just a string literal, that string literal becomes the value of the __doc__ attribute. The default __doc__ attribute is None. Documentation strings are also supported for built-in functions, types and modules; however this feature hasn't been widely used yet. See the 'new' module for an example. (Basically, the type object's tp_doc field contains the doc string for the type, and the 4th member of the methodlist structure contains the doc string for the method.) - The __coerce__ and __cmp__ methods for user-defined classes once again work as expected. As an example, there's a new standard class Complex in the library. - The functions posix.popen() and posix.fdopen() now have an optional third argument to specify the buffer size, and default their second (mode) argument to 'r' -- in analogy to the built-in open() function. The same applies to posixfile.open() and the socket method makefile(). - The thread.exit_thread() function now raises SystemExit so that 'finally' clauses are honored and a memory leak is plugged. - Improved X11 and Motif support, by Sjoerd Mullender. This extension is being maintained and distributed separately. - Improved support for the Apple Macintosh, in part by Jack Jansen, e.g. interfaces to (a few) resource mananger functions, get/set file type and creator, gestalt, sound manager, speech manager, MacTCP, comm toolbox, and the think C console library. This is being maintained and distributed separately. - Improved version for Windows NT, by Mark Hammond. This is being maintained and distributed separately. - Used autoconf 2.0 to generate the configure script. Adapted configure.in to use the new features in autoconf 2.0. - It now builds on the NeXT without intervention, even on the 3.3 Sparc pre-release. - Characters passed to isspace() and friends are masked to nonnegative values. - Correctly compute pow(-3.0, 3). - Fix portability problems with getopt (configure now checks for a non-GNU getopt). - Don't add frozenmain.o to libPython.a. - Exceptions can now be classes. ALl built-in exceptions are still string objects, but this will change in the future. - The socket module exports a long list of socket related symbols. (More built-in modules will export their symbolic constants instead of relying on a separately generated Python module.) - When a module object is deleted, it clears out its own dictionary. This fixes a circularity in the references between functions and their global dictionary. - Changed the error handling by [new]getargs() e.g. for "O&". - Dynamic loading of modules using shared libraries is supported for several new platforms. - Support "O&", "[...]" and "{...}" in mkvalue(). - Extension to findmethod(): findmethodinchain() (where a chain is a linked list of methodlist arrays). The calling interface for findmethod() has changed: it now gets a pointer to the (static!) methodlist structure rather than just to the function name -- this saves copying flags etc. into the (short-lived) method object. - The callable() function is now public. - Object types can define a few new operations by setting function pointers in the type object structure: tp_call defines how an object is called, and tp_str defines how an object's str() is computed. =================================== ==> Release 1.1.1 (10 Nov 1994) <== =================================== This is a pure bugfix release again. See the ChangeLog file for details. One exception: a few new features were added to tkinter. ================================= ==> Release 1.1 (11 Oct 1994) <== ================================= This release adds several new features, improved configuration and portability, and fixes more bugs than I can list here (including some memory leaks). The source compiles and runs out of the box on more platforms than ever -- including Windows NT. Makefiles or projects for a variety of non-UNIX platforms are provided. APOLOGY: some new features are badly documented or not at all. I had the choice -- postpone the new release indefinitely, or release it now, with working code but some undocumented areas. The problem with postponing the release is that people continue to suffer from existing bugs, and send me patches based on the previous release -- which I can't apply directly because my own source has changed. Also, some new modules (like signal) have been ready for release for quite some time, and people are anxiously waiting for them. In the case of signal, the interface is simple enough to figure out without documentation (if you're anxious enough :-). In this case it was not simple to release the module on its own, since it relies on many small patches elsewhere in the source. For most new Python modules, the source code contains comments that explain how to use them. Documentation for the Tk interface, written by Matt Conway, is available as tkinter-doc.tar.gz from the Python home and mirror ftp sites (see Misc/FAQ for ftp addresses). For the new operator overloading facilities, have a look at Demo/classes: Complex.py and Rat.py show how to implement a numeric type without and with __coerce__ method. Also have a look at the end of the Tutorial document (Doc/tut.tex). If you're still confused: use the newsgroup or mailing list. New language features: - More flexible operator overloading for user-defined classes (INCOMPATIBLE WITH PREVIOUS VERSIONS!) See end of tutorial. - Classes can define methods named __getattr__, __setattr__ and __delattr__ to trap attribute accesses. See end of tutorial. - Classes can define method __call__ so instances can be called directly. See end of tutorial. New support facilities: - The Makefiles (for the base interpreter as well as for extensions) now support creating dynamically loadable modules if the platform supports shared libraries. - Passing the interpreter a .pyc file as script argument will execute the code in that file. (On the Mac such files can be double-clicked!) - New Freeze script, to create independently distributable "binaries" of Python programs -- look in Demo/freeze - Improved h2py script (in Demo/scripts) follows #includes and supports macros with one argument - New module compileall generates .pyc files for all modules in a directory (tree) without also executing them - Threads should work on more platforms New built-in modules: - tkinter (support for Tcl's Tk widget set) is now part of the base distribution - signal allows catching or ignoring UNIX signals (unfortunately still undocumented -- any taker?) - termios provides portable access to POSIX tty settings - curses provides an interface to the System V curses library - syslog provides an interface to the (BSD?) syslog daemon - 'new' provides interfaces to create new built-in object types (e.g. modules and functions) - sybase provides an interface to SYBASE database New/obsolete built-in methods: - callable(x) tests whether x can be called - sockets now have a setblocking() method - sockets no longer have an allowbroadcast() method - socket methods send() and sendto() return byte count New standard library modules: - types.py defines standard names for built-in types, e.g. StringType - urlparse.py parses URLs according to the latest Internet draft - uu.py does uuencode/uudecode (not the fastest in the world, but quicker than installing uuencode on a non-UNIX machine :-) - New, faster and more powerful profile module.py - mhlib.py provides interface to MH folders and messages New facilities for extension writers (unfortunately still undocumented): - newgetargs() supports optional arguments and improved error messages - O!, O& O? formats for getargs allow more versatile type checking of non-standard types - can register pending asynchronous callback, to be called the next time the Python VM begins a new instruction (Py_AddPendingCall) - can register cleanup routines to be called when Python exits (Py_AtExit) - makesetup script understands C++ files in Setup file (use file.C or file.cc) - Make variable OPT is passed on to sub-Makefiles - An init<module>() routine may signal an error by not entering the module in the module table and raising an exception instead - For long module names, instead of foobarbletchmodule.c you can use foobarbletch.c - getintvalue() and getfloatvalue() try to convert any object instead of requiring an "intobject" or "floatobject" - All the [new]getargs() formats that retrieve an integer value will now also work if a float is passed - C function listtuple() converts list to tuple, fast - You should now call sigcheck() instead of intrcheck(); sigcheck() also sets an exception when it returns nonzero ==================================== ==> Release 1.0.3 (14 July 1994) <== ==================================== This release consists entirely of bug fixes to the C sources; see the head of ../ChangeLog for a complete list. Most important bugs fixed: - Sometimes the format operator (string%expr) would drop the last character of the format string - Tokenizer looped when last line did not end in \n - Bug when triple-quoted string ended in quote plus newline - Typo in socketmodule (listen) (== instead of =) - typing vars() at the >>> prompt would cause recursive output ================================== ==> Release 1.0.2 (4 May 1994) <== ================================== Overview of the most visible changes. Bug fixes are not listed. See also ChangeLog. Tokens ------ * String literals follow Standard C rules: they may be continued on the next line using a backslash; adjacent literals are concatenated at compile time. * A new kind of string literals, surrounded by triple quotes (""" or '''), can be continued on the next line without a backslash. Syntax ------ * Function arguments may have a default value, e.g. def f(a, b=1); defaults are evaluated at function definition time. This also applies to lambda. * The try-except statement has an optional else clause, which is executed when no exception occurs in the try clause. Interpreter ----------- * The result of a statement-level expression is no longer printed, except_ for expressions entered interactively. Consequently, the -k command line option is gone. * The result of the last printed interactive expression is assigned to the variable '_'. * Access to implicit global variables has been speeded up by removing an always-failing dictionary lookup in the dictionary of local variables (mod suggested by Steve Makewski and Tim Peters). * There is a new command line option, -u, to force stdout and stderr to be unbuffered. * Incorporated Steve Majewski's mods to import.c for dynamic loading under AIX. * Fewer chances of dumping core when trying to reload or re-import static built-in, dynamically loaded built-in, or frozen modules. * Loops over sequences now don't ask for the sequence's length when they start, but try to access items 0, 1, 2, and so on until they hit an IndexError. This makes it possible to create classes that generate infinite or indefinite sequences a la Steve Majewski. This affects for loops, the (not) in operator, and the built-in functions filter(), map(), max(), min(), reduce(). Changed Built-in operations --------------------------- * The '%' operator on strings (printf-style formatting) supports a new feature (adapted from a patch by Donald Beaudry) to allow '%(<key>)<format>' % {...} to take values from a dictionary by name instead of from a tuple by position (see also the new function vars()). * The '%s' formatting operator is changed to accept any type and convert it to a string using str(). * Dictionaries with more than 20,000 entries can now be created (thanks to Steve Kirsch). New Built-in Functions ---------------------- * vars() returns a dictionary containing the local variables; vars(m) returns a dictionary containing the variables of module m. Note: dir(x) is now equivalent to vars(x).keys(). Changed Built-in Functions -------------------------- * open() has an optional third argument to specify the buffer size: 0 for unbuffered, 1 for line buffered, >1 for explicit buffer size, <0 for default. * open()'s second argument is now optional; it defaults to "r". * apply() now checks that its second argument is indeed a tuple. New Built-in Modules -------------------- Changed Built-in Modules ------------------------ The thread module no longer supports exit_prog(). New Python Modules ------------------ * Module addpack contains a standard interface to modify sys.path to find optional packages (groups of related modules). * Module urllib contains a number of functions to access World-Wide-Web files specified by their URL. * Module httplib implements the client side of the HTTP protocol used by World-Wide-Web servers. * Module gopherlib implements the client side of the Gopher protocol. * Module mailbox (by Jack Jansen) contains a parser for UNIX and MMDF style mailbox files. * Module random contains various random distributions, e.g. gauss(). * Module lockfile locks and unlocks open files using fcntl (inspired by a similar module by Andy Bensky). * Module ntpath (by Jaap Vermeulen) implements path operations for Windows/NT. * Module test_thread (in Lib/test) contains a small test set for the thread module. Changed Python Modules ---------------------- * The string module's expandvars() function is now documented and is implemented in Python (using regular expressions) instead of forking off a shell process. * Module rfc822 now supports accessing the header fields using the mapping/dictionary interface, e.g. h['subject']. * Module pdb now makes it possible to set a break on a function (syntax: break <expression>, where <expression> yields a function object). Changed Demos ------------- * The Demo/scripts/freeze.py script is working again (thanks to Jaap Vermeulen). New Demos --------- * Demo/threads/Generator.py is a proposed interface for restartable functions a la Tim Peters. * Demo/scripts/newslist.py, by Quentin Stafford-Fraser, generates a directory full of HTML pages which between them contain links to all the newsgroups available on your server. * Demo/dns contains a DNS (Domain Name Server) client. * Demo/lutz contains miscellaneous demos by Mark Lutz (e.g. psh.py, a nice enhanced Python shell!!!). * Demo/turing contains a Turing machine by Amrit Prem. Documentation ------------- * Documented new language features mentioned above (but not all new modules). * Added a chapter to the Tutorial describing recent additions to Python. * Clarified some sentences in the reference manual, e.g. break/continue, local/global scope, slice assignment. Source Structure ---------------- * Moved Include/tokenizer.h to Parser/tokenizer.h. * Added Python/getopt.c for systems that don't have it. Emacs mode ---------- * Indentation of continuated lines is done more intelligently; consequently the variable py-continuation-offset is gone. ======================================== ==> Release 1.0.1 (15 February 1994) <== ======================================== * Many portability fixes should make it painless to build Python on several new platforms, e.g. NeXT, SEQUENT, WATCOM, DOS, and Windows. * Fixed test for <stdarg.h> -- this broke on some platforms. * Fixed test for shared library dynalic loading -- this broke on SunOS 4.x using the GNU loader. * Changed order and number of SVR4 networking libraries (it is now -lsocket -linet -lnsl, if these libraries exist). * Installing the build intermediate stages with "make libainstall" now also installs config.c.in, Setup and makesetup, which are used by the new Extensions mechanism. * Improved README file contains more hints and new troubleshooting section. * The built-in module strop now defines fast versions of three more functions of the standard string module: atoi(), atol() and atof(). The strop versions of atoi() and atol() support an optional second argument to specify the base (default 10). NOTE: you don't have to explicitly import strop to use the faster versions -- the string module contains code to let versions from stop override the default versions. * There is now a working Lib/dospath.py for those who use Python under DOS (or Windows). Thanks, Jaap! * There is now a working Modules/dosmodule.c for DOS (or Windows) system calls. * Lib.os.py has been reorganized (making it ready for more operating systems). * Lib/ospath.py is now obsolete (use os.path instead). * Many fixes to the tutorial to make it match Python 1.0. Thanks, Tim! * Fixed Doc/Makefile, Doc/README and various scripts there. * Added missing description of fdopen to Doc/libposix.tex. * Made cleanup() global, for the benefit of embedded applications. * Added parsing of addresses and dates to Lib/rfc822.py. * Small fixes to Lib/aifc.py, Lib/sunau.py, Lib/tzparse.py to make them usable at all. * New module Lib/wave.py reads RIFF (*.wav) audio files. * Module Lib/filewin.py moved to Lib/stdwin/filewin.py where it belongs. * New options and comments for Modules/makesetup (used by new Extension mechanism). * Misc/HYPE contains text of announcement of 1.0.0 in comp.lang.misc and elsewhere. * Fixed coredump in filter(None, 'abcdefg'). ======================================= ==> Release 1.0.0 (26 January 1994) <== ======================================= As is traditional, so many things have changed that I can't pretend to be complete in these release notes, but I'll try anyway :-) Note that the very last section is labeled "remaining bugs". Source organization and build process ------------------------------------- * The sources have finally been split: instead of a single src subdirectory there are now separate directories Include, Parser, Grammar, Objects, Python and Modules. Other directories also start with a capital letter: Misc, Doc, Lib, Demo. * A few extensions (notably Amoeba and X support) have been moved to a separate subtree Extensions, which is no longer in the core distribution, but separately ftp'able as extensions.tar.Z. (The distribution contains a placeholder Ext-dummy with a description of the Extensions subtree as well as the most recent versions of the scripts used there.) * A few large specialized demos (SGI video and www) have been moved to a separate subdirectory Demo2, which is no longer in the core distribution, but separately ftp'able as demo2.tar.Z. * Parts of the standard library have been moved to subdirectories: there are now standard subdirectories stdwin, test, sgi and sun4. * The configuration process has radically changed: I now use GNU autoconf. This makes it much easier to build on new Unix flavors, as well as fully supporting VPATH (if your Make has it). The scripts Configure.py and Addmodule.sh are no longer needed. Many source files have been adapted in order to work with the symbols that the configure script generated by autoconf defines (or not); the resulting source is much more portable to different C compilers and operating systems, even non Unix systems (a Mac port was done in an afternoon). See the toplevel README file for a description of the new build process. * GNU readline (a slightly newer version) is now a subdirectory of the Python toplevel. It is still not automatically configured (being totally autoconf-unaware :-). One problem has been solved: typing Control-C to a readline prompt will now work. The distribution no longer contains a "super-level" directory (above the python toplevel directory), and dl, dl-dld and GNU dld are no longer part of the Python distribution (you can still ftp them from ftp.cwi.nl:/pub/dynload). * The DOS functions have been taken out of posixmodule.c and moved into a separate file dosmodule.c. * There's now a separate file version.c which contains nothing but the version number. * The actual main program is now contained in config.c (unless NO_MAIN is defined); pythonmain.c now contains a function realmain() which is called from config.c's main(). * All files needed to use the built-in module md5 are now contained in the distribution. The module has been cleaned up considerably. Documentation ------------- * The library manual has been split into many more small latex files, so it is easier to edit Doc/lib.tex file to create a custom library manual, describing only those modules supported on your system. (This is not automated though.) * A fourth manual has been added, titled "Extending and Embedding the Python Interpreter" (Doc/ext.tex), which collects information about the interpreter which was previously spread over several files in the misc subdirectory. * The entire documentation is now also available on-line for those who have a WWW browser (e.g. NCSA Mosaic). Point your browser to the URL "http://www.cwi.nl/~guido/Python.html". Syntax ------ * Strings may now be enclosed in double quotes as well as in single quotes. There is no difference in interpretation. The repr() of string objects will use double quotes if the string contains a single quote and no double quotes. Thanks to Amrit Prem for these changes! * There is a new keyword 'exec'. This replaces the exec() built-in function. If a function contains an exec statement, local variable optimization is not performed for that particular function, thus making assignment to local variables in exec statements less confusing. (As a consequence, os.exec and python.exec have been renamed to execv.) * There is a new keyword 'lambda'. An expression of the form lambda <parameters> : <expression> yields an anonymous function. This is really only syntactic sugar; you can just as well define a local function using def some_temporary_name(<parameters>): return <expression> Lambda expressions are particularly useful in combination with map(), filter() and reduce(), described below. Thanks to Amrit Prem for submitting this code (as well as map(), filter(), reduce() and xrange())! Built-in functions ------------------ * The built-in module containing the built-in functions is called __builtin__ instead of builtin. * New built-in functions map(), filter() and reduce() perform standard functional programming operations (though not lazily): - map(f, seq) returns a new sequence whose items are the items from seq with f() applied to them. - filter(f, seq) returns a subsequence of seq consisting of those items for which f() is true. - reduce(f, seq, initial) returns a value computed as follows: acc = initial for item in seq: acc = f(acc, item) return acc * New function xrange() creates a "range object". Its arguments are the same as those of range(), and when used in a for loop a range objects also behaves identical. The advantage of xrange() over range() is that its representation (if the range contains many elements) is much more compact than that of range(). The disadvantage is that the result cannot be used to initialize a list object or for the "Python idiom" [RED, GREEN, BLUE] = range(3). On some modern architectures, benchmarks have shown that "for i in range(...): ..." actually executes *faster* than "for i in xrange(...): ...", but on memory starved machines like PCs running DOS range(100000) may be just too big to be represented at all... * Built-in function exec() has been replaced by the exec statement -- see above. The interpreter --------------- * Syntax errors are now not printed to stderr by the parser, but rather the offending line and other relevant information are packed up in the SyntaxError exception argument. When the main loop catches a SyntaxError exception it will print the error in the same format as previously, but at the proper position in the stack traceback. * You can now set a maximum to the number of traceback entries printed by assigning to sys.tracebacklimit. The default is 1000. * The version number in .pyc files has changed yet again. * It is now possible to have a .pyc file without a corresponding .py file. (Warning: this may break existing installations if you have an old .pyc file lingering around somewhere on your module search path without a corresponding .py file, when there is a .py file for a module of the same name further down the path -- the new interpreter will find the first .pyc file and complain about it, while the old interpreter would ignore it and use the .py file further down.) * The list sys.builtin_module_names is now sorted and also contains the names of a few hardwired built-in modules (sys, __main__ and __builtin__). * A module can now find its own name by accessing the global variable __name__. Assigning to this variable essentially renames the module (it should also be stored under a different key in sys.modules). A neat hack follows from this: a module that wants to execute a main program when called as a script no longer needs to compare sys.argv[0]; it can simply do "if __name__ == '__main__': main()". * When an object is printed by the print statement, its implementation of str() is used. This means that classes can define __str__(self) to direct how their instances are printed. This is different from __repr__(self), which should define an unambigous string representation of the instance. (If __str__() is not defined, it defaults to __repr__().) * Functions and code objects can now be compared meaningfully. * On systems supporting SunOS or SVR4 style shared libraries, dynamic loading of modules using shared libraries is automatically configured. Thanks to Bill Jansen and Denis Severson for contributing this change! Built-in objects ---------------- * File objects have acquired a new method writelines() which is the reverse of readlines(). (It does not actually write lines, just a list of strings, but the symmetry makes the choice of name OK.) Built-in modules ---------------- * Socket objects no longer support the avail() method. Use the select module instead, or use this function to replace it: def avail(f): import select return f in select.select([f], [], [], 0)[0] * Initialization of stdwin is done differently. It actually modifies sys.argv (taking out the options the X version of stdwin recognizes) the first time it is imported. * A new built-in module parser provides a rudimentary interface to the python parser. Corresponding standard library modules token and symbol defines the numeric values of tokens and non-terminal symbols. * The posix module has acquired new functions setuid(), setgid(), execve(), and exec() has been renamed to execv(). * The array module is extended with 8-byte object swaps, the 'i' format character, and a reverse() method. The read() and write() methods are renamed to fromfile() and tofile(). * The rotor module has freed of portability bugs. This introduces a backward compatibility problem: strings encoded with the old rotor module can't be decoded by the new version. * For select.select(), a timeout (4th) argument of None means the same as leaving the timeout argument out. * Module strop (and hence standard library module string) has acquired a new function: rindex(). Thanks to Amrit Prem! * Module regex defines a new function symcomp() which uses an extended regular expression syntax: parenthesized subexpressions may be labeled using the form "\(<labelname>...\)", and the group() method can return sub-expressions by name. Thanks to Tracy Tims for these changes! * Multiple threads are now supported on Solaris 2. Thanks to Sjoerd Mullender! Standard library modules ------------------------ * The library is now split in several subdirectories: all stuff using stdwin is in Lib/stdwin, all SGI specific (or SGI Indigo or GL) stuff is in Lib/sgi, all Sun Sparc specific stuff is in Lib/sun4, and all test modules are in Lib/test. The default module search path will include all relevant subdirectories by default. * Module os now knows about trying to import dos. It defines functions execl(), execle(), execlp() and execvp(). * New module dospath (should be attacked by a DOS hacker though). * All modules defining classes now define __init__() constructors instead of init() methods. THIS IS AN INCOMPATIBLE CHANGE! * Some minor changes and bugfixes module ftplib (mostly Steve Majewski's suggestions); the debug() method is renamed to set_debuglevel(). * Some new test modules (not run automatically by testall though): test_audioop, test_md5, test_rgbimg, test_select. * Module string now defines rindex() and rfind() in analogy of index() and find(). It also defines atof() and atol() (and corresponding exceptions) in analogy to atoi(). * Added help() functions to modules profile and pdb. * The wdb debugger (now in Lib/stdwin) now shows class or instance variables on a double click. Thanks to Sjoerd Mullender! * The (undocumented) module lambda has gone -- you couldn't import it any more, and it was basically more a demo than a library module... Multimedia extensions --------------------- * The optional built-in modules audioop and imageop are now standard parts of the interpreter. Thanks to Sjoerd Mullender and Jack Jansen for contributing this code! * There's a new operation in audioop: minmax(). * There's a new built-in module called rgbimg which supports portable efficient reading of SGI RCG image files. Thanks also to Paul Haeberli for the original code! (Who will contribute a GIF reader?) * The module aifc is gone -- you should now always use aifc, which has received a facelift. * There's a new module sunau., for reading Sun (and NeXT) audio files. * There's a new module audiodev which provides a uniform interface to (SGI Indigo and Sun Sparc) audio hardware. * There's a new module sndhdr which recognizes various sound files by looking in their header and checking for various magic words. Optimizations ------------- * Most optimizations below can be configured by compile-time flags. Thanks to Sjoerd Mullender for submitting these optimizations! * Small integers (default -1..99) are shared -- i.e. if two different functions compute the same value it is possible (but not guaranteed!!!) that they return the same *object*. Python programs can detect this but should *never* rely on it. * Empty tuples (which all compare equal) are shared in the same manner. * Tuples of size up to 20 (default) are put in separate free lists when deallocated. * There is a compile-time option to cache a string's hash function, but this appeared to have a negligeable effect, and as it costs 4 bytes per string it is disabled by default. Embedding Python ---------------- * The initialization interface has been simplified somewhat. You now only call "initall()" to initialize the interpreter. * The previously announced renaming of externally visible identifiers has not been carried out. It will happen in a later release. Sorry. Miscellaneous bugs that have been fixed --------------------------------------- * All known portability bugs. * Version 0.9.9 dumped core in <listobject>.sort() which has been fixed. Thanks to Jaap Vermeulen for fixing this and posting the fix on the mailing list while I was away! * Core dump on a format string ending in '%', e.g. in the expression '%' % None. * The array module yielded a bogus result for concatenation (a+b would yield a+a). * Some serious memory leaks in strop.split() and strop.splitfields(). * Several problems with the nis module. * Subtle problem when copying a class method from another class through assignment (the method could not be called). Remaining bugs -------------- * One problem with 64-bit machines remains -- since .pyc files are portable and use only 4 bytes to represent an integer object, 64-bit integer literals are silently truncated when written into a .pyc file. Work-around: use eval('123456789101112'). * The freeze script doesn't work any more. A new and more portable one can probably be cooked up using tricks from Extensions/mkext.py. * The dos support hasn't been tested yet. (Really Soon Now we should have a PC with a working C compiler!) =================================== ==> Release 0.9.9 (29 Jul 1993) <== =================================== I *believe* these are the main user-visible changes in this release, but there may be others. SGI users may scan the {src,lib}/ChangeLog files for improvements of some SGI specific modules, e.g. aifc and cl. Developers of extension modules should also read src/ChangeLog. Naming of C symbols used by the Python interpreter -------------------------------------------------- * This is the last release using the current naming conventions. New naming conventions are explained in the file misc/NAMING. Summarizing, all externally visible symbols get (at least) a "Py" prefix, and most functions are renamed to the standard form PyModule_FunctionName. * Writers of extensions are urged to start using the new naming conventions. The next release will use the new naming conventions throughout (it will also have a different source directory structure). * As a result of the preliminary work for the great renaming, many functions that were accidentally global have been made static. BETA X11 support ---------------- * There are now modules interfacing to the X11 Toolkit Intrinsics, the Athena widgets, and the Motif 1.1 widget set. These are not yet documented except through the examples and README file in the demo/x11 directory. It is expected that this interface will be replaced by a more powerful and correct one in the future, which may or may not be backward compatible. In other words, this part of the code is at most BETA level software! (Note: the rest of Python is rock solid as ever!) * I understand that the above may be a bit of a disappointment, however my current schedule does not allow me to change this situation before putting the release out of the door. By releasing it undocumented and buggy, at least some of the (working!) demo programs, like itr (my Internet Talk Radio browser) become available to a larger audience. * There are also modules interfacing to SGI's "Glx" widget (a GL window wrapped in a widget) and to NCSA's "HTML" widget (which can format HyperText Markup Language, the document format used by the World Wide Web). * I've experienced some problems when building the X11 support. In particular, the Xm and Xaw widget sets don't go together, and it appears that using X11R5 is better than using X11R4. Also the threads module and its link time options may spoil things. My own strategy is to build two Python binaries: one for use with X11 and one without it, which can contain a richer set of built-in modules. Don't even *think* of loading the X11 modules dynamically... Environmental changes --------------------- * Compiled files (*.pyc files) created by this Python version are incompatible with those created by the previous version. Both versions detect this and silently create a correct version, but it means that it is not a good idea to use the same library directory for an old and a new interpreter, since they will start to "fight" over the *.pyc files... * When a stack trace is printed, the exception is printed last instead of first. This means that if the beginning of the stack trace scrolled out of your window you can still see what exception caused it. * Sometimes interrupting a Python operation does not work because it hangs in a blocking system call. You can now kill the interpreter by interrupting it three times. The second time you interrupt it, a message will be printed telling you that the third interrupt will kill the interpreter. The "sys.exitfunc" feature still makes limited clean-up possible in this case. Changes to the command line interface ------------------------------------- * The python usage message is now much more informative. * New option -i enters interactive mode after executing a script -- useful for debugging. * New option -k raises an exception when an expression statement yields a value other than None. * For each option there is now also a corresponding environment variable. Using Python as an embedded language ------------------------------------ * The distribution now contains (some) documentation on the use of Python as an "embedded language" in other applications, as well as a simple example. See the file misc/EMBEDDING and the directory embed/. Speed improvements ------------------ * Function local variables are now generally stored in an array and accessed using an integer indexing operation, instead of through a dictionary lookup. (This compensates the somewhat slower dictionary lookup caused by the generalization of the dictionary module.) Changes to the syntax --------------------- * Continuation lines can now *sometimes* be written without a backslash: if the continuation is contained within nesting (), [] or {} brackets the \ may be omitted. There's a much improved python-mode.el in the misc directory which knows about this as well. * You can no longer use an empty set of parentheses to define a class without base classes. That is, you no longer write this: class Foo(): # syntax error ... You must write this instead: class Foo: ... This was already the preferred syntax in release 0.9.8 but many people seemed not to have picked it up. There's a Python script that fixes old code: demo/scripts/classfix.py. * There's a new reserved word: "access". The syntax and semantics are still subject of research and debate (as well as undocumented), but the parser knows about the keyword so you must not use it as a variable, function, or attribute name. Changes to the semantics of the language proper ----------------------------------------------- * The following compatibility hack is removed: if a function was defined with two or more arguments, and called with a single argument that was a tuple with just as many arguments, the items of this tuple would be used as the arguments. This is no longer supported. Changes to the semantics of classes and instances ------------------------------------------------- * Class variables are now also accessible as instance variables for reading (assignment creates an instance variable which overrides the class variable of the same name though). * If a class attribute is a user-defined function, a new kind of object is returned: an "unbound method". This contains a pointer to the class and can only be called with a first argument which is a member of that class (or a derived class). * If a class defines a method __init__(self, arg1, ...) then this method is called when a class instance is created by the classname() construct. Arguments passed to classname() are passed to the __init__() method. The __init__() methods of base classes are not automatically called; the derived __init__() method must call these if necessary (this was done so the derived __init__() method can choose the call order and arguments for the base __init__() methods). * If a class defines a method __del__(self) then this method is called when an instance of the class is about to be destroyed. This makes it possible to implement clean-up of external resources attached to the instance. As with __init__(), the __del__() methods of base classes are not automatically called. If __del__ manages to store a reference to the object somewhere, its destruction is postponed; when the object is again about to be destroyed its __del__() method will be called again. * Classes may define a method __hash__(self) to allow their instances to be used as dictionary keys. This must return a 32-bit integer. Minor improvements ------------------ * Function and class objects now know their name (the name given in the 'def' or 'class' statement that created them). * Class instances now know their class name. Additions to built-in operations -------------------------------- * The % operator with a string left argument implements formatting similar to sprintf() in C. The right argument is either a single value or a tuple of values. All features of Standard C sprintf() are supported except %p. * Dictionaries now support almost any key type, instead of just strings. (The key type must be an immutable type or must be a class instance where the class defines a method __hash__(), in order to avoid losing track of keys whose value may change.) * Built-in methods are now compared properly: when comparing x.meth1 and y.meth2, if x is equal to y and the methods are defined by the same function, x.meth1 compares equal to y.meth2. Additions to built-in functions ------------------------------- * str(x) returns a string version of its argument. If the argument is a string it is returned unchanged, otherwise it returns `x`. * repr(x) returns the same as `x`. (Some users found it easier to have this as a function.) * round(x) returns the floating point number x rounded to a whole number, represented as a floating point number. round(x, n) returns x rounded to n digits. * hasattr(x, name) returns true when x has an attribute with the given name. * hash(x) returns a hash code (32-bit integer) of an arbitrary immutable object's value. * id(x) returns a unique identifier (32-bit integer) of an arbitrary object. * compile() compiles a string to a Python code object. * exec() and eval() now support execution of code objects. Changes to the documented part of the library (standard modules) ---------------------------------------------------------------- * os.path.normpath() (a.k.a. posixpath.normpath()) has been fixed so the border case '/foo/..' returns '/' instead of ''. * A new function string.find() is added with similar semantics to string.index(); however when it does not find the given substring it returns -1 instead of raising string.index_error. Changes to built-in modules --------------------------- * New optional module 'array' implements operations on sequences of integers or floating point numbers of a particular size. This is useful to manipulate large numerical arrays or to read and write binary files consisting of numerical data. * Regular expression objects created by module regex now support a new method named group(), which returns one or more \(...\) groups by number. The number of groups is increased from 10 to 100. * Function compile() in module regex now supports an optional mapping argument; a variable casefold is added to the module which can be used as a standard uppercase to lowercase mapping. * Module time now supports many routines that are defined in the Standard C time interface (<time.h>): gmtime(), localtime(), asctime(), ctime(), mktime(), as well as these variables (taken from System V): timezone, altzone, daylight and tzname. (The corresponding functions in the undocumented module calendar have been removed; the undocumented and unfinished module tzparse is now obsolete and will disappear in a future release.) * Module strop (the fast built-in version of standard module string) now uses C's definition of whitespace instead of fixing it to space, tab and newline; in practice this usually means that vertical tab, form feed and return are now also considered whitespace. It exports the string of characters that are considered whitespace as well as the characters that are considered lowercase or uppercase. * Module sys now defines the variable builtin_module_names, a list of names of modules built into the current interpreter (including not yet imported, but excluding two special modules that always have to be defined -- sys and builtin). * Objects created by module sunaudiodev now also support flush() and close() methods. * Socket objects created by module socket now support an optional flags argument for their methods sendto() and recvfrom(). * Module marshal now supports dumping to and loading from strings, through the functions dumps() and loads(). * Module stdwin now supports some new functionality. You may have to ftp the latest version: ftp.cwi.nl:/pub/stdwin/stdwinforviews.tar.Z.) Bugs fixed ---------- * Fixed comparison of negative long integers. * The tokenizer no longer botches input lines longer than BUFSIZ. * Fixed several severe memory leaks in module select. * Fixed memory leaks in modules socket and sv. * Fixed memory leak in divmod() for long integers. * Problems with definition of floatsleep() on Suns fixed. * Many portability bugs fixed (and undoubtedly new ones added :-). Changes to the build procedure ------------------------------ * The Makefile supports some new targets: "make default" and "make all". Both are by normally equivalent to "make python". * The Makefile no longer uses $> since it's not supported by all versions of Make. * The header files now all contain #ifdef constructs designed to make it safe to include the same header file twice, as well as support for inclusion from C++ programs (automatic extern "C" { ... } added). Freezing Python scripts ----------------------- * There is now some support for "freezing" a Python script as a stand-alone executable binary file. See the script demo/scripts/freeze.py. It will require some site-specific tailoring of the script to get this working, but is quite worthwhile if you write Python code for other who may not have built and installed Python. MS-DOS ------ * A new MS-DOS port has been done, using MSC 6.0 (I believe). Thanks, Marcel van der Peijl! This requires fewer compatibility hacks in posixmodule.c. The executable is not yet available but will be soon (check the mailing list). * The default PYTHONPATH has changed. Changes for developers of extension modules ------------------------------------------- * Read src/ChangeLog for full details. SGI specific changes -------------------- * Read src/ChangeLog for full details. ================================== ==> Release 0.9.8 (9 Jan 1993) <== ================================== I claim no completeness here, but I've tried my best to scan the log files throughout my source tree for interesting bits of news. A more complete account of the changes is to be found in the various ChangeLog files. See also "News for release 0.9.7beta" below if you're still using release 0.9.6, and the file HISTORY if you have an even older release. --Guido Changes to the language proper ------------------------------ There's only one big change: the conformance checking for function argument lists (of user-defined functions only) is stricter. Earlier, you could get away with the following: (a) define a function of one argument and call it with any number of arguments; if the actual argument count wasn't one, the function would receive a tuple containing the arguments (an empty tuple if there were none). (b) define a function of two arguments, and call it with more than two arguments; if there were more than two arguments, the second argument would be passed as a tuple containing the second and further actual arguments. (Note that an argument (formal or actual) that is a tuple is counted as one; these rules don't apply inside such tuples, only at the top level of the argument list.) Case (a) was needed to accommodate variable-length argument lists; there is now an explicit "varargs" feature (precede the last argument with a '*'). Case (b) was needed for compatibility with old class definitions: up to release 0.9.4 a method with more than one argument had to be declared as "def meth(self, (arg1, arg2, ...)): ...". Version 0.9.6 provide better ways to handle both casees, bot provided backward compatibility; version 0.9.8 retracts the compatibility hacks since they also cause confusing behavior if a function is called with the wrong number of arguments. There's a script that helps converting classes that still rely on (b), provided their methods' first argument is called "self": demo/scripts/methfix.py. If this change breaks lots of code you have developed locally, try #defining COMPAT_HACKS in ceval.c. (There's a third compatibility hack, which is the reverse of (a): if a function is defined with two or more arguments, and called with a single argument that is a tuple with just as many arguments, the items of this tuple will be used as the arguments. Although this can (and should!) be done using the built-in function apply() instead, it isn't withdrawn yet.) One minor change: comparing instance methods works like expected, so that if x is an instance of a user-defined class and has a method m, then (x.m==x.m) yields 1. The following was already present in 0.9.7beta, but not explicitly mentioned in the NEWS file: user-defined classes can now define types that behave in almost allrespects like numbers. See demo/classes/Rat.py for a simple example. Changes to the build process ---------------------------- The Configure.py script and the Makefile has been made somewhat more bullet-proof, after reports of (minor) trouble on certain platforms. There is now a script to patch Makefile and config.c to add a new optional built-in module: Addmodule.sh. Read the script before using! Using Addmodule.sh, all optional modules can now be configured at compile time using Configure.py, so there are no modules left that require dynamic loading. The Makefile has been fixed to make it easier to use with the VPATH feature of some Make versions (e.g. SunOS). Changes affecting portability ----------------------------- Several minor portability problems have been solved, e.g. "malloc.h" has been renamed to "mymalloc.h", "strdup.c" is no longer used, and the system now tolerates malloc(0) returning 0. For dynamic loading on the SGI, Jack Jansen's dl 1.6 is now distributed with Python. This solves several minor problems, in particular scripts invoked using #! can now use dynamic loading. Changes to the interpreter interface ------------------------------------ On popular demand, there's finally a "profile" feature for interactive use of the interpreter. If the environment variable $PYTHONSTARTUP is set to the name of an existing file, Python statements in this file are executed when the interpreter is started in interactive mode. There is a new clean-up mechanism, complementing try...finally: if you assign a function object to sys.exitfunc, it will be called when Python exits or receives a SIGTERM or SIGHUP signal. The interpreter is now generally assumed to live in /usr/local/bin/python (as opposed to /usr/local/python). The script demo/scripts/fixps.py will update old scripts in place (you can easily modify it to do other similar changes). Most I/O that uses sys.stdin/stdout/stderr will now use any object assigned to those names as long as the object supports readline() or write() methods. The parser stack has been increased to 500 to accommodate more complicated expressions (7 levels used to be the practical maximum, it's now about 38). The limit on the size of the *run-time* stack has completely been removed -- this means that tuple or list displays can contain any number of elements (formerly more than 50 would crash the interpreter). Changes to existing built-in functions and methods -------------------------------------------------- The built-in functions int(), long(), float(), oct() and hex() now also apply to class instalces that define corresponding methods (__int__ etc.). New built-in functions ---------------------- The new functions str() and repr() convert any object to a string. The function repr(x) is in all respects equivalent to `x` -- some people prefer a function for this. The function str(x) does the same except if x is already a string -- then it returns x unchanged (repr(x) adds quotes and escapes "funny" characters as octal escapes). The new function cmp(x, y) returns -1 if x<y, 0 if x==y, 1 if x>y. Changes to general built-in modules ----------------------------------- The time module's functions are more general: time() returns a floating point number and sleep() accepts one. Their accuracies depends on the precision of the system clock. Millisleep is no longer needed (although it still exists for now), but millitimer is still needed since on some systems wall clock time is only available with seconds precision, while a source of more precise time exists that isn't synchronized with the wall clock. (On UNIX systems that support the BSD gettimeofday() function, time.time() is as time.millitimer().) The string representation of a file object now includes an address: '<file 'filename', mode 'r' at #######>' where ###### is a hex number (the object's address) to make it unique. New functions added to posix: nice(), setpgrp(), and if your system supports them: setsid(), setpgid(), tcgetpgrp(), tcsetpgrp(). Improvements to the socket module: socket objects have new methods getpeername() and getsockname(), and the {get,set}sockopt methods can now get/set any kind of option using strings built with the new struct module. And there's a new function fromfd() which creates a socket object given a file descriptor (useful for servers started by inetd, which have a socket connected to stdin and stdout). Changes to SGI-specific built-in modules ---------------------------------------- The FORMS library interface (fl) now requires FORMS 2.1a. Some new functions have been added and some bugs have been fixed. Additions to al (audio library interface): added getname(), getdefault() and getminmax(). The gl modules doesn't call "foreground()" when initialized (this caused some problems) like it dit in 0.9.7beta (but not before). There's a new gl function 'gversion() which returns a version string. The interface to sv (Indigo video interface) has totally changed. (Sorry, still no documentation, but see the examples in demo/sgi/{sv,video}.) Changes to standard library modules ----------------------------------- Most functions in module string are now much faster: they're actually implemented in C. The module containing the C versions is called "strop" but you should still import "string" since strop doesn't provide all the interfaces defined in string (and strop may be renamed to string when it is complete in a future release). string.index() now accepts an optional third argument giving an index where to start searching in the first argument, so you can find second and further occurrences (this is similar to the regular expression functions in regex). The definition of what string.splitfields(anything, '') should return is changed for the last time: it returns a singleton list containing its whole first argument unchanged. This is compatible with regsub.split() which also ignores empty delimiter matches. posixpath, macpath: added dirname() and normpath() (and basename() to macpath). The mainloop module (for use with stdwin) can now demultiplex input from other sources, as long as they can be polled with select(). New built-in modules -------------------- Module struct defines functions to pack/unpack values to/from strings representing binary values in native byte order. Module strop implements C versions of many functions from string (see above). Optional module fcntl defines interfaces to fcntl() and ioctl() -- UNIX only. (Not yet properly documented -- see however src/fcntl.doc.) Optional module mpz defines an interface to an altaernative long integer implementation, the GNU MPZ library. Optional module md5 uses the GNU MPZ library to calculate MD5 signatures of strings. There are also optional new modules specific to SGI machines: imageop defines some simple operations to images represented as strings; sv interfaces to the Indigo video board; cl interfaces to the (yet unreleased) compression library. New standard library modules ---------------------------- (Unfortunately the following modules are not all documented; read the sources to find out more about them!) autotest: run testall without showing any output unless it differs from the expected output bisect: use bisection to insert or find an item in a sorted list colorsys: defines conversions between various color systems (e.g. RGB <-> YUV) nntplib: a client interface to NNTP servers pipes: utility to construct pipeline from templates, e.g. for conversion from one file format to another using several utilities. regsub: contains three functions that are more or less compatible with awk functions of the same name: sub() and gsub() do string substitution, split() splits a string using a regular expression to define how separators are define. test_types: test operations on the built-in types of Python toaiff: convert various audio file formats to AIFF format tzparse: parse the TZ environment parameter (this may be less general than it could be, let me know if you fix it). (Note that the obsolete module "path" no longer exists.) New SGI-specific library modules -------------------------------- CL: constants for use with the built-in compression library interface (cl) Queue: a multi-producer, multi-consumer queue class implemented for use with the built-in thread module SOCKET: constants for use with built-in module socket, e.g. to set/get socket options. This is SGI-specific because the constants to be passed are system-dependent. You can generate a version for your own system by running the script demo/scripts/h2py.py with /usr/include/sys/socket.h as input. cddb: interface to the database used by the CD player torgb: convert various image file types to rgb format (requires pbmplus) New demos --------- There's an experimental interface to define Sun RPC clients and servers in demo/rpc. There's a collection of interfaces to WWW, WAIS and Gopher (both Python classes and program providing a user interface) in demo/www. This includes a program texi2html.py which converts texinfo files to HTML files (the format used hy WWW). The ibrowse demo has moved from demo/stdwin/ibrowse to demo/ibrowse. For SGI systems, there's a whole collection of programs and classes that make use of the Indigo video board in demo/sgi/{sv,video}. This represents a significant amount of work that we're giving away! There are demos "rsa" and "md5test" that exercise the mpz and md5 modules, respectively. The rsa demo is a complete implementation of the RSA public-key cryptosystem! A bunch of games and examples submitted by Stoffel Erasmus have been included in demo/stoffel. There are miscellaneous new files in some existing demo subdirectories: classes/bitvec.py, scripts/{fixps,methfix}.py, sgi/al/cmpaf.py, sockets/{mcast,gopher}.py. There are also many minor changes to existing files, but I'm too lazy to run a diff and note the differences -- you can do this yourself if you save the old distribution's demos. One highlight: the stdwin/python.py demo is much improved! Changes to the documentation ---------------------------- The LaTeX source for the library uses different macros to enable it to be converted to texinfo, and from there to INFO or HTML format so it can be browsed as a hypertext. The net result is that you can now read the Python library documentation in Emacs info mode! Changes to the source code that affect C extension writers ---------------------------------------------------------- The function strdup() no longer exists (it was used only in one places and is somewhat of a portability problem since some systems have the same function in their C library. The functions NEW() and RENEW() allocate one spare byte to guard against a NULL return from malloc(0) being taken for an error, but this should not be relied upon. ========================= ==> Release 0.9.7beta <== ========================= Changes to the language proper ------------------------------ User-defined classes can now implement operations invoked through special syntax, such as x[i] or `x` by defining methods named __getitem__(self, i) or __repr__(self), etc. Changes to the build process ---------------------------- Instead of extensive manual editing of the Makefile to select compile-time options, you can now run a Configure.py script. The Makefile as distributed builds a minimal interpreter sufficient to run Configure.py. See also misc/BUILD The Makefile now includes more "utility" targets, e.g. install and tags/TAGS Using the provided strtod.c and strtol.c are now separate options, as on the Sun the provided strtod.c dumps core :-( The regex module is now an option chosen by the Makefile, since some (old) C compilers choke on regexpr.c Changes affecting portability ----------------------------- You need STDWIN version 0.9.7 (released 30 June 1992) for the stdwin interface Dynamic loading is now supported for Sun (and other non-COFF systems) throug dld-3.2.3, as well as for SGI (a new version of Jack Jansen's DL is out, 1.4) The system-dependent code for the use of the select() system call is moved to one file: myselect.h Thanks to Jaap Vermeulen, the code should now port cleanly to the SEQUENT Changes to the interpreter interface ------------------------------------ The interpretation of $PYTHONPATH in the environment is different: it is inserted in front of the default path instead of overriding it Changes to existing built-in functions and methods -------------------------------------------------- List objects now support an optional argument to their sort() method, which is a comparison function similar to qsort(3) in C File objects now have a method fileno(), used by the new select module (see below) New built-in function --------------------- coerce(x, y): take two numbers and return a tuple containing them both converted to a common type Changes to built-in modules --------------------------- sys: fixed core dumps in settrace() and setprofile() socket: added socket methods setsockopt() and getsockopt(); and fileno(), used by the new select module (see below) stdwin: added fileno() == connectionnumber(), in support of new module select (see below) posix: added get{eg,eu,g,u}id(); waitpid() is now a separate function. gl: added qgetfd() fl: added several new functions, fixed several obscure bugs, adapted to FORMS 2.1 Changes to standard modules --------------------------- posixpath: changed implementation of ismount() string: atoi() no longer mistakes leading zero for octal number ... New built-in modules -------------------- Modules marked "dynamic only" are not configured at compile time but can be loaded dynamically. You need to turn on the DL or DLD option in the Makefile for support dynamic loading of modules (this requires external code). select: interfaces to the BSD select() system call dbm: interfaces to the (new) dbm library (dynamic only) nis: interfaces to some NIS functions (aka yellow pages) thread: limited form of multiple threads (sgi only) audioop: operations useful for audio programs, e.g. u-LAW and ADPCM coding (dynamic only) cd: interface to Indigo SCSI CDROM player audio library (sgi only) jpeg: read files in JPEG format (dynamic only, sgi only; needs external code) imgfile: read SGI image files (dynamic only, sgi only) sunaudiodev: interface to sun's /dev/audio (dynamic only, sun only) sv: interface to Indigo video library (sgi only) pc: a minimal set of MS-DOS interfaces (MS-DOS only) rotor: encryption, by Lance Ellinghouse (dynamic only) New standard modules -------------------- Not all these modules are documented. Read the source: lib/<modulename>.py. Sometimes a file lib/<modulename>.doc contains additional documentation. imghdr: recognizes image file headers sndhdr: recognizes sound file headers profile: print run-time statistics of Python code readcd, cdplayer: companion modules for built-in module cd (sgi only) emacs: interface to Emacs using py-connect.el (see below). SOCKET: symbolic constant definitions for socket options SUNAUDIODEV: symbolic constant definitions for sunaudiodef (sun only) SV: symbolic constant definitions for sv (sgi only) CD: symbolic constant definitions for cd (sgi only) New demos --------- scripts/pp.py: execute Python as a filter with a Perl-like command line interface classes/: examples using the new class features threads/: examples using the new thread module sgi/cd/: examples using the new cd module Changes to the documentation ---------------------------- The last-minute syntax changes of release 0.9.6 are now reflected everywhere in the manuals The reference manual has a new section (3.2) on implementing new kinds of numbers, sequences or mappings with user classes Classes are now treated extensively in the tutorial (chapter 9) Slightly restructured the system-dependent chapters of the library manual The file misc/EXTENDING incorporates documentation for mkvalue() and a new section on error handling The files misc/CLASSES and misc/ERRORS are no longer necessary The doc/Makefile now creates PostScript files automatically Miscellaneous changes --------------------- Incorporated Tim Peters' changes to python-mode.el, it's now version 1.06 A python/Emacs bridge (provided by Terrence M. Brannon) lets a Python program running in an Emacs buffer execute Emacs lisp code. The necessary Python code is in lib/emacs.py. The Emacs code is misc/py-connect.el (it needs some external Emacs lisp code) Changes to the source code that affect C extension writers ---------------------------------------------------------- New service function mkvalue() to construct a Python object from C values according to a "format" string a la getargs() Most functions from pythonmain.c moved to new pythonrun.c which is in libpython.a. This should make embedded versions of Python easier ceval.h is split in eval.h (which needs compile.h and only declares eval_code) and ceval.h (which doesn't need compile.hand declares the rest) ceval.h defines macros BGN_SAVE / END_SAVE for use with threads (to improve the parallellism of multi-threaded programs by letting other Python code run when a blocking system call or something similar is made) In structmember.[ch], new member types BYTE, CHAR and unsigned variants have been added New file xxmodule.c is a template for new extension modules. ================================== ==> Release 0.9.6 (6 Apr 1992) <== ================================== Misc news in 0.9.6: - Restructured the misc subdirectory - Reference manual completed, library manual much extended (with indexes!) - the GNU Readline library is now distributed standard with Python - the script "../demo/scripts/classfix.py" fixes Python modules using old class syntax - Emacs python-mode.el (was python.el) vastly improved (thanks, Tim!) - Because of the GNU copyleft business I am not using the GNU regular expression implementation but a free re-implementation by Tatu Ylonen that recently appeared in comp.sources.misc (Bravo, Tatu!) New features in 0.9.6: - stricter try stmt syntax: cannot mix except and finally clauses on 1 try - New module 'os' supplants modules 'mac' and 'posix' for most cases; module 'path' is replaced by 'os.path' - os.path.split() return value differs from that of old path.split() - sys.exc_type, sys.exc_value, sys.exc_traceback are set to the exception currently being handled - sys.last_type, sys.last_value, sys.last_traceback remember last unhandled exception - New function string.expandtabs() expands tabs in a string - Added times() interface to posix (user & sys time of process & children) - Added uname() interface to posix (returns OS type, hostname, etc.) - New built-in function execfile() is like exec() but from a file - Functions exec() and eval() are less picky about whitespace/newlines - New built-in functions getattr() and setattr() access arbitrary attributes - More generic argument handling in built-in functions (see "./EXTENDING") - Dynamic loading of modules written in C or C++ (see "./DYNLOAD") - Division and modulo for long and plain integers with negative operands have changed; a/b is now floor(float(a)/float(b)) and a%b is defined as a-(a/b)*b. So now the outcome of divmod(a,b) is the same as (a/b, a%b) for integers. For floats, % is also changed, but of course / is unchanged, and divmod(x,y) does not yield (x/y, x%y)... - A function with explicit variable-length argument list can be declared like this: def f(*args): ...; or even like this: def f(a, b, *rest): ... - Code tracing and profiling features have been added, and two source code debuggers are provided in the library (pdb.py, tty-oriented, and wdb, window-oriented); you can now step through Python programs! See sys.settrace() and sys.setprofile(), and "../lib/pdb.doc" - '==' is now the only equality operator; "../demo/scripts/eqfix.py" is a script that fixes old Python modules - Plain integer right shift now uses sign extension - Long integer shift/mask operations now simulate 2's complement to give more useful results for negative operands - Changed/added range checks for long/plain integer shifts - Options found after "-c command" are now passed to the command in sys.argv (note subtle incompatibility with "python -c command -- -options"!) - Module stdwin is better protected against touching objects after they've been closed; menus can now also be closed explicitly - Stdwin now uses its own exception (stdwin.error) New features in 0.9.5 (released as Macintosh application only, 2 Jan 1992): - dictionary objects can now be compared properly; e.g., {}=={} is true - new exception SystemExit causes termination if not caught; it is raised by sys.exit() so that 'finally' clauses can clean up, and it may even be caught. It does work interactively! - new module "regex" implements GNU Emacs style regular expressions; module "regexp" is rewritten in Python for backward compatibility - formal parameter lists may contain trailing commas Bugs fixed in 0.9.6: - assigning to or deleting a list item with a negative index dumped core - divmod(-10L,5L) returned (-3L, 5L) instead of (-2L, 0L) Bugs fixed in 0.9.5: - masking operations involving negative long integers gave wrong results =================================== ==> Release 0.9.4 (24 Dec 1991) <== =================================== - new function argument handling (see below) - built-in apply(func, args) means func(args[0], args[1], ...) - new, more refined exceptions - new exception string values (NameError = 'NameError' etc.) - better checking for math exceptions - for sequences (string/tuple/list), x[-i] is now equivalent to x[len(x)-i] - fixed list assignment bug: "a[1:1] = a" now works correctly - new class syntax, without extraneous parentheses - new 'global' statement to assign global variables from within a function New class syntax ---------------- You can now declare a base class as follows: class B: # Was: class B(): def some_method(self): ... ... and a derived class thusly: class D(B): # Was: class D() = B(): def another_method(self, arg): ... Multiple inheritance looks like this: class M(B, D): # Was: class M() = B(), D(): def this_or_that_method(self, arg): ... The old syntax is still accepted by Python 0.9.4, but will disappear in Python 1.0 (to be posted to comp.sources). New 'global' statement ---------------------- Every now and then you have a global variable in a module that you want to change from within a function in that module -- say, a count of calls to a function, or an option flag, etc. Until now this was not directly possible. While several kludges are known that circumvent the problem, and often the need for a global variable can be avoided by rewriting the module as a class, this does not always lead to clearer code. The 'global' statement solves this dilemma. Its occurrence in a function body means that, for the duration of that function, the names listed there refer to global variables. For instance: total = 0.0 count = 0 def add_to_total(amount): global total, count total = total + amount count = count + 1 'global' must be repeated in each function where it is needed. The names listed in a 'global' statement must not be used in the function before the statement is reached. Remember that you don't need to use 'global' if you only want to *use* a global variable in a function; nor do you need ot for assignments to parts of global variables (e.g., list or dictionary items or attributes of class instances). This has not changed; in fact assignment to part of a global variable was the standard workaround. New exceptions -------------- Several new exceptions have been defined, to distinguish more clearly between different types of errors. name meaning was AttributeError reference to non-existing attribute NameError IOError unexpected I/O error RuntimeError ImportError import of non-existing module or name NameError IndexError invalid string, tuple or list index RuntimeError KeyError key not in dictionary RuntimeError OverflowError numeric overflow RuntimeError SyntaxError invalid syntax RuntimeError ValueError invalid argument value RuntimeError ZeroDivisionError division by zero RuntimeError The string value of each exception is now its name -- this makes it easier to experimentally find out which operations raise which exceptions; e.g.: >>> KeyboardInterrupt 'KeyboardInterrupt' >>> New argument passing semantics ------------------------------ Off-line discussions with Steve Majewski and Daniel LaLiberte have convinced me that Python's parameter mechanism could be changed in a way that made both of them happy (I hope), kept me happy, fixed a number of outstanding problems, and, given some backward compatibility provisions, would only break a very small amount of existing code -- probably all mine anyway. In fact I suspect that most Python users will hardly notice the difference. And yet it has cost me at least one sleepless night to decide to make the change... Philosophically, the change is quite radical (to me, anyway): a function is no longer called with either zero or one argument, which is a tuple if there appear to be more arguments. Every function now has an argument list containing 0, 1 or more arguments. This list is always implemented as a tuple, and it is a (run-time) error if a function is called with a different number of arguments than expected. What's the difference? you may ask. The answer is, very little unless you want to write variadic functions -- functions that may be called with a variable number of arguments. Formerly, you could write a function that accepted one or more arguments with little trouble, but writing a function that could be called with either 0 or 1 argument (or more) was next to impossible. This is now a piece of cake: you can simply declare an argument that receives the entire argument tuple, and check its length -- it will be of size 0 if there are no arguments. Another anomaly of the old system was the way multi-argument methods (in classes) had to be declared, e.g.: class Point(): def init(self, (x, y, color)): ... def setcolor(self, color): ... dev moveto(self, (x, y)): ... def draw(self): ... Using the new scheme there is no need to enclose the method arguments in an extra set of parentheses, so the above class could become: class Point: def init(self, x, y, color): ... def setcolor(self, color): ... dev moveto(self, x, y): ... def draw(self): ... That is, the equivalence rule between methods and functions has changed so that now p.moveto(x,y) is equivalent to Point.moveto(p,x,y) while formerly it was equivalent to Point.moveto(p,(x,y)). A special backward compatibility rule makes that the old version also still works: whenever a function with exactly two arguments (at the top level) is called with more than two arguments, the second and further arguments are packed into a tuple and passed as the second argument. This rule is invoked independently of whether the function is actually a method, so there is a slight chance that some erroneous calls of functions expecting two arguments with more than that number of arguments go undetected at first -- when the function tries to use the second argument it may find it is a tuple instead of what was expected. Note that this rule will be removed from future versions of the language; it is a backward compatibility provision *only*. Two other rules and a new built-in function handle conversion between tuples and argument lists: Rule (a): when a function with more than one argument is called with a single argument that is a tuple of the right size, the tuple's items are used as arguments. Rule (b): when a function with exactly one argument receives no arguments or more than one, that one argument will receive a tuple containing the arguments (the tuple will be empty if there were no arguments). A new built-in function, apply(), was added to support functions that need to call other functions with a constructed argument list. The call apply(function, tuple) is equivalent to function(tuple[0], tuple[1], ..., tuple[len(tuple)-1]) While no new argument syntax was added in this phase, it would now be quite sensible to add explicit syntax to Python for default argument values (as in C++ or Modula-3), or a "rest" argument to receive the remaining arguments of a variable-length argument list. ======================================================== ==> Release 0.9.3 (never made available outside CWI) <== ======================================================== - string sys.version shows current version (also printed on interactive entry) - more detailed exceptions, e.g., IOError, ZeroDivisionError, etc. - 'global' statement to declare module-global variables assigned in functions. - new class declaration syntax: class C(Base1, Base2, ...): suite (the old syntax is still accepted -- be sure to convert your classes now!) - C shifting and masking operators: << >> ~ & ^ | (for ints and longs). - C comparison operators: == != (the old = and <> remain valid). - floating point numbers may now start with a period (e.g., .14). - definition of integer division tightened (always truncates towards zero). - new builtins hex(x), oct(x) return hex/octal string from (long) integer. - new list method l.count(x) returns the number of occurrences of x in l. - new SGI module: al (Indigo and 4D/35 audio library). - the FORMS interface (modules fl and FL) now uses FORMS 2.0 - module gl: added lrect{read,write}, rectzoom and pixmode; added (non-GL) functions (un)packrect. - new socket method: s.allowbroadcast(flag). - many objects support __dict__, __methods__ or __members__. - dir() lists anything that has __dict__. - class attributes are no longer read-only. - classes support __bases__, instances support __class__ (and __dict__). - divmod() now also works for floats. - fixed obscure bug in eval('1 '). =================================== ==> Release 0.9.2 (Autumn 1991) <== =================================== Highlights ---------- - tutorial now (almost) complete; library reference reorganized - new syntax: continue statement; semicolons; dictionary constructors; restrictions on blank lines in source files removed - dramatically improved module load time through precompiled modules - arbitrary precision integers: compute 2 to the power 1000 and more... - arithmetic operators now accept mixed type operands, e.g., 3.14/4 - more operations on list: remove, index, reverse; repetition - improved/new file operations: readlines, seek, tell, flush, ... - process management added to the posix module: fork/exec/wait/kill etc. - BSD socket operations (with example servers and clients!) - many new STDWIN features (color, fonts, polygons, ...) - new SGI modules: font manager and FORMS library interface Extended list of changes in 0.9.2 --------------------------------- Here is a summary of the most important user-visible changes in 0.9.2, in somewhat arbitrary order. Changes in later versions are listed in the "highlights" section above. 1. Changes to the interpreter proper - Simple statements can now be separated by semicolons. If you write "if t: s1; s2", both s1 and s2 are executed conditionally. - The 'continue' statement was added, with semantics as in C. - Dictionary displays are now allowed on input: {key: value, ...}. - Blank lines and lines bearing only a comment no longer need to be indented properly. (A completely empty line still ends a multi- line statement interactively.) - Mixed arithmetic is supported, 1 compares equal to 1.0, etc. - Option "-c command" to execute statements from the command line - Compiled versions of modules are cached in ".pyc" files, giving a dramatic improvement of start-up time - Other, smaller speed improvements, e.g., extracting characters from strings, looking up single-character keys, and looking up global variables - Interrupting a print operation raises KeyboardInterrupt instead of only cancelling the print operation - Fixed various portability problems (it now passes gcc with only warnings -- more Standard C compatibility will be provided in later versions) - Source is prepared for porting to MS-DOS - Numeric constants are now checked for overflow (this requires standard-conforming strtol() and strtod() functions; a correct strtol() implementation is provided, but the strtod() provided relies on atof() for everything, including error checking 2. Changes to the built-in types, functions and modules - New module socket: interface to BSD socket primitives - New modules pwd and grp: access the UNIX password and group databases - (SGI only:) New module "fm" interfaces to the SGI IRIX Font Manager - (SGI only:) New module "fl" interfaces to Mark Overmars' FORMS library - New numeric type: long integer, for unlimited precision - integer constants suffixed with 'L' or 'l' are long integers - new built-in function long(x) converts int or float to long - int() and float() now also convert from long integers - New built-in function: - pow(x, y) returns x to the power y - New operation and methods for lists: - l*n returns a new list consisting of n concatenated copies of l - l.remove(x) removes the first occurrence of the value x from l - l.index(x) returns the index of the first occurrence of x in l - l.reverse() reverses l in place - New operation for tuples: - t*n returns a tuple consisting of n concatenated copies of t - Improved file handling: - f.readline() no longer restricts the line length, is faster, and isn't confused by null bytes; same for raw_input() - f.read() without arguments reads the entire (rest of the) file - mixing of print and sys.stdout.write() has different effect - New methods for files: - f.readlines() returns a list containing the lines of the file, as read with f.readline() - f.flush(), f.tell(), f.seek() call their stdio counterparts - f.isatty() tests for "tty-ness" - New posix functions: - _exit(), exec(), fork(), getpid(), getppid(), kill(), wait() - popen() returns a file object connected to a pipe - utime() replaces utimes() (the latter is not a POSIX name) - New stdwin features, including: - font handling - color drawing - scroll bars made optional - polygons - filled and xor shapes - text editing objects now have a 'settext' method 3. Changes to the standard library - Name change: the functions path.cat and macpath.cat are now called path.join and macpath.join - Added new modules: formatter, mutex, persist, sched, mainloop - Added some modules and functionality to the "widget set" (which is still under development, so please bear with me): DirList, FormSplit, TextEdit, WindowSched - Fixed module testall to work non-interactively - Module string: - added functions join() and joinfields() - fixed center() to work correct and make it "transitive" - Obsolete modules were removed: util, minmax - Some modules were moved to the demo directory 4. Changes to the demonstration programs - Added new useful scipts: byteyears, eptags, fact, from, lfact, objgraph, pdeps, pi, primes, ptags, which - Added a bunch of socket demos - Doubled the speed of ptags - Added new stdwin demos: microedit, miniedit - Added a windowing interface to the Python interpreter: python (most useful on the Mac) - Added a browser for Emacs info files: demo/stdwin/ibrowse (yes, I plan to put all STDWIN and Python documentation in texinfo form in the future) 5. Other changes to the distribution - An Emacs Lisp file "python.el" is provided to facilitate editing Python programs in GNU Emacs (slightly improved since posted to gnu.emacs.sources) - Some info on writing an extension in C is provided - Some info on building Python on non-UNIX platforms is provided ===================================== ==> Release 0.9.1 (February 1991) <== ===================================== - Micro changes only - Added file "patchlevel.h" ===================================== ==> Release 0.9.0 (February 1991) <== ===================================== Original posting to alt.sources.