(relay connection) promisify result from async method

This commit is contained in:
Stan Chollet 2016-11-30 18:39:04 +01:00
parent 51c37fef98
commit f64934f85d
2 changed files with 14 additions and 1 deletions

View File

@ -12,6 +12,7 @@ from ..types import (AbstractType, Boolean, Enum, Int, Interface, List, NonNull,
from ..types.field import Field from ..types.field import Field
from ..types.objecttype import ObjectType, ObjectTypeMeta from ..types.objecttype import ObjectType, ObjectTypeMeta
from ..types.options import Options from ..types.options import Options
from ..utils.compat_asyncio_promise import promisify
from ..utils.is_base_type import is_base_type from ..utils.is_base_type import is_base_type
from ..utils.props import props from ..utils.props import props
from .node import is_node from .node import is_node
@ -139,7 +140,7 @@ class IterableConnectionField(Field):
@classmethod @classmethod
def connection_resolver(cls, resolver, connection_type, root, args, context, info): def connection_resolver(cls, resolver, connection_type, root, args, context, info):
resolved = resolver(root, args, context, info) resolved = promisify(resolver(root, args, context, info))
on_resolve = partial(cls.resolve_connection, connection_type, args) on_resolve = partial(cls.resolve_connection, connection_type, args)
if isinstance(resolved, Promise): if isinstance(resolved, Promise):

View File

@ -0,0 +1,12 @@
import promise
def promisify(resolved):
try:
import asyncio
if isinstance(resolved, asyncio.Future) or \
asyncio.iscoroutine(resolved):
return promise.promisify(resolved)
except:
pass
return resolved