Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pin twisted to latest version 21.7.0 #476

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

pyup-bot
Copy link
Collaborator

This PR pins twisted to the latest release 21.7.0.

Changelog

21.2.0

===========================

Features
--------

- The enableSessions argument to twisted.internet.ssl.CertificateOptions now
actually enables/disables OpenSSL's session cache.  Also, due to
session-related bugs, it defaults to False. (9583)
- 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)
- 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)
- trial now allows the unittest.skipIf decorator to specify that an entire test class should be skipped. (9829)
- The twisted.python.deprecate.deprecatedKeywordParameter decorator can be used to mark a keyword paramater of a function or method as deprecated. (9844)
- Projects using Twisted can now perform type checking against a Twisted
installation, for example using mypy. (9908)
- twisted.python.util.InsensitiveDict now fully implements MutableMapping. (9919)
- Python 3.8 is now tested and supported. (9955)
- Support a coroutine function in twisted.internet.task.react (9974)
- PyPy 3.7 is now tested and supported. (10093)


Bugfixes
--------

- twisted.web.twcgi.CGIProcessProtocol.processEnded(...) now handles an already-finished request, for example when request.connectionLost(...) was called previously. (9468)
- 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)
- Fixed serialization of timedelta, date, and time objects in twisted.spread. (9716)
- 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)
- twisted.internet.process.registerReapProcessHandler and ._BaseProcess.reapProcess will no longer raise a TypeError when processing a None PID (9775)
- 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)
- DelayedCall.reset() is now working properly with asyncioreactor (9780)
- AsyncioSelectorReactor.seconds() now correctly returns an epoch time. (9787)
- 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)
- The Gtk3 reactor now runs on Wayland-only sessions (9904)
- Descriptive error messages from twisted.internet.error are now present when running with 'python -OO'. (9918)
- Comparator methods such as __eq__() now always return NotImplemented for uncomparable types. (9919)
- 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)


Improved Documentation
----------------------

- The narrative docs now contains the associated Twisted version and the date
when they were generated. (3945)
- The "Writing a twistd plugin" howto now explains how to deploy twistd plugins using Python packaging and pip (9243)
-  (9868, 9873, 9874)
- Fix a typo in "Introduction to Deferreds" document. (9948)
- The Twisted Coding Standard has been changed to refer to The Black code style for guidelines regarding whitespace and line lengths. (9957)
- Exempt ``__repr__``, ``__slots__`` and other ``attrs.define`` related changes from compatibility policy. (9982)
- Fix many docstring mistakes flagged by new sanity checks in pydoctor. (10021)
- Fix a few dozen broken links to API documentation pages. (10057)


Deprecations and Removals
-------------------------

- twisted.cred.credentials.UsernameHashedPassword is now deprecated because it doesn't hash the password, causing it to return the wrong result. (8368)
- twisted.news is now removed from the codebase. (This module was never installed on Python 3.) (9782)
- Support for Python 2.7 has been removed. Twisted now supports only Python versions 3.5/3.6/3.7. (9790)
- twisted.pair.ethernet.IEthernetProtocol.addProto()'s interface was changed to match the existing implementations in the Twisted source code. (9877)
- twisted.python.filepath.FilePath.statinfo was deprecated in Twisted 15.0.0 and has now been removed. (9881)
- 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)
- Functions and types in twisted.python.compat that existed to support the transition from Python 2 to 3 have been deprecated. (9922)
- twisted.logger.LoggingFile.softspace has been deprecated. (10042)
- twisted.python.win32.WindowsError and FakeWindowsError have been deprecated. (10053)
- twisted.mail.pop3client has been renamed to twisted.mail._pop3client, since it has always been a private implementation module. (10054)


Misc
----

- 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


Conch
-----

Features
~~~~~~~~

- twisted.conch.ssh now supports Ed25519 keys (requires OpenSSL >= 1.1.1b). (8966)
- twisted.conch.ssh.session.SSHSession can now accept environment variables sent by the client, if the SSH avatar implements the new ISessionSetEnv interface. (9315)
- twisted.conch.ssh.keys.Key.fromString and twisted.conch.ssh.keys.Key.toString now normalize Unicode passphrases as required by NIST 800-63B. (9736)
- twisted.conch.telnet now implements EOR (End of Record) command (RFC 885) (9875)


Bugfixes
~~~~~~~~

- t.c.ssh.filetransfer.FileTransferClient now errbacks any outstanding requests if the connection is lost before a reply is received. (9571)
- t.c.ssh.filetransfer.FileTransferClient immediately errbacks any attempt to send a request on a closed channel. (9572)
- twisted.conch.ssh.session.SSHSession now accepts environment variables also for multiplexed SSH session. (10016)


Improved Documentation
~~~~~~~~~~~~~~~~~~~~~~

- construct and assign portal and checkers consistently in ssh server example (9578)


Misc
~~~~

- 6446, 9571, 9831, 9913


Web
---

Bugfixes
~~~~~~~~

- twisted.web.http.Request.getRequestHostname now supports IPv6 literal hostnames
in HTTP host headers. (6014)
- Fixed unexpected exception by handling subclass of TaskFinished when FileBodyProducer's task stopped twice. (6528)
- Importing twisted.web.client no longer has the side effect of initializing the reactor. (9774)
- Ensure that all calls to connectionLost use a Failure instance in the HTTP 2 code. (9817)
- twisted.web.util.ParentRedirect has been fixed and documented. It was broken by a security fix in Twisted 19.2.0. (9835)
- xmlrpc's Proxy class now verifies HTTPS certificates against the system bundle. (9836)
- twisted.web.twcgi can now handle url parameters in python 3 (9887)
- defer reactor import in twisted.web.xmlrpc (9931)
- twisted.web.RedirectAgent now supports 308 redirects (9940)
- 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)


Improved Documentation
~~~~~~~~~~~~~~~~~~~~~~

- 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)
- twisted.web.client.ContentDecoderAgent's documentation has been corrected and improved. (9742)


Misc
~~~~

- 6446, 9758, 9801, 9831, 9834, 9841


Mail
----

Bugfixes
~~~~~~~~

- twisted.mail.smtp.ESMTPSender no longer forces TLSv1.0 when used without explicit context factory. (9740)


Misc
~~~~

- 6446, 9831, 9832, 9900, 9910


Words
-----

Misc
~~~~

- 9901


Names
-----

Features
~~~~~~~~

- twisted.names.hosts.Resolver and twisted.names.hosts.searchFileForAll() now ignore malformed lines in hosts files like /etc/hosts (9752)
- New interface IEncodableRecord combines IEncodable and IRecord, which is useful when using type annotations. (9920)


Bugfixes
~~~~~~~~

- twistd -n dns --pyzone example-domain.com will no longer throw an exception on startup with Python 3. (9783)
- twist dns --pyzone example-domain.com now works on Python 3. (9786)


Misc
~~~~

- 9749

20.3.0

===========================

Bugfixes
--------

- 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)


Improved Documentation
----------------------

- Added a missing hyphen to a reference to the ``--debug`` option of ``pdb`` in the Trial how-to. (9690)
- The documentation of the twisted.cred.checkers module has been extended and corrected. (9724)


Deprecations and Removals
-------------------------

- twisted.news is deprecated. (9405)


Misc
----

- 9634, 9701, 9707, 9710, 9715, 9726, 9727, 9728, 9729, 9735, 9737, 9757


Conch
-----

Features
~~~~~~~~

- twisted.conch.ssh now supports the curve25519-sha256 key exchange algorithm (requires OpenSSL >= 1.1.0). (6814)
- 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)


Bugfixes
~~~~~~~~

- twisted.conch.keys.Key.privateBlob now returns the correct blob format for ECDSA (i.e. the same as that implemented by OpenSSH). (9682)


Misc
~~~~

- 9760


Web
---

Bugfixes
~~~~~~~~

- 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)
- 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)
- twisted.web.http.Request now correctly parses multipart-encoded form data submitted as a chunked request on Python 3.7+. (9678)
- twisted.web.client.BrowserLikePolicyForHTTPS is now listed in __all__, since it's a user-facing class that anyone could import and extend. (9769)
- 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)


Mail
----

Misc
~~~~

- 9733


Words
-----

Bugfixes
~~~~~~~~

- Fixed parsing of streams with Python 3.8 when there are spaces in namespaces or namespaced attributes in twisted.words.xish.domish.ExpatElementStream (9730)


Names
-----

Bugfixes
~~~~~~~~

- twisted.names.secondary.SecondaryAuthority now accepts str for its domain parameter, so twist dns --secondary now functions on Python 3. (9496)

19.10.0

============================

Features
--------

- twisted.trial.successResultOf, twisted.trial.failureResultOf, and
twisted.trial.assertNoResult accept coroutines as well as Deferreds. (9006)


Bugfixes
--------

- Fixed circular import in twisted.trial.reporter, introduced in Twisted 16.0.0. (8267)
- The POP3 server implemented by twisted.mail.pop3 now accepts passwords that contain spaces. (9100)
- Incoming HTTP/2 connections will now not time out if they persist for longer than one minute. (9653)
- The serial extra now requires pywin32 on Windows enabling use of twisted.internet.serialport without specifying the windows_platform extra. (9700)


Misc
----

- 8506, 9677, 9684, 9687, 9688


Conch
-----

Bugfixes
~~~~~~~~

- 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)


Misc
~~~~

- 9689


Web
---

Features
~~~~~~~~

- 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)


Bugfixes
~~~~~~~~

- twisted.web.client.FileBodyProducer will now stop producing when the Deferred returned by FileBodyProducer.startProducing is cancelled. (9547)
- 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)


Mail
----

No significant changes.


Words
-----

No significant changes.


Names
-----

No significant changes.

19.7.0

===========================

Features
--------

- The callable argument to twisted.internet.task.deferLater() is no longer required. (9577)
- Twisted's minimum Cryptography requirement is now 2.5. (9592)
- twisted.internet.utils.getProcessOutputAndValue now accepts `stdinBytes` to write to the child process's standard input. (9607)
- Add new twisted.logger.capturedLogs context manager for capturing observed log events in tests. (9617)
- twisted.internet.base.PluggableResolverMixin, which implements the pluggable resolver interfaces for easier re-use in other reactors, has been factored out of ReactorBase. (9632)
- The PyPI page for Twisted has been enhanced to include more information and useful links. (9648)


Bugfixes
--------

- twisted.internet.endpoints is now importable on Windows when pywin32 is not installed. (6032)
- twisted.conch.ssh now generates correct keys when using hmac-sha2-512 with SHA1 based KEX algorithms. (8258)
- twisted.internet.iocpreactor.abstract.FileHandle no longer duplicates/looses outgoing data when .write() is called in rapid succession with large payloads (9446)
- twisted.application.backoffPolicy will not fail on connection attempts > 1750 with default settings. (9476)
- 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)
- twisted.internet.process does not fail on import when the process has more than 1024 file descriptors opened. (9636)
- Add the stackLevel keyword argument to twisted.logger.STDLibLogObserver._findCaller to fix an incompatibility with Python 3.8. (9668)


Improved Documentation
----------------------

- 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)


Deprecations and Removals
-------------------------

- twisted.test.proto_helpers has moved to twisted.internet.testing. twisted.test.proto_helpers has been deprecated. (6435)
- twisted.protocols.mice, deprecated since Twisted 16.0, has been removed. (9602)
- twisted.conch.insults.client and twisted.conch.insults.colors, deprecated since Twisted 10.1, have been removed. (9603)
- The __version__ attribute of Twisted submodules that were previously packaged separately, deprecated since Twisted 16.0, has been removed. (9604)
- Python 3.4 is no longer supported. (9613)
- twisted.python.compat.OrderedDict, an alias for collections.OrderedDict and deprecated since Twisted 15.5, has been removed. (9639)


Misc
----

- 9217, 9445, 9454, 9605, 9614, 9615, 9619, 9625, 9633, 9640, 9674


Conch
-----

Bugfixes
~~~~~~~~

- t.c.ssh.connection.SSHConnection now fails channels that are in the process of opening when the connection is lost. (2782)


Misc
~~~~

- 9610


Web
---

Features
~~~~~~~~

- twisted.web.tap, the module that is run by `twist web`, now accepts --display-tracebacks to render tracebacks on uncaught exceptions. (9656)


Bugfixes
~~~~~~~~

- twisted.web.http.Request.write after the channel is disconnected will no longer raise AttributeError. (9410)
- 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)
- twisted.web.http.HTTPChannel no longer raises TypeError internally when receiving a line-folded HTTP header on Python 3. (9644)
- 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)
- twisted.web.server.Site's instance variable displayTracebacks is now set to False by default. (9656)


Improved Documentation
~~~~~~~~~~~~~~~~~~~~~~

- twisted.web.iweb.IRequest's "prepath" and "postpath" attributes, which have existed for a long time, are now documented. (5533)
- The documented type of t.w.iweb.IRequest's "method" and "uri" attributes on Python 3 has been corrected to match the implementation. (9091)
- t.w.iweb.IRequest's "args" attribute is now correctly documented to be bytes. (9458)
- The API documentation of twisted.web.iweb.IRequest and twisted.web.http.Request has been updated and extended to match the implementation. (9593)


