def test_dict_promise_when(): p1 = Promise() p2 = Promise() d = {"a": p1, "b": p2} pd1 = promise_for_dict(d) pd2 = promise_for_dict({"a": p1}) pd3 = promise_for_dict({}) assert p1.is_pending assert p2.is_pending assert pd1.is_pending assert pd2.is_pending assert pd3.is_fulfilled p1.fulfill(5) assert p1.is_fulfilled assert p2.is_pending assert pd1.is_pending assert pd2.is_fulfilled p2.fulfill(10) assert p1.is_fulfilled assert p2.is_fulfilled assert pd1.is_fulfilled assert pd2.is_fulfilled assert 5 == p1.value assert 10 == p2.value assert 5 == pd1.value["a"] assert 5 == pd2.value["a"] assert 10 == pd1.value["b"] assert {} == pd3.value
def execute_fields( exe_context, # type: ExecutionContext parent_type, # type: GraphQLObjectType source_value, # type: Any fields, # type: DefaultOrderedDict path, # type: List[Union[int, str]] info, # type: Optional[ResolveInfo] ): # type: (...) -> Union[Dict, Promise[Dict]] contains_promise = False final_results = OrderedDict() for response_name, field_asts in fields.items(): result = resolve_field( exe_context, parent_type, source_value, field_asts, info, path + [response_name], ) if result is Undefined: continue final_results[response_name] = result if is_thenable(result): contains_promise = True if not contains_promise: return final_results return promise_for_dict(final_results)
def resolve(self, root): if root and not self.have_type(root): raise GraphQLError( u'Expected value of type "{}" but got: {}.'.format( self.type, type(root).__name__), self.info.field_asts) contains_promise = False final_results = self.fragment_container() # return OrderedDict( # ((field_name, field_resolver(root, field_args, context, info)) # for field_name, field_resolver, field_args, context, info in self.partial_resolvers) # ) for response_name, field_resolver in self.partial_resolvers: result = field_resolver.execute(root) if result is Undefined: continue if not contains_promise and is_thenable(result): contains_promise = True final_results[response_name] = result if not contains_promise: return final_results return promise_for_dict(final_results)
def execute_fields(exe_context, parent_type, source_value, fields): contains_promise = False final_results = OrderedDict() for response_name, field_asts in fields.items(): result = resolve_field(exe_context, parent_type, source_value, field_asts) if result is Undefined: continue final_results[response_name] = result if is_promise(result): contains_promise = True if not contains_promise: return final_results return promise_for_dict(final_results)
def execute_fields(exe_context, parent_type, source_value, fields, info): contains_promise = False final_results = OrderedDict() for response_name, field_asts in fields.items(): result = resolve_field(exe_context, parent_type, source_value, field_asts, info) if result is Undefined: continue final_results[response_name] = result if is_thenable(result): contains_promise = True if not contains_promise: return final_results return promise_for_dict(final_results)
def test_dict_promise_if(): p1 = Promise() p2 = Promise() d = {"a": p1, "b": p2} pd = promise_for_dict(d) assert p1.is_pending assert p2.is_pending assert pd.is_pending p1.fulfill(5) assert p1.is_fulfilled assert p2.is_pending assert pd.is_pending p2.fulfill(10) assert p1.is_fulfilled assert p2.is_fulfilled assert pd.is_fulfilled assert 5 == p1.value assert 10 == p2.value assert 5 == pd.value["a"] assert 10 == pd.value["b"]