Skip to main content

Runs a Tartiflette GraphQL Engine through aiohttp

Project description

![Tartiflette aiohttp](docs/github-landing.png)

**tartiflette-aiohttp** is a wrapper of [aiohttp](https://github.com/aio-libs/aiohttp/) which includes the [Tartiflette GraphQL Engine](https://github.com/dailymotion/tartiflette), do not hesitate to take a look of the [Tartiflette project](https://github.com/dailymotion/tartiflette).

**Summary**

- [Usage](#usage)
- [Installation](#installation)
- [Installation dependencies](#installation-dependencies)
- [How to use](#how-to-use)
- [Use with built-in Tartiflette Engine](#use-with-built-in-tartiflette-engine)
- [Use with custom Tartiflette engine](#use-with-custom-tartiflette-engine)

## Usage

```python
# main.py
from aiohttp import web
from tartiflette import Resolver
from tartiflette_aiohttp import Application

@Resolver("Query.hello")
async def resolver_hello(parent, args, ctx, info):
return "hello " + args["name"]

sdl = """
type Query {
hello(name: String): String
}
"""

app = Application(
engine_sdl=sdl
)

web.run_app(app)
```

Save the file and start the server.

```bash
$ python main.py
======== Running on http://0.0.0.0:8080 ========
(Press CTRL+C to quit)
```

Execute a request to your server
```
curl -v -d '{"query": "query { hello(name: "Chuck") }"}' -H "Content-Type: application/json" http://localhost:8080/graphql
```

## Installation

`tartiflette-aiohttp` is available on [pypi.org](https://pypi.org/project/tartiflette-aiohttp/).

```bash
pip install tartiflette-aiohttp
```

### Installation dependencies

As [Tartiflette](https://github.com/dailymotion/tartiflette) based its Executor engine on *[libgraphqlparser](https://github.com/graphql/libgraphqlparser)*. You'll need these following commands on your environment to use the library. `cmake`, `bison` and `flex`.

*MacOSX*
```bash
brew install cmake flex bison
```

*Ubuntu*
```bash
apt-get install cmake flex bison
```

## How to use

### Use with built-in Tartiflette Engine

The basic and common way to create an `aiohttp` instance is to use the `Application` class with the `engine_*` parameters which are forwarded to the built-in [tartiflette](https://github.com/dailymotion/tartiflette) engine instance.

```python
from aiohttp import web
from tartiflette_aiohttp import Application

sdl = """
type Query {
hello(name: String): String
}
"""

ctx = {
'user_service': user_service
}

app = Application(
engine_sdl=sdl,
engine_schema_name="default",
executor_context=user_service,
executor_http_endpoint='/graphql',
executor_http_methods=['POST', 'GET']
)

web.run_app(app)
```

**Parameters**:

* **engine_sdl**: Contains the [Schema Definition Language](https://graphql.org/learn/schema/)
- Could be a string which contains the SDL
- Could be an array of string, which contain the SDLs
- Could be a path of an SDL
- Could be an array of paths which contain the SDLs
* **engine_schema_name**: Name of the schema used the built-in engine.
* **executor_context**: Context which will be passed to each resolver. Be default, the context passed to each resolvers, will contain these properties.
- **req**: Request object from aiohttp
- **app**: Application object from aiohttp
* **executor_http_endpoint**: Endpoint where the GraphQL Engine will be attached, by default on `/graphql`
* **executor_http_methods**: HTTP Method where the GraphQL Engine will be attached, by default on **POST** and **GET**.

### Use with custom Tartiflette engine

In the case you already have a Tartiflette Engine instance, or, you do not want to use the built-in instance. You can pass an existing instance to the Application constructor.

```python
# main.py
from aiohttp import web
from tartiflette import Resolver, Engine
from tartiflette_aiohttp import Application

@Resolver("Query.hello")
async def resolver_hello(parent, args, ctx, info):
return "hello " + args["name"]

sdl = """
type Query {
hello(name: String): String
}
"""

engine = Engine(sdl)

ctx = {
'user_service': user_service
}

app = Application(
engine=engine,
executor_context=user_service,
executor_http_endpoint='/graphql',
executor_http_methods=['POST', 'GET']
)

web.run_app(app)
```

**Parameters**:

* **engine**: Tartiflette Engine instance
* **executor_context**: Context which will be passed to each resolver. Be default, the context passed to each resolvers, will contain these properties.
- **req**: Request object from aiohttp
- **app**: Application object from aiohttp
* **executor_http_endpoint**: Endpoint where the GraphQL Engine will be attached, by default on `/graphql`
* **executor_http_methods**: HTTP Method where the GraphQL Engine will be attached, by default on **POST** and **GET**.

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

tartiflette-aiohttp-0.1.1.tar.gz (3.1 kB view details)

Uploaded Source

File details

Details for the file tartiflette-aiohttp-0.1.1.tar.gz.

File metadata

  • Download URL: tartiflette-aiohttp-0.1.1.tar.gz
  • Upload date:
  • Size: 3.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.2 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for tartiflette-aiohttp-0.1.1.tar.gz
Algorithm Hash digest
SHA256 b1a4370bf919cab12bc0aee9d8b06735fa3abf03c8cec729841538841e199481
MD5 9cc2ba7245b5d77d11850ebd5d59569e
BLAKE2b-256 938a08d7e6601a87e75e4f09ab23a18df9e41d0b675e4608f740a8147e6f8d42

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page