diff -Nru twisted-17.9.0/CONTRIBUTING twisted-18.7.0/CONTRIBUTING --- twisted-17.9.0/CONTRIBUTING 2017-09-08 10:38:34.000000000 +0000 +++ twisted-18.7.0/CONTRIBUTING 2018-03-26 08:19:31.000000000 +0000 @@ -15,8 +15,6 @@ Twisted has a Code of Conduct, available at code_of_conduct.md. -**Warning: pull requests are ignored** unless they have an associated ticket in trac. - File a ticket at: https://twistedmatrix.com/trac/newticket @@ -24,6 +22,7 @@ Twisted uses Trac to keep track of bugs, feature requests, and associated patches because GitHub doesn't provide adequate tooling for its community. +Contributions are managed using GitHub's Pull Requests. For a PR to be accepted it needs to have: * all Travis CI tests passing diff -Nru twisted-17.9.0/debian/changelog twisted-18.7.0/debian/changelog --- twisted-17.9.0/debian/changelog 2018-04-20 22:55:26.000000000 +0000 +++ twisted-18.7.0/debian/changelog 2018-08-14 19:15:10.000000000 +0000 @@ -1,3 +1,41 @@ +twisted (18.7.0-2) unstable; urgency=medium + + * python{,3}-hamcrest is only a test dependency, not a runtime dependency. + + -- Matthias Klose Tue, 14 Aug 2018 21:15:10 +0200 + +twisted (18.7.0-1) unstable; urgency=medium + + * New upstream version. + * Remove patches applied upstream. + * Stop applying the fix for #772629, upstream ticket #7730. + + -- Matthias Klose Tue, 14 Aug 2018 14:46:11 +0200 + +twisted (18.4.0-3) unstable; urgency=medium + + * Team upload. + * Declare Breaks against h2 before 3.0.0 + + -- Andrej Shadura Mon, 13 Aug 2018 15:44:16 +0200 + +twisted (18.4.0-2) unstable; urgency=medium + + * Fixup async issues and compatibility with Python 3.7 (Gianfranco + Costamagna). Closes: #902766. + * Drop the first chunk of the 0011-fix-broken-sslverify-tests patch, + works on Debian only. + + -- Matthias Klose Tue, 03 Jul 2018 05:50:32 +0200 + +twisted (18.4.0-1) unstable; urgency=medium + + * New upstream version 18.4.0 + * Add .travis.yml for CI on Travis (will need to be moved to Salsa) + * Remove myself from Uploaders + + -- Free Ekanayaka Sun, 06 May 2018 09:19:29 +0000 + twisted (17.9.0-2) unstable; urgency=medium * Team upload. diff -Nru twisted-17.9.0/debian/control twisted-18.7.0/debian/control --- twisted-17.9.0/debian/control 2018-04-20 22:47:06.000000000 +0000 +++ twisted-18.7.0/debian/control 2018-08-14 12:46:46.000000000 +0000 @@ -2,8 +2,7 @@ Section: python Priority: optional Maintainer: Debian Python Modules Team -Uploaders: Matthias Klose , - Free Ekanayaka +Uploaders: Matthias Klose Build-Depends: debhelper (>= 9), dh-python, patch, @@ -26,7 +25,7 @@ python3-hyperlink, python3-doc Build-Depends-Indep: python3-sphinx -Standards-Version: 4.1.0 +Standards-Version: 4.1.5 Homepage: https://twistedmatrix.com/ Vcs-Browser: https://salsa.debian.org/python-team/modules/twisted Vcs-Git: https://salsa.debian.org/python-team/modules/twisted.git @@ -49,6 +48,7 @@ Provides: ${python:Provides} Conflicts: python3-twisted-experimental Replaces: python3-twisted-experimental +Breaks: python3-h2 (<< 3.0.0) Description: Event-based framework for internet applications It includes a web server, a telnet server, a multiplayer RPG engine, a generic client and server for remote object access, and APIs for creating @@ -146,6 +146,7 @@ python-twisted-words (<< 15.5.0-3), torbrowser-launcher (<= 0.2.0-1~), python-scrapy (<< 1.0.0-1~), + python-h2 (<< 3.0.0), txsocksx (<< 1.13.0.4-1~) Description: Event-based framework for internet applications It includes a web server, a telnet server, a multiplayer RPG engine, a diff -Nru twisted-17.9.0/debian/patches/0002-combinedlog.patch twisted-18.7.0/debian/patches/0002-combinedlog.patch --- twisted-17.9.0/debian/patches/0002-combinedlog.patch 2018-04-20 22:54:39.000000000 +0000 +++ twisted-18.7.0/debian/patches/0002-combinedlog.patch 2018-08-14 12:47:07.000000000 +0000 @@ -16,20 +16,20 @@ =================================================================== --- a/src/twisted/web/http.py +++ b/src/twisted/web/http.py -@@ -2535,7 +2535,7 @@ def combinedLogFormatter(timestamp, requ +@@ -2631,7 +2631,7 @@ def combinedLogFormatter(timestamp, requ referrer = _escape(request.getHeader(b"referer") or b"-") agent = _escape(request.getHeader(b"user-agent") or b"-") line = ( - u'"%(ip)s" - - %(timestamp)s "%(method)s %(uri)s %(protocol)s" ' + u'%(ip)s - - %(timestamp)s "%(method)s %(uri)s %(protocol)s" ' u'%(code)d %(length)s "%(referrer)s" "%(agent)s"' % dict( - ip=_escape(request.getClientIP() or b"-"), + ip=_escape(ip), timestamp=timestamp, Index: b/src/twisted/web/test/test_web.py =================================================================== --- a/src/twisted/web/test/test_web.py +++ b/src/twisted/web/test/test_web.py -@@ -1279,7 +1279,7 @@ class AccessLogTestsMixin(object): +@@ -1393,7 +1393,7 @@ class AccessLogTestsMixin(object): self.assertEqual( # Client IP @@ -38,7 +38,7 @@ # Some blanks we never fill in b'- - ' # The current time (circa 1234567890) -@@ -1372,7 +1372,7 @@ class CombinedLogFormatterTests(unittest +@@ -1486,7 +1486,7 @@ class CombinedLogFormatterTests(unittest line = http.combinedLogFormatter(timestamp, request) self.assertEqual( @@ -47,7 +47,7 @@ u'"POS\\x81 /dummy HTTP/1.0" 123 - "evil \\x83" "evil \\x84"', line) -@@ -1464,7 +1464,7 @@ class LogEscapingTests(unittest.TestCase +@@ -1618,7 +1618,7 @@ class LogEscapingTests(unittest.TestCase self.site._logDateTime = "[%02d/%3s/%4d:%02d:%02d:%02d +0000]" % ( 25, 'Oct', 2004, 12, 31, 59) self.assertLogs( @@ -56,7 +56,7 @@ b'"GET /dummy HTTP/1.0" 123 - "-" "-"\n') -@@ -1476,7 +1476,7 @@ class LogEscapingTests(unittest.TestCase +@@ -1630,7 +1630,7 @@ class LogEscapingTests(unittest.TestCase 25, 'Oct', 2004, 12, 31, 59) self.request.method = b'G"T' self.assertLogs( @@ -65,7 +65,7 @@ b'"G\\"T /dummy HTTP/1.0" 123 - "-" "-"\n') -@@ -1488,7 +1488,7 @@ class LogEscapingTests(unittest.TestCase +@@ -1642,7 +1642,7 @@ class LogEscapingTests(unittest.TestCase 25, 'Oct', 2004, 12, 31, 59) self.request.uri = b'/dummy"withquote' self.assertLogs( @@ -74,7 +74,7 @@ b'"GET /dummy\\"withquote HTTP/1.0" 123 - "-" "-"\n') -@@ -1500,7 +1500,7 @@ class LogEscapingTests(unittest.TestCase +@@ -1654,7 +1654,7 @@ class LogEscapingTests(unittest.TestCase 25, 'Oct', 2004, 12, 31, 59) self.request.clientproto = b'HT"P/1.0' self.assertLogs( @@ -83,7 +83,7 @@ b'"GET /dummy HT\\"P/1.0" 123 - "-" "-"\n') -@@ -1515,7 +1515,7 @@ class LogEscapingTests(unittest.TestCase +@@ -1669,7 +1669,7 @@ class LogEscapingTests(unittest.TestCase b'referer', b'http://malicious" ".website.invalid') self.assertLogs( @@ -92,7 +92,7 @@ b'"GET /dummy HTTP/1.0" 123 - ' b'"http://malicious\\" \\".website.invalid" "-"\n') -@@ -1530,7 +1530,7 @@ class LogEscapingTests(unittest.TestCase +@@ -1684,7 +1684,7 @@ class LogEscapingTests(unittest.TestCase self.request.requestHeaders.addRawHeader(b'user-agent', b'Malicious Web" Evil') self.assertLogs( diff -Nru twisted-17.9.0/debian/patches/0011-fix-broken-sslverify-tests.patch twisted-18.7.0/debian/patches/0011-fix-broken-sslverify-tests.patch --- twisted-17.9.0/debian/patches/0011-fix-broken-sslverify-tests.patch 2018-04-20 22:54:39.000000000 +0000 +++ twisted-18.7.0/debian/patches/0011-fix-broken-sslverify-tests.patch 2018-08-13 13:44:16.000000000 +0000 @@ -10,15 +10,6 @@ =================================================================== --- a/src/twisted/test/test_sslverify.py +++ b/src/twisted/test/test_sslverify.py -@@ -1678,7 +1678,7 @@ class TrustRootTests(unittest.TestCase): - - # Some combination of OpenSSL and PyOpenSSL is bad at reporting errors. - err = cProto.wrappedProtocol.lostReason.value -- self.assertEqual(err.args[0][0][2], 'tlsv1 alert unknown ca') -+ self.assertEqual(err.args[0][0][2], 'wrong version number') - - - def test_trustRootSpecificCertificate(self): @@ -1698,6 +1698,8 @@ class TrustRootTests(unittest.TestCase): self.assertEqual(cProto.wrappedProtocol.data, sProto.wrappedProtocol.greeting) diff -Nru twisted-17.9.0/debian/patches/0012-conch-debug-message.patch twisted-18.7.0/debian/patches/0012-conch-debug-message.patch --- twisted-17.9.0/debian/patches/0012-conch-debug-message.patch 2018-04-20 22:54:39.000000000 +0000 +++ twisted-18.7.0/debian/patches/0012-conch-debug-message.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -From: Colin Watson -Date: Sat, 14 Apr 2018 01:11:00 +0100 -Subject: Fix conch MSG_DEBUG parsing on Python 2 - -bool(b'\x00...'[0]) returns True, which isn't what's needed here. - -Origin: upstream, https://github.com/twisted/twisted/pull/998 -Bug: https://twistedmatrix.com/trac/ticket/9422 -Bug-Debian: https://bugs.debian.org/895374 ---- - src/twisted/conch/ssh/transport.py | 2 +- - src/twisted/conch/test/test_transport.py | 7 ++++++- - 2 files changed, 7 insertions(+), 2 deletions(-) - -diff --git a/src/twisted/conch/ssh/transport.py b/src/twisted/conch/ssh/transport.py -index f5f85a1..b01ad42 100644 ---- a/src/twisted/conch/ssh/transport.py -+++ b/src/twisted/conch/ssh/transport.py -@@ -960,7 +960,7 @@ class SSHTransportBase(protocol.Protocol): - @type packet: L{bytes} - @param packet: The message data. - """ -- alwaysDisplay = bool(packet[0]) -+ alwaysDisplay = bool(ord(packet[0:1])) - message, lang, foo = getNS(packet[1:], 2) - self.receiveDebug(alwaysDisplay, message, lang) - -diff --git a/src/twisted/conch/test/test_transport.py b/src/twisted/conch/test/test_transport.py -index ac5ce30..fbe2b7d 100644 ---- a/src/twisted/conch/test/test_transport.py -+++ b/src/twisted/conch/test/test_transport.py -@@ -774,7 +774,12 @@ class BaseSSHTransportTests(BaseSSHTransportBaseCase, TransportTestCase): - self.proto.dispatchMessage( - transport.MSG_DEBUG, - b'\x01\x00\x00\x00\x04test\x00\x00\x00\x02en') -- self.assertEqual(self.proto.debugs, [(True, b'test', b'en')]) -+ self.proto.dispatchMessage( -+ transport.MSG_DEBUG, -+ b'\x00\x00\x00\x00\x06silent\x00\x00\x00\x02en') -+ self.assertEqual( -+ self.proto.debugs, -+ [(True, b'test', b'en'), (False, b'silent', b'en')]) - - - def test_sendIgnore(self): diff -Nru twisted-17.9.0/debian/patches/966.patch twisted-18.7.0/debian/patches/966.patch --- twisted-17.9.0/debian/patches/966.patch 1970-01-01 00:00:00.000000000 +0000 +++ twisted-18.7.0/debian/patches/966.patch 2018-08-14 12:56:59.000000000 +0000 @@ -0,0 +1,245 @@ +From dcaf946217b4ea1684e98a9ebc4f9925d76f3108 Mon Sep 17 00:00:00 2001 +From: Konstantin Lopuhin +Date: Mon, 26 Feb 2018 20:00:34 +0300 +Subject: [PATCH 1/9] Fix syntax error under Python 3.7 for async param + +Accept async_ param instead of async, but also support passing async for +backwards compatibility. +--- + src/twisted/conch/manhole.py | 15 ++++++++------- + src/twisted/mail/imap4.py | 19 +++++++++++-------- + src/twisted/python/compat.py | 26 +++++++++++++++++++++++++- + src/twisted/test/test_compat.py | 19 ++++++++++++++++++- + 4 files changed, 62 insertions(+), 17 deletions(-) + +Index: b/src/twisted/conch/manhole.py +=================================================================== +--- a/src/twisted/conch/manhole.py ++++ b/src/twisted/conch/manhole.py +@@ -19,9 +19,11 @@ from io import BytesIO + from twisted.conch import recvline + + from twisted.internet import defer +-from twisted.python.compat import _tokenize ++from twisted.python.compat import _tokenize, _get_async_param + from twisted.python.htmlizer import TokenPrinter + ++ ++ + class FileWrapper: + """ + Minimal write-file-like object. +@@ -151,8 +153,10 @@ class ManholeInterpreter(code.Interactiv + return failure + + +- def write(self, data, async=False): +- self.handler.addOutput(data, async) ++ def write(self, data, isAsync=None, **kwargs): ++ isAsync = _get_async_param(isAsync, **kwargs) ++ self.handler.addOutput(data, isAsync) ++ + + + +@@ -237,14 +241,16 @@ class Manhole(recvline.HistoricRecvLine) + return not w.endswith(b'\n') and not w.endswith(b'\x1bE') + + +- def addOutput(self, data, async=False): +- if async: ++ def addOutput(self, data, isAsync=None, **kwargs): ++ isAsync = _get_async_param(isAsync, **kwargs) ++ if isAsync: + self.terminal.eraseLine() +- self.terminal.cursorBackward(len(self.lineBuffer) + len(self.ps[self.pn])) ++ self.terminal.cursorBackward(len(self.lineBuffer) + ++ len(self.ps[self.pn])) + + self.terminal.write(data) + +- if async: ++ if isAsync: + if self._needsNewline(): + self.terminal.nextLine() + +Index: b/src/twisted/mail/imap4.py +=================================================================== +--- a/src/twisted/mail/imap4.py ++++ b/src/twisted/mail/imap4.py +@@ -42,7 +42,7 @@ from twisted.python.compat import ( + _bytesChr, unichr as chr, _b64decodebytes as decodebytes, + _b64encodebytes as encodebytes, + intToBytes, iterbytes, long, nativeString, networkString, unicode, +- _matchingString, _PY3 ++ _matchingString, _PY3, _get_async_param, + ) + from twisted.internet import interfaces + +@@ -1090,8 +1090,9 @@ class IMAP4Server(basic.LineReceiver, po + self._respond(b'NO', tag, message) + + +- def sendUntaggedResponse(self, message, async=False): +- if not async or (self.blocked is None): ++ def sendUntaggedResponse(self, message, isAsync=None, **kwargs): ++ isAsync = _get_async_param(isAsync, **kwargs) ++ if not isAsync or (self.blocked is None): + self._respond(message, None, None) + else: + self._queuedAsync.append(message) +@@ -2497,25 +2498,28 @@ class IMAP4Server(basic.LineReceiver, po + # + def modeChanged(self, writeable): + if writeable: +- self.sendUntaggedResponse(message=b'[READ-WRITE]', async=True) ++ self.sendUntaggedResponse(message=b'[READ-WRITE]', isAsync=True) + else: +- self.sendUntaggedResponse(message=b'[READ-ONLY]', async=True) ++ self.sendUntaggedResponse(message=b'[READ-ONLY]', isAsync=True) + + + def flagsChanged(self, newFlags): + for (mId, flags) in newFlags.items(): + encodedFlags = [networkString(flag) for flag in flags] + msg = intToBytes(mId) + ( +- b' FETCH (FLAGS (' +b' '.join(encodedFlags) + b'))' ++ b' FETCH (FLAGS (' + b' '.join(encodedFlags) + b'))' + ) +- self.sendUntaggedResponse(msg, async=True) ++ self.sendUntaggedResponse(msg, isAsync=True) + + + def newMessages(self, exists, recent): + if exists is not None: +- self.sendUntaggedResponse(intToBytes(exists) + b' EXISTS', async=True) ++ self.sendUntaggedResponse( ++ intToBytes(exists) + b' EXISTS', isAsync=True) + if recent is not None: +- self.sendUntaggedResponse(intToBytes(recent) + b' RECENT', async=True) ++ self.sendUntaggedResponse( ++ intToBytes(recent) + b' RECENT', isAsync=True) ++ + + + TIMEOUT_ERROR = error.TimeoutError() +Index: b/src/twisted/python/compat.py +=================================================================== +--- a/src/twisted/python/compat.py ++++ b/src/twisted/python/compat.py +@@ -31,6 +31,7 @@ import struct + import sys + import tokenize + from types import MethodType as _MethodType ++import warnings + + from io import TextIOBase, IOBase + +@@ -833,6 +834,34 @@ except ImportError: + from collections import Sequence + + ++def _get_async_param(isAsync=None, **kwargs): ++ """ ++ Provide a backwards-compatible way to get async param value that does not ++ cause a syntax error under Python 3.7. ++ ++ @param isAsync: isAsync param value (should default to None) ++ @type isAsync: L{bool} ++ ++ @param kwargs: keyword arguments of the caller (only async is allowed) ++ @type kwargs: L{dict} ++ ++ @raise TypeError: Both isAsync and async specified. ++ ++ @return: Final isAsync param value ++ @rtype: L{bool} ++ """ ++ if 'async' in kwargs: ++ warnings.warn( ++ "'async' keyword argument is deprecated, please use isAsync", ++ DeprecationWarning, stacklevel=2) ++ if isAsync is None and 'async' in kwargs: ++ isAsync = kwargs.pop('async') ++ if kwargs: ++ raise TypeError ++ return bool(isAsync) ++ ++ ++ + __all__ = [ + "reraise", + "execfile", +@@ -874,4 +903,5 @@ __all__ = [ + "raw_input", + "_tokenize", + "Sequence", ++ "_get_async_param", + ] +Index: b/src/twisted/test/test_compat.py +=================================================================== +--- a/src/twisted/test/test_compat.py ++++ b/src/twisted/test/test_compat.py +@@ -16,7 +16,7 @@ from twisted.python.compat import ( + reduce, execfile, _PY3, _PYPY, comparable, cmp, nativeString, + networkString, unicode as unicodeCompat, lazyByteSlice, reraise, + NativeStringIO, iterbytes, intToBytes, ioType, bytesEnviron, iteritems, +- _coercedUnicode, unichr, raw_input, _bytesRepr ++ _coercedUnicode, unichr, raw_input, _bytesRepr, _get_async_param, + ) + from twisted.python.filepath import FilePath + from twisted.python.runtime import platform +@@ -921,3 +921,37 @@ class FutureBytesReprTests(unittest.Test + ``b`` to the returned repr on both Python 2 and 3. + """ + self.assertEqual(_bytesRepr(b'\x00'), "b'\\x00'") ++ ++ ++ ++class GetAsyncParamTests(unittest.SynchronousTestCase): ++ """ ++ Tests for L{twisted.python.compat._get_async_param} ++ """ ++ ++ def test_get_async_param(self): ++ """ ++ L{twisted.python.compat._get_async_param} uses isAsync by default, ++ or deprecated async keyword argument if isAsync is None. ++ """ ++ self.assertEqual(_get_async_param(isAsync=False), False) ++ self.assertEqual(_get_async_param(isAsync=True), True) ++ self.assertEqual( ++ _get_async_param(isAsync=None, **{'async': False}), False) ++ self.assertEqual( ++ _get_async_param(isAsync=None, **{'async': True}), True) ++ self.assertRaises(TypeError, _get_async_param, False, {'async': False}) ++ ++ ++ def test_get_async_param_deprecation(self): ++ """ ++ L{twisted.python.compat._get_async_param} raises a deprecation ++ warning if async keyword argument is passed. ++ """ ++ self.assertEqual( ++ _get_async_param(isAsync=None, **{'async': False}), False) ++ currentWarnings = self.flushWarnings( ++ offendingFunctions=[self.test_get_async_param_deprecation]) ++ self.assertEqual( ++ currentWarnings[0]['message'], ++ "'async' keyword argument is deprecated, please use isAsync") +Index: b/src/twisted/newsfragments/9384.bugfix +=================================================================== +--- /dev/null ++++ b/src/twisted/newsfragments/9384.bugfix +@@ -0,0 +1,2 @@ ++Syntax error under Python 3.7 fixed for twisted.conch.manhole and ++twisted.main.imap4. +Index: b/src/twisted/newsfragments/9384.removal +=================================================================== +--- /dev/null ++++ b/src/twisted/newsfragments/9384.removal +@@ -0,0 +1,4 @@ ++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. diff -Nru twisted-17.9.0/debian/patches/no-hamcrest-dependency.diff twisted-18.7.0/debian/patches/no-hamcrest-dependency.diff --- twisted-17.9.0/debian/patches/no-hamcrest-dependency.diff 1970-01-01 00:00:00.000000000 +0000 +++ twisted-18.7.0/debian/patches/no-hamcrest-dependency.diff 2018-08-14 19:15:08.000000000 +0000 @@ -0,0 +1,12 @@ +Index: b/src/twisted/python/_setup.py +=================================================================== +--- a/src/twisted/python/_setup.py ++++ b/src/twisted/python/_setup.py +@@ -238,7 +238,6 @@ def getSetupArgs(extensions=_EXTENSIONS) + "incremental >= 16.10.1", + "Automat >= 0.3.0", + "hyperlink >= 17.1.1", +- "PyHamcrest >= 1.9.0", + "attrs >= 17.4.0", + ] + diff -Nru twisted-17.9.0/debian/patches/series twisted-18.7.0/debian/patches/series --- twisted-17.9.0/debian/patches/series 2018-04-20 22:54:39.000000000 +0000 +++ twisted-18.7.0/debian/patches/series 2018-08-14 19:14:51.000000000 +0000 @@ -1,5 +1,6 @@ +no-hamcrest-dependency.diff 0001-wxpython3.0.patch -0002-combinedlog.patch +#0002-combinedlog.patch 0003-sphinx-theme.patch 0004-localIntersphinx.patch 0005-insecure-pythonpath.patch @@ -10,4 +11,4 @@ 0010-spurious-failure-in-setup-unit-tests.patch # this is no fix, but just replaces a broken error message with another one. #0011-fix-broken-sslverify-tests.patch -0012-conch-debug-message.patch +966.patch diff -Nru twisted-17.9.0/debian/tests/control twisted-18.7.0/debian/tests/control --- twisted-17.9.0/debian/tests/control 2018-04-20 22:45:36.000000000 +0000 +++ twisted-18.7.0/debian/tests/control 2018-08-14 19:14:32.000000000 +0000 @@ -2,4 +2,6 @@ Restrictions: needs-root Depends: @, python-setuptools, - python3-setuptools + python3-setuptools, + python-hamcrest, + python3-hamcrest, diff -Nru twisted-17.9.0/docs/conch/howto/conch_client.rst twisted-18.7.0/docs/conch/howto/conch_client.rst --- twisted-17.9.0/docs/conch/howto/conch_client.rst 2017-09-08 10:38:34.000000000 +0000 +++ twisted-18.7.0/docs/conch/howto/conch_client.rst 2018-04-02 08:54:56.000000000 +0000 @@ -332,8 +332,8 @@ ``getPassword()`` and ``getPrivateKey()`` return ``Deferreds`` because they may need to ask the user for input. -Once the authentication is complete, ``SSHUserAuthClient`` takes care of starting the code ``SSHConnection`` object given to it. Next, we'll -look at how to use the ``SSHConnection`` +Once the authentication is complete, ``SSHUserAuthClient`` takes care of starting the ``SSHConnection`` object given to it. Next, we'll +look at how to use the ``SSHConnection``. diff -Nru twisted-17.9.0/docs/conch/index.rst twisted-18.7.0/docs/conch/index.rst --- twisted-17.9.0/docs/conch/index.rst 2017-09-23 05:51:46.000000000 +0000 +++ twisted-18.7.0/docs/conch/index.rst 2018-03-26 08:19:31.000000000 +0000 @@ -3,8 +3,8 @@ :LastChangedRevision: $LastChangedRevision$ :LastChangedBy: $LastChangedBy$ -Twisted Conch -============= +Twisted Conch (SSH and Telnet) +============================== .. toctree:: :hidden: diff -Nru twisted-17.9.0/docs/core/development/policy/coding-standard.rst twisted-18.7.0/docs/core/development/policy/coding-standard.rst --- twisted-17.9.0/docs/core/development/policy/coding-standard.rst 2017-09-23 05:51:46.000000000 +0000 +++ twisted-18.7.0/docs/core/development/policy/coding-standard.rst 2018-06-11 11:32:16.000000000 +0000 @@ -191,7 +191,7 @@ Bytestrings and text must not be implicitly concatenated, as this causes an invisible ASCII encode/decode on Python 2, and causes an exception on Python 3. Use ``+`` to combine bytestrings, not string formatting (either "percent formatting" or ``.format()``). -String formatting is not available on Python 3.3 and 3.4. +String formatting is not available on Python 3.4. .. code-block:: python @@ -205,7 +205,7 @@ String Formatting Operations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -`String formatting operations `_ like ``formatString % values`` should only be used on text strings, not byte strings, as they do not work on Python 3.3 and 3.4. +`String formatting operations `_ like ``formatString % values`` should only be used on text strings, not byte strings, as they do not work on Python 3.4. When using "percent formatting", you should always use a tuple if you're using non-mapping ``values``. This is to avoid unexpected behavior when you think you're passing in a single value, but the value is unexpectedly a tuple, e.g.: @@ -344,8 +344,37 @@ ---------- The API documentation should be marked up with version information. -When a new API is added the class should be marked with the epytext ``@since:`` field including the version number when the change was introduced. -This version number should be in the form ``x.y`` (for example, ``@since: 15.1``). +When a new API is added the class should be marked with the epytext `@since: field `_ to include the version number when the change was introduced. +The placeholder string ``Twisted NEXT`` will be `replaced at release time `_ with the appropriate version number. +For example: + +.. code-block:: python + + def bar2baz(): + """ + Bazify a bar. + + @since: Twisted NEXT + """ + +The ``@since`` tag cannot be applied to arguments. +When adding a new argument, indicate the version of introduction on a separate line. +For example, if the ``swizzle`` keyword argument is added after the release of the above function in Twisted 18.5.0: + +.. code-block:: python + + def bar2baz(swizzle=False): + """ + Bazify a bar, with optional swizzling. + + @param swizzle: Activate swizzling. + + Present Since Twisted NEXT + + @type swizzle: L{bool} + + @since: Twisted 18.5.0 + """ Scripts @@ -487,7 +516,7 @@ Even though it may be convenient, module-level imports of the global Twisted reactor (``from twisted.internet import reactor``) should be avoided. Importing the reactor at the module level means that reactor selection occurs on initial import, and not at the request of the code that originally imported the module. -Applications may wish to import their own reactor, or otherwise use a reactor different than Twisted's default (for example, using the experimental cfreactor on OS X); importing at the module level means they would have to monkeypatch in the different reactor, or use similar hacks. +Applications may wish to import their own reactor, or otherwise use a reactor different than Twisted's default (for example, using the experimental cfreactor on macOS); importing at the module level means they would have to monkeypatch in the different reactor, or use similar hacks. This is especially apparent in Twisted's own test suite; many tests wish to provide their own reactor which controls the passage of time and simulates timeouts. Below is an example of the pattern for accepting the user's choice of reactor -- importing the global one if none is specified -- taken (and trimmed for brevity) from existing Twisted source code. @@ -595,11 +624,11 @@ Python 3 -------- -Twisted is being ported to Python 3, targeting Python 3.3+. +Twisted is being ported to Python 3, targeting Python 3.4+. Please see :doc:`Porting to Python 3 ` for details. -All new modules must be Python 2.7 & 3.3+ compatible, and all new code to ported modules must be Python 2.7 & 3.3+ compatible. -New code in non-ported modules must be written in a 2.7 & 3.3+ compatible way (explicit bytes/unicode strings, new exception raising format, etc) as to prevent extra work when that module is eventually ported. +All new modules must be Python 2.7 & 3.4+ compatible, and all new code to ported modules must be Python 2.7 & 3.4+ compatible. +New code in non-ported modules must be written in a 2.7 & 3.4+ compatible way (explicit bytes/unicode strings, new exception raising format, etc) as to prevent extra work when that module is eventually ported. Code targeting Python 3 specific features must gracefully fall-back on Python 2 as much as is reasonably possible (for example, Python 2 support for 'async/await' is not reasonably possible and would not be required, but code that uses a Python 3-specific module such as ipaddress should be able to use a backport to 2.7 if available). @@ -618,7 +647,7 @@ C Code ------ -C code must be optional, and work across multiple platforms (MSVC++9/10/14 for Pythons 2.7, 3.3/3.4, and 3.5 on Windows, as well as recent GCCs and Clangs for Linux, OS X, and FreeBSD). +C code must be optional, and work across multiple platforms (MSVC++9/10/14 for Pythons 2.7, 3.4, and 3.5 on Windows, as well as recent GCCs and Clangs for Linux, macOS, and FreeBSD). C code should be kept in external bindings packages which Twisted depends on. If creating new C extension modules, using `cffi `_ is highly encouraged, as it will perform well on PyPy and CPython, and be easier to use on Python 2 and 3. diff -Nru twisted-17.9.0/docs/core/development/policy/compatibility-policy.rst twisted-18.7.0/docs/core/development/policy/compatibility-policy.rst --- twisted-17.9.0/docs/core/development/policy/compatibility-policy.rst 2017-09-23 05:51:46.000000000 +0000 +++ twisted-18.7.0/docs/core/development/policy/compatibility-policy.rst 2018-04-02 08:54:56.000000000 +0000 @@ -291,10 +291,10 @@ -------------------------------------------- Twisted does not have a formal policy around supporting new versions of Python or de-supporting old versions of Python. -We strive to support Twisted on any version of Python that is the default Python for a vendor-supported release from a major platform, namely Debian, Ubuntu, the latest release of Windows, or the latest release of OS X. +We strive to support Twisted on any version of Python that is the default Python for a vendor-supported release from a major platform, namely Debian, Ubuntu, the latest release of Windows, or the latest release of macOS. The versions of Python currently supported are listed in the ​INSTALL file for each release. -A distribution release + Python version is only considered supported when a `buidlbot builder `_ exists for it. +A distribution release + Python version is only considered supported when a `buildbot builder `_ exists for it. Removing support for a Python version will be announced at least 1 release prior to the removal. diff -Nru twisted-17.9.0/docs/core/development/policy/release-process.rst twisted-18.7.0/docs/core/development/policy/release-process.rst --- twisted-17.9.0/docs/core/development/policy/release-process.rst 2017-09-23 05:51:46.000000000 +0000 +++ twisted-18.7.0/docs/core/development/policy/release-process.rst 2018-04-02 08:54:56.000000000 +0000 @@ -4,7 +4,7 @@ This document describes the Twisted release process. Although it is still incomplete, every effort has been made to ensure that it is accurate and up-to-date. -This process has only been tested on Linux or OS X, so we recommend that you do the release on Linux or OS X. +This process has only been tested on Linux or macOS, so we recommend that you do the release on Linux or macOS. If you want to make changes to the release process, follow the normal Twisted development process (contribute release automation software that has documentation and unit tests demonstrating that it works). @@ -75,27 +75,29 @@ Prepare for a release --------------------- -1. Check the milestone for the upcoming release +#. Check the milestone for the upcoming release - - Get rid of any non-critical bugs - - Get any critical bugs fixed - - Check the release manager notes in case anyone has left anything which can only be done during the release. + - Get rid of any non-critical bugs + - Get any critical bugs fixed + - Check the release manager notes in case anyone has left anything which can only be done during the release. -2. Check for any ​regressions -3. Read through the ``INSTALL.rst`` and ``README.rst`` files to make sure things like the supported Python versions are correct +#. Check for any ​regressions - - Check the required Python version. - - Check that the list matches the current set of buildbots. - - Any mistakes should be fixed in trunk before making the release branch +#. Read through the ``INSTALL.rst`` and ``README.rst`` files to make sure things like the supported Python versions are correct -4. Choose a version number. -5. File a ticket + - Check the required Python version. + - Check that the list matches the current set of buildbots. + - Any mistakes should be fixed in trunk before making the release branch - - Assign it to the upcoming release milestone - - Assign it to yourself - - Call it "Release $RELEASE" +#. Choose a version number. -6. Make a branch and attach it to the ticket: +#. File a ticket + + - Assign it to the upcoming release milestone + - Assign it to yourself + - Call it "Release $RELEASE" + +#. Make a branch and attach it to the ticket: - ``git fetch origin`` - ``git checkout origin/trunk`` @@ -105,32 +107,29 @@ How to do a release candidate ----------------------------- -1. Check ​buildbot to make sure all supported platforms are green (wait for pending builds if necessary). -2. If a previously supported platform does not currently have a buildbot, move from supported platforms to "expected to work" in ``INSTALL.rst``. -3. In your Git repo, fetch and check out the new release branch. -4. Run ``python -m incremental.update Twisted --rc`` -5. Commit the changes made by Incremental. -6. Run ``towncrier``. -7. Commit the changes made by towncrier - this automatically removes the NEWS newsfragments. -8. Bump copyright dates in ``LICENSE``, ``twisted/copyright.py``, and ``README.rst`` if required -9. Push the changes up to GitHub. -10. Run ``python setup.py sdist --formats=bztar -d /tmp/twisted-release`` to build the tarballs. -11. Copy ``NEWS.rst`` to ``/tmp/twisted-release/`` for people to view without having to download the tarballs. - (e.g. ``cp NEWS.rst /tmp/twisted-release/NEWS.rst``) -12. Upload the tarballs to ``twistedmatrix.com/Releases/rc/$RELEASE`` (see #4353) - - - You can use ``rsync --rsh=ssh --partial --progress -av /tmp/twisted-release/ t-web@dornkirk.twistedmatrix.com:/srv/t-web/data/releases/rc//`` to do this. - -13. Write the release candidate announcement - - - Read through the NEWS file and summarize the interesting changes for the release - - Get someone else to look over the announcement before doing it - -14. Announce the release candidate on - - - the twisted-python mailing list - - on IRC in the ``#twisted`` topic +#. Check ​buildbot to make sure all supported platforms are green (wait for pending builds if necessary). +#. If a previously supported platform does not currently have a buildbot, move from supported platforms to "expected to work" in ``INSTALL.rst``. +#. In your Git repo, fetch and check out the new release branch. +#. Run ``python -m incremental.update Twisted --rc`` +#. Commit the changes made by Incremental. +#. Run ``towncrier``. +#. Commit the changes made by towncrier - this automatically removes the NEWS newsfragments. +#. Bump copyright dates in ``LICENSE``, ``twisted/copyright.py``, and ``README.rst`` if required +#. Push the changes up to GitHub. +#. Run ``python setup.py sdist --formats=bztar -d /tmp/twisted-release`` to build the tarballs. +#. Copy ``NEWS.rst`` to ``/tmp/twisted-release/`` for people to view without having to download the tarballs. + (e.g. ``cp NEWS.rst /tmp/twisted-release/NEWS.rst``) +#. Upload the tarballs to ``twistedmatrix.com/Releases/rc/$RELEASE`` (see #4353) + + - You can use ``rsync --rsh=ssh --partial --progress -av /tmp/twisted-release/ t-web@dornkirk.twistedmatrix.com:/srv/t-web/data/releases/rc//`` to do this. +#. Write the release candidate announcement + + - Read through the NEWS file and summarize the interesting changes for the release + - Get someone else to look over the announcement before doing it +#. Announce the release candidate on + - the twisted-python mailing list + - on IRC in the ``#twisted`` topic Release candidate announcement ------------------------------ @@ -173,19 +172,19 @@ Prepare the branch ~~~~~~~~~~~~~~~~~~ -1. Have the release branch, previously used to generate a release candidate, checked out -2. Run ``python -m incremental.update Twisted``. -3. Revert the release candidate newsfile changes, in order. -4. Run ``towncrier`` to make the final newsfile. -5. Add the quote of the release to the ``README.rst`` -6. Make a new quote file for the next version +#. Have the release branch, previously used to generate a release candidate, checked out +#. Run ``python -m incremental.update Twisted``. +#. Revert the release candidate newsfile changes, in order. +#. Run ``towncrier`` to make the final newsfile. +#. Add the quote of the release to the ``README.rst`` +#. Make a new quote file for the next version - ``git mv docs/fun/Twisted.Quotes docs/historic/Quotes/Twisted-$API; echo '' > docs/fun/Twisted.Quotes; git add docs/fun/Twisted.Quotes`` -7. Commit the version and ``README.rst`` changes. -8. Submit the ticket for review -9. Pause until the ticket is reviewed and accepted. -10. Tag the release. +#. Commit the version and ``README.rst`` changes. +#. Submit the ticket for review +#. Pause until the ticket is reviewed and accepted. +#. Tag the release. - ``git tag -s twisted-$RELEASE -m "Tag $RELEASE release"`` - ``git push --tags`` @@ -194,61 +193,62 @@ Cut the tarballs & installers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -1. Using a checkout of the release branch or the release tag (with no local changes!), build the tarballs: +#. Using a checkout of the release branch or the release tag (with no local changes!), build the tarballs: - ``python setup.py sdist --formats=bztar -d /tmp/twisted-release`` -2. Build Windows wheel +#. Build Windows wheel - - Download the latest ``.whl`` files from `Buildbot `_ and save them in the staging directory + - Download the latest ``.whl`` files from `Buildbot `_ and save them in the staging directory -3. Sign the tarballs and Windows installers. +#. Sign the tarballs and Windows installers. (You will need a PGP key for this - use something like Seahorse to generate one, if you don't have one.) - - MD5: ``md5sum Tw* | gpg -a --clearsign > /tmp/twisted-release/twisted-$RELEASE-md5sums.txt`` - - SHA512: ``shasum -a 512 Tw* | gpg -a --clearsign > /tmp/twisted-release/twisted-$RELEASE-shasums.txt`` - - Compare these to an ​example of ``twisted-$RELEASE-md5sums.txt`` - they should look the same. + - MD5: ``md5sum Tw* | gpg -a --clearsign > /tmp/twisted-release/twisted-$RELEASE-md5sums.txt`` + - SHA512: ``shasum -a 512 Tw* | gpg -a --clearsign > /tmp/twisted-release/twisted-$RELEASE-shasums.txt`` + - Compare these to an ​example of ``twisted-$RELEASE-md5sums.txt`` - they should look the same. Update documentation ~~~~~~~~~~~~~~~~~~~~ -1. Get the dependencies +#. Get the dependencies - - PyDoctor (from PyPI) + - PyDoctor (from PyPI) -2. Build the documentation +#. Build the documentation - - ``./bin/admin/build-docs .`` - - ``cp -R doc /tmp/twisted-release/`` + - ``./bin/admin/build-docs .`` + - ``cp -R doc /tmp/twisted-release/`` -3. Run the build-apidocs script to build the API docs and then upload them (See also #2891). +#. Run the build-apidocs script to build the API docs and then upload them (See also #2891). - - Copy the pydoctor directory from the twisted branch into your Git checkout. - - ``./bin/admin/build-apidocs . /tmp/twisted-release/api`` - - Documentation will be generated in a directory called ``/tmp/twisted-release/api`` + - Copy the pydoctor directory from the twisted branch into your Git checkout. + - ``./bin/admin/build-apidocs . /tmp/twisted-release/api`` + - Documentation will be generated in a directory called ``/tmp/twisted-release/api`` -4. Update the Read The Docs default to point to the release branch (via the `dashboard `_). +#. Update the Read The Docs default to point to the release branch (via the `dashboard `_). Distribute ~~~~~~~~~~ -1. Create a tarball with the contents of the release directory: ``cd /tmp/twisted-release; tar -cvjf ../release.tar.bz2 *`` -2. Upload to the official upload locations (see #2888) +#. Create a tarball with the contents of the release directory: ``cd /tmp/twisted-release; tar -cvjf ../release.tar.bz2 *`` - - ``cd ~; git clone https://github.com/twisted-infra/braid`` - - ``cd braid`` - - ``virtualenv ~/dev/braid; source ~/dev/braid/bin/activate; cd ~/braid; python setup.py develop;`` - - ``cd ~/braid; fab config.production t-web.uploadRelease:$RELEASE,/tmp/release.tar.bz2`` +#. Upload to the official upload locations (see #2888) -3. Test the generated docs + - ``cd ~; git clone https://github.com/twisted-infra/braid`` + - ``cd braid`` + - ``virtualenv ~/dev/braid; source ~/dev/braid/bin/activate; cd ~/braid; python setup.py develop;`` + - ``cd ~/braid; fab config.production t-web.uploadRelease:$RELEASE,/tmp/release.tar.bz2`` - - Browse to ``http://twistedmatrix.com/documents/$RELEASE/`` - - Make sure that there is content in each of the directories and that it looks good - - Follow each link on `the documentation page `_, replace current with ``$RELEASE`` (e.g. 10.0.0) and look for any obvious breakage +#. Test the generated docs -4. Change the "current" symlink + - Browse to ``http://twistedmatrix.com/documents/$RELEASE/`` + - Make sure that there is content in each of the directories and that it looks good + - Follow each link on `the documentation page `_, replace current with ``$RELEASE`` (e.g. 10.0.0) and look for any obvious breakage + +#. Change the "current" symlink - Upload release: ``fab config.production t-web.updateCurrentDocumentation:$RELEASE`` @@ -256,36 +256,41 @@ Announce ~~~~~~~~ -1. Update Downloads pages +#. Update Downloads pages - - The following updates are automatic, due to the use of the ​ProjectVersion wiki macro throughout most of the Downloads page. + - The following updates are automatic, due to the use of the ​ProjectVersion wiki macro throughout most of the Downloads page. - - Text references to the old version to refer to the new version - - The link to the NEWS file to point to the new version - - Links and text to the main tarball + - Text references to the old version to refer to the new version + - The link to the NEWS file to point to the new version + - Links and text to the main tarball - - Add a new md5sum link - - Add a new shasum link - - Save the page, check all links + - Add a new md5sum link + - Add a new shasum link + - Save the page, check all links -2. Update PyPI records & upload files +#. Update PyPI records & upload files - ``pip install -U twine`` - ``twine upload /tmp/twisted-release/Twisted-$RELEASE*`` -3. Write the release announcement (see below) -4. Announce the release +#. Write the release announcement (see below) + +#. Announce the release + + - Send a text version of the announcement to: twisted-python@twistedmatrix.com, python-announce-list@python.org, python-list@python.org, twisted-web@twistedmatrix.com + - ​http://labs.twistedmatrix.com (Post a web version of the announcements, with links instead of literal URLs) + - Twitter, if you feel like it + - ``#twisted`` topic on IRC (you'll need ops) + +#. Run ``python -m incremental Twisted --dev`` to add a `dev0` postfix. - - Send a text version of the announcement to: twisted-python@twistedmatrix.com, python-announce-list@python.org, python-list@python.org, twisted-web@twistedmatrix.com - - ​http://labs.twistedmatrix.com (Post a web version of the announcements, with links instead of literal URLs) - - Twitter, if you feel like it - - ``#twisted`` topic on IRC (you'll need ops) - -5. Run ``python -m incremental Twisted --dev`` to add a `dev0` postfix. -6. Commit the dev0 update change. -7. Merge the release branch into trunk, closing the release ticket at the same time. -8. Close the release milestone (which should have no tickets in it). -9. Open a milestone for the next release. +#. Commit the dev0 update change. + +#. Merge the release branch into trunk, closing the release ticket at the same time. + +#. Close the release milestone (which should have no tickets in it). + +#. Open a milestone for the next release. Release announcement @@ -363,19 +368,24 @@ This section goes over doing these "point" releases. 1. Ensure all bugfixes are in trunk. + 2. Make a branch off the affected version. + 3. Cherry-pick the merge commits that merge the bugfixes into trunk, onto the new release branch. + 4. Go through the rest of the process for a full release from "How to do a release candidate", merging the release branch into trunk as normal as the end of the process. - - Instead of just ``--rc`` when running the change-versions script, add the patch flag, making it ``--patch --rc``. - - Instead of waiting a week, a shorter pause is acceptable for a patch release. + - Instead of just ``--rc`` when running the change-versions script, add the patch flag, making it ``--patch --rc``. + - Instead of waiting a week, a shorter pause is acceptable for a patch release. Open questions -------------- - How do we manage the case where there are untested builds in trunk? + - Should picking a release quote be part of the release or the release candidate? + - What bugs should be considered release blockers? - All bugs with a type from the release blocker family diff -Nru twisted-17.9.0/docs/core/examples/wxacceptance.py twisted-18.7.0/docs/core/examples/wxacceptance.py --- twisted-17.9.0/docs/core/examples/wxacceptance.py 2017-09-08 10:38:35.000000000 +0000 +++ twisted-18.7.0/docs/core/examples/wxacceptance.py 2018-04-02 08:54:56.000000000 +0000 @@ -4,7 +4,7 @@ """ Acceptance tests for wxreactor. -Please test on Linux, Win32 and OS X: +Please test on Linux, Win32 and macOS: 1. Startup event is called at startup. 2. Scheduled event is called after 2 seconds. 3. Shutdown takes 3 seconds, both when quiting from menu and when closing diff -Nru twisted-17.9.0/docs/core/howto/amp.rst twisted-18.7.0/docs/core/howto/amp.rst --- twisted-17.9.0/docs/core/howto/amp.rst 2017-09-08 10:38:35.000000000 +0000 +++ twisted-18.7.0/docs/core/howto/amp.rst 2018-03-26 08:19:31.000000000 +0000 @@ -5,11 +5,10 @@ -**A** synchronous **M** essaging **P** rotocol Overview +Asynchronous Messaging Protocol Overview +======================================== - -**A** synchronous **M** essaging **P** rotocol Overview The purpose of this guide is to describe the uses for and usage of :api:`twisted.protocols.amp ` beyond what is explained in the API documentation. It will show you how to implement an AMP server which can respond to commands or interact directly with individual messages. It will also show you how to implement an AMP client which can issue commands to a server. diff -Nru twisted-17.9.0/docs/core/howto/choosing-reactor.rst twisted-18.7.0/docs/core/howto/choosing-reactor.rst --- twisted-17.9.0/docs/core/howto/choosing-reactor.rst 2017-09-23 05:51:46.000000000 +0000 +++ twisted-18.7.0/docs/core/howto/choosing-reactor.rst 2018-04-02 08:54:56.000000000 +0000 @@ -41,8 +41,8 @@ - :ref:`Epoll for Linux 2.6 ` - :ref:`WaitForMultipleObjects (WFMO) for Win32 ` - :ref:`Input/Output Completion Port (IOCP) for Win32 ` -- :ref:`KQueue for FreeBSD and Mac OS X ` -- :ref:`CoreFoundation for Mac OS X ` +- :ref:`KQueue for FreeBSD and macOS ` +- :ref:`CoreFoundation for macOS ` @@ -114,7 +114,7 @@ +-----------------------------------------------+--------------+-----+-----+-----+-----------+-----------+------------+-------------+ | Input/Output Completion Port (IOCP) for Win32 | Experimental | Y | Y | Y | Y | Y | Y | Win32 | +-----------------------------------------------+--------------+-----+-----+-----+-----------+-----------+------------+-------------+ -| CoreFoundation | Unmaintained | Y | Y | Y | Y | Y | Y | Mac OS X | +| CoreFoundation | Unmaintained | Y | Y | Y | Y | Y | Y | macOS | +-----------------------------------------------+--------------+-----+-----+-----+-----------+-----------+------------+-------------+ | epoll | Stable | Y | Y | Y | Y | Y | Y | Linux 2.6 | +-----------------------------------------------+--------------+-----+-----+-----+-----------+-----------+------------+-------------+ diff -Nru twisted-17.9.0/docs/core/howto/defer-intro.rst twisted-18.7.0/docs/core/howto/defer-intro.rst --- twisted-17.9.0/docs/core/howto/defer-intro.rst 2017-09-08 10:38:35.000000000 +0000 +++ twisted-18.7.0/docs/core/howto/defer-intro.rst 2018-04-29 11:12:58.000000000 +0000 @@ -351,7 +351,7 @@ .. versionadded:: 15.0 - On Python 3.3 and above, instead of writing ``returnValue(json.loads(responseBody))`` you can instead write ``return json.loads(responseBody)``. + On Python 3, instead of writing ``returnValue(json.loads(responseBody))`` you can instead write ``return json.loads(responseBody)``. This can be a significant readability advantage, but unfortunately if you need compatibility with Python 2, this isn't an option. Both versions of ``getUsers`` present exactly the same API to their callers: both return a ``Deferred`` that fires with the parsed JSON body of the request. diff -Nru twisted-17.9.0/docs/core/howto/listings/systemd/www.example.com.socketactivated.service twisted-18.7.0/docs/core/howto/listings/systemd/www.example.com.socketactivated.service --- twisted-17.9.0/docs/core/howto/listings/systemd/www.example.com.socketactivated.service 2016-07-12 03:11:41.000000000 +0000 +++ twisted-18.7.0/docs/core/howto/listings/systemd/www.example.com.socketactivated.service 2018-03-26 08:19:31.000000000 +0000 @@ -5,7 +5,7 @@ ExecStart=/usr/bin/twistd \ --nodaemon \ --pidfile= \ - web --port systemd:domain=INET:index=0 --path . + web --listen systemd:domain=INET:index=0 --path . NonBlocking=true diff -Nru twisted-17.9.0/docs/core/howto/listings/systemd/www.example.com.static.service twisted-18.7.0/docs/core/howto/listings/systemd/www.example.com.static.service --- twisted-17.9.0/docs/core/howto/listings/systemd/www.example.com.static.service 2016-07-12 03:11:41.000000000 +0000 +++ twisted-18.7.0/docs/core/howto/listings/systemd/www.example.com.static.service 2018-03-26 08:19:31.000000000 +0000 @@ -5,7 +5,7 @@ ExecStart=/usr/bin/twistd \ --nodaemon \ --pidfile= \ - web --port 8080 --path . + web --listen tcp:8080 --path . WorkingDirectory=/srv/www/www.example.com/static diff -Nru twisted-17.9.0/docs/core/howto/python3.rst twisted-18.7.0/docs/core/howto/python3.rst --- twisted-17.9.0/docs/core/howto/python3.rst 2017-09-08 10:38:35.000000000 +0000 +++ twisted-18.7.0/docs/core/howto/python3.rst 2018-04-29 11:12:58.000000000 +0000 @@ -4,7 +4,7 @@ Introduction ------------ -Twisted is currently being ported to work with Python 3.3+. +Twisted is currently being ported to work with Python 3.4+. This document covers Twisted-specific issues in porting your code to Python 3. Most, but not all, of Twisted has been ported, and therefore only a subset of modules are installed under Python 3. diff -Nru twisted-17.9.0/docs/core/howto/ssl.rst twisted-18.7.0/docs/core/howto/ssl.rst --- twisted-17.9.0/docs/core/howto/ssl.rst 2017-09-08 10:38:35.000000000 +0000 +++ twisted-18.7.0/docs/core/howto/ssl.rst 2018-04-02 08:54:56.000000000 +0000 @@ -19,10 +19,10 @@ TLS provides transport layer security, but it's important to understand what "security" means. With respect to TLS it means three things: - 1. Identity: TLS servers (and sometimes clients) present a certificate, offering proof of who they are, so that you know who you are talking to. - 2. Confidentiality: once you know who you are talking to, encryption of the connection ensures that the communications can't be understood by any third parties who might be listening in. - 3. Integrity: TLS checks the encrypted messages to ensure that they actually came from the party you originally authenticated to. - If the messages fail these checks, then they are discarded and your application does not see them. +#. Identity: TLS servers (and sometimes clients) present a certificate, offering proof of who they are, so that you know who you are talking to. +#. Confidentiality: once you know who you are talking to, encryption of the connection ensures that the communications can't be understood by any third parties who might be listening in. +#. Integrity: TLS checks the encrypted messages to ensure that they actually came from the party you originally authenticated to. + If the messages fail these checks, then they are discarded and your application does not see them. Without identity, neither confidentiality nor integrity is possible. If you don't know who you're talking to, then you might as easily be talking to your bank or to a thief who wants to steal your bank password. @@ -30,9 +30,9 @@ (Please pardon the somewhat awkward name.) The ``contextFactory`` serves three purposes: - 1. It provides the materials to prove your own identity to the other side of the connection: in other words, who you are. - 2. It expresses your requirements of the other side's identity: in other words, who you would like to talk to (and who you trust to tell you that you're talking to the right party). - 3. It allows you to specify certain specialized options about the way the TLS protocol itself operates. +1. It provides the materials to prove your own identity to the other side of the connection: in other words, who you are. +2. It expresses your requirements of the other side's identity: in other words, who you would like to talk to (and who you trust to tell you that you're talking to the right party). +3. It allows you to specify certain specialized options about the way the TLS protocol itself operates. The requirements of clients and servers are slightly different. Both *can* provide a certificate to prove their identity, but commonly, TLS *servers* provide a certificate, whereas TLS *clients* check the server's certificate (to make sure they're talking to the right server) and then later identify themselves to the server some other way, often by offering a shared secret such as a password or API key via an application protocol secured with TLS and not as part of TLS itself. @@ -53,7 +53,7 @@ Currently, Twisted only supports loading of OpenSSL's default trust roots. If you've built OpenSSL yourself, you must take care to include these in the appropriate location. - If you're using the OpenSSL shipped as part of Mac OS X 10.5-10.9, this behavior will also be correct. + If you're using the OpenSSL shipped as part of macOS 10.5-10.9, this behavior will also be correct. If you're using Debian, or one of its derivatives like Ubuntu, install the `ca-certificates` package to ensure you have trust roots available, and this behavior should also be correct. Work is ongoing to make :api:`twisted.internet.ssl.platformTrust ` --- the API that :api:`twisted.internet.ssl.optionsForClientTLS ` uses by default --- more robust. For example, :api:`twisted.internet.ssl.platformTrust ` should fall back to `the "certifi" package `_ if no platform trust roots are available but it doesn't do that yet. diff -Nru twisted-17.9.0/docs/core/howto/systemd.rst twisted-18.7.0/docs/core/howto/systemd.rst --- twisted-17.9.0/docs/core/howto/systemd.rst 2017-09-08 10:38:35.000000000 +0000 +++ twisted-18.7.0/docs/core/howto/systemd.rst 2018-03-26 08:19:31.000000000 +0000 @@ -28,7 +28,7 @@ .. code-block:: console - $ twistd --nodaemon web --port 8080 --path /srv/www/www.example.com/static + $ twistd --nodaemon web --listen tcp:8080 --path /srv/www/www.example.com/static 2013-01-28 13:21:35+0000 [-] Log opened. 2013-01-28 13:21:35+0000 [-] twistd 12.3.0 (/usr/bin/python 2.7.3) starting up. 2013-01-28 13:21:35+0000 [-] reactor class: twisted.internet.epollreactor.EPollReactor. @@ -151,7 +151,7 @@ Active: active (running) since Mon 2013-01-28 16:16:26 GMT; 1s ago Main PID: 10695 (twistd) CGroup: name=systemd:/system/www.example.com.service - └─10695 /usr/bin/python /usr/bin/twistd --nodaemon --pidfile= web --port 8080 --path . + └─10695 /usr/bin/python /usr/bin/twistd --nodaemon --pidfile= web --listen tcp:8080 --path . Jan 28 16:16:26 zorin.lan systemd[1]: Starting Example Web Server... Jan 28 16:16:26 zorin.lan systemd[1]: Started Example Web Server. diff -Nru twisted-17.9.0/docs/core/howto/threading.rst twisted-18.7.0/docs/core/howto/threading.rst --- twisted-17.9.0/docs/core/howto/threading.rst 2017-09-08 10:38:35.000000000 +0000 +++ twisted-18.7.0/docs/core/howto/threading.rst 2018-04-02 08:54:56.000000000 +0000 @@ -99,6 +99,8 @@ To get a result from some blocking code back into the reactor thread, we can use :api:`twisted.internet.threads.deferToThread ` to execute it instead of callFromThread. +:: + from __future__ import print_function from twisted.internet import reactor, threads diff -Nru twisted-17.9.0/docs/core/howto/tutorial/listings/finger/finger08.py twisted-18.7.0/docs/core/howto/tutorial/listings/finger/finger08.py --- twisted-17.9.0/docs/core/howto/tutorial/listings/finger/finger08.py 2017-09-08 10:38:35.000000000 +0000 +++ twisted-18.7.0/docs/core/howto/tutorial/listings/finger/finger08.py 2018-04-02 08:54:56.000000000 +0000 @@ -21,7 +21,7 @@ protocol = FingerProtocol def __init__(self, users): - self.users = usrs + self.users = users def getUser(self, user): return defer.succeed(self.users.get(user, b"No such user")) diff -Nru twisted-17.9.0/docs/historic/NEWS.rst twisted-18.7.0/docs/historic/NEWS.rst --- twisted-17.9.0/docs/historic/NEWS.rst 1970-01-01 00:00:00.000000000 +0000 +++ twisted-18.7.0/docs/historic/NEWS.rst 2018-07-05 19:23:20.000000000 +0000 @@ -0,0 +1,4586 @@ +This file contains the news files from 2008-2014. + +Twisted Core 14.0.2 (2014-09-18) +================================ + +No significant changes have been made for this release. + + +Twisted Conch 14.0.2 (2014-09-18) +================================= + +No significant changes have been made for this release. + + +Twisted Lore 14.0.2 (2014-09-18) +================================ + +No significant changes have been made for this release. + + +Twisted Mail 14.0.2 (2014-09-18) +================================ + +No significant changes have been made for this release. + + +Twisted Names 14.0.2 (2014-09-18) +================================= + +No significant changes have been made for this release. + + +Twisted News 14.0.2 (2014-09-18) +================================ + +No significant changes have been made for this release. + + +Twisted Pair 14.0.2 (2014-09-18) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 14.0.2 (2014-09-18) +================================== + +No significant changes have been made for this release. + + +Twisted Web 14.0.2 (2014-09-18) +=============================== + +No significant changes have been made for this release. + + +Twisted Words 14.0.2 (2014-09-18) +================================= + +No significant changes have been made for this release. + + +Twisted Core 14.0.1 (2014-09-17) +================================ + +No significant changes have been made for this release. + + +Twisted Conch 14.0.1 (2014-09-17) +================================= + +No significant changes have been made for this release. + + +Twisted Lore 14.0.1 (2014-09-17) +================================ + +No significant changes have been made for this release. + + +Twisted Mail 14.0.1 (2014-09-17) +================================ + +No significant changes have been made for this release. + + +Twisted Names 14.0.1 (2014-09-17) +================================= + +No significant changes have been made for this release. + + +Twisted News 14.0.1 (2014-09-17) +================================ + +No significant changes have been made for this release. + + +Twisted Pair 14.0.1 (2014-09-17) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 14.0.1 (2014-09-17) +================================== + +No significant changes have been made for this release. + + +Twisted Web 14.0.1 (2014-09-17) +=============================== + +Bugfixes +-------- + - BrowserLikePolicyForHTTPS would always ignore the specified + trustRoot and use the system trust root instead, which has been + rectified. (#7647) + + +Twisted Words 14.0.1 (2014-09-17) +================================= + +No significant changes have been made for this release. + + +Twisted Core 14.0.0 (2014-05-08) +================================ + +Features +-------- + - twisted.internet.interfaces.IUDPTransport - and that interface's + implementations in Twisted - now supports enabling broadcasting. + (#454) + - trial's TestCase will now report a test method as an error if that + test method is a generator function, preventing an issue when a + user forgets to decorate a test method with defer.inlineCallbacks, + causing the test method to not run. (#3917) + - twisted.positioning, a new API for positioning systems such as GPS, + has been added. It comes with an implementation of NMEA, the most + common wire protocol for GPS devices. It will supersede + twisted.protoocols.gps. (#3926) + - The new interface twisted.internet.interfaces.IStreamClientEndpoint + StringParserWithReactor will supply the reactor to its + parseStreamClient method, passed along from + twisted.internet.endpoints.clientFromString. (#5069) + - IReactorUDP.listenUDP, IUDPTransport.write and + IUDPTransport.connect now accept ipv6 address literals. (#5086) + - A new API, twisted.internet.ssl.optionsForClientTLS, allows clients + to specify and verify the identity of the peer they're communicating + with. When used with the service_identity library from PyPI, this + provides support for service identity verification from RFC 6125, as + well as server name indication from RFC 6066. (#5190) + - Twisted's TLS support now provides a way to ask for user-configured + trust roots rather than having to manually configure such + certificate authority certificates yourself. + twisted.internet.ssl.CertificateOptions now accepts a new argument, + trustRoot, which combines verification flags and trust sources, as + well as a new function that provides a value for that argument, + twisted.internet.ssl.platformTrust, which allows using the trusted + platform certificate authorities from OpenSSL for certificate + verification. (#5446) + - Constants are now comparable/orderable based on the order in which + they are defined. (#6523) + - "setup.py install" and "pip install" now work on Python 3.3, + installing the subset of Twisted that has been ported to Python 3. + (#6539) + - twisted.internet.ssl.CertificateOptions now supports ECDHE for + servers by default on pyOpenSSL 0.14 and later, if the underlying + versions of cryptography.io and OpenSSL support it. (#6586) + - twisted.internet.ssl.CertificateOptions now allows the user to set + acceptable ciphers and uses secure ones by default. (#6663) + - The Deferred returned by + twisted.internet.defer.DeferredFilesystemLock.deferUntilLocked can + now be cancelled. (#6720) + - twisted.internet.ssl.CertificateOptions now enables TLSv1.1 and + TLSv1.2 by default (in addition to TLSv1.0) if the underlying + version of OpenSSL supports these protocol versions. (#6772) + - twisted.internet.ssl.CertificateOptions now supports Diffie-Hellman + key exchange. (#6799) + - twisted.internet.ssl.CertificateOptions now disables TLS + compression to avoid CRIME attacks and, for servers, uses server + preference to choose the cipher. (#6801) + - SSL server endpoint string descriptions now support the + specification of Diffie-Hellman key exchange parameter files. + (#6924) + - twisted.python.reflect.requireModule was added to handle + conditional imports of python modules and work around pyflakes + warnings of unused imports code. (#7014) + +Bugfixes +-------- + - If a ProcessProtocol.processExited method raised an exception a + broken process handler would be left in the global process state + leading to errors later on. This has been fixed and now an error + will be logged instead. (#5151) + - Twisted now builds on Solaris. Note that lacking a Buildbot slave + (see http://buildbot.twistedmatrix.com/boxes-supported) Solaris is + not a supported Twisted platform. (#5728) + - twisted.internet.utils is now correctly installed on Python 3. + (#6929) + - twisted.python.threadpool.ThreadPool no longer starts new workers + when its pool size is changed while the pool is not running. + (#7011) + +Improved Documentation +---------------------- + - Twisted now uses the Sphinx documentation generator for its + narrative documentation, which means that the source format for + narrative documentation has been converted to ReStructuredText. + (#4500) + - The Sphinx documentation is now also configured to allow + intersphinx links to standard library documentation. (#4582) + - The docstring for twisted.internet.task.react now better documents + the main parameter (#6071) + - The writing standard now explicitly mandates the usage of + ungendered pronouns. (#6858) + +Deprecations and Removals +------------------------- + - test_import.py was removed as it was redundant. (#2053) + - Support for versions of pyOpenSSL older than 0.10 has been removed. + Affected users should upgrade pyOpenSSL. (#5014) + - twisted.internet.interfaces.IStreamClientEndpointStringParser is + now deprecated in favor of twisted.internet.interfaces.IStreamClien + tEndpointStringParserWithReactor. (#5069) + - unsignedID and setIDFunction, previously part of + twisted.python.util and deprecated since 13.0, have now been + removed. (#6707) + - FTPClient.changeDirectory was deprecated in 8.2 and is now removed. + (#6759) + - twisted.internet.stdio.StandardIO.closeStdin, an alias for + loseWriteConnection only available on POSIX and deprecated since + 2.1, has been removed. (#6785) + - twisted.python.reflect.getcurrent is now deprecated and must not be + used. twisted.python.reflect.isinst is now deprecated in favor of + the built-in isinstance. (#6859) + +Other +----- + - #1822, #5929, #6239, #6537, #6565, #6614, #6632, #6690, #6784, + #6792, #6795, #6821, #6843, #6846, #6854, #6856, #6857, #6872, + #6892, #6902, #6906, #6922, #6926, #6936, #6941, #6942, #6943, + #6944, #6945, #6946, #6948, #6979, #7001, #7049, #7051, #7094, + #7098 + + +Twisted Conch 14.0.0 (2014-05-08) +================================= + +Improved Documentation +---------------------- + - The docstring for twisted.conch.ssh.userauth.SSHUserAuthClient is + now clearer on how the preferredOrder instance variable is handled. + (#6850) + +Other +----- + - #6696, #6807, #7054 + + +Twisted Lore 14.0.0 (2014-05-08) +================================ + +Deprecations and Removals +------------------------- + - twisted.lore is now deprecated in favor of Sphinx. (#6907) + +Other +----- + - #6998 + + +Twisted Mail 14.0.0 (2014-05-08) +================================ + +Improved Documentation +---------------------- + - twisted.mail.alias now has full API documentation. (#6637) + - twisted.mail.tap now has full API documentation. (#6648) + - twisted.mail.maildir now has full API documentation. (#6651) + - twisted.mail.pop3client now has full API documentation. (#6653) + - twisted.mail.protocols now has full API documentation. (#6654) + - twisted.mail.pop now has full API documentation. (#6666) + - twisted.mail.relay and twisted.mail.relaymanager now have full API + documentation. (#6739) + - twisted.mail.pop3client public classes now appear as part of the + twisted.mail.pop3 API. (#6761) + +Other +----- + - #6696 + + +Twisted Names 14.0.0 (2014-05-08) +================================= + +Features +-------- + - twisted.names.root.Resolver now accepts a resolverFactory argument, + which makes it possible to control how root.Resolver performs + iterative queries to authoritative nameservers. (#6095) + - twisted.names.dns.Message now has a repr method which shows only + those instance flags, fields and sections which are set to non- + default values. (#6847) + - twisted.names.dns.Message now support rich comparison. (#6848) + +Bugfixes +-------- + - twisted.names.server.DNSServerFactory now responds with messages + whose flags and fields are reset to their default values instead of + copying these from the request. This means that AD and CD flags, + and EDNS OPT records in the request are no longer mirrored back to + the client. (#6645) + +Improved Documentation +---------------------- + - twisted.names now has narrative documentation showing how to create + a custom DNS server. (#6864) + - twisted.names.server now has full API documentation. (#6886) + - twisted.names now has narrative documentation explaining how to use + its client APIs. (#6925) + - twisted.names now has narrative documentation and examples showing + how to perform reverse DNS lookups. (#6969) + +Other +----- + - #5675, #6222, #6672, #6696, #6887, #6940, #6975, #6990 + + +Twisted News 14.0.0 (2014-05-08) +================================ + +No significant changes have been made for this release. + +Other +----- + - #6991 + + +Twisted Pair 14.0.0 (2014-05-08) +================================ + +Features +-------- + - twisted.pair.tuntap now has complete test coverage, basic + documentation, and works without the difficult-to-find system + bindings it used to require. (#6169) + +Other +----- + - #6898, #6931, #6993 + + +Twisted Runner 14.0.0 (2014-05-08) +================================== + +No significant changes have been made for this release. + +Other +----- + - #6992 + + +Twisted Web 14.0.0 (2014-05-08) +=============================== + +Features +-------- + - twisted.web.http.proxiedLogFormatter can now be used with + twisted.web.http.HTTPFactory (and subclasses) to record X + -Forwarded-For values to the access log when the HTTP server is + deployed behind a reverse proxy. (#1468) + - twisted.web.client.Agent now uses + twisted.internet.ssl.CertificateOptions for SSL/TLS and benefits + from its continuous improvements. (#6893) + +Bugfixes +-------- + - twisted.web.client.Agent now correctly manage flow-control on + pooled connections, and therefore requests will no longer hang + sometimes when deliverBody is not called synchronously within the + callback on Request. (#6751) + - twisted.web.client.Agent now verifies that the provided server + certificate in a TLS connection is trusted by the platform. (#7042) + - When requesting an HTTPS URL with twisted.web.client.Agent, the + hostname of the presented certificate will be checked against the + requested hostname; mismatches will now result in an error rather + than a man-in-the-middle opportunity for attackers. This may break + existing code that incorrectly depended on insecure behavior, but + such code was erroneous and should be updated. (#4888) + +Other +----- + - #5004, #6881, #6956 + + +Twisted Words 14.0.0 (2014-05-08) +================================= + +Bugfixes +-------- + - twisted.words.protocols.jabber.sasl_mechansisms.DigestMD5 now works + with unicode arguments. (#5066) + +Other +----- + - #6696 + + +Twisted Core 13.2.0 (2013-10-29) +================================ + +Features +-------- + - twistd now waits for the application to start successfully before + exiting after daemonization. (#823) + - twisted.internet.endpoints now provides HostnameEndpoint, a TCP + client endpoint that connects to a hostname as quickly as possible. + (#4859) + - twisted.internet.interfaces.IReactorSocket now has a new + adoptDatagramPort method which is implemented by some reactors + allowing them to listen on UDP sockets set up by external software + (eg systemd or launchd). (#5574) + - trial now accepts an --order option that specifies what order to + run TestCase methods in. (#5787) + - Port twisted.python.lockfile to Python 3, enabling + twisted.python.defer.DeferredFilesystemLock and tests. (#5960) + - Returning a Deferred from a callback that's directly returned from + that Deferred will now produce a DeprecationWarning, to notify + users of the buggy behavior. (#6164) + - SSL server endpoint string descriptions now support the + specification of chain certificates. (#6499) + - twisted.application.reactors.installReactor now returns the just- + installed reactor. (#6596) + - twisted.internet.defer.DeferredList now has a new cancel method. + And twisted.internet.defer.gatherResults now returns a cancellable + result. (#6639) + +Bugfixes +-------- + - twisted.protocols.basic.LineReceiver no longer passes incorrect + data (a buffer missing a delimiter) to lineLengthExceeded in + certain cases. (#6536) + - twisted.cred.digest.DigestCredentialFactory now supports decoding + challenge responses with field values including ",". (#6609) + - twisted.internet.endpoints.TCP6ClientEndpoint now establishes + connections when constructed with a hostname. (#6633) + - twisted.application.internet.TimerService is now pickleable in all + cases. (#6657) + +Improved Documentation +---------------------- + - The howto document page of Deferred now has documentation about + cancellation. (#4320) + - Docstrings for twisted.internet.task.Cooperator and cooperate. + (#6213) + +Deprecations and Removals +------------------------- + - Returning a Deferred from a callback that's directly returned from + that Deferred will now produce a DeprecationWarning, to notify + users of the buggy behavior. (#6164) + - Accessor, AccessorType, OriginalAccessor, PropertyAccessor, + Settable and Summer in twisted.python.reflect, deprecated since + Twisted 12.1.0, are now removed. (#6689) + +Other +----- + - #5001, #5312, #5387, #5442, #5634, #6221, #6393, #6406, #6485, + #6570, #6575, #6610, #6674, #6684, #6685, #6715, #6729, #6731, + #6736, #6773, #6788, #6793 + + +Twisted Conch 13.2.0 (2013-10-29) +================================= + +Features +-------- + - ckeygen now accepts --no-passphrase to generate unprotected keys. + (#5998) + - twisted.conch.endpoints.SSHCommandClientEndpoint.newConnection now + supplies a convenient default for the `ui` parameter if a value is + not passed in for it. (#6550) + +Bugfixes +-------- + - ckeygen --changepass now doesn't delete unencrypted keys or raise + an exception on encrypted ones. (#5894) + - twisted.conch.endpoints.SSHCommandClientEndpoint now doesn't try + password authentication if there is no password specified. (#6553) + - twisted.conch.endpoints.SSHCommandClientEndpoint now uses the + standard SSH port if no port is specified. (#6631) + +Other +----- + - #5387, #6220 + + +Twisted Lore 13.2.0 (2013-10-29) +================================ + +No significant changes have been made for this release. + +Other +----- + - #6546 + + +Twisted Mail 13.2.0 (2013-10-29) +================================ + +Features +-------- + - twisted.mail.smtp.sendmail now returns a cancellable Deferred. + (#6572) + +Improved Documentation +---------------------- + - twisted.mail.mail now has full API documentation. (#6649) + - twisted.mail.bounce now has full API documentation. (#6652) + +Other +----- + - #5387, #6486 + + +Twisted Names 13.2.0 (2013-10-29) +================================= + +Features +-------- + - twisted.names.authority.FileAuthority now considers any AAAA it + knows about for inclusion in the additional section of a response + (following the same logic previously used for including A records + there). (#6642) + - twisted.names.dns.Message now allows encoding and decoding of the + Authentic Data (AD) and Checking Disabled (CD) flags described in + RFC2535. (#6680) + +Bugfixes +-------- + - twisted.names.resolve.ResolverChain now returns a + twisted.names.error.DomainError failure if its resolvers list is + empty. (#5992) + - twisted.names.authority.FileAuthority now only returns + AuthoritativeDomainError (NXDOMAIN) for names which are subdomains. + (#6475) + - The Deferred returned by twisted.names.client.Resolver.queryTCP now + fires with an error if the TCP connection attempt fails. (#6658) + +Improved Documentation +---------------------- + - Use zope.interface.moduleProvides to allow pydoctor to properly + document the twisted.names.client.lookup* functions. (#6328) + +Other +----- + - #5387, #5668, #6563, #6655 + + +Twisted News 13.2.0 (2013-10-29) +================================ + +No significant changes have been made for this release. + + +Twisted Pair 13.2.0 (2013-10-29) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 13.2.0 (2013-10-29) +================================== + +No significant changes have been made for this release. + + +Twisted Web 13.2.0 (2013-10-29) +=============================== + +Features +-------- + - IAgent has been added to twisted.web.iweb to explicitly define the + interface implemented by the various "Agent" classes in + twisted.web.client. (#6702) + +Bugfixes +-------- + - twisted.web.client.Response.deliverBody now calls connectionLost on + the body protocol for responses with no body (such as 204, 304, and + HEAD requests). (#5476) + - twisted.web.static.loadMimeTypes now uses all available system MIME + types. (#5717) + +Deprecations and Removals +------------------------- + - Two attributes of twisted.web.iweb.IRequest, headers and + received_headers, are now deprecated. (#6704) + +Other +----- + - #5387, #6119, #6121, #6695, #6701, #6734 + + +Twisted Words 13.2.0 (2013-10-29) +================================= + +Bugfixes +-------- + - twisted.words.service.IRCUser now properly reports an error, in + response to NICK commands with non-UTF8 and non-ASCII symbols. + (#5780) + +Other +----- + - #5329, #5387, #6544 + + +Twisted Core 13.1.0 (2013-06-23) +================================ + +Features +-------- + - trial now has an --exitfirst flag which stops the test run after + the first error or failure. (#1518) + - twisted.internet.ssl.CertificateOptions now supports chain + certificates. (#2061) + - twisted.internet.endpoints now provides ProcessEndpoint, a child + process endpoint. (#4696) + - Factory now has a forProtocol classmethod that constructs an + instance and sets its protocol attribute. (#5016) + - twisted.internet.endpoints.connectProtocol allows connecting to a + client endpoint using only a protocol instance, rather than + requiring a factory. (#5270) + - twisted.trial.unittest.SynchronousTestCase.assertNoResult no longer + swallows the result, if the assertion succeeds. (#6291) + - twisted.python.constants.FlagConstant implements __iter__ so that + it can be iterated upon to find the flags that went into a flag + set, and implements __nonzero__ to test as false when empty. + (#6302) + - assertIs and assertIsNot have now been added to + twisted.trial.unittest.TestCase. (#6350) + - twisted.trial.unittest.TestCase.failureResultOf now takes an + optional expected failure type argument. (#6380) + - The POSIX implementation of + twisted.internet.interfaces.IReactorProcess now does not change the + parent process UID or GID in order to run child processes with a + different UID or GID. (#6443) + +Bugfixes +-------- + - self.transport.resumeProducing() will no longer raise an + AssertionError if called after self.transport.loseConnection() + (#986) + - twisted.protocols.ftp.FTP now supports IFTPShell implementations + which return non-ASCII filenames as unicode strings. (#5411) + - twisted.internet.ssl.CertificateOptions now disables SSLv2 if + SSLv23 is selected, allowing only SSLv3 and TLSv1. (#6337) + - trial dist support now gets sys.path from an environment variable + passed to it. (#6390) + - twisted.test.proto_helpers.StringTransportWithDisconnection now + correctly passes Failure instead of an exception to + connectionLost through loseConnection. (#6521) + +Improved Documentation +---------------------- + - The Application howto now provides an example of writing a custom + Service. (#5586) + - The -j flag to trial (introduced in 12.3.0) is now documented. + (#5994) + - The SSL howto now covers twisted.internet.ssl.CertificateOptions + instead of the older context factories it replaces. (#6273) + - The Constants HOWTO documents iteration and truth testing of flags, + as well as previously undocumented boolean operations. (#6302) + +Deprecations and Removals +------------------------- + - twisted.trial.runner.suiteVisit and PyUnitTestCase as well as + visitor methods, all deprecated since Twisted 8.0, have been + removed. (#3231) + - twisted.python._epoll bindings were removed; the epoll reactor now + uses the stdlib-provided epoll support. (#5847) + - The deprecated LENGTH, DATA, COMMA, and NUMBER NetstringReceiver + parser state attributes in t.protocols.basic are removed now. + (#6321) + - twisted.trial.runner.DryRunVisitor is now deprecated. Trial uses a + different method to handle --dry-run now. (#6333) + - twisted.python.hashlib is now deprecated in favor of hashlib from + stdlib. (#6342) + - twisted.web.server's Session.loopFactory, lifetime parameter of + Session.startCheckingExpiration and Session.checkExpired attributes, + deprecated since Twisted 9.0, have been removed. (#6514) + +Other +----- + - #2380, #5197, #5228, #5386, #5459, #5578, #5801, #5952, #5955, + #5981, #6051, #6189, #6228, #6240, #6284, #6286, #6299, #6316, + #6353, #6354, #6368, #6377, #6378, #6381, #6389, #6400, #6403, + #6407, #6416, #6417, #6418, #6419, #6430, #6433, #6438, #6439, + #6440, #6441, #6444, #6459, #6465, #6468, #6477, #6480, #6498, + #6508, #6510, #6525 + + +Twisted Conch 13.1.0 (2013-06-23) +================================= + +Features +-------- + - twisted.conch.endpoints.SSHCommandClientEndpoint is a new + IStreamClientEndpoint which supports connecting a protocol to the + stdio of a command running on a remote host via an SSH connection. + (#4698) + - twisted.conch.client.knownhosts.KnownHostsFile now has a public + `savePath` attribute giving the filesystem path where the known + hosts data is saved to and loaded from. (#6255) + - twisted.conch.endpoints.SSHCommandClientEndpoint.connect() returns + a cancellable Deferred when using new connections. (#6532) + +Other +----- + - #5386, #6342, #6386, #6405, #6541 + + +Twisted Lore 13.1.0 (2013-06-23) +================================ + +Deprecations and Removals +------------------------- + - twisted.lore.lint.parserErrors is deprecated now. (#5386) + + +Twisted Mail 13.1.0 (2013-06-23) +================================ + +Bugfixes +-------- + - twisted.mail.smtp.ESMTPClient no longer tries to use a STARTTLS + capability offered by a server after TLS has already been + negotiated. (#6524) + +Deprecations and Removals +------------------------- + - twisted.mail.IDomain.startMessage, deprecated since 2003, is + removed now. (#4151) + +Other +----- + - #6342 + + +Twisted Names 13.1.0 (2013-06-23) +================================= + +No significant changes have been made for this release. + +Other +----- + - #3908, #6381 + + +Twisted News 13.1.0 (2013-06-23) +================================ + +No significant changes have been made for this release. + +Other +----- + - #6342 + + +Twisted Pair 13.1.0 (2013-06-23) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 13.1.0 (2013-06-23) +================================== + +No significant changes have been made for this release. + + +Twisted Web 13.1.0 (2013-06-23) +=============================== + +Features +-------- + - The deferred returned by twisted.web.client.Agent.request can now + be cancelled. (#4330) + - twisted.web.client.BrowserLikeRedirectAgent, a new redirect agent, + treats HTTP 301 and 302 like HTTP 303 on non-HEAD/GET requests, + changing the method to GET before proceeding. (#5434) + - The new attribute twisted.web.iweb.IResponse.request is a reference + to a provider of the new twisted.web.iweb.IClientRequest interface + which, among other things, provides a way to access the request's + absolute URI. It is now also possible to inspect redirect history + with twisted.web.iweb.IResponse.previousResponse. (#5435) + - twisted.web.client.RedirectAgent now supports relative URI + references in the Location HTTP header. (#5462) + - twisted.web.client now provides readBody to collect the body of a + response from Agent into a string. (#6251) + +Bugfixes +-------- + - twisted.web.xmlrpc.QueryProtocol now generates valid Authorization + headers for long user names and passwords. (#2980) + +Other +----- + - #6122, #6153, #6342, #6381, #6391, #6503 + + +Twisted Words 13.1.0 (2013-06-23) +================================= + +Features +-------- + - twisted.words.protocols.irc.assembleFormattedText flattens a + formatting structure into mIRC-formatted markup; conversely + twisted.words.protocols.irc.stripFormatting removes all mIRC + formatting from text. (#3844) + +Deprecations and Removals +------------------------- + - The `crippled` attribute in + twisted.words.protocols.jabber.xmpp_stringprep is deprecated now. + (#5386) + +Other +----- + - #6315, #6342, #6392, #6402, #6479, #6481, #6482 + + +Twisted Core 13.0.0 (2013-03-19) +================================ + +Features +-------- + - The twisted.protocols.ftp.FTP server now treats "LIST -La", "LIST + -al", and all other combinations of ordering and case of the "-l" + and "-a" flags the same: by ignoring them rather than treating them + as a pathname. (#1333) + - twisted.python.log.FileLogObserver now uses `datetime.strftime` to + format timestamps, adding support for microseconds and timezone + offsets to the `timeFormat` string. (#3513) + - trial now deterministically runs tests in the order in which they + were specified on the command line, instead of quasi-randomly + according to dictionary key ordering. (#5520) + - Cooperator.running can be used to determine the current cooperator + status. (#5937) + - twisted.python.modules.PythonPath now implements `__contains__` to + allow checking, by name, whether a particular module exists within + it. (#6198) + - twisted.application.internet.TimerService.stopService now waits for + any currently running call to finish before firing its deferred. + (#6290) + +Bugfixes +-------- + - twisted.protocols.ftp.FTP now recognizes all glob expressions + supported by fnmatch. (#4181) + - Constant values defined using twisted.python.constants can now be + set as attributes of other classes without triggering an unhandled + AttributeError from the constants implementation. (#5797) + - Fixed problem where twisted.names.client.Resolver was not closing + open file handles which can lead to an out of file descriptor error + on PyPy. (#6216) + - All reactors included in Twisted itself now gracefully handle a + rare case involving delayed calls scheduled very far in the future. + (#6259) + - twisted.trial.reporter.Reporter._trimFrames correctly removes + frames from twisted.internet.utils.runWithWarningsSuppressed again, + after being broke in #6009. (#6282) + +Improved Documentation +---------------------- + - A new "Deploying Twisted with systemd" howto document which + demonstrates how to start a Twisted service using systemd socket + activation. (#5601) + - New "Introduction to Deferreds" howto. Old howto rebranded as + reference documentation. (#6180) + - "Components: Interfaces and Adapters" howto now uses + zope.interface's decorator-based API. (#6269) + +Deprecations and Removals +------------------------- + - twisted.python.util.unsignedID and setIDFunction are deprecated + now. (#5544) + - twisted.python.zshcomp deprecated since 11.1.0 has now been + removed. Shell tab-completion is now handled by + twisted.python.usage. (#5767) + - python.runtime.Platform.isWinNT is deprecated now. Use + Platform.isWindows instead. (#5925) + - twisted.trial.util.findObject, deprecated since Twisted 10.1.0, has + been removed. (#6260) + +Other +----- + - #2915, #4009, #4315, #5909, #5918, #5953, #6026, #6046, #6165, + #6201, #6207, #6208, #6211, #6235, #6236, #6247, #6265, #6272, + #6288, #6297, #6309, #6322, #6323, #6324, #6327, #6332, #6338, + #6349 + + +Twisted Conch 13.0.0 (2013-03-19) +================================= + +Features +-------- + - twisted.conch.client.knownhosts.KnownHostsFile now takes care not + to overwrite changes to its save file made behind its back, making + it safer to use with the same known_hosts file as is being used by + other software. (#6256) + +Other +----- + - #5864, #6257, #6297 + + +Twisted Lore 13.0.0 (2013-03-19) +================================ + +No significant changes have been made for this release. + + +Twisted Mail 13.0.0 (2013-03-19) +================================ + +Bugfixes +-------- + - twisted.mail.smtp.ESMTPClient no longer attempts to negotiate a TLS + session if transport security has been requested and the protocol + is already running on a TLS connection. (#3989) + - twisted.mail.imap4.Query now filters illegal characters from the + values of KEYWORD and UNKEYWORD and also emits them without adding + quotes (which are also illegal). (#4392) + - twisted.mail.imap4.IMAP4Client can now interpret the BODY response + for multipart/* messages with parts which are also multipart/*. + (#4631) + +Deprecations and Removals +------------------------- + - tlsMode attribute of twisted.mail.smtp.ESMTPClient is deprecated. + (#5852) + +Other +----- + - #6218, #6297 + + +Twisted Names 13.0.0 (2013-03-19) +================================= + +Features +-------- + - twisted.names.dns.Name and twisted.names.srvconnect.SRVConnector + now support unicode domain names, automatically converting using + the idna encoding. (#6245) + +Improved Documentation +---------------------- + - The API documentation for IResolver and its implementations has + been updated and consolidated in + twisted.internet.interfaces.IResolver. (#4685) + +Deprecations and Removals +------------------------- + - The retry, Resolver.discoveredAuthority, lookupNameservers, + lookupAddress, extractAuthority, and discoverAuthority APIs in + twisted.names.root have been deprecated since 10.0 and have been + removed. (#5564) + +Other +----- + - #5596, #6246, #6297 + + +Twisted News 13.0.0 (2013-03-19) +================================ + +No significant changes have been made for this release. + + +Twisted Pair 13.0.0 (2013-03-19) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 13.0.0 (2013-03-19) +================================== + +No significant changes have been made for this release. + +Other +----- + - #5740 + + +Twisted Web 13.0.0 (2013-03-19) +=============================== + +Bugfixes +-------- + - twisted.web.template now properly quotes attribute values, + including Tag instances serialized within attribute values. (#6275) + +Other +----- + - #6167, #6297, #6326 + + +Twisted Words 13.0.0 (2013-03-19) +================================= + +Bugfixes +-------- + - twisted.words.im.ircsupport no longer logs a failure whenever + receiving ISUPPORT messages from an IRC server. (#6263) + +Other +----- + - #6297 + + +Twisted Core 12.3.0 (2012-12-20) +================================ + +Features +-------- + - The new -j flag to trial provides a trial runner supporting + multiple worker processes on the local machine, for parallel + testing. (#1784) + - twisted.internet.task.react, a new function, provides a simple API + for running the reactor until a single asynchronous function + completes. (#3270) + - twisted.protocols.ftp.FTP now handles FEAT and OPTS commands. + (#4515) + - trial now supports specifying a debugger other than pdb with the + --debugger command line flag. (#5794) + - twisted.python.util.runWithWarningsSuppressed has been added; it + runs a function with specified warning filters. (#5950) + - trial's skipping feature is now implemented in a way compatible with the + standard library unittest's runner. (#6006) + - The setup3.py script is now provided to provisionally support + building and installing an experimental, incomplete version of + Twisted in a Python 3 environment. (#6040) + - twisted.python.util.FancyStrMixin now supports arbitrary callables + to format attribute values. (#6063) + - Several new methods of twisted.trial.unittest.SynchronousTestCase + - `successResultOf`, `failureResultOf`, and `assertNoResult` - + have been added to make testing `Deferred`-using code easier. + (#6105) + +Bugfixes +-------- + - twisted.protocols.basic.LineReceiver now does not hit the maximum + stack recursion depth when the line and data mode is switched many + times. (#3050) + - twisted.protocols.ftp.FTPFileListProtocol fixed to support files + with space characters in their name. (#4986) + - gireactor and gtk3reactor no longer prevent gi.pygtkcompat from + working, and likewise can load if gi.pygtkcompat has previously + been enabled. (#5676) + - gtk2reactor now works again on FreeBSD, and perhaps other platforms + that were broken by gi interactions. (#5737) + - gireactor now works with certain older versions of gi that are + missing the threads_init() function. (#5790) + - Fixed a bug where twisted.python.sendmsg would sometimes fail with + obscure errors including "Message too long" or "Invalid argument" + on some 64-bit platforms. (#5867) + - twisted.internet.endpoints.TCP6ClientEndpoint now provides + twisted.internet.interfaces.IStreamClientEndpoint (#5876) + - twisted.internet.endpoints.AdoptedStreamServerEndpoint now provides + twisted.internet.interfaces.IStreamServerEndpoint. (#5878) + - Spawning subprocesses with PTYs now works on OS X 10.8. (#5880) + - twisted.internet.test.test_sigchld no longer incorrectly fails when + run after certain other tests. (#6161) + - twisted.internet.test.test_gireactor no longer fails when using + pygobject 3.4 and gtk 3.6 when X11 is unavailable. (#6170) + - twisted/python/sendmsg.c no longer fails to build on OpenBSD. + (#5907) + +Improved Documentation +---------------------- + - The endpoint howto now lists TCP IPv6 server endpoint in the list + of endpoints included with Twisted. (#5741) + +Deprecations and Removals +------------------------- + - The minimum required version of zope.interface is now 3.6.0. + (#5683) + - twisted.internet.interfaces.IReactorArbitrary and + twisted.application.internet.GenericServer and GenericClient, + deprecated since Twisted 10.1, have been removed. (#5943) + - twisted.internet.interfaces.IFinishableConsumer, deprecated since + Twisted 11.1, has been removed. (#5944) + - twisted.python.failure has removed all support for string + exceptions. (#5948) + - assertTrue, assertEqual, and the other free-functions in + twisted.trial.unittest for writing assertions, deprecated since + prior to Twisted 2.3, have been removed. (#5963) + - Ports, connectors, wakers and other reactor-related types no longer + log a nice warning when they are erroneously pickled. Pickling of + such objects continues to be unsupported. (#5979) + - twisted.python.components.Componentized no longer inherits from + Versioned. (#5983) + - twisted.protocols.basic.NetstringReceiver.sendString no longer + accepts objects other than bytes; the removed behavior was + deprecated in Twisted 10.0. (#6025) + - The lookupRecord method of twisted.internet.interfaces.IResolver, + never implemented or called by Twisted, has been removed. (#6091) + +Other +----- + - #4286, #4920, #5627, #5785, #5860, #5865, #5873, #5874, #5877, + #5879, #5884, #5885, #5886, #5891, #5896, #5897, #5899, #5900, + #5901, #5903, #5906, #5908, #5912, #5913, #5914, #5916, #5917, + #5931, #5932, #5933, #5934, #5935, #5939, #5942, #5947, #5956, + #5959, #5967, #5969, #5970, #5972, #5973, #5974, #5975, #5980, + #5985, #5986, #5990, #5995, #6002, #6003, #6005, #6007, #6009, + #6010, #6018, #6019, #6022, #6023, #6033, #6036, #6039, #6041, + #6043, #6052, #6053, #6054, #6055, #6060, #6061, #6065, #6067, + #6068, #6069, #6084, #6087, #6088, #6097, #6099, #6100, #6103, + #6109, #6114, #6139, #6140, #6141, #6142, #6157, #6158, #6159, + #6163, #6172, #6182, #6190, #6194, #6204, #6209 + + +Twisted Conch 12.3.0 (2012-12-20) +================================= + +Bugfixes +-------- + - Passing multiple --auth arguments to conch now correctly adds all + the specified checkers to the conch server (#5881) + - ckeygen --showpub now uses OPENSSH as default display, instead of + breaking because no display type was passed. (#5889) + - ckeygen --showpub catches EncryptedKeyError instead of BadKeyError + to detect that a key needs to be decrypted with a passphrase. + (#5890) + +Other +----- + - #5923 + + +Twisted Lore 12.3.0 (2012-12-20) +================================ + +No significant changes have been made for this release. + + +Twisted Mail 12.3.0 (2012-12-20) +================================ + +Bugfixes +-------- + - twisted.mail.imap4._FetchParser now raises + IllegalClientResponse("Invalid Argument") when protocol encounters + extra bytes at the end of a valid FETCH command. (#4000) + +Improved Documentation +---------------------- + - twisted.mail.tap now documents example usage in its longdesc + output for the 'mail' plugin (#5922) + +Other +----- + - #3751 + + +Twisted Names 12.3.0 (2012-12-20) +================================= + +Deprecations and Removals +------------------------- + - The `protocol` attribute of twisted.names.client.Resolver, + deprecated since Twisted 8.2, has been removed. (#6045) + - twisted.names.hosts.Resolver is no longer a + `twisted.persisted.styles.Versioned` subclass. (#6092) + +Other +----- + - #5594, #6056, #6057, #6058, #6059, #6093 + + +Twisted News 12.3.0 (2012-12-20) +================================ + +No significant changes have been made for this release. + + +Twisted Pair 12.3.0 (2012-12-20) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 12.3.0 (2012-12-20) +================================== + +No significant changes have been made for this release. + + +Twisted Web 12.3.0 (2012-12-20) +=============================== + +Features +-------- + - twisted.web.server.Site now supports an encoders argument to encode + request content, twisted.web.server.GzipEncoderFactory being the + first one provided. (#104) + +Bugfixes +-------- + - twisted.web.http.HTTPChannel.headerReceived now catches the error + if the Content-Length header is not an integer and return a 400 Bad + Request response. (#6029) + - twisted.web.http.HTTPChannel now drops the connection and issues a + 400 error upon receipt of a chunk-encoding encoded request with a + bad chunk-length field. (#6030) + +Improved Documentation +---------------------- + - twisted.web.iweb.IRequest now documents its `content` attribute and + a new "web in 60 seconds" howto demonstrates its use. (#6181) + +Other +----- + - #5882, #5883, #5887, #5920, #6031, #6077, #6078, #6079, #6080, + #6110, #6113, #6196, #6205 + + +Twisted Words 12.3.0 (2012-12-20) +================================= + +Improved Documentation +---------------------- + - The Twisted Words code examples now documents inside each example + description on how to run it. (#5589) + + +Twisted Core 12.2.0 (2012-08-26) +================================ + +Starting with the release after 12.2, Twisted will begin requiring +zope.interface 3.6 (as part of Python 3 support). + +This is the last Twisted release supporting Python 2.6 on Windows. + +Features +-------- + - twisted.protocols.sip.MessageParser now handles multiline headers. + (#2198) + - twisted.internet.endpoints now provides StandardIOEndpoint, a + Standard I/O endpoint. (#4697) + - If a FTPCmdError occurs during twisted.protocols.ftp.FTP.ftp_RETR + sending the file (i.e. it is raised by the IReadFile.send method it + invokes), then it will use that to return an error to the client + rather than necessarily sending a 426 CNX_CLOSED_TXFR_ABORTED + error. (#4913) + - twisted.internet.interfaces.IReactorSocket.adoptStreamConnection is + implemented by some reactors as a way to add an existing + established connection to them. (#5570) + - twisted.internet.endpoints now provides TCP6ServerEndpoint, an IPv6 + TCP server endpoint. (#5694) + - twisted.internet.endpoints now provides TCP6ClientEndpoint, an IPv6 + TCP client endpoint. (#5695) + - twisted.internet.endpoints.serverFromString, the endpoint string + description feature, can now be used to create IPv6 TCP servers. + (#5699) + - twisted.internet.endpoints.serverFromString, the endpoint string + description feature, can now be used to create servers that run on + Standard I/O. (#5729) + - twisted.trial.unittest now offers SynchronousTestCase, a test case + base class that provides usability improvements but not reactor- + based testing features. (#5853) + +Bugfixes +-------- + - twisted.internet.Process.signalProcess now catches ESRCH raised by + os.kill call and raises ProcessExitedAlready instead. (#2420) + - TLSMemoryBIOProtocol (and therefore all SSL transports if pyOpenSSL + >= 0.10) now provides the interfaces already provided by the + underlying transport. (#5182) + +Deprecations and Removals +------------------------- + - Python 2.5 is no longer supported. (#5553) + - The --extra option of trial, deprecated since 11.0, is removed now. + (#3374) + - addPluginDir and getPluginDirs in twisted.python.util are + deprecated now. (#4533) + - twisted.trial.runner.DocTestCase, deprecated in Twisted 8.0, has + been removed. (#5554) + - startKeepingErrors, flushErrors, ignoreErrors, and clearIgnores in + twisted.python.log (deprecated since Twisted 2.5) are removed now. + (#5765) + - unzip, unzipIter, and countZipFileEntries in + twisted.python.zipstream (deprecated in Twisted 11.0) are removed + now. (#5766) + - twisted.test.time_helpers, deprecated since Twisted 10.0, has been + removed. (#5820) + +Other +----- + - #4244, #4532, #4930, #4999, #5129, #5138, #5385, #5521, #5655, + #5674, #5679, #5687, #5688, #5689, #5692, #5707, #5734, #5736, + #5745, #5746, #5747, #5749, #5784, #5816, #5817, #5818, #5819, + #5830, #5857, #5858, #5859, #5869, #5632 + + +Twisted Conch 12.2.0 (2012-08-26) +================================= + +Features +-------- + - twisted.conch.ssh.transport.SSHTransport now returns an + SSHTransportAddress from the getPeer() and getHost() methods. + (#2997) + +Bugfixes +-------- + - twisted.conch now supports commercial SSH implementations which + don't comply with the IETF standard (#1902) + - twisted.conch.ssh.userauth now works correctly with hash + randomization enabled. (#5776) + - twisted.conch no longer relies on __builtins__ being a dict, which + is a purely CPython implementation detail (#5779) + +Other +----- + - #5496, #5617, #5700, #5748, #5777 + + +Twisted Lore 12.2.0 (2012-08-26) +================================ + +No significant changes have been made for this release. + + +Twisted Mail 12.2.0 (2012-08-26) +================================ + +Bugfixes +-------- + - twisted.mail.imap4.IMAP4Server will now generate an error response + when it receives an illegal SEARCH term from a client. (#4080) + - twisted.mail.imap4 now serves BODYSTRUCTURE responses which provide + more information and conform to the IMAP4 RFC more closely. (#5763) + +Deprecations and Removals +------------------------- + - twisted.mail.protocols.SSLContextFactory is now deprecated. (#4963) + - The --passwordfile option to twistd mail is now removed. (#5541) + +Other +----- + - #5697, #5750, #5751, #5783 + + +Twisted Names 12.2.0 (2012-08-26) +================================= + +Features +-------- + - twisted.names.srvconnect.SRVConnector now takes a default port to + use when SRV lookup fails. (#3456) + +Other +----- + - #5647 + + +Twisted News 12.2.0 (2012-08-26) +================================ + +No significant changes have been made for this release. + + +Twisted Pair 12.2.0 (2012-08-26) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 12.2.0 (2012-08-26) +================================== + +No significant changes have been made for this release. + + +Twisted Web 12.2.0 (2012-08-26) +=============================== + +Deprecations and Removals +------------------------- + - twisted.web.static.FileTransfer, deprecated since 9.0, is removed + now. Use a subclass of StaticProducer instead. (#5651) + - ErrorPage, NoResource and ForbiddenResource in twisted.web.error + were deprecated since 9.0 and are removed now. (#5659) + - twisted.web.google, deprecated since Twisted 11.1, is removed now. + (#5768) + +Other +----- + - #5665 + + +Twisted Words 12.2.0 (2012-08-26) +================================= + +No significant changes have been made for this release. + +Other +----- + - #5752, #5753 + + +Twisted Core 12.1.0 (2012-06-02) +================================ + +Features +-------- + - The kqueue reactor has been revived. (#1918) + - twisted.python.filepath now provides IFilePath, an interface for + file path objects. (#2176) + - New gtk3 and gobject-introspection reactors have been added. + (#4558) + - gtk and glib reactors now run I/O and scheduled events with lower + priority, to ensure the UI stays responsive. (#5067) + - IReactorTCP.connectTCP() can now accept IPv6 address literals + (although not hostnames) in order to support connecting to IPv6 + hosts. (#5085) + - twisted.internet.interfaces.IReactorSocket, a new interface, is now + supported by some reactors to listen on sockets set up by external + software (eg systemd or launchd). (#5248) + - twisted.internet.endpoints.clientFromString now also supports + strings in the form of tcp:example.com:80 and ssl:example.com:4321 + (#5358) + - twisted.python.constants.Flags now provides a way to define + collections of flags for bitvector-type uses. (#5384) + - The epoll(7)-based reactor is now the default reactor on Linux. + (#5478) + - twisted.python.runtime.platform.isLinux can be used to check if + Twisted is running on Linux. (#5491) + - twisted.internet.endpoints.serverFromString now recognizes a + "systemd" endpoint type, for listening on a server port inherited + from systemd. (#5575) + - Connections created using twisted.internet.interfaces.IReactorUNIX + now support sending and receiving file descriptors between + different processes. (#5615) + - twisted.internet.endpoints.clientFromString now supports UNIX + client endpoint strings with the path argument specified like + "unix:/foo/bar" in addition to the old style, "unix:path=/foo/bar". + (#5640) + - twisted.protocols.amp.Descriptor is a new AMP argument type which + supports passing file descriptors as AMP command arguments over + UNIX connections. (#5650) + +Bugfixes +-------- + - twisted.internet.abstract.FileDescriptor implements + twisted.internet.interfaces.IPushProducer instead of + twisted.internet.interfaces.IProducer. + twisted.internet.iocpreactor.abstract.FileHandle implements + twisted.internet.interfaces.IPushProducer instead of + twisted.internet.interfaces.IProducer. (#4386) + - The epoll reactor now supports reading/writing to regular files on + stdin/stdout. (#4429) + - Calling .cancel() on any Twisted-provided client endpoint + (TCP4ClientEndpoint, UNIXClientEndpoint, SSL4ClientEndpoint) now + works as documented, rather than logging an AlreadyCalledError. + (#4710) + - A leak of OVERLAPPED structures in some IOCP error cases has been + fixed. (#5372) + - twisted.internet._pollingfile._PollableWritePipe now checks for + outgoing unicode data in write() and writeSequence() instead of + checkWork(). (#5412) + +Improved Documentation +---------------------- + - "Working from Twisted's Subversion repository" links to UQDS and + Combinator are now updated. (#5545) + - Added tkinterdemo.py, an example of Tkinter integration. (#5631) + +Deprecations and Removals +------------------------- + - The 'unsigned' flag to twisted.scripts.tap2rpm.MyOptions is now + deprecated. (#4086) + - Removed the unreachable _fileUrandom method from + twisted.python.randbytes.RandomFactory. (#4530) + - twisted.persisted.journal is removed, deprecated since Twisted + 11.0. (#4805) + - Support for pyOpenSSL 0.9 and older is now deprecated. pyOpenSSL + 0.10 or newer will soon be required in order to use Twisted's SSL + features. (#4974) + - backwardsCompatImplements and fixClassImplements are removed from + twisted.python.components, deprecated in 2006. (#5034) + - twisted.python.reflect.macro was removed, deprecated since Twisted + 8.2. (#5035) + - twisted.python.text.docstringLStrip, deprecated since Twisted + 10.2.0, has been removed (#5036) + - Removed the deprecated dispatch and dispatchWithCallback methods + from twisted.python.threadpool.ThreadPool (deprecated since 8.0) + (#5037) + - twisted.scripts.tapconvert is now deprecated. (#5038) + - twisted.python.reflect's Settable, AccessorType, PropertyAccessor, + Accessor, OriginalAccessor and Summer are now deprecated. (#5451) + - twisted.python.threadpool.ThreadSafeList (deprecated in 10.1) is + removed. (#5473) + - twisted.application.app.initialLog, deprecated since Twisted 8.2.0, + has been removed. (#5480) + - twisted.spread.refpath was deleted, deprecated since Twisted 9.0. + (#5482) + - twisted.python.otp, deprecated since 9.0, is removed. (#5493) + - Removed `dsu`, `moduleMovedForSplit`, and `dict` from + twisted.python.util (deprecated since 10.2) (#5516) + +Other +----- + - #2723, #3114, #3398, #4388, #4489, #5055, #5116, #5242, #5380, + #5392, #5447, #5457, #5484, #5489, #5492, #5494, #5512, #5523, + #5558, #5572, #5583, #5593, #5620, #5621, #5623, #5625, #5637, + #5652, #5653, #5656, #5657, #5660, #5673 + + +Twisted Conch 12.1.0 (2012-06-02) +================================= + +Features +-------- + - twisted.conch.tap now supports cred plugins (#4753) + +Bugfixes +-------- + - twisted.conch.client.knownhosts now handles errors encountered + parsing hashed entries in a known hosts file. (#5616) + +Improved Documentation +---------------------- + - Conch examples window.tac and telnet_echo.tac now have better + explanations. (#5590) + +Other +----- + - #5580 + + +Twisted Lore 12.1.0 (2012-06-02) +================================ + +Bugfixes +-------- + - twisted.plugins.twisted_lore's MathProcessor plugin is now + associated with the correct implementation module. (#5326) + + +Twisted Mail 12.1.0 (2012-06-02) +================================ + +Bugfixes +-------- + - twistd mail --auth, broken in 11.0, now correctly connects + authentication to the portal being used (#5219) + +Other +----- + - #5686 + + +Twisted Names 12.1.0 (2012-06-02) +================================= + +Features +-------- + - "twistd dns" secondary server functionality and + twisted.names.secondary now support retrieving zone information + from a master running on a non-standard DNS port. (#5468) + +Bugfixes +-------- + - twisted.names.dns.DNSProtocol instances no longer throw an + exception when disconnecting. (#5471) + - twisted.names.tap.makeService (thus also "twistd dns") now makes a + DNS server which gives precedence to the hosts file from its + configuration over the remote DNS servers from its configuration. + (#5524) + - twisted.name.cache.CacheResolver now makes sure TTLs on returned + results are never negative. (#5579) + - twisted.names.cache.CacheResolver entries added via the initializer + are now timed out correctly. (#5638) + +Improved Documentation +---------------------- + - The examples now contain instructions on how to run them and + descriptions in the examples index. (#5588) + +Deprecations and Removals +------------------------- + - The deprecated twisted.names.dns.Record_mx.exchange attribute was + removed. (#4549) + + +Twisted News 12.1.0 (2012-06-02) +================================ + +Bugfixes +-------- + - twisted.news.nntp.NNTPServer now has additional test coverage and + less redundant implementation code. (#5537) + +Deprecations and Removals +------------------------- + - The ability to pass a string article to NNTPServer._gotBody and + NNTPServer._gotArticle in t.news.nntp has been deprecated for years + and is now removed. (#4548) + + +Twisted Pair 12.1.0 (2012-06-02) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 12.1.0 (2012-06-02) +================================== + +Deprecations and Removals +------------------------- + - ProcessMonitor.active, consistencyDelay, and consistency in + twisted.runner.procmon were deprecated since 10.1 have been + removed. (#5517) + + +Twisted Web 12.1.0 (2012-06-02) +=============================== + +Features +-------- + - twisted.web.client.Agent and ProxyAgent now support persistent + connections. (#3420) + - Added twisted.web.template.renderElement, a function which renders + an Element to a response. (#5395) + - twisted.web.client.HTTPConnectionPool now ensures that failed + queries on persistent connections are retried, when possible. + (#5479) + - twisted.web.template.XMLFile now supports FilePath objects. (#5509) + - twisted.web.template.renderElement takes a doctype keyword + argument, which will be written as the first line of the response, + defaulting to the HTML5 doctype. (#5560) + +Bugfixes +-------- + - twisted.web.util.formatFailure now quotes all data in its output to + avoid it being mistakenly interpreted as markup. (#4896) + - twisted.web.distrib now lets distributed servers set the response + message. (#5525) + +Deprecations and Removals +------------------------- + - PHP3Script and PHPScript were removed from twisted.web.twcgi, + deprecated since 10.1. Use twcgi.FilteredScript instead. (#5456) + - twisted.web.template.XMLFile's support for file objects and + filenames is now deprecated. Use the new support for FilePath + objects. (#5509) + - twisted.web.server.date_time_string and + twisted.web.server.string_date_time are now deprecated in favor of + twisted.web.http.datetimeToString and twisted.web. + http.stringToDatetime (#5535) + +Other +----- + - #4966, #5460, #5490, #5591, #5602, #5609, #5612 + + +Twisted Words 12.1.0 (2012-06-02) +================================= + +Bugfixes +-------- + - twisted.words.protocols.irc.DccChatFactory.buildProtocol now + returns the protocol object that it creates (#3179) + - twisted.words.im no longer offers an empty threat of a rewrite on + import. (#5598) + +Other +----- + - #5555, #5595 + + +Twisted Core 12.0.0 (2012-02-10) +================================ + +Features +-------- + - The interface argument to IReactorTCP.listenTCP may now be an IPv6 + address literal, allowing the creation of IPv6 TCP servers. (#5084) + - twisted.python.constants.Names now provides a way to define + collections of named constants, similar to the "enum type" feature + of C or Java. (#5382) + - twisted.python.constants.Values now provides a way to define + collections of named constants with arbitrary values. (#5383) + +Bugfixes +-------- + - Fixed an obscure case where connectionLost wasn't called on the + protocol when using half-close. (#3037) + - UDP ports handle socket errors better on Windows. (#3396) + - When idle, the gtk2 and glib2 reactors no longer wake up 10 times a + second. (#4376) + - Prevent a rare situation involving TLS transports, where a producer + may be erroneously left unpaused. (#5347) + - twisted.internet.iocpreactor.iocpsupport now has fewer 64-bit + compile warnings. (#5373) + - The GTK2 reactor is now more responsive on Windows. (#5396) + - TLS transports now correctly handle producer registration after the + connection has been lost. (#5439) + - twisted.protocols.htb.Bucket now empties properly with a non-zero + drip rate. (#5448) + - IReactorSSL and ITCPTransport.startTLS now synchronously propagate + errors from the getContext method of context factories, instead of + being capturing them and logging them as unhandled. (#5449) + +Improved Documentation +---------------------- + - The multicast documentation has been expanded. (#4262) + - twisted.internet.defer.Deferred now documents more return values. + (#5399) + - Show a better starting page at + http://twistedmatrix.com/documents/current (#5429) + +Deprecations and Removals +------------------------- + - Remove the deprecated module twisted.enterprise.reflector. (#4108) + - Removed the deprecated module twisted.enterprise.row. (#4109) + - Remove the deprecated module twisted.enterprise.sqlreflector. + (#4110) + - Removed the deprecated module twisted.enterprise.util, as well as + twisted.enterprise.adbapi.safe. (#4111) + - Python 2.4 is no longer supported on any platform. (#5060) + - Removed printTraceback and noOperation from twisted.spread.pb, + deprecated since Twisted 8.2. (#5370) + +Other +----- + - #1712, #2725, #5284, #5325, #5331, #5362, #5364, #5371, #5407, + #5427, #5430, #5431, #5440, #5441 + + +Twisted Conch 12.0.0 (2012-02-10) +================================= + +Features +-------- + - use Python shadow module for authentication if it's available + (#3242) + +Bugfixes +-------- + - twisted.conch.ssh.transport.messages no longer ends with with old + message IDs on platforms with differing dict() orderings (#5352) + +Other +----- + - #5225 + + +Twisted Lore 12.0.0 (2012-02-10) +================================ + +No significant changes have been made for this release. + + +Twisted Mail 12.0.0 (2012-02-10) +================================ + +No significant changes have been made for this release. + + +Twisted Names 12.0.0 (2012-02-10) +================================= + +Bugfixes +-------- + - twisted.names.dns.Message now sets the `auth` flag on RRHeader + instances it creates to reflect the authority of the message + itself. (#5421) + + +Twisted News 12.0.0 (2012-02-10) +================================ + +No significant changes have been made for this release. + + +Twisted Pair 12.0.0 (2012-02-10) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 12.0.0 (2012-02-10) +================================== + +No significant changes have been made for this release. + + +Twisted Web 12.0.0 (2012-02-10) +=============================== + +Features +-------- + - twisted.web.util.redirectTo now raises TypeError if the URL passed + to it is a unicode string instead of a byte string. (#5236) + - The new class twisted.web.template.CharRef provides support for + inserting numeric character references in output generated by + twisted.web.template. (#5408) + +Improved Documentation +---------------------- + - The Twisted Web howto now has a section on proxies and reverse + proxies. (#399) + - The web client howto now covers ContentDecoderAgent and links to an + example of its use. (#5415) + +Other +----- + - #5404, #5438 + + +Twisted Words 12.0.0 (2012-02-10) +================================= + +Improved Documentation +---------------------- + - twisted.words.im.basechat now has improved API documentation. + (#2458) + +Other +----- + - #5401 + + +Twisted Core 11.1.0 (2011-11-15) +================================ + +Features +-------- + - TCP and TLS transports now support abortConnection() which, unlike + loseConnection(), always closes the connection immediately. (#78) + - Failures received over PB when tracebacks are disabled now display + the wrapped exception value when they are printed. (#581) + - twistd now has a --logger option, allowing the use of custom log + observers. (#638) + - The default reactor is now poll(2) on platforms that support it. + (#2234) + - twisted.internet.defer.inlineCallbacks(f) now raises TypeError when + f returns something other than a generator or uses returnValue as a + non-generator. (#2501) + - twisted.python.usage.Options now supports performing Zsh tab- + completion on demand. Tab-completion for Twisted commands is + supported out-of-the-box on any recent zsh release. Third-party + commands may take advantage of zsh completion by copying the + provided stub file. (#3078) + - twisted.protocols.portforward now uses flow control between its + client and server connections to avoid having to buffer an + unbounded amount of data when one connection is slower than the + other. (#3350) + - On Windows, the select, IOCP, and Gtk2 reactors now implement + IReactorWin32Events (most notably adding support for serial ports + to these reactors). (#4862) + - twisted.python.failure.Failure no longer captures the state of + locals and globals of all stack frames by default, because it is + expensive to do and rarely used. You can pass captureVars=True to + Failure's constructor if you want to capture this data. (#5011) + - twisted.web.client now supports automatic content-decoding via + twisted.web.client.ContentDecoderAgent, gzip being supported for + now. (#5053) + - Protocols may now implement ILoggingContext to customize their + logging prefix. twisted.protocols.policies.ProtocolWrapper and the + endpoints wrapper now take advantage of this feature to ensure the + application protocol is still reflected in logs. (#5062) + - AMP's raw message-parsing performance was increased by + approximately 12%. (#5075) + - Twisted is now installable on PyPy, because some incompatible C + extensions are no longer built. (#5158) + - twisted.internet.defer.gatherResults now accepts a consumeErrors + parameter, with the same meaning as the corresponding argument for + DeferredList. (#5159) + - Added RMD (remove directory) support to the FTP client. (#5259) + - Server factories may now implement ILoggingContext to customize the + name that is logged when the reactor uses one to start listening on + a port. (#5292) + - The implementations of ITransport.writeSequence will now raise + TypeError if passed unicode strings. (#3896) + - iocp reactor now operates correctly on 64 bit Python runtimes. + (#4669) + - twistd ftp now supports the cred plugin. (#4752) + - twisted.python.filepath.FilePath now has an API to retrieve the + permissions of the underlying file, and two methods to determine + whether it is a block device or a socket. (#4813) + - twisted.trial.unittest.TestCase is now compatible with Python 2.7's + assertDictEqual method. (#5291) + +Bugfixes +-------- + - The IOCP reactor now does not try to erroneously pause non- + streaming producers. (#745) + - Unicode print statements no longer blow up when using Twisted's + logging system. (#1990) + - Process transports on Windows now support the `writeToChild` method + (but only for stdin). (#2838) + - Zsh tab-completion of Twisted commands no longer relies on + statically generated files, but instead generates results on-the- + fly - ensuring accurate tab-completion for the version of Twisted + actually in use. (#3078) + - LogPublishers don't use the global log publisher for reporting + broken observers anymore. (#3307) + - trial and twistd now add the current directory to sys.path even + when running as root or on Windows. mktap, tapconvert, and + pyhtmlizer no longer add the current directory to sys.path. (#3526) + - twisted.internet.win32eventreactor now stops immediately if + reactor.stop() is called from an IWriteDescriptor.doWrite + implementation instead of delaying shutdown for an arbitrary period + of time. (#3824) + - twisted.python.log now handles RuntimeErrors more gracefully, and + always restores log observers after an exception is raised. (#4379) + - twisted.spread now supports updating new-style RemoteCache + instances. (#4447) + - twisted.spread.pb.CopiedFailure will no longer be thrown into a + generator as a (deprecated) string exception but as a + twisted.spread.pb.RemoteException. (#4520) + - trial now gracefully handles the presence of objects in sys.modules + which respond to attributes being set on them by modifying + sys.modules. (#4748) + - twisted.python.deprecate.deprecatedModuleAttribute no longer + spuriously warns twice when used to deprecate a module within a + package. This should make it easier to write unit tests for + deprecated modules. (#4806) + - When pyOpenSSL 0.10 or newer is available, SSL support now uses + Twisted for all I/O and only relies on OpenSSL for cryptography, + avoiding a number of tricky, potentially broken edge cases. (#4854) + - IStreamClientEndpointStringParser.parseStreamClient now correctly + describes how it will be called by clientFromString (#4956) + - twisted.internet.defer.Deferreds are 10 times faster at handling + exceptions raised from callbacks, except when setDebugging(True) + has been called. (#5011) + - twisted.python.filepath.FilePath.copyTo now raises OSError(ENOENT) + if the source path being copied does not exist. (#5017) + - twisted.python.modules now supports iterating over namespace + packages without yielding duplicates. (#5030) + - reactor.spawnProcess now uses the resource module to guess the + maximum possible open file descriptor when /dev/fd exists but gives + incorrect results. (#5052) + - The memory BIO TLS/SSL implementation now supports producers + correctly. (#5063) + - twisted.spread.pb.Broker no longer creates an uncollectable + reference cycle when the logout callback holds a reference to the + client mind object. (#5079) + - twisted.protocols.tls, and SSL/TLS support in general, now do clean + TLS close alerts when disconnecting. (#5118) + - twisted.persisted.styles no longer uses the deprecated allYourBase + function (#5193) + - Stream client endpoints now start (doStart) and stop (doStop) the + factory passed to the connect method, instead of a different + implementation-detail factory. (#5278) + - SSL ports now consistently report themselves as SSL rather than TCP + when logging their close message. (#5292) + - Serial ports now deliver connectionLost to the protocol when + closed. (#3690) + - win32eventreactor now behaves better in certain rare cases in which + it previously would have failed to deliver connection lost + notification to a protocol. (#5233) + +Improved Documentation +---------------------- + - Test driven development with Twisted and Trial is now documented in + a how-to. (#2443) + - A new howto-style document covering twisted.protocols.amp has been + added. (#3476) + - Added sample implementation of a Twisted push producer/consumer + system. (#3835) + - The "Deferred in Depth" tutorial now includes accurate output for + the deferred_ex2.py example. (#3941) + - The server howto now covers the Factory.buildProtocol method. + (#4761) + - The testing standard and the trial tutorial now recommend the + `assertEqual` form of assertions rather than the `assertEquals` to + coincide with the standard library unittest's preference. (#4989) + - twisted.python.filepath.FilePath's methods now have more complete + API documentation (docstrings). (#5027) + - The Clients howto now uses buildProtocol more explicitly, hopefully + making it easier to understand where Protocol instances come from. + (#5044) + +Deprecations and Removals +------------------------- + - twisted.internet.interfaces.IFinishableConsumer is now deprecated. + (#2661) + - twisted.python.zshcomp is now deprecated in favor of the tab- + completion system in twisted.python.usage (#3078) + - The unzip and unzipIter functions in twisted.python.zipstream are + now deprecated. (#3666) + - Options.optStrings, deprecated for 7 years, has been removed. Use + Options.optParameters instead. (#4552) + - Removed the deprecated twisted.python.dispatch module. (#5023) + - Removed the twisted.runner.procutils module that was deprecated in + Twisted 2.3. (#5049) + - Removed twisted.trial.runner.DocTestSuite, deprecated in Twisted + 8.0. (#5111) + - twisted.scripts.tkunzip is now deprecated. (#5140) + - Deprecated option --password-file in twistd ftp (#4752) + - mktap, deprecated since Twisted 8.0, has been removed. (#5293) + +Other +----- + - #1946, #2562, #2674, #3074, #3077, #3776, #4227, #4539, #4587, + #4619, #4624, #4629, #4683, #4690, #4702, #4778, #4944, #4945, + #4949, #4952, #4957, #4979, #4980, #4987, #4990, #4994, #4995, + #4997, #5003, #5008, #5009, #5012, #5019, #5042, #5046, #5051, + #5065, #5083, #5088, #5089, #5090, #5101, #5108, #5109, #5112, + #5114, #5125, #5128, #5131, #5136, #5139, #5144, #5146, #5147, + #5156, #5160, #5165, #5191, #5205, #5215, #5217, #5218, #5223, + #5243, #5244, #5250, #5254, #5261, #5266, #5273, #5299, #5301, + #5302, #5304, #5308, #5311, #5321, #5322, #5327, #5328, #5332, + #5336 + + +Twisted Conch 11.1.0 (2011-11-15) +================================= + +Features +-------- + - twisted.conch.ssh.filetransfer.FileTransferClient now handles short + status messages, not strictly allowed by the RFC, but sent by some + SSH implementations. (#3009) + - twisted.conch.manhole now supports CTRL-A and CTRL-E to trigger + HOME and END functions respectively. (#5252) + +Bugfixes +-------- + - When run from an unpacked source tarball or a VCS checkout, the + bin/conch/ scripts will now use the version of Twisted they are + part of. (#3526) + - twisted.conch.insults.window.ScrolledArea now passes no extra + arguments to object.__init__ (which works on more versions of + Python). (#4197) + - twisted.conch.telnet.ITelnetProtocol now has the correct signature + for its unhandledSubnegotiation() method. (#4751) + - twisted.conch.ssh.userauth.SSHUserAuthClient now more closely + follows the RFC 4251 definition of boolean values when negotiating + for key-based authentication, allowing better interoperability with + other SSH implementations. (#5241) + - twisted.conch.recvline.RecvLine now ignores certain function keys + in its keystrokeReceived method instead of raising an exception. + (#5246) + +Deprecations and Removals +------------------------- + - The --user option to `twistd manhole' has been removed as it was + dead code with no functionality associated with it. (#5283) + +Other +----- + - #5107, #5256, #5349 + + +Twisted Lore 11.1.0 (2011-11-15) +================================ + +Bugfixes +-------- + - When run from an unpacked source tarball or a VCS checkout, + bin/lore/lore will now use the version of Twisted it is part of. + (#3526) + +Deprecations and Removals +------------------------- + - Removed compareMarkPos and comparePosition from lore.tree, + deprecated in Twisted 9.0. (#5127) + + +Twisted Mail 11.1.0 (2011-11-15) +================================ + +Features +-------- + - twisted.mail.smtp.LOGINCredentials now generates challenges with + ":" instead of "\0" for interoperability with Microsoft Outlook. + (#4692) + +Bugfixes +-------- + - When run from an unpacked source tarball or a VCS checkout, + bin/mail/mailmail will now use the version of Twisted it is part + of. (#3526) + +Other +----- + - #4796, #5006 + + +Twisted Names 11.1.0 (2011-11-15) +================================= + +Features +-------- + - twisted.names.dns.Message now parses records of unknown type into + instances of a new `UnknownType` class. (#4603) + +Bugfixes +-------- + - twisted.names.dns.Name now detects loops in names it is decoding + and raises an exception. Previously it would follow the loop + forever, allowing a remote denial of service attack against any + twisted.names client or server. (#5064) + - twisted.names.hosts.Resolver now supports IPv6 addresses; its + lookupAddress method now filters them out and its lookupIPV6Address + method is now implemented. (#5098) + + +Twisted News 11.1.0 (2011-11-15) +================================ + +No significant changes have been made for this release. + + +Twisted Pair 11.1.0 (2011-11-15) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 11.1.0 (2011-11-15) +================================== + +No significant changes have been made for this release. + + +Twisted Web 11.1.0 (2011-11-15) +=============================== + +Features +-------- + - twisted.web.client.ProxyAgent is a new HTTP/1.1 web client which + adds proxy support. (#1774) + - twisted.web.client.Agent now takes optional connectTimeout and + bindAddress arguments which are forwarded to the subsequent + connectTCP/connectSSL call. (#3450) + - The new class twisted.web.client.FileBodyProducer makes it easy to + upload data in HTTP requests made using the Agent client APIs. + (#4017) + - twisted.web.xmlrpc.XMLRPC now allows its lookupProcedure method to + be overridden to change how XML-RPC procedures are dispatched. + (#4836) + - A new HTTP cookie-aware Twisted Web Agent wrapper is included in + twisted.web.client.CookieAgent (#4922) + - New class twisted.web.template.TagLoader provides an + ITemplateLoader implementation which loads already-created + twisted.web.iweb.IRenderable providers. (#5040) + - The new class twisted.web.client.RedirectAgent adds redirect + support to the HTTP 1.1 client stack. (#5157) + - twisted.web.template now supports HTML tags from the HTML5 + standard, including and