Skip to content

Commit ae75dfc

Browse files
committed
feat: add logger info when exec resolver error
1 parent 05d9817 commit ae75dfc

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

gql/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@
1515
from .schema_visitor import SchemaDirectiveVisitor # noqa
1616
from .utils import gql # noqa
1717

18-
__version__ = '0.2.6'
18+
__version__ = '0.2.7'

gql/resolver.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import json
2+
import logging
13
import traceback
24
from collections import defaultdict
35
from enum import Enum
@@ -20,6 +22,9 @@
2022

2123
from .utils import execute_async_function, recursive_to_snake_case, to_camel_case, to_snake_case
2224

25+
26+
logger = logging.getLogger(__name__)
27+
2328
ReferenceResolver = Callable[[Any, GraphQLResolveInfo, dict], Any]
2429
FieldResolverMap = Dict[str, Dict[str, GraphQLFieldResolver]]
2530
TypeResolverMap = Dict[str, GraphQLTypeResolver]
@@ -30,6 +35,13 @@
3035
reference_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+
3345
def 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

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "python-gql"
3-
version = "0.2.6"
3+
version = "0.2.7"
44
description = "Python schema-first GraphQL library based on GraphQL-core"
55
authors = ["ysun <[email protected]>"]
66
license = "MIT"

0 commit comments

Comments
 (0)