Async helper to work with HTTP APIs
Project description
aio-apiclient – Async helper to work with HTTP APIs
Features
Convenient work with any HTTP API (especially with REST)
Supports httpx and aiohttp as backends to make requests
Very configurable and usable
An ability to parse responses automatically
Requirements
python >= 3.7
Installation
aio-apiclient should be installed using pip:
pip install aio-apiclient
QuickStart
Github API (https://developer.github.com/v4/):
from apiclient import APIClient
client = APIClient('https://api.github.com', headers={
'Authorization': 'token OAUTH-TOKEN'
})
# Read information about the current repository
repo = await client.api.repos.klen['aio-apiclient'].get()
print(repo) # dict parsed from Github Response JSON
Slack API (https://api.slack.com/web):
from apiclient import APIClient
client = APIClient('https://api.github.com', headers={
'Authorization': 'token OAUTH-TOKEN'
})
# Update current user status (we don't care about this response)
await client.api['users.profile.set'].post(json={
'profile': {
'status_text': 'working',
'status_emoji': ':computer:'
'status_expiration': 30,
}
}, read_response_body=False)
And etc
Usage
Initialization
The Client initialization requires root URL for a required API.
from apiclient import APIClient
client = APIClient(
# Root URL for any API (required)
'https://api.github.com',
# Raise `client.Error` for any response with status code > 400
raise_for_status=True,
# Set to `False` if you only want to make a request and doesn't care about responses
read_response_body=True,
# Parse response's body content-type and return JSON/TEXT/Form data instead the response itself
# Set total timeout in seconds
timeout=10.0,
# Set backend type for making requests (apiclient.backends.BackendHTTPX,
# apiclient.backends.BackendAIOHTTP) by default first available would be
# choosen
backend_type=None,
# Default backend options to use with every request (headers, params, data, ...)
# ...
)
App Shutdown
The api client support graceful shutdown. Run await client.shutdown() when you are finishing your app (not necessary).
Middlewares
You are able to dinamically change request params (method, url, other backend params) using middlewares.
import time
from apiclient import APIClient
client = APIClient('https://api.github.com')
@client.middleware
async def insert_timestamp_header(method, url, options):
options.setdefault('headers', {})
options['headers']['X-Timestamp'] = str(time.time())
return method, url, options
Bug tracker
If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/aio-apiclient/issues
Contributing
Development of the project happens at: https://github.com/klen/aio-apiclient
License
Licensed under a MIT license.
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
Built Distribution
File details
Details for the file aio-apiclient-1.4.0.tar.gz
.
File metadata
- Download URL: aio-apiclient-1.4.0.tar.gz
- Upload date:
- Size: 7.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 77aee10f1d4c2c7317d10c51c524d78a656b344e79f342b57ec0b92d13a8421e |
|
MD5 | e7d06cb84f8fa934ce6d42da6ee13d13 |
|
BLAKE2b-256 | f2a5da65df12c746af0cbe906021a9a041270c8834b2bfbc801b7707e50ec290 |
File details
Details for the file aio_apiclient-1.4.0-py3-none-any.whl
.
File metadata
- Download URL: aio_apiclient-1.4.0-py3-none-any.whl
- Upload date:
- Size: 8.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.61.2 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 82221e57e07fd6fe5895dce8d9c2029ac87d7ddf73dc5951abc850698e6f2fc8 |
|
MD5 | 9e5c8af6b7742773923fd4282e11c72b |
|
BLAKE2b-256 | 40db6a22a51d8dd7f49f91a85e0cd50c6ee020af004a8df959786452bc19d1e7 |