Deprecations and Removals
~~~~~~~~~~~~~~~~~~~~~~~~~

- 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)
- 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)


Misc
~~~~

- 9597


Mail
----

No significant changes.


Words
-----

Features
~~~~~~~~

- 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)


Bugfixes
~~~~~~~~

- 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)


Names
-----

Bugfixes
~~~~~~~~

- twisted.names.client.Resolver will no longer infinite loop if it cannot bind a UDP port to use for resolving. (9620)

19.2.0

===========================

This is the final release that will support Python 3.4.

Features
--------

- twisted.internet.ssl.CertificateOptions now uses 32 random bytes instead of an MD5 hash for the ssl session identifier context. (9463)
- DeferredLock and DeferredSemaphore can be used as asynchronous context
managers on Python 3.5+. (9546)
- t.i.b.BaseConnector has custom __repr__ (9548)
- twisted.internet.ssl.optionsForClientTLS now supports validating IP addresses from the certificate subjectAltName (9585)
- Twisted's minimum Cryptography requirement is now 2.5. (9592)


Bugfixes
--------

- twisted.web.proxy.ReverseProxyResource fixed documentation and example snippet (9192)
- 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)
- 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)
- The message of twisted.internet.error.ConnectionAborted is no longer truncated. (9522)
- twisted.enterprise.adbapi.ConnectionPool.connect now logs only the dbapiName and not the connection arguments, which may contain credentials (9544)
- twisted.python.runtime.Platform.supportsINotify no longer considers the result of isDocker for its own result. (9579)


Improved Documentation
----------------------

- The documentation for the the twisted.internet.interfaces.IConsumer, IProducer, and IPullProducer interfaces is more detailed. (2546)
- The errback example in the docstring of twisted.logger.Logger.failure has been corrected. (9334)
- The sample code in the "Twisted Web In 60 Seconds" tutorial runs on Python 3. (9559)


Misc
----

- 8921, 9071, 9125, 9428, 9536, 9540, 9580


Conch
-----

Features
~~~~~~~~

- 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)


Bugfixes
~~~~~~~~

- Conch now uses pyca/cryptography for Diffie-Hellman key generation and agreement. (8831)


Misc
~~~~

- 9584


Web
---

Features
~~~~~~~~

- 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)


Bugfixes
~~~~~~~~

- 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)
- 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)


Mail
----

No significant changes.


Words
-----

No significant changes.


Names
-----

Features
~~~~~~~~

- twisted.names.dns now has IRecord implementations for the SSHFP and TSIG record types. (9373)

18.9.0

===========================

Features
--------

- twisted.internet._sslverify.ClientTLSOptions no longer raises IDNAError when given an IPv6 address as a hostname in a HTTPS URL. (9433)
- 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)
- Python 3.7 is now supported. (9502)


Bugfixes
--------

- 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)
- Syntax error under Python 3.7 fixed for twisted.conch.manhole and
twisted.main.imap4. (9384)
- `trial -j` reports tracebacks on test failures under Python 3. (9436)
- Properly format multi-byte and non-ascii encoded data in a traceback. (9456)
- twisted.python.rebuild now functions on Python 3.7. (9492)
- HTTP/2 server connections will no longer time out active downloads that take too long. (9529)


Improved Documentation
----------------------

- Several minor formatting problems in the API documentation have been corrected. (9461)
- The documentation of twisted.internet.defer.Deferred.fromFuture() has been updated to reflect upstream changes. (9539)


Deprecations and Removals
-------------------------

- async keyword argument is deprecated in twisted.conch.manhole
(ManholeInterpreter.write and Manhole.add) and in
twisted.main.imap4.IMAP4Server.sendUntaggedResponse,
isAsync keyword argument is introduced instead. (9384)


Misc
----

- 9379, 9485, 9489, 9499, 9501, 9511, 9514, 9523, 9524, 9525, 9538


Conch
-----

Bugfixes
~~~~~~~~

- 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)
- RSA private keys are no longer corrupted during loading, allowing OpenSSL's fast-path to operate for RSA signing. (9518)


Improved Documentation
~~~~~~~~~~~~~~~~~~~~~~

- The documentation for IConchUser.gotGlobalRequest() is more accurate. (9413)


Deprecations and Removals
~~~~~~~~~~~~~~~~~~~~~~~~~

- twisted.conch.ssh.filetransfer.ClientDirectory's use as an iterator has been deprecated. (9527)


Web
---

Bugfixes
~~~~~~~~

- twisted.web.server.Request.getSession now returns a new session if the
previous session has expired. (9288)


Misc
~~~~

- 9479, 9480, 9482, 9491


Mail
----

No significant changes.


Words
-----

No significant changes.


Names
-----

No significant changes.

18.7.0

===========================

Features
--------

- Cancelling a Deferred returned by twisted.internet.defer.inlineCallbacks now cancels the Deferred it is waiting on. (4632)
- 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)
- 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)
- Add optional cwd argument to twisted.runner.procmon.ProcMon.addProcess (9287)
- 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)


Bugfixes
--------

- On UNIX-like platforms, Twisted attempts to recover from EMFILE when accepting connections on TCP and UNIX ports by shedding incoming clients. (5368)
- The documentation of IReactorTime.getDelayedCalls() has been corrected to indicate that the method returns a list, not a tuple. (9418)
- "python -m twisted web --help" now refers to "--listen" instead of the non-existing "--http" (9434)
- twisted.python.htmlizer.TokenPrinter now explicitly works on bytestrings. (9442)
- twisted.enterprise.adbapi.ConnectionPool.runWithConnection and runInteraction now use the reactor that is passed to ConnectionPool's constructor. (9467)


Improved Documentation
----------------------

- The Twisted Coding Standard now contains examples of how to mark up a feature as added in the next Twisted release. (9460)


Deprecations and Removals
-------------------------

- Deprecate direct introspection of ProcMon's processes: processes should not be directly accessed or pickled. (9287)
- 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)


Misc
----

- 7495, 9399, 9406, 9411, 9425, 9439, 9449, 9450, 9452


Conch
-----

Features
~~~~~~~~

- 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)


Bugfixes
~~~~~~~~

- 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)
- twisted.conch.ssh.transport.SSHTransportBase now correctly handles MSG_DEBUG with a false alwaysDisplay field on Python 2 (broken since 8.0.0). (9422)
- twisted.conch.manhole.lastColorizedLine now does not throw a UnicodeDecodeError on non-ASCII input. (9442)


Web
---

Features
~~~~~~~~

- Added support for SameSite cookies in ``http.Request.addCookie``. (9387)


Bugfixes
~~~~~~~~

