Skip to content

Commit bbfb738

Browse files
committed
coerece str
1 parent 9d9b465 commit bbfb738

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

src/graphql/type/scalars.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from math import isfinite
2-
from typing import Any
2+
from typing import Any, Union
33

44
from ..error import GraphQLError
55
from ..pyutils import inspect, is_finite, is_integer, FrozenDict
@@ -60,8 +60,15 @@ def serialize_int(output_value: Any) -> int:
6060
)
6161
return num
6262

63+
def _try_convert_str_to_int(s: str) -> Union[str, int]:
64+
try:
65+
return int(s)
66+
except (ValueError, TypeError):
67+
return s
6368

6469
def coerce_int(input_value: Any) -> int:
70+
if isinstance(input_value, str):
71+
input_value = _try_convert_str_to_int(input_value)
6572
if not is_integer(input_value):
6673
raise GraphQLError(
6774
"Int cannot represent non-integer value: " + inspect(input_value)

tests/type/test_scalars.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
GraphQLBoolean,
1313
GraphQLID,
1414
)
15+
from graphql.type.scalars import coerce_int
1516

1617

1718
def describe_type_system_specified_scalar_types():
@@ -27,6 +28,7 @@ def _parse_value_raises(s, message):
2728
assert _parse_value(1) == 1
2829
assert _parse_value(0) == 0
2930
assert _parse_value(-1) == -1
31+
assert _parse_value("123") == 123
3032

3133
_parse_value_raises(
3234
9876504321,
@@ -44,7 +46,7 @@ def _parse_value_raises(s, message):
4446
)
4547
_parse_value_raises(None, "Int cannot represent non-integer value: None")
4648
_parse_value_raises("", "Int cannot represent non-integer value: ''")
47-
_parse_value_raises("123", "Int cannot represent non-integer value: '123'")
49+
_parse_value_raises("abc", "Int cannot represent non-integer value: 'abc'")
4850
_parse_value_raises(False, "Int cannot represent non-integer value: False")
4951
_parse_value_raises(True, "Int cannot represent non-integer value: True")
5052
_parse_value_raises([1], "Int cannot represent non-integer value: [1]")

0 commit comments

Comments
 (0)