aiohttp based GraphQL client with file upload support
Project description
Asynchronous/IO GraphQL client
A Python asynchronous/IO GraphQL client based on aiohttp
that supports the GraphQL multipart form requests spec for file uploads.
Requirements
- Python (>=3.6)
- aiohttp (>=3.6.0)
Installation
pip install aiogqlc
Usage
Executing simple queries
import asyncio
import aiohttp
from aiogqlc import GraphQLClient
query = '''
query {
allFilms {
title
}
}
'''
async def foo():
async with aiohttp.ClientSession() as session:
client = GraphQLClient('https://swapi.graph.cool/', session=session)
response = await client.execute(query)
print(await response.json())
if __name__ == '__main__':
asyncio.get_event_loop().run_until_complete(foo())
Adding authorization headers
import aiohttp
from aiogqlc import GraphQLClient
headers = {
'Authorization': 'Token <your-token-here>'
}
async def foo():
async with aiohttp.ClientSession(headers=headers) as session:
client = GraphQLClient('https://example.com/graphql/', session=session)
Single file upload
import aiohttp
from aiogqlc import GraphQLClient
query = '''
mutation($file: Upload!) {
yourSingleUploadMutation(file: $file) {
errors {
field
messages
}
}
}
'''
variables = {
'file': open('test.zip', 'rb'),
}
async def foo():
async with aiohttp.ClientSession() as session:
client = GraphQLClient('https://example.com/graphql/', session=session)
response = await client.execute(query, variables=variables)
print(await response.json())
File list upload
import aiohttp
from aiogqlc import GraphQLClient
query = '''
mutation($files: [Upload!]!) {
yourMultiUploadMutation(files: $files) {
errors {
field
messages
}
}
}
'''
variables = {
'files': [
open('foo.zip', 'rb'),
open('var.zip', 'rb'),
],
}
async def foo():
async with aiohttp.ClientSession() as session:
client = GraphQLClient('https://example.com/graphql/', session=session)
response = await client.execute(query, variables=variables)
print(await response.json())
Selecting an operation
import aiohttp
from aiogqlc import GraphQLClient
query = '''
query Operation1 {
allFilms {
id
}
}
query Operation2 {
film(id: 1) {
id
}
}
'''
async def foo():
async with aiohttp.ClientSession() as session:
client = GraphQLClient('https://example.com/graphql/', session=session)
response = await client.execute(query, operation='Operation2')
print(await response.json())
Contributing
Quickstart
- Clone the repo
- Create and enter a dedicated virtual environment
- Run
make dev
to install dev dependencies and a pre-commit hook that automatically formats code.
If you do not have make
installed, either install it or take a look at the Makefile
to find out how to run individual commands manually.
Formatting and linting
- Run
make format
to format the code. - Run
make lint
to lint the code.
Testing
- Run
make test
to run all tests in your local environment. - Run
make tox
to run all tests with all supported python versions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
aiogqlc-2.1.0.tar.gz
(4.9 kB
view hashes)