About Scalars
Scalars
are primitive values: Int
, Float
,
String
, Boolean
, or ID
.
When calling the GraphQL API, you must specify nested subfields until you return only scalars.
BigInt
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.
Example
1
Boolean
The Boolean
scalar type represents true
or false
.
Example
true
Example
"2020-01-01T00:00:00.000Z"
Decimal
The Decimal
scalar type represents a python Decimal.
Example
1.0
Example
UNKNOWN
Float
The Float
scalar type represents signed double-precision fractional values as specified by IEEE 754.
Example
1.0
FloatSafeDecimal
A subclass of the Decimal type which can handle floating point values gracefully by converting them to strings before trying to convert them to Decimals.
To see why this is valuable, consider the following python shell session where we construct Decimal values from floats and strings in turn:
initial_val = 20.6
Decimal(initial_val) Decimal('20.60000000000000142108547152020037174224853515625')
Decimal(str(initial_val)) Decimal('20.6')
- NOTE ON EDGE CASES FOR HIGH PRECISION INPUTS *
Note that cpython itself only retains up to 17 digits of precision for a float, and disregards the rest, so if your input is a really big float, then this won't do you much good, because:
str(float('1.11111111111111111111111111111111111111111111111')) '1.1111111111111112'
- whereas
str(Decimal('1.11111111111111111111111111111111111111111111111')) '1.11111111111111111111111111111111111111111111111'
But that's not really the problem this class is trying to help with. It's to help with what look like 'simple' numbers (like 20.2), which end up being converted to very long ones with a slightly different value when converted to a decimal.
Example
20.6
GenericScalar
The GenericScalar
scalar type represents a generic
GraphQL scalar value that could be:
String, Boolean, Int, Float, List or Object.
Example
"abc123" | 1 | 1.0 | true | ["abc123"] | AccountType
ID
The ID
scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4"
) or integer (such as 4
) input value will be accepted as an ID.
Example
"abc123"
Int
The Int
scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.
Example
1
JSONString
Allows use of a JSON String for input / output from the GraphQL schema.
Use of this type is not recommended as you lose the benefits of having a defined, static schema (one of the key benefits of GraphQL).
Example
{"key": "value"}
NonEmptyString
Custom scalar type representing a non-empty string.
Example
UNKNOWN
NormalizedDecimal
A subclass of the Decimal type that normalizes the value before converting it into a string.
For example, "4.000" will be converted to "4" and "4.100" will be converted to "4.1".
Example
UNKNOWN
RoleString
Graphene String that validates against the available roles.
Example
UNKNOWN
String
The String
scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
Example
"abc123"
UUID
Leverages the internal Python implementation of UUID (uuid.UUID) to provide native UUID objects in fields, resolvers and input.
Example
"500c164d-38c7-4f74-9ac6-be210197e9e4"