← Back to team overview

launchpad-reviewers team mailing list archive

[Merge] lp:~cjwatson/launchpad/twisted-18.4.0 into lp:launchpad

 

Colin Watson has proposed merging lp:~cjwatson/launchpad/twisted-18.4.0 into lp:launchpad.

Commit message:
Upgrade to Twisted 18.4.0.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~cjwatson/launchpad/twisted-18.4.0/+merge/349244
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of lp:~cjwatson/launchpad/twisted-18.4.0 into lp:launchpad.
=== modified file 'constraints.txt'
--- constraints.txt	2018-07-03 09:17:30 +0000
+++ constraints.txt	2018-07-10 08:34:45 +0000
@@ -359,8 +359,12 @@
 testresources==0.2.7
 testscenarios==0.4
 timeline==0.0.3
+<<<<<<< TREE
 treq==18.6.0
 Twisted[conch,tls]==17.9.0
+=======
+Twisted[conch,tls]==18.4.0
+>>>>>>> MERGE-SOURCE
 txAMQP==0.6.2
 txfixtures==0.4.2
 txlongpoll==0.2.12

=== modified file 'lib/lp/services/twistedsupport/tests/test_gracefulshutdown.py'
--- lib/lp/services/twistedsupport/tests/test_gracefulshutdown.py	2017-12-21 17:27:18 +0000
+++ lib/lp/services/twistedsupport/tests/test_gracefulshutdown.py	2018-07-10 08:34:45 +0000
@@ -1,14 +1,17 @@
-# Copyright 2011 Canonical Ltd.  This software is licensed under the
+# Copyright 2011-2018 Canonical Ltd.  This software is licensed under the
 # GNU Affero General Public License version 3 (see the file LICENSE).
 
 """Tests for our graceful daemon shutdown support."""
 
 __metaclass__ = type
 
+import io
+
 from twisted.application import service
 from twisted.internet.defer import Deferred
 from twisted.internet.protocol import (
     Factory,
+    FileWrapper,
     Protocol,
     )
 from twisted.web import http
@@ -99,7 +102,10 @@
 
     def make_dummy_http_request(self):
         """Make a dummy HTTP request for tests."""
-        return http.Request(http.HTTPChannel(), True)
+        transport = FileWrapper(io.BytesIO())
+        channel = http.HTTPChannel()
+        channel.makeConnection(transport)
+        return http.Request(channel, True)
 
     def test_200_when_available(self):
         """When the factory is available a 200 response is generated."""

=== modified file 'lib/lp/services/twistedsupport/tests/test_xmlrpc.py'
--- lib/lp/services/twistedsupport/tests/test_xmlrpc.py	2018-04-05 17:03:54 +0000
+++ lib/lp/services/twistedsupport/tests/test_xmlrpc.py	2018-07-10 08:34:45 +0000
@@ -5,6 +5,12 @@
 
 __metaclass__ = type
 
+import sys
+
+from testtools.matchers import (
+    LessThan,
+    Not,
+    )
 from twisted.python.failure import Failure
 
 from lp.services.twistedsupport import extract_result
@@ -49,30 +55,31 @@
         except:
             return Failure()
 
-    def assertRaisesExactException(self, exception, function, *args, **kwargs):
+    def assertRaisesFailure(self, failure, function, *args, **kwargs):
         try:
             function(*args, **kwargs)
+        except Failure as raised_failure:
+            self.assertThat(sys.version_info, LessThan((3, 0)))
+            self.assertEqual(failure, raised_failure)
         except Exception as raised_exception:
-            self.assertEqual(raised_exception, exception)
+            self.assertThat(sys.version_info, Not(LessThan((3, 0))))
+            self.assertEqual(failure.value, raised_exception)
 
     def test_raises_non_faults(self):
-        # trap_fault re-raises the underlying exception from any failures it
-        # gets that aren't faults.
+        # trap_fault re-raises any failures it gets that aren't faults.
         failure = self.makeFailure(RuntimeError, 'example failure')
-        self.assertRaisesExactException(
-            failure.value, trap_fault, failure, TestFaultOne)
+        self.assertRaisesFailure(failure, trap_fault, failure, TestFaultOne)
 
     def test_raises_faults_with_wrong_code(self):
-        # trap_fault re-raises the underlying exception from any failures it
-        # gets that are faults but have the wrong fault code.
+        # trap_fault re-raises any failures it gets that are faults but have
+        # the wrong fault code.
         failure = self.makeFailure(TestFaultOne)
-        self.assertRaisesExactException(
-            failure.value, trap_fault, failure, TestFaultTwo)
+        self.assertRaisesFailure(failure, trap_fault, failure, TestFaultTwo)
 
     def test_raises_faults_if_no_codes_given(self):
         # If trap_fault is not given any fault codes, it re-raises the fault.
         failure = self.makeFailure(TestFaultOne)
-        self.assertRaisesExactException(failure.value, trap_fault, failure)
+        self.assertRaisesFailure(failure, trap_fault, failure)
 
     def test_returns_fault_if_code_matches(self):
         # trap_fault returns the Fault inside the Failure if the fault code

=== modified file 'lib/lp/services/twistedsupport/xmlrpc.py'
--- lib/lp/services/twistedsupport/xmlrpc.py	2018-04-05 17:03:54 +0000
+++ lib/lp/services/twistedsupport/xmlrpc.py	2018-07-10 08:34:45 +0000
@@ -10,6 +10,8 @@
     'trap_fault',
     ]
 
+import sys
+
 from twisted.internet import defer
 from twisted.web import xmlrpc
 
@@ -55,13 +57,17 @@
 
     :param failure: A Twisted L{Failure}.
     :param *fault_codes: `LaunchpadFault` subclasses.
-    :raise Exception: the underlying exception from 'failure' if 'failure'
-        is not a Fault failure, or if the fault code does not match the
-        given codes.
+    :raise Exception: if 'failure' is not a Fault failure, or if the fault
+        code does not match the given codes.  In line with L{Failure.trap},
+        the exception is the L{Failure} itself on Python 2 and the
+        underlying exception on Python 3.
     :return: The Fault if it matches one of the codes.
     """
     failure.trap(xmlrpc.Fault)
     fault = failure.value
     if fault.faultCode in [cls.error_code for cls in fault_classes]:
         return fault
-    failure.raiseException()
+    if sys.version_info >= (3, 0):
+        failure.raiseException()
+    else:
+        raise failure


Follow ups