Skip to content
Snippets Groups Projects
Commit 326b3dac authored by Erik Johnston's avatar Erik Johnston
Browse files

Make ObservableDeferred.observe() always return deferred.

This makes it easier to use in an async/await world.

Also fixes a bug where cache descriptors would occaisonally return a raw
value rather than a deferred.
parent 46c12918
Branches
Tags
No related merge requests found
...@@ -86,11 +86,8 @@ class ObservableDeferred(object): ...@@ -86,11 +86,8 @@ class ObservableDeferred(object):
deferred.addCallbacks(callback, errback) deferred.addCallbacks(callback, errback)
def observe(self): def observe(self) -> defer.Deferred:
"""Observe the underlying deferred. """Observe the underlying deferred.
Can return either a deferred if the underlying deferred is still pending
(or has failed), or the actual value. Callers may need to use maybeDeferred.
""" """
if not self._result: if not self._result:
d = defer.Deferred() d = defer.Deferred()
...@@ -105,7 +102,7 @@ class ObservableDeferred(object): ...@@ -105,7 +102,7 @@ class ObservableDeferred(object):
return d return d
else: else:
success, res = self._result success, res = self._result
return res if success else defer.fail(res) return defer.succeed(res) if success else defer.fail(res)
def observers(self): def observers(self):
return self._observers return self._observers
......
...@@ -197,7 +197,7 @@ class CacheDecoratorTestCase(unittest.TestCase): ...@@ -197,7 +197,7 @@ class CacheDecoratorTestCase(unittest.TestCase):
a.func.prefill(("foo",), ObservableDeferred(d)) a.func.prefill(("foo",), ObservableDeferred(d))
self.assertEquals(a.func("foo"), d.result) self.assertEquals(a.func("foo").result, d.result)
self.assertEquals(callcount[0], 0) self.assertEquals(callcount[0], 0)
@defer.inlineCallbacks @defer.inlineCallbacks
......
...@@ -310,14 +310,14 @@ class DescriptorTestCase(unittest.TestCase): ...@@ -310,14 +310,14 @@ class DescriptorTestCase(unittest.TestCase):
obj.mock.return_value = ["spam", "eggs"] obj.mock.return_value = ["spam", "eggs"]
r = obj.fn(1, 2) r = obj.fn(1, 2)
self.assertEqual(r, ["spam", "eggs"]) self.assertEqual(r.result, ["spam", "eggs"])
obj.mock.assert_called_once_with(1, 2) obj.mock.assert_called_once_with(1, 2)
obj.mock.reset_mock() obj.mock.reset_mock()
# a call with different params should call the mock again # a call with different params should call the mock again
obj.mock.return_value = ["chips"] obj.mock.return_value = ["chips"]
r = obj.fn(1, 3) r = obj.fn(1, 3)
self.assertEqual(r, ["chips"]) self.assertEqual(r.result, ["chips"])
obj.mock.assert_called_once_with(1, 3) obj.mock.assert_called_once_with(1, 3)
obj.mock.reset_mock() obj.mock.reset_mock()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment