graphql_query is complete GraphQL query code generator for python. With graphql_query you can
- generate a GraphQL query string from a python class;
- use and share similar Arguments, Variables and e.t.c between different queries;
- easily add new fields to your query;
- add Fragments and Directives to queries;
The documentation for graphql_query can be found at https://denisart.github.io/graphql-query/.
Install with pip
pip install graphql_query
Code for the simple query
{
hero {
name
}
}
it is
from graphql_query import Operation, Query
hero = Query(name="hero", fields=["name"])
operation = Operation(type="query", queries=[hero])
print(operation.render())
# query {
# hero {
# name
# }
# }
The render
method for the graphql_query.Operation
object
just returns the final string with a query. Inside the fields
array of the graphql_query.Query
object
you can use
str
(a field name);- object of
graphql_query.Field
type; graphql_query.Fragment
andgraphql_query.InlineFragment
.
For generation of the following query
query Hero($episode: Episode, $withFriends: Boolean!) {
hero(episode: $episode) {
name
friends @include(if: $withFriends) {
name
}
}
}
we have
from graphql_query import Argument, Directive, Field, Operation, Query, Variable
episode = Variable(name="episode", type="Episode")
withFriends = Variable(name="withFriends", type="Boolean!")
arg_episode = Argument(name="episode", value=episode)
arg_if = Argument(name="if", value=withFriends)
hero = Query(
name="hero",
arguments=[arg_episode],
fields=[
"name",
Field(
name="friends",
fields=["name"],
directives=[Directive(name="include", arguments=[arg_if])]
)
]
)
operation = Operation(
type="query",
name="Hero",
variables=[episode, withFriends],
queries=[hero]
)
print(operation.render())
# query Hero(
# $episode: Episode
# $withFriends: Boolean!
# ) {
# hero(
# episode: $episode
# ) {
# name
# friends @include(
# if: $withFriends
# ) {
# name
# }
# }
# }
You can find other examples in the documentation.