Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ecthiender/py-graphql-client

Dead-simple GraphQL client with subscriptions over websockets
https://github.com/ecthiender/py-graphql-client

graphql graphql-client graphql-subscriptions python python3 websockets

Last synced: 3 months ago
JSON representation

Dead-simple GraphQL client with subscriptions over websockets

Awesome Lists containing this project

README

        

# py-graphql-client
Dead-simple to use GraphQL client over websocket. Using the
[apollo-transport-ws](https://github.com/apollographql/subscriptions-transport-ws/blob/master/PROTOCOL.md)
protocol.

## Install

```bash
pip install py-graphql-client
```

## Examples

### Setup subscriptions super easily

```python
from graphql_client import GraphQLClient

query = """
subscription {
notifications {
id
title
content
}
}
"""

def callback(_id, data):
print("got new data..")
print(f"msg id: {_id}. data: {data}")

with GraphQLClient('ws://localhost:8080/graphql') as client:
sub_id = client.subscribe(query, callback=callback)
# do other stuff
# ...
# later stop the subscription
client.stop_subscribe(sub_id)
```

### Variables can be passed

```python
from graphql_client import GraphQLClient

query = """
subscription ($limit: Int!) {
notifications (order_by: {created: "desc"}, limit: $limit) {
id
title
content
}
}
"""

def callback(_id, data):
print("got new data..")
print(f"msg id: {_id}. data: {data}")

with GraphQLClient('ws://localhost:8080/graphql') as client:
sub_id = client.subscribe(query, variables={'limit': 10}, callback=callback)
# ...
```

### Headers can be passed too

```python
from graphql_client import GraphQLClient

query = """
subscription ($limit: Int!) {
notifications (order_by: {created: "desc"}, limit: $limit) {
id
title
content
}
}
"""

def callback(_id, data):
print("got new data..")
print(f"msg id: {_id}. data: {data}")

with GraphQLClient('ws://localhost:8080/graphql') as client:
sub_id = client.subscribe(query,
variables={'limit': 10},
headers={'Authorization': 'Bearer xxxx'},
callback=callback)
...
client.stop_subscribe(sub_id)
```

### Normal queries and mutations work too

```python
from graphql_client import GraphQLClient

query = """
query ($limit: Int!) {
notifications (order_by: {created: "desc"}, limit: $limit) {
id
title
content
}
}
"""

with GraphQLClient('ws://localhost:8080/graphql') as client:
res = client.query(query, variables={'limit': 10}, headers={'Authorization': 'Bearer xxxx'})
print(res)
```

### Without the context manager API

```python
from graphql_client import GraphQLClient

query = """
query ($limit: Int!) {
notifications (order_by: {created: "desc"}, limit: $limit) {
id
title
content
}
}
"""

client = GraphQLClient('ws://localhost:8080/graphql')
res = client.query(query, variables={'limit': 10}, headers={'Authorization': 'Bearer xxxx'})
print(res)
client.close()
```

## TODO
- support http as well
- should use asyncio websocket library?