1Ticket numbers in this file can be looked up by visiting 2http://twistedmatrix.com/trac/ticket/<number> 3 4.. towncrier release notes start 5 6Twisted 22.1.0 (2022-02-03) 7=========================== 8 9Features 10-------- 11 12- Python 3.10 is now a supported platform (#10224) 13- Type annotations have been added to the twisted.python.fakepwd module. (#10287) 14 15 16Bugfixes 17-------- 18 19- twisted.internet.defer.inlineCallbacks has an improved type annotation, to avoid typing errors when it is used on a function which returns a non-None result. (#10231) 20- ``twisted.internet.base.DelayedCall.__repr__`` and ``twisted.internet.task.LoopingCall.__repr__`` had the changes from #10155 reverted to accept non-function callables. (#10235) 21- Revert the removal of .whl building that was done as part of #10177. (#10236) 22- The type annotation of the host parameter to twisted.internet.interfaces.IReactorTCP.connectTCP has been corrected from bytes to str. (#10251) 23- Deprecated ``twisted.python.threading.ThreadPool.currentThread()`` in favor of ``threading.current_thread()``. 24 Switched ``twisted.python.threading.ThreadPool.currentThread()`` and ``twisted.python.threadable.getThreadID()`` to use `threading.current_thread()`` to avoid the deprecation warnings introduced for ``threading.currentThread()`` in Python 3.10. (#10273) 25 26 27Improved Documentation 28---------------------- 29 30- twisted.internet.utils.runWithWarningsSupressed behavior of waiting on deferreds has been documented. (#10238) 31- Sync API docs templates with pydoctor 21.9.0 release, using new theming capabilities. (#10267) 32 33 34Misc 35---- 36 37- #1681, #9944, #10198, #10218, #10219, #10228, #10229, #10234, #10239, #10240, #10245, #10246, #10248, #10250, #10255, #10277, #10288, #10292 38 39 40Conch 41----- 42 43Bugfixes 44-------- 45 46- SSHTransportBase.ssh_KEXINIT now uses the remote peer preferred MAC list for negotiation. In previous versions it was only using the local preferred MAC list. (#10241) 47 48 49Features 50~~~~~~~~ 51 52- twisted.conch.ssh now supports SSH extension negotiation (RFC 8308). (#10266) 53 54 55Bugfixes 56~~~~~~~~ 57 58- twisted.conch now uses constant-time comparisons for MACs. (#8199) 59- twisted.conch.ssh.filetransfer.FileTransferServer will now return an ENOENT error status if an SFTP client tries to close an unrecognized file handle. (#10293) 60 61 62Web 63--- 64 65Bugfixes 66~~~~~~~~ 67 68- twisted.web.client.RedirectAgent and twisted.web.client.BrowserLikeRedirectAgent now properly remove sensitive headers when redirecting to a different origin. (#10294) 69 70 71Improved Documentation 72---------------------- 73 74- Add type annotations for twisted.web.client.readBody. (#10269) 75 76 77Deprecations and Removals 78~~~~~~~~~~~~~~~~~~~~~~~~~ 79 80- twisted.web.client.getPage, twisted.web.client.downladPage, and the associated implementation classes (HTTPPageGetter, HTTPPageDownloader, HTTPClientFactory, HTTPDownloader) have been removed because they do not segregate cookies by domain. They were deprecated in Twisted 16.7.0 in favor of twisted.web.client.Agent. GHSA-92x2-jw7w-xvvx. (#10295) 81 82 83Mail 84---- 85 86No significant changes. 87 88 89Words 90----- 91 92No significant changes. 93 94 95Names 96----- 97 98No significant changes. 99 100 101Trial 102----- 103 104Bugfixes 105~~~~~~~~ 106 107- trial.runner.filenameToModule now sets the correct module.__name__ and sys.modules key (#10230) 108 109 110Twisted 21.7.0 (2021-07-26) 111=========================== 112 113 114Features 115-------- 116 117- Python 3.10b3 is now supported (#10224) 118- Type hinting was added to twisted.internet.defer, making this is the first release 119 of Twisted where you might reasonably be able to use mypy without your own custom 120 stub files (#10017) 121 122 123Bugfixes 124-------- 125 126- The changes to ``DelayedCall.__repr__`` and ``LoopingCall.__repr__`` from 127 21.7.0.rc1 were reverted as the wrong assumption that ``__qualname__`` is 128 available on all the supported Python versions. 129 (#10235) 130- The automated release process was updated to generate and release wheel files 131 to PyPI (#10236) 132- twisted.internet.defer.inlineCallbacks has an improved type annotation, to avoid typing errors when it is used on a function which returns a non-None result. (#10231) 133- trial.runner.filenameToModule now sets the correct ``module.__name__`` and ``sys.modules`` key (#10230) 134- twisted.internet.process can now pause and resume producing in python 3 (#9933) 135- When installing Twisted it now requires a minimum Python 3.6.7 version to match the version used with automated testing. This is the minimum Python version that we know that Twisted works with. (#10098) 136- twisted.internet.asyncioreactor.AsyncioSelectorReactor will no longer raise a TypeError like "SelectorEventLoop required, instead got: <uvloop.Loop ...>" (broken since 21.2.0). (#10106) 137- twisted.web.template.flatten and flattenString will no longer raise RecursionError if a large number of synchronous Deferreds are included in a document. (#10125) 138- Fix type hint for http.Request.uri (from str to bytes). (#10139) 139- twisted.web.http_headers.getRawHeaders and twisted.web.http_headers.getAllRawHeaders are now typed to return immutable sequences of header values instead of lists. 140 twisted.web.http_headers.getRawHeaders is now typed to return a non-optional value if a non-None default value is given. (#10142) 141- Fixed type hint for addr argument to twisted.internet.interfaces.buildProtocol. (#10147) 142- twisted.trial._dist.worker.LocalWorker.connectionMade now always writes the 143 log file using UTF-8 encoding. 144 In previous versions it was using the system default encoding. 145 This was causing encoding errors as the distributed trial workers are sending 146 Unicode data and the system default encoding might not always be Unicode compatible. 147 For example, it can be CP1252 on Windows. (#10157) 148- twisted.words.protocols.irc.ctcpExtract was updated to work with PYPY 3.7.4. (#10189) 149- twisted.conch.ssh.transport.SSHServerTransport and twisted.conch.ssh.transport.SSHClientTransport no longer use the hardcoded 150 SHA1 digest for non-group key exchanges. (#10203) 151- haproxy transport wrapper now returns hosts of type str for getPeer() and getHost(), as specified by IPv4Address and IPv6Address documentation. Previously it was returning bytes for the host. (#10211) 152 153 154Improved Documentation 155---------------------- 156 157- Remove dead link in twisted.internet._dumbwin32proc module docstring (#9520) 158- Sync API docs templates with pydoctor 21.2.2 release. (#10105) 159- Twisted IRC channels are now hosted by Libera.Chat. (#10213) 160 161 162Deprecations and Removals 163------------------------- 164 165- Python 3.5 is no longer supported. (#9958) 166 167 168Misc 169---- 170 171- #9816, #9915, #10068, #10085, #10094, #10102, #10107, #10108, #10109, #10110, #10112, #10119, #10120, #10121, #10122, #10123, #10140, #10143, #10145, #10150, #10151, #10155, #10159, #10168, #10169, #10171, #10172, #10173, #10174, #10179, #10194, #10201, #10212, #10215, #10217, #11017 172 173 174Conch 175----- 176 177Misc 178~~~~ 179 180- #10097 181 182 183Web 184--- 185 186Features 187~~~~~~~~ 188 189- twisted.web.template.renderElement() now accepts any IRequest implementer instead of only twisted.web.server.Request. 190 Add type hints to twisted.web.template. (#10184) 191 192 193Bugfixes 194~~~~~~~~ 195 196- The server-side HTTP/1.1 chunking implementation no longer performs quadratic work when input arrives in small chunks, preventing CPU exhaustion. (#3795) 197- twisted.web.http's chunked encoding support now rejects chunk sizes that are invalid because they look like negative hexadecimal integers. (#10130) 198- The type hint of twisted.web.server.Request.postpath is now correctly listed as Optional[List[bytes]]. This was incorrect in Twisted v21.2.0. (#10136) 199- The server-side HTTP/1.1 chunking implementation now rejects invalid chunk boundaries, preventing unbounded buffering. (#10137) 200- The server-side HTTP/1.1 chunking implementation now limits the length of the chunk size line (which includes chunk extensions) to twisted.web.http.maxChunkSizeLineLength — 1 KiB — so that it may not consume an unbounded amount of memory. (#10144) 201- Calling twisted.web.server.Site now registers its expiration timeout using the reactor associated with its twisted.web.server.Site. Site now a reactor attribute via its superclass, twisted.web.http.HTTPFactory. (#10177) 202 203 204Misc 205~~~~ 206 207- #9659, #10100, #10154, #10186 208 209 210Mail 211---- 212 213No significant changes. 214 215 216Words 217----- 218 219No significant changes. 220 221 222Names 223----- 224 225No significant changes. 226 227 228Twisted 21.2.0 (2021-02-28) 229=========================== 230 231Features 232-------- 233 234- The enableSessions argument to twisted.internet.ssl.CertificateOptions now 235 actually enables/disables OpenSSL's session cache. Also, due to 236 session-related bugs, it defaults to False. (#9583) 237- twisted.internet.defer.inlineCallbacks and ensureDeferred will now associate a contextvars.Context with the coroutines they run, meaning that ContextVar objects will maintain their value within the same coroutine, similarly to asyncio Tasks. This functionality requires Python 3.7+, or the contextvars PyPI backport to be installed for Python 3.5-3.6. (#9719, #9826) 238- twisted.internet.defer.Deferred.fromCoroutine has been added. This is similar to the existing ensureDeferred function, but is named more consistently inside Twisted and does not pass through Deferreds. (#9825) 239- trial now allows the @unittest.skipIf decorator to specify that an entire test class should be skipped. (#9829) 240- The twisted.python.deprecate.deprecatedKeywordParameter decorator can be used to mark a keyword paramater of a function or method as deprecated. (#9844) 241- Projects using Twisted can now perform type checking against a Twisted 242 installation, for example using mypy. (#9908) 243- twisted.python.util.InsensitiveDict now fully implements MutableMapping. (#9919) 244- Python 3.8 is now tested and supported. (#9955) 245- Support a coroutine function in twisted.internet.task.react (#9974) 246- PyPy 3.7 is now tested and supported. (#10093) 247 248 249Bugfixes 250-------- 251 252- twisted.web.twcgi.CGIProcessProtocol.processEnded(...) now handles an already-finished request, for example when request.connectionLost(...) was called previously. (#9468) 253- Twisted's dependency on PyHamcrest has been moved from the base package to the new "test" extra. Consequently the test extra must be installed for Twisted's test suite to pass. (#9509) 254- Fixed serialization of timedelta, date, and time objects in twisted.spread. (#9716) 255- twisted.internet.asyncioreactor.AsyncioSelectorReactor now raises an exception if instantiated with an event loop which is not compatible with asyncio.SelectorEventLoop. This fixes the AsyncioSelectorReactor in Python 3.8+ on Windows, where in bp-34687 the default Windows asyncio event loop was changed to ProactorEventLoop. Applications that use AsyncioSelectorReactor on Windows with Python 3.8+ must call asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) before instantiating and running AsyncioSelectorReactor. (#9766) 256- twisted.internet.process.registerReapProcessHandler and ._BaseProcess.reapProcess will no longer raise a TypeError when processing a None PID (#9775) 257- INotify will close its file descriptor if a directory is automatically removed by twisted from the watchlist because it's deleted, avoiding orphaned filedescriptors. (#9777) 258- DelayedCall.reset() is now working properly with asyncioreactor (#9780) 259- AsyncioSelectorReactor.seconds() now correctly returns an epoch time. (#9787) 260- The _connDone parameter has been removed from twisted.internet.abstract.FileDescriptor.loseConnection()'s signature in order to match the signature in the base class twisted.internet._newtls.ConnectionMixin loseConnection(). (#9849) 261- The Gtk3 reactor now runs on Wayland-only sessions (#9904) 262- Descriptive error messages from twisted.internet.error are now present when running with 'python -OO'. (#9918) 263- Comparator methods such as __eq__() now always return NotImplemented for uncomparable types. (#9919) 264- When installing Twisted it now requires a minimum Python 3.5.4 version to match the version used with automated testing. This is the minimum Python version that we know that Twisted works with. (#10098) 265 266 267Improved Documentation 268---------------------- 269 270- The narrative docs now contains the associated Twisted version and the date 271 when they were generated. (#3945) 272- The "Writing a twistd plugin" howto now explains how to deploy twistd plugins using Python packaging and pip (#9243) 273- (#9868, #9873, #9874) 274- Fix a typo in "Introduction to Deferreds" document. (#9948) 275- The Twisted Coding Standard has been changed to refer to The Black code style for guidelines regarding whitespace and line lengths. (#9957) 276- Exempt ``__repr__``, ``__slots__`` and other ``@attrs.define`` related changes from compatibility policy. (#9982) 277- Fix many docstring mistakes flagged by new sanity checks in pydoctor. (#10021) 278- Fix a few dozen broken links to API documentation pages. (#10057) 279 280 281Deprecations and Removals 282------------------------- 283 284- twisted.cred.credentials.UsernameHashedPassword is now deprecated because it doesn't hash the password, causing it to return the wrong result. (#8368) 285- twisted.news is now removed from the codebase. (This module was never installed on Python 3.) (#9782) 286- Support for Python 2.7 has been removed. Twisted now supports only Python versions 3.5/3.6/3.7. (#9790) 287- twisted.pair.ethernet.IEthernetProtocol.addProto()'s interface was changed to match the existing implementations in the Twisted source code. (#9877) 288- twisted.python.filepath.FilePath.statinfo was deprecated in Twisted 15.0.0 and has now been removed. (#9881) 289- The parameters to twisted.internet.base.ReactorBase.addSystemEventTrigger(), twisted.internet.base.ReactorBase.callWhenRunning(), twisted.internet.base.ReactorBase.callLater(), twisted.internet.task.Clock.callLater() have been renamed to match the parameters defined in the following interfaces: twisted.internet.interfaces.IReactorCore, twisted.internet.interfaces.IReactorTime. (#9897) 290- Functions and types in twisted.python.compat that existed to support the transition from Python 2 to 3 have been deprecated. (#9922) 291- twisted.logger.LoggingFile.softspace has been deprecated. (#10042) 292- twisted.python.win32.WindowsError and FakeWindowsError have been deprecated. (#10053) 293- twisted.mail.pop3client has been renamed to twisted.mail._pop3client, since it has always been a private implementation module. (#10054) 294 295 296Misc 297---- 298 299- #5356, #6460, #6903, #6986, #7945, #9306, #9512, #9531, #9622, #9652, #9718, #9744, #9768, #9773, #9776, #9778, #9781, #9784, #9785, #9788, #9789, #9791, #9793, #9795, #9796, #9797, #9798, #9800, #9802, #9803, #9808, #9809, #9810, #9811, #9812, #9820, #9823, #9827, #9833, #9837, #9840, #9842, #9846, #9847, #9848, #9850, #9851, #9852, #9854, #9855, #9856, #9857, #9858, #9861, #9862, #9863, #9864, #9865, #9866, #9867, #9869, #9870, #9871, #9872, #9876, #9878, #9879, #9880, #9882, #9883, #9884, #9886, #9889, #9890, #9891, #9892, #9895, #9896, #9898, #9899, #9902, #9903, #9916, #9917, #9921, #9924, #9927, #9928, #9936, #9953, #9954, #9956, #9959, #9960, #9969, #9970, #9971, #9975, #9976, #9977, #9978, #9979, #9980, #9981, #9983, #9985, #9986, #9987, #9988, #9989, #9991, #9992, #9995, #9999, #10000, #10002, #10009, #10010, #10011, #10014, #10015, #10018, #10025, #10027, #10029, #10032, #10033, #10034, #10036, #10038, #10043, #10044, #10046, #10054, #10059, #10060, #10061, #10063, #10064, #10065, #10069, #10080, #10090 300 301 302Conch 303----- 304 305Features 306~~~~~~~~ 307 308- twisted.conch.ssh now supports Ed25519 keys (requires OpenSSL >= 1.1.1b). (#8966) 309- twisted.conch.ssh.session.SSHSession can now accept environment variables sent by the client, if the SSH avatar implements the new ISessionSetEnv interface. (#9315) 310- twisted.conch.ssh.keys.Key.fromString and twisted.conch.ssh.keys.Key.toString now normalize Unicode passphrases as required by NIST 800-63B. (#9736) 311- twisted.conch.telnet now implements EOR (End of Record) command (RFC 885) (#9875) 312 313 314Bugfixes 315~~~~~~~~ 316 317- t.c.ssh.filetransfer.FileTransferClient now errbacks any outstanding requests if the connection is lost before a reply is received. (#9571) 318- t.c.ssh.filetransfer.FileTransferClient immediately errbacks any attempt to send a request on a closed channel. (#9572) 319- twisted.conch.ssh.session.SSHSession now accepts environment variables also for multiplexed SSH session. (#10016) 320 321 322Improved Documentation 323~~~~~~~~~~~~~~~~~~~~~~ 324 325- construct and assign portal and checkers consistently in ssh server example (#9578) 326 327 328Misc 329~~~~ 330 331- #6446, #9571, #9831, #9913 332 333 334Web 335--- 336 337Bugfixes 338~~~~~~~~ 339 340- twisted.web.http.Request.getRequestHostname now supports IPv6 literal hostnames 341 in HTTP host headers. (#6014) 342- Fixed unexpected exception by handling subclass of TaskFinished when FileBodyProducer's task stopped twice. (#6528) 343- Importing twisted.web.client no longer has the side effect of initializing the reactor. (#9774) 344- Ensure that all calls to connectionLost use a Failure instance in the HTTP 2 code. (#9817) 345- twisted.web.util.ParentRedirect has been fixed and documented. It was broken by a security fix in Twisted 19.2.0. (#9835) 346- xmlrpc's Proxy class now verifies HTTPS certificates against the system bundle. (#9836) 347- twisted.web.twcgi can now handle url parameters in python 3 (#9887) 348- defer reactor import in twisted.web.xmlrpc (#9931) 349- twisted.web.RedirectAgent now supports 308 redirects (#9940) 350- Fixed an error where twisted.web.http.requestReceived() tries to encode a NoneType returned by cgi.parse_multipart when a multipart body does not contain a "content-disposition" definition. (#10084) 351 352 353Improved Documentation 354~~~~~~~~~~~~~~~~~~~~~~ 355 356- xmlrpc's QueryFactory class is now public, more explanation for xmlrpc's queryFactory, and new xmlrpc-debug.py example script for debugging raw XML-RPC traffic. (#9350) 357- twisted.web.client.ContentDecoderAgent's documentation has been corrected and improved. (#9742) 358 359 360Misc 361~~~~ 362 363- #6446, #9758, #9801, #9831, #9834, #9841 364 365 366Mail 367---- 368 369Bugfixes 370~~~~~~~~ 371 372- twisted.mail.smtp.ESMTPSender no longer forces TLSv1.0 when used without explicit context factory. (#9740) 373 374 375Misc 376~~~~ 377 378- #6446, #9831, #9832, #9900, #9910 379 380 381Words 382----- 383 384Misc 385~~~~ 386 387- #9901 388 389 390Names 391----- 392 393Features 394~~~~~~~~ 395 396- twisted.names.hosts.Resolver and twisted.names.hosts.searchFileForAll() now ignore malformed lines in hosts files like /etc/hosts (#9752) 397- New interface IEncodableRecord combines IEncodable and IRecord, which is useful when using type annotations. (#9920) 398 399 400Bugfixes 401~~~~~~~~ 402 403- twistd -n dns --pyzone example-domain.com will no longer throw an exception on startup with Python 3. (#9783) 404- twist dns --pyzone example-domain.com now works on Python 3. (#9786) 405 406 407Misc 408~~~~ 409 410- #9749 411 412 413Twisted 20.3.0 (2020-03-13) 414=========================== 415 416Bugfixes 417-------- 418 419- twisted.protocols.amp.BoxDispatcher.callRemote and callRemoteString will no longer return failing Deferreds for requiresAnswer=False commands when the transport they're operating on has been disconnected. (#9756) 420 421 422Improved Documentation 423---------------------- 424 425- Added a missing hyphen to a reference to the ``--debug`` option of ``pdb`` in the Trial how-to. (#9690) 426- The documentation of the twisted.cred.checkers module has been extended and corrected. (#9724) 427 428 429Deprecations and Removals 430------------------------- 431 432- twisted.news is deprecated. (#9405) 433 434 435Misc 436---- 437 438- #9634, #9701, #9707, #9710, #9715, #9726, #9727, #9728, #9729, #9735, #9737, #9757 439 440 441Conch 442----- 443 444Features 445~~~~~~~~ 446 447- twisted.conch.ssh now supports the curve25519-sha256 key exchange algorithm (requires OpenSSL >= 1.1.0). (#6814) 448- twisted.conch.ssh.keys can now write private keys in the new "openssh-key-v1" format, introduced in OpenSSH 6.5 and made the default in OpenSSH 7.8. ckeygen has a corresponding new --private-key-subtype=v1 option. (#9683) 449 450 451Bugfixes 452~~~~~~~~ 453 454- twisted.conch.keys.Key.privateBlob now returns the correct blob format for ECDSA (i.e. the same as that implemented by OpenSSH). (#9682) 455 456 457Misc 458~~~~ 459 460- #9760 461 462 463Web 464--- 465 466Bugfixes 467~~~~~~~~ 468 469- Fixed return type of twisted.web.http.Request.getUser and twisted.web.http.Request.getPassword to binary if no authorization header was found or an exception was thrown (#9596) 470- twisted.web.http.HTTPChannel now rejects requests (with status code 400 and a drop) that have malformed headers of the form "Foo : value" or ": value". (#9646) 471- twisted.web.http.Request now correctly parses multipart-encoded form data submitted as a chunked request on Python 3.7+. (#9678) 472- twisted.web.client.BrowserLikePolicyForHTTPS is now listed in __all__, since it's a user-facing class that anyone could import and extend. (#9769) 473- twisted.web.http was subject to several request smuggling attacks. Requests with multiple Content-Length headers were allowed (CVE-2020-10108, thanks to Jake Miller from Bishop Fox and ZeddYu Lu for reporting this) and now fail with a 400; requests with a Content-Length header and a Transfer-Encoding header honored the first header (CVE-2020-10109, thanks to Jake Miller from Bishop Fox for reporting this) and now fail with a 400; requests whose Transfer-Encoding header had a value other than "chunked" and "identity" (thanks to ZeddYu Lu) were allowed and now fail with a 400. (#9770) 474 475 476Mail 477---- 478 479Misc 480~~~~ 481 482- #9733 483 484 485Words 486----- 487 488Bugfixes 489~~~~~~~~ 490 491- Fixed parsing of streams with Python 3.8 when there are spaces in namespaces or namespaced attributes in twisted.words.xish.domish.ExpatElementStream (#9730) 492 493 494Names 495----- 496 497Bugfixes 498~~~~~~~~ 499 500- twisted.names.secondary.SecondaryAuthority now accepts str for its domain parameter, so twist dns --secondary now functions on Python 3. (#9496) 501 502 503Twisted 19.10.0 (2019-11-03) 504============================ 505 506Features 507-------- 508 509- twisted.trial.successResultOf, twisted.trial.failureResultOf, and 510 twisted.trial.assertNoResult accept coroutines as well as Deferreds. (#9006) 511 512 513Bugfixes 514-------- 515 516- Fixed circular import in twisted.trial.reporter, introduced in Twisted 16.0.0. (#8267) 517- The POP3 server implemented by twisted.mail.pop3 now accepts passwords that contain spaces. (#9100) 518- Incoming HTTP/2 connections will now not time out if they persist for longer than one minute. (#9653) 519- The serial extra now requires pywin32 on Windows enabling use of twisted.internet.serialport without specifying the windows_platform extra. (#9700) 520 521 522Misc 523---- 524 525- #8506, #9677, #9684, #9687, #9688 526 527 528Conch 529----- 530 531Bugfixes 532~~~~~~~~ 533 534- twisted.conch.ssh.keys now correctly writes the "iqmp" parameter in serialized RSA private keys as q^-1 mod p rather than p^-1 mod q. (#9681) 535 536 537Misc 538~~~~ 539 540- #9689 541 542 543Web 544--- 545 546Features 547~~~~~~~~ 548 549- twisted.web.server.Request will now use twisted.web.server.Site.getContentFile, if it exists, to get a file into which to write request content. If getContentFile is not provided by the site, it will fall back to the previous behavior of using io.BytesIO for small requests and tempfile.TemporaryFile for large ones. (#9655) 550 551 552Bugfixes 553~~~~~~~~ 554 555- twisted.web.client.FileBodyProducer will now stop producing when the Deferred returned by FileBodyProducer.startProducing is cancelled. (#9547) 556- The HTTP/2 server implementation now enforces TCP flow control on control frame messages and times out clients that send invalid data without reading responses. This closes CVE-2019-9512 (Ping Flood), CVE-2019-9514 (Reset Flood), and CVE-2019-9515 (Settings Flood). Thanks to Jonathan Looney and Piotr Sikora. (#9694) 557 558 559Mail 560---- 561 562No significant changes. 563 564 565Words 566----- 567 568No significant changes. 569 570 571Names 572----- 573 574No significant changes. 575 576 577Twisted 19.7.0 (2019-07-28) 578=========================== 579 580Features 581-------- 582 583- The callable argument to twisted.internet.task.deferLater() is no longer required. (#9577) 584- Twisted's minimum Cryptography requirement is now 2.5. (#9592) 585- twisted.internet.utils.getProcessOutputAndValue now accepts `stdinBytes` to write to the child process's standard input. (#9607) 586- Add new twisted.logger.capturedLogs context manager for capturing observed log events in tests. (#9617) 587- twisted.internet.base.PluggableResolverMixin, which implements the pluggable resolver interfaces for easier re-use in other reactors, has been factored out of ReactorBase. (#9632) 588- The PyPI page for Twisted has been enhanced to include more information and useful links. (#9648) 589 590 591Bugfixes 592-------- 593 594- twisted.internet.endpoints is now importable on Windows when pywin32 is not installed. (#6032) 595- twisted.conch.ssh now generates correct keys when using hmac-sha2-512 with SHA1 based KEX algorithms. (#8258) 596- twisted.internet.iocpreactor.abstract.FileHandle no longer duplicates/looses outgoing data when .write() is called in rapid succession with large payloads (#9446) 597- twisted.application.backoffPolicy will not fail on connection attempts > 1750 with default settings. (#9476) 598- Trial on Python 3 will now properly re-raise ImportErrors that occur during the import of a module, rather than saying the module doesn't exist. (#9628) 599- twisted.internet.process does not fail on import when the process has more than 1024 file descriptors opened. (#9636) 600- Add the stackLevel keyword argument to twisted.logger.STDLibLogObserver._findCaller to fix an incompatibility with Python 3.8. (#9668) 601 602 603Improved Documentation 604---------------------- 605 606- Fix the incorrect docstring for twisted.python.components.Componentized.addComponent which stated that the function returned a list of interfaces, even though the function doesn't actually do so. (#9637) 607 608 609Deprecations and Removals 610------------------------- 611 612- twisted.test.proto_helpers has moved to twisted.internet.testing. twisted.test.proto_helpers has been deprecated. (#6435) 613- twisted.protocols.mice, deprecated since Twisted 16.0, has been removed. (#9602) 614- twisted.conch.insults.client and twisted.conch.insults.colors, deprecated since Twisted 10.1, have been removed. (#9603) 615- The __version__ attribute of Twisted submodules that were previously packaged separately, deprecated since Twisted 16.0, has been removed. (#9604) 616- Python 3.4 is no longer supported. (#9613) 617- twisted.python.compat.OrderedDict, an alias for collections.OrderedDict and deprecated since Twisted 15.5, has been removed. (#9639) 618 619 620Misc 621---- 622 623- #9217, #9445, #9454, #9605, #9614, #9615, #9619, #9625, #9633, #9640, #9674 624 625 626Conch 627----- 628 629Bugfixes 630~~~~~~~~ 631 632- t.c.ssh.connection.SSHConnection now fails channels that are in the process of opening when the connection is lost. (#2782) 633 634 635Misc 636~~~~ 637 638- #9610 639 640 641Web 642--- 643 644Features 645~~~~~~~~ 646 647- twisted.web.tap, the module that is run by `twist web`, now accepts --display-tracebacks to render tracebacks on uncaught exceptions. (#9656) 648 649 650Bugfixes 651~~~~~~~~ 652 653- twisted.web.http.Request.write after the channel is disconnected will no longer raise AttributeError. (#9410) 654- twisted.web.client.Agent.request() and twisted.web.client.ProxyAgent.request() now produce TypeError when the method argument is not bytes, rather than failing to generate the request. (#9643) 655- twisted.web.http.HTTPChannel no longer raises TypeError internally when receiving a line-folded HTTP header on Python 3. (#9644) 656- All HTTP clients in twisted.web.client now raise a ValueError when called with a method and/or URL that contain invalid characters. This mitigates CVE-2019-12387. Thanks to Alex Brasetvik for reporting this vulnerability. (#9647) 657- twisted.web.server.Site's instance variable displayTracebacks is now set to False by default. (#9656) 658 659 660Improved Documentation 661~~~~~~~~~~~~~~~~~~~~~~ 662 663- twisted.web.iweb.IRequest's "prepath" and "postpath" attributes, which have existed for a long time, are now documented. (#5533) 664- The documented type of t.w.iweb.IRequest's "method" and "uri" attributes on Python 3 has been corrected to match the implementation. (#9091) 665- t.w.iweb.IRequest's "args" attribute is now correctly documented to be bytes. (#9458) 666- The API documentation of twisted.web.iweb.IRequest and twisted.web.http.Request has been updated and extended to match the implementation. (#9593) 667 668 669Deprecations and Removals 670~~~~~~~~~~~~~~~~~~~~~~~~~ 671 672- Passing a path argument to twisted.web.resource.Resource.putChild which is not of type bytes is now deprecated. In the future, passing a non-bytes argument to putChild will return an error. (#9135) 673- Passing --notracebacks/-n to twisted.web.tap, the module that is run by `twist web`, is now deprecated due to traceback rendering being disabled by default. (#9656) 674 675 676Misc 677~~~~ 678 679- #9597 680 681 682Mail 683---- 684 685No significant changes. 686 687 688Words 689----- 690 691Features 692~~~~~~~~ 693 694- twisted.words.protocols.jabber.xmlstream.TLSInitiatingInitializer and twisted.words.protocols.jabber.client.XMPPClientFactory now take an optional configurationForTLS for customizing certificate options for StartTLS. (#9561) 695 696 697Bugfixes 698~~~~~~~~ 699 700- twisted.words.protocols.jabber.xmlstream.TLSInitiatingInitializer now properly verifies the server's certificate against platform CAs and the stream's domain, mitigating CVE-2019-12855. (#9561) 701 702 703Names 704----- 705 706Bugfixes 707~~~~~~~~ 708 709- twisted.names.client.Resolver will no longer infinite loop if it cannot bind a UDP port to use for resolving. (#9620) 710 711 712Twisted 19.2.0 (2019-04-07) 713=========================== 714 715This is the final release that will support Python 3.4. 716 717Features 718-------- 719 720- twisted.internet.ssl.CertificateOptions now uses 32 random bytes instead of an MD5 hash for the ssl session identifier context. (#9463) 721- DeferredLock and DeferredSemaphore can be used as asynchronous context 722 managers on Python 3.5+. (#9546) 723- t.i.b.BaseConnector has custom __repr__ (#9548) 724- twisted.internet.ssl.optionsForClientTLS now supports validating IP addresses from the certificate subjectAltName (#9585) 725- Twisted's minimum Cryptography requirement is now 2.5. (#9592) 726 727 728Bugfixes 729-------- 730 731- twisted.web.proxy.ReverseProxyResource fixed documentation and example snippet (#9192) 732- twisted.python.failure.Failure.getTracebackObject now returns traceback objects whose frames can be passed into traceback.print_stack for better debugging of where the exception came from. (#9305) 733- twisted.internet.ssl.KeyPair.generate: No longer generate 1024-bit RSA keys by default. Anyone who generated a key with this method using the default value should move to replace it immediately. (#9453) 734- The message of twisted.internet.error.ConnectionAborted is no longer truncated. (#9522) 735- twisted.enterprise.adbapi.ConnectionPool.connect now logs only the dbapiName and not the connection arguments, which may contain credentials (#9544) 736- twisted.python.runtime.Platform.supportsINotify no longer considers the result of isDocker for its own result. (#9579) 737 738 739Improved Documentation 740---------------------- 741 742- The documentation for the the twisted.internet.interfaces.IConsumer, IProducer, and IPullProducer interfaces is more detailed. (#2546) 743- The errback example in the docstring of twisted.logger.Logger.failure has been corrected. (#9334) 744- The sample code in the "Twisted Web In 60 Seconds" tutorial runs on Python 3. (#9559) 745 746 747Misc 748---- 749 750- #8921, #9071, #9125, #9428, #9536, #9540, #9580 751 752 753Conch 754----- 755 756Features 757~~~~~~~~ 758 759- twisted.conch.ssh.keys can now read private keys in the new "openssh-key-v1" format, introduced in OpenSSH 6.5 and made the default in OpenSSH 7.8. (#9515) 760 761 762Bugfixes 763~~~~~~~~ 764 765- Conch now uses pyca/cryptography for Diffie-Hellman key generation and agreement. (#8831) 766 767 768Misc 769~~~~ 770 771- #9584 772 773 774Web 775--- 776 777Features 778~~~~~~~~ 779 780- twisted.web.client.HostnameCachingHTTPSPolicy was added as a new contextFactory option. The policy caches a specified number of twisted.internet.interfaces.IOpenSSLClientConnectionCreator instances to to avoid the cost of instantiating a connection creator for multiple requests to the same host. (#9138) 781 782 783Bugfixes 784~~~~~~~~ 785 786- twisted.web.http.Request.cookies, twisted.web.http.HTTPChannel.writeHeaders, and twisted.web.http_headers.Headers were all vulnerable to header injection attacks. They now replace linear whitespace ('\r', '\n', and '\r\n') with a single space. twisted.web.http.Reqeuest.cookies also replaces semicolons (';') with a single space. (#9420) 787- twisted.web.client.Request and twisted.web.client.HTTPClient were both vulnerable to header injection attacks. They now replace linear whitespace ('\r', '\n', and '\r\n') with a single space. (#9421) 788 789 790Mail 791---- 792 793No significant changes. 794 795 796Words 797----- 798 799No significant changes. 800 801 802Names 803----- 804 805Features 806~~~~~~~~ 807 808- twisted.names.dns now has IRecord implementations for the SSHFP and TSIG record types. (#9373) 809 810 811Twisted 18.9.0 (2018-10-10) 812=========================== 813 814Features 815-------- 816 817- twisted.internet._sslverify.ClientTLSOptions no longer raises IDNAError when given an IPv6 address as a hostname in a HTTPS URL. (#9433) 818- The repr() of a twisted.internet.base.DelayedCall now encodes the same information as its str(), exposing details of its scheduling and target callable. (#9481) 819- Python 3.7 is now supported. (#9502) 820 821 822Bugfixes 823-------- 824 825- twisted.logger.LogBeginner's default critical observer now prints tracebacks for new and legacy log system events through the use of the new eventAsText API. This API also does not raise an error for non-ascii encoded data in Python2, it attempts as well as possible to format the traceback. (#7927) 826- Syntax error under Python 3.7 fixed for twisted.conch.manhole and 827 twisted.main.imap4. (#9384) 828- `trial -j` reports tracebacks on test failures under Python 3. (#9436) 829- Properly format multi-byte and non-ascii encoded data in a traceback. (#9456) 830- twisted.python.rebuild now functions on Python 3.7. (#9492) 831- HTTP/2 server connections will no longer time out active downloads that take too long. (#9529) 832 833 834Improved Documentation 835---------------------- 836 837- Several minor formatting problems in the API documentation have been corrected. (#9461) 838- The documentation of twisted.internet.defer.Deferred.fromFuture() has been updated to reflect upstream changes. (#9539) 839 840 841Deprecations and Removals 842------------------------- 843 844- async keyword argument is deprecated in twisted.conch.manhole 845 (ManholeInterpreter.write and Manhole.add) and in 846 twisted.main.imap4.IMAP4Server.sendUntaggedResponse, 847 isAsync keyword argument is introduced instead. (#9384) 848 849 850Misc 851---- 852 853- #9379, #9485, #9489, #9499, #9501, #9511, #9514, #9523, #9524, #9525, #9538 854 855 856Conch 857----- 858 859Bugfixes 860~~~~~~~~ 861 862- twisted.conch.keys.Key.public returns the same twisted.conch.keys.Key instance when it is already a public key instead of failing with an exception. (#9441) 863- RSA private keys are no longer corrupted during loading, allowing OpenSSL's fast-path to operate for RSA signing. (#9518) 864 865 866Improved Documentation 867~~~~~~~~~~~~~~~~~~~~~~ 868 869- The documentation for IConchUser.gotGlobalRequest() is more accurate. (#9413) 870 871 872Deprecations and Removals 873~~~~~~~~~~~~~~~~~~~~~~~~~ 874 875- twisted.conch.ssh.filetransfer.ClientDirectory's use as an iterator has been deprecated. (#9527) 876 877 878Web 879--- 880 881Bugfixes 882~~~~~~~~ 883 884- twisted.web.server.Request.getSession now returns a new session if the 885 previous session has expired. (#9288) 886 887 888Misc 889~~~~ 890 891- #9479, #9480, #9482, #9491 892 893 894Mail 895---- 896 897No significant changes. 898 899 900Words 901----- 902 903No significant changes. 904 905 906Names 907----- 908 909No significant changes. 910 911 912Twisted 18.7.0 (2018-07-10) 913=========================== 914 915Features 916-------- 917 918- Cancelling a Deferred returned by twisted.internet.defer.inlineCallbacks now cancels the Deferred it is waiting on. (#4632) 919- twisted.application.internet.ClientService now accepts a function to initialize or validate a connection before it is returned by the whenConnected method as the prepareConnection argument. (#8375) 920- Traceback generated for twisted.internet.defer.inlineCallbacks now includes the full stack of inlineCallbacks generators between catcher and raiser (before it only contained raiser's stack). (#9176) 921- Add optional cwd argument to twisted.runner.procmon.ProcMon.addProcess (#9287) 922- twisted.python.failure.Failure tracebacks generated by coroutines scheduled with twisted.internet.defer.ensureDeferred - i.e. any Deferred-awaiting coroutine - now contain fewer extraneous frames from the trampoline implementation, and correctly indicate the source of exceptions raised in other call stacks - i.e. the function that raised the exception. In other words: if you 'await' a function that raises an exception, you'll be able to see where the error came from. (#9459) 923 924 925Bugfixes 926-------- 927 928- On UNIX-like platforms, Twisted attempts to recover from EMFILE when accepting connections on TCP and UNIX ports by shedding incoming clients. (#5368) 929- The documentation of IReactorTime.getDelayedCalls() has been corrected to indicate that the method returns a list, not a tuple. (#9418) 930- "python -m twisted web --help" now refers to "--listen" instead of the non-existing "--http" (#9434) 931- twisted.python.htmlizer.TokenPrinter now explicitly works on bytestrings. (#9442) 932- twisted.enterprise.adbapi.ConnectionPool.runWithConnection and runInteraction now use the reactor that is passed to ConnectionPool's constructor. (#9467) 933 934 935Improved Documentation 936---------------------- 937 938- The Twisted Coding Standard now contains examples of how to mark up a feature as added in the next Twisted release. (#9460) 939 940 941Deprecations and Removals 942------------------------- 943 944- Deprecate direct introspection of ProcMon's processes: processes should not be directly accessed or pickled. (#9287) 945- twisted.internet.address.IPv4Address._bwHack and twisted.internet.address.UNIXAddress._bwHack, as well as the parameters to the constructors, deprecated since Twisted 11.0, have been removed. (#9450) 946 947 948Misc 949---- 950 951- #7495, #9399, #9406, #9411, #9425, #9439, #9449, #9450, #9452 952 953 954Conch 955----- 956 957Features 958~~~~~~~~ 959 960- twisted.conch.ssh.transport.SSHTransportBase now includes Twisted's version in the software version string it sends to the server, allowing servers to apply compatibility workarounds for bugs in particular client versions. (#9424) 961 962 963Bugfixes 964~~~~~~~~ 965 966- If the command run by twisted.conch.endpoints.SSHCommandClientEndpoint exits because of a delivered signal, the client protocol's connectionLost is now called with a ProcessTerminated exception instead of a ConnectionDone exception. (#9412) 967- twisted.conch.ssh.transport.SSHTransportBase now correctly handles MSG_DEBUG with a false alwaysDisplay field on Python 2 (broken since 8.0.0). (#9422) 968- twisted.conch.manhole.lastColorizedLine now does not throw a UnicodeDecodeError on non-ASCII input. (#9442) 969 970 971Web 972--- 973 974Features 975~~~~~~~~ 976 977- Added support for SameSite cookies in ``http.Request.addCookie``. (#9387) 978 979 980Bugfixes 981~~~~~~~~ 982 983- twisted.web.server.GzipEncoderFactory would sometimes fail to gzip requests if the Accept-Encoding header contained whitespace between the comma-separated acceptable encodings. It now trims whitespace before checking if gzip is an acceptable encoding. (#9086) 984- twisted.web.static.File renders directory listings on Python 2, including those with text paths. (#9438) 985- twisted.python.http.Request now correcly parses multipart bodies on Python 3.7. (#9448) 986- twisted.web.http.combinedLogFormatter (used by t.w.http.Server and t.w.server.Site) no longer produces DeprecationWarning about Request.getClientIP. (#9470) 987 988 989Misc 990~~~~ 991 992- #9432, #9466, #9479, #9480 993 994 995Mail 996---- 997 998No significant changes. 999 1000 1001Words 1002----- 1003 1004No significant changes. 1005 1006 1007Names 1008----- 1009 1010Misc 1011~~~~ 1012 1013- #9398 1014 1015 1016Twisted 18.4.0 (2018-04-13) 1017=========================== 1018 1019Features 1020-------- 1021 1022- The --port/--https arguments to web plugin are now deprecated, in favor of 1023 --listen. The --listen argument can be given multiple times to listen on 1024 multiple ports. (#6670) 1025- Twisted now requires zope.interface 4.4.2 or higher across all platforms and 1026 Python versions. (#8149) 1027- The osx_platform setuptools extra has been renamed to macos_platform, with 1028 the former name being a compatibility alias. (#8848) 1029- Zsh completions are now provided for the twist command. (#9338) 1030- twisted.internet.endpoints.HostnameEndpoint now has a __repr__ method which 1031 includes the host and port to which the endpoint connects. (#9341) 1032 1033 1034Bugfixes 1035-------- 1036 1037- twistd now uses the UID's default GID to initialize groups when --uid is 1038 given but --gid is not. This prevents an unhandled TypeError from being 1039 raised when os.initgroups() is called. (#4442) 1040- twisted.protocols.basic.LineReceiver checks received lines' lengths against 1041 its MAX_LENGTH only after receiving a complete delimiter. A line ending in a 1042 multi-byte delimiter like '\r\n' might be split by the network, with the 1043 first part arriving before the rest; previously, LineReceiver erroneously 1044 disconnected if the first part, e.g. 'zzzz....\r' exceeded MAX_LENGTH. 1045 LineReceiver now checks received data against MAX_LENGTH plus the delimiter's 1046 length, allowing short reads to complete a line. (#6556) 1047- twisted.protocols.basic.LineOnlyReceiver disconnects the transport after 1048 receiving a line that exceeds MAX_LENGTH, like LineReceiver. (#6557) 1049- twisted.web.http.Request.getClientIP now returns the host part of the 1050 client's address when connected over IPv6. (#7704) 1051- twisted.application.service.IService is now documented as requiring the 1052 'running', 'name' and 'parent' attributes (the documentation previously 1053 implied they were required, but was unclear). (#7922) 1054- twisted.web.wsgi.WSGIResource no longer raises an exception when a client 1055 connects over IPv6. (#8241) 1056- When using TLS enable automatic ECDH curve selection on OpenSSL 1.0.2+ 1057 instead of only supporting P-256 (#9210) 1058- twisted.trial._dist.worker and twisted.trial._dist.workertrial consistently 1059 pass bytes, not unicode to AMP. This fixes "trial -j" on Python 3. (#9264) 1060- twisted.trial.runner now uses the 'importlib' module instead of the 'imp' 1061 module on Python 3+. This eliminates DeprecationWarnings caused by importing 1062 'imp' on Python 3. (#9275) 1063- twisted.web.client.HTTP11ClientProtocol now closes the connection when the 1064 server is sending a header line which is longer than he line limit of 1065 twisted.protocols.basic.LineReceiver.MAX_LENGTH. (#9295) 1066- twisted.python.failure now handles long stacktraces better; in particular it 1067 will log tracebacks for stack overflow errors. (#9301) 1068- The "--_shell-completion" argument to twistd now works on Python 3. (#9303) 1069- twisted.python.failure.Failure now raises the wrapped exception in Python3, 1070 and self (Failure) n Python2 when trap() is called without a matching 1071 exception (#9307) 1072- Writing large amounts of data no longer implies repeated, expensive copying 1073 under Python 3. Python 3's write speeds are now as fast as Python 2's. 1074 (#9324) 1075- twisted.protocols.postfix now properly encodes errors which are unicode 1076 strings to bytes. (#9335) 1077- twisted.protocols.policies.ProtocolWrapper and 1078 twisted.protocols.tls.TLSMemoryBIOProtocol no longer create circular 1079 references that keep protocol instances in memory after connection is closed. 1080 (#9374) 1081- twisted.conch.ssh.transport.SSHTransportBase no longer strips trailing spaces 1082 from the SSH version string of the connected peer. (#9377) 1083- `trial -j` no longer crashes on Python 2 on test failure messages containing 1084 non-ASCII bytes. (#9378) 1085- RSA keys replaced with 2048bit ones in twisted.conch.test.keydata in order to 1086 be compatible with OpenSSH 7.6. (#9388) 1087- AsyncioSelectorReactor uses the global policy's event loop. asyncio libraries 1088 that retrieve the running event loop with get_event_loop() will now receive 1089 the one used by AsyncioSelectorReactor. (#9390) 1090 1091 1092Improved Documentation 1093---------------------- 1094 1095- public attributes of `twisted.logger.Logger` are now documented as 1096 attributes. (#8157) 1097- List indentation formatting errors have been corrected throughout the 1098 documentation. (#9256) 1099 1100 1101Deprecations and Removals 1102------------------------- 1103 1104- twisted.protocols.basic.LineOnlyReceiver.lineLengthExceeded no longer returns 1105 twisted.internet.error.ConnectionLost. It instead directly disconnects the 1106 transport and returns None. (#6557) 1107- twisted.python.win32.getProgramsMenuPath and 1108 twisted.python.win32.getProgramFilesPath were deprecated in Twisted 15.3.0 1109 and have now been removed. (#9312) 1110- Python 3.3 is no longer supported. (#9352) 1111 1112 1113Misc 1114---- 1115 1116- #7033, #8887, #9204, #9289, #9291, #9292, #9293, #9302, #9336, #9355, #9356, 1117 #9364, #9375, #9381, #9382, #9389, #9391, #9393, #9394, #9396 1118 1119 1120Conch 1121----- 1122 1123Bugfixes 1124~~~~~~~~ 1125 1126- twisted.plugins.cred_unix now properly converts a username and password from 1127 bytes to str on Python 3. In addition, passwords which are encrypted with 1128 SHA512 and SH256 are properly verified. This fixes running a conch server 1129 with: "twistd -n conch -d /etc/ssh/ --auth=unix". (#9130) 1130- In twisted.conch.scripts.conch, on Python 3 do not write bytes directly to 1131 sys.stderr. On Python 3, this fixes remote SSH execution of a command which 1132 fails. (#9344) 1133 1134 1135Deprecations and Removals 1136~~~~~~~~~~~~~~~~~~~~~~~~~ 1137 1138- twisted.conch.ssh.filetransfer.FileTransferClient.wasAFile attribute has been 1139 removed as it serves no purpose. (#9362) 1140- Removed deprecated support for PyCrypto key objects in conch (#9368) 1141 1142 1143Web 1144--- 1145 1146Features 1147~~~~~~~~ 1148 1149- The new twisted.iweb.IRequest.getClientAddress returns the IAddress provider 1150 representing the client's address. Callers should check the type of the 1151 returned value before using it. (#7707) 1152- Eliminate use of twisted.python.log in twisted.web modules. (#9280) 1153 1154 1155Bugfixes 1156~~~~~~~~ 1157 1158- Scripts ending with .rpy, .epy, and .cgi now execute properly in Twisted Web 1159 on Python 3. (#9271) 1160- twisted.web.http.Request and twisted.web.server.Request are once again 1161 hashable on Python 2, fixing a regression introduced in Twisted 17.5.0. 1162 (#9314) 1163 1164 1165Improved Documentation 1166~~~~~~~~~~~~~~~~~~~~~~ 1167 1168- Correct reactor docstrings for twisted.web.client.Agent and 1169 twisted.web.client._StandardEndpointFactory to communicate interface 1170 requirements since 17.1. (#9274) 1171- The examples for the "Twisted Web in 60 Seconds" tutorial have been fixed to 1172 work on Python 3. (#9285) 1173 1174 1175Deprecations and Removals 1176~~~~~~~~~~~~~~~~~~~~~~~~~ 1177 1178- twisted.iweb.IRequest.getClientIP is deprecated. Use 1179 twisted.iweb.IRequest.getClientAddress instead (see #7707). (#7705) 1180- twisted.web.iweb.IRequest.getClient and its implementations (deprecated in 1181 #2552) have been removed. (#9395) 1182 1183 1184Mail 1185---- 1186 1187Bugfixes 1188~~~~~~~~ 1189 1190- twistd.mail.scripts.mailmail has been ported to Python 3. (#8487) 1191- twisted.mail.bounce now works on Python 3. (#9260) 1192- twisted.mail.pop3 and twisted.mail.pop3client now work on Python 3. (#9269) 1193- SMTP authentication in twisted.mail.smtp now works better on Python 3, due to 1194 improved improved bytes vs unicode handling. (#9299) 1195 1196 1197Misc 1198~~~~ 1199 1200- #9310 1201 1202 1203Words 1204----- 1205 1206No significant changes. 1207 1208 1209Names 1210----- 1211 1212No significant changes. 1213 1214 1215Twisted 17.9.0 (2017-09-23) 1216=========================== 1217 1218This is the last Twisted release where Python 3.3 is supported, on any 1219platform. 1220 1221Features 1222-------- 1223 1224- twisted.python.failure.Failure is now a new-style class which subclasses 1225 BaseException. (#5519) 1226- twisted.internet.posixbase.PosixReactorBase.adoptStreamPort and 1227 twisted.internet.posixbase.PosixReactorBase.adoptStreamConnection now support 1228 AF_UNIX SOCK_STREAM sockets. (#5573) 1229- (#8940) 1230- t.protocol.policies.TimeoutMixin.setTimeout and 1231 t.protocol.policies.TimeoutProtocol.cancelTimeout (used in 1232 t.protocol.policies.TimeoutFactory) no longer raise a 1233 t.internet.error.AlreadyCancelled exception when calling them for an already 1234 cancelled timeout. (#9131) 1235- twisted.web.template.flatten now supports coroutines that yield Deferreds. 1236 (#9199) 1237- twisted.web.client.HTTPConnectionPool passes the repr() of the endpoint to 1238 the client protocol factory, and the protocol factory adds that to its own 1239 repr(). This makes logs more useful. (#9235) 1240- Python 3.6 is now supported (#9240) 1241 1242 1243Bugfixes 1244-------- 1245 1246- twisted.python.logfile.BaseLogFile and subclasses now always open the file in 1247 binary mode, and will process text as UTF-8. (#6938) 1248- The `ssl:` endpoint now accepts `certKey` PEM files without trailing 1249 newlines. (#7530) 1250- Logger.__init__ sets the namespace to "<unknown>" instead of raising KeyError 1251 when unable to determine the namespace from the calling context. (#7930) 1252- twisted.internet._win32serialport updated to support pySerial 3.x and dropped 1253 pySerial 2.x support. (#8159) 1254- twisted.python.rebuild now works on Python 3. (#8213) 1255- twisted.web.server.Request.notifyFinish will now once again promptly notify 1256 applications of client disconnection (assuming that the client doesn't send a 1257 large amount of pipelined request data) rather than waiting for the timeout; 1258 this fixes a bug introduced in Twisted 16.3.0. (#8692) 1259- twisted.web.guard.HTTPAuthSessionWrapper configured with 1260 DigestCredentialFactory now works on both Python 2 and 3. (#9127) 1261- Detect when we’re being run using “-m twisted” or “-m twisted.trial” and use 1262 it to build an accurate usage message. (#9133) 1263- twisted.protocols.tls.TLSMemoryBIOProtocol now allows unregisterProducer to 1264 be called when no producer is registered, bringing it in line with other 1265 transports. (#9156) 1266- twisted.web web servers no longer print tracebacks when they timeout clients 1267 that do not respond to TLS CLOSE_NOTIFY messages. (#9157) 1268- twisted.mail.imap4 now works on Python 3. (#9161) 1269- twisted.python.shortcut now works on Python 3 in Windows. (#9170) 1270- Fix traceback forwarding with inlineCallbacks on python 3. (#9175) 1271- twisted.mail.imap4.MessageSet now treats * as larger than every message ID, 1272 leading to more consistent and robust behavior. (#9177) 1273- The following plugins can now be used on Python 3 with twistd: dns, inetd, 1274 portforward, procmon, socks, and words. (#9184) 1275- twisted.internet._win32serialport now uses serial.serialutil.to_bytes() to 1276 provide bytes in Python 3. (#9186) 1277- twisted.internet.reactor.spawnProcess() now does not fail on Python 3 in 1278 Windows if passed a bytes-encoded path argument. (#9200) 1279- twisted.protocols.ident now works on Python 3. (#9221) 1280- Ignore PyPy's implementation differences in base object class. (#9225) 1281- twisted.python.test.test_setup now passes with setuptools 36.2.1 (#9231) 1282- twisted.internet._win32serialport SerialPort._clearCommError() no longer 1283 raises AttributeError (#9252) 1284- twisted.trial.unittest.SynchronousTestCase and 1285 twisted.trial.unittest.TestCase now always run their tearDown methods, even 1286 when a test method fails with an exception. They also flush all errors logged 1287 by a test method before running another, ensuring the logged errors are 1288 associated with their originating test method. (#9267) 1289 1290 1291Improved Documentation 1292---------------------- 1293 1294- Trial's documentation now directly mentions the preferred way of running 1295 Trial, via "python -m twisted.trial". (#9052) 1296- twisted.internet.endpoints.HostnameEndpoint and 1297 twisted.internet.endpoints.TCP4Client endpoint documentation updated to 1298 correctly reflect that the timeout argument takes a float as well as an int. 1299 (#9151) 1300- Badges at top of README now correctly render as links to respective result 1301 pages on GitHub. (#9216) 1302- The example code for the trial tutorial is now compatible with Python3 and 1303 the current version of Twisted. (#9223) 1304 1305 1306Deprecations and Removals 1307------------------------- 1308 1309- twisted.protocols.dict is deprecated. (#9141) 1310- gpsfix.py has been removed from the examples. It uses twisted.protocols.gps 1311 which was removed in Twisted 16.5.0. (#9253) 1312- oscardemo.py, which illustrates the use of twisted.words.protocols.oscar, as 1313 been removed. twisted.words.protocols.oscar was removed in Twisted 17.5.0. 1314 (#9255) 1315 1316 1317Misc 1318---- 1319 1320- #5949, #8566, #8650, #8944, #9159, #9160, #9162, #9196, #9219, #9228, #9229, 1321 #9230, #9247, #9248, #9249, #9251, #9254, #9262, #9276, #9308 1322 1323 1324Conch 1325----- 1326 1327Bugfixes 1328~~~~~~~~ 1329 1330- twisted.conch.ssh.userauth.SSHUserAuthServer now gracefully handles 1331 unsupported authentication key types. (#9139) 1332- twisted.conch.client.default verifyHostKey now opens /dev/tty with no buffer 1333 to be compatible with Python 3. This lets the conch cli work with Python 3. 1334 (#9265) 1335 1336 1337Deprecations and Removals 1338~~~~~~~~~~~~~~~~~~~~~~~~~ 1339 1340- twisted.conch.ssh._cryptography_backports has been removed in favor of using 1341 int_to_bytes() and int_from_bytes() from cryptography.utils. (#9263) 1342 1343 1344Misc 1345~~~~ 1346 1347- #9158, #9272 1348 1349 1350Web 1351--- 1352 1353Features 1354~~~~~~~~ 1355 1356- twisted.web.static.File.contentTypes is now documented. (#5739) 1357- twisted.web.server.Request and any Twisted web server using it now support 1358 automatic fast responses to HTTP/1.1 and HTTP/2 OPTIONS * requests, and 1359 reject any other verb using the * URL form. (#9190) 1360- --add-header "HeaderName: Value" can be passed to twist web in order to set 1361 extra headers on all responses (#9241) 1362 1363 1364Bugfixes 1365~~~~~~~~ 1366 1367- twisted.web.client.HTTPClientFactory(...).gotHeaders(...) now handles a wrong 1368 Set-Cookie header without a traceback. (#9136) 1369- twisted.python.web.http.HTTPFactory now always opens logFile in binary mode 1370 and writes access logs in UTF-8, to avoid encoding issues and newline 1371 differences on Windows. (#9143) 1372- The code examples in "Using the Twisted Web Client" now work on Python 3. 1373 (#9172) 1374- twisted.web.server.Request and all web servers that use it now no longer send 1375 a default Content-Type header on responses that do not have a body (i.e. that 1376 set Content-Length: 0 or that send a 204 status code). (#9191) 1377- twisted.web.http.Request and all subclasses now correctly fire Deferreds 1378 returned from notifyFinish with errbacks when errors are encountered in 1379 HTTP/2 streams. (#9208) 1380- twisted.web.microdom, twisted.web.domhelpers, and twisted.web.sux now work on 1381 Python 3. (#9222) 1382 1383 1384Mail 1385---- 1386 1387Bugfixes 1388~~~~~~~~ 1389 1390- Sending a list of recipients with twisted.smtp.SenderFactory has been fixed. 1391 This fixes a problem found when running buildbot. (#9180) 1392- twisted.mail.imap4.IMAP4Server parses empty string literals even when they 1393 are the last argument to a command, such as LOGIN. (#9207) 1394 1395 1396Words 1397----- 1398 1399Bugfixes 1400~~~~~~~~ 1401 1402- twisted.words.tap has been ported to Python 3 (#9169) 1403 1404 1405Misc 1406~~~~ 1407 1408- #9246 1409 1410 1411Names 1412----- 1413 1414Bugfixes 1415~~~~~~~~ 1416 1417- Queries for unknown record types no longer incorrectly result in a server 1418 error. (#9095) 1419- Failed TCP connections for AFXR queries no longer raise an AttributeError. 1420 (#9174) 1421 1422 1423Twisted 17.5.0 (2017-06-04) 1424=========================== 1425 1426Bugfixes 1427-------- 1428 1429- spawnProcess no longer opens an unwanted console on Windows (#5726) 1430- The transition to the hyperlink package adds IPv6 support to 1431 twisted.python.url.URL. This is now deprecated and new code should use 1432 hyperlink directly (see #9126). (#8069) 1433- twisted.logger now buffers only 200 events by default (reduced from 65536) 1434 while waiting for observers to be configured. (#8164) 1435- The transition of twisted.python.url to using the hyperlink package enables a 1436 URL.click() with no arguments (or 0-length string argument) to resolve dot 1437 segments in the path. (#8184) 1438- twisted.protocols.finger now works on Python 3. (#8230) 1439- TLS-related tests now pass when run with OpenSSL 1.1.0. This makes tests pass 1440 again on macOS and Windows, as cryptography 1.8 and later include OpenSSL 1441 1.1.0. (#8898) 1442- UNIX socket endpoints now process all messages from recvmsg's ancillary data 1443 via twisted.internet.unix.Server.doRead/twisted.internet.unix.Client.doRead, 1444 while discarding and logging ones that don't contain file descriptors. 1445 (#8912) 1446- twisted.internet.endpoints.HostnameEndpoint and twisted.web.client.Agent work 1447 again with reactors that do not provide IReactorPluggableNameResolver. This 1448 undoes the changes that broke downstream users such as treq.testing. Note 1449 that passing reactors that do not provide IReactorPluggableNameResolver to 1450 either is deprecated. (#9032) 1451- A Python 3 Perspective Broker server which receives a remote call with 1452 keyword arguments from a Python 2 client will now decode any keys which are 1453 binary to strings instead of crashing. This fixes interoperability between 1454 Python 2 Buildbot clients and Python 3 Buildbot servers. (#9047) 1455- twisted.internet._threadedselect now works on both Python 2 and 3. (#9053) 1456- twisted.internet.interfaces.IResolverSimple implementers will now always be 1457 passed bytes, properly IDNA encoded if required, on Python 2. On Python 3, 1458 they will now be passed correctly IDNA-encoded Unicode forms of the domain, 1459 taking advantage of the idna library from PyPI if possible. This is to avoid 1460 Python's standard library (which has an out of date idna module) from mis- 1461 encoding domain names when non-ASCII Unicode is passed to it. (#9137) 1462 1463 1464Improved Documentation 1465---------------------- 1466 1467- The examples in Twisted howto "Using the Twisted Application Framework", 1468 section "Customizing twistd logging" have been updated to use latest logging 1469 modules and syntax (#9084) 1470 1471 1472Features 1473-------- 1474 1475- twisted.internet.defer.Deferred.asFuture and 1476 twisted.internet.defer.Deferred.fromFuture were added, allowing for easy 1477 transitions between asyncio coroutines (which await Futures) and twisted 1478 coroutines (which await Deferreds). (#8748) 1479- twisted.application.internet.ClientService.whenConnected now accepts an 1480 argument "failAfterFailures". If you set this to 1, the Deferred returned by 1481 whenConnected will errback when the connection attempt fails, rather than 1482 retrying forever. This lets you react (probably by stopping the 1483 ClientService) to connection errors that are likely to be persistent, such as 1484 using the wrong hostname, or not being connected to the internet at all. 1485 (#9116) 1486- twisted.protocols.tls.TLSMemoryBIOProtocol and anything that uses it 1487 indirectly including the TLS client and server endpoints now enables TLS 1.3 1488 cipher suites. (#9128) 1489 1490 1491Misc 1492---- 1493 1494- #8133, #8995, #8997, #9003, #9015, #9021, #9026, #9027, #9049, #9057, #9062, 1495 #9065, #9069, #9070, #9072, #9074, #9075, #9111, #9117, #9140, #9144, #9145 1496 1497 1498Deprecations and Removals 1499------------------------- 1500 1501- twisted.runner.inetdconf.InvalidRPCServicesConfError, 1502 twisted.runner.inetdconf.RPCServicesConf, twisted.runner.inetdtap.RPCServer, 1503 and twisted.runner.portmap, deprecated since 16.2.0, have been removed. 1504 (#8464) 1505- twisted.python.url and twisted.python._url were modified to rely on 1506 hyperlink, a new package based on the Twisted URL implementation. Hyperlink 1507 adds support for IPv6 (fixing #8069), correct username/password encoding, 1508 better scheme/netloc inference, improved URL.click() behavior (fixing #8184), 1509 and more. For full docs see hyperlink.readthedocs.io and the CHANGELOG in the 1510 hyperlink GitHub repo. (#9126) 1511 1512 1513Conch 1514----- 1515 1516Bugfixes 1517~~~~~~~~ 1518 1519- History-aware terminal protocols like twisted.conch.manhole.Manhole no longer 1520 raise a TypeError when a user visits a partial line they added to the command 1521 line history by pressing up arrow before return. (#9031) 1522- The telnet_echo.tac example had conflicting port callouts between runtime and 1523 documentation. File was altered to run on documented port, 6023. (#9055) 1524 1525 1526Deprecations and Removals 1527~~~~~~~~~~~~~~~~~~~~~~~~~ 1528 1529- Remove diffie-hellman-group1-sha1 from twisted.conch. See https://weakdh.org/ 1530 (#9019) 1531- Removed small and obscure elliptic curves from conch. The only curves conch 1532 supports now are the ones also supported by OpenSSH. (#9088) 1533 1534 1535Mail 1536---- 1537 1538Bugfixes 1539~~~~~~~~ 1540 1541- twisted.mail.smtp has been ported to Python 3. (#8770) 1542 1543 1544Names 1545----- 1546 1547Bugfixes 1548~~~~~~~~ 1549 1550- RRHeader now converts its ttl argument to an integer, raising a TypeError if 1551 it cannot. (#8340) 1552 1553 1554Web 1555--- 1556 1557Bugfixes 1558~~~~~~~~ 1559 1560- twisted.web.cgi now works on Python 3 (#8009) 1561- twisted.web.distrib now works on Python 3 (#8010) 1562- twisted.web.http.HTTPFactory now propagates its reactor's callLater method to 1563 the HTTPChannel object, rather than having callLater grab the global reactor. 1564 This prevents the possibility of HTTPFactory logging using one reactor, but 1565 HTTPChannel running timeouts on another. (#8904) 1566 1567 1568Improved Documentation 1569~~~~~~~~~~~~~~~~~~~~~~ 1570 1571- twisted.web.template.flattenString docstring now correctly references 1572 io.BytesIO (rather than NativeStringIO). (#9028) 1573 1574 1575Features 1576~~~~~~~~ 1577 1578- twisted.web.client now exposes the RequestGenerationFailed exception type. 1579 (#5310) 1580- twisted.web.client.Agent will now parse responses that begin with a status 1581 line that is missing a phrase. (#7673) 1582- twisted.web.http.HTTPChannel and twisted.web._http2.H2Connection have been 1583 enhanced so that after they time out they wait a small amount of time to 1584 allow the connection to close gracefully and, if it does not, they forcibly 1585 close it to avoid allowing malicious clients to forcibly keep the connection 1586 open. (#8902) 1587 1588 1589Misc 1590~~~~ 1591 1592- #8981, #9018, #9067, #9090, #9092, #9093, #9096 1593 1594 1595Words 1596----- 1597 1598Deprecations and Removals 1599~~~~~~~~~~~~~~~~~~~~~~~~~ 1600 1601- twisted.words.protocols.oscar, which is client code for Oscar/ICQ, was 1602 deprecated in 16.2.0 and has now been removed. (#9024) 1603 1604 1605Twisted Core 17.1.0 (2017-02-04) 1606================================ 1607 1608Features 1609-------- 1610 - Added a new interface, 1611 twisted.internet.interfaces.IHostnameResolver, which is an 1612 improvement to twisted.internet.interfaces.IResolverSimple that 1613 supports resolving multiple addresses as well as resolving IPv6 1614 addresses. This is a native, asynchronous, Twisted analogue to 1615 getaddrinfo. (#4362) 1616 - twisted.web.client.Agent now uses HostnameEndpoint internally; as a 1617 consequence, it now supports IPv6, as well as making connections 1618 faster and more reliably to hosts that have more than one DNS name. 1619 (#6712) 1620 - twisted.internet.ssl.CertificateOptions now has the new constructor 1621 argument 'raiseMinimumTo', allowing you to increase the minimum TLS 1622 version to this version or Twisted's default, whichever is higher. 1623 The additional new constructor arguments 'lowerMaximumSecurityTo' 1624 and 'insecurelyLowerMinimumTo' allow finer grained control over 1625 negotiated versions that don't honour Twisted's defaults, for 1626 working around broken peers, at the cost of reducing the security 1627 of the TLS it will negotiate. (#6800) 1628 - twisted.internet.ssl.CertificateOptions now sets the OpenSSL 1629 context's mode to MODE_RELEASE_BUFFERS, which will free the 1630 read/write buffers on idle TLS connections to save memory. (#8247) 1631 - trial --help-reactors will only list reactors which can be 1632 imported. (#8745) 1633 - twisted.internet.endpoints.HostnameEndpoint now uses the passed 1634 reactor's implementation of 1635 twisted.internet.interfaces.IReactorPluggableResolver to resolve 1636 hostnames rather than its own deferToThread/getaddrinfo wrapper; 1637 this makes its hostname resolution pluggable via a public API. 1638 (#8922) 1639 - twisted.internet.reactor.spawnProcess now does not emit a 1640 deprecation warning on Unicode arguments. It will encode Unicode 1641 arguments down to bytes using the filesystem encoding on UNIX and 1642 Python 2 on Windows, and pass Unicode through unchanged on Python 3 1643 on Windows. (#8941) 1644 - twisted.trial._dist.test.test_distreporter now works on Python 3. 1645 (#8943) 1646 1647Bugfixes 1648-------- 1649 - trial --help-reactors will now display iocp and win32er reactors 1650 with Python 3. (#8745) 1651 - twisted.logger._flatten.flattenEvent now handles log_format being 1652 None instead of assuming the value is always a string. (#8860) 1653 - twisted.protocol.ftp is now Python 3 compatible (#8865) 1654 - twisted.names.client.Resolver can now resolve names with IPv6 DNS 1655 servers. (#8877) 1656 - twisted.application.internet.ClientService now waits for existing 1657 connections to disconnect before trying to connect again when 1658 restarting. (#8899) 1659 - twisted.internet.unix.Server.doRead and 1660 twisted.internet.unix.Client.doRead no longer fail if recvmsg's 1661 ancillary data contains more than one file descriptor. (#8911) 1662 - twist on Python 3 now correctly prints the help text when given no 1663 plugin to run. (#8918) 1664 - twisted.python.sendmsg.sendmsg no longer segfaults on Linux + 1665 Python 2. (#8969) 1666 - IHandshakeListener providers connected via SSL4ClientEndpoint will 1667 now have their handshakeCompleted methods called. (#8973) 1668 - The twist script now respects the --reactor option. (#8983) 1669 - Fix crash when using SynchronousTestCase with Warning object which 1670 does not store a string as its first argument (like 1671 libmysqlclient). (#9005) 1672 - twisted.python.compat.execfile() does not open files with the 1673 deprecated 'U' flag on Python 3. (#9012) 1674 1675Deprecations and Removals 1676------------------------- 1677 - twisted.internet.ssl.CertificateOption's 'method' constructor 1678 argument is now deprecated, in favour of the new 'raiseMinimumTo', 1679 'lowerMaximumSecurityTo', and 'insecurelyLowerMinimumTo' arguments. 1680 (#6800) 1681 - twisted.protocols.telnet (not to be confused with the supported 1682 twisted.conch.telnet), deprecated since Twisted 2.5, has been 1683 removed. (#8925) 1684 - twisted.application.strports.parse, as well as the deprecated 1685 default arguments in strports.service/listen, deprecated since 1686 Twisted 10.2, has been removed. (#8926) 1687 - twisted.web.client.getPage and twisted.web.client.downloadPage have 1688 been deprecated in favour of https://pypi.org/project/treq and 1689 twisted.web.client.Agent. (#8960) 1690 - twisted.internet.defer.timeout is deprecated in favor of 1691 twisted.internet.defer.Deferred.addTimeout (#8971) 1692 1693Other 1694----- 1695 - #7879, #8583, #8764, #8809, #8859, #8906, #8910, #8913, #8916, 1696 #8934, #8945, #8949, #8950, #8952, #8953, #8959, #8962, #8963, 1697 #8967, #8975, #8976, #8993, #9013 1698 1699 1700Twisted Conch 17.1.0 (2017-02-04) 1701================================= 1702 1703Features 1704-------- 1705 - twisted.conch.manhole now works on Python 3. (#8327) 1706 - Twisted Conch now supports ECDH key exchanges. (#8730) 1707 - Add support in twisted.conch.ssh for hmac-sha2-384 (#8784) 1708 - conch and cftp scripts now work on Python 3. (#8791) 1709 - twisted.conch.ssh supports ECDH key exchange. (#8811) 1710 1711Bugfixes 1712-------- 1713 - twisted.conch.ssh.keys.Key.fromString now supports OpenSSL private 1714 keys with Windows line endings (\r\n) again (broken since 16.6.0). 1715 (#8928) 1716 1717Improved Documentation 1718---------------------- 1719 - The documentation for 1720 twisted.conch.endpoints.SSHCommandClientEndpoint.existingConnection 1721 now describes where the value for the connection parameter might 1722 come from. (#8892) 1723 1724Other 1725----- 1726 - #8890, #8894, #8957, #8958, #8968 1727 1728 1729Twisted Mail 17.1.0 (2017-02-04) 1730================================ 1731 1732Deprecations and Removals 1733------------------------- 1734 - twisted.mail.tap (the twist plugin for mail) no longer accepts the 1735 --pop3s option or implicit port numbers to --pop3 and --smtp. This 1736 functionality has been deprecated since 11.0. (#8920) 1737 1738 1739Twisted Names 17.1.0 (2017-02-04) 1740================================= 1741 1742Bugfixes 1743-------- 1744 - twisted.names.authority.BindAuthority has been ported to Python 3. 1745 (#8880) 1746 1747 1748Twisted News 17.1.0 (2017-02-04) 1749================================ 1750 1751No significant changes have been made for this release. 1752 1753 1754Twisted Pair 17.1.0 (2017-02-04) 1755================================ 1756 1757No significant changes have been made for this release. 1758 1759 1760Twisted Runner 17.1.0 (2017-02-04) 1761================================== 1762 1763Bugfixes 1764-------- 1765 - On Python 3, procmon now handles process output without exceptions 1766 (#8919) 1767 1768 1769Twisted Web 17.1.0 (2017-02-04) 1770=============================== 1771 1772Features 1773-------- 1774 - twisted.web.client.Agent now sets ``Content-Length: 0`` for PUT and 1775 POST requests made without a body producer. (#8984) 1776 1777Bugfixes 1778-------- 1779 - twisted.web.http.HTTPFactory now times connections out after one 1780 minute of no data from the client being received, before the 1781 request is complete, rather than twelve hours. (#3746) 1782 - twisted.web.http.HTTPChannel, the server class for Twisted's 1783 HTTP/1.1 server, now exerts backpressure against clients that do 1784 not read responses. This means that if a client stops reading from 1785 a socket for long enough, Twisted will stop reading further 1786 requests from that client until it consumes some responses. (#8868) 1787 - twisted.web.http_headers.Headers.getRawHeaders no longer attempts 1788 to decode the default value when called with a unicode header name. 1789 (#8974) 1790 - twisted.web.http.HTTPChannel is less likely to leak file 1791 descriptors when timing out clients using HTTPS connections. In 1792 some cases it is still possible to leak a file descriptor when 1793 timing out HTTP clients: further patches will address this issue. 1794 (#8992) 1795 1796Other 1797----- 1798 - #7744, #8909, #8935 1799 1800 1801Twisted Words 17.1.0 (2017-02-04) 1802================================= 1803 1804No significant changes have been made for this release. 1805 1806 1807Twisted Core 16.6.0 (2016-11-17) 1808================================ 1809 1810Features 1811-------- 1812 - The twist script can now be run by invoking python -m twisted. 1813 (#8657) 1814 - twisted.protocols.sip has been ported to Python 3. (#8669) 1815 - twisted.persisted.dirdbm has been ported to Python 3. (#8888) 1816 1817Bugfixes 1818-------- 1819 - twisted.internet.defer.Deferred now implements send, not __send__, 1820 which means that it is now a conforming generator. (#8861) 1821 - The IOCP reactor no longer transmits the contents of uninitialized 1822 memory when writing large amounts of data. (#8870) 1823 - Deferreds awaited/yielded from in a 1824 twisted.internet.defer.ensureDeferred wrapped coroutine will now 1825 properly raise exceptions. Additionally, it more closely models 1826 asyncio.ensure_future and will pass through Deferreds. (#8878) 1827 - Deferreds that are paused or chained on other Deferreds will now 1828 return a result when yielded/awaited in a twisted.internet.defer 1829 .ensureDeferred-wrapped coroutine, instead of returning the 1830 Deferred it was chained to. (#8890) 1831 1832Improved Documentation 1833---------------------- 1834 - twisted.test.proto_helpers is now explicitly covered by the 1835 compatibility policy. (#8857) 1836 1837Other 1838----- 1839 - #8281, #8823, #8862 1840 1841 1842Twisted Conch 16.6.0 (2016-11-17) 1843================================= 1844 1845Features 1846-------- 1847 - twisted.conch.ssh.keys supports ECDSA keys (#8798) 1848 - scripts/ckeygen can now generate ecdsa keys. (#8828) 1849 - ckeygen has been ported to Python 3 (#8855) 1850 1851Deprecations and Removals 1852------------------------- 1853 - twisted.conch.ssh no longer uses gmpy, if available. gmpy is 1854 unmaintained, does not have binary wheels for any platforms, and an 1855 alternative for higher performance is available in the form of 1856 PyPy. (#8079) 1857 1858 1859Twisted Mail 16.6.0 (2016-11-17) 1860================================ 1861 1862No significant changes have been made for this release. 1863 1864 1865Twisted Names 16.6.0 (2016-11-17) 1866================================= 1867 1868No significant changes have been made for this release. 1869 1870 1871Twisted News 16.6.0 (2016-11-17) 1872================================ 1873 1874No significant changes have been made for this release. 1875 1876 1877Twisted Pair 16.6.0 (2016-11-17) 1878================================ 1879 1880No significant changes have been made for this release. 1881 1882 1883Twisted Runner 16.6.0 (2016-11-17) 1884================================== 1885 1886No significant changes have been made for this release. 1887 1888 1889Twisted Web 16.6.0 (2016-11-17) 1890=============================== 1891 1892Features 1893-------- 1894 - twisted.web.server.Site's HTTP/2 server support now emits vastly 1895 fewer WINDOW_UPDATE frames than previously. (#8681) 1896 1897Bugfixes 1898-------- 1899 - twisted.web.Agent now tolerates receiving unexpected status codes 1900 in the 100 range by discarding them, which is what RFC 7231 1901 recommends doing. (#8885) 1902 - twisted.web._http.H2Stream's getHost and getPeer implementations 1903 now actually return the host and peer instead of None. (#8893) 1904 1905 1906Twisted Words 16.6.0 (2016-11-17) 1907================================= 1908 1909Features 1910-------- 1911 - twisted.words.protocols.irc has been ported to Python 3 (#6320) 1912 1913 1914Twisted Core 16.5.0 (2016-10-28) 1915================================ 1916 1917Features 1918-------- 1919 - Added twisted.internet.defer.Deferred.addTimeout method to enable 1920 timeouts of deferreds. (#5786) 1921 - Perspective Broker (the twisted.spread package) has been ported to 1922 Python 3 (#7598) 1923 - 'yield from' can now be used on Deferreds inside generators, when 1924 the generator is wrapped with 1925 twisted.internet.defer.ensureDeferred. (#8087) 1926 - twisted.internet.asyncioreactor has been added, which is a Twisted 1927 reactor on top of Python 3.4+'s native asyncio reactor. It can be 1928 selected by passing "--reactor=asyncio" to Twisted tools (twistd, 1929 Trial, etc) on platforms that support it (Python 3.4+). (#8367) 1930 - twisted.python.zippath now works on Windows with Python 3. (#8747) 1931 - twisted.internet.cfreactor is ported to Python 3 and supported on 1932 2.7 and 3.5+. (#8838) 1933 1934Bugfixes 1935-------- 1936 - twisted.internet.test.test_iocp and twisted.internet.test.test_tcp 1937 have been fixed to work under Python 3 with the Windows IOCP 1938 reactor (#8631) 1939 - Arguments to processes on Windows are now passed mbcs-encoded 1940 arguments. This prevents process-related tests from hanging on 1941 Windows with Python 3. (#8735) 1942 - Client and server TLS connections made via the client TLS endpoint 1943 and the server SSL endpoint, as well as any other code that uses 1944 twisted.internet.ssl.CertificateOptions, no longer accept 3DES- 1945 based cipher suites by default, to defend against SWEET32. (#8781) 1946 - twisted.logger.jsonFileLogObserver no longer emits non-JSON 1947 tracebacks into its file; additionally, 1948 twisted.logger.formatEventAsClassicLogText now includes traceback 1949 information for the log event it formats. (#8858) 1950 - twisted.python.version now exports a version of Incremental that is 1951 16.10.1 or higher, making t.p.v.Version package name comparisons 1952 case-insensitive. (#8863) 1953 - twisted.python.reflect.safe_str encodes unicode as ascii with 1954 backslashreplace error handling on Python 2. (#8864) 1955 1956Improved Documentation 1957---------------------- 1958 - The twisted.internet.interfaces.IProtocol.dataReceived() method 1959 takes one parameter of type bytes. This has been clarified in the 1960 doc string. (#8763) 1961 1962Deprecations and Removals 1963------------------------- 1964 - twisted.python.constants is deprecated in preference to constantly 1965 on PyPI, which is the same code rolled into its own package. 1966 (#7351) 1967 - twisted.python.dist3 has been made private API. (#8761) 1968 - When the source code is checked out, bin/trial is no longer in the 1969 tree. Developers working on the Twisted source code itself should 1970 either (1) run all tests under tox, or (2) run 'python setup.py 1971 develop' to install trial before running any tests. (#8765) 1972 - twisted.protocols.gps, deprecated since Twisted 15.2, has been 1973 removed. (#8787) 1974 1975Other 1976----- 1977 - #4926, #7868, #8209, #8214, #8271, #8308, #8324, #8348, #8367, 1978 #8377, #8378, #8379, #8380, #8381, #8383, #8385, #8387, #8388, 1979 #8389, #8391, #8392, #8393, #8394, #8397, #8406, #8410, #8412, 1980 #8413, #8414, #8421, #8425, #8426, #8430, #8432, #8434, #8435, 1981 #8437, #8438, #8439, #8444, #8451, #8452, #8453, #8454, #8456, 1982 #8457, #8459, #8462, #8463, #8465, #8468, #8469, #8479, #8482, 1983 #8483, #8486, #8490, #8493, #8494, #8496, #8497, #8498, #8499, 1984 #8501, #8503, #8504, #8507, #8508, #8510, #8513, #8514, #8515, 1985 #8516, #8517, #8520, #8521, #8522, #8523, #8524, #8527, #8528, 1986 #8529, #8531, #8532, #8534, #8536, #8537, #8538, #8543, #8544, 1987 #8548, #8552, #8553, #8554, #8555, #8557, #8560, #8563, #8565, 1988 #8568, #8569, #8572, #8573, #8574, #8580, #8581, #8582, #8586, 1989 #8589, #8590, #8592, #8593, #8598, #8603, #8604, #8606, #8609, 1990 #8615, #8616, #8617, #8618, #8619, #8621, #8622, #8624, #8627, 1991 #8628, #8630, #8632, #8634, #8640, #8644, #8645, #8646, #8647, 1992 #8662, #8664, #8666, #8668, #8671, #8672, #8677, #8678, #8684, 1993 #8691, #8702, #8705, #8706, #8716, #8719, #8724, #8725, #8727, 1994 #8734, #8741, #8749, #8752, #8754, #8755, #8756, #8757, #8758, 1995 #8767, #8773, #8776, #8779, #8780, #8785, #8788, #8789, #8790, 1996 #8792, #8793, #8799, #8808, #8817, #8839, #8845, #8852 1997 1998 1999Twisted Conch 16.5.0 (2016-10-28) 2000================================= 2001 2002Features 2003-------- 2004 - SSH key fingerprints can be generated using base64 encoded SHA256 2005 hashes. (#8701) 2006 2007Bugfixes 2008-------- 2009 - SSHUserAuthServer does not crash on keyboard interactive 2010 authentication when running on Python 3 (#8771) 2011 - twisted.conch.insults.insults.ServerProtocol no longer corrupts a 2012 client's display when attempting to set the cursor position, and 2013 its ECMA-48 terminal manipulation works on Python 3. (#8803) 2014 2015Other 2016----- 2017 - #8495, #8511, #8715, #8851 2018 2019 2020Twisted Mail 16.5.0 (2016-10-28) 2021================================ 2022 2023Deprecations and Removals 2024------------------------- 2025 - twisted.mail.protocols.DomainSMTP and DomainESMTP, deprecated since 2026 2003, have been removed. (#8772) 2027 2028Other 2029----- 2030 - #6289, #8525, #8786, #8830 2031 2032 2033Twisted Names 16.5.0 (2016-10-28) 2034================================= 2035 2036No significant changes have been made for this release. 2037 2038Other 2039----- 2040 - #8625, #8663 2041 2042 2043Twisted News 16.5.0 (2016-10-28) 2044================================ 2045 2046No significant changes have been made for this release. 2047 2048 2049Twisted Pair 16.5.0 (2016-10-28) 2050================================ 2051 2052Features 2053-------- 2054 - twisted.pair has been ported to Python 3 (#8744) 2055 2056 2057Twisted Runner 16.5.0 (2016-10-28) 2058================================== 2059 2060No significant changes have been made for this release. 2061 2062 2063Twisted Web 16.5.0 (2016-10-28) 2064=============================== 2065 2066Bugfixes 2067-------- 2068 - twisted.web.client.HTTPConnectionPool and anything that uses it, 2069 like twisted.web.client.Agent, have had their logic for resuming 2070 transports changed so that transports are resumed after state 2071 machine transitions are complete, rather than before. This change 2072 allows the HTTP client infrastructure to work with alternative HTTP 2073 implementations such as HTTP/2 which may be able to deliver a 2074 complete response synchronously when producing is resumed. (#8720) 2075 2076Other 2077----- 2078 - #8519, #8530, #8629, #8707, #8777, #8778, #8844 2079 2080 2081Twisted Words 16.5.0 (2016-10-28) 2082================================= 2083 2084No significant changes have been made for this release. 2085 2086Other 2087----- 2088 - #8360, #8460 2089 2090 2091Twisted Core 16.4.1 (2016-09-07) 2092================================ 2093 2094Features 2095-------- 2096 - Client and server TLS connections made via the client TLS endpoint 2097 and the server SSL endpoint, as well as any other code that uses 2098 twisted.internet.ssl.CertificateOptions, now support ChaCha20 2099 ciphers when available from the OpenSSL on the system. (#8760) 2100 2101Bugfixes 2102-------- 2103 - Client and server TLS connections made via the client TLS endpoint 2104 and the server SSL endpoint, as well as any other code that uses 2105 twisted.internet.ssl.CertificateOptions, no longer accept 3DES- 2106 based cipher suites by default, to defend against SWEET32. (#8781) 2107 2108 2109Twisted Conch 16.4.1 (2016-09-07) 2110================================= 2111 2112No significant changes have been made for this release. 2113 2114 2115Twisted Mail 16.4.1 (2016-09-07) 2116================================ 2117 2118No significant changes have been made for this release. 2119 2120 2121Twisted Names 16.4.1 (2016-09-07) 2122================================= 2123 2124No significant changes have been made for this release. 2125 2126 2127Twisted News 16.4.1 (2016-09-07) 2128================================ 2129 2130No significant changes have been made for this release. 2131 2132 2133Twisted Pair 16.4.1 (2016-09-07) 2134================================ 2135 2136No significant changes have been made for this release. 2137 2138 2139Twisted Runner 16.4.1 (2016-09-07) 2140================================== 2141 2142No significant changes have been made for this release. 2143 2144 2145Twisted Web 16.4.1 (2016-09-07) 2146=============================== 2147 2148No significant changes have been made for this release. 2149 2150 2151Twisted Words 16.4.1 (2016-09-07) 2152================================= 2153 2154No significant changes have been made for this release. 2155 2156 2157Twisted Core 16.4.0 (2016-08-25) 2158================================ 2159 2160Features 2161-------- 2162 - Add twisted.application.twist, meant to eventually replace twistd 2163 with a simpler interface. Add twisted.application.runner API, 2164 currently private, which twist is built on. (#5705) 2165 - The new interface IHandshakeListener that can be implemented by any 2166 Protocol provides a callback that is called when the TLS handshake 2167 has been completed, allowing Protocols to make decisions about the 2168 TLS configuration before application data is sent. (#6024) 2169 - twisted.python.syslog has been ported to Python 3. (#7957) 2170 - twisted.internet.defer.ensureDeferred has been added, similar to 2171 asyncio's ensure_future. Wrapping a coroutine (the result of a 2172 function defined using async def, available only on Python 3.5+) 2173 with it allows you to use the "await" keyword with Deferreds inside 2174 the coroutine, similar to "yield" when using inlineCallbacks. 2175 (#8088) 2176 - twisted.internet.inotify have been ported to Python 3 (#8211) 2177 - twisted.enterprise has been ported to Python 3. The third-party 2178 pysqlite2 package has not been ported to Python 3, so any database 2179 connector based on pysqlite2 cannot be used. Instead the sqlite3 2180 module included with Python 3 should be used. (#8303) 2181 - Scripts such as cftp, ckeygen, conch, mailmail, pyhtmlizer, 2182 tkconch, twistd and trial have been updated to be setuptools 2183 console scripts. (#8491) 2184 - twisted.pair.raw and twisted.pair.rawudp have been ported to Python 2185 3 (#8545) 2186 - twisted.internet.baseprocess has been ported to Python 3. (#8546) 2187 - twisted.python.dist has been ported to Python 3 (#8556) 2188 - twisted.internet.interfaces.IOpenSSLContextFactory has been added, 2189 which defines the interface provided both by the old-style 2190 twisted.internet.ssl.ContextFactory class and the newer 2191 twisted.interface.ssl.CertificateOptions class. This is a precursor 2192 to formally deprecating the former class in favour of the latter. 2193 (#8597) 2194 - twisted.python.zipstream has been ported to Python 3 (#8607) 2195 - Zip file entries returned by ChunkingZipFile.readfile() are now 2196 context managers. (#8641) 2197 - twisted.protocols.socks has been ported to Python 3 (#8665) 2198 - twisted.spread.banana has been ported to Python 3 (#8667) 2199 - Trial can now be invoked via "python -m twisted.trial". (#8712) 2200 - twisted.protocols.postfix has been ported to Python 3 (#8713) 2201 - twisted.protocols.wire and twisted.protocols.portforwarding have 2202 been ported to Python 3 (#8717) 2203 - twisted.protocols.stateful has been ported to Python 3 (#8718) 2204 - twisted.protocols.memcache is now compatible with Python 3. (#8726) 2205 - twisted.protocols.dict has been ported to Python 3 (#8732) 2206 2207Bugfixes 2208-------- 2209 - pip install -e ".[dev]" now works on Python 3, but it will not 2210 install twistedchecker or pydoctor, which have not yet been ported. 2211 (#7807) 2212 - twistd can now properly daemonize on Linux/Unix when run under 2213 Python3 and will not hang indefinitely. (#8155) 2214 - tox can now be used to run Twisted's tests on Windows (#8578) 2215 - twisted.python.filepath.setContent() and 2216 twisted.python.filepath.moveTo() now work on Windows with Python 3 2217 (#8610) 2218 - twisted.internet.win32eventreactor works on Python 3 in Windows 2219 (#8626) 2220 - The TLS payload buffer size was reduced in 2221 twisted.protocols.tls.TLSMemoryBIOProtocol. This fixes writing of 2222 very long strings using the TLSv1_1 method from the OpenSSL 2223 library. (#8693) 2224 - twisted.logger._flatten.flattenEvent() now does not crash if passed 2225 a unicode string. (#8699) 2226 - twisted.application.strports.service (and thus twistd) no longer 2227 swallow asynchronous exceptions from IStreamServerEndpoint.listen. 2228 (#8710) 2229 - _twistd_unix now reports the name and encoded message of an 2230 exception raised during daemonization on Python 2 and 3. (#8731) 2231 - twisted.protocols.amp now handles floats on Python 3. Previously, 2232 sending a float would raise a ValueError. (#8746) 2233 2234Improved Documentation 2235---------------------- 2236 - Some broken links to xprogramming in the unit test documentation 2237 have been fixed. (#8579) 2238 - The Twisted Tutorial "The Evolution of Finger" has been updated to 2239 use endpoints throughout. (#8588) 2240 - Updated the mail examples to use endpoints and better TLS. (#8595) 2241 - Changed the Twisted Web howto to use endpoints and modern TLS. 2242 (#8596) 2243 - Updated bug report URL in man pages. (#8600) 2244 - In twisted.internet.udp.Port, write() takes a parameter of type 2245 bytes. This is clarified in the docstring. (#8635) 2246 - twisted.internet.interfaces.ITransport.write() and 2247 twisted.internet.interfaces.ITransport.writeSequence() take bytes 2248 parameters. (#8636) 2249 - twisted.python.filepath.AbstractFilePath.getContent() returns 2250 bytes. The docstring was updated to clarify this. (#8637) 2251 - Updated release notes to reflect that 15.4 is the last version that 2252 supported Python 2.6, not 15.5. (#8651) 2253 - A missing space in defer.rst resulted in badly rendered output. The 2254 space was added. (#8723) 2255 2256Deprecations and Removals 2257------------------------- 2258 - Dropped support for pyOpenSSL versions less than 16.0.0. (#8441) 2259 2260Other 2261----- 2262 - #4926, #7868, #8209, #8271, #8276, #8308, #8324, #8348, #8367, 2263 #8377, #8378, #8379, #8380, #8381, #8383, #8385, #8386, #8387, 2264 #8388, #8389, #8391, #8392, #8393, #8394, #8397, #8406, #8410, 2265 #8412, #8413, #8414, #8421, #8425, #8426, #8428, #8429, #8430, 2266 #8432, #8434, #8435, #8437, #8438, #8439, #8444, #8451, #8452, 2267 #8453, #8454, #8456, #8457, #8459, #8462, #8463, #8465, #8468, 2268 #8469, #8479, #8482, #8483, #8486, #8490, #8493, #8494, #8496, 2269 #8497, #8498, #8499, #8501, #8503, #8504, #8507, #8508, #8510, 2270 #8513, #8514, #8515, #8516, #8517, #8520, #8521, #8522, #8523, 2271 #8524, #8527, #8528, #8529, #8531, #8532, #8534, #8536, #8537, 2272 #8538, #8540, #8541, #8543, #8548, #8552, #8553, #8554, #8555, 2273 #8557, #8560, #8563, #8565, #8568, #8569, #8572, #8573, #8574, 2274 #8577, #8580, #8581, #8582, #8584, #8586, #8589, #8590, #8592, 2275 #8593, #8598, #8603, #8604, #8606, #8609, #8615, #8616, #8617, 2276 #8618, #8619, #8621, #8624, #8627, #8628, #8630, #8632, #8634, 2277 #8640, #8644, #8645, #8646, #8647, #8648, #8662, #8664, #8666, 2278 #8668, #8671, #8672, #8684, #8691, #8702, #8703, #8705, #8706, 2279 #8716, #8719, #8724, #8725, #8727, #8733, #8734, #8741 2280 2281 2282Twisted Conch 16.4.0 (2016-08-25) 2283================================= 2284 2285Features 2286-------- 2287 - twisted.conch.ssh.address is now ported to Python 3. (#8495) 2288 - twisted.conch.ssh.transport is now ported to Python 3. (#8638) 2289 - twisted.conch.ssh.channel is now ported to Python 3. (#8649) 2290 - twisted.conch.ssh.userauth is now ported to Python 3. (#8654) 2291 - twisted.conch.ssh.connection is now ported to Python 3. (#8660) 2292 - twisted.conch.ssh.session is now ported to Python 3. (#8661) 2293 - twisted.conch.ssh.filetransfer is now ported to Python 3. (#8675) 2294 - twisted.conch.ssh.agent is now ported to Python 3. (#8686) 2295 - twisted.conch.ssh is now ported to Python 3. (#8690) 2296 - twisted.conch.openssh_compat.* is now ported to Python 3. (#8694) 2297 - twisted.conch.client.knownhosts is now ported to Python 3. (#8697) 2298 - twisted.conch.insults.insults has been ported to Python 3 (#8698) 2299 - twisted.conch.client.default is now ported to Python 3. (#8700) 2300 - twisted.conch.recvline has been ported to Python 3 (#8709) 2301 - twisted.conch.endpoints is now ported to Python 3. (#8722) 2302 2303Bugfixes 2304-------- 2305 - The SSHService is now a bytestring (#8653) 2306 - The name field in SShChannel is now a bytestring (#8683) 2307 2308Improved Documentation 2309---------------------- 2310 - Fixed syntax errors in cftp man page. (#8601) 2311 2312Other 2313----- 2314 - #8495, #8511, #8715 2315 2316 2317Twisted Mail 16.4.0 (2016-08-25) 2318================================ 2319 2320Deprecations and Removals 2321------------------------- 2322 - twisted.mail.mail.DomainWithDefaultDict.has_key is now deprecated 2323 in favor of the `in` keyword. (#8361) 2324 - twisted.mail.protocols.SSLContextFactory, deprecated since Twisted 2325 12.0, has been removed. (#8591) 2326 2327Other 2328----- 2329 - #8525 2330 2331 2332Twisted Names 16.4.0 (2016-08-25) 2333================================= 2334 2335Features 2336-------- 2337 - twisted.names.srvconnect is now ported to Python 3. (#8262) 2338 - twisted.names.resolve and twisted.names.tap have been ported to 2339 Python 3 (#8550) 2340 2341Other 2342----- 2343 - #8625, #8663 2344 2345 2346Twisted News 16.4.0 (2016-08-25) 2347================================ 2348 2349No significant changes have been made for this release. 2350 2351 2352Twisted Pair 16.4.0 (2016-08-25) 2353================================ 2354 2355No significant changes have been made for this release. 2356 2357 2358Twisted Runner 16.4.0 (2016-08-25) 2359================================== 2360 2361Features 2362-------- 2363 - twisted.runner has been ported to Python 3. (#8739) 2364 2365 2366Twisted Web 16.4.0 (2016-08-25) 2367=============================== 2368 2369Features 2370-------- 2371 - Twisted web HTTP/2 servers now time out HTTP/2 connections in the 2372 same manner as HTTP/1.1 connections. (#8480) 2373 2374Bugfixes 2375-------- 2376 - A bug in twisted.web.server.Site.makeSession which may lead to 2377 predictable session IDs was fixed. Session IDs are now generated 2378 securely using `os.urandom`. (#3460) 2379 - twisted.web.server.Request.getSession will now, for a request sent 2380 over HTTPS, set a "Secure" cookie, preventing the secure session 2381 from being sent over plain-text HTTP. (#3461) 2382 - If called multiple times, twisted.web.http.Request.setLastModified 2383 now correctly observes the greatest supplied value. (#3807) 2384 - The HTTP server now correctly times connections out. (broken in 2385 16.2) (#8481) 2386 - Twisted's HTTP/2 support no longer throws priority exceptions when 2387 WINDOW_UDPATE frames are received after a response has been 2388 completed. (#8558) 2389 - twisted.web.twcgi.CGIScript will now not pass the "Proxy" header to 2390 CGI scripts, as a mitigation to CVE-2016-1000111. (#8623) 2391 - Twisted Web's HTTP/2 server can now tolerate streams being reset by 2392 the client midway through a data upload without throwing 2393 exceptions. (#8682) 2394 - twisted.web.http.Request now swallows header writes on reset HTTP/2 2395 streams, rather than erroring out. (#8685) 2396 - twisted.web's HTTP/2 server now tolerates receiving WINDOW_UPDATE 2397 frames for streams for which it has no outstanding data to send. 2398 (#8695) 2399 - twisted.web.http.HTTPChannel now resumes producing on finished, 2400 non-persistent connections. This prevents HTTP/1 servers using TLS 2401 from leaking a CLOSE_WAIT socket per request. (#8766) 2402 2403Other 2404----- 2405 - #8519, #8530, #8629, #8707 2406 2407 2408Twisted Words 16.4.0 (2016-08-25) 2409================================= 2410 2411Features 2412-------- 2413 - twisted.words.xish is now ported to Python 3 (#8337) 2414 - twisted.words.protocols.jabber is now ported to Python 3 (#8423) 2415 - twisted.words.protocols.irc.ERR_TOOMANYMATCHES was introduced 2416 according to the RFC 2812 errata. (#8585) 2417 2418Bugfixes 2419-------- 2420 - twisted.words.protocols.irc.RPL_ADMINLOC was removed and replaced 2421 with twisted.words.protocols.irc.RPL_ADMINLOC1 and 2422 twisted.words.protocols.irc.RPL_ADMINLOC2 to match the admin 2423 commands defined in RFC 2812. (#8585) 2424 - twisted.words.protocols.jabber.sasl_mechanisms has been fixed for 2425 Python 3.3 (#8738) 2426 2427Improved Documentation 2428---------------------- 2429 - The XMPP client example now works on Python 3. (#8509) 2430 2431Other 2432----- 2433 - #8360, #8460 2434 2435 2436Twisted Core 16.3.0 (2016-07-05) 2437================================ 2438 2439Features 2440-------- 2441 - Defined a new interface, IProtocolNegotiationFactory, that can be 2442 implemented by IOpenSSLClientConnectionCreator or 2443 IOpenSSLServerConnectionCreator factories to allow them to offer 2444 protocols for negotiation using ALPN or NPN during the TLS 2445 handshake. (#8188) 2446 - twisted.trial.unittest.SynchronousTestCase.assertRegex is now 2447 available to provide Python 2.7 and Python 3 compatibility. (#8372) 2448 2449Improved Documentation 2450---------------------- 2451 - Development documentation has been updated to refer to Git instead 2452 of SVN. (#8335) 2453 2454Deprecations and Removals 2455------------------------- 2456 - twisted.python.reflect's deprecated functions have been removed. 2457 This includes funcinfo (deprecated since Twisted 2.5), allYourBase 2458 and accumulateBases (deprecated since Twisted 11.0), getcurrent and 2459 isinst (deprecated since Twisted 14.0). (#8293) 2460 - twisted.scripts.tap2deb and twisted.scripts.tap2rpm (along with the 2461 associated executables), deprecated since Twisted 15.2, have now 2462 been removed. (#8326) 2463 - twisted.spread.ui has been removed. (#8329) 2464 - twisted.manhole -- not to be confused with manhole in Conch -- has 2465 been removed. This includes the semi-functional Glade reactor, the 2466 manhole application, and the manhole-old twistd plugin. (#8330) 2467 - twisted.protocols.sip.DigestAuthorizer, BasicAuthorizer, and 2468 related functions have been removed. (#8445) 2469 2470Other 2471----- 2472 - #7229, #7826, #8290, #8323, #8331, #8336, #8341, #8344, #8345, 2473 #8347, #8351, #8363, #8365, #8366, #8374, #8382, #8384, #8390, 2474 #8395, #8396, #8398, #8399, #8400, #8401, #8403, #8404, #8405, 2475 #8407, #8408, #8409, #8415, #8416, #8417, #8418, #8419, #8420, 2476 #8427, #8433, #8436, #8461 2477 2478 2479Twisted Conch 16.3.0 (2016-07-05) 2480================================= 2481 2482No significant changes have been made for this release. 2483 2484 2485Twisted Mail 16.3.0 (2016-07-05) 2486================================ 2487 2488No significant changes have been made for this release. 2489 2490 2491Twisted Names 16.3.0 (2016-07-05) 2492================================= 2493 2494Bugfixes 2495-------- 2496 - twisted.names.client.Resolver as well as all resolvers inheriting 2497 from twisted.names.common.ResolverBase can now understand DNS 2498 answers that come back in a different case than the query. Example: 2499 querying for www.google.com and the answer comes back with an A 2500 record for www.google.COM will now work. (#8343) 2501 2502 2503Twisted News 16.3.0 (2016-07-05) 2504================================ 2505 2506No significant changes have been made for this release. 2507 2508 2509Twisted Pair 16.3.0 (2016-07-05) 2510================================ 2511 2512No significant changes have been made for this release. 2513 2514 2515Twisted Runner 16.3.0 (2016-07-05) 2516================================== 2517 2518No significant changes have been made for this release. 2519 2520 2521Twisted Web 16.3.0 (2016-07-05) 2522=============================== 2523 2524Features 2525-------- 2526 - twisted.web.http.HTTPChannel now implements ITransport. Along with 2527 this change, twisted.web.http.Request now directs all its writes to 2528 the HTTPChannel, rather than to the backing transport. This change 2529 is required for future HTTP/2 work. (#8191) 2530 - twisted.web.http.HTTPChannel now has a HTTP/2 implementation which 2531 will be used if the transport has negotiated using it through 2532 ALPN/NPN (see #8188). (#8194) 2533 2534Bugfixes 2535-------- 2536 - twisted.web.client.Agent and twisted.web.client.ProxyAgent now add 2537 brackets to IPv6 literal addresses in the host header they send. 2538 (#8369) 2539 - The HTTP server now correctly times connections out. (broken in 2540 16.2) (#8481) 2541 2542Deprecations and Removals 2543------------------------- 2544 - twisted.web would previously dispatch pipelined requests 2545 simultaneously and queue the responses. This behaviour did not 2546 enforce any of the guarantees required by RFC 7230 or make it 2547 possible for users to enforce those requirements. For this reason, 2548 the parallel dispatch of requests has been removed. Pipelined 2549 requests are now processed serially. (#8320) 2550 2551 2552Twisted Words 16.3.0 (2016-07-05) 2553================================= 2554 2555No significant changes have been made for this release. 2556 2557 2558Twisted Core 16.2.0 (2016-05-18) 2559================================ 2560 2561Features 2562-------- 2563 - twisted.protocols.haproxy.proxyEndpoint provides an endpoint that 2564 wraps any other stream server endpoint with the PROXY protocol that 2565 retains information about the original client connection handled by 2566 the proxy; this wrapper is also exposed via the string description 2567 prefix 'haproxy'; for example 'twistd web --port haproxy:tcp:8765'. 2568 (#8203) 2569 - twisted.application.app.AppLogger (used by twistd) now uses the new 2570 logging system. (#8235) 2571 2572Bugfixes 2573-------- 2574 - twisted.application-using applications (trial, twistd, etc) now 2575 work with the --reactor option on Python 3. (#8299) 2576 - Failures are now logged by STDLibLogObserver. (#8316) 2577 2578Improved Documentation 2579---------------------- 2580 - Deprecation documentation was extended to include a quick check 2581 list for developers. (#5645) 2582 - The Twisted Deprecation Policy is now documented in the Twisted 2583 Development Policy. (#8082) 2584 - The documentation examples for UDP now work on Python 3. (#8280) 2585 2586Deprecations and Removals 2587------------------------- 2588 - Passing a factory that produces log observers that do not implement 2589 twisted.logger.ILogObserver or twisted.python.log.ILogObserver to 2590 twisted.application.app.AppLogger has been deprecated. This is 2591 primarily used by twistd's --logger option. Please use factories 2592 that produce log observers implementing twisted.logger.ILogObserver 2593 or the legacy twisted.python.log.ILogObserver. (#8235) 2594 - twisted.internet.qtreactor, a stub that imported the external 2595 qtreactor, has been removed. (#8288) 2596 2597Other 2598----- 2599 - #6266, #8231, #8244, #8256, #8266, #8269, #8275, #8277, #8286, 2600 #8291, #8292, #8304, #8315 2601 2602 2603Twisted Conch 16.2.0 (2016-05-18) 2604================================= 2605 2606No significant changes have been made for this release. 2607 2608Other 2609----- 2610 - #8279 2611 2612 2613Twisted Mail 16.2.0 (2016-05-18) 2614================================ 2615 2616No significant changes have been made for this release. 2617 2618 2619Twisted Names 16.2.0 (2016-05-18) 2620================================= 2621 2622Features 2623-------- 2624 - twisted.names.server is now ported to Python 3 (#8195) 2625 - twisted.names.authority and twisted.names.secondary have been 2626 ported to Python 3 (#8259) 2627 2628 2629Twisted News 16.2.0 (2016-05-18) 2630================================ 2631 2632No significant changes have been made for this release. 2633 2634 2635Twisted Pair 16.2.0 (2016-05-18) 2636================================ 2637 2638No significant changes have been made for this release. 2639 2640 2641Twisted Runner 16.2.0 (2016-05-18) 2642================================== 2643 2644Deprecations and Removals 2645------------------------- 2646 - twisted.runner.inetdtap and twisted.runner.inetdconf RPC support 2647 was deprecated as it was broken for a long time. (#8123) 2648 2649 2650Twisted Web 16.2.0 (2016-05-18) 2651=============================== 2652 2653Features 2654-------- 2655 - twisted.web.http.HTTPFactory's constructor now accepts a reactor 2656 argument, for explicit reactor selection. (#8246) 2657 2658Bugfixes 2659-------- 2660 - twisted.web.http.HTTPChannel.headerReceived now respond with 400 2661 and disconnect when a malformed header is received. (#8101) 2662 - twisted.web.http.Request once again has a reference to the 2663 HTTPFactory which created it, the absence of which was preventing 2664 log messages from being created. (#8272) 2665 - twisted.web.http.HTTPChannel no longer processes requests that have 2666 invalid headers as the final header in their header block. (#8317) 2667 - twisted.web.client.HTTPClientFactory (and the getPage and 2668 downloadPage APIs) now timeouts correctly on TLS connections where 2669 the remote party is not responding on the connection. (#8318) 2670 2671Other 2672----- 2673 - #8300 2674 2675 2676Twisted Words 16.2.0 (2016-05-18) 2677================================= 2678 2679Deprecations and Removals 2680------------------------- 2681 - twisted.words.protocols.msn, deprecated since Twisted 15.1, has 2682 been removed. (#8253) 2683 - twisted.words.protocols.oscar is deprecated. (#8260) 2684 2685 2686Twisted Core 16.1.1 (2016-04-08) 2687================================ 2688 2689No significant changes have been made for this release. 2690 2691 2692Twisted Conch 16.1.1 (2016-04-08) 2693================================= 2694 2695No significant changes have been made for this release. 2696 2697 2698Twisted Mail 16.1.1 (2016-04-08) 2699================================ 2700 2701No significant changes have been made for this release. 2702 2703 2704Twisted Names 16.1.1 (2016-04-08) 2705================================= 2706 2707No significant changes have been made for this release. 2708 2709 2710Twisted News 16.1.1 (2016-04-08) 2711================================ 2712 2713No significant changes have been made for this release. 2714 2715 2716Twisted Pair 16.1.1 (2016-04-08) 2717================================ 2718 2719No significant changes have been made for this release. 2720 2721 2722Twisted Runner 16.1.1 (2016-04-08) 2723================================== 2724 2725No significant changes have been made for this release. 2726 2727 2728Twisted Web 16.1.1 (2016-04-08) 2729=============================== 2730 2731Bugfixes 2732-------- 2733 - twisted.web.http.Request once again has a reference to the 2734 HTTPFactory which created it, the absence of which was preventing 2735 log messages from being created. (#8272) 2736 2737 2738Twisted Words 16.1.1 (2016-04-08) 2739================================= 2740 2741No significant changes have been made for this release. 2742 2743 2744Twisted Core 16.1.0 (2016-04-04) 2745================================ 2746 2747Features 2748-------- 2749 - twisted.application.internet.ClientService, a service that 2750 maintains a persistent outgoing endpoint-based connection; a 2751 replacement for ReconnectingClientFactory that uses modern APIs. 2752 (#4735) 2753 - Twisted now uses setuptools' sdist to build tarballs. (#7985) 2754 2755Bugfixes 2756-------- 2757 - Twisted is now compatible with OpenSSL 1.0.2f. (#8189) 2758 2759Other 2760----- 2761 - #4543, #8124, #8193, #8210, #8220, #8223, #8226, #8242 2762 2763 2764Twisted Conch 16.1.0 (2016-04-04) 2765================================= 2766 2767Features 2768-------- 2769 - twisted.conch.checkers is now ported to Python 3. (#8225) 2770 - twisted.conch.telnet is now ported to Python 3. (#8228) 2771 - twisted.conch.manhole_ssh.ConchFactory (used by `twistd manhole`) 2772 no longer uses a hardcoded SSH server key, and will generate a 2773 persistent one, saving it in your user appdir. If you use 2774 ConchFactory, you will now need to provide your own SSH server key. 2775 (#8229) 2776 2777Other 2778----- 2779 - #8237, #8240 2780 2781 2782Twisted Mail 16.1.0 (2016-04-04) 2783================================ 2784 2785No significant changes have been made for this release. 2786 2787 2788Twisted Names 16.1.0 (2016-04-04) 2789================================= 2790 2791No significant changes have been made for this release. 2792 2793 2794Twisted News 16.1.0 (2016-04-04) 2795================================ 2796 2797No significant changes have been made for this release. 2798 2799 2800Twisted Pair 16.1.0 (2016-04-04) 2801================================ 2802 2803No significant changes have been made for this release. 2804 2805 2806Twisted Runner 16.1.0 (2016-04-04) 2807================================== 2808 2809No significant changes have been made for this release. 2810 2811 2812Twisted Web 16.1.0 (2016-04-04) 2813=============================== 2814 2815Features 2816-------- 2817 - twisted.web.http.Request.addCookie now supports both unicode and 2818 bytes arguments, with unicode arguments being encoded to UTF-8. 2819 (#8067) 2820 2821Bugfixes 2822-------- 2823 - twisted.web.util.DeferredResource no longer causes spurious 2824 "Unhandled error in Deferred" log messages. (#8192) 2825 - twisted.web.server.site.makeSession now generates an uid of type 2826 bytes on both Python 2 and 3. (#8215) 2827 2828Other 2829----- 2830 - #8238 2831 2832 2833Twisted Words 16.1.0 (2016-04-04) 2834================================= 2835 2836No significant changes have been made for this release. 2837 2838 2839Twisted Core 16.0.0 (2016-03-10) 2840================================ 2841 2842Features 2843-------- 2844 - todo parameter for IReporter.addExpectedSuccess and 2845 IReporter.addUnexpectedSuccess is no longer required. If not 2846 provided, a sensible default will be used instead. (#4811) 2847 - A new string endpoint type, "tls:", allows for properly-verified 2848 TLS (unlike "ssl:", always matching hostname resolution with 2849 certificate hostname verification) with faster IPv4/IPv6 2850 connections. This comes with an accompanying function, 2851 twisted.internet.endpoints.wrapClientTLS, which can wrap an 2852 arbitrary client endpoint with client TLS. (#5642) 2853 - twisted.python.filepath.makedirs accepts an ignoreExistingDirectory 2854 flag which ignore the OSError raised by os.makedirs if requested 2855 directory already exists. (#5704) 2856 - twisted.protocols.amp has been ported to Python 3. (#6833) 2857 - twisted.internet.ssl.trustRootFromCertificates returns an object 2858 suitable for use as trustRoot= to 2859 twisted.internet.ssl.optionsForClientTLS that trusts multiple 2860 certificates. (#7671) 2861 - twisted.python.roots is now ported to Python 3. (#8131) 2862 - twisted.cred.strports has been ported to Python 3. (#8216) 2863 2864Bugfixes 2865-------- 2866 - Expected failures from standard library unittest no longer fail 2867 with Trial reporters. (#4811) 2868 - twisted.internet.endpoints.HostnameEndpoint.connect no longer fails 2869 with an AlreadyCalledError when the Deferred it returns is 2870 cancelled after all outgoing connection attempts have been made but 2871 none have yet succeeded or failed. (#8014) 2872 - twisted.internet.task.LoopingCall.withCount when run with internal 2873 of 0, now calls the countCallable with 1, regardless of the time 2874 passed between calls. (#8125) 2875 - twisted.internet.endpoints.serverFromString, when parsing a SSL 2876 strports definition, now gives the correct error message when an 2877 empty chain file is given. (#8222) 2878 2879Improved Documentation 2880---------------------- 2881 - The Twisted Project has adopted the Contributor Covenant as its 2882 Code of Conduct. (#8173) 2883 2884Deprecations and Removals 2885------------------------- 2886 - twisted.internet.task.LoopingCall.deferred is now deprecated. Use 2887 the deferred returned by twisted.internet.task.LoopingCall.start() 2888 (#8116) 2889 - twisted.internet.gtkreactor, the GTK+ 1 reactor deprecated since 2890 Twisted 10.1, has been removed. This does not affect the GTK2, 2891 GLib, GTK3, or GObject-Introspection reactors. (#8145) 2892 - twisted.protocols.mice, containing a Logitech MouseMan serial 2893 driver, has been deprecated. (#8148) 2894 - The __version__ attribute of former subprojects (conch, mail, 2895 names, news, pair, runner, web, and words) is deprecated in 2896 preference to the central twisted.__version__. (#8219) 2897 2898Other 2899----- 2900 - #6842, #6978, #7668, #7791, #7881, #7943, #7944, #8050, #8104, 2901 #8115, #8119, #8122, #8139, #8144, #8154, #8162, #8180, #8187, 2902 #8220 2903 2904 2905Twisted Conch 16.0.0 (2016-03-10) 2906================================= 2907 2908Features 2909-------- 2910 - twisted.conch now uses cryptography instead of PyCrypto for its 2911 underlying crypto operations. (#7413) 2912 - twisted.conch.ssh.keys is now ported to Python 3. (#7998) 2913 2914Bugfixes 2915-------- 2916 - twisted.conch.ssh.channel.SSHChannel's getPeer and getHost methods 2917 now return an object which provides IAddress instead of an old- 2918 style tuple address. (#5999) 2919 - twisted.conch.endpoint.SSHCommandClientEndpoint, when 2920 authentication is delegated to an SSH agent, no longer leaves the 2921 agent connection opened when connection to the server is lost. 2922 (#8138) 2923 2924Other 2925----- 2926 - #7037, #7715, #8200, #8208 2927 2928 2929Twisted Mail 16.0.0 (2016-03-10) 2930================================ 2931 2932No significant changes have been made for this release. 2933 2934 2935Twisted Names 16.0.0 (2016-03-10) 2936================================= 2937 2938No significant changes have been made for this release. 2939 2940 2941Twisted News 16.0.0 (2016-03-10) 2942================================ 2943 2944No significant changes have been made for this release. 2945 2946 2947Twisted Pair 16.0.0 (2016-03-10) 2948================================ 2949 2950No significant changes have been made for this release. 2951 2952 2953Twisted Runner 16.0.0 (2016-03-10) 2954================================== 2955 2956No significant changes have been made for this release. 2957 2958 2959Twisted Web 16.0.0 (2016-03-10) 2960=============================== 2961 2962Features 2963-------- 2964 - twisted.web.http_headers._DictHeaders now correctly handles 2965 updating via keyword arguments in Python 3 (therefore 2966 twisted.web.http_headers is now fully ported to Python 3). (#6082) 2967 - twisted.web.wsgi has been ported to Python 3. (#7993) 2968 - twisted.web.http_headers.Headers now accepts both Unicode and 2969 bytestring keys and values, encoding to iso-8859-1 and utf8 2970 respectively. (#8129) 2971 - twisted.web.vhost ported to Python 3. (#8132) 2972 2973Bugfixes 2974-------- 2975 - twisted.web.http.HTTPChannel now correctly handles non-ascii method 2976 name by returning 400. Previously non-ascii method name was causing 2977 unhandled exceptions. (#8102) 2978 - twisted.web.static.File on Python 3 now redirects paths to 2979 directories without a trailing slash, to a path with a trailing 2980 slash, as on Python 2. (#8169) 2981 2982Deprecations and Removals 2983------------------------- 2984 - twisted.web.http.Request's headers and received_headers attributes, 2985 deprecated since Twisted 13.2, have been removed. (#8136) 2986 - twisted.web.static.addSlash is deprecated. (#8169) 2987 2988Other 2989----- 2990 - #8140, #8182 2991 2992 2993Twisted Words 16.0.0 (2016-03-10) 2994================================= 2995 2996No significant changes have been made for this release. 2997 2998 2999Twisted Core 15.5.0 (2015-11-28) 3000================================ 3001 3002Python 3.5 (on POSIX) support has been added. 3003 3004This release introduces changes that are required for Conch's SSH 3005implementation to work with OpenSSH 6.9+ servers. 3006 3007Features 3008-------- 3009 - twisted.python.url is a new abstraction for URLs, supporting RFC 3010 3987 IRIs. (#5388) 3011 - twisted.python.logfile is now ported to Python 3. (#6749) 3012 - twisted.python.zippath has been ported to Python 3. (#6917) 3013 - twisted.internet.ssl.CertificateOptions and 3014 twisted.internet.ssl.optionsForClientTLS now take a 3015 acceptableProtocols parameter that enables negotiation of the next 3016 protocol to speak after the TLS handshake has completed. This field 3017 advertises protocols over both NPN and ALPN. Also added new 3018 INegotiated interface for TLS interfaces that support protocol 3019 negotiation. This interface adds a negotiatedProtocol property that 3020 reports what protocol, if any, was negotiated in the TLS handshake. 3021 (#7860) 3022 - twisted.python.urlpath.URLPath now operates correctly on Python 3, 3023 using bytes instead of strings, and introduces the fromBytes 3024 constructor to assist with creating them cross-version. (#7994) 3025 - twisted.application.strports is now ported to Python 3. (#8011) 3026 - twistd (the Twisted Daemon) is now ported to Python 3. (#8012) 3027 - Python 3.5 is now supported on POSIX platforms. (#8042) 3028 - twisted.internet.serialport is now ported on Python 3. (#8099) 3029 3030Bugfixes 3031-------- 3032 - twisted.logger.formatEvent now can format an event if it was 3033 flattened (twisted.logger.eventAsJSON does this) and has text after 3034 the last replacement field. (#8003) 3035 - twisted.cred.checkers.FilePasswordDB now logs an error if the 3036 credentials db file does not exist, no longer raises an unhandled 3037 error. (#8028) 3038 - twisted.python.threadpool.ThreadPool now properly starts enough 3039 threads to do any work scheduled before ThreadPool.start() is 3040 called, such as when work is scheduled in the reactor via 3041 reactor.callInThread() before reactor.run(). (#8090) 3042 3043Improved Documentation 3044---------------------- 3045 - Twisted Development test standard documentation now contain 3046 information about avoiding test data files. (#6535) 3047 - The documentation for twisted.internet.defer.DeferredSemaphore now 3048 describes the actual usage for limit and tokens instance 3049 attributes. (#8024) 3050 3051Deprecations and Removals 3052------------------------- 3053 - twisted.python._initgroups, a C extension, has been removed and 3054 stdlib support is now always used instead. (#5861) 3055 - Python 2.6 is no longer supported. (#8017) 3056 - twisted.python.util.OrderedDict is now deprecated, and uses of it 3057 in Twisted are replaced with collections.OrderedDict. (#8051) 3058 - twisted.persisted.sob.load, twisted.persisted.sob.loadValueFromFile 3059 and twisted.persisted.sob.Persistent.save() are now deprecated when 3060 used with a passphrase. The encyption used by these methods are 3061 weak. (#8081) 3062 - twisted.internet.interfaces.IStreamClientEndpointStringParser has 3063 been removed and Twisted will no longer use parsers implementing 3064 this interface. (#8094) 3065 3066Other 3067----- 3068 - #5976, #6628, #6894, #6980, #7228, #7693, #7731, #7997, #8046, 3069 #8054, #8056, #8060, #8063, #8064, #8068, #8072, #8091, #8095, 3070 #8096, #8098, #8106 3071 3072 3073Twisted Conch 15.5.0 (2015-11-18) 3074================================= 3075 3076Features 3077-------- 3078 - twisted.conch.ssh now supports the diffie-hellman-group-exchange- 3079 sha256 key exchange algorithm. (#7672) 3080 - twisted.conch.ssh now supports the diffie-hellman-group14-sha1 key 3081 exchange algorithm. (#7717) 3082 - twisted.conch.ssh.transport.SSHClientTransport now supports Diffie- 3083 Hellman key exchange using MSG_KEX_DH_GEX_REQUEST as described in 3084 RFC 4419. (#8100) 3085 - twisted.conch.ssh now supports the hmac-sha2-256 and hmac-sha2-512 3086 MAC algorithms. (#8108) 3087 3088Deprecations and Removals 3089------------------------- 3090 - twisted.conch.ssh.keys.objectType is now deprecated. Use 3091 twisted.conch.ssh.keys.Key.sshType. (#8080) 3092 - twisted.conch.ssh.transport.SSHClientTransport no longer supports 3093 Diffie-Hellman key exchange using MSG_KEX_DH_GEX_REQUEST_OLD for 3094 pre RFC 4419 servers. (#8100) 3095 3096 3097Twisted Mail 15.5.0 (2015-11-18) 3098================================ 3099 3100No significant changes have been made for this release. 3101 3102 3103Twisted Names 15.5.0 (2015-11-18) 3104================================= 3105 3106No significant changes have been made for this release. 3107 3108 3109Twisted News 15.5.0 (2015-11-18) 3110================================ 3111 3112No significant changes have been made for this release. 3113 3114 3115Twisted Pair 15.5.0 (2015-11-18) 3116================================ 3117 3118No significant changes have been made for this release. 3119 3120 3121Twisted Runner 15.5.0 (2015-11-18) 3122================================== 3123 3124No significant changes have been made for this release. 3125 3126 3127Twisted Web 15.5.0 (2015-11-18) 3128================================ 3129 3130Features 3131-------- 3132 - twisted.web.http.Request.addCookie now supports the httpOnly 3133 attribute which when set on cookies prevents the browser exposing 3134 it through channels other than HTTP and HTTPS requests (i.e. they 3135 will not be accessible through JavaScript). (#5911) 3136 - twisted.web.client.downloadPage is now ported to Python 3. (#6197) 3137 - twisted.web.client.Agent is now ported to Python 3. (#7407) 3138 - twisted.web.tap (ran when calling `twistd web`) has now been ported 3139 to Python 3. Not all features are enabled -- CGI, WSGI, and 3140 distributed web serving will be enabled in their respective tickets 3141 as they are ported. (#8008) 3142 3143Bugfixes 3144-------- 3145 - twisted.web.client.URI now supports IPv6 addresses. Previously this 3146 would mistake the colons used as IPv6 address group separators as 3147 the start of a port specification. (#7650) 3148 - twisted.web.util's failure template has been moved inline to work 3149 around Python 3 distribution issues. (#8047) 3150 - twisted.web.http.Request on Python 3 now handles multipart/form- 3151 data requests correctly. (#8052) 3152 3153Other 3154----- 3155 - #8016, #8070 3156 3157 3158Twisted Words 15.5.0 (2015-11-18) 3159================================= 3160 3161Features 3162-------- 3163 - twisted.words.protocol.irc.IRC now has a sendCommand() method which 3164 can send messages with tags. (#6667) 3165 3166Other 3167----- 3168 - #8015, #8097 3169 3170 3171Twisted Core 15.4.0 (2015-09-04) 3172================================ 3173 3174This is the last Twisted release where Python 2.6 is supported, on any 3175platform. 3176 3177Features 3178-------- 3179 - Trial has been ported to Python 3. (#5965) 3180 - Twisted now requires setuptools for installation. (#7177) 3181 - twisted.internet.endpoints.clientFromString is now ported to Python 3182 3. (#7973) 3183 - twisted.internet._sslverify now uses SHA256 instead of MD5 for 3184 certificate request signing by default. (#7979) 3185 - twisted.internet.endpoints.serverFromString is now ported to Python 3186 3. (#7982) 3187 - twisted.positioning is now ported to Python 3. (#7987) 3188 - twisted.python.failure.Failure's __repr__ now includes the 3189 exception message. (#8004) 3190 3191Bugfixes 3192-------- 3193 - fixed a bug which could lead to a hang at shutdown in 3194 twisted.python.threadpool. (#2673) 3195 - twisted.internet.kqreactor on Python 3 now supports EINTR 3196 (Control-C) gracefully. (#7887) 3197 - Fix a bug introduced in 15.3.0; pickling a lambda function after 3198 importing twisted.persisted.styles raises PicklingError rather than 3199 AttributeError. (#7989) 3200 3201Other 3202----- 3203 - #7902, #7980, #7990, #7992 3204 3205 3206Twisted Conch 15.4.0 (2015-09-04) 3207================================= 3208 3209No significant changes have been made for this release. 3210 3211Other 3212----- 3213 - #7977 3214 3215 3216Twisted Mail 15.4.0 (2015-09-04) 3217================================ 3218 3219No significant changes have been made for this release. 3220 3221 3222Twisted Names 15.4.0 (2015-09-04) 3223================================= 3224 3225No significant changes have been made for this release. 3226 3227 3228Twisted News 15.4.0 (2015-09-04) 3229================================ 3230 3231No significant changes have been made for this release. 3232 3233 3234Twisted Pair 15.4.0 (2015-09-04) 3235================================ 3236 3237No significant changes have been made for this release. 3238 3239 3240Twisted Runner 15.4.0 (2015-09-04) 3241================================== 3242 3243No significant changes have been made for this release. 3244 3245 3246Twisted Web 15.4.0 (2015-09-04) 3247=============================== 3248 3249Features 3250-------- 3251 - twisted.web.proxy is now ported to Python 3. (#7939) 3252 - twisted.web.guard is now ported to Python 3. (#7974) 3253 3254Bugfixes 3255-------- 3256 - twisted.web.http.Request.setResponseCode now only allows bytes 3257 messages. (#7981) 3258 - twisted.web.server.Request.processingFailed will now correctly 3259 write out the traceback on Python 3. (#7996) 3260 3261 3262Twisted Words 15.4.0 (2015-09-04) 3263================================= 3264 3265No significant changes have been made for this release. 3266 3267 3268Twisted Core 15.3.0 (2015-08-04) 3269================================ 3270 3271Features 3272-------- 3273 - twisted.application.app is now ported to Python 3 (#6914) 3274 - twisted.plugin now supports Python 3 (#7182) 3275 - twisted.cred.checkers is now ported to Python 3. (#7834) 3276 - twisted.internet.unix is now ported to Python 3. (#7874) 3277 - twisted.python.sendmsg has now been ported to Python 3, using the 3278 stdlib sendmsg/recvmsg functionality when available. (#7884) 3279 - twisted.internet.protocol.Factory now uses the new logging system 3280 (twisted.logger) for all its logging statements. (#7897) 3281 - twisted.internet.stdio is now ported to Python 3. (#7899) 3282 - The isDocker method has been introduced on 3283 twisted.python.runtime.Platform to detect if the running Python is 3284 inside a Docker container. Additionally, Platform.supportsINotify() 3285 now returns False if isDocker() is True, because of many Docker 3286 storage layers having broken INotify. (#7968) 3287 3288Bugfixes 3289-------- 3290 - twisted.logger.LogBeginner.beginLoggingTo now outputs the correct 3291 warning when it is called more than once. (#7916) 3292 3293Deprecations and Removals 3294------------------------- 3295 - twisted.cred.pamauth (providing PAM support) has been removed due 3296 to it being unusable in current supported Python versions. (#3728) 3297 - twisted.application.app.HotshotRunner (twistd's hotshot profiler 3298 module) is removed and twistd now uses cProfile by default. (#5137) 3299 - twisted.python.win32.getProgramsMenuPath and 3300 twisted.python.win32.getProgramFilesPath are now deprecated. 3301 (#7883) 3302 - twisted.lore has now been removed, in preference to Sphinx. (#7892) 3303 - Deprecated zsh tab-complete files are now removed in preference to 3304 twisted.python.usage's tab-complete functionality. (#7898) 3305 - twisted.python.hashlib, deprecated since 13.1, has now been 3306 removed. (#7905) 3307 - twisted.trial.runner.DryRunVisitor, deprecated in Twisted 13.0, has 3308 now been removed. (#7919) 3309 - twisted.trial.util.getPythonContainers, deprecated since Twisted 3310 12.3, is now removed. (#7920) 3311 - Twisted no longer supports being packaged as subprojects. (#7964) 3312 3313Other 3314----- 3315 - #6136, #7035, #7803, #7817, #7827, #7844, #7876, #7906, #7908, 3316 #7915, #7931, #7940, #7967, #7983 3317 3318 3319Twisted Conch 15.3.0 (2015-08-04) 3320================================= 3321 3322Bugfixes 3323-------- 3324 - The Conch Unix server now sets the HOME environment variable when 3325 executing commands. (#7936) 3326 3327Other 3328----- 3329 - #7937 3330 3331 3332Twisted Mail 15.3.0 (2015-08-04) 3333================================ 3334 3335No significant changes have been made for this release. 3336 3337 3338Twisted Names 15.3.0 (2015-08-04) 3339================================= 3340 3341No significant changes have been made for this release. 3342 3343 3344Twisted News 15.3.0 (2015-08-04) 3345================================ 3346 3347No significant changes have been made for this release. 3348 3349 3350Twisted Pair 15.3.0 (2015-08-04) 3351================================ 3352 3353No significant changes have been made for this release. 3354 3355 3356Twisted Runner 15.3.0 (2015-08-04) 3357================================== 3358 3359No significant changes have been made for this release. 3360 3361 3362Twisted Web 15.3.0 (2015-08-04) 3363=============================== 3364 3365Features 3366-------- 3367 - twisted.web.xmlrpc is now ported to Python 3. (#7795) 3368 - twisted.web.template and twisted.web.util are now ported to Python 3369 3. (#7811) 3370 - twisted.web.error is now ported to Python 3. (#7845) 3371 3372Deprecations and Removals 3373------------------------- 3374 - twisted.web.html is now deprecated in favor of 3375 twisted.web.template. (#4948) 3376 3377Other 3378----- 3379 - #7895, #7942, #7949, #7952, #7975 3380 3381 3382Twisted Words 15.3.0 (2015-08-04) 3383================================= 3384 3385No significant changes have been made for this release. 3386 3387 3388Twisted Core 15.2.1 (2015-05-23) 3389================================ 3390 3391Bugfixes 3392-------- 3393 - twisted.logger now marks the `isError` key correctly on legacy 3394 events generated by writes to stderr. (#7903) 3395 3396Improved Documentation 3397---------------------- 3398 - twisted.logger's documentation is now correctly listed in the table 3399 of contents. (#7904) 3400 3401 3402Twisted Conch 15.2.1 (2015-05-23) 3403================================= 3404 3405No significant changes have been made for this release. 3406 3407 3408Twisted Lore 15.2.1 (2015-05-23) 3409================================ 3410 3411No significant changes have been made for this release. 3412 3413 3414Twisted Mail 15.2.1 (2015-05-23) 3415================================ 3416 3417No significant changes have been made for this release. 3418 3419 3420Twisted Names 15.2.1 (2015-05-23) 3421================================= 3422 3423No significant changes have been made for this release. 3424 3425 3426Twisted News 15.2.1 (2015-05-23) 3427================================ 3428 3429No significant changes have been made for this release. 3430 3431 3432Twisted Pair 15.2.1 (2015-05-23) 3433================================ 3434 3435No significant changes have been made for this release. 3436 3437 3438Twisted Runner 15.2.1 (2015-05-23) 3439================================== 3440 3441No significant changes have been made for this release. 3442 3443 3444Twisted Web 15.2.1 (2015-05-23) 3445=============================== 3446 3447No significant changes have been made for this release. 3448 3449 3450Twisted Words 15.2.1 (2015-05-23) 3451================================= 3452 3453No significant changes have been made for this release. 3454 3455 3456Twisted Core 15.2.0 (2015-05-18) 3457================================ 3458 3459Features 3460-------- 3461 - twisted.internet.process has now been ported to Python 3. (#5987) 3462 - twisted.cred.credentials is now ported to Python 3. (#6176) 3463 - twisted.trial.unittest.TestCase's assertEqual, assertTrue, and 3464 assertFalse methods now pass through the standard library's more 3465 informative failure messages. (#6306) 3466 - The new package twisted.logger provides a new, fully tested, and 3467 feature-rich logging framework. The old module twisted.python.log 3468 is now implemented using the new framework. The new logger HOWTO 3469 documents the new framework. (#6750) 3470 - twisted.python.modules is now ported to Python 3. (#7804) 3471 - twisted.python.filepath.FilePath now supports Unicode (text) paths. 3472 Like the os module, instantiating it with a Unicode path will 3473 return a Unicode-mode FilePath, instantiating with a bytes path 3474 will return a bytes-mode FilePath. (#7805) 3475 - twisted.internet.kqreactor is now ported to Python 3 (#7823) 3476 - twisted.internet.endpoints.ProcessEndpoint is now ported to Python 3477 3. (#7824) 3478 - twisted.python.filepath.FilePath now has asBytesMode and asTextMode 3479 methods which return a FilePath in the requested mode. (#7830) 3480 - twisted.python.components.proxyForInterface now creates method 3481 proxies that can be used with functools.wraps. (#7832) 3482 - The tls optional dependency will now also install the idna package 3483 to validate idna2008 names. (#7853) 3484 3485Bugfixes 3486-------- 3487 - Don't raise an exception if `DefaultLogObserver.emit()` gets an 3488 event with a message that raises when `repr()` is called on it. 3489 Specifically: use `textFromEventDict()` instead of a separate (and 3490 inferior) message rendering implementation. (#6569) 3491 - twisted.cred.credentials.DigestedCredentials incorrectly handled 3492 md5-sess hashing according to the RFC, which has now been fixed. 3493 (#7835) 3494 - Fixed an issue with twisted.internet.task.LoopingCall.withCount 3495 where sometimes the passed callable would be invoked with "0" when 3496 we got close to tricky floating point boundary conditions. (#7836) 3497 - twisted.internet.defer now properly works with the new logging 3498 system. (#7851) 3499 - Change `messages` key to `log_io` for events generated by 3500 `LoggingFile`. (#7852) 3501 - twisted.logger had literal characters in docstrings that are now 3502 quoted. (#7854) 3503 - twisted.logger now correctly formats a log event with a key named 3504 `message` when passed to a legacy log observer. (#7855) 3505 - twisted.internet.endpoints.HostnameEndpoint now uses getaddrinfo 3506 properly on Python 3.4 and above. (#7886) 3507 3508Improved Documentation 3509---------------------- 3510 - Fix a typo in narrative documentation for logger (#7875) 3511 3512Deprecations and Removals 3513------------------------- 3514 - tkunzip and tapconvert in twisted.scripts were deprecated in 11.0 3515 and 12.1 respectively, and are now removed. (#6747) 3516 - twisted.protocols.gps is deprecated in preference to 3517 twisted.positioning. (#6810) 3518 - twisted.scripts.tap2deb and twisted.scripts.tap2rpm are now 3519 deprecated. (#7682) 3520 - twisted.trial.reporter.TestResult and 3521 twisted.trial.reporter.Reporter contained deprecated methods (since 3522 8.0) which have now been removed. (#7815) 3523 3524Other 3525----- 3526 - #6027, #7287, #7701, #7727, #7758, #7776, #7786, #7812, #7819, 3527 #7831, #7838, #7865, #7866, #7869, #7872, #7877, #7878, #7885 3528 3529 3530Twisted Conch 15.2.0 (2015-05-18) 3531================================= 3532 3533Features 3534-------- 3535 - twisted.conch.ssh.forwarding now supports local->remote forwarding 3536 of IPv6 (#7751) 3537 3538 3539Twisted Lore 15.2.0 (2015-05-18) 3540================================ 3541 3542No significant changes have been made for this release. 3543 3544 3545Twisted Mail 15.2.0 (2015-05-18) 3546================================ 3547 3548Features 3549-------- 3550 - twisted.mail.smtp.sendmail now uses ESMTP. It will 3551 opportunistically enable encryption and allow the use of 3552 authentication. (#7257) 3553 3554 3555Twisted Names 15.2.0 (2015-05-18) 3556================================= 3557 3558No significant changes have been made for this release. 3559 3560 3561Twisted News 15.2.0 (2015-05-18) 3562================================ 3563 3564No significant changes have been made for this release. 3565 3566 3567Twisted Pair 15.2.0 (2015-05-18) 3568================================ 3569 3570No significant changes have been made for this release. 3571 3572 3573Twisted Runner 15.2.0 (2015-05-18) 3574================================== 3575 3576No significant changes have been made for this release. 3577 3578 3579Twisted Web 15.2.0 (2015-05-18) 3580=============================== 3581 3582Features 3583-------- 3584 - twisted.web.static is now ported to Python 3. (#6177) 3585 - twisted.web.server.Site accepts requestFactory as constructor 3586 argument. (#7016) 3587 3588Deprecations and Removals 3589------------------------- 3590 - twisted.web.util had some HTML generation functions deprecated 3591 since 12.1 that have now been removed. (#7828) 3592 3593Other 3594----- 3595 - #6927, #7797, #7802, #7846 3596 3597 3598Twisted Words 15.2.0 (2015-05-18) 3599================================= 3600 3601Bugfixes 3602-------- 3603 - The resumeOffset argument to 3604 twisted.words.protocol.irc.DccFileReceive now works as it is 3605 documented. (#7775) 3606 3607 3608Twisted Core 15.1.0 (2015-04-02) 3609================================ 3610 3611Features 3612-------- 3613 - Optional dependencies can be installed using the extra_requires 3614 facility provided by setuptools. (#3696) 3615 3616Improved Documentation 3617---------------------- 3618 - Twisted Trial's basics documentation now has a link to the 3619 documentation about how Trial finds tests. (#4526) 3620 3621Deprecations and Removals 3622------------------------- 3623 - twisted.application.internet.UDPClient, deprecated since Twisted 3624 13.1.0, has been removed. (#7702) 3625 3626Other 3627----- 3628 - #6988, #7005, #7006, #7007, #7008, #7044, #7335, #7666, #7723, 3629 #7724, #7725, #7748, #7763, #7765, #7766, #7768 3630 3631 3632Twisted Conch 15.1.0 (2015-04-02) 3633================================= 3634 3635No significant changes have been made for this release. 3636 3637 3638Twisted Lore 15.1.0 (2015-04-02) 3639================================ 3640 3641No significant changes have been made for this release. 3642 3643 3644Twisted Mail 15.1.0 (2015-04-02) 3645================================ 3646 3647Bugfixes 3648-------- 3649 - twisted.mail.smtp.ESMTPClient now does not fall back to plain SMTP 3650 if authentication or TLS is required and not able to occur. (#7258) 3651 3652Other 3653----- 3654 - #6705 3655 3656 3657Twisted Names 15.1.0 (2015-04-02) 3658================================= 3659 3660No significant changes have been made for this release. 3661 3662Other 3663----- 3664 - #7728 3665 3666 3667Twisted News 15.1.0 (2015-04-02) 3668================================ 3669 3670No significant changes have been made for this release. 3671 3672 3673Twisted Pair 15.1.0 (2015-04-02) 3674================================ 3675 3676No significant changes have been made for this release. 3677 3678 3679Twisted Runner 15.1.0 (2015-04-02) 3680================================== 3681 3682No significant changes have been made for this release. 3683 3684Other 3685----- 3686 - #7726 3687 3688 3689Twisted Web 15.1.0 (2015-04-02) 3690=============================== 3691 3692Features 3693-------- 3694 - twisted.web.static.File allows defining a custom resource for 3695 rendering forbidden pages. (#6951) 3696 3697Other 3698----- 3699 - #7000, #7485, #7750, #7762 3700 3701 3702Twisted Words 15.1.0 (2015-04-02) 3703================================= 3704 3705Deprecations and Removals 3706------------------------- 3707 - twisted.words.protocols.msn is now deprecated (#6395) 3708 3709Other 3710----- 3711 - #6494 3712 3713 3714Twisted Core 15.0.0 (2015-01-24) 3715================================ 3716 3717Features 3718-------- 3719 - twisted.internet.protocol.ClientFactory (and subclasses) may now 3720 return None from buildProtocol to immediately close the connection. 3721 (#710) 3722 - twisted.trial.unittest.SynchronousTestCase.assertRaises can now 3723 return a context manager. (#5339) 3724 - Implementations of 3725 twisted.internet.interfaces.IStreamClientEndpoint included in 3726 Twisted itself will now handle None being returned from the client 3727 factory's buildProtocol method by immediately closing the 3728 connection and firing the waiting Deferred with a Failure. (#6976) 3729 - inlineCallbacks now supports using the return statement with a 3730 value on Python 3 (#7624) 3731 - twisted.spread.banana.Banana.sendEncoded() now raises a more 3732 informative error message if the user tries to encode objects of 3733 unsupported type. (#7663) 3734 3735Bugfixes 3736-------- 3737 - twisted.internet.interfaces.IReactorMulticast.listenMultiple works 3738 again RHEL 6's python 2.6. (#7159) 3739 - Allow much more of the code within Twisted to use ProcessEndpoint 3740 by adding IPushProducer and IConsumer interfaces to its resulting 3741 transport. (#7436) 3742 - twisted.internet.ssl.Certificate(...).getPublicKey().keyHash() now 3743 produces a stable value regardless of OpenSSL version. 3744 Unfortunately this means that it is different than the value 3745 produced by older Twisted versions. (#7651) 3746 - twisted.python.reflect.safe_str on Python 3 converts utf-8 encoded 3747 bytes to clean str instead of "b'a'" (#7660) 3748 - twisted.spread.banana.Banana now raises NotImplementedError when 3749 receiving pb messages without pb being the selected dialect (#7662) 3750 - The SSL server string endpoint parser 3751 (twisted.internet.endpoints.serverFromString) now constructs 3752 endpoints which, by default, disable the insecure SSLv3 protocol. 3753 (#7684) 3754 - The SSL client string endpoint parser 3755 (twisted.internet.endpoints.clientFromString) now constructs 3756 endpoints which, by default, disable the insecure SSLv3 protocol. 3757 (#7686) 3758 3759Improved Documentation 3760---------------------- 3761 - inlineCallbacks now has introductory documentation. (#1009) 3762 - The echoclient example now uses twisted.internet.task.react. 3763 (#7083) 3764 - Twisted Trial's how-to documentation now has a link to Twisted's 3765 contribution guidelines and has been reformatted. (#7475) 3766 - Fixed a path error in the make.bat file for building Sphinx 3767 documentation, so that it is now possible to build the documentation 3768 using make.bat on Windows. (#7542) 3769 3770Deprecations and Removals 3771------------------------- 3772 - twisted.python.filepath.FilePath.statinfo was deprecated. (#4450) 3773 - twisted.internet.defer.deferredGenerator is now deprecated. 3774 twisted.internet.defer.inlineCallbacks should be used instead. 3775 (#6044) 3776 - Pickling twisted.internet.ssl.OptionSSLCertificationOptions and 3777 twisted.internet.ssl.Keypair is no longer supported. __getstate__ 3778 and __setstate__ methods of these classes have been deprecated. 3779 (#6166) 3780 - twisted.spread.jelly's support for unjellying "instance" atoms is 3781 now deprecated. (#7653) 3782 3783Other 3784----- 3785 - #3404, #4711, #5730, #6042, #6626, #6947, #6953, #6989, #7032, 3786 #7038, #7039, #7097, #7098, #7142, #7143, #7154, #7155, #7156, 3787 #7157, #7158, #7160, #7161, #7162, #7164, #7165, #7176, #7234, 3788 #7252, #7329, #7333, #7355, #7369, #7370, #7419, #7529, #7531, 3789 #7534, #7537, #7538, #7620, #7621, #7633, #7636, #7637, #7638, 3790 #7640, #7641, #7642, #7643, #7665, #7667, #7713, #7719 3791 3792 3793Twisted Conch 15.0.0 (2015-01-24) 3794================================= 3795 3796Features 3797-------- 3798 - The new APIs: twisted.conch.checkers.IAuthorizedKeysDB, 3799 twisted.conch.checkers.InMemorySSHKeyDB, 3800 twisted.conch.checkers.UNIXAuthorizedKeyFiles, and 3801 twisted.conch.checkers.SSHPublicKeyChecker have been added to 3802 provide functionality to check the validity of SSH public keys and 3803 specify where authorized keys are to be found. (#7144) 3804 3805Deprecations and Removals 3806------------------------- 3807 - twisted.conch.checkers.SSHPublicKeyDatabase is now deprecated in 3808 favor of a twisted.conch.checkers.SSHPublicKeyChecker instantiated 3809 with a twisted.conch.checkers.UNIXAuthorizedKeyFiles. (#7144) 3810 3811Other 3812----- 3813 - #6626, #7002, #7526, #7532, #7698 3814 3815 3816Twisted Lore 15.0.0 (2015-01-24) 3817================================ 3818 3819No significant changes have been made for this release. 3820 3821 3822Twisted Mail 15.0.0 (2015-01-24) 3823================================ 3824 3825No significant changes have been made for this release. 3826 3827Other 3828----- 3829 - #6999, #7708 3830 3831 3832Twisted Names 15.0.0 (2015-01-24) 3833================================= 3834 3835Bugfixes 3836-------- 3837 - twisted.names.secondary.SecondaryAuthority can now answer queries 3838 again (broken since 13.2.0). (#7408) 3839 3840Other 3841----- 3842 - #7352 3843 3844 3845Twisted News 15.0.0 (2015-01-24) 3846================================ 3847 3848No significant changes have been made for this release. 3849 3850Other 3851----- 3852 - #7703 3853 3854 3855Twisted Pair 15.0.0 (2015-01-24) 3856================================ 3857 3858No significant changes have been made for this release. 3859 3860Other 3861----- 3862 - #7722 3863 3864 3865Twisted Runner 15.0.0 (2015-01-24) 3866================================== 3867 3868No significant changes have been made for this release. 3869 3870 3871Twisted Web 15.0.0 (2015-01-24) 3872=============================== 3873 3874Features 3875-------- 3876 - twisted.web.client.Agent.usingEndpointFactory allows creating an 3877 Agent that connects in non-standard ways, e.g. via a proxy or a 3878 UNIX socket. (#6634) 3879 - The Deferred returned by twisted.web.client.readBody can now be 3880 cancelled. (#6686) 3881 3882Deprecations and Removals 3883------------------------- 3884 - twisted.web.iweb.IRequest.getClient is now deprecated. Its 3885 implementation in Twisted, twisted.web.http.Request.getClient, is 3886 also deprecated and will no longer attempt to resolve the client IP 3887 address to a hostname. (#2252) 3888 3889Other 3890----- 3891 - #7247, #7302, #7680, #7689 3892 3893 3894Twisted Words 15.0.0 (2015-01-24) 3895================================= 3896 3897No significant changes have been made for this release. 3898 3899Other 3900----- 3901 - #6994, #7163, #7622 3902