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.
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
: TheGraphQLSchema
object that you want the view to execute when it gets a valid request.executor
: TheExecutor
that you want to use to execute queries. If anAsyncioExecutor
instance is provided, performs queries asynchronously within executor’s loop.root_value
: Theroot_value
you want to provide toexecutor.execute
.context
: A value to pass as thecontext
to thegraphql()
function. By default is set todict
with request object at keyrequest
.pretty
: Whether or not you want the response to be pretty printed JSON.graphiql
: IfTrue
, may present GraphiQL when loaded directly from a browser (a useful tool for debugging and exploration).graphiql_version
: The version of the providedgraphiql
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 (byenable_async=True
), usesTemplate.render_async
instead ofTemplate.render
. If environment is not set, fallbacks to simple regex-based renderer.max_age
: sets the response headerAccess-Control-Max-Age
for preflight requestsencoder
: the encoder to use for responses (sensibly defaults tographql_server.json_encode
)error_formatter
: the error formatter to use for responses (sensibly defaults tographql_server.default_format_error
)enable_async
: whetherasync
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file aiohttp-graphql-1.1.0.tar.gz
.
File metadata
- Download URL: aiohttp-graphql-1.1.0.tar.gz
- Upload date:
- Size: 19.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.38.0 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 29035589ca0929f5dc19b09461db0a2563db0166a6efcf22e23498a44e45040e |
|
MD5 | 1f1d9af870c563f0dc0e9de678b6369e |
|
BLAKE2b-256 | fce7953018ff0af70c515efff12175240ca1d4f9a47d2681eeba656a37e3db02 |