コード例 #1
0
ファイル: test_extra.py プロジェクト: Globegitter/promise
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
コード例 #2
0
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)
コード例 #3
0
    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)
コード例 #4
0
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)
コード例 #5
0
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)
コード例 #6
0
ファイル: test_extra.py プロジェクト: Globegitter/promise
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"]