diff --git a/NEWS b/NEWS index 7309a58578a..e8fcb73f081 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,101 @@ Ticket numbers in this file can be looked up by visiting http://twistedmatrix.com/trac/ticket/ +Twisted Core 16.1.0 (2016-04-04) +================================ + +Features +-------- + - twisted.application.internet.ClientService, a service that + maintains a persistent outgoing endpoint-based connection; a + replacement for ReconnectingClientFactory that uses modern APIs. + (#4735) + - Twisted now uses setuptools' sdist to build tarballs. (#7985) + +Bugfixes +-------- + - Twisted is now compatible with OpenSSL 1.0.2f. (#8189) + +Other +----- + - #4543, #8124, #8193, #8210, #8220, #8223, #8226, #8242 + + +Twisted Conch 16.1.0 (2016-04-04) +================================= + +Features +-------- + - twisted.conch.checkers is now ported to Python 3. (#8225) + - twisted.conch.telnet is now ported to Python 3. (#8228) + - twisted.conch.manhole_ssh.ConchFactory (used by `twistd manhole`) + no longer uses a hardcoded SSH server key, and will generate a + persistent one, saving it in your user appdir. If you use + ConchFactory, you will now need to provide your own SSH server key. + (#8229) + +Other +----- + - #8237, #8240 + + +Twisted Mail 16.1.0 (2016-04-04) +================================ + +No significant changes have been made for this release. + + +Twisted Names 16.1.0 (2016-04-04) +================================= + +No significant changes have been made for this release. + + +Twisted News 16.1.0 (2016-04-04) +================================ + +No significant changes have been made for this release. + + +Twisted Pair 16.1.0 (2016-04-04) +================================ + +No significant changes have been made for this release. + + +Twisted Runner 16.1.0 (2016-04-04) +================================== + +No significant changes have been made for this release. + + +Twisted Web 16.1.0 (2016-04-04) +=============================== + +Features +-------- + - twisted.web.http.Request.addCookie now supports both unicode and + bytes arguments, with unicode arguments being encoded to UTF-8. + (#8067) + +Bugfixes +-------- + - twisted.web.util.DeferredResource no longer causes spurious + "Unhandled error in Deferred" log messages. (#8192) + - twisted.web.server.site.makeSession now generates an uid of type + bytes on both Python 2 and 3. (#8215) + +Other +----- + - #8238 + + +Twisted Words 16.1.0 (2016-04-04) +================================= + +No significant changes have been made for this release. + + Twisted Core 16.0.0 (2016-03-10) ================================ diff --git a/README.rst b/README.rst index 647e25c22bf..b8f44ca737e 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -Twisted 16.0.0 +Twisted 16.1.0 ============== |pypi| @@ -6,14 +6,13 @@ Twisted 16.0.0 .. code:: - oh, sorry, this is easier than the last time I looked - idnar: HAHA PWNT - idnar: I WORKED SUPER HARD TO MAKE YOUR LIFE EASIER FOR MONTHS AND - NOW YOU HAVE TO EAT CROWWWW - idnar: I AM THE WINNER IN THIS TRANSACTION SOMEHOW + new core task https://tm.tl/#8224 by hawkowl: We should actively discourage the use of versions of Twisted older than 14.0 + "actively discourage" + that brings up some amusing mental imagery :D + * idnar imagines hawkowl crashing in through somebody's window to yell at them for using ancient software -For information on what's new in Twisted 16.0.0, see the `NEWS `_ file that comes with the distribution. +For information on what's new in Twisted 16.1.0, see the `NEWS `_ file that comes with the distribution. What is this? diff --git a/docs/fun/Twisted.Quotes b/docs/fun/Twisted.Quotes index 3fc34d7333e..e69de29bb2d 100644 --- a/docs/fun/Twisted.Quotes +++ b/docs/fun/Twisted.Quotes @@ -1,11 +0,0 @@ - new core task https://tm.tl/#8224 by hawkowl: We should actively discourage the use of versions of Twisted older than 14.0 - "actively discourage" - that brings up some amusing mental imagery :D -* idnar imagines hawkowl crashing in through somebody's window to yell at them for using ancient software -% - lukasa: i am neck-deep in twistd, ripping out old logging - we may end up with a 25% perf gain in the end - or we may have a great huge fire - i may have Green Day blasting - hawkowl: I feel like holiday would be good to have blasting while doing that - what's a holiday diff --git a/docs/historic/Quotes/Twisted-16.1 b/docs/historic/Quotes/Twisted-16.1 new file mode 100644 index 00000000000..3fc34d7333e --- /dev/null +++ b/docs/historic/Quotes/Twisted-16.1 @@ -0,0 +1,11 @@ + new core task https://tm.tl/#8224 by hawkowl: We should actively discourage the use of versions of Twisted older than 14.0 + "actively discourage" + that brings up some amusing mental imagery :D +* idnar imagines hawkowl crashing in through somebody's window to yell at them for using ancient software +% + lukasa: i am neck-deep in twistd, ripping out old logging + we may end up with a 25% perf gain in the end + or we may have a great huge fire + i may have Green Day blasting + hawkowl: I feel like holiday would be good to have blasting while doing that + what's a holiday diff --git a/twisted/_version.py b/twisted/_version.py index 57e908d56c9..68c3ca7a4bd 100644 --- a/twisted/_version.py +++ b/twisted/_version.py @@ -8,4 +8,6 @@ """ from twisted.python import versions -version = versions.Version('twisted', 16, 0, 0) +# Let's avoid conflating preveil development release versions with official +# twisted version numbers. +version = versions.Version('twisted', 160, 1, 5) diff --git a/twisted/conch/topfiles/8225.feature b/twisted/conch/topfiles/8225.feature deleted file mode 100644 index 6403c747389..00000000000 --- a/twisted/conch/topfiles/8225.feature +++ /dev/null @@ -1 +0,0 @@ -twisted.conch.checkers is now ported to Python 3. diff --git a/twisted/conch/topfiles/8228.feature b/twisted/conch/topfiles/8228.feature deleted file mode 100644 index 503a33e869c..00000000000 --- a/twisted/conch/topfiles/8228.feature +++ /dev/null @@ -1 +0,0 @@ -twisted.conch.telnet is now ported to Python 3. diff --git a/twisted/conch/topfiles/8229.feature b/twisted/conch/topfiles/8229.feature deleted file mode 100644 index c8267ff80bb..00000000000 --- a/twisted/conch/topfiles/8229.feature +++ /dev/null @@ -1 +0,0 @@ -twisted.conch.manhole_ssh.ConchFactory (used by `twistd manhole`) no longer uses a hardcoded SSH server key, and will generate a persistent one, saving it in your user appdir. If you use ConchFactory, you will now need to provide your own SSH server key. diff --git a/twisted/conch/topfiles/8237.misc b/twisted/conch/topfiles/8237.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/conch/topfiles/8240.misc b/twisted/conch/topfiles/8240.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/conch/topfiles/NEWS b/twisted/conch/topfiles/NEWS index 0dcdcde5e16..dde8bce4161 100644 --- a/twisted/conch/topfiles/NEWS +++ b/twisted/conch/topfiles/NEWS @@ -1,6 +1,24 @@ Ticket numbers in this file can be looked up by visiting http://twistedmatrix.com/trac/ticket/ +Twisted Conch 16.1.0 (2016-04-04) +================================= + +Features +-------- + - twisted.conch.checkers is now ported to Python 3. (#8225) + - twisted.conch.telnet is now ported to Python 3. (#8228) + - twisted.conch.manhole_ssh.ConchFactory (used by `twistd manhole`) + no longer uses a hardcoded SSH server key, and will generate a + persistent one, saving it in your user appdir. If you use + ConchFactory, you will now need to provide your own SSH server key. + (#8229) + +Other +----- + - #8237, #8240 + + Twisted Conch 16.0.0 (2016-03-10) ================================= diff --git a/twisted/conch/topfiles/README b/twisted/conch/topfiles/README index a43ea3c1695..3285b90e17b 100644 --- a/twisted/conch/topfiles/README +++ b/twisted/conch/topfiles/README @@ -1,4 +1,4 @@ -Twisted Conch 16.0.0 +Twisted Conch 16.1.0 Twisted Conch depends on Twisted Core and PyCA's Cryptography (). diff --git a/twisted/cred/portal.py b/twisted/cred/portal.py index 4c81d5f12cd..0714a8aa2fa 100644 --- a/twisted/cred/portal.py +++ b/twisted/cred/portal.py @@ -79,7 +79,7 @@ def registerChecker(self, checker, *credentialInterfaces): self.checkers[credentialInterface] = checker - def login(self, credentials, mind, *interfaces): + def login(self, credentials, mind, *interfaces, **transport): """ @param credentials: an implementor of L{twisted.cred.credentials.ICredentials} @@ -116,7 +116,7 @@ def login(self, credentials, mind, *interfaces): """ for i in self.checkers: if i.providedBy(credentials): - return maybeDeferred(self.checkers[i].requestAvatarId, credentials + return maybeDeferred(self.checkers[i].requestAvatarId, credentials, transport.get('transport'), ).addCallback(self.realm.requestAvatar, mind, *interfaces ) ifac = providedBy(credentials) diff --git a/twisted/mail/imap4.py b/twisted/mail/imap4.py index 7fba48d7d0b..c4304fcbaaf 100644 --- a/twisted/mail/imap4.py +++ b/twisted/mail/imap4.py @@ -956,9 +956,14 @@ def do_LOGOUT(self, tag): def do_NOOP(self, tag): self.sendPositiveResponse(tag, 'NOOP No operation performed') + def do_select_NOOP(self, tag): + self.sendUntaggedResponse(str(self.mbox.getMessageCount()) + ' EXISTS') + self.sendUntaggedResponse(str(self.mbox.getRecentCount()) + ' RECENT') + self.sendPositiveResponse(tag, 'NOOP completed') + unauth_NOOP = (do_NOOP,) auth_NOOP = unauth_NOOP - select_NOOP = unauth_NOOP + select_NOOP = (do_select_NOOP,) logout_NOOP = unauth_NOOP def do_AUTHENTICATE(self, tag, args): @@ -1000,7 +1005,7 @@ def __cbAuthChunk(self, result, chal, tag): if chal.moreChallenges(): self._setupChallenge(chal, tag) else: - self.portal.login(chal, None, IAccount).addCallbacks( + self.portal.login(chal, None, IAccount, transport=self.transport).addCallbacks( self.__cbAuthResp, self.__ebAuthResp, (tag,), None, (tag,), None @@ -1072,7 +1077,7 @@ def authenticateLogin(self, user, passwd): if self.portal: return self.portal.login( credentials.UsernamePassword(user, passwd), - None, IAccount + None, IAccount, transport=self.transport ) raise UnauthorizedLogin() @@ -1333,7 +1338,7 @@ def _cbAppendGotMailbox(self, mbox, tag, flags, date, message): self.sendNegativeResponse(tag, '[TRYCREATE] No such mailbox') return - d = mbox.addMessage(message, flags, date) + d = mbox.appendMessage(message, flags, date) d.addCallback(self.__cbAppend, tag, mbox) d.addErrback(self.__ebAppend, tag) @@ -1435,8 +1440,12 @@ def do_SEARCH(self, tag, charset, query, uid=0): else: # that's not the ideal way to get all messages, there should be a # method on mailboxes that gives you all of them + # + # It's perfectly valid to do a seq# SEARCH on an empty mailbox, + # but it's invalid to reference an 'unoccupied' seq# during a + # FETCH. Therefore we must set `uid=True` during this fetch(). s = parseIdList('1:*') - maybeDeferred(self.mbox.fetch, s, uid=uid + maybeDeferred(self.mbox.fetch, s, uid=True ).addCallback(self.__cbManualSearch, tag, self.mbox, query, uid ).addErrback(self.__ebSearch, tag) @@ -2098,8 +2107,7 @@ def _cbCopySelectedMailbox(self, mbox, tag, messages, mailbox, uid): if not mbox: self.sendNegativeResponse(tag, 'No such mailbox: ' + mailbox) else: - maybeDeferred(self.mbox.fetch, messages, uid - ).addCallback(self.__cbCopy, tag, mbox + maybeDeferred(self.__cbCopy, mbox, messages, uid ).addCallback(self.__cbCopied, tag, mbox ).addErrback(self.__ebCopy, tag ) @@ -2107,47 +2115,17 @@ def _cbCopySelectedMailbox(self, mbox, tag, messages, mailbox, uid): def _ebCopySelectedMailbox(self, failure, tag): self.sendBadResponse(tag, 'Server error: ' + str(failure.value)) - def __cbCopy(self, messages, tag, mbox): - # XXX - This should handle failures with a rollback or something - addedDeferreds = [] - - fastCopyMbox = IMessageCopier(mbox, None) - for (id, msg) in messages: - if fastCopyMbox is not None: - d = maybeDeferred(fastCopyMbox.copy, msg) - addedDeferreds.append(d) - continue - - # XXX - The following should be an implementation of IMessageCopier.copy - # on an IMailbox->IMessageCopier adapter. - - flags = msg.getFlags() - date = msg.getInternalDate() + def __cbCopy(self, mbox, messages, uid): + return self.mbox.copyMessage(mbox, messages, uid) - body = IMessageFile(msg, None) - if body is not None: - bodyFile = body.open() - d = maybeDeferred(mbox.addMessage, bodyFile, flags, date) - else: - def rewind(f): - f.seek(0) - return f - buffer = tempfile.TemporaryFile() - d = MessageProducer(msg, buffer, self._scheduler - ).beginProducing(None - ).addCallback(lambda _, b=buffer, f=flags, d=date: mbox.addMessage(rewind(b), f, d) - ) - addedDeferreds.append(d) - return defer.DeferredList(addedDeferreds) - - def __cbCopied(self, deferredIds, tag, mbox): + def __cbCopied(self, resultIds, tag, mbox): ids = [] failures = [] - for (status, result) in deferredIds: + for (status, result) in resultIds: if status: ids.append(result) else: - failures.append(result.value) + failures.append(result) if failures: self.sendNegativeResponse(tag, '[ALERT] Some messages were not copied') else: @@ -4882,7 +4860,18 @@ def _getContentType(msg): major, minor = type else: major = minor = None - attrs = dict(x.strip().lower().split('=', 1) for x in mimetype[1:]) + """ + RFC1341 + + The type, subtype, and parameter names are not case sensitive. + For example, TEXT, Text, and TeXt are all equivalent. Parameter + values are normally case sensitive, but certain parameters are + interpreted to be case- insensitive, depending on the intended + use. (For example, multipart boundaries are case-sensitive, but + the "access- type" for message/External-body is not + case-sensitive.) + """ + attrs = dict(x.strip().split('=', 1) for x in mimetype[1:]) else: major = minor = None else: @@ -4950,7 +4939,7 @@ def _disposition(self, disp): disp = (disp[0].lower(), None) elif len(disp) > 1: # XXX Poorly tested parser - params = [x for param in disp[1:] for x in param.split('=', 1)] + params = [unquote(x) for param in disp[1:] for x in param.split('=', 1)] disp = [disp[0].lower(), params] return disp else: @@ -5542,8 +5531,8 @@ def removeListener(listener): this mailbox. """ - def addMessage(message, flags = (), date = None): - """Add the given message to this mailbox. + def appendMessage(message, flags = (), date = None): + """Append the given message to this mailbox. @type message: A file-like object @param message: The RFC822 formatted message @@ -5564,6 +5553,29 @@ def addMessage(message, flags = (), date = None): read-write. """ + def copyMessage(dest_mailbox, message_set, uid = False): + """Copy message from @self to @dest_mailbox. + + @type dest_mailbox: Object that implements IMailbox + @param dest_mailbox: The destination mailbox + + @type message_set: C{MessageSet} + @param message_set: The identifiers of messages to copy. + + @type uid: C{bool} + @param uid: If true, the IDs specified in the query are UIDs; + otherwise they are message sequence IDs. + + @rtype: C{List (bool, int)} + @return: A list of tuples where the first element indicates whether + the copy was successful and the second element is the ID for the + relevant message. + + @raise ReadOnlyMailbox: Raised if this Mailbox is not open for + read-write. + """ + + def expunge(): """Remove all messages flagged \\Deleted. @@ -5636,7 +5648,7 @@ def close(): def _formatHeaders(headers): hdrs = [': '.join((k.title(), '\r\n'.join(v.splitlines()))) for (k, v) in headers.iteritems()] - hdrs = '\r\n'.join(hdrs) + '\r\n' + hdrs = '\r\n'.join(hdrs) + '\r\n\r\n' return hdrs def subparts(m): @@ -5719,7 +5731,6 @@ def _produce(self): boundary = boundary[1:-1] self.write(_formatHeaders(headers)) - self.write('\r\n') if self.msg.isMultipart(): for p in subparts(self.msg): self.write('\r\n--%s\r\n' % (boundary,)) diff --git a/twisted/mail/smtp.py b/twisted/mail/smtp.py index edb38c1247d..14c7e2cbc68 100644 --- a/twisted/mail/smtp.py +++ b/twisted/mail/smtp.py @@ -731,7 +731,7 @@ def do_DATA(self, rest): for (user, msgFunc) in recipients: try: msg = msgFunc() - rcvdhdr = self.receivedHeader(helo, origin, [user]) + rcvdhdr = self.receivedHeader(helo, origin, [u for (u, _) in recipients]) if rcvdhdr: msg.lineReceived(rcvdhdr) msgs.append(msg) @@ -891,7 +891,8 @@ def validateFrom(self, helo, origin): result = self.portal.login( cred.credentials.Anonymous(), None, - IMessageDeliveryFactory, IMessageDelivery) + IMessageDeliveryFactory, IMessageDelivery, + transport=self.transport) def ebAuthentication(err): """ @@ -1799,7 +1800,8 @@ def state_AUTH(self, response): self.mode = COMMAND result = self.portal.login( self.challenger, None, - IMessageDeliveryFactory, IMessageDelivery) + IMessageDeliveryFactory, IMessageDelivery, + transport=self.transport) result.addCallback(self._cbAuthenticated) result.addCallback(lambda ign: self.sendCode(235, 'Authentication successful.')) result.addErrback(self._ebAuthenticated) diff --git a/twisted/mail/topfiles/NEWS b/twisted/mail/topfiles/NEWS index 4cdc385ee02..a1e3c2df6c4 100644 --- a/twisted/mail/topfiles/NEWS +++ b/twisted/mail/topfiles/NEWS @@ -1,6 +1,12 @@ Ticket numbers in this file can be looked up by visiting http://twistedmatrix.com/trac/ticket/ +Twisted Mail 16.1.0 (2016-04-04) +================================ + +No significant changes have been made for this release. + + Twisted Mail 16.0.0 (2016-03-10) ================================ diff --git a/twisted/mail/topfiles/README b/twisted/mail/topfiles/README index 32a18f91b31..7118988a584 100644 --- a/twisted/mail/topfiles/README +++ b/twisted/mail/topfiles/README @@ -1,4 +1,4 @@ -Twisted Mail 16.0.0 +Twisted Mail 16.1.0 Twisted Mail depends on Twisted Core and (sometimes) Twisted Names. For TLS support, pyOpenSSL () is also required. Aside diff --git a/twisted/names/topfiles/NEWS b/twisted/names/topfiles/NEWS index 31b316e8eed..467e699cda8 100644 --- a/twisted/names/topfiles/NEWS +++ b/twisted/names/topfiles/NEWS @@ -1,6 +1,12 @@ Ticket numbers in this file can be looked up by visiting http://twistedmatrix.com/trac/ticket/ +Twisted Names 16.1.0 (2016-04-04) +================================= + +No significant changes have been made for this release. + + Twisted Names 16.0.0 (2016-03-10) ================================= diff --git a/twisted/names/topfiles/README b/twisted/names/topfiles/README index 65a48b0e613..eae90094771 100644 --- a/twisted/names/topfiles/README +++ b/twisted/names/topfiles/README @@ -1,3 +1,3 @@ -Twisted Names 16.0.0 +Twisted Names 16.1.0 Twisted Names depends on Twisted Core. diff --git a/twisted/news/topfiles/NEWS b/twisted/news/topfiles/NEWS index 13f7b14f394..2f33fa4a3f5 100644 --- a/twisted/news/topfiles/NEWS +++ b/twisted/news/topfiles/NEWS @@ -1,6 +1,12 @@ Ticket numbers in this file can be looked up by visiting http://twistedmatrix.com/trac/ticket/ +Twisted News 16.1.0 (2016-04-04) +================================ + +No significant changes have been made for this release. + + Twisted News 16.0.0 (2016-03-10) ================================ diff --git a/twisted/news/topfiles/README b/twisted/news/topfiles/README index 38e6b5d07a3..c48dfa0df40 100644 --- a/twisted/news/topfiles/README +++ b/twisted/news/topfiles/README @@ -1,4 +1,4 @@ -Twisted News 16.0.0 +Twisted News 16.1.0 News depends on Twisted, and, if you want to use the moderation features, Twisted Mail. diff --git a/twisted/pair/topfiles/NEWS b/twisted/pair/topfiles/NEWS index 234aa153e4e..5b0515b3a60 100644 --- a/twisted/pair/topfiles/NEWS +++ b/twisted/pair/topfiles/NEWS @@ -1,3 +1,9 @@ +Twisted Pair 16.1.0 (2016-04-04) +================================ + +No significant changes have been made for this release. + + Twisted Pair 16.0.0 (2016-03-10) ================================ diff --git a/twisted/pair/topfiles/README b/twisted/pair/topfiles/README index b6481c57065..dd9f6e4bad8 100644 --- a/twisted/pair/topfiles/README +++ b/twisted/pair/topfiles/README @@ -1,4 +1,4 @@ -Twisted Pair 16.0.0: Very low-level networking functionality +Twisted Pair 16.1.0: Very low-level networking functionality Twisted Pair includes parsers for several datagram formats, including ethernet, IP, and UDP. It also offers low-level networking integration on Linux via tun diff --git a/twisted/runner/topfiles/NEWS b/twisted/runner/topfiles/NEWS index 9f62b8d64c2..d752b46a0a8 100644 --- a/twisted/runner/topfiles/NEWS +++ b/twisted/runner/topfiles/NEWS @@ -1,6 +1,12 @@ Ticket numbers in this file can be looked up by visiting http://twistedmatrix.com/trac/ticket/ +Twisted Runner 16.1.0 (2016-04-04) +================================== + +No significant changes have been made for this release. + + Twisted Runner 16.0.0 (2016-03-10) ================================== diff --git a/twisted/runner/topfiles/README b/twisted/runner/topfiles/README index 73a8b20d30b..60efcff33a8 100644 --- a/twisted/runner/topfiles/README +++ b/twisted/runner/topfiles/README @@ -1,3 +1,3 @@ -Twisted Runner 16.0.0 +Twisted Runner 16.1.0 Twisted Runner depends on Twisted. diff --git a/twisted/topfiles/4543.misc b/twisted/topfiles/4543.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/topfiles/4735.feature b/twisted/topfiles/4735.feature deleted file mode 100644 index 59dc3dd99e4..00000000000 --- a/twisted/topfiles/4735.feature +++ /dev/null @@ -1 +0,0 @@ -twisted.application.internet.ClientService, a service that maintains a persistent outgoing endpoint-based connection; a replacement for ReconnectingClientFactory that uses modern APIs. diff --git a/twisted/topfiles/7985.feature b/twisted/topfiles/7985.feature deleted file mode 100644 index a198332d759..00000000000 --- a/twisted/topfiles/7985.feature +++ /dev/null @@ -1 +0,0 @@ -Twisted now uses setuptools' sdist to build tarballs. diff --git a/twisted/topfiles/8124.misc b/twisted/topfiles/8124.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/topfiles/8189.bugfix b/twisted/topfiles/8189.bugfix deleted file mode 100644 index 5d5a16474f3..00000000000 --- a/twisted/topfiles/8189.bugfix +++ /dev/null @@ -1 +0,0 @@ -Twisted is now compatible with OpenSSL 1.0.2f. diff --git a/twisted/topfiles/8193.misc b/twisted/topfiles/8193.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/topfiles/8210.misc b/twisted/topfiles/8210.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/topfiles/8215.bugfix b/twisted/topfiles/8215.bugfix deleted file mode 100644 index 2a43c1df300..00000000000 --- a/twisted/topfiles/8215.bugfix +++ /dev/null @@ -1 +0,0 @@ -twisted.web.server.site.makeSession now generates an uid of type bytes on both Python 2 and 3. diff --git a/twisted/topfiles/8216.feature b/twisted/topfiles/8216.feature deleted file mode 100644 index 736bb100730..00000000000 --- a/twisted/topfiles/8216.feature +++ /dev/null @@ -1 +0,0 @@ -twisted.cred.strports has been ported to Python 3. diff --git a/twisted/topfiles/8219.removal b/twisted/topfiles/8219.removal deleted file mode 100644 index 4bca204d157..00000000000 --- a/twisted/topfiles/8219.removal +++ /dev/null @@ -1 +0,0 @@ -The __version__ attribute of former subprojects (conch, mail, names, news, pair, runner, web, and words) is deprecated in preference to the central twisted.__version__. diff --git a/twisted/topfiles/8220.misc b/twisted/topfiles/8220.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/topfiles/8222.bugfix b/twisted/topfiles/8222.bugfix deleted file mode 100644 index fdef5b4c637..00000000000 --- a/twisted/topfiles/8222.bugfix +++ /dev/null @@ -1 +0,0 @@ -twisted.internet.endpoints.serverFromString, when parsing a SSL strports definition, now gives the correct error message when an empty chain file is given. diff --git a/twisted/topfiles/8223.misc b/twisted/topfiles/8223.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/topfiles/8226.misc b/twisted/topfiles/8226.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/topfiles/8242.misc b/twisted/topfiles/8242.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/topfiles/NEWS b/twisted/topfiles/NEWS index 80d7b98793c..e87a2d2ee3c 100644 --- a/twisted/topfiles/NEWS +++ b/twisted/topfiles/NEWS @@ -1,6 +1,26 @@ Ticket numbers in this file can be looked up by visiting http://twistedmatrix.com/trac/ticket/ +Twisted Core 16.1.0 (2016-04-04) +================================ + +Features +-------- + - twisted.application.internet.ClientService, a service that + maintains a persistent outgoing endpoint-based connection; a + replacement for ReconnectingClientFactory that uses modern APIs. + (#4735) + - Twisted now uses setuptools' sdist to build tarballs. (#7985) + +Bugfixes +-------- + - Twisted is now compatible with OpenSSL 1.0.2f. (#8189) + +Other +----- + - #4543, #8124, #8193, #8210, #8220, #8223, #8226, #8242 + + Twisted Core 16.0.0 (2016-03-10) ================================ diff --git a/twisted/topfiles/README b/twisted/topfiles/README index 2224c9e9973..b70b678d061 100644 --- a/twisted/topfiles/README +++ b/twisted/topfiles/README @@ -1,4 +1,4 @@ -Twisted Core 16.0.0 +Twisted Core 16.1.0 =================== Twisted Core makes up the core parts of Twisted, including: diff --git a/twisted/web/topfiles/8067.feature b/twisted/web/topfiles/8067.feature deleted file mode 100644 index 7f8b03164a9..00000000000 --- a/twisted/web/topfiles/8067.feature +++ /dev/null @@ -1 +0,0 @@ -twisted.web.http.Request.addCookie now supports both unicode and bytes arguments, with unicode arguments being encoded to UTF-8. diff --git a/twisted/web/topfiles/8192.bugfix b/twisted/web/topfiles/8192.bugfix deleted file mode 100644 index ebe05be25a9..00000000000 --- a/twisted/web/topfiles/8192.bugfix +++ /dev/null @@ -1 +0,0 @@ -twisted.web.util.DeferredResource no longer causes spurious "Unhandled error in Deferred" log messages. diff --git a/twisted/web/topfiles/8238.misc b/twisted/web/topfiles/8238.misc deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/twisted/web/topfiles/NEWS b/twisted/web/topfiles/NEWS index 4bdfb40148f..f9835083b43 100644 --- a/twisted/web/topfiles/NEWS +++ b/twisted/web/topfiles/NEWS @@ -1,6 +1,27 @@ Ticket numbers in this file can be looked up by visiting http://twistedmatrix.com/trac/ticket/ +Twisted Web 16.1.0 (2016-04-04) +=============================== + +Features +-------- + - twisted.web.http.Request.addCookie now supports both unicode and + bytes arguments, with unicode arguments being encoded to UTF-8. + (#8067) + +Bugfixes +-------- + - twisted.web.util.DeferredResource no longer causes spurious + "Unhandled error in Deferred" log messages. (#8192) + - twisted.web.server.site.makeSession now generates an uid of type + bytes on both Python 2 and 3. (#8215) + +Other +----- + - #8238 + + Twisted Web 16.0.0 (2016-03-10) =============================== diff --git a/twisted/web/topfiles/README b/twisted/web/topfiles/README index 9ebdf46e40f..6466eb85709 100644 --- a/twisted/web/topfiles/README +++ b/twisted/web/topfiles/README @@ -1,4 +1,4 @@ -Twisted Web 16.0.0 +Twisted Web 16.1.0 Twisted Web depends on Twisted Core. pyOpenSSL () is also required for HTTPS. SOAPpy diff --git a/twisted/words/topfiles/NEWS b/twisted/words/topfiles/NEWS index 7c9e1496517..4a04606ca42 100644 --- a/twisted/words/topfiles/NEWS +++ b/twisted/words/topfiles/NEWS @@ -1,6 +1,12 @@ Ticket numbers in this file can be looked up by visiting http://twistedmatrix.com/trac/ticket/ +Twisted Words 16.1.0 (2016-04-04) +================================= + +No significant changes have been made for this release. + + Twisted Words 16.0.0 (2016-03-10) ================================= diff --git a/twisted/words/topfiles/README b/twisted/words/topfiles/README index d5f240bae15..b4af7593cd1 100644 --- a/twisted/words/topfiles/README +++ b/twisted/words/topfiles/README @@ -1,4 +1,4 @@ -Twisted Words 16.0.0 +Twisted Words 16.1.0 Twisted Words depends on Twisted Core and Twisted Web. The Twisted Web dependency is only necessary for MSN support. MSN support also requires HTTPS,