- 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)
- twisted.web.static.File renders directory listings on Python 2, including those with text paths. (9438)
- twisted.python.http.Request now correcly parses multipart bodies on Python 3.7. (9448)
- twisted.web.http.combinedLogFormatter (used by t.w.http.Server and t.w.server.Site) no longer produces DeprecationWarning about Request.getClientIP. (9470)


Misc
~~~~

- 9432, 9466, 9479, 9480


Mail
----

No significant changes.


Words
-----

No significant changes.


Names
-----

Misc
~~~~

- 9398

18.4.0

===========================

Features
--------

- The --port/--https arguments to web plugin are now deprecated, in favor of
--listen. The --listen argument can be given multiple times to listen on
multiple ports. (6670)
- Twisted now requires zope.interface 4.4.2 or higher across all platforms and
Python versions. (8149)
- The osx_platform setuptools extra has been renamed to macos_platform, with
the former name being a compatibility alias. (8848)
- Zsh completions are now provided for the twist command. (9338)
- twisted.internet.endpoints.HostnameEndpoint now has a __repr__ method which
includes the host and port to which the endpoint connects. (9341)


Bugfixes
--------

- twistd now uses the UID's default GID to initialize groups when --uid is
given but --gid is not. This prevents an unhandled TypeError from being
raised when os.initgroups() is called. (4442)
- twisted.protocols.basic.LineReceiver checks received lines' lengths against
its MAX_LENGTH only after receiving a complete delimiter. A line ending in a
multi-byte delimiter like '\r\n' might be split by the network, with the
first part arriving before the rest; previously, LineReceiver erroneously
disconnected if the first part, e.g. 'zzzz....\r' exceeded MAX_LENGTH.
LineReceiver now checks received data against MAX_LENGTH plus the delimiter's
length, allowing short reads to complete a line. (6556)
- twisted.protocols.basic.LineOnlyReceiver disconnects the transport after
receiving a line that exceeds MAX_LENGTH, like LineReceiver. (6557)
- twisted.web.http.Request.getClientIP now returns the host part of the
client's address when connected over IPv6. (7704)
- twisted.application.service.IService is now documented as requiring the
'running', 'name' and 'parent' attributes (the documentation previously
implied they were required, but was unclear). (7922)
- twisted.web.wsgi.WSGIResource no longer raises an exception when a client
connects over IPv6. (8241)
- When using TLS enable automatic ECDH curve selection on OpenSSL 1.0.2+
instead of only supporting P-256 (9210)
- twisted.trial._dist.worker and twisted.trial._dist.workertrial consistently
pass bytes, not unicode to AMP. This fixes "trial -j" on Python 3. (9264)
- twisted.trial.runner now uses the 'importlib' module instead of the 'imp'
module on Python 3+. This eliminates DeprecationWarnings caused by importing
'imp' on Python 3. (9275)
- twisted.web.client.HTTP11ClientProtocol now closes the connection when the
server is sending a header line which is longer than he line limit of
twisted.protocols.basic.LineReceiver.MAX_LENGTH. (9295)
- twisted.python.failure now handles long stacktraces better; in particular it
will log tracebacks for stack overflow errors. (9301)
- The "--_shell-completion" argument to twistd now works on Python 3. (9303)
- twisted.python.failure.Failure now raises the wrapped exception in Python3,
and self (Failure) n Python2 when trap() is called without a matching
exception (9307)
- Writing large amounts of data no longer implies repeated, expensive copying
under Python 3. Python 3's write speeds are now as fast as Python 2's.
(9324)
- twisted.protocols.postfix now properly encodes errors which are unicode
strings to bytes. (9335)
- twisted.protocols.policies.ProtocolWrapper and
twisted.protocols.tls.TLSMemoryBIOProtocol no longer create circular
references that keep protocol instances in memory after connection is closed.
(9374)
- twisted.conch.ssh.transport.SSHTransportBase no longer strips trailing spaces
from the SSH version string of the connected peer. (9377)
- `trial -j` no longer crashes on Python 2 on test failure messages containing
non-ASCII bytes. (9378)
- RSA keys replaced with 2048bit ones in twisted.conch.test.keydata in order to
be compatible with OpenSSH 7.6. (9388)
- AsyncioSelectorReactor uses the global policy's event loop. asyncio libraries
that retrieve the running event loop with get_event_loop() will now receive
the one used by AsyncioSelectorReactor. (9390)


Improved Documentation
----------------------

- public attributes of `twisted.logger.Logger` are now documented as
attributes. (8157)
- List indentation formatting errors have been corrected throughout the
documentation. (9256)


Deprecations and Removals
-------------------------

- twisted.protocols.basic.LineOnlyReceiver.lineLengthExceeded no longer returns
twisted.internet.error.ConnectionLost. It instead directly disconnects the
transport and returns None. (6557)
- twisted.python.win32.getProgramsMenuPath and
twisted.python.win32.getProgramFilesPath were deprecated in Twisted 15.3.0
and have now been removed. (9312)
- Python 3.3 is no longer supported. (9352)


Misc
----

- 7033, 8887, 9204, 9289, 9291, 9292, 9293, 9302, 9336, 9355, 9356,
9364, 9375, 9381, 9382, 9389, 9391, 9393, 9394, 9396


Conch
-----

Bugfixes
~~~~~~~~

- twisted.plugins.cred_unix now properly converts a username and password from
bytes to str on Python 3. In addition, passwords which are encrypted with
SHA512 and SH256 are properly verified. This fixes running a conch server
with: "twistd -n conch -d /etc/ssh/ --auth=unix". (9130)
- In twisted.conch.scripts.conch, on Python 3 do not write bytes directly to
sys.stderr. On Python 3, this fixes remote SSH execution of a command which
fails. (9344)


Deprecations and Removals
~~~~~~~~~~~~~~~~~~~~~~~~~

- twisted.conch.ssh.filetransfer.FileTransferClient.wasAFile attribute has been
removed as it serves no purpose. (9362)
- Removed deprecated support for PyCrypto key objects in conch (9368)


Web
---

Features
~~~~~~~~

- The new twisted.iweb.IRequest.getClientAddress returns the IAddress provider
representing the client's address. Callers should check the type of the
returned value before using it. (7707)
- Eliminate use of twisted.python.log in twisted.web modules. (9280)


Bugfixes
~~~~~~~~

- Scripts ending with .rpy, .epy, and .cgi now execute properly in Twisted Web
on Python 3. (9271)
- twisted.web.http.Request and twisted.web.server.Request are once again
hashable on Python 2, fixing a regression introduced in Twisted 17.5.0.
(9314)


Improved Documentation
~~~~~~~~~~~~~~~~~~~~~~

- Correct reactor docstrings for twisted.web.client.Agent and
twisted.web.client._StandardEndpointFactory to communicate interface
requirements since 17.1. (9274)
- The examples for the "Twisted Web in 60 Seconds" tutorial have been fixed to
work on Python 3. (9285)


