1+ import json
2+ import logging
13import traceback
24from collections import defaultdict
35from enum import Enum
2022
2123from .utils import execute_async_function , recursive_to_snake_case , to_camel_case , to_snake_case
2224
25+
26+ logger = logging .getLogger (__name__ )
27+
2328ReferenceResolver = Callable [[Any , GraphQLResolveInfo , dict ], Any ]
2429FieldResolverMap = Dict [str , Dict [str , GraphQLFieldResolver ]]
2530TypeResolverMap = Dict [str , GraphQLTypeResolver ]
3035reference_resolver_map : ReferenceResolverMap = {}
3136
3237
38+ def print_resolver_error (info : GraphQLResolveInfo ):
39+ logger .error (
40+ f'Failed execute "{ info .parent_type .name } .{ info .field_name } " resolver. '
41+ f'Variables: { json .dumps (info .variable_values )} .'
42+ )
43+
44+
3345def reference_resolver (type_name : str ):
3446 if type_name in reference_resolver_map :
3547 raise Exception (
@@ -39,20 +51,22 @@ def reference_resolver(type_name: str):
3951
4052 def wrap (func : ReferenceResolver ):
4153 @wraps (func )
42- def sync_resolver (* args , ** kwargs ):
54+ def sync_resolver (parent , info , ** kwargs ):
4355 try :
44- result = func (* args , ** kwargs )
56+ result = func (parent , info , ** kwargs )
4557 return dict (result ) if result is not None else result
4658 except Exception as exc :
59+ print_resolver_error (info )
4760 traceback .print_exc ()
4861 raise exc
4962
5063 @wraps (func )
51- async def async_resolver (* args , ** kwargs ):
64+ async def async_resolver (parent , info , ** kwargs ):
5265 try :
53- result = await execute_async_function (func , * args , ** kwargs )
66+ result = await execute_async_function (func , parent , info , ** kwargs )
5467 return dict (result ) if result is not None else result
5568 except Exception as exc :
69+ print_resolver_error (info )
5670 traceback .print_exc ()
5771 raise exc
5872
@@ -87,28 +101,30 @@ def field_resolver(
87101):
88102 def wrap (func : GraphQLFieldResolver ):
89103 @wraps (func )
90- def sync_resolver (* args , ** kwargs ):
104+ def sync_resolver (parent , info , ** kwargs ):
91105 if snake_argument :
92106 kwargs = recursive_to_snake_case (kwargs )
93107 if not print_exc :
94- return func (* args , ** kwargs )
108+ return func (parent , info , ** kwargs )
95109
96110 try :
97- return func (* args , ** kwargs )
111+ return func (parent , info , ** kwargs )
98112 except Exception as exc :
113+ print_resolver_error (info )
99114 traceback .print_exc ()
100115 raise exc
101116
102117 @wraps (func )
103- async def async_resolver (* args , ** kwargs ):
118+ async def async_resolver (parent , info , ** kwargs ):
104119 if snake_argument :
105120 kwargs = recursive_to_snake_case (kwargs )
106121 if not print_exc :
107- return await execute_async_function (func , * args , ** kwargs )
122+ return await execute_async_function (func , parent , info , ** kwargs )
108123
109124 try :
110- return await execute_async_function (func , * args , ** kwargs )
125+ return await execute_async_function (func , parent , info , ** kwargs )
111126 except Exception as exc :
127+ print_resolver_error (info )
112128 traceback .print_exc ()
113129 raise exc
114130
0 commit comments