2.5.0 (2006-12-29) ================== Twisted 2.5.0 is a major feature release, with several interesting new developments and a great number of bug fixes. Some of the highlights follow. * AMP, the Asynchronous Messaging Protocol, was introduced. AMP is a protocol which provides request/response semantics over a persistent connection in a very simple and extensible manner. * An Epoll-based reactor was added, which can be used with twistd or trial by passing "-r epoll" on the command line. This may improve performance of certain high-traffic network applications. * The 'twistd' command can now accept sub-commands which name an application to run. For example, 'twistd web --path .' will start a web server serving files out of the current directory. This functionality is meant to replace the old way of doing things with 'mktap' and 'twistd -f'. * Python 2.5 is now supported. Previous releases of Twisted were broken by changes in the release of Python 2.5. * 'inlineCallbacks' was added, which allows taking advantage of the new 'yield' expression syntax in Python 2.5 to avoid writing callbacks for Deferreds. In addition to these changes, there are many other minor features and a large number of bug fixes. Features -------- - log.err can now take a second argument for specifying information about an error (#1399) - A time-simulating test helper class, twisted.internet.task.Clock, was added (#1757) - Trial docstring improvements were made (#1604, #2133) - New SSL features were added to twisted.internet.ssl, such as client validation (#302) - Python 2.5 is now supported (#1867) - Trial's assertFailure now provides more information on failure (#1869) - Trial can now be run on tests within a zipfile (#1940) - AMP, a new simple protocol for asynchronous messaging, was added (#1715) - Trial's colorful reporter now works on win32 (#1646) - Trial test modules may now dynamically construct TestSuites (#1638, #2165) - twistd can now make use of plugins to run applications (#1922, #2013) - Twisted now works with the latest (unreleased) zope.interface (#2160) - An epoll-based reactor, epollreactor, was added. It is selectable with the -r options to twistd and trial (#1953) - twistd and trial now use the plugin system to find reactors which can be selected (#719) - twisted.internet.defer.inlineCallbacks was added. It takes advantage of Python 2.5's generators to offer a way to deal with Deferreds without callbacks (#2100) Fixes ----- - Traceback formatting in Trial was improved (#1454, #1610) - twisted.python.filepath.FilePath.islink now actually returns True when appropriate (#1773) - twisted.plugin now no longer raises spurious errors (#926) - twisted.pb Cacheables may now be new-style classes (#1324) - FileDescriptor now deals with producers in a more interface-compliant and robust manner (#2286, #811) - "setup.py build" and other setup.py commands which don't actually install the software now work (#1835) - wxreactor has had various fixes (#1235, #1574, #1688) Deprecations and Removals ------------------------- - The old twisted.cred API (Perspectives, Identities and such) was removed (#1440) - twisted.spread.newjelly was removed (#1831) - Various deprecated things in twisted.python.components were removed: Interface, MetaInterface, getAdapterClass, and getAdapterClassWithInheritance (#1636) - twisted.enterprise.xmlreflector was removed (#661) - mktap is slowly on its way out, now that twistd supports plugins. It is not yet officially deprecated (#2013) - tkmktap was removed, because it wasn't working anyway (#2020) - reactor.iterate calls made inside of a Trial test case are deprecated (#2090) - twisted.internet.qtreactor was removed: It has been moved to a separate project. See http://twistedmatrix.com/trac/wiki/QTReactor (#2130, #2137) - threadedselectreactor is now not a directly usable reactor; it is only meant to help in writing other reactors (#2126) - twisted.python.reflect.funcinfo is deprecated (#2079) - twisted.spread.sturdy, which was already completely broken, was removed (#2299) Other ----- The following changes are minor or closely related to other changes. - #1783, #1786, #1788, #1648, #1734, #1609, #1800, #1818, #1629, #1829, #491, #1816, #1824, #1855, #1797, #1637, #1371, #1892, #1887, #1897, #1563, #1741, #1943, #1952, #1276, #1837, #1726, #1963, #1965, #1973, #1976, #1991, #1936, #1113, #630, #2002, #2040, #2044, #1617, #2045, #2055, #2056, #2022, #2052, #1552, #1999, #1507, #2054, #1970, #1968, #662, #1910, #1694, #1999, #1409, #2150, #2127, #2155, #1983, #2014, #2222, #1067, #2136, #2065, #1430, #2173, #2212, #1871, #2147, #1199, #2273, #428, #992, #815, #2024, #2292, #2125, #2139, #2291, #2174, #2306, #2228, #2309, #2319, #2317, #2313, #2154, #1985, #1201 2.4.0 (2006-05-21) ================== Features -------- - twisted.internet.task.Cooperator (Added along with #1701). Fixes ----- - Errors in UDP protocols no longer unbind the UDP port (#1695). - Misc: #1717, #1705, #1563, #1719, #1721, #1722, #1728. 2.3.0 (2006-05-14) ================== Features -------- - twisted-dev-mode's F9 now uses trial's --testmodule feature, rather than trying to guess what tests to run. This will break files using the "-x" test-case-name hack (just use a comma separated list instead). - API Documentation improvements. - A new Producer/Consumer guide (#53) - Better-defined error behavior in IReactorMulticast (#1578) - IOCP Multicast support (#1500) - Improved STDIO support on Windows. (#1553) - LoopingCall supports Deferreds such that it will wait until a Deferred has fired before rescheduling the next call (#1487) - Added twisted.python.versions.Version, a structured representation of Version information, including support for SVN revision numbers (#1663) Fixes ----- - Many trial fixes, as usual - All API documentation is now correctly formatted as epytext (#1545) - twisted.python.filepath.FilePath.__repr__ is safer. - Fix trial's "until-failure" mode. (#1453) - deferredGenerator now no longer causes handled exceptions (or results) to propagate to the resulting Deferred (#1709). - Misc: #1483, #1495, #1503, #1532, #1539, #1559, #1509, #1538, #1571, #1331, #1561, #737, #1562, #1573, #1594, #1607, #1407, #1615, #1645, #1634, #1620, #1664, #1666, #1650, #1670, #1675, #1692, #1710, #1668. Deprecations ------------ - Removal of already-deprecated trial APIs: the assertions module, util.deferredResult, util.deferredError, util.fireWhenDoneFunc, util.spinUntil, util.spinWhile, util.extract_tb, util.format_exception, util.suppress_warnings, unittest.wait, util.wait - The backwards compatibility layer of twisted.python.components (e.g., backwardsCompatImplements, fixClassImplements, etc) has been disabled. The functions still exist, but do nothing as to not break user code outright (#1511) - Deprecate the usage of the 'default' argument as a keyword argument in Interface.__call__. Passing a second positional argument to specify the default return value of the adaptation is still supported. 2.2.0 (2006-02-12) ================== Features -------- - Twisted no longer works with Python 2.2 - FTP server supports more clients - Process support on Windows - twisted.internet.stdio improved (including Windows support!) - Trial: - Continued Trial refactoring - Default trial reporter is verbose black&white when color isn't supported - Deferreds returned in trial tests that don't fire before the unittest timeout now have their errback fired with a TimeoutError - raising SkipTest in setUp and setUpClass skips tests - Test suites are failed if there are import errors Fixes ----- - iocpreactor fixes - Threadpool fixes - Fixed infinite loops in datagramReceived edge cases - Issues resolved: 654, 773, 998, 1005, 1008, 1116, 1123, 1198, 1221, 1232, 1233, 1236, 1240, 1244, 1258, 1263, 1265, 1266, 1271, 1275, 1293, 1294, 1298, 1308, 1316, 1317, 1321, 1341, 1344, 1353, 1359, 1372, 1374, 1377, 1379, 1380, 1385, 1388, 1389, 1413, 1422, 1426, 1434, 1435, 1448, 1449, 1456 Deprecations ------------ - Trial: - spinWhile and spinUntil - util.wait - extract_tb and format_exception - util.suppressWarnings - runReactor is gone 2.1.0 (2005-11-06) ================== Features -------- - threadedselectreactor, a reactor which potentially makes integration with foreign event loops much simpler. - major improvements to twisted.conch.insults, including many new widgets. - adbapi ConnectionPools now have 'runWithConnection' which is similar to runInteraction but gives you a connection object instead of a transaction. [975] - __file__ is now usable in tac files - twisted.cred.pamauth now contains a PAM checker (moved from twisted.conch) - twisted.protocols.policies.LimitTotalConnectionsFactory now exists, which does as the name suggests - twisted.protocols.ident now uses /proc/net/tcp on Linux [233] - trial now recurses packages by default (a la the old -R parameter) - (PB) Calling a remote method that doesn't exist now raises NoSuchMethod instead of AttributeError. Fixes ----- - FTP client and server improvements - Trial improvements: The code is now much simpler, and more stable. - twisted.protocols.basic.FileSender now works with empty files - Twisted should now be much more usable on Pythons without thread support. - minor improvements to process code in win32eventreactor - twistd -y (--python) now implies -o (--nosave). [539] - improved lockfile handling especially with respect to unix sockets. - deferredGenerator now no longer overuses the stack, which sometimes caused stack overflows. - Failure.raiseException now at least always raises the correct Exception. - minor improvements to serialport code Deprecations ------------ - twisted.python.componts.getAdapter. Use IFoo(o) instead. - Adapter persistence (IFoo(x, persist=True)). Just don't use it. - log.debug. It was equivalent to log.msg(), just use that. - twisted.protocols.telnet. twisted.conch.telnet replaces it. - Setting a trial reporter using a flag to 'trial'. Instead of 'trial --bwverbose', for example, use 'trial --reporter=bwverbose'. - trial --coverage will become a flag in Twisted 2.2. - passing a fully-qualified python name to --reporter is deprecated. Pass only names of Reporter plugins. - trial --psyco. - trial -R (--recurse) is now the default, so passing it is deprecated. - trial --reporter-args. Use the plugin system to do this sort of thing. - trial.assertions.assertionMethod and trial.unittest.assertionMethod are both deprecated. Use instance methods on TestCases instead. - trial's deferredResult, deferredError, and wait functions. Return Deferreds from your test methods instead of using them. - Raising unittest.SkipTest with no arguments. Give a reason for your skip. - The Failure returned from a gatherResults and DeferredList is now of type FirstError instead of a tuple of (Exception, index). It supports a firstError[idx] syntax but that is deprecated. Use firstError.subFailure and firstError.index instead. - whenThreaded now simply calls the passed function synchronously. 2.0.1 (2005-05-09) =================== Minor bug fix release. SVN rev (file) - [bug number] description ----------------------------------------- 13307 (twisted/topfiles/README) - Mention support for python 2.4, too 13324 (twisted/internet/defer.py) - [947] Fix DeferredQueue backlog/size limit. 13354 (twisted/plugins/__init__.py) - Correct maintainer address. 13355 (twisted/test/test_defer.py) - improvements to DeferredQueue test case 13387 (setup.py) - add news to list of subprojects to install 13332 (twisted/internet/posixbase.py) - Fix spelling error 13366 (twisted/internet/qtreactor.py) - [957] [954] reactor.iterate fixes 13368 (twisted/test/test_internet.py) - Fix DelayedCall test case 13422 (twisted/internet/posixbase.py) - Remove log from _Win32Waker creation. 13437 (twisted/plugin.py) - [958] Only write cache if there were changes. 13666 (twisted/internet/gtkreactor.py,gtk2reactor.py) - Don't run callbacks until the reactor is actually up and running 13748 (twisted/internet/gtk2reactor.py) - [552] [994] Initialize threading properly. 2.0.0 (2005-03-25) ================== Major new features ------------------ - Replaced home-grown components system with zope.interface. - Split Twisted into multiple pieces. - Relicensed: Now under the MIT license, rather than LGPL. - Python 2.4 compatibility fixes - Major efficiency improvements in TCP buffering algorithm. - Major efficiency improvements in reactor.callLater/DelayedCall. - Half-close support for TCP/SSL. (loseWriteConnection). Miscellaneous features/fixes ---------------------------- - New plugin system: twisted.plugin - Better debugging support. Control-C will break you into PDB. - The twistd command has --uid --gid command line arguments. - *Incompatibility: mktap defaults to not change UID/GID, instead of saving the invoking user's UID/GID. - Removed some functions that were deprecated since Twisted 1.0. - ZSH tab-completion for twisted commands. - More correct daemonization in twistd. - twisted.python.log: do not close the log because of invalid format string. - Disabled automatic import of cBanana. - Boolean support for twisted.persisted.marmalade. - Refactor of plugin and application HOWTO documentation - Async HOWTO expanded greatly. - twisted.python.usage outputs the actual defaults, not passed in values. twisted.trial ------------- - Rewritten, a bunch of bugs fixed, a few more added. twisted.internet ---------------- - Multi-listen UDP multicast support - protocol.ClientCreator has a connectSSL. - defer.deferredGenerator: allows you to write Deferred code w/o callbacks. - Deferred.setTimeout is now deprecated. - New defer.DeferredLock/DeferredSemaphore/DeferredQueue. - Add utils.getProcessOutputAndValue to get stdout/err/value. - Default DNS resolver is now non-blocking. - Increased default TCP accept backlog from 5 to 50. - Make buffering large amounts of TCP data work on Windows. - Fixed SSL disconnect to not wait for remote host. Fixes issue with firefox. - Separate state for Deferred finalization so that GC-loops preventing finalization don't occur. - Many Process bugfixes - Processes spawned on windows can successfully use sockets - gtk2reactor can optionally use glib event loop instead of gtk - gtk2reactor notifies gobject to initialize thread support - Fix registering a streaming producer on a transport. - Close client sockets explicitly after failed connections. - ReconnectingClientFactory now continues attempting to reconnect after all errors, not just those which are not UserErrors. twisted.protocols ----------------- - Portforward doesn't start reading from a client until a connection is made. - Bugfixes in twisted.protocols.loopback - Improve speed of twisted.protocols.LineReceiver. - LineReceiver implements IProducer. (stop/pause/resumeProducing) - SOCKSv4 properly closes connections twisted.enterprise ------------------ - Add "new connection" callback to adbapi.ConnectionPool to allow for custom db connection setup (cp_openfun) - adbapi.ConnectionPool automatic reconnection support - Don't log exceptions extraneously 1.3.0 (2004-05-14) ================== - Address objects for IPv4 and Unix addresses throughout twisted.internet. - Improved connected UDP APIs. - Refactored SSH client support. - Initial implementation of Windows I/O Completion Ports event loop. - Bug fixes and feature enhancements. - Nevow support for Lore (so your Lore documents can use Nevow directives). - This is the last release before Twisted begins splitting up.