1 Ticket numbers in this file can be looked up by visiting
2 http://twistedmatrix.com/trac/ticket/<number>
4 Twisted Core 12.1.0 (2012-06-02)
5 ================================
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.
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
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
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.
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
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".
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)
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
55 - Calling .cancel() on any Twisted-provided client endpoint
56 (TCP4ClientEndpoint, UNIXClientEndpoint, SSL4ClientEndpoint) now
57 works as documented, rather than logging an AlreadyCalledError.
59 - A leak of OVERLAPPED structures in some IOCP error cases has been
61 - twisted.internet._pollingfile._PollableWritePipe now checks for
62 outgoing unicode data in write() and writeSequence() instead of
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)
71 Deprecations and Removals
72 -------------------------
73 - The 'unsigned' flag to twisted.scripts.tap2rpm.MyOptions is now
75 - Removed the unreachable _fileUrandom method from
76 twisted.python.randbytes.RandomFactory. (#4530)
77 - twisted.persisted.journal is removed, deprecated since Twisted
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
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
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)
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
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.
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)
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
112 Twisted Core 12.0.0 (2012-02-10)
113 ================================
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)
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
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
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)
145 Improved Documentation
146 ----------------------
147 - The multicast documentation has been expanded. (#4262)
148 - twisted.internet.defer.Deferred now documents more return values.
150 - Show a better starting page at
151 http://twistedmatrix.com/documents/current (#5429)
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.
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)
167 - #1712, #2725, #5284, #5325, #5331, #5362, #5364, #5371, #5407,
168 #5427, #5430, #5431, #5440, #5441
171 Twisted Core 11.1.0 (2011-11-15)
172 ================================
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
182 - The default reactor is now poll(2) on platforms that support it.
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
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
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
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.
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)
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
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
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
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
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
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
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)
302 Improved Documentation
303 ----------------------
304 - Test driven development with Twisted and Trial is now documented in
306 - A new howto-style document covering twisted.protocols.amp has been
308 - Added sample implementation of a Twisted push producer/consumer
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.
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.
323 Deprecations and Removals
324 -------------------------
325 - twisted.internet.interfaces.IFinishableConsumer is now deprecated.
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
336 - Removed twisted.trial.runner.DocTestSuite, deprecated in Twisted
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)
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,
356 Twisted Core 11.0.0 (2011-04-01)
357 ================================
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
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
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.
384 - IOCPReactor now sends immediate completions to the main loop
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.
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.
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.
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
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.
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)
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
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
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
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
448 Deprecations and Removals
449 -------------------------
450 - returning a value other than None from IProtocol.dataReceived was
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
456 - Deprecated twisted.persisted.journal. This library is no longer
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)
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
479 Twisted Core 10.2.0 (2010-11-29)
480 ================================
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
497 - twisted.internet.endpoints now has 'serverFromString' and
498 'clientFromString' APIs for constructing endpoints from descriptive
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.
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.
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.
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
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
542 - The "brief" mode of twisted.python.failure.Failure.getTraceback now
543 handles exceptions raised by the underlying exception's __str__
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
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)
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
586 - trial's man page now documents the --disablegc option in more
588 - trial's coverage output format is now documented in the trial man
590 - Broken links and spelling errors in the finger tutorial are now
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.
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)
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
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
637 - iocpreactor transports can no longer be pickled. (#4617)
641 - #4300, #4475, #4477, #4504, #4556, #4562, #4564, #4569, #4608,
642 #4616, #4617, #4626, #4630, #4650, #4705
645 Twisted Core 10.1.0 (2010-06-27)
646 ================================
650 - Add linux inotify support, allowing monitoring of file system
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.
684 - twisted.internet.task.deferLater now returns a cancellable
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
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
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
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)
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
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.
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.
728 - HTML tags inside <pre> tags in the code snippets are now escaped.
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)
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)
768 Deprecations and Removals
769 -------------------------
770 - twisted.internet.interfaces.IReactorArbitrary,
771 twisted.application.internet.GenericServer, and
772 twisted.application.internet.GenericClient are now deprecated.
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.
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
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)
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
806 Twisted Core 10.0.0 (2010-03-01)
807 ================================
811 - The twistd man page now has a SIGNALS section. (#689)
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)
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)
821 - Documentation for trac-post-commit-hook functionality in svn-dev
824 - twisted.protocols.socks.SOCKSv4 now supports the SOCKSv4a protocol.
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)
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)
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
841 - twisted.python.logfile.BaseLogFile now has a reopen method allowing
842 you to use an external logrotate mechanism. (#4255)
846 - FTP.ftp_NLST now handles requests on invalid paths in a way
847 consistent with RFC 959. (#1342)
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
854 - startLogging now does nothing on subsequent invocations, thus
855 fixing a terrible infinite recursion bug that's only on edge case.
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)
862 - twisted.python.win32.cmdLineQuote now correctly quotes empty
863 strings arguments (#3876)
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)
870 - Twisted Trial no longer crashes if it can't remove an old
871 _trial_temp directory. (#4020)
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)
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)
881 - All SOCKSv4a tests now use a dummy reactor with a deterministic
882 resolve method. (#4275)
884 - Prevent extraneous server, date and content-type headers in proxy
887 Deprecations and Removals
888 -------------------------
889 - twisted.internet.error.PotentialZombieWarning is now deprecated.
892 - twisted.test.time_helpers is now deprecated. (#3719)
894 - The deprecated connectUDP method of IReactorUDP has now been
897 - twisted.trial.unittest.TestCase now ignores the previously
898 deprecated setUpClass and tearDownClass methods. (#4175)
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,
909 Twisted Core 9.0.0 (2009-11-24)
910 ===============================
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
924 - reactors which support threads now have a getThreadPool method (#3591)
925 - The MemCache client implementation now allows arguments to the "stats"
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
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)
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
961 - When a DefaultOpenSSLContextFactory is instantiated with invalid parameters,
962 it will now raise an exception immediately instead of waiting for the first
964 - Twisted command line scripts should now work when installed in a virtualenv
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
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
973 - In the AMP method callRemoteString, the requiresAnswer parameter is now
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
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)
989 Deprecations and Removals
990 -------------------------
991 - twisted.persisted.marmalade was deleted after a long period of deprecation
993 - Some remaining references to the long-gone plugins.tml system were removed
995 - SSLv2 is now disabled by default, but it can be re-enabled explicitly
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)
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
1016 Core 8.2.0 (2008-12-16)
1017 =======================
1021 - Reactors are slowly but surely becoming more isolated, thus improving
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
1026 - FilePath's moveTo and copyTo methods now have an option to disable following
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
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
1039 - A new runAsEffectiveUser function has been added to twisted.python.util
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
1044 - A fullyQualifiedName function has been added to twisted.python.reflect
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
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)
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
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
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
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
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
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
1106 - Log events with timezone offsets between -1 and -59 minutes are now
1107 correctly reported as negative (#3515)
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)
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,
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)
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
1172 Deprecations and Removals
1173 -------------------------
1175 - mktap is now fully deprecated, and will emit DeprecationWarnings when used
1180 - #3079, #3118, #3120, #3145, #3069, #3149, #3186, #3208, #2762
1188 - README no longer refers to obsolete trial command line option
1189 - twistd no longer causes a bizarre DeprecationWarning about mktap
1198 - The IOCP reactor has had many changes and is now greatly improved
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
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
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
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
1228 - The interface required by the log context system is now documented as
1229 ILoggingContext, and abstract.FileDescriptor now declares that it implements
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
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
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
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
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
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
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
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
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
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
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
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
1308 - The reactor has less global state (#2545)
1309 - Failure can now correctly represent and format errors caused by string
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
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
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
1333 - twisted.python.util.mergeFunctionMetadata now also merges the __module__
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)
1342 Deprecations and removals
1343 -------------------------
1344 - twisted.python.timeoutqueue is now deprecated (#2536)
1345 - twisted.enterprise.row and twisted.enterprise.reflector are now deprecated
1347 - twisted.enterprise.util is now deprecated (#3022)
1348 - The dispatch and dispatchWithCallback methods of ThreadPool are now
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
1354 - The upDownError method of Trial reporters is deprecated (#2883)
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,
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
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.
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.
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'.
1390 * Python 2.5 is now supported. Previous releases of Twisted were
1391 broken by changes in the release of Python 2.5.
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.
1397 In addition to these changes, there are many other minor features and
1398 a large number of bug fixes.
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,
1406 - Trial docstring improvements were made (#1604, #2133)
1407 - New SSL features were added to twisted.internet.ssl, such as client
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)
1427 - Traceback formatting in Trial was improved (#1454, #1610)
1428 - twisted.python.filepath.FilePath.islink now actually returns True when
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)
1438 Deprecations and Removals
1439 -------------------------
1440 - The old twisted.cred API (Perspectives, Identities and such) was
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
1452 - twisted.internet.qtreactor was removed: It has been moved to a
1453 separate project. See http://twistedmatrix.com/trac/wiki/QTReactor
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
1464 The following changes are minor or closely related to other changes.
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
1483 - twisted.internet.task.Cooperator (Added along with #1701).
1487 - Errors in UDP protocols no longer unbind the UDP port (#1695).
1488 - Misc: #1717, #1705, #1563, #1719, #1721, #1722, #1728.
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
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,
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,
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
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!)
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
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
1573 - spinWhile and spinUntil
1575 - extract_tb and format_exception
1576 - util.suppressWarnings
1577 - runReactor is gone
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.
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
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.
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.
1641 Minor bug fix release.
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.
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).
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.
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.
1693 - Rewritten, a bunch of bugs fixed, a few more added.
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.
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.
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
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
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.