diff --git a/docs/types/scalars.rst b/docs/types/scalars.rst index 74002483..04611b87 100644 --- a/docs/types/scalars.rst +++ b/docs/types/scalars.rst @@ -62,24 +62,148 @@ Graphene defines the following base Scalar Types: When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID. -Graphene also provides custom scalars for Dates, Times, and JSON: +Graphene also provides custom scalars for common types: -``graphene.types.datetime.Date`` +``graphene.Date`` Represents a Date value as specified by `iso8601 `_. -``graphene.types.datetime.DateTime`` +.. code:: python + + import datetime + from graphene import Schema, ObjectType, Date + + class Query(ObjectType): + one_week_from = Date(required=True, date_input=Date(required=True)) + + def resolve_one_week_from(root, info, date_input): + assert date_input == datetime.date(2006, 1, 2) + return date_input + datetime.timedelta(weeks=1) + + schema = Schema(query=Query) + + results = schema.execute(""" + query { + oneWeekFrom(dateInput: "2006-01-02") + } + """) + + assert results.data == {"oneWeekFrom": "2006-01-09"} + + +``graphene.DateTime`` Represents a DateTime value as specified by `iso8601 `_. -``graphene.types.datetime.Time`` +.. code:: python + + import datetime + from graphene import Schema, ObjectType, DateTime + + class Query(ObjectType): + one_hour_from = DateTime(required=True, datetime_input=DateTime(required=True)) + + def resolve_one_hour_from(root, info, datetime_input): + assert datetime_input == datetime.datetime(2006, 1, 2, 15, 4, 5) + return datetime_input + datetime.timedelta(hours=1) + + schema = Schema(query=Query) + + results = schema.execute(""" + query { + oneHourFrom(datetimeInput: "2006-01-02T15:04:05") + } + """) + + assert results.data == {"oneHourFrom": "2006-01-02T16:04:05"} + +``graphene.Time`` Represents a Time value as specified by `iso8601 `_. -``graphene.types.json.JSONString`` +.. code:: python + + import datetime + from graphene import Schema, ObjectType, Time + + class Query(ObjectType): + one_hour_from = Time(required=True, time_input=Time(required=True)) + + def resolve_one_hour_from(root, info, time_input): + assert time_input == datetime.time(15, 4, 5) + tmp_time_input = datetime.datetime.combine(datetime.date(1, 1, 1), time_input) + return (tmp_time_input + datetime.timedelta(hours=1)).time() + + schema = Schema(query=Query) + + results = schema.execute(""" + query { + oneHourFrom(timeInput: "15:04:05") + } + """) + + assert results.data == {"oneHourFrom": "16:04:05"} + +``graphene.JSONString`` Represents a JSON string. +.. code:: python + + from graphene import Schema, ObjectType, JSONString, String + + class Query(ObjectType): + update_json_key = JSONString( + required=True, + json_input=JSONString(required=True), + key=String(required=True), + value=String(required=True) + ) + + def resolve_update_json_key(root, info, json_input, key, value): + assert json_input == {"name": "Jane"} + json_input[key] = value + return json_input + + schema = Schema(query=Query) + + results = schema.execute(""" + query { + updateJsonKey(jsonInput: "{\\"name\\": \\"Jane\\"}", key: "name", value: "Beth") + } + """) + + assert results.data == {"updateJsonKey": "{\"name\": \"Beth\"}"} + + +``graphene.Base64`` + + Represents a Base64 encoded string. + +.. code:: python + + from graphene import Schema, ObjectType, Base64 + + class Query(ObjectType): + increment_encoded_id = Base64( + required=True, + base64_input=Base64(required=True), + ) + + def resolve_increment_encoded_id(root, info, base64_input): + assert base64_input == "4" + return int(base64_input) + 1 + + schema = Schema(query=Query) + + results = schema.execute(""" + query { + incrementEncodedId(base64Input: "NA==") + } + """) + + assert results.data == {"incrementEncodedId": "NQ=="} + Custom scalars --------------