Deprecations and Removals
~~~~~~~~~~~~~~~~~~~~~~~~~

- twisted.iweb.IRequest.getClientIP is deprecated. Use
twisted.iweb.IRequest.getClientAddress instead (see 7707). (7705)
- twisted.web.iweb.IRequest.getClient and its implementations (deprecated in
2552) have been removed. (9395)


Mail
----

Bugfixes
~~~~~~~~

- twistd.mail.scripts.mailmail has been ported to Python 3. (8487)
- twisted.mail.bounce now works on Python 3. (9260)
- twisted.mail.pop3 and twisted.mail.pop3client now work on Python 3. (9269)
- SMTP authentication in twisted.mail.smtp now works better on Python 3, due to
improved improved bytes vs unicode handling. (9299)


Misc
~~~~

- 9310


Words
-----

No significant changes.


Names
-----

No significant changes.

17.9.0

===========================

This is the last Twisted release where Python 3.3 is supported, on any
platform.

Features
--------

- twisted.python.failure.Failure is now a new-style class which subclasses
BaseException. (5519)
- twisted.internet.posixbase.PosixReactorBase.adoptStreamPort and
twisted.internet.posixbase.PosixReactorBase.adoptStreamConnection now support
AF_UNIX SOCK_STREAM sockets. (5573)
-  (8940)
- t.protocol.policies.TimeoutMixin.setTimeout and
t.protocol.policies.TimeoutProtocol.cancelTimeout (used in
t.protocol.policies.TimeoutFactory) no longer raise a
t.internet.error.AlreadyCancelled exception when calling them for an already
cancelled timeout. (9131)
- twisted.web.template.flatten now supports coroutines that yield Deferreds.
(9199)
- twisted.web.client.HTTPConnectionPool passes the repr() of the endpoint to
the client protocol factory, and the protocol factory adds that to its own
repr(). This makes logs more useful. (9235)
- Python 3.6 is now supported (9240)


Bugfixes
--------

- twisted.python.logfile.BaseLogFile and subclasses now always open the file in
binary mode, and will process text as UTF-8. (6938)
- The `ssl:` endpoint now accepts `certKey` PEM files without trailing
newlines. (7530)
- Logger.__init__ sets the namespace to "<unknown>" instead of raising KeyError
when unable to determine the namespace from the calling context. (7930)
- twisted.internet._win32serialport updated to support pySerial 3.x and dropped
pySerial 2.x support. (8159)
- twisted.python.rebuild now works on Python 3. (8213)
- twisted.web.server.Request.notifyFinish will now once again promptly notify
applications of client disconnection (assuming that the client doesn't send a
large amount of pipelined request data) rather than waiting for the timeout;
this fixes a bug introduced in Twisted 16.3.0. (8692)
- twisted.web.guard.HTTPAuthSessionWrapper configured with
DigestCredentialFactory now works on both Python 2 and 3. (9127)
- Detect when we’re being run using “-m twisted” or “-m twisted.trial” and use
it to build an accurate usage message. (9133)
- twisted.protocols.tls.TLSMemoryBIOProtocol now allows unregisterProducer to
be called when no producer is registered, bringing it in line with other
transports. (9156)
- twisted.web web servers no longer print tracebacks when they timeout clients
that do not respond to TLS CLOSE_NOTIFY messages. (9157)
- twisted.mail.imap4 now works on Python 3. (9161)
- twisted.python.shortcut now works on Python 3 in Windows. (9170)
- Fix traceback forwarding with inlineCallbacks on python 3. (9175)
- twisted.mail.imap4.MessageSet now treats * as larger than every message ID,
leading to more consistent and robust behavior. (9177)
- The following plugins can now be used on Python 3 with twistd: dns, inetd,
portforward, procmon, socks, and words. (9184)
- twisted.internet._win32serialport now uses serial.serialutil.to_bytes() to
provide bytes in Python 3. (9186)
- twisted.internet.reactor.spawnProcess() now does not fail on Python 3 in
Windows if passed a bytes-encoded path argument. (9200)
- twisted.protocols.ident now works on Python 3. (9221)
- Ignore PyPy's implementation differences in base object class. (9225)
- twisted.python.test.test_setup now passes with setuptools 36.2.1 (9231)
- twisted.internet._win32serialport SerialPort._clearCommError() no longer
raises AttributeError (9252)
- twisted.trial.unittest.SynchronousTestCase and
twisted.trial.unittest.TestCase now always run their tearDown methods, even
when a test method fails with an exception. They also flush all errors logged
by a test method before running another, ensuring the logged errors are
associated with their originating test method. (9267)


Improved Documentation
----------------------

- Trial's documentation now directly mentions the preferred way of running
Trial, via "python -m twisted.trial". (9052)
- twisted.internet.endpoints.HostnameEndpoint and
twisted.internet.endpoints.TCP4Client endpoint documentation updated to
correctly reflect that the timeout argument takes a float as well as an int.
(9151)
- Badges at top of README now correctly render as links to respective result
pages on GitHub. (9216)
- The example code for the trial tutorial is now compatible with Python3 and
the current version of Twisted. (9223)


Deprecations and Removals
-------------------------

- twisted.protocols.dict is deprecated. (9141)
- gpsfix.py has been removed from the examples. It uses twisted.protocols.gps
which was removed in Twisted 16.5.0. (9253)
- oscardemo.py, which illustrates the use of twisted.words.protocols.oscar, as
been removed. twisted.words.protocols.oscar was removed in Twisted 17.5.0.
(9255)


Misc
----

- 5949, 8566, 8650, 8944, 9159, 9160, 9162, 9196, 9219, 9228, 9229,
9230, 9247, 9248, 9249, 9251, 9254, 9262, 9276, 9308


Conch
-----

Bugfixes
~~~~~~~~

- twisted.conch.ssh.userauth.SSHUserAuthServer now gracefully handles
unsupported authentication key types. (9139)
- twisted.conch.client.default verifyHostKey now opens /dev/tty with no buffer
to be compatible with Python 3. This lets the conch cli work with Python 3.
(9265)


Deprecations and Removals
~~~~~~~~~~~~~~~~~~~~~~~~~

- twisted.conch.ssh._cryptography_backports has been removed in favor of using
int_to_bytes() and int_from_bytes() from cryptography.utils. (9263)


Misc
~~~~

- 9158, 9272


Web
---

Features
~~~~~~~~

- twisted.web.static.File.contentTypes is now documented. (5739)
- twisted.web.server.Request and any Twisted web server using it now support
automatic fast responses to HTTP/1.1 and HTTP/2 OPTIONS * requests, and
reject any other verb using the * URL form. (9190)
- --add-header "HeaderName: Value" can be passed to twist web in order to set
extra headers on all responses (9241)


