Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/ecthiender/py-graphql-client
- Owner: ecthiender
- License: other
- Created: 2019-02-20T21:48:29.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2023-05-27T13:56:17.000Z (over 1 year ago)
- Last Synced: 2024-09-28T21:22:43.184Z (4 months ago)
- Topics: graphql, graphql-client, graphql-subscriptions, python, python3, websockets
- Language: Python
- Homepage: https://pypi.org/project/py-graphql-client/
- Size: 46.9 KB
- Stars: 37
- Watchers: 4
- Forks: 11
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
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 GraphQLClientquery = """
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 GraphQLClientquery = """
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 GraphQLClientquery = """
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 GraphQLClientquery = """
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 GraphQLClientquery = """
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?