ASGI support for the Tartiflette Python GraphQL engine
Project description
tartiflette-asgi
is a wrapper that provides ASGI support for the Tartiflette Python GraphQL engine.
It is ideal for serving a GraphQL API over HTTP, or adding a GraphQL API endpoint to an existing ASGI application (e.g. FastAPI, Starlette, Quart, etc).
Full documentation is available at: https://tartiflette.github.io/tartiflette-asgi
Requirements
tartiflette-asgi
is compatible with:
- Python 3.6, 3.7 or 3.8.
- Tartiflette 1.x.
Quickstart
First, install Tartiflette's external dependencies, as explained in the Tartiflette tutorial.
Then, you can install Tartiflette and tartiflette-asgi
using pip
:
pip install tartiflette "tartiflette-asgi==0.*"
You'll also need an ASGI web server. We'll use Uvicorn here:
pip install uvicorn
Create an application that exposes a TartifletteApp
instance:
from tartiflette import Resolver
from tartiflette_asgi import TartifletteApp
@Resolver("Query.hello")
async def hello(parent, args, context, info):
name = args["name"]
return f"Hello, {name}!"
sdl = "type Query { hello(name: String): String }"
app = TartifletteApp(sdl=sdl, path="/graphql")
Save this file as graphql.py
, then start the server:
uvicorn graphql:app
Make an HTTP request containing a GraphQL query:
curl http://localhost:8000/graphql -d '{ hello(name: "Chuck") }' -H "Content-Type: application/graphql"
You should get the following JSON response:
{ "data": { "hello": "Hello, Chuck!" } }
To learn more about using tartiflette-asgi
, head to the documentation: https://tartiflette.github.io/tartiflette-asgi
Contributing
Want to contribute? Awesome! Be sure to read our Contributing guidelines.
Changelog
Changes to this project are recorded in the changelog.
License
MIT
Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.9.0 - 2020-06-10
Removed
- Drop deprecated
mount
helpers module. Prefer using the mounting mechanism of your ASGI framework. (Pull #119)
Changed
- Update dependency on Starlette to
0.13.*
. (Pull #106) - Convert internal modules to private naming. All public API should be accessed from the top-level
tartiflette_asgi
package. (Pull #117)
Added
- Add compatibility with Starlette
0.13.*
. (Pull #106)
0.8.0 - 2020-06-04
Added
- Add support for Tartiflette 1.2.x. (Pull #115)
Fixed
- Fix GraphiQL subscriptions endpoint when using ASGI sub-mounting. (Pull #98)
- Fix protocol mismatch error when serving GraphiQL over HTTPS. (Pull #114)
0.7.1 - 2019-10-28
Fixed
- Requests containing malformed JSON now return a 400 Bad Request error response instead of 500 Internal Server Error. (Pull #81)
0.7.0 - 2019-10-27
Changed
- Renamed project to
tartiflette-asgi
.
0.6.0 - 2019-10-18
Added
- Add support for Tartiflette 1.x. (Pull #58)
- Officialize support for Python 3.8. (Pull #80)
Removed
- Drop support for Tartiflette 0.x. (Pull #58)
0.5.2 - 2019-10-09
Added
- Add support for Python 3.8. (Pull #55)
Fixed
- Type annotations are now correctly detected by
mypy
. (Pull #66) - Fix a bug that prevented the GraphiQL web interface from making queries when the application was mounted on a parent ASGI app. (Pull #51)
0.5.1 - 2019-07-16
Fixed
- Fixed a bug that prevented accessing the GraphiQL interface when subscriptions were not enabled.
0.5.0 - 2019-07-12
Added
- WebSocket subscriptions, configurable with the new
subscriptions
option onTartifletteApp
. - Pass extra context to resolvers using the new
context
option onTartifletteApp
.
0.4.0 - 2019-07-04
Added
- Support for Tartiflette 0.12.x.
- Add a
mount
module with submounting helpers. - Add
mount.starlette()
.
Changed
- Due to the new engine cooking API in Tartiflette 0.12,
TartifletteApp
now includes a startup event handler responsible for building the GraphQL engine. If submounting, it must be registered on the parent ASGI app. Helpers in themount
module take care of this for you.
Removed
- Drop support for Tartiflette 0.11.x and below.
0.3.0 - 2019-07-03
Added
- GraphiQL configuration via the
GraphiQL
helper. Options:path
,default_query
,default_headers
,default_variables
,template
.
Changed
- Internal refactoring that leverages more of Starlette's capabilities.
- Documentation improvements.
0.2.0 - 2019-06-10
Added
- Support for
starlette>=0.12
(previously>=0.12.0b3
). - Tartiflette is now installed too when installing
tartiflette-asgi
.
Changed
- The default
path
is now""
(previously"/"
). - The request is now accessible in the GraphQL context via
context["req"]
(previouslycontext["request"]
). - If no error occurred, the
errors
field is not present in the response anymore (previously wasNone
).
Fixed
- More robust URL matching on
TartifletteApp
.
0.1.1 - 2019-04-28
Fixed
- Add missing
graphiql.html
package asset.
0.1.0 - 2019-04-26
Added
Features:
TartifletteApp
ASGI application.- Built-in GraphiQL client.
Project-related additions:
- Package setup.
- Changelog.
- Contributing guide.
- README and documentation.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for tartiflette_asgi-0.9.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 20353c398bdabe179c37f2f7dfff002ddd1e2ec7c5c71673b428a48faded55c4 |
|
MD5 | c7b0b65d37fc2112cd9f3dd77ee8fe1b |
|
BLAKE2b-256 | 5e1498c8bce5e6b352489a49ac92504af89afa44591a4b4d7bef5746eccc9d62 |