Initial import to Tizen
[profile/ivi/python-twisted.git] / twisted / topfiles / NEWS
1 Ticket numbers in this file can be looked up by visiting
2 http://twistedmatrix.com/trac/ticket/<number>
3
4 Twisted Core 12.1.0 (2012-06-02)
5 ================================
6
7 Features
8 --------
9  - The kqueue reactor has been revived. (#1918)
10  - twisted.python.filepath now provides IFilePath, an interface for
11    file path objects. (#2176)
12  - New gtk3 and gobject-introspection reactors have been added.
13    (#4558)
14  - gtk and glib reactors now run I/O and scheduled events with lower
15    priority, to ensure the UI stays responsive. (#5067)
16  - IReactorTCP.connectTCP() can now accept IPv6 address literals
17    (although not hostnames) in order to support connecting to IPv6
18    hosts. (#5085)
19  - twisted.internet.interfaces.IReactorSocket, a new interface, is now
20    supported by some reactors to listen on sockets set up by external
21    software (eg systemd or launchd). (#5248)
22  - twisted.internet.endpoints.clientFromString now also supports
23    strings in the form of tcp:example.com:80 and ssl:example.com:4321
24    (#5358)
25  - twisted.python.constants.Flags now provides a way to define
26    collections of flags for bitvector-type uses. (#5384)
27  - The epoll(7)-based reactor is now the default reactor on Linux.
28    (#5478)
29  - twisted.python.runtime.platform.isLinux can be used to check if
30    Twisted is running on Linux. (#5491)
31  - twisted.internet.endpoints.serverFromString now recognizes a
32    "systemd" endpoint type, for listening on a server port inherited
33    from systemd. (#5575)
34  - Connections created using twisted.internet.interfaces.IReactorUNIX
35    now support sending and receiving file descriptors between
36    different processes. (#5615)
37  - twisted.internet.endpoints.clientFromString now supports UNIX
38    client endpoint strings with the path argument specified like
39    "unix:/foo/bar" in addition to the old style, "unix:path=/foo/bar".
40    (#5640)
41  - twisted.protocols.amp.Descriptor is a new AMP argument type which
42    supports passing file descriptors as AMP command arguments over
43    UNIX connections. (#5650)
44
45 Bugfixes
46 --------
47  - twisted.internet.abstract.FileDescriptor implements
48    twisted.internet.interfaces.IPushProducer instead of
49    twisted.internet.interfaces.IProducer.
50    twisted.internet.iocpreactor.abstract.FileHandle implements
51    twisted.internet.interfaces.IPushProducer instead of
52    twisted.internet.interfaces.IProducer. (#4386)
53  - The epoll reactor now supports reading/writing to regular files on
54    stdin/stdout. (#4429)
55  - Calling .cancel() on any Twisted-provided client endpoint
56    (TCP4ClientEndpoint, UNIXClientEndpoint, SSL4ClientEndpoint) now
57    works as documented, rather than logging an AlreadyCalledError.
58    (#4710)
59  - A leak of OVERLAPPED structures in some IOCP error cases has been
60    fixed. (#5372)
61  - twisted.internet._pollingfile._PollableWritePipe now checks for
62    outgoing unicode data in write() and writeSequence() instead of
63    checkWork(). (#5412)
64
65 Improved Documentation
66 ----------------------
67  - "Working from Twisted's Subversion repository" links to UQDS and
68    Combinator are now updated. (#5545)
69  - Added tkinterdemo.py, an example of Tkinter integration. (#5631)
70
71 Deprecations and Removals
72 -------------------------
73  - The 'unsigned' flag to twisted.scripts.tap2rpm.MyOptions is now
74    deprecated.  (#4086)
75  - Removed the unreachable _fileUrandom method from
76    twisted.python.randbytes.RandomFactory. (#4530)
77  - twisted.persisted.journal is removed, deprecated since Twisted
78    11.0. (#4805)
79  - Support for pyOpenSSL 0.9 and older is now deprecated.  pyOpenSSL
80    0.10 or newer will soon be required in order to use Twisted's SSL
81    features. (#4974)
82  - backwardsCompatImplements and fixClassImplements are removed from
83    twisted.python.components, deprecated in 2006. (#5034)
84  - twisted.python.reflect.macro was removed, deprecated since Twisted
85    8.2. (#5035)
86  - twisted.python.text.docstringLStrip, deprecated since Twisted
87    10.2.0, has been removed (#5036)
88  - Removed the deprecated dispatch and dispatchWithCallback methods
89    from twisted.python.threadpool.ThreadPool (deprecated since 8.0)
90    (#5037)
91  - twisted.scripts.tapconvert is now deprecated. (#5038)
92  - twisted.python.reflect's Settable, AccessorType, PropertyAccessor,
93    Accessor, OriginalAccessor and Summer are now deprecated.  (#5451)
94  - twisted.python.threadpool.ThreadSafeList (deprecated in 10.1) is
95    removed. (#5473)
96  - twisted.application.app.initialLog, deprecated since Twisted 8.2.0,
97    has been removed. (#5480)
98  - twisted.spread.refpath was deleted, deprecated since Twisted 9.0.
99    (#5482)
100  - twisted.python.otp, deprecated since 9.0, is removed. (#5493)
101  - Removed `dsu`, `moduleMovedForSplit`, and `dict` from
102    twisted.python.util (deprecated since 10.2) (#5516)
103
104 Other
105 -----
106  - #2723, #3114, #3398, #4388, #4489, #5055, #5116, #5242, #5380,
107    #5392, #5447, #5457, #5484, #5489, #5492, #5494, #5512, #5523,
108    #5558, #5572, #5583, #5593, #5620, #5621, #5623, #5625, #5637,
109    #5652, #5653, #5656, #5657, #5660, #5673
110
111
112 Twisted Core 12.0.0 (2012-02-10)
113 ================================
114
115 Features
116 --------
117  - The interface argument to IReactorTCP.listenTCP may now be an IPv6
118    address literal, allowing the creation of IPv6 TCP servers. (#5084)
119  - twisted.python.constants.Names now provides a way to define
120    collections of named constants, similar to the "enum type" feature
121    of C or Java. (#5382)
122  - twisted.python.constants.Values now provides a way to define
123    collections of named constants with arbitrary values. (#5383)
124
125 Bugfixes
126 --------
127  - Fixed an obscure case where connectionLost wasn't called on the
128    protocol when using half-close. (#3037)
129  - UDP ports handle socket errors better on Windows. (#3396)
130  - When idle, the gtk2 and glib2 reactors no longer wake up 10 times a
131    second. (#4376)
132  - Prevent a rare situation involving TLS transports, where a producer
133    may be erroneously left unpaused. (#5347)
134  - twisted.internet.iocpreactor.iocpsupport now has fewer 64-bit
135    compile warnings. (#5373)
136  - The GTK2 reactor is now more responsive on Windows. (#5396)
137  - TLS transports now correctly handle producer registration after the
138    connection has been lost. (#5439)
139  - twisted.protocols.htb.Bucket now empties properly with a non-zero
140    drip rate. (#5448)
141  - IReactorSSL and ITCPTransport.startTLS now synchronously propagate
142    errors from the getContext method of context factories, instead of
143    being capturing them and logging them as unhandled. (#5449)
144
145 Improved Documentation
146 ----------------------
147  - The multicast documentation has been expanded. (#4262)
148  - twisted.internet.defer.Deferred now documents more return values.
149    (#5399)
150  - Show a better starting page at
151    http://twistedmatrix.com/documents/current (#5429)
152
153 Deprecations and Removals
154 -------------------------
155  - Remove the deprecated module twisted.enterprise.reflector. (#4108)
156  - Removed the deprecated module twisted.enterprise.row. (#4109)
157  - Remove the deprecated module twisted.enterprise.sqlreflector.
158    (#4110)
159  - Removed the deprecated module twisted.enterprise.util, as well as
160    twisted.enterprise.adbapi.safe. (#4111)
161  - Python 2.4 is no longer supported on any platform. (#5060)
162  - Removed printTraceback and noOperation from twisted.spread.pb,
163    deprecated since Twisted 8.2. (#5370)
164
165 Other
166 -----
167  - #1712, #2725, #5284, #5325, #5331, #5362, #5364, #5371, #5407,
168    #5427, #5430, #5431, #5440, #5441
169
170
171 Twisted Core 11.1.0 (2011-11-15)
172 ================================
173
174 Features
175 --------
176  - TCP and TLS transports now support abortConnection() which, unlike
177    loseConnection(), always closes the connection immediately. (#78)
178  - Failures received over PB when tracebacks are disabled now display
179    the wrapped exception value when they are printed. (#581)
180  - twistd now has a --logger option, allowing the use of custom log
181    observers. (#638)
182  - The default reactor is now poll(2) on platforms that support it.
183    (#2234)
184  - twisted.internet.defer.inlineCallbacks(f) now raises TypeError when
185    f returns something other than a generator or uses returnValue as a
186    non-generator. (#2501)
187  - twisted.python.usage.Options now supports performing Zsh tab-
188    completion on demand. Tab-completion for Twisted commands is
189    supported out-of-the-box on any recent zsh release. Third-party
190    commands may take advantage of zsh completion by copying the
191    provided stub file. (#3078)
192  - twisted.protocols.portforward now uses flow control between its
193    client and server connections to avoid having to buffer an
194    unbounded amount of data when one connection is slower than the
195    other. (#3350)
196  - On Windows, the select, IOCP, and Gtk2 reactors now implement
197    IReactorWin32Events (most notably adding support for serial ports
198    to these reactors). (#4862)
199  - twisted.python.failure.Failure no longer captures the state of
200    locals and globals of all stack frames by default, because it is
201    expensive to do and rarely used.  You can pass captureVars=True to
202    Failure's constructor if you want to capture this data. (#5011)
203  - twisted.web.client now supports automatic content-decoding via
204    twisted.web.client.ContentDecoderAgent, gzip being supported for
205    now. (#5053)
206  - Protocols may now implement ILoggingContext to customize their
207    logging prefix.  twisted.protocols.policies.ProtocolWrapper and the
208    endpoints wrapper now take advantage of this feature to ensure the
209    application protocol is still reflected in logs. (#5062)
210  - AMP's raw message-parsing performance was increased by
211    approximately 12%. (#5075)
212  - Twisted is now installable on PyPy, because some incompatible C
213    extensions are no longer built. (#5158)
214  - twisted.internet.defer.gatherResults now accepts a consumeErrors
215    parameter, with the same meaning as the corresponding argument for
216    DeferredList. (#5159)
217  - Added RMD (remove directory) support to the FTP client. (#5259)
218  - Server factories may now implement ILoggingContext to customize the
219    name that is logged when the reactor uses one to start listening on
220    a port. (#5292)
221  - The implementations of ITransport.writeSequence will now raise
222    TypeError if passed unicode strings. (#3896)
223  - iocp reactor now operates correctly on 64 bit Python runtimes.
224    (#4669)
225  - twistd ftp now supports the cred plugin. (#4752)
226  - twisted.python.filepath.FilePath now has an API to retrieve the
227    permissions of the underlying file, and two methods to determine
228    whether it is a block device or a socket.  (#4813)
229  - twisted.trial.unittest.TestCase is now compatible with Python 2.7's
230    assertDictEqual method. (#5291)
231
232 Bugfixes
233 --------
234  - The IOCP reactor now does not try to erroneously pause non-
235    streaming producers. (#745)
236  - Unicode print statements no longer blow up when using Twisted's
237    logging system. (#1990)
238  - Process transports on Windows now support the `writeToChild` method
239    (but only for stdin). (#2838)
240  - Zsh tab-completion of Twisted commands no longer relies on
241    statically generated files, but instead generates results on-the-
242    fly - ensuring accurate tab-completion for the version of Twisted
243    actually in use. (#3078)
244  - LogPublishers don't use the global log publisher for reporting
245    broken observers anymore. (#3307)
246  - trial and twistd now add the current directory to sys.path even
247    when running as root or on Windows. mktap, tapconvert, and
248    pyhtmlizer no longer add the current directory to sys.path. (#3526)
249  - twisted.internet.win32eventreactor now stops immediately if
250    reactor.stop() is called from an IWriteDescriptor.doWrite
251    implementation instead of delaying shutdown for an arbitrary period
252    of time. (#3824)
253  - twisted.python.log now handles RuntimeErrors more gracefully, and
254    always restores log observers after an exception is raised. (#4379)
255  - twisted.spread now supports updating new-style RemoteCache
256    instances. (#4447)
257  - twisted.spread.pb.CopiedFailure will no longer be thrown into a
258    generator as a (deprecated) string exception but as a
259    twisted.spread.pb.RemoteException. (#4520)
260  - trial now gracefully handles the presence of objects in sys.modules
261    which respond to attributes being set on them by modifying
262    sys.modules. (#4748)
263  - twisted.python.deprecate.deprecatedModuleAttribute no longer
264    spuriously warns twice when used to deprecate a module within a
265    package.  This should make it easier to write unit tests for
266    deprecated modules. (#4806)
267  - When pyOpenSSL 0.10 or newer is available, SSL support now uses
268    Twisted for all I/O and only relies on OpenSSL for cryptography,
269    avoiding a number of tricky, potentially broken edge cases. (#4854)
270  - IStreamClientEndpointStringParser.parseStreamClient now correctly
271    describes how it will be called by clientFromString (#4956)
272  - twisted.internet.defer.Deferreds are 10 times faster at handling
273    exceptions raised from callbacks, except when setDebugging(True)
274    has been called. (#5011)
275  - twisted.python.filepath.FilePath.copyTo now raises OSError(ENOENT)
276    if the source path being copied does not exist. (#5017)
277  - twisted.python.modules now supports iterating over namespace
278    packages without yielding duplicates. (#5030)
279  - reactor.spawnProcess now uses the resource module to guess the
280    maximum possible open file descriptor when /dev/fd exists but gives
281    incorrect results. (#5052)
282  - The memory BIO TLS/SSL implementation now supports producers
283    correctly. (#5063)
284  - twisted.spread.pb.Broker no longer creates an uncollectable
285    reference cycle when the logout callback holds a reference to the
286    client mind object. (#5079)
287  - twisted.protocols.tls, and SSL/TLS support in general, now do clean
288    TLS close alerts when disconnecting. (#5118)
289  - twisted.persisted.styles no longer uses the deprecated allYourBase
290    function (#5193)
291  - Stream client endpoints now start (doStart) and stop (doStop) the
292    factory passed to the connect method, instead of a different
293    implementation-detail factory. (#5278)
294  - SSL ports now consistently report themselves as SSL rather than TCP
295    when logging their close message. (#5292)
296  - Serial ports now deliver connectionLost to the protocol when
297    closed. (#3690)
298  - win32eventreactor now behaves better in certain rare cases in which
299    it previously would have failed to deliver connection lost
300    notification to a protocol. (#5233)
301
302 Improved Documentation
303 ----------------------
304  - Test driven development with Twisted and Trial is now documented in
305    a how-to. (#2443)
306  - A new howto-style document covering twisted.protocols.amp has been
307    added. (#3476)
308  - Added sample implementation of a Twisted push producer/consumer
309    system. (#3835)
310  - The "Deferred in Depth" tutorial now includes accurate output for
311    the deferred_ex2.py example. (#3941)
312  - The server howto now covers the Factory.buildProtocol method.
313    (#4761)
314  - The testing standard and the trial tutorial now recommend the
315    `assertEqual` form of assertions rather than the `assertEquals` to
316    coincide with the standard library unittest's preference. (#4989)
317  - twisted.python.filepath.FilePath's methods now have more complete
318    API documentation (docstrings). (#5027)
319  - The Clients howto now uses buildProtocol more explicitly, hopefully
320    making it easier to understand where Protocol instances come from.
321    (#5044)
322
323 Deprecations and Removals
324 -------------------------
325  - twisted.internet.interfaces.IFinishableConsumer is now deprecated.
326    (#2661)
327  - twisted.python.zshcomp is now deprecated in favor of the tab-
328    completion system in twisted.python.usage (#3078)
329  - The unzip and unzipIter functions in twisted.python.zipstream are
330    now deprecated. (#3666)
331  - Options.optStrings, deprecated for 7 years, has been removed.  Use
332    Options.optParameters instead. (#4552)
333  - Removed the deprecated twisted.python.dispatch module. (#5023)
334  - Removed the twisted.runner.procutils module that was deprecated in
335    Twisted 2.3. (#5049)
336  - Removed twisted.trial.runner.DocTestSuite, deprecated in Twisted
337    8.0. (#5111)
338  - twisted.scripts.tkunzip is now deprecated. (#5140)
339  - Deprecated option --password-file in twistd ftp (#4752)
340  - mktap, deprecated since Twisted 8.0, has been removed. (#5293)
341
342 Other
343 -----
344  - #1946, #2562, #2674, #3074, #3077, #3776, #4227, #4539, #4587,
345    #4619, #4624, #4629, #4683, #4690, #4702, #4778, #4944, #4945,
346    #4949, #4952, #4957, #4979, #4980, #4987, #4990, #4994, #4995,
347    #4997, #5003, #5008, #5009, #5012, #5019, #5042, #5046, #5051,
348    #5065, #5083, #5088, #5089, #5090, #5101, #5108, #5109, #5112,
349    #5114, #5125, #5128, #5131, #5136, #5139, #5144, #5146, #5147,
350    #5156, #5160, #5165, #5191, #5205, #5215, #5217, #5218, #5223,
351    #5243, #5244, #5250, #5254, #5261, #5266, #5273, #5299, #5301,
352    #5302, #5304, #5308, #5311, #5321, #5322, #5327, #5328, #5332,
353    #5336
354
355
356 Twisted Core 11.0.0 (2011-04-01)
357 ================================
358
359 Features
360 --------
361  - The reactor is not restartable, but it would previously fail to
362    complain. Now, when you restart an unrestartable reactor, you get
363    an exception. (#2066)
364  - twisted.plugin now only emits a short log message, rather than a
365    full traceback, if there is a problem writing out the dropin cache
366    file. (#2409)
367  - Added a 'replacement' parameter to the
368    'twisted.python.deprecate.deprecated' decorator.  This allows
369    deprecations to unambiguously specify what they have been
370    deprecated in favor of. (#3047)
371  - Added access methods to FilePath for FilePath.statinfo's st_ino,
372    st_dev, st_nlink, st_uid, and st_gid fields.  This is in
373    preparation for the deprecation of FilePath.statinfo. (#4712)
374  - IPv4Address and UNIXAddress now have a __hash__ method. (#4783)
375  - twisted.protocols.ftp.FTP.ftp_STOR now catches `FTPCmdError`s
376    raised by the file writer, and returns the error back to the
377    client. (#4909)
378
379 Bugfixes
380 --------
381  - twistd will no longer fail if a non-root user passes --uid 'myuid'
382    as a command-line argument. Instead, it will emit an error message.
383    (#3172)
384  - IOCPReactor now sends immediate completions to the main loop
385    (#3233)
386  - trial can now load test methods from multiple classes, even if the
387    methods all happen to be inherited from the same base class.
388    (#3383)
389  - twisted.web.server will now produce a correct Allow header when a
390    particular render_FOO method is missing. (#3678)
391  - HEAD requests made to resources whose HEAD handling defaults to
392    calling render_GET now always receive a response with no body.
393    (#3684)
394  - trial now loads decorated test methods whether or not the decorator
395    preserves the original method name. (#3909)
396  - t.p.amp.AmpBox.serialize will now correctly consistently complain
397    when being fed Unicode. (#3931)
398  - twisted.internet.wxreactor now supports stopping more reliably.
399    (#3948)
400  - reactor.spawnProcess on Windows can now handle ASCII-encodable
401    Unicode strings in the system environment (#3964)
402  - When C-extensions are not complied for twisted, on python2.4, skip
403    a test in twisted.internet.test.test_process that may hang due to a
404    SIGCHLD related problem. Running 'python setup.py build_ext
405    --inplace' will compile the extension and cause the test to both
406    run and pass. (#4331)
407  - twisted.python.logfile.LogFile now raises a descriptive exception
408    when passed a log  directoy which does not exist. (#4701)
409  - Fixed a bug where Inotify will fail to add a filepatch to watchlist
410    after it has been added/ignored previously. (#4708)
411  - IPv4Address and UNIXAddress object comparison operators fixed
412    (#4817)
413  - twisted.internet.task.Clock now sorts the list of pending calls
414    before and after processing each call (#4823)
415  - ConnectionLost is now in twisted.internet.error.__all__ instead of
416    twisted.words.protocols.jabber.xmlstream.__all__. (#4856)
417  - twisted.internet.process now detects the most appropriate mechanism
418    to use for detecting the open file descriptors on a system, getting
419    Twisted working on FreeBSD even when fdescfs is not mounted.
420    (#4881)
421  - twisted.words.services referenced nonexistent
422    twisted.words.protocols.irc.IRC_NOSUCHCHANNEL. This has been fixed.
423    Related code has also received test cases. (#4915)
424
425 Improved Documentation
426 ----------------------
427  - The INSTALL file now lists all of Twisted's dependencies. (#967)
428  - Added the stopService and startService methods to all finger
429    example files. (#3375)
430  - Missing reactor.run() calls were added in the UDP and client howto
431    documents. (#3834)
432  - The maxRetries attribute of
433    twisted.internet.protocols.RetryingClientFactory now has API
434    documentation. (#4618)
435  - Lore docs pointed to a template that no longer existed, this has
436    been fixed. (#4682)
437  - The `servers` argument to `twisted.names.client.createResolver` now
438    has more complete API documentation. (#4713)
439  - Linked to the Twisted endpoints tutorial from the Twisted core
440    howto list.  (#4773)
441  - The Endpoints howto now links to the API documentation. (#4774)
442  - The Quotes howto is now more clear in its PYTHONPATH setup
443    instructions. (#4785)
444  - The API documentation for DeferredList's fireOnOneCallback
445    parameter now gives the correct order of the elements of the result
446    tuple. (#4882)
447
448 Deprecations and Removals
449 -------------------------
450  - returning a value other than None from IProtocol.dataReceived was
451    deprecated (#2491)
452  - Deprecated the --extra option in trial.  (#3372)
453  - twisted.protocols._c_urlarg has been removed. (#4162)
454  - Remove the --report-profile option for twistd, deprecated since
455    2007. (#4236)
456  - Deprecated twisted.persisted.journal.  This library is no longer
457    maintained.  (#4298)
458  - Removed twisted.protocols.loopback.loopback, which has been
459    deprecated since Twisted 2.5. (#4547)
460  - __getitem__ __getslice__ and __eq__ (tuple comparison, indexing)
461    removed from twisted.internet.address.IPv4Address and
462    twisted.internet.address.UNIXAddress classes UNIXAddress and
463    IPv4Address properties _bwHack are now deprecated in
464    twisted.internet.address (#4817)
465  - twisted.python.reflect.allYourBase is now no longer used, replaced
466    with inspect.getmro (#4928)
467  - allYourBase and accumulateBases are now deprecated in favor of
468    inspect.getmro. (#4946)
469
470 Other
471 -----
472  - #555, #1982, #2618, #2665, #2666, #4035, #4247, #4567, #4636,
473    #4717, #4733, #4750, #4821, #4842, #4846, #4853, #4857, #4858,
474    #4863, #4864, #4865, #4866, #4867, #4868, #4869, #4870, #4871,
475    #4872, #4873, #4874, #4875, #4876, #4877, #4878, #4879, #4905,
476    #4906, #4908, #4934, #4955, #4960
477
478
479 Twisted Core 10.2.0 (2010-11-29)
480 ================================
481
482 Features
483 --------
484  - twisted.internet.cfreactor has been significantly improved.  It now
485    runs, and passes, the test suite.  Many, many bugs in it have been
486    fixed, including several segfaults, as it now uses PyObjC and
487    longer requires C code in Twisted. (#1833)
488  - twisted.protocols.ftp.FTPRealm now accepts a parameter to override
489    "/home" as the container for user directories.  The new
490    BaseFTPRealm class in the same module also allows easy
491    implementation of custom user directory schemes. (#2179)
492  - twisted.python.filepath.FilePath and twisted.python.zippath.ZipPath
493    now have a descendant method to simplify code which calls the child
494    method repeatedly. (#3169)
495  - twisted.python.failure._Frame objects now support fake f_locals
496    attribute. (#4045)
497  - twisted.internet.endpoints now has 'serverFromString' and
498    'clientFromString' APIs for constructing endpoints from descriptive
499    strings. (#4473)
500  - The default trial reporter now combines reporting of tests with the
501    same result to shorten its summary output. (#4487)
502  - The new class twisted.protocols.ftp.SystemFTPRealm implements an
503    FTP realm which uses system accounts to select home directories.
504    (#4494)
505  - twisted.internet.reactor.spawnProcess now wastes less time trying
506    to close non-existent file descriptors on POSIX platforms. (#4522)
507  - twisted.internet.win32eventreactor now declares that it implements
508    a new twisted.internet.interfaces.IReactorWin32Events interface.
509    (#4523)
510  - twisted.application.service.IProcess now documents its attributes
511    using zope.interface.Attribute. (#4534)
512  - twisted.application.app.ReactorSelectionMixin now saves the value
513    of the --reactor option in the "reactor" key of the options object.
514    (#4563)
515  - twisted.internet.endpoints.serverFromString and clientFromString,
516    and therefore also twisted.application.strports.service, now
517    support plugins, so third parties may implement their own endpoint
518    types. (#4695)
519
520 Bugfixes
521 --------
522  - twisted.internet.defer.Deferred now handles chains iteratively
523    instead of recursively, preventing RuntimeError due to excessive
524    recursion when handling long Deferred chains. (#411)
525  - twisted.internet.cfreactor now works with trial. (#2556)
526  - twisted.enterprise.adbapi.ConnectionPool.close may now be called
527    even if the connection pool has not yet been started.  This will
528    prevent the pool from ever starting. (#2680)
529  - twisted.protocols.basic.NetstringReceiver raises
530    NetstringParseErrors for  invalid netstrings now. It handles empty
531    netstrings ("0:,") correctly, and  the performance for receiving
532    netstrings has been improved. (#4378)
533  - reactor.listenUDP now returns an object which declares that it
534    implements IListeningPort. (#4462)
535  - twisted.python.randbytes no longer uses PyCrypto as a secure random
536    number source (since it is not one). (#4468)
537  - twisted.internet.main.installReactor now blocks installation of
538    another reactor when using python -O (#4476)
539  - twisted.python.deprecate.deprecatedModuleAttribute now emits only
540    one warning when used to deprecate a package attribute which is a
541    module. (#4492)
542  - The "brief" mode of twisted.python.failure.Failure.getTraceback now
543    handles exceptions raised by the underlying exception's __str__
544    method. (#4501)
545  - twisted.words.xish.domish now correctly parses XML with namespaces
546    which include whitespace. (#4503)
547  - twisted.names.authority.FileAuthority now generates correct
548    negative caching hints, marks its referral NS RRs as non-
549    authoritative, and correctly generates referrals for ALL_RECORDS
550    requests. (#4513)
551  - twisted.internet.test.reactormixins.ReactorBuilder's attribute
552    `requiredInterface` (which should an interface) is now
553    `requiredInterfaces` (a list of interfaces) as originally described
554    per the documentation. (#4527)
555  - twisted.python.zippath.ZipPath.__repr__ now correctly formats paths
556    with ".." in them (by including it). (#4535)
557  - twisted.names.hosts.searchFileFor has been fixed against
558    refcounting dependency. (#4540)
559  - The POSIX process transports now declare that they implement
560    IProcessTransport. (#4585)
561  - Twisted can now be built with the LLVM clang compiler, with
562    'CC=clang python setup.py build'.  C code that caused errors with
563    this compiler has been removed. (#4652)
564  - trial now puts coverage data in the path specified by --temp-
565    directory, even if that option comes after --coverage on the
566    command line. (#4657)
567  - The unregisterProducer method of connection-oriented transports
568    will now cause the connection to be closed if there was a prior
569    call to loseConnection. (#4719)
570  - Fixed an issue where the new StreamServerEndpointService didn't log
571    listen errors.  (This was a bug not present in any previous
572    releases, as this class is new.) (#4731)
573
574 Improved Documentation
575 ----------------------
576  - The trial man page now documents the meaning of the final line of
577    output of the default reporter. (#1384)
578  - The API documentation for twisted.internet.defer.DeferredList now
579    goes into more depth about the effects each of the __init__ flags
580    that class accepts. (#3595)
581  - There is now narrative documentation for the endpoints APIs, in the
582    'endpoints' core howto, as well as modifications to the 'writing
583    clients' and 'writing servers' core howto documents to indicate
584    that endpoints are now the preferred style of listening and
585    connecting. (#4478)
586  - trial's man page now documents the --disablegc option in more
587    detail. (#4511)
588  - trial's coverage output format is now documented in the trial man
589    page. (#4512)
590  - Broken links and spelling errors in the finger tutorial are now
591    fixed. (#4516)
592  - twisted.internet.threads.blockingCallFromThread's docstring is now
593    explicit about Deferred support. (#4517)
594  - twisted.python.zippath.ZipPath.child now documents its handling of
595    ".." (which is not special, making it different from
596    FilePath.child). (#4535)
597  - The API docs for twisted.internet.defer.Deferred now cover several
598    more of its (less interesting) attributes. (#4538)
599  - LineReceiver, NetstringReceiver, and IntNStringReceiver from
600    twisted.protocols.basic now have improved API documentation for
601    read callbacks and write methods. (#4542)
602  - Tidied up the Twisted Conch documentation for easier conversion.
603    (#4566)
604  - Use correct Twisted version for when cancellation was introduced in
605    the Deferred docstring. (#4614)
606  - The logging howto is now more clear about how the standard library
607    logging module and twisted.python.log can be integrated. (#4642)
608  - The finger tutorial still had references to .tap files. This
609    reference has now been removed. The documentation clarifies
610    "finger.tap" is a module and not a filename. (#4679)
611  - The finger tutorial had a broken link to the
612    twisted.application.service.Service class, which is now fixed.
613    Additionally, a minor typo ('verison') was fixed.  (#4681)
614  - twisted.protocols.policies.TimeoutMixin now has clearer API
615    documentation. (#4684)
616
617 Deprecations and Removals
618 -------------------------
619  - twisted.internet.defer.Deferred.setTimeout has been removed, after
620    being deprecated since Twisted 2.0. (#1702)
621  - twisted.internet.interfaces.IReactorTime.cancelCallLater
622    (deprecated since  2007) and
623    twisted.internet.interfaces.base.ReactorBase.cancelCallLater
624    (deprecated since 2002) have been removed. (#4076)
625  - Removed twisted.cred.util.py, which has been deprecated since
626    Twisted 8.3. (#4107)
627  - twisted.python.text.docstringLStrip was deprecated. (#4328)
628  - The module attributes `LENGTH`, `DATA`, `COMMA`, and `NUMBER` of
629    twisted.protocols.basic (previously used by `NetstringReceiver`)
630    are now deprecated. (#4541)
631  - twisted.protocols.basic.SafeNetstringReceiver, deprecated since
632    2001 (before Twisted 2.0), was removed. (#4546)
633  - twisted.python.threadable.whenThreaded, deprecated since Twisted
634    2.2.0, has been removed. (#4550)
635  - twisted.python.timeoutqueue, deprecated since Twisted 8.0, has been
636    removed. (#4551)
637  - iocpreactor transports can no longer be pickled. (#4617)
638
639 Other
640 -----
641  - #4300, #4475, #4477, #4504, #4556, #4562, #4564, #4569, #4608,
642    #4616, #4617, #4626, #4630, #4650, #4705
643
644
645 Twisted Core 10.1.0 (2010-06-27)
646 ================================
647
648 Features
649 --------
650  - Add linux inotify support, allowing monitoring of file system
651    events. (#972)
652  - Deferreds now support cancellation. (#990)
653  - Added new "endpoint" interfaces in twisted.internet.interfaces,
654    which abstractly describe stream transport endpoints which can be
655    listened on or connected to.  Implementations for TCP and SSL
656    clients and servers are present in twisted.internet.endpoints.
657    Notably, client endpoints' connect() methods return cancellable
658    Deferreds, so code written to use them can bypass the awkward
659    "ClientFactory.clientConnectionFailed" and
660    "Connector.stopConnecting" methods, and handle errbacks from or
661    cancel the returned deferred, respectively. (#1442)
662  - twisted.protocols.amp.Integer's documentation now clarifies that
663    integers of arbitrary size are supported and that the wire format
664    is a base-10 representation. (#2650)
665  - twisted.protocols.amp now includes support for transferring
666    timestamps (amp.DateTime) and decimal values (amp.Decimal). (#2651)
667  - twisted.protocol.ftp.IWriteFile now has a close() method, which can
668    return a Deferred. Previously a STOR command would finish
669    immediately upon the receipt of the last byte of the uploaded file.
670    With close(), the backend can delay the finish until it has
671    performed some other slow action (like storing the data to a
672    virtual filesystem). (#3462)
673  - FilePath now calls os.stat() only when new status information is
674    required, rather than immediately when anything changes.  For some
675    applications this may result in fewer stat() calls.  Additionally,
676    FilePath has a new method, 'changed', which applications may use to
677    indicate that the FilePath may have been changed on disk and
678    therefore the next status information request must  fetch a new
679    stat result.  This is useful if external systems, such as C
680    libraries, may have changed files that Twisted applications are
681    referencing via a FilePath. (#4130)
682  - Documentation improvements are now summarized in the NEWS file.
683    (#4224)
684  - twisted.internet.task.deferLater now returns a cancellable
685    Deferred. (#4318)
686  - The connect methods of twisted.internet.protocol.ClientCreator now
687    return cancellable Deferreds. (#4329)
688  - twisted.spread.pb now has documentation covering some of its
689    limitations. (#4402)
690  - twisted.spread.jelly now supports jellying and unjellying classes
691    defined with slots if they also implement __getstate__ and
692    __setstate__. (#4430)
693  - twisted.protocols.amp.ListOf arguments can now be specified as
694    optional. (#4474)
695
696 Bugfixes
697 --------
698  - On POSIX platforms, reactors now support child processes in a way
699    which doesn't cause other syscalls to sometimes fail with EINTR (if
700    running on Python 2.6 or if Twisted's extension modules have been
701    built). (#733)
702  - Substrings are escaped before being passed to a regular expression
703    for searching to ensure that they don't get interpreted as part of
704    the expression. (#1893)
705  - twisted.internet.stdio now supports stdout being redirected to a
706    normal file (except when using epollreactor). (#2259)
707  -  (#2367)
708  - The tap2rpm script now works with modern versions of RPM. (#3292)
709  - twisted.python.modules.walkModules will now handle packages
710    explicitly precluded from importing by a None placed in
711    sys.modules. (#3419)
712  - ConnectedDatagramPort now uses stopListening when a connection
713    fails instead of the deprecated loseConnection. (#3425)
714  - twisted.python.filepath.FilePath.setContent is now safe for
715    multiple processes to use concurrently. (#3694)
716  - The mode argument to the methods of
717    twisted.internet.interfaces.IReactorUNIX is no longer deprecated.
718    (#4078)
719  - Do not include blacklisted projects when generating NEWS. (#4190)
720  - When generating NEWS for a project that had no significant changes,
721    include a section for that project and say that there were no
722    interesting changes. (#4191)
723  - Redundant 'b' mode is no longer passed to calls to FilePath.open
724    and FilePath.open itself now corrects the mode when multiple 'b'
725    characters are present, ensuring only one instance of 'b' is
726    provided, as a workaround for http://bugs.python.org/issue7686.
727    (#4207)
728  - HTML tags inside <pre> tags in the code snippets are now escaped.
729    (#4336)
730  - twisted.protocols.amp.CommandLocator now allows subclasses to
731    override responders inherited from base classes. (#4343)
732  - Fix a bunch of small but important defects in the INSTALL, README
733    and so forth. (#4346)
734  - The poll, epoll, glib2, and gtk2 reactors now all support half-
735    close in the twisted.internet.stdio.StandardIO transport. (#4352)
736  - twisted.application.internet no longer generates an extra and
737    invalid entry in its __all__ list for the nonexistent
738    MulticastClient. (#4373)
739  - Choosing a reactor documentation now says that only the select-
740    based reactor is a truly cross-platform reactor. (#4384)
741  - twisted.python.filepath.FilePath now no longer leaves files open,
742    to be closed by the garbage collector, when an exception is raised
743    in the implementation of setContent, getContent, or copyTo. (#4400)
744  - twisted.test.proto_helpers.StringTransport's getHost and getPeer
745    methods now return IPv4Address instances by default. (#4401)
746  - twisted.protocols.amp.BinaryBoxProtocol will no longer deliver an
747    empty string to a switched-to protocol's dataReceived method when
748    the BinaryBoxProtocol's buffer happened to be empty at the time of
749    the protocol switch. (#4405)
750  - IReactorUNIX.listenUNIX implementations now support abstract
751    namespace sockets on Linux. (#4421)
752  - Files opened with FilePath.create() (and therefore also files
753    opened via FilePath.open() on a path with alwaysCreate=True) will
754    now be opened in binary mode as advertised, so that they will
755    behave portably across platforms. (#4453)
756  - The subunit reporter now correctly reports import errors as errors,
757    rather than by crashing with an unrelated error. (#4496)
758
759 Improved Documentation
760 ----------------------
761  - The finger tutorial example which introduces services now avoids
762    double-starting the loop to re-read its users file. (#4420)
763  - twisted.internet.defer.Deferred.callback's docstring now mentions
764    the implicit chaining feature. (#4439)
765  - doc/core/howto/listing/pb/chatclient.py can now actually send a
766    group message. (#4459)
767
768 Deprecations and Removals
769 -------------------------
770  - twisted.internet.interfaces.IReactorArbitrary,
771    twisted.application.internet.GenericServer, and
772    twisted.application.internet.GenericClient are now deprecated.
773    (#367)
774  - twisted.internet.gtkreactor is now deprecated. (#2833)
775  - twisted.trial.util.findObject has been deprecated. (#3108)
776  - twisted.python.threadpool.ThreadSafeList is deprecated and Jython
777    platform detection in Twisted core removed (#3725)
778  - twisted.internet.interfaces.IUDPConnectedTransport has been removed
779    (deprecated since Twisted 9.0). (#4077)
780  - Removed twisted.application.app.runWithProfiler, which has been
781    deprecated since Twisted 8.0. (#4090)
782  - Removed twisted.application.app.runWithHotshot, which has been
783    deprecated since Twisted 8.0. (#4091)
784  - Removed twisted.application.app.ApplicationRunner.startLogging,
785    which has been deprecated (doesn't say since when), as well as
786    support for the legacy
787    twisted.application.app.ApplicationRunner.getLogObserver method.
788    (#4092)
789  - twisted.application.app.reportProfile has been removed. (#4093)
790  - twisted.application.app.getLogFile has been removed. (#4094)
791  - Removed twisted.cred.util.py, which has been deprecated since
792    Twisted 8.3. (#4107)
793  - twisted.python.util.dsu is now deprecated. (#4339)
794  - In twisted.trial.util: FailureError, DirtyReactorWarning,
795    DirtyReactorError, and PendingTimedCallsError, which have all been
796    deprecated since Twisted 8.0, have been removed. (#4505)
797
798 Other
799 -----
800  - #1363, #1742, #3170, #3359, #3431, #3738, #4088, #4206, #4221,
801    #4239, #4257, #4272, #4274, #4287, #4291, #4293, #4309, #4316,
802    #4319, #4324, #4332, #4335, #4348, #4358, #4394, #4399, #4409,
803    #4418, #4443, #4449, #4479, #4485, #4486, #4497
804
805
806 Twisted Core 10.0.0 (2010-03-01)
807 ================================
808
809 Features
810 --------
811  - The twistd man page now has a SIGNALS section. (#689)
812
813  - reactor.spawnProcess now will not emit a PotentialZombieWarning
814    when called before reactor.run, and there will be no potential for
815    zombie processes in this case. (#2078)
816
817  - High-throughput applications based on Perspective Broker should now
818    run noticably faster thanks to the use of a more efficient decoding
819    function in Twisted Spread. (#2310)
820
821  - Documentation for trac-post-commit-hook functionality in svn-dev
822    policy. (#3867)
823
824  - twisted.protocols.socks.SOCKSv4 now supports the SOCKSv4a protocol.
825    (#3886)
826
827  - Trial can now output test results according to the subunit
828    protocol, as long as Subunit is installed (see
829    https://launchpad.net/subunit). (#4004)
830
831  - twisted.protocols.amp now provides a ListOf argument type which can
832    be composed with some other argument types to create a zero or more
833    element sequence of that type. (#4116)
834
835  - If returnValue is invoked outside of a function decorated with
836    @inlineCallbacks, but causes a function thusly decorated to exit, a
837    DeprecationWarning will be emitted explaining this potentially
838    confusing behavior.  In a future release, this will cause an
839    exception. (#4157)
840
841  - twisted.python.logfile.BaseLogFile now has a reopen method allowing
842    you to use an external logrotate mechanism. (#4255)
843
844 Bugfixes
845 --------
846  - FTP.ftp_NLST now handles requests on invalid paths in a way
847    consistent with RFC 959. (#1342)
848
849  - twisted.python.util.initgroups now calls the low-level C initgroups
850    by default if available: the python version can create lots of I/O
851    with certain authentication setup to retrieve all the necessary
852    information. (#3226)
853
854  - startLogging now does nothing on subsequent invocations, thus
855    fixing a terrible infinite recursion bug that's only on edge case.
856    (#3289)
857
858  - Stringify non-string data to NetstringReceiver.sendString before
859    calculating the length so that the calculated length is equal to
860    the actual length of the transported data. (#3299)
861
862  - twisted.python.win32.cmdLineQuote now correctly quotes empty
863    strings arguments (#3876)
864
865  - Change the behavior of the Gtk2Reactor to register only one source
866    watch for each file descriptor, instead of one for reading and one
867    for writing. In particular, it fixes a bug with Glib under Windows
868    where we failed to notify when a client is connected. (#3925)
869
870  - Twisted Trial no longer crashes if it can't remove an old
871    _trial_temp directory.  (#4020)
872
873  - The optional _c_urlarg extension now handles unquote("") correctly
874    on platforms where malloc(0) returns NULL, such as AIX.  It also
875    compiles with less warnings. (#4142)
876
877  - On POSIX, child processes created with reactor.spawnProcess will no
878    longer automatically ignore the signals which the parent process
879    has set to be ignored. (#4199)
880
881  - All SOCKSv4a tests now use a dummy reactor with a deterministic
882    resolve method. (#4275)
883
884  - Prevent extraneous server, date and content-type headers in proxy
885    responses. (#4277)
886
887 Deprecations and Removals
888 -------------------------
889  - twisted.internet.error.PotentialZombieWarning is now deprecated.
890    (#2078)
891
892  - twisted.test.time_helpers is now deprecated. (#3719)
893
894  - The deprecated connectUDP method of IReactorUDP has now been
895    removed. (#4075)
896
897  - twisted.trial.unittest.TestCase now ignores the previously
898    deprecated setUpClass and tearDownClass methods. (#4175)
899
900 Other
901 -----
902  - #917, #2406, #2481, #2608, #2689, #2884, #3056, #3082, #3199,
903    #3480, #3592, #3718, #3935, #4066, #4083, #4154, #4166, #4169,
904    #4176, #4183, #4186, #4188, #4189, #4194, #4201, #4204, #4209,
905    #4222, #4234, #4235, #4238, #4240, #4245, #4251, #4264, #4268,
906    #4269, #4282
907
908
909 Twisted Core 9.0.0 (2009-11-24)
910 ===============================
911
912 Features
913 --------
914  - LineReceiver.clearLineBuffer now returns the bytes that it cleared (#3573)
915  - twisted.protocols.amp now raises InvalidSignature when bad arguments are
916    passed to Command.makeArguments (#2808)
917  - IArgumentType was added to represent an existing but previously unspecified
918    interface in amp (#3468)
919  - Obscure python tricks have been removed from the finger tutorials (#2110)
920  - The digest auth implementations in twisted.web and twisted.protocolos.sip
921    have been merged together in twisted.cred (#3575)
922  - FilePath and ZipPath now has a parents() method which iterates up all of its
923    parents (#3588)
924  - reactors which support threads now have a getThreadPool method (#3591)
925  - The MemCache client implementation now allows arguments to the "stats"
926    command (#3661)
927  - The MemCache client now has a getMultiple method which allows fetching of
928    multiple values (#3171)
929  - twisted.spread.jelly can now unserialize some new-style classes (#2950)
930  - twisted.protocols.loopback.loopbackAsync now accepts a parameter to control
931    the data passed between client and server (#3820)
932  - The IOCP reactor now supports SSL (#593)
933  - Tasks in a twisted.internet.task.Cooperator can now be paused, resumed, and
934    cancelled (#2712)
935  - AmpList arguments can now be made optional (#3891)
936  - The syslog output observer now supports log levels (#3300)
937  - LoopingCall now supports reporting the number of intervals missed if it
938    isn't able to schedule calls fast enough (#3671)
939
940 Fixes
941 -----
942  - The deprecated md5 and sha modules are no longer used if the stdlib hashlib
943    module is available (#2763)
944  - An obscure deadlock involving waking up the reactor within signal handlers
945    in particular threads was fixed (#1997)
946  - The passivePortRange attribute of FTPFactory is now honored (#3593)
947  - TestCase.flushWarnings now flushes warnings even if they were produced by a
948    file that was renamed since it was byte compiled (#3598)
949  - Some internal file descriptors are now marked as close-on-exec, so these will
950    no longer be leaked to child processes (#3576)
951  - twisted.python.zipstream now correctly extracts the first file in a directory
952    as a file, and not an empty directory (#3625)
953  - proxyForInterface now returns classes which correctly *implement* interfaces
954    rather than *providing* them (#3646)
955  - SIP Via header parameters should now be correctly generated (#2194)
956  - The Deferred returned by stopListening would sometimes previously never fire
957    if an exception was raised by the underlying file descriptor's connectionLost
958    method. Now the Deferred will fire with a failure (#3654)
959  - The command-line tool "manhole" should now work with newer versions of pygtk
960    (#2464)
961  - When a DefaultOpenSSLContextFactory is instantiated with invalid parameters,
962    it will now raise an exception immediately instead of waiting for the first
963    connection (#3700)
964  - Twisted command line scripts should now work when installed in a virtualenv
965    (#3750)
966  - Trial will no longer delete temp directories which it did not create (#3481)
967  - Processes started on Windows should now be cleaned up properly in more cases
968    (#3893)
969  - Certain misbehaving importers will no longer cause twisted.python.modules
970    (and thus trial) to raise an exception, but rather issue a warning (#3913)
971  - MemCache client protocol methods will now fail when the transport has been
972    disconnected (#3643)
973  - In the AMP method callRemoteString, the requiresAnswer parameter is now
974    honored (#3999)
975  - Spawning a "script" (a file which starts with a #! line) on Windows running
976    Python 2.6 will now work instead of raising an exception about file mode
977    "ru" (#3567)
978  - FilePath's walk method now calls its "descend" parameter even on the first
979    level of children, instead of only on grandchildren. This allows for better
980    symlink cycle detection (#3911)
981  - Attempting to write unicode data to process pipes on Windows will no longer
982    result in arbitrarily encoded messages being written to the pipe, but instead
983    will immediately raise an error (#3930)
984  - The various twisted command line utilities will no longer print
985    ModuleType.__doc__ when Twisted was installed with setuptools (#4030)
986  - A Failure object will now be passed to connectionLost on stdio connections
987    on Windows, instead of an Exception object (#3922)
988
989 Deprecations and Removals
990 -------------------------
991  - twisted.persisted.marmalade was deleted after a long period of deprecation
992    (#876)
993  - Some remaining references to the long-gone plugins.tml system were removed
994    (#3246)
995  - SSLv2 is now disabled by default, but it can be re-enabled explicitly
996    (#3330)
997  - twisted.python.plugin has been removed (#1911)
998  - reactor.run will now raise a ReactorAlreadyRunning exception when it is
999    called reentrantly instead of warning a DeprecationWarning (#1785)
1000  - twisted.spread.refpath is now deprecated because it is unmaintained,
1001    untested, and has dubious value (#3723)
1002  - The unused --quiet flag has been removed from the twistd command (#3003)
1003
1004 Other
1005 -----
1006  - #3545, #3490, #3544, #3537, #3455, #3315, #2281, #3564, #3570, #3571, #3486,
1007    #3241, #3599, #3220, #1522, #3611, #3596, #3606, #3609, #3602, #3637, #3647,
1008    #3632, #3675, #3673, #3686, #2217, #3685, #3688, #2456, #506, #3635, #2153,
1009    #3581, #3708, #3714, #3717, #3698, #3747, #3704, #3707, #3713, #3720, #3692,
1010    #3376, #3652, #3695, #3735, #3786, #3783, #3699, #3340, #3810, #3822, #3817,
1011    #3791, #3859, #2459, #3677, #3883, #3894, #3861, #3822, #3852, #3875, #2722,
1012    #3768, #3914, #3885, #2719, #3905, #3942, #2820, #3990, #3954, #1627, #2326,
1013    #2972, #3253, #3937, #4058, #1200, #3639, #4079, #4063, #4050
1014
1015
1016 Core 8.2.0 (2008-12-16)
1017 =======================
1018
1019 Features
1020 --------
1021  - Reactors are slowly but surely becoming more isolated, thus improving
1022    testability (#3198)
1023  - FilePath has gained a realpath method, and FilePath.walk no longer infinitely
1024    recurses in the case of a symlink causing a self-recursing filesystem tree
1025    (#3098)
1026  - FilePath's moveTo and copyTo methods now have an option to disable following
1027    of symlinks (#3105)
1028  - Private APIs are now included in the API documentation (#3268)
1029  - hotshot is now the default profiler for the twistd --profile parameter and
1030    using cProfile is now documented (#3355, #3356)
1031  - Process protocols can now implement a processExited method, which is
1032    distinct from processEnded in that it is called immediately when the child
1033    has died, instead of waiting for all the file descriptors to be closed
1034    (#1291)
1035  - twistd now has a --umask option (#966, #3024)
1036  - A new deferToThreadPool function exists in twisted.internet.threads (#2845)
1037  - There is now an example of writing an FTP server in examples/ftpserver.py
1038    (#1579)
1039  - A new runAsEffectiveUser function has been added to twisted.python.util
1040    (#2607)
1041  - twisted.internet.utils.getProcessOutput now offers a mechanism for
1042    waiting for the process to actually end, in the event of data received on
1043    stderr (#3239)
1044  - A fullyQualifiedName function has been added to twisted.python.reflect
1045    (#3254)
1046  - strports now defaults to managing access to a UNIX socket with a lock;
1047    lockfile=0 can be included in the strports specifier to disable this
1048    behavior (#2295)
1049  - FTPClient now has a 'rename' method (#3335)
1050  - FTPClient now has a 'makeDirectory' method (#3500)
1051  - FTPClient now has a 'removeFile' method (#3491)
1052  - flushWarnings, A new Trial method for testing warnings, has been added
1053    (#3487, #3427, #3506)
1054  - The log observer can now be configured in .tac files (#3534)
1055
1056 Fixes
1057 -----
1058  - TLS Session Tickets are now disabled by default, allowing connections to
1059    certain servers which hang when an empty session ticket is received (like 
1060    GTalk) (#3463)
1061  - twisted.enterprise.adbapi.ConnectionPool's noisy attribute now defaults to
1062    False, as documented (#1806)
1063  - Error handling and logging in adbapi is now much improved (#3244)
1064  - TCP listeners can now be restarted (#2913)
1065  - Doctests can now be rerun with trial's --until-failure option (#2713)
1066  - Some memory leaks have been fixed in trial's --until-failure
1067    implementation (#3119, #3269)
1068  - Trial's summary reporter now prints correct runtime information and handles
1069    the case of 0 tests (#3184)
1070  - Trial and any other user of the 'namedAny' function now has better error
1071    reporting in the case of invalid module names (#3259)
1072  - Multiple instances of trial can now run in parallel in the same directory
1073    by creating _trial_temp directories with an incremental suffix (#2338)
1074  - Trial's failUnlessWarns method now works on Python 2.6 (#3223)
1075  - twisted.python.log now hooks into the warnings system in a way compatible
1076    with Python 2.6 (#3211)
1077  - The GTK2 reactor is now better supported on Windows, but still not passing
1078    the entire test suite (#3203)
1079  - low-level failure handling in spawnProcess has been improved and no longer
1080    leaks file descriptors (#2305, #1410)
1081  - Perspective Broker avatars now have their logout functions called in more
1082    cases (#392)
1083  - Log observers which raise exceptions are no longer removed (#1069)
1084  - transport.getPeer now always includes an IP address in the Address returned
1085    instead of a hostname (#3059)
1086  - Functions in twisted.internet.utils which spawn processes now avoid calling
1087    chdir in the case where no working directory is passed, to avoid some
1088    obscure permission errors (#3159)
1089  - twisted.spread.publish.Publishable no longer corrupts line endings on
1090    Windows (#2327)
1091  - SelectReactor now properly detects when a TLS/TCP connection has been
1092    disconnected (#3218)
1093  - twisted.python.lockfile no longer raises an EEXIST OSError and is much
1094    better supported on Windows (#3367)
1095  - When ITLSTransport.startTLS is called while there is data in the write
1096    buffer, TLS negotiation will now be delayed instead of the method raising
1097    an exception (#686)
1098  - The userAnonymous argument to FTPFactory is now honored (#3390)
1099  - twisted.python.modules no longer tries to "fix" sys.modules after an import
1100    error, which was just causing problems (#3388)
1101  - setup.py no longer attempts to build extension modules when run with Jython
1102    (#3410)
1103  - AMP boxes can now be sent in IBoxReceiver.startReceivingBoxes (#3477)
1104  - AMP connections are closed as soon as a key length larger than 255 is
1105    received (#3478)
1106  - Log events with timezone offsets between -1 and -59 minutes are now
1107    correctly reported as negative (#3515)
1108
1109 Deprecations and Removals
1110 -------------------------
1111  - Trial's setUpClass and tearDownClass methods are now deprecated (#2903)
1112  - problemsFromTransport has been removed in favor of the argument passed to
1113    connectionLost (#2874)
1114  - The mode parameter to methods of IReactorUNIX and IReactorUNIXDatagram are
1115    deprecated in favor of applications taking other security precautions, since
1116    the mode of a Unix socket is often not respected (#1068)
1117  - Index access on instances of twisted.internet.defer.FirstError has been
1118    removed in favor of the subFailure attribute (#3298)
1119  - The 'changeDirectory' method of FTPClient has been deprecated in favor of
1120    the 'cwd' method (#3491)
1121
1122 Other
1123 -----
1124
1125  - #3202, #2869, #3225, #2955, #3237, #3196, #2355, #2881, #3054, #2374, #2918,
1126    #3210, #3052, #3267, #3288, #2985, #3295, #3297, #2512, #3302, #1222, #2631,
1127    #3306, #3116, #3215, #1489, #3319, #3320, #3321, #1255, #2169, #3182, #3323,
1128    #3301, #3318, #3029, #3338, #3346, #1144, #3173, #3165, #685, #3357, #2582,
1129    #3370, #2438, #1253, #637, #1971, #2208, #979, #1790, #1888, #1882, #1793,
1130    #754, #1890, #1931, #1246, #1025, #3177, #2496, #2567, #3400, #2213, #2027,
1131    #3415, #1262, #3422, #2500, #3414, #3045, #3111, #2974, #2947, #3222, #2878,
1132    #3402, #2909, #3423, #1328, #1852, #3382, #3393, #2029, #3489, #1853, #2026,
1133    #2375, #3502, #3482, #3504, #3505, #3507, #2605, #3519, #3520, #3121, #3484,
1134    #3439, #3216, #3511, #3524, #3521, #3197, #2486, #2449, #2748, #3381, #3236,
1135    #671
1136
1137
1138 8.1.0 (2008-05-18)
1139 ==================
1140
1141 Features
1142 --------
1143
1144  - twisted.internet.error.ConnectionClosed is a new exception which is the
1145    superclass of ConnectionLost and ConnectionDone (#3137)
1146  - Trial's CPU and memory performance should be better now (#3034)
1147  - twisted.python.filepath.FilePath now has a chmod method (#3124)
1148
1149 Fixes
1150 -----
1151
1152  - Some reactor re-entrancy regressions were fixed (#3146, #3168)
1153  - A regression was fixed whereby constructing a Failure for an exception and
1154    traceback raised out of a Pyrex extension would fail (#3132)
1155  - CopyableFailures in PB can again be created from CopiedFailures (#3174)
1156  - FilePath.remove, when called on a FilePath representing a symlink to a
1157    directory, no longer removes the contents of the targeted directory, and
1158    instead removes the symlink (#3097)
1159  - FilePath now has a linkTo method for creating new symlinks (#3122)
1160  - The docstring for Trial's addCleanup method now correctly specifies when
1161    cleanup functions are run (#3131)
1162  - assertWarns now deals better with multiple identical warnings (#2904)
1163  - Various windows installer bugs were fixed (#3115, #3144, #3150, #3151, #3164)
1164  - API links in the howto documentation have been corrected (#3130)
1165  - The Win32 Process transport object now has a pid attribute (#1836)
1166  - A doc bug in the twistd plugin howto which would inevitably lead to
1167    confusion was fixed (#3183)
1168  - A regression breaking IOCP introduced after the last release was fixed
1169    (#3200)
1170
1171
1172 Deprecations and Removals
1173 -------------------------
1174
1175  - mktap is now fully deprecated, and will emit DeprecationWarnings when used
1176    (#3127)
1177
1178 Other
1179 -----
1180  - #3079, #3118, #3120, #3145, #3069, #3149, #3186, #3208, #2762
1181
1182
1183 8.0.1 (2008-03-26)
1184 ==================
1185
1186 Fixes
1187 -----
1188  - README no longer refers to obsolete trial command line option
1189  - twistd no longer causes a bizarre DeprecationWarning about mktap
1190
1191
1192 8.0.0 (2008-03-17)
1193 ==================
1194
1195 Features
1196 --------
1197
1198  - The IOCP reactor has had many changes and is now greatly improved
1199    (#1760, #3055)
1200  - The main Twisted distribution is now easy_installable (#1286, #3110)
1201  - twistd can now profile with cProfile (#2469)
1202  - twisted.internet.defer contains a DeferredFilesystemLock which gives a
1203    Deferred interface to lock file acquisition (#2180)
1204  - twisted.python.modules is a new system for representing and manipulating
1205    module paths (i.e. sys.path) (#1951)
1206  - twisted.internet.fdesc now contains a writeToFD function, along with other
1207    minor fixes (#2419)
1208  - twisted.python.usage now allows optional type enforcement (#739)
1209  - The reactor now has a blockingCallFromThread method for non-reactor threads
1210    to use to wait for a reactor-scheduled call to return a result (#1042, #3030)
1211  - Exceptions raised inside of inlineCallbacks-using functions now have a
1212    better chance of coming with a meaningful traceback (#2639, #2803)
1213  - twisted.python.randbytes now contains code for generating secure random
1214    bytes (#2685)
1215  - The classes in twisted.application.internet now accept a reactor parameter
1216    for specifying the reactor to use for underlying calls to allow for better
1217    testability (#2937)
1218  - LoopingCall now allows you to specify the reactor to use to schedule new
1219    calls, allowing much better testing techniques (#2633, #2634)
1220  - twisted.internet.task.deferLater is a new API for scheduling calls and
1221    getting deferreds which are fired with their results (#1875)
1222  - objgrep now knows how to search through deque objects (#2323)
1223  - twisted.python.log now contains a Twisted log observer which can forward
1224    messages to the Python logging system (#1351)
1225  - Log files now include seconds in the timestamps (#867)
1226  - It is now possible to limit the number of log files to create during log
1227    rotation (#1095)
1228  - The interface required by the log context system is now documented as
1229    ILoggingContext, and abstract.FileDescriptor now declares that it implements
1230    it (#1272)
1231  - There is now an example cred checker that uses a database via adbapi (#460)
1232  - The epoll reactor is now documented in the choosing-reactors howto (#2539)
1233  - There were improvements to the client howto (#222)
1234  - Int8Receiver was added (#2315)
1235  - Various refactorings to AMP introduced better testability and public
1236    interfaces (#2657, #2667, #2656, #2664, #2810)
1237  - twisted.protocol.policies.TrafficLoggingFactory now has a resetCounter
1238    method (#2757)
1239  - The FTP client can be told which port range within which to bind passive
1240    transfer ports (#1904)
1241  - twisted.protocols.memcache contains a new asynchronous memcache client
1242    (#2506, #2957)
1243  - PB now supports anonymous login (#439, #2312)
1244  - twisted.spread.jelly now supports decimal objects (#2920)
1245  - twisted.spread.jelly now supports all forms of sets (#2958)
1246  - There is now an interface describing the API that process protocols must
1247    provide (#3020)
1248  - Trial reporting to core unittest TestResult objects has been improved (#2495)
1249  - Trial's TestCase now has an addCleanup method which allows easy setup of
1250    tear-down code (#2610, #2899)
1251  - Trial's TestCase now has an assertIsInstance method (#2749)
1252  - Trial's memory footprint and speed are greatly improved (#2275)
1253  - At the end of trial runs, "PASSED" and "FAILED" messages are now colorized
1254    (#2856)
1255  - Tests which leave global state around in the reactor will now fail in
1256    trial. A new option, --unclean-warnings, will convert these errors back into
1257    warnings (#2091)
1258  - Trial now has a --without-module command line for testing code in an
1259    environment that lacks a particular Python module (#1795)
1260  - Error reporting of failed assertEquals assertions now has much nicer
1261    formatting (#2893)
1262  - Trial now has methods for monkey-patching (#2598)
1263  - Trial now has an ITestCase (#2898, #1950)
1264  - The trial reporter API now has a 'done' method which is called at the end of
1265    a test run (#2883)
1266  - TestCase now has an assertWarns method which allows testing that functions
1267    emit warnings (#2626, #2703)
1268  - There are now no string exceptions in the entire Twisted code base (#2063)
1269  - There is now a system for specifying credentials checkers with a string
1270    (#2570)
1271
1272 Fixes
1273 -----
1274
1275  - Some tests which were asserting the value of stderr have been changed
1276    because Python uncontrollably writes bytes to stderr (#2405)
1277  - Log files handle time zones with DST better (#2404)
1278  - Subprocesses using PTYs on OS X that are handled by Twisted will now be able
1279    to more reliably write the final bytes before they exit, allowing Twisted
1280    code to more reliably receive them (#2371, #2858)
1281  - Trial unit test reporting has been improved (#1901)
1282  - The kqueue reactor handles connection failures better (#2172)
1283  - It's now possible to run "trial foo/bar/" without an exception: trailing
1284    slashes no longer cause problems (#2005)
1285  - cred portals now better deal with implementations of inherited interfaces
1286    (#2523)
1287  - FTP error handling has been improved (#1160, 1107)
1288  - Trial behaves better with respect to file locking on Windows (#2482)
1289  - The FTP server now gives a better error when STOR is attempted during an
1290    anonymous session (#1575)
1291  - Trial now behaves better with tests that use the reactor's threadpool (#1832)
1292  - twisted.python.reload now behaves better with new-style objects (#2297)
1293  - LogFile's defaultMode parameter is now better implemented, preventing
1294    potential security exploits (#2586)
1295  - A minor obscure leak in thread pools was corrected (#1134)
1296  - twisted.internet.task.Clock now returns the correct DelayedCall from
1297    callLater, instead of returning the one scheduled for the furthest in the
1298    future (#2691)
1299  - twisted.spread.util.FilePager no longer unnecessarily buffers data in
1300    memory (#1843, 2321)
1301  - Asking for twistd or trial to use an unavailable reactor no longer prints a
1302    traceback (#2457)
1303  - System event triggers have fewer obscure bugs (#2509)
1304  - Plugin discovery code is much better behaved, allowing multiple
1305    installations of a package with plugins (#2339, #2769)
1306  - Process and PTYProcess have been merged and some minor bugs have been fixed
1307    (#2341)
1308  - The reactor has less global state (#2545)
1309  - Failure can now correctly represent and format errors caused by string
1310    exceptions (#2830)
1311  - The epoll reactor now has better error handling which now avoids the bug
1312    causing 100% CPU usage in some cases (#2809)
1313  - Errors raised during trial setUp or tearDown methods are now handled better
1314    (#2837)
1315  - A problem when deferred callbacks add new callbacks to the deferred that
1316    they are a callback of was fixed (#2849)
1317  - Log messages that are emitted during connectionMade now have the protocol
1318    prefix correctly set (#2813)
1319  - The string representation of a TCP Server connection now contains the actual
1320    port that it's bound to when it was configured to listen on port 0 (#2826)
1321  - There is better reporting of error codes for TCP failures on Windows (#2425)
1322  - Process spawning has been made slightly more robust by disabling garbage
1323    collection temporarily immediately after forking so that finalizers cannot
1324    be executed in an unexpected environment (#2483)
1325  - namedAny now detects import errors better (#698)
1326  - Many fixes and improvements to the twisted.python.zipstream module have
1327    been made (#2996)
1328  - FilePager no longer blows up on empty files (#3023)
1329  - twisted.python.util.FancyEqMixin has been improved to cooperate with objects
1330    of other types (#2944)
1331  - twisted.python.FilePath.exists now restats to prevent incorrect result
1332    (#2896)
1333  - twisted.python.util.mergeFunctionMetadata now also merges the __module__
1334    attribute (#3049)
1335  - It is now possible to call transport.pauseProducing within connectionMade on
1336    TCP transports without it being ignored (#1780)
1337  - twisted.python.versions now understands new SVN metadata format for fetching
1338    the SVN revision number (#3058)
1339  - It's now possible to use reactor.callWhenRunning(reactor.stop) on gtk2 and
1340    glib2 reactors (#3011)
1341
1342 Deprecations and removals
1343 -------------------------
1344  - twisted.python.timeoutqueue is now deprecated (#2536)
1345  - twisted.enterprise.row and twisted.enterprise.reflector are now deprecated
1346    (#2387)
1347  - twisted.enterprise.util is now deprecated (#3022)
1348  - The dispatch and dispatchWithCallback methods of ThreadPool are now
1349    deprecated (#2684)
1350  - Starting the same reactor multiple times is now deprecated (#1785)
1351  - The visit method of various test classes in trial has been deprecated (#2897)
1352  - The --report-profile option to twistd and twisted.python.dxprofile are
1353    deprecated (#2908)
1354  - The upDownError method of Trial reporters is deprecated (#2883)
1355
1356 Other
1357 -----
1358
1359  - #2396, #2211, #1921, #2378, #2247, #1603, #2463, #2530, #2426, #2356, #2574,
1360  - #1844, #2575, #2655, #2640, #2670, #2688, #2543, #2743, #2744, #2745, #2746,
1361  - #2742, #2741, #1730, #2831, #2216, #1192, #2848, #2767, #1220, #2727, #2643,
1362  - #2669, #2866, #2867, #1879, #2766, #2855, #2547, #2857, #2862, #1264, #2735,
1363  - #942, #2885, #2739, #2901, #2928, #2954, #2906, #2925, #2942, #2894, #2793,
1364  - #2761, #2977, #2968, #2895, #3000, #2990, #2919, #2969, #2921, #3005, #421,
1365  - #3031, #2940, #1181, #2783, #1049, #3053, #2847, #2941, #2876, #2886, #3086,
1366  - #3095, #3109
1367
1368
1369 2.5.0 (2006-12-29)
1370 ==================
1371
1372 Twisted 2.5.0 is a major feature release, with several interesting new
1373 developments and a great number of bug fixes. Some of the highlights
1374 follow.
1375
1376  * AMP, the Asynchronous Messaging Protocol, was introduced.  AMP is
1377    a protocol which provides request/response semantics over a
1378    persistent connection in a very simple and extensible manner.
1379
1380  * An Epoll-based reactor was added, which can be used with twistd or
1381    trial by passing "-r epoll" on the command line. This may improve
1382    performance of certain high-traffic network applications.
1383
1384  * The 'twistd' command can now accept sub-commands which name an
1385    application to run. For example, 'twistd web --path .' will start a
1386    web server serving files out of the current directory. This
1387    functionality is meant to replace the old way of doing things with
1388    'mktap' and 'twistd -f'.
1389
1390  * Python 2.5 is now supported. Previous releases of Twisted were
1391    broken by changes in the release of Python 2.5.
1392
1393  * 'inlineCallbacks' was added, which allows taking advantage of the
1394    new 'yield' expression syntax in Python 2.5 to avoid writing
1395    callbacks for Deferreds.
1396
1397 In addition to these changes, there are many other minor features and
1398 a large number of bug fixes.
1399
1400 Features
1401 --------
1402  - log.err can now take a second argument for specifying information
1403    about an error (#1399)
1404  - A time-simulating test helper class, twisted.internet.task.Clock,
1405    was added (#1757)
1406  - Trial docstring improvements were made (#1604, #2133)
1407  - New SSL features were added to twisted.internet.ssl, such as client
1408    validation (#302)
1409  - Python 2.5 is now supported (#1867)
1410  - Trial's assertFailure now provides more information on failure (#1869)
1411  - Trial can now be run on tests within a zipfile (#1940)
1412  - AMP, a new simple protocol for asynchronous messaging, was added (#1715)
1413  - Trial's colorful reporter now works on win32 (#1646)
1414  - Trial test modules may now dynamically construct TestSuites (#1638, #2165)
1415  - twistd can now make use of plugins to run applications (#1922, #2013)
1416  - Twisted now works with the latest (unreleased) zope.interface (#2160)
1417  - An epoll-based reactor, epollreactor, was added. It is selectable
1418    with the -r options to twistd and trial (#1953)
1419  - twistd and trial now use the plugin system to find reactors which
1420    can be selected (#719)
1421  - twisted.internet.defer.inlineCallbacks was added. It takes
1422    advantage of Python 2.5's generators to offer a way to deal with
1423    Deferreds without callbacks (#2100)
1424
1425 Fixes
1426 -----
1427  - Traceback formatting in Trial was improved (#1454, #1610)
1428  - twisted.python.filepath.FilePath.islink now actually returns True when
1429    appropriate (#1773)
1430  - twisted.plugin now no longer raises spurious errors (#926)
1431  - twisted.pb Cacheables may now be new-style classes (#1324)
1432  - FileDescriptor now deals with producers in a more
1433    interface-compliant and robust manner (#2286, #811)
1434  - "setup.py build" and other setup.py commands which don't actually
1435    install the software now work (#1835)
1436  - wxreactor has had various fixes (#1235, #1574, #1688)
1437
1438 Deprecations and Removals
1439 -------------------------
1440  - The old twisted.cred API (Perspectives, Identities and such) was
1441    removed (#1440)
1442  - twisted.spread.newjelly was removed (#1831)
1443  - Various deprecated things in twisted.python.components were
1444    removed: Interface, MetaInterface, getAdapterClass, and
1445    getAdapterClassWithInheritance (#1636)
1446  - twisted.enterprise.xmlreflector was removed (#661)
1447  - mktap is slowly on its way out, now that twistd supports plugins. It
1448    is not yet officially deprecated (#2013)
1449  - tkmktap was removed, because it wasn't working anyway (#2020)
1450  - reactor.iterate calls made inside of a Trial test case are
1451    deprecated (#2090)
1452  - twisted.internet.qtreactor was removed: It has been moved to a
1453    separate project. See http://twistedmatrix.com/trac/wiki/QTReactor
1454    (#2130, #2137)
1455  - threadedselectreactor is now not a directly usable reactor; it is
1456    only meant to help in writing other reactors (#2126)
1457  - twisted.python.reflect.funcinfo is deprecated (#2079)
1458  - twisted.spread.sturdy, which was already completely broken, was
1459    removed (#2299)
1460
1461
1462 Other
1463 -----
1464 The following changes are minor or closely related to other changes.
1465
1466  - #1783, #1786, #1788, #1648, #1734, #1609, #1800, #1818,
1467    #1629, #1829, #491, #1816, #1824, #1855, #1797, #1637, #1371,
1468    #1892, #1887, #1897, #1563, #1741, #1943, #1952, #1276,
1469    #1837, #1726, #1963, #1965, #1973, #1976, #1991, #1936, #1113,
1470    #630, #2002, #2040, #2044, #1617, #2045, #2055, #2056, #2022,
1471    #2052, #1552, #1999, #1507, #2054, #1970, #1968, #662, #1910,
1472    #1694, #1999, #1409, #2150, #2127, #2155, #1983, #2014, #2222,
1473    #1067, #2136, #2065, #1430, #2173, #2212, #1871, #2147, #1199,
1474    #2273, #428, #992, #815, #2024, #2292, #2125, #2139, #2291, #2174,
1475    #2306, #2228, #2309, #2319, #2317, #2313, #2154, #1985, #1201
1476
1477
1478 2.4.0 (2006-05-21)
1479 ==================
1480
1481 Features
1482 --------
1483  - twisted.internet.task.Cooperator (Added along with #1701).
1484
1485 Fixes
1486 -----
1487  - Errors in UDP protocols no longer unbind the UDP port (#1695).
1488  - Misc: #1717, #1705, #1563, #1719, #1721, #1722, #1728.
1489
1490
1491 2.3.0 (2006-05-14)
1492 ==================
1493
1494 Features
1495 --------
1496  - twisted-dev-mode's F9 now uses trial's --testmodule feature, rather than
1497    trying to guess what tests to run.  This will break files using the "-x"
1498    test-case-name hack (just use a comma separated list instead).
1499  - API Documentation improvements.
1500  - A new Producer/Consumer guide (#53)
1501  - Better-defined error behavior in IReactorMulticast (#1578)
1502  - IOCP Multicast support (#1500)
1503  - Improved STDIO support on Windows. (#1553)
1504  - LoopingCall supports Deferreds such that it will wait until a
1505    Deferred has fired before rescheduling the next call (#1487)
1506  - Added twisted.python.versions.Version, a structured representation
1507    of Version information, including support for SVN revision numbers
1508    (#1663)
1509
1510 Fixes
1511 -----
1512
1513  - Many trial fixes, as usual 
1514  - All API documentation is now correctly formatted as epytext (#1545)
1515  - twisted.python.filepath.FilePath.__repr__ is safer.
1516  - Fix trial's "until-failure" mode. (#1453)
1517  - deferredGenerator now no longer causes handled exceptions (or
1518    results) to propagate to the resulting Deferred (#1709).
1519  - Misc: #1483, #1495, #1503, #1532, #1539, #1559, #1509, #1538,
1520    #1571, #1331, #1561, #737, #1562, #1573, #1594, #1607, #1407, #1615,
1521    #1645, #1634, #1620, #1664, #1666, #1650, #1670, #1675, #1692, #1710,
1522    #1668.
1523
1524 Deprecations
1525 ------------
1526
1527  - Removal of already-deprecated trial APIs: the assertions module,
1528    util.deferredResult, util.deferredError, util.fireWhenDoneFunc,
1529    util.spinUntil, util.spinWhile, util.extract_tb,
1530    util.format_exception, util.suppress_warnings, unittest.wait,
1531    util.wait
1532  - The backwards compatibility layer of twisted.python.components
1533    (e.g., backwardsCompatImplements, fixClassImplements, etc) has been
1534    disabled. The functions still exist, but do nothing as to not break
1535    user code outright (#1511)
1536  - Deprecate the usage of the 'default' argument as a keyword argument
1537    in Interface.__call__. Passing a second positional argument to
1538    specify the default return value of the adaptation is still
1539    supported.
1540
1541
1542 2.2.0 (2006-02-12)
1543 ==================
1544
1545 Features
1546 --------
1547  - Twisted no longer works with Python 2.2
1548  - FTP server supports more clients
1549  - Process support on Windows
1550  - twisted.internet.stdio improved (including Windows support!)
1551  - Trial:
1552    - Continued Trial refactoring
1553    - Default trial reporter is verbose black&white when color isn't supported
1554    - Deferreds returned in trial tests that don't fire before the
1555      unittest timeout now have their errback fired with a TimeoutError
1556    - raising SkipTest in setUp and setUpClass skips tests
1557    - Test suites are failed if there are import errors
1558
1559 Fixes
1560 -----
1561  - iocpreactor fixes
1562  - Threadpool fixes
1563  - Fixed infinite loops in datagramReceived edge cases
1564  - Issues resolved: 654, 773, 998, 1005, 1008, 1116, 1123, 1198, 1221,
1565    1232, 1233, 1236, 1240, 1244, 1258, 1263, 1265, 1266, 1271, 1275,
1566    1293, 1294, 1298, 1308, 1316, 1317, 1321, 1341, 1344, 1353, 1359,
1567    1372, 1374, 1377, 1379, 1380, 1385, 1388, 1389, 1413, 1422, 1426,
1568    1434, 1435, 1448, 1449, 1456
1569
1570 Deprecations
1571 ------------
1572  - Trial:
1573    - spinWhile and spinUntil
1574    - util.wait
1575    - extract_tb and format_exception
1576    - util.suppressWarnings
1577    - runReactor is gone
1578
1579
1580 2.1.0 (2005-11-06)
1581 ==================
1582
1583 Features
1584 --------
1585  - threadedselectreactor, a reactor which potentially makes
1586    integration with foreign event loops much simpler.
1587  - major improvements to twisted.conch.insults, including many new widgets.
1588  - adbapi ConnectionPools now have 'runWithConnection' which is
1589    similar to runInteraction but gives you a connection object instead of
1590    a transaction. [975]
1591  - __file__ is now usable in tac files
1592  - twisted.cred.pamauth now contains a PAM checker (moved from twisted.conch)
1593  - twisted.protocols.policies.LimitTotalConnectionsFactory now exists,
1594    which does as the name suggests
1595  - twisted.protocols.ident now uses /proc/net/tcp on Linux [233]
1596  - trial now recurses packages by default (a la the old -R parameter)
1597  - (PB) Calling a remote method that doesn't exist now raises
1598    NoSuchMethod instead of AttributeError.
1599
1600 Fixes
1601 -----
1602  - FTP client and server improvements
1603  - Trial improvements: The code is now much simpler, and more stable.
1604  - twisted.protocols.basic.FileSender now works with empty files 
1605  - Twisted should now be much more usable on Pythons without thread support.
1606  - minor improvements to process code in win32eventreactor
1607  - twistd -y (--python) now implies -o (--nosave). [539]
1608  - improved lockfile handling especially with respect to unix sockets.
1609  - deferredGenerator now no longer overuses the stack, which sometimes
1610    caused stack overflows.
1611  - Failure.raiseException now at least always raises the correct Exception.
1612  - minor improvements to serialport code
1613
1614 Deprecations
1615 ------------
1616  - twisted.python.componts.getAdapter. Use IFoo(o) instead.
1617  - Adapter persistence (IFoo(x, persist=True)). Just don't use it.
1618  - log.debug. It was equivalent to log.msg(), just use that.
1619  - twisted.protocols.telnet. twisted.conch.telnet replaces it.
1620  - Setting a trial reporter using a flag to 'trial'. Instead of 'trial
1621    --bwverbose', for example, use 'trial --reporter=bwverbose'.
1622  - trial --coverage will become a flag in Twisted 2.2.
1623  - passing a fully-qualified python name to --reporter is
1624    deprecated. Pass only names of Reporter plugins.
1625  - trial --psyco.
1626  - trial -R (--recurse) is now the default, so passing it is deprecated.
1627  - trial --reporter-args. Use the plugin system to do this sort of thing.
1628  - trial.assertions.assertionMethod and trial.unittest.assertionMethod
1629    are both deprecated. Use instance methods on TestCases instead.
1630  - trial's deferredResult, deferredError, and wait functions. Return
1631    Deferreds from your test methods instead of using them.
1632  - Raising unittest.SkipTest with no arguments. Give a reason for your skip.
1633  - The Failure returned from a gatherResults and DeferredList is now
1634    of type FirstError instead of a tuple of (Exception, index). It
1635    supports a firstError[idx] syntax but that is deprecated. Use
1636    firstError.subFailure and firstError.index instead.
1637  - whenThreaded now simply calls the passed function synchronously.
1638
1639 2.0.1 (2005-05-09)
1640 ===================
1641 Minor bug fix release.
1642
1643 SVN rev (file) - [bug number] description
1644 -----------------------------------------
1645 13307 (twisted/topfiles/README) - Mention support for python 2.4, too
1646 13324 (twisted/internet/defer.py) - [947] Fix DeferredQueue backlog/size limit.
1647 13354 (twisted/plugins/__init__.py) - Correct maintainer address.
1648 13355 (twisted/test/test_defer.py) - improvements to DeferredQueue test case
1649 13387 (setup.py) - add news to list of subprojects to install
1650 13332 (twisted/internet/posixbase.py) - Fix spelling error
1651 13366 (twisted/internet/qtreactor.py) - [957] [954] reactor.iterate fixes
1652 13368 (twisted/test/test_internet.py) - Fix DelayedCall test case
1653 13422 (twisted/internet/posixbase.py) - Remove log from _Win32Waker creation.
1654 13437 (twisted/plugin.py) - [958] Only write cache if there were changes.
1655 13666 (twisted/internet/gtkreactor.py,gtk2reactor.py) - Don't run callbacks
1656           until the reactor is actually up and running
1657 13748 (twisted/internet/gtk2reactor.py) - [552] [994] Initialize threading properly.
1658
1659
1660 2.0.0 (2005-03-25)
1661 ==================
1662
1663 Major new features
1664 ------------------
1665  - Replaced home-grown components system with zope.interface.
1666  - Split Twisted into multiple pieces.
1667  - Relicensed: Now under the MIT license, rather than LGPL.
1668  - Python 2.4 compatibility fixes
1669  - Major efficiency improvements in TCP buffering algorithm.
1670  - Major efficiency improvements in reactor.callLater/DelayedCall.
1671  - Half-close support for TCP/SSL. (loseWriteConnection).
1672
1673 Miscellaneous features/fixes
1674 ----------------------------
1675  - New plugin system: twisted.plugin
1676  - Better debugging support. Control-C will break you into PDB.
1677  - The twistd command has --uid --gid command line arguments.
1678  - *Incompatibility: mktap defaults to not change UID/GID, instead of saving
1679    the invoking user's UID/GID.
1680  - Removed some functions that were deprecated since Twisted 1.0.
1681  - ZSH tab-completion for twisted commands.
1682
1683  - More correct daemonization in twistd.
1684  - twisted.python.log: do not close the log because of invalid format string.
1685  - Disabled automatic import of cBanana. 
1686  - Boolean support for twisted.persisted.marmalade.
1687  - Refactor of plugin and application HOWTO documentation
1688  - Async HOWTO expanded greatly.
1689  - twisted.python.usage outputs the actual defaults, not passed in values.
1690
1691 twisted.trial
1692 -------------
1693  - Rewritten, a bunch of bugs fixed, a few more added.
1694
1695 twisted.internet
1696 ----------------
1697  - Multi-listen UDP multicast support
1698  - protocol.ClientCreator has a connectSSL.
1699  - defer.deferredGenerator: allows you to write Deferred code w/o callbacks.
1700  - Deferred.setTimeout is now deprecated.
1701  - New defer.DeferredLock/DeferredSemaphore/DeferredQueue.
1702  - Add utils.getProcessOutputAndValue to get stdout/err/value.
1703
1704  - Default DNS resolver is now non-blocking.
1705  - Increased default TCP accept backlog from 5 to 50.
1706  - Make buffering large amounts of TCP data work on Windows.
1707  - Fixed SSL disconnect to not wait for remote host. Fixes issue with firefox.
1708  - Separate state for Deferred finalization so that GC-loops preventing
1709    finalization don't occur.
1710  - Many Process bugfixes
1711  - Processes spawned on windows can successfully use sockets
1712  - gtk2reactor can optionally use glib event loop instead of gtk
1713  - gtk2reactor notifies gobject to initialize thread support
1714  - Fix registering a streaming producer on a transport.
1715  - Close client sockets explicitly after failed connections.
1716  - ReconnectingClientFactory now continues attempting to reconnect after all
1717    errors, not just those which are not UserErrors.
1718
1719 twisted.protocols
1720 -----------------
1721  - Portforward doesn't start reading from a client until a connection is made.
1722  - Bugfixes in twisted.protocols.loopback
1723  - Improve speed of twisted.protocols.LineReceiver.
1724  - LineReceiver implements IProducer. (stop/pause/resumeProducing)
1725  - SOCKSv4 properly closes connections
1726
1727 twisted.enterprise
1728 ------------------
1729  - Add "new connection" callback to adbapi.ConnectionPool to allow for
1730    custom db connection setup (cp_openfun)
1731  - adbapi.ConnectionPool automatic reconnection support
1732  - Don't log exceptions extraneously
1733
1734
1735 1.3.0 (2004-05-14)
1736 ==================
1737
1738 - Address objects for IPv4 and Unix addresses throughout twisted.internet.
1739 - Improved connected UDP APIs.
1740 - Refactored SSH client support.
1741 - Initial implementation of Windows I/O Completion Ports event loop.
1742 - Bug fixes and feature enhancements.
1743 - Nevow support for Lore (so your Lore documents can use Nevow directives).
1744 - This is the last release before Twisted begins splitting up.