Skip to main content

Adds GraphQL support to your aiohttp application

Project description

aiohttp-graphql

Adds GraphQL support to your aiohttp application.

Based on flask-graphql by Syrus Akbary and sanic-graphql by Sergey Porivaev.

PyPI version Build Status Coverage Status

Usage

Just use the GraphQLView view from aiohttp_graphql

from aiohttp_graphql import GraphQLView

GraphQLView.attach(app, schema=Schema, graphiql=True)

# Optional, for adding batch query support (used in Apollo-Client)
GraphQLView.attach(app, schema=Schema, batch=True)

This will add a /graphql endpoint to your app (customizable by passing route_path='/mypath' to GraphQLView.attach).

Note: GraphQLView.attach is just a convenience function, and the same functionality can be achieved with

gql_view = GraphQLView(schema=Schema, **kwargs)
app.router.add_route('*', gql_view, name='graphql')

It's worth noting that the the "view function" of GraphQLView is contained in GraphQLView.__call__. So, when you create an instance, that instance is callable with the request object as the sole positional argument. To illustrate:

gql_view = GraphQLView(schema=Schema, **kwargs)
gql_view(request)  # <-- the instance is callable and expects a `aiohttp.web.Request` object.

Supported options

  • schema: The GraphQLSchema object that you want the view to execute when it gets a valid request.
  • executor: The Executor that you want to use to execute queries. If an AsyncioExecutor instance is provided, performs queries asynchronously within executor’s loop.
  • root_value: The root_value you want to provide to executor.execute.
  • context: A value to pass as the context to the graphql() function. By default is set to dict with request object at key request.
  • pretty: Whether or not you want the response to be pretty printed JSON.
  • graphiql: If True, may present GraphiQL when loaded directly from a browser (a useful tool for debugging and exploration).
  • graphiql_version: The version of the provided graphiql package.
  • graphiql_template: Inject a Jinja template string to customize GraphiQL.
  • middleware: Custom middleware for graphql-python.
  • batch: Set the GraphQL view as batch (for using in Apollo-Client or [ReactRelayNetworkLayer])
  • jinja_env: Sets jinja environment to be used to process GraphiQL template. If Jinja’s async mode is enabled (by enable_async=True), uses Template.render_async instead of Template.render. If environment is not set, fallbacks to simple regex-based renderer.
  • max_age: sets the response header Access-Control-Max-Age for preflight requests
  • encoder: the encoder to use for responses (sensibly defaults to graphql_server.json_encode)
  • error_formatter: the error formatter to use for responses (sensibly defaults to graphql_server.default_format_error)
  • enable_async: whether async mode will be enabled.
  • subscriptions: The GraphiQL socket endpoint for using subscriptions in graphql-ws.

Testing

Testing is done with pytest.

git clone https://github.com/graphql-python/aiohttp-graphql
cd aiohttp-graphql
# Create a virtualenv
python3.6 -m venv env && source env/bin/activate  # for example
pip install -e .[test]
pytest

The tests, while modeled after sanic-graphql's tests, have been entirely refactored to take advantage of pytest-asyncio, conform with PEP-8, and increase readability with pytest fixtures. For usage tests, please check them out.

License

Copyright for portions of project aiohttp-graphql are held by Syrus Akbary as part of project flask-graphql and sanic-graphql as part of project Sergey Porivaev. All other claims to this project aiohttp-graphql are held by Devin Fee.

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for aiohttp-graphql, version 1.1.0
Filename, size File type Python version Upload date Hashes
Filename, size aiohttp-graphql-1.1.0.tar.gz (19.2 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page