def test_promise_then(): p = Promise() d = {} v = p.then(lambda v: d.setdefault('key', v)) p.resolve('value') assert v.value == 'value' assert d['key'] == 'value'
def test_promise_resolve(): p = Promise() assert p.is_pending assert not p.is_resolved assert p.value is None p.resolve('value') assert not p.is_pending assert p.is_resolved assert p.value == 'value' with pytest.raises(RuntimeError): p.resolve('value again')
def wrapper(*args, **kwargs): cache_args = args # handle self and cls if has_self: if not include_self: cache_args = args[1:] cache_key = generate_key_for_cached_func( key_prefix, f, *cache_args, **kwargs) if self._running_mode == BATCH_MODE: promise = Promise() self._pending_operations.append( (f, args, kwargs, promise, cache_key, expire)) return promise rv = self._raw_get(cache_key) if rv is None: value = f(*args, **kwargs) self.set(cache_key, value, expire) rv = self.serializer.dumps(value) return self.serializer.loads(rv)