add BigInt type (#1261)

* add BigInt type

* formatting

* more Int tests
This commit is contained in:
Paul Bailey 2020-08-28 10:55:46 -05:00 committed by GitHub
parent b685e109f5
commit 8c327fc4ed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 1 deletions

View File

@ -82,6 +82,33 @@ class Int(Scalar):
return num return num
class BigInt(Scalar):
"""
The `BigInt` scalar type represents non-fractional whole numeric values.
`BigInt` is not constrained to 32-bit like the `Int` type and thus is a less
compatible type.
"""
@staticmethod
def coerce_int(value):
try:
num = int(value)
except ValueError:
try:
num = int(float(value))
except ValueError:
return None
return num
serialize = coerce_int
parse_value = coerce_int
@staticmethod
def parse_literal(ast):
if isinstance(ast, IntValueNode):
return int(ast.value)
class Float(Scalar): class Float(Scalar):
""" """
The `Float` scalar type represents signed double-precision fractional The `Float` scalar type represents signed double-precision fractional

View File

@ -1,4 +1,5 @@
from ..scalars import Scalar from ..scalars import Scalar, Int, BigInt
from graphql.language.ast import IntValueNode
def test_scalar(): def test_scalar():
@ -7,3 +8,22 @@ def test_scalar():
assert JSONScalar._meta.name == "JSONScalar" assert JSONScalar._meta.name == "JSONScalar"
assert JSONScalar._meta.description == "Documentation" assert JSONScalar._meta.description == "Documentation"
def test_ints():
assert Int.parse_value(2 ** 31 - 1) is not None
assert Int.parse_value("2.0") is not None
assert Int.parse_value(2 ** 31) is None
assert Int.parse_literal(IntValueNode(value=str(2 ** 31 - 1))) == 2 ** 31 - 1
assert Int.parse_literal(IntValueNode(value=str(2 ** 31))) is None
assert Int.parse_value(-(2 ** 31)) is not None
assert Int.parse_value(-(2 ** 31) - 1) is None
assert BigInt.parse_value(2 ** 31) is not None
assert BigInt.parse_value("2.0") is not None
assert BigInt.parse_value(-(2 ** 31) - 1) is not None
assert BigInt.parse_literal(IntValueNode(value=str(2 ** 31 - 1))) == 2 ** 31 - 1
assert BigInt.parse_literal(IntValueNode(value=str(2 ** 31))) == 2 ** 31