- GraphQL
- Django queryset love
__getattr__
abuse- ???
- Profit!!!
py2graphql is a Python GraphQL client that makes GraphQL feel better to use. It almost feels like you're using Django's ORM.
pip install py2graphql
This Python equates to the following GraphQL.
from py2graphql import Query
Query().repository(owner='juliuscaeser', name='rome').pullRequest(number=2).values('title', 'url').commits(last=250).edges.node.commit.values('id', 'message', 'messageBody')
query {
repository(owner: "juliuscaeser", name: "rome") {
pullRequest(number: 2) {
title
url
commits(last: 250) {
edges {
node {
commit {
id
message
messageBody
}
}
}
}
}
}
}
You can even use the library to do the HTTP requests:
from py2graphql import Client
headers = {
'Authorization': 'token MY_TOKEN',
}
Client(url=THE_URL, headers=headers).query().repository(owner='juliuscaeser', name='rome').fetch()
It also supports Mutations:
from py2graphql import Client, Query
headers = {
'Authorization': 'token MY_TOKEN',
}
client = Client(url=THE_URL, headers=headers)
mutation = Query(name='mutation', client=client)
And multiple queries in a single request:
from py2graphql import Client, Query
headers = {
'Authorization': 'token MY_TOKEN',
}
query = Client(url=THE_URL, headers=headers).query().repository(owner='juliuscaeser', name='rome')
query.pullRequest(number=2).values('title', 'url')
query.releases(first=10).edges.node.values('name')
query.get_graphql()
query {
repository(owner: "juliuscaeser", name: "rome") {
pullRequest(number: 2) {
title
url
}
releases(first: 10) {
edges {
node {
name
}
}
}
}
}
As well as GraphQL errors:
from py2graphql import Client, Query
headers = {
'Authorization': 'token MY_TOKEN',
}
result = Client(url=THE_URL, headers=headers).query().repository(owner='juliuscaeser', name='rome').fetch()
result._errors
[{'message': "Field 'repository' is missing required arguments: name", 'locations': [{'line': 7, 'column': 3}]}]