1+ import inspect
12import logging
23import traceback
34from collections import defaultdict
1920 is_union_type ,
2021)
2122
23+ from .depends import ResolverDepends
2224from .utils import execute_async_function , recursive_to_snake_case , to_camel_case , to_snake_case
2325
2426
@@ -44,15 +46,18 @@ def print_resolver_error(info: GraphQLResolveInfo):
4446def reference_resolver (type_name : str ):
4547 if type_name in reference_resolver_map :
4648 raise Exception (
47- f"{ type_name } is already registered by "
48- f"{ reference_resolver_map [type_name ].__code__ } "
49+ f"{ type_name } is already registered by " f"{ reference_resolver_map [type_name ].__code__ } "
4950 )
5051
5152 def wrap (func : ReferenceResolver ):
5253 @wraps (func )
5354 def sync_resolver (parent , info , representation ):
5455 try :
55- result = func (parent , info , representation )
56+ kwargs = {}
57+ for name , param in inspect .signature (func ).parameters .items ():
58+ if isinstance (param .default , ResolverDepends ):
59+ kwargs [name ] = param .default .execute (parent , info )
60+ result = func (parent , info , representation , ** kwargs )
5661 return dict (result ) if result is not None else result
5762 except Exception as exc :
5863 print_resolver_error (info )
@@ -62,7 +67,11 @@ def sync_resolver(parent, info, representation):
6267 @wraps (func )
6368 async def async_resolver (parent , info , representation ):
6469 try :
65- result = await execute_async_function (func , parent , info , representation )
70+ kwargs = {}
71+ for name , param in inspect .signature (func ).parameters .items ():
72+ if isinstance (param .default , ResolverDepends ):
73+ kwargs [name ] = param .default .execute (parent , info )
74+ result = await execute_async_function (func , parent , info , representation , ** kwargs )
6675 return dict (result ) if result is not None else result
6776 except Exception as exc :
6877 print_resolver_error (info )
@@ -81,8 +90,7 @@ async def async_resolver(parent, info, representation):
8190def type_resolver (type_name : str ):
8291 if type_name in type_resolver_map :
8392 raise Exception (
84- f"{ type_name } is already registered by "
85- f"{ type_resolver_map [type_name ].__code__ } "
93+ f"{ type_name } is already registered by " f"{ type_resolver_map [type_name ].__code__ } "
8694 )
8795
8896 def wrap (func ):
@@ -103,6 +111,11 @@ def wrap(func: GraphQLFieldResolver):
103111 def sync_resolver (parent , info , ** kwargs ):
104112 if snake_argument :
105113 kwargs = recursive_to_snake_case (kwargs )
114+
115+ for name , param in inspect .signature (func ).parameters .items ():
116+ if isinstance (param .default , ResolverDepends ):
117+ kwargs [name ] = param .default .execute (parent , info )
118+
106119 if not print_exc :
107120 return func (parent , info , ** kwargs )
108121
@@ -117,6 +130,11 @@ def sync_resolver(parent, info, **kwargs):
117130 async def async_resolver (parent , info , ** kwargs ):
118131 if snake_argument :
119132 kwargs = recursive_to_snake_case (kwargs )
133+
134+ for name , param in inspect .signature (func ).parameters .items ():
135+ if isinstance (param .default , ResolverDepends ):
136+ kwargs [name ] = param .default .execute (parent , info )
137+
120138 if not print_exc :
121139 return await execute_async_function (func , parent , info , ** kwargs )
122140
0 commit comments