Bugfixes
~~~~~~~~

- twisted.web.client.HTTPClientFactory(...).gotHeaders(...) now handles a wrong
Set-Cookie header without a traceback. (9136)
- twisted.python.web.http.HTTPFactory now always opens logFile in binary mode
and writes access logs in UTF-8, to avoid encoding issues and newline
differences on Windows. (9143)
- The code examples in "Using the Twisted Web Client" now work on Python 3.
(9172)
- twisted.web.server.Request and all web servers that use it now no longer send
a default Content-Type header on responses that do not have a body (i.e. that
set Content-Length: 0 or that send a 204 status code). (9191)
- twisted.web.http.Request and all subclasses now correctly fire Deferreds
returned from notifyFinish with errbacks when errors are encountered in
HTTP/2 streams. (9208)
- twisted.web.microdom, twisted.web.domhelpers, and twisted.web.sux now work on
Python 3. (9222)


Mail
----

Bugfixes
~~~~~~~~

- Sending a list of recipients with twisted.smtp.SenderFactory has been fixed.
This fixes a problem found when running buildbot. (9180)
- twisted.mail.imap4.IMAP4Server parses empty string literals even when they
are the last argument to a command, such as LOGIN. (9207)


Words
-----

Bugfixes
~~~~~~~~

- twisted.words.tap has been ported to Python 3 (9169)


Misc
~~~~

- 9246


Names
-----

Bugfixes
~~~~~~~~

- Queries for unknown record types no longer incorrectly result in a server
error. (9095)
- Failed TCP connections for AFXR queries no longer raise an AttributeError.
(9174)

17.5.0

===========================

Bugfixes
--------

- spawnProcess no longer opens an unwanted console on Windows (5726)
- The transition to the hyperlink package adds IPv6 support to
twisted.python.url.URL. This is now deprecated and new code should use
hyperlink directly (see 9126). (8069)
- twisted.logger now buffers only 200 events by default (reduced from 65536)
while waiting for observers to be configured. (8164)
- The transition of twisted.python.url to using the hyperlink package enables a
URL.click() with no arguments (or 0-length string argument) to resolve dot
segments in the path. (8184)
- twisted.protocols.finger now works on Python 3. (8230)
- TLS-related tests now pass when run with OpenSSL 1.1.0. This makes tests pass
again on macOS and Windows, as cryptography 1.8 and later include OpenSSL
1.1.0. (8898)
- UNIX socket endpoints now process all messages from recvmsg's ancillary data
via twisted.internet.unix.Server.doRead/twisted.internet.unix.Client.doRead,
while discarding and logging ones that don't contain file descriptors.
(8912)
- twisted.internet.endpoints.HostnameEndpoint and twisted.web.client.Agent work
again with reactors that do not provide IReactorPluggableNameResolver. This
undoes the changes that broke downstream users such as treq.testing. Note
that passing reactors that do not provide IReactorPluggableNameResolver to
either is deprecated. (9032)
- A Python 3 Perspective Broker server which receives a remote call with
keyword arguments from a Python 2 client will now decode any keys which are
binary to strings instead of crashing. This fixes interoperability between
Python 2 Buildbot clients and Python 3 Buildbot servers. (9047)
- twisted.internet._threadedselect now works on both Python 2 and 3. (9053)
- twisted.internet.interfaces.IResolverSimple implementers will now always be
passed bytes, properly IDNA encoded if required, on Python 2. On Python 3,
they will now be passed correctly IDNA-encoded Unicode forms of the domain,
taking advantage of the idna library from PyPI if possible. This is to avoid
Python's standard library (which has an out of date idna module) from mis-
encoding domain names when non-ASCII Unicode is passed to it. (9137)


Improved Documentation
----------------------

- The examples in Twisted howto "Using the Twisted Application Framework",
section "Customizing twistd logging" have been updated to use latest logging
modules and syntax (9084)


Features
--------

- twisted.internet.defer.Deferred.asFuture and
twisted.internet.defer.Deferred.fromFuture were added, allowing for easy
transitions between asyncio coroutines (which await Futures) and twisted
coroutines (which await Deferreds). (8748)
- twisted.application.internet.ClientService.whenConnected now accepts an
argument "failAfterFailures". If you set this to 1, the Deferred returned by
whenConnected will errback when the connection attempt fails, rather than
retrying forever. This lets you react (probably by stopping the
ClientService) to connection errors that are likely to be persistent, such as
using the wrong hostname, or not being connected to the internet at all.
(9116)
- twisted.protocols.tls.TLSMemoryBIOProtocol and anything that uses it
indirectly including the TLS client and server endpoints now enables TLS 1.3
cipher suites. (9128)


Misc
----

- 8133, 8995, 8997, 9003, 9015, 9021, 9026, 9027, 9049, 9057, 9062,
9065, 9069, 9070, 9072, 9074, 9075, 9111, 9117, 9140, 9144, 9145


Deprecations and Removals
-------------------------

- twisted.runner.inetdconf.InvalidRPCServicesConfError,
twisted.runner.inetdconf.RPCServicesConf, twisted.runner.inetdtap.RPCServer,
and twisted.runner.portmap, deprecated since 16.2.0, have been removed.
(8464)
- twisted.python.url and twisted.python._url were modified to rely on
hyperlink, a new package based on the Twisted URL implementation. Hyperlink
adds support for IPv6 (fixing 8069), correct username/password encoding,
better scheme/netloc inference, improved URL.click() behavior (fixing 8184),
and more. For full docs see hyperlink.readthedocs.io and the CHANGELOG in the
hyperlink GitHub repo. (9126)


Conch
-----

Bugfixes
~~~~~~~~

- History-aware terminal protocols like twisted.conch.manhole.Manhole no longer
raise a TypeError when a user visits a partial line they added to the command
line history by pressing up arrow before return. (9031)
- The telnet_echo.tac example had conflicting port callouts between runtime and
documentation. File was altered to run on documented port, 6023. (9055)


Deprecations and Removals
~~~~~~~~~~~~~~~~~~~~~~~~~

- Remove diffie-hellman-group1-sha1 from twisted.conch. See https://weakdh.org/
(9019)
- Removed small and obscure elliptic curves from conch. The only curves conch
supports now are the ones also supported by OpenSSH. (9088)


Mail
----

Bugfixes
~~~~~~~~

- twisted.mail.smtp has been ported to Python 3. (8770)


Names
-----

Bugfixes
~~~~~~~~

- RRHeader now converts its ttl argument to an integer, raising a TypeError if
it cannot. (8340)


Web
---

