The graphql-utils
Python package is a collection of utilities function for interacting with GraphQL libraries. It is meant to be library agnostic so it should work with whatever library or protocol you want.
The multi-requests module allows you to send a request multiple times with different parameter. It also supports pagination, making sure that you'll get all the results for all the requests you sent.
Example:
import requests
from graphql_utils import multi
def requests_api(query):
return requests.post("https://myapi.com/graphql", json=query)
userlist = (
{"login": "jd"},
{"login": "sileht"},
{"login": "foo"},
{"login": "bar"},
)
result_iterator = multi.multi_query("""
user(login: "{login}") {{
pets(first: 100{after}) {{
nodes {{
name
}}
pageInfo {{
hasNextPage
endCursor
}}
}}
}}""",
iterable=userlist,
pageinfo_path=("pets", "pageInfo"),
send_fn=requests_api,
)
This will send one GraphQL requests with 4 queries (one for each user from userlist
). As pageinfo_path was specified, if any of the query does not return all information in one request, a new query using the endCursor
will be automatically sent to get the next results.