]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Allow the callback in @return_future to be run with no arguments.
authorBen Darnell <ben@bendarnell.com>
Mon, 4 Mar 2013 00:29:39 +0000 (19:29 -0500)
committerBen Darnell <ben@bendarnell.com>
Mon, 4 Mar 2013 00:29:39 +0000 (19:29 -0500)
tornado/concurrent.py
tornado/test/concurrent_test.py

index c92bda0b2e770632e4e35c843bc03ed7e1f919cd..2b2d06a3880cc9ea91c527c0cbc10178d2fe6a9a 100644 (file)
@@ -153,8 +153,9 @@ def return_future(f):
     @functools.wraps(f)
     def wrapper(*args, **kwargs):
         future = Future()
-        callback, args, kwargs = replacer.replace(future.set_result,
-                                                  args, kwargs)
+        callback, args, kwargs = replacer.replace(
+            lambda value=None: future.set_result(value),
+            args, kwargs)
 
         def handle_error(typ, value, tb):
             future.set_exception(value)
index 8e758404c806285a11261c4e8b76851e9f072fc6..4e5380e846027bab57be67210089f835e062ccf1 100644 (file)
@@ -52,6 +52,10 @@ class ReturnFutureTest(AsyncTestCase):
         # implementations the last event prior to callback resolution wins.
         return 42
 
+    @return_future
+    def no_result_future(self, callback):
+        callback()
+
     def test_immediate_failure(self):
         with self.assertRaises(ZeroDivisionError):
             # The caller sees the error just like a normal function.
@@ -126,6 +130,11 @@ class ReturnFutureTest(AsyncTestCase):
         # when we wait.
         self.assertRaises(ZeroDivisionError, self.wait)
 
+    def test_no_result_future(self):
+        self.no_result_future(self.stop)
+        result = self.wait()
+        self.assertIs(result, None)
+
 # The following series of classes demonstrate and test various styles
 # of use, with and without generators and futures.
 class CapServer(TCPServer):