Bugfixes
~~~~~~~~

- twisted.web.cgi now works on Python 3 (8009)
- twisted.web.distrib now works on Python 3 (8010)
- twisted.web.http.HTTPFactory now propagates its reactor's callLater method to
the HTTPChannel object, rather than having callLater grab the global reactor.
This prevents the possibility of HTTPFactory logging using one reactor, but
HTTPChannel running timeouts on another. (8904)


Improved Documentation
~~~~~~~~~~~~~~~~~~~~~~

- twisted.web.template.flattenString docstring now correctly references
io.BytesIO (rather than NativeStringIO). (9028)


Features
~~~~~~~~

- twisted.web.client now exposes the RequestGenerationFailed exception type.
(5310)
- twisted.web.client.Agent will now parse responses that begin with a status
line that is missing a phrase. (7673)
- twisted.web.http.HTTPChannel and twisted.web._http2.H2Connection have been
enhanced so that after they time out they wait a small amount of time to
allow the connection to close gracefully and, if it does not, they forcibly
close it to avoid allowing malicious clients to forcibly keep the connection
open. (8902)


Misc
~~~~

- 8981, 9018, 9067, 9090, 9092, 9093, 9096


Words
-----

Deprecations and Removals
~~~~~~~~~~~~~~~~~~~~~~~~~

- twisted.words.protocols.oscar, which is client code for Oscar/ICQ, was
deprecated in 16.2.0 and has now been removed. (9024)


Twisted Core 17.1.0 (2017-02-04)
================================

Features
--------
- Added a new interface,
twisted.internet.interfaces.IHostnameResolver, which is an
improvement to twisted.internet.interfaces.IResolverSimple that
supports resolving multiple addresses as well as resolving IPv6
addresses.  This is a native, asynchronous, Twisted analogue to
getaddrinfo. (4362)
- twisted.web.client.Agent now uses HostnameEndpoint internally; as a
consequence, it now supports IPv6, as well as making connections
faster and more reliably to hosts that have more than one DNS name.
(6712)
- twisted.internet.ssl.CertificateOptions now has the new constructor
argument 'raiseMinimumTo', allowing you to increase the minimum TLS
version to this version or Twisted's default, whichever is higher.
The additional new constructor arguments 'lowerMaximumSecurityTo'
and 'insecurelyLowerMinimumTo' allow finer grained control over
negotiated versions that don't honour Twisted's defaults, for
working around broken peers, at the cost of reducing the security
of the TLS it will negotiate. (6800)
- twisted.internet.ssl.CertificateOptions now sets the OpenSSL
context's mode to MODE_RELEASE_BUFFERS, which will free the
read/write buffers on idle TLS connections to save memory. (8247)
- trial --help-reactors will only list reactors which can be
imported.  (8745)
- twisted.internet.endpoints.HostnameEndpoint now uses the passed
reactor's implementation of
twisted.internet.interfaces.IReactorPluggableResolver to resolve
hostnames rather than its own deferToThread/getaddrinfo wrapper;
this makes its hostname resolution pluggable via a public API.
(8922)
- twisted.internet.reactor.spawnProcess now does not emit a
deprecation warning on Unicode arguments. It will encode Unicode
arguments down to bytes using the filesystem encoding on UNIX and
Python 2 on Windows, and pass Unicode through unchanged on Python 3
on Windows. (8941)
- twisted.trial._dist.test.test_distreporter now works on Python 3.
(8943)

Bugfixes
--------
- trial --help-reactors will now display iocp and win32er reactors
with Python 3. (8745)
- twisted.logger._flatten.flattenEvent now handles log_format being
None instead of assuming the value is always a string. (8860)
- twisted.protocol.ftp is now Python 3 compatible (8865)
- twisted.names.client.Resolver can now resolve names with IPv6 DNS
servers. (8877)
- twisted.application.internet.ClientService now waits for existing
connections to disconnect before trying to connect again when
restarting. (8899)
- twisted.internet.unix.Server.doRead and
twisted.internet.unix.Client.doRead no longer fail if recvmsg's
ancillary data contains more than one file descriptor. (8911)
- twist on Python 3 now correctly prints the help text when given no
plugin to run. (8918)
- twisted.python.sendmsg.sendmsg no longer segfaults on Linux +
Python 2. (8969)
- IHandshakeListener providers connected via SSL4ClientEndpoint will
now have their handshakeCompleted methods called. (8973)
- The twist script now respects the --reactor option. (8983)
- Fix crash when using SynchronousTestCase with Warning object which
does not store a string as its first argument (like
libmysqlclient). (9005)
- twisted.python.compat.execfile() does not open files with the
deprecated 'U' flag on Python 3. (9012)

Deprecations and Removals
-------------------------
- twisted.internet.ssl.CertificateOption's 'method' constructor
argument is now deprecated, in favour of the new 'raiseMinimumTo',
'lowerMaximumSecurityTo', and 'insecurelyLowerMinimumTo' arguments.
(6800)
- twisted.protocols.telnet (not to be confused with the supported
twisted.conch.telnet), deprecated since Twisted 2.5, has been
removed. (8925)
- twisted.application.strports.parse, as well as the deprecated
default arguments in strports.service/listen, deprecated since
Twisted 10.2, has been removed. (8926)
- twisted.web.client.getPage and twisted.web.client.downloadPage have
been deprecated in favour of https://pypi.org/project/treq and
twisted.web.client.Agent. (8960)
- twisted.internet.defer.timeout is deprecated in favor of
twisted.internet.defer.Deferred.addTimeout (8971)

Other
-----
- 7879, 8583, 8764, 8809, 8859, 8906, 8910, 8913, 8916,
8934, 8945, 8949, 8950, 8952, 8953, 8959, 8962, 8963,
8967, 8975, 8976, 8993, 9013


Twisted Conch 17.1.0 (2017-02-04)
=================================

Features
--------
- twisted.conch.manhole now works on Python 3. (8327)
- Twisted Conch now supports ECDH key exchanges. (8730)
- Add support in twisted.conch.ssh for hmac-sha2-384 (8784)
- conch and cftp scripts now work on Python 3. (8791)
- twisted.conch.ssh supports ECDH key exchange. (8811)

Bugfixes
--------
- twisted.conch.ssh.keys.Key.fromString now supports OpenSSL private
keys with Windows line endings (\r\n) again (broken since 16.6.0).
(8928)

Improved Documentation
----------------------
- The documentation for
twisted.conch.endpoints.SSHCommandClientEndpoint.existingConnection
now describes where the value for the connection parameter might
come from. (8892)

Other
-----
- 8890, 8894, 8957, 8958, 8968


Twisted Mail 17.1.0 (2017-02-04)
================================

