NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1222 most downloaded on PyPI
An asynchronous networking framework written in Python
Last release 4 months ago
11 May 2026
Ships unpredictably
gaps range from 8 days to 11 months
Most releases are documented
notes for 41 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
21 years old
111 releases · first in 2005
twisted.python.constants is deprecated in preference to constantly on PyPI, which is the same code rolled into its own package.
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)
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)
The twisted.internet.interfaces.IProtocol.dataReceived() method takes one parameter of type bytes. This has been clarified in the doc string. (#8763)
twisted.python.constants is deprecated in preference to constantly on PyPI, which is the same code rolled into its own package. (#7351)
twisted.python.dist3 has been made private API. (#8761)
When the source code is checked out, bin/trial is no longer in the tree. Developers working on the Twisted source code itself should either (1) run all tests under tox, or (2) run 'python setup.py develop' to install trial before running any tests. (#8765)
twisted.protocols.gps, deprecated since Twisted 15.2, has been removed. (#8787)
#4926, #7868, #8209, #8214, #8271, #8308, #8324, #8348, #8367, #8377, #8378, #8379, #8380, #8381, #8383, #8385, #8387, #8388, #8389, #8391, #8392, #8393, #8394, #8397, #8406, #8410, #8412, #8413, #8414, #8421, #8425, #8426, #8430, #8432, #8434, #8435, #8437, #8438, #8439, #8444, #8451, #8452, #8453, #8454, #8456, #8457, #8459, #8462, #8463, #8465, #8468, #8469, #8479, #8482, #8483, #8486, #8490, #8493, #8494, #8496, #8497, #8498, #8499, #8501, #8503, #8504, #8507, #8508, #8510, #8513, #8514, #8515, #8516, #8517, #8520, #8521, #8522, #8523, #8524, #8527, #8528, #8529, #8531, #8532, #8534, #8536, #8537, #8538, #8543, #8544, #8548, #8552, #8553, #8554, #8555, #8557, #8560, #8563, #8565, #8568, #8569, #8572, #8573, #8574, #8580, #8581, #8582, #8586, #8589, #8590, #8592, #8593, #8598, #8603, #8604, #8606, #8609, #8615, #8616, #8617, #8618, #8619, #8621, #8622, #8624, #8627, #8628, #8630, #8632, #8634, #8640, #8644, #8645, #8646, #8647, #8662, #8664, #8666, #8668, #8671, #8672, #8677, #8678, #8684, #8691, #8702, #8705, #8706, #8716, #8719, #8724, #8725, #8727, #8734, #8741, #8749, #8752, #8754, #8755, #8756, #8757, #8758, #8767, #8773, #8776, #8779, #8780, #8785, #8788, #8789, #8790, #8792, #8793, #8799, #8808, #8817, #8839, #8845, #8852
One column per quarter.
Nothing published for this version
Nothing published for this version
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.s
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, now support ChaCha20 ciphers when available from the OpenSSL on the system. (#8760)
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)
This is a precursor to formally deprecating the former class in favour of the latter.
Add twisted.application.twist, meant to eventually replace twistd with a simpler interface. Add twisted.application.runner API, currently private, which twist is built on. (#5705)
The new interface IHandshakeListener that can be implemented by any Protocol provides a callback that is called when the TLS handshake has been completed, allowing Protocols to make decisions about the TLS configuration before application data is sent. (#6024)
twisted.python.syslog has been ported to Python 3. (#7957)
twisted.internet.defer.ensureDeferred has been added, similar to asyncio's ensure_future. Wrapping a coroutine (the result of a function defined using async def, available only on Python 3.5+) with it allows you to use the "await" keyword with Deferreds inside the coroutine, similar to "yield" when using inlineCallbacks. (#8088)
twisted.internet.inotify have been ported to Python 3 (#8211)
twisted.enterprise has been ported to Python 3. The third-party pysqlite2 package has not been ported to Python 3, so any database connector based on pysqlite2 cannot be used. Instead the sqlite3 module included with Python 3 should be used. (#8303)
Scripts such as cftp, ckeygen, conch, mailmail, pyhtmlizer, tkconch, twistd and trial have been updated to be setuptools console scripts. (#8491)
twisted.pair.raw and twisted.pair.rawudp have been ported to Python 3 (#8545)
twisted.internet.baseprocess has been ported to Python 3. (#8546)
twisted.python.dist has been ported to Python 3 (#8556)
twisted.internet.interfaces.IOpenSSLContextFactory has been added, which defines the interface provided both by the old-style twisted.internet.ssl.ContextFactory class and the newer twisted.interface.ssl.CertificateOptions class. This is a precursor to formally deprecating the former class in favour of the latter. (#8597)
twisted.python.zipstream has been ported to Python 3 (#8607)
Zip file entries returned by ChunkingZipFile.readfile() are now context managers. (#8641)
twisted.protocols.socks has been ported to Python 3 (#8665)
twisted.spread.banana has been ported to Python 3 (#8667)
Trial can now be invoked via "python -m twisted.trial". (#8712)
twisted.protocols.postfix has been ported to Python 3 (#8713)
twisted.protocols.wire and twisted.protocols.portforwarding have been ported to Python 3 (#8717)
twisted.protocols.stateful has been ported to Python 3 (#8718)
twisted.protocols.memcache is now compatible with Python 3. (#8726)
twisted.protocols.dict has been ported to Python 3 (#8732)
pip install -e ".[dev]" now works on Python 3, but it will not install twistedchecker or pydoctor, which have not yet been ported. (#7807)
twistd can now properly daemonize on Linux/Unix when run under Python3 and will not hang indefinitely. (#8155)
tox can now be used to run Twisted's tests on Windows (#8578)
twisted.python.filepath.setContent() and twisted.python.filepath.moveTo() now work on Windows with Python 3 (#8610)
twisted.internet.win32eventreactor works on Python 3 in Windows (#8626)
The TLS payload buffer size was reduced in twisted.protocols.tls.TLSMemoryBIOProtocol. This fixes writing of very long strings using the TLSv1_1 method from the OpenSSL library. (#8693)
twisted.logger._flatten.flattenEvent() now does not crash if passed a unicode string. (#8699)
twisted.application.strports.service (and thus twistd) no longer swallow asynchronous exceptions from IStreamServerEndpoint.listen. (#8710)
_twistd_unix now reports the name and encoded message of an exception raised during daemonization on Python 2 and 3. (#8731)
twisted.protocols.amp now handles floats on Python 3. Previously, sending a float would raise a ValueError. (#8746)
Some broken links to xprogramming in the unit test documentation have been fixed. (#8579)
The Twisted Tutorial "The Evolution of Finger" has been updated to use endpoints throughout. (#8588)
Updated the mail examples to use endpoints and better TLS. (#8595)
Changed the Twisted Web howto to use endpoints and modern TLS. (#8596)
Updated bug report URL in man pages. (#8600)
In twisted.internet.udp.Port, write() takes a parameter of type bytes. This is clarified in the docstring. (#8635)
twisted.internet.interfaces.ITransport.write() and twisted.internet.interfaces.ITransport.writeSequence() take bytes parameters. (#8636)
twisted.python.filepath.AbstractFilePath.getContent() returns bytes. The docstring was updated to clarify this. (#8637)
Updated release notes to reflect that 15.4 is the last version that supported Python 2.6, not 15.5. (#8651)
A missing space in defer.rst resulted in badly rendered output. The space was added. (#8723)
Dropped support for pyOpenSSL versions less than 16.0.0. (#8441)
#4926, #7868, #8209, #8271, #8276, #8308, #8324, #8348, #8367, #8377, #8378, #8379, #8380, #8381, #8383, #8385, #8386, #8387, #8388, #8389, #8391, #8392, #8393, #8394, #8397, #8406, #8410, #8412, #8413, #8414, #8421, #8425, #8426, #8428, #8429, #8430, #8432, #8434, #8435, #8437, #8438, #8439, #8444, #8451, #8452, #8453, #8454, #8456, #8457, #8459, #8462, #8463, #8465, #8468, #8469, #8479, #8482, #8483, #8486, #8490, #8493, #8494, #8496, #8497, #8498, #8499, #8501, #8503, #8504, #8507, #8508, #8510, #8513, #8514, #8515, #8516, #8517, #8520, #8521, #8522, #8523, #8524, #8527, #8528, #8529, #8531, #8532, #8534, #8536, #8537, #8538, #8540, #8541, #8543, #8548, #8552, #8553, #8554, #8555, #8557, #8560, #8563, #8565, #8568, #8569, #8572, #8573, #8574, #8577, #8580, #8581, #8582, #8584, #8586, #8589, #8590, #8592, #8593, #8598, #8603, #8604, #8606, #8609, #8615, #8616, #8617, #8618, #8619, #8621, #8624, #8627, #8628, #8630, #8632, #8634, #8640, #8644, #8645, #8646, #8647, #8648, #8662, #8664, #8666, #8668, #8671, #8672, #8684, #8691, #8702, #8703, #8705, #8706, #8716, #8719, #8724, #8725, #8727, #8733, #8734, #8741
Nothing published for this version
Nothing published for this version
twisted.python.reflect's deprecated functions have been removed. This includes funcinfo (deprecated since Twisted 2.5), allYourBase and accumulateBase…
Defined a new interface, IProtocolNegotiationFactory, that can be implemented by IOpenSSLClientConnectionCreator or IOpenSSLServerConnectionCreator factories to allow them to offer protocols for negotiation using ALPN or NPN during the TLS handshake. (#8188)
twisted.trial.unittest.SynchronousTestCase.assertRegex is now available to provide Python 2.7 and Python 3 compatibility. (#8372)
Development documentation has been updated to refer to Git instead of SVN. (#8335)
twisted.python.reflect's deprecated functions have been removed. This includes funcinfo (deprecated since Twisted 2.5), allYourBase and accumulateBases (deprecated since Twisted 11.0), getcurrent and isinst (deprecated since Twisted 14.0). (#8293)
twisted.scripts.tap2deb and twisted.scripts.tap2rpm (along with the associated executables), deprecated since Twisted 15.2, have now been removed. (#8326)
twisted.spread.ui has been removed. (#8329)
twisted.manhole -- not to be confused with manhole in Conch -- has been removed. This includes the semi-functional Glade reactor, the manhole application, and the manhole-old twistd plugin. (#8330)
twisted.protocols.sip.DigestAuthorizer, BasicAuthorizer, and related functions have been removed. (#8445)
#7229, #7826, #8290, #8323, #8331, #8336, #8341, #8344, #8345, #8347, #8351, #8363, #8365, #8366, #8374, #8382, #8384, #8390, #8395, #8396, #8398, #8399, #8400, #8401, #8403, #8404, #8405, #8407, #8408, #8409, #8415, #8416, #8417, #8418, #8419, #8420, #8427, #8433, #8436, #8461
Deprecation documentation was extended to include a quick check list for developers.
twisted.protocols.haproxy.proxyEndpoint provides an endpoint that wraps any other stream server endpoint with the PROXY protocol that retains information about the original client connection handled by the proxy; this wrapper is also exposed via the string description prefix 'haproxy'; for example 'twistd web --port haproxy:tcp:8765'. (#8203)
twisted.application.app.AppLogger (used by twistd) now uses the new logging system. (#8235)
twisted.application-using applications (trial, twistd, etc) now work with the --reactor option on Python 3. (#8299)
Failures are now logged by STDLibLogObserver. (#8316)
Deprecation documentation was extended to include a quick check list for developers. (#5645)
The Twisted Deprecation Policy is now documented in the Twisted Development Policy. (#8082)
The documentation examples for UDP now work on Python 3. (#8280)
Passing a factory that produces log observers that do not implement twisted.logger.ILogObserver or twisted.python.log.ILogObserver to twisted.application.app.AppLogger has been deprecated. This is primarily used by twistd's --logger option. Please use factories that produce log observers implementing twisted.logger.ILogObserver or the legacy twisted.python.log.ILogObserver. (#8235)
twisted.internet.qtreactor, a stub that imported the external qtreactor, has been removed. (#8288)
#6266, #8231, #8244, #8256, #8266, #8269, #8275, #8277, #8286, #8291, #8292, #8304, #8315
No significant changes have been made for this release.
No significant changes have been made for this release.
twisted.application.internet.ClientService, a service that maintains a persistent outgoing endpoint-based connection; a replacement for ReconnectingCl
twisted.application.internet.ClientService, a service that maintains a persistent outgoing endpoint-based connection; a replacement for ReconnectingClientFactory that uses modern APIs. (#4735)
Twisted now uses setuptools' sdist to build tarballs. (#7985)
Twisted is now compatible with OpenSSL 1.0.2f. (#8189)
#4543, #8124, #8193, #8210, #8220, #8223, #8226, #8242
twisted.internet.task.LoopingCall.deferred is now deprecated. Use the deferred returned by twisted.internet.task.LoopingCall.start()
todo parameter for IReporter.addExpectedSuccess and IReporter.addUnexpectedSuccess is no longer required. If not provided, a sensible default will be used instead. (#4811)
A new string endpoint type, "tls:", allows for properly-verified TLS (unlike "ssl:", always matching hostname resolution with certificate hostname verification) with faster IPv4/IPv6 connections. This comes with an accompanying function, twisted.internet.endpoints.wrapClientTLS, which can wrap an arbitrary client endpoint with client TLS. (#5642)
twisted.python.filepath.makedirs accepts an ignoreExistingDirectory flag which ignore the OSError raised by os.makedirs if requested directory already exists. (#5704)
twisted.protocols.amp has been ported to Python 3. (#6833)
twisted.internet.ssl.trustRootFromCertificates returns an object suitable for use as trustRoot= to twisted.internet.ssl.optionsForClientTLS that trusts multiple certificates. (#7671)
twisted.python.roots is now ported to Python 3. (#8131)
twisted.cred.strports has been ported to Python 3. (#8216)
Expected failures from standard library unittest no longer fail with Trial reporters. (#4811)
twisted.internet.endpoints.HostnameEndpoint.connect no longer fails with an AlreadyCalledError when the Deferred it returns is cancelled after all outgoing connection attempts have been made but none have yet succeeded or failed. (#8014)
twisted.internet.task.LoopingCall.withCount when run with internal of 0, now calls the countCallable with 1, regardless of the time passed between calls. (#8125)
twisted.internet.endpoints.serverFromString, when parsing a SSL strports definition, now gives the correct error message when an empty chain file is given. (#8222)
The Twisted Project has adopted the Contributor Covenant as its Code of Conduct. (#8173)
twisted.internet.task.LoopingCall.deferred is now deprecated. Use the deferred returned by twisted.internet.task.LoopingCall.start() (#8116)
twisted.internet.gtkreactor, the GTK+ 1 reactor deprecated since Twisted 10.1, has been removed. This does not affect the GTK2, GLib, GTK3, or GObject-Introspection reactors. (#8145)
twisted.protocols.mice, containing a Logitech MouseMan serial driver, has been deprecated. (#8148)
The __version__ attribute of former subprojects (conch, mail, names, news, pair, runner, web, and words) is deprecated in preference to the central twisted.__version__. (#8219)
#6842, #6978, #7668, #7791, #7881, #7943, #7944, #8050, #8104, #8115, #8119, #8122, #8139, #8144, #8154, #8162, #8180, #8187, #8220
twisted.python.util.OrderedDict is now deprecated, and uses of it in Twisted are replaced with collections.OrderedDict.
Python 3.5 (on POSIX) support has been added.
This release introduces changes that are required for Conch's SSH implementation to work with OpenSSH 6.9+ servers.
twisted.python.url is a new abstraction for URLs, supporting RFC 3987 IRIs. (#5388)
twisted.python.logfile is now ported to Python 3. (#6749)
twisted.python.zippath has been ported to Python 3. (#6917)
twisted.internet.ssl.CertificateOptions and twisted.internet.ssl.optionsForClientTLS now take a acceptableProtocols parameter that enables negotiation of the next protocol to speak after the TLS handshake has completed. This field advertises protocols over both NPN and ALPN. Also added new INegotiated interface for TLS interfaces that support protocol negotiation. This interface adds a negotiatedProtocol property that reports what protocol, if any, was negotiated in the TLS handshake. (#7860)
twisted.python.urlpath.URLPath now operates correctly on Python 3, using bytes instead of strings, and introduces the fromBytes constructor to assist with creating them cross-version. (#7994)
twisted.application.strports is now ported to Python 3. (#8011)
twistd (the Twisted Daemon) is now ported to Python 3. (#8012)
Python 3.5 is now supported on POSIX platforms. (#8042)
twisted.internet.serialport is now ported on Python 3. (#8099)
twisted.logger.formatEvent now can format an event if it was flattened (twisted.logger.eventAsJSON does this) and has text after the last replacement field. (#8003)
twisted.cred.checkers.FilePasswordDB now logs an error if the credentials db file does not exist, no longer raises an unhandled error. (#8028)
twisted.python.threadpool.ThreadPool now properly starts enough threads to do any work scheduled before ThreadPool.start() is called, such as when work is scheduled in the reactor via reactor.callInThread() before reactor.run(). (#8090)
Twisted Development test standard documentation now contain information about avoiding test data files. (#6535)
The documentation for twisted.internet.defer.DeferredSemaphore now describes the actual usage for limit and tokens instance attributes. (#8024)
twisted.python._initgroups, a C extension, has been removed and stdlib support is now always used instead. (#5861)
Python 2.6 is no longer supported. (#8017)
twisted.python.util.OrderedDict is now deprecated, and uses of it in Twisted are replaced with collections.OrderedDict. (#8051)
twisted.persisted.sob.load, twisted.persisted.sob.loadValueFromFile and twisted.persisted.sob.Persistent.save() are now deprecated when used with a passphrase. The encyption used by these methods are weak. (#8081)
twisted.internet.interfaces.IStreamClientEndpointStringParser has been removed and Twisted will no longer use parsers implementing this interface. (#8094)
#5976, #6628, #6894, #6980, #7228, #7693, #7731, #7997, #8046, #8054, #8056, #8060, #8063, #8064, #8068, #8072, #8091, #8095, #8096, #8098, #8106
This is the last Twisted release where Python 2.6 is supported, on any platform.
This is the last Twisted release where Python 2.6 is supported, on any platform.
Trial has been ported to Python 3. (#5965)
Twisted now requires setuptools for installation. (#7177)
twisted.internet.endpoints.clientFromString is now ported to Python 3. (#7973)
twisted.internet._sslverify now uses SHA256 instead of MD5 for certificate request signing by default. (#7979)
twisted.internet.endpoints.serverFromString is now ported to Python 3. (#7982)
twisted.positioning is now ported to Python 3. (#7987)
twisted.python.failure.Failure's __repr__ now includes the exception message. (#8004)
fixed a bug which could lead to a hang at shutdown in twisted.python.threadpool. (#2673)
twisted.internet.kqreactor on Python 3 now supports EINTR (Control-C) gracefully. (#7887)
Fix a bug introduced in 15.3.0; pickling a lambda function after importing twisted.persisted.styles raises PicklingError rather than AttributeError. (#7989)
#7902, #7980, #7990, #7992
twisted.python.win32.getProgramsMenuPath and twisted.python.win32.getProgramFilesPath are now deprecated.
twisted.application.app is now ported to Python 3 (#6914)
twisted.plugin now supports Python 3 (#7182)
twisted.cred.checkers is now ported to Python 3. (#7834)
twisted.internet.unix is now ported to Python 3. (#7874)
twisted.python.sendmsg has now been ported to Python 3, using the stdlib sendmsg/recvmsg functionality when available. (#7884)
twisted.internet.protocol.Factory now uses the new logging system (twisted.logger) for all its logging statements. (#7897)
twisted.internet.stdio is now ported to Python 3. (#7899)
The isDocker method has been introduced on twisted.python.runtime.Platform to detect if the running Python is inside a Docker container. Additionally, Platform.supportsINotify() now returns False if isDocker() is True, because of many Docker storage layers having broken INotify. (#7968)
twisted.logger.LogBeginner.beginLoggingTo now outputs the correct warning when it is called more than once. (#7916)
twisted.cred.pamauth (providing PAM support) has been removed due to it being unusable in current supported Python versions. (#3728)
twisted.application.app.HotshotRunner (twistd's hotshot profiler module) is removed and twistd now uses cProfile by default. (#5137)
twisted.python.win32.getProgramsMenuPath and twisted.python.win32.getProgramFilesPath are now deprecated. (#7883)
twisted.lore has now been removed, in preference to Sphinx. (#7892)
Deprecated zsh tab-complete files are now removed in preference to twisted.python.usage's tab-complete functionality. (#7898)
twisted.python.hashlib, deprecated since 13.1, has now been removed. (#7905)
twisted.trial.runner.DryRunVisitor, deprecated in Twisted 13.0, has now been removed. (#7919)
twisted.trial.util.getPythonContainers, deprecated since Twisted 12.3, is now removed. (#7920)
Twisted no longer supports being packaged as subprojects. (#7964)
#6136, #7035, #7803, #7817, #7827, #7844, #7876, #7906, #7908, #7915, #7931, #7940, #7967, #7983
twisted.logger now marks the isError key correctly on legacy events generated by writes to stderr.
twisted.logger now marks the isError key correctly on legacy events generated by writes to stderr. (#7903)
twisted.logger's documentation is now correctly listed in the table of contents. (#7904)
tkunzip and tapconvert in twisted.scripts were deprecated in 11.0 and 12.1 respectively, and are now removed.
twisted.internet.process has now been ported to Python 3. (#5987)
twisted.cred.credentials is now ported to Python 3. (#6176)
twisted.trial.unittest.TestCase's assertEqual, assertTrue, and assertFalse methods now pass through the standard library's more informative failure messages. (#6306)
The new package twisted.logger provides a new, fully tested, and feature-rich logging framework. The old module twisted.python.log is now implemented using the new framework. The new logger HOWTO documents the new framework. (#6750)
twisted.python.modules is now ported to Python 3. (#7804)
twisted.python.filepath.FilePath now supports Unicode (text) paths. Like the os module, instantiating it with a Unicode path will return a Unicode-mode FilePath, instantiating with a bytes path will return a bytes-mode FilePath. (#7805)
twisted.internet.kqreactor is now ported to Python 3 (#7823)
twisted.internet.endpoints.ProcessEndpoint is now ported to Python 3. (#7824)
twisted.python.filepath.FilePath now has asBytesMode and asTextMode methods which return a FilePath in the requested mode. (#7830)
twisted.python.components.proxyForInterface now creates method proxies that can be used with functools.wraps. (#7832)
The tls optional dependency will now also install the idna package to validate idna2008 names. (#7853)
Don't raise an exception if DefaultLogObserver.emit() gets an event with a message that raises when repr() is called on it. Specifically: use textFromEventDict() instead of a separate (and inferior) message rendering implementation. (#6569)
twisted.cred.credentials.DigestedCredentials incorrectly handled md5-sess hashing according to the RFC, which has now been fixed. (#7835)
Fixed an issue with twisted.internet.task.LoopingCall.withCount where sometimes the passed callable would be invoked with "0" when we got close to tricky floating point boundary conditions. (#7836)
twisted.internet.defer now properly works with the new logging system. (#7851)
Change messages key to log_io for events generated by LoggingFile. (#7852)
twisted.logger had literal characters in docstrings that are now quoted. (#7854)
twisted.logger now correctly formats a log event with a key named message when passed to a legacy log observer. (#7855)
twisted.internet.endpoints.HostnameEndpoint now uses getaddrinfo properly on Python 3.4 and above. (#7886)
Fix a typo in narrative documentation for logger (#7875)
tkunzip and tapconvert in twisted.scripts were deprecated in 11.0 and 12.1 respectively, and are now removed. (#6747)
twisted.protocols.gps is deprecated in preference to twisted.positioning. (#6810)
twisted.scripts.tap2deb and twisted.scripts.tap2rpm are now deprecated. (#7682)
twisted.trial.reporter.TestResult and twisted.trial.reporter.Reporter contained deprecated methods (since 8.0) which have now been removed. (#7815)
#6027, #7287, #7701, #7727, #7758, #7776, #7786, #7812, #7819, #7831, #7838, #7865, #7866, #7869, #7872, #7877, #7878, #7885
twisted.application.internet.UDPClient, deprecated since Twisted 13.1.0, has been removed.
Optional dependencies can be installed using the extra_requires facility provided by setuptools. (#3696)
Twisted Trial's basics documentation now has a link to the documentation about how Trial finds tests. (#4526)
twisted.application.internet.UDPClient, deprecated since Twisted 13.1.0, has been removed. (#7702)
#6988, #7005, #7006, #7007, #7008, #7044, #7335, #7666, #7723, #7724, #7725, #7748, #7763, #7765, #7766, #7768
twisted.python.filepath.FilePath.statinfo was deprecated.
twisted.internet.protocol.ClientFactory (and subclasses) may now return None from buildProtocol to immediately close the connection. (#710)
twisted.trial.unittest.SynchronousTestCase.assertRaises can now return a context manager. (#5339)
Implementations of twisted.internet.interfaces.IStreamClientEndpoint included in Twisted itself will now handle None being returned from the client factory's buildProtocol method by immediately closing the connection and firing the waiting Deferred with a Failure. (#6976)
inlineCallbacks now supports using the return statement with a value on Python 3 (#7624)
twisted.spread.banana.Banana.sendEncoded() now raises a more informative error message if the user tries to encode objects of unsupported type. (#7663)
twisted.internet.interfaces.IReactorMulticast.listenMultiple works again RHEL 6's python 2.6. (#7159)
Allow much more of the code within Twisted to use ProcessEndpoint by adding IPushProducer and IConsumer interfaces to its resulting transport. (#7436)
twisted.internet.ssl.Certificate(...).getPublicKey().keyHash() now produces a stable value regardless of OpenSSL version. Unfortunately this means that it is different than the value produced by older Twisted versions. (#7651)
twisted.python.reflect.safe_str on Python 3 converts utf-8 encoded bytes to clean str instead of "b'a'" (#7660)
twisted.spread.banana.Banana now raises NotImplementedError when receiving pb messages without pb being the selected dialect (#7662)
The SSL server string endpoint parser (twisted.internet.endpoints.serverFromString) now constructs endpoints which, by default, disable the insecure SSLv3 protocol. (#7684)
The SSL client string endpoint parser (twisted.internet.endpoints.clientFromString) now constructs endpoints which, by default, disable the insecure SSLv3 protocol. (#7686)
inlineCallbacks now has introductory documentation. (#1009)
The echoclient example now uses twisted.internet.task.react. (#7083)
Twisted Trial's how-to documentation now has a link to Twisted's contribution guidelines and has been reformatted. (#7475)
Fixed a path error in the make.bat file for building Sphinx documentation, so that it is now possible to build the documentation using make.bat on Windows. (#7542)
twisted.python.filepath.FilePath.statinfo was deprecated. (#4450)
twisted.internet.defer.deferredGenerator is now deprecated. twisted.internet.defer.inlineCallbacks should be used instead. (#6044)
Pickling twisted.internet.ssl.OptionSSLCertificationOptions and twisted.internet.ssl.Keypair is no longer supported. __getstate__ and __setstate__ methods of these classes have been deprecated. (#6166)
twisted.spread.jelly's support for unjellying "instance" atoms is now deprecated. (#7653)
#3404, #4711, #5730, #6042, #6626, #6947, #6953, #6989, #7032, #7038, #7039, #7097, #7098, #7142, #7143, #7154, #7155, #7156, #7157, #7158, #7160, #7161, #7162, #7164, #7165, #7176, #7234, #7252, #7329, #7333, #7355, #7369, #7370, #7419, #7529, #7531, #7534, #7537, #7538, #7620, #7621, #7633, #7636, #7637, #7638, #7640, #7641, #7642, #7643, #7665, #7667, #7713, #7719
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →