semvec/pypi-packages huggingface dataset:
graphql-utils 0.4
Useful function when interacting with GraphQL APIs
License: BSD 3-Clause License

==========================
 GraphQL Utils for Python
==========================

.. image:: https://circleci.com/gh/Mergifyio/graphql-utils.svg?style=svg
   :target: https://circleci.com/gh/Mergifyio/graphql-utils

.. image:: https://img.shields.io/endpoint.svg?url=https://api.mergify.com/v1/badges/Mergifyio/graphql-utils&style=flat
   :target: https://mergify.com
   :alt: Mergify Status

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.


Usage
=====

Multi-requests
--------------

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.