Deprecations and Removals
-------------------------
- twisted.mail.tap (the twist plugin for mail) no longer accepts the
--pop3s option or implicit port numbers to --pop3 and --smtp. This
functionality has been deprecated since 11.0. (8920)


Twisted Names 17.1.0 (2017-02-04)
=================================

Bugfixes
--------
- twisted.names.authority.BindAuthority has been ported to Python 3.
(8880)


Twisted News 17.1.0 (2017-02-04)
================================

No significant changes have been made for this release.


Twisted Pair 17.1.0 (2017-02-04)
================================

No significant changes have been made for this release.


Twisted Runner 17.1.0 (2017-02-04)
==================================

Bugfixes
--------
- On Python 3, procmon now handles process output without exceptions
(8919)


Twisted Web 17.1.0 (2017-02-04)
===============================

Features
--------
- twisted.web.client.Agent now sets ``Content-Length: 0`` for PUT and
POST requests made without a body producer. (8984)

Bugfixes
--------
- twisted.web.http.HTTPFactory now times connections out after one
minute of no data from the client being received, before the
request is complete, rather than twelve hours. (3746)
- twisted.web.http.HTTPChannel, the server class for Twisted's
HTTP/1.1 server, now exerts backpressure against clients that do
not read responses. This means that if a client stops reading from
a socket for long enough, Twisted will stop reading further
requests from that client until it consumes some responses. (8868)
- twisted.web.http_headers.Headers.getRawHeaders no longer attempts
to decode the default value when called with a unicode header name.
(8974)
- twisted.web.http.HTTPChannel is less likely to leak file
descriptors when timing out clients using HTTPS connections. In
some cases it is still possible to leak a file descriptor when
timing out HTTP clients: further patches will address this issue.
(8992)

Other
-----
- 7744, 8909, 8935


Twisted Words 17.1.0 (2017-02-04)
=================================

No significant changes have been made for this release.


Twisted Core 16.6.0 (2016-11-17)
================================

Features
--------
- The twist script can now be run by invoking python -m twisted.
(8657)
- twisted.protocols.sip has been ported to Python 3. (8669)
- twisted.persisted.dirdbm has been ported to Python 3. (8888)

Bugfixes
--------
- twisted.internet.defer.Deferred now implements send, not __send__,
which means that it is now a conforming generator. (8861)
- The IOCP reactor no longer transmits the contents of uninitialized
memory when writing large amounts of data. (8870)
- Deferreds awaited/yielded from in a
twisted.internet.defer.ensureDeferred wrapped coroutine will now
properly raise exceptions. Additionally, it more closely models
asyncio.ensure_future and will pass through Deferreds. (8878)
- Deferreds that are paused or chained on other Deferreds will now
return a result when yielded/awaited in a twisted.internet.defer
.ensureDeferred-wrapped coroutine, instead of returning the
Deferred it was chained to. (8890)

Improved Documentation
----------------------
- twisted.test.proto_helpers is now explicitly covered by the
compatibility policy. (8857)

Other
-----
- 8281, 8823, 8862


Twisted Conch 16.6.0 (2016-11-17)
=================================

Features
--------
- twisted.conch.ssh.keys supports ECDSA keys (8798)
- scripts/ckeygen can now generate ecdsa keys. (8828)
- ckeygen has been ported to Python 3 (8855)

Deprecations and Removals
-------------------------
- twisted.conch.ssh no longer uses gmpy, if available. gmpy is
unmaintained, does not have binary wheels for any platforms, and an
alternative for higher performance is available in the form of
PyPy. (8079)


Twisted Mail 16.6.0 (2016-11-17)
================================

No significant changes have been made for this release.


Twisted Names 16.6.0 (2016-11-17)
=================================

No significant changes have been made for this release.


Twisted News 16.6.0 (2016-11-17)
================================

No significant changes have been made for this release.


Twisted Pair 16.6.0 (2016-11-17)
================================

No significant changes have been made for this release.


Twisted Runner 16.6.0 (2016-11-17)
==================================

No significant changes have been made for this release.


Twisted Web 16.6.0 (2016-11-17)
===============================

Features
--------
- twisted.web.server.Site's HTTP/2 server support now emits vastly
fewer WINDOW_UPDATE frames than previously. (8681)

Bugfixes
--------
- twisted.web.Agent now tolerates receiving unexpected status codes
in the 100 range by discarding them, which is what RFC 7231
recommends doing. (8885)
- twisted.web._http.H2Stream's getHost and getPeer implementations
now actually return the host and peer instead of None. (8893)


Twisted Words 16.6.0 (2016-11-17)
=================================

Features
--------
- twisted.words.protocols.irc has been ported to Python 3 (6320)


Twisted Core 16.5.0 (2016-10-28)
================================

Features
--------
- Added twisted.internet.defer.Deferred.addTimeout method to enable
timeouts of deferreds. (5786)
- Perspective Broker (the twisted.spread package) has been ported to
Python 3 (7598)
- 'yield from' can now be used on Deferreds inside generators, when
the generator is wrapped with
twisted.internet.defer.ensureDeferred. (8087)
- twisted.internet.asyncioreactor has been added, which is a Twisted
reactor on top of Python 3.4+'s native asyncio reactor. It can be
selected by passing "--reactor=asyncio" to Twisted tools (twistd,
Trial, etc) on platforms that support it (Python 3.4+). (8367)
- twisted.python.zippath now works on Windows with Python 3. (8747)
- twisted.internet.cfreactor is ported to Python 3 and supported on
2.7 and 3.5+. (8838)

Bugfixes
--------
- twisted.internet.test.test_iocp and twisted.internet.test.test_tcp
have been fixed to work under Python 3 with the Windows IOCP
reactor (8631)
- Arguments to processes on Windows are now passed mbcs-encoded
arguments.  This prevents process-related tests from hanging on
Windows with Python 3. (8735)
- Client and server TLS connections made via the client TLS endpoint
and the server SSL endpoint, as well as any other code that uses
twisted.internet.ssl.CertificateOptions, no longer accept 3DES-
based cipher suites by default, to defend against SWEET32. (8781)
- twisted.logger.jsonFileLogObserver no longer emits non-JSON
tracebacks into its file; additionally,
twisted.logger.formatEventAsClassicLogText now includes traceback
information for the log event it formats. (8858)
- twisted.python.version now exports a version of Incremental that is
16.10.1 or higher, making t.p.v.Version package name comparisons
case-insensitive. (8863)
- twisted.python.reflect.safe_str encodes unicode as ascii with
backslashreplace error handling on Python 2. (8864)

Improved Documentation
----------------------
- The twisted.internet.interfaces.IProtocol.dataReceived() method
takes one parameter of type bytes.  T

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant