No project description provided
Project description
A generic client for RESTful APIs
$ pip install genericclient
Quickstart
from genericclient import GenericClient myclient = GenericClient(api_url) myresource = myclient.resources.get(id=1) actives = myclient.posts.filter(active=True)
Usage
Instantiation
myclient = GenericClient(url, auth=None, adapter=None, trailing_slash=False)
Arguments:
url: The root URL of your API
auth: The auth for your API. You can pass anything that requests can accept as auth.
adapter: optional session adapter for requests.
trailing_slash: You can set this to True if your API’s URLs end with a /
Endpoints
Endpoints are available as properties on the main instance.
.all()
Retrieves all resources (essentially a simple GET on the endpoint):
myclient.posts.all() # GET /posts/
.filter(**kwargs) calls a GET with kwargs as querystring values:
myclient.posts.filter(blog=12, status=1) # GET /posts/?blog=12&status=1
.get(**kwargs)
A special case of .filter().
If kwargs contains id, pk, slug or username, that value will be used in the URL path, in that order.
Otherwise, it calls a GET with kwargs as querystring values.
If the returned list is empty, will raise ResourceNotFound.
If the returned list contains more than 1 resource, will raise MultipleResourcesFound
Note that .get() will return a Resource, not a list of Resource s
myclient.posts.filter(blog=12, status=1) # GET /posts/?blog=12&status=1 myclient.posts.filter(id=12) # GET /posts/12/ myclient.posts.filter(slug='12-ways-clickbait') # GET /posts/12-ways-clickbait/
.create(payload)
Will result in a POST, with payload (a dict) as the request’s body, returning a new Resource:
post = myclient.posts.create({'blog': 12, 'status': 1}) # POST /posts/
.get_or_create(defaults, **kwargs)
Issues a GET to fetch the resource. If the resource is not found, issues a POST to create the resource.
# Assuming it doesn’t exist post = myclient.posts.get_or_update(slug=’my-post’, defaults={‘status’: 1}) # GET /posts/my-post/, then POST /posts/
.create_or_update(payload)
If payload contains a key called 'id', will issue a PUT. If the server returns a 400 error, a PATCH request will be re-issued. If payload` does not contains 'id', it will issue a POST:
post = myclient.posts.create_or_update({'status': 1}) # POST /posts/ post = myclient.posts.create_or_update({'id': 1234, 'status': 1}) # PUT /posts/1234/ post = myclient.posts.create_or_update({'id': 1234}) # PUT /posts/1234/ # <- server returns 400 # -> PATCH /posts/1234/
.delete(pk)
Will issue a DELETE, and will use pk as part of the URL:
myclient.posts.delete(24) # DELETE /posts/24/
Resources
All endpoints methods (with the exception of .delete()) return either a Resource or a list of Resource s.
A Resource is just a wrapping class for a dict, where keys can be accessed as properties.
Additionally, Resource s have a special property called .payload, which contains the original payload received from the server.
Resource s have the following methods:
Resource.delete() will result in a DELETE, with Resource.id as par of the URL:
blog = myclient.posts.create({'blog': 12, 'status': 1}) # POST /posts/ blog.delete() # DELETE /blog/345/ -- the ID 345 was returned by the server in the previous response
Resource.save() will result in a PUT, with Resource.id as par of the URL. If the server returns a 400 error, a PATCH request will be re-issued:
post = myclient.posts.create({'blog': 12, 'status': 1}) # POST /posts/ post.status = 2 post.save() # PUT /posts/345/ post = Resource(id=345, status=1) post.save() # PUT /posts/345/ # <- server returns 400 # -> PATCH /posts/345/
License
Licensed under the 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 genericclient-0.0.16.tar.gz
.
File metadata
- Download URL: genericclient-0.0.16.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 201e21717887717f16f80ae983a0dc80d397f0fc1ad9404cd1169b59458548a9 |
|
MD5 | cfdefd03baa6aceaa476eb43a74f7546 |
|
BLAKE2b-256 | c94c48515bb1e8d1483c506a86299ec99f894ea512d88cc85d334eec30db26a5 |
Provenance
File details
Details for the file genericclient-0.0.16-py2.py3-none-any.whl
.
File metadata
- Download URL: genericclient-0.0.16-py2.py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b719bdef92fdff29b6904a2974c62fa07dec18831db4d346407a61e6c341ce80 |
|
MD5 | c68f63860a4d050bc7641950ebd64c28 |
|
BLAKE2b-256 | 9aa094b3027acb3ba64e44d4d7564378868fee0a3d4decdc06e8b558ab0b156d |