github twisted/twisted twisted-21.2.0rc1

pre-release3 years ago

Twisted 21.2.0.rc1 (2021-02-14)

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)

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)

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

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

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

Don't miss a new twisted release

NewReleases is sending notifications on new releases.