Skip to main content

UNKNOWN

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

genericclient-0.0.10.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

genericclient-0.0.10-py2.py3-none-any.whl (7.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file genericclient-0.0.10.tar.gz.

File metadata

File hashes

Hashes for genericclient-0.0.10.tar.gz
Algorithm Hash digest
SHA256 5ba561a06e6300807ab60502de1f29103b53e4e6fbec9ce5438ceaf0be78f6d7
MD5 9aaa326220a9a63823be773987b5b02a
BLAKE2b-256 01b2bf7a17c7044966c4f5e2897f9402d80940740c3af2daabb21c32582bb0a9

See more details on using hashes here.

Provenance

File details

Details for the file genericclient-0.0.10-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for genericclient-0.0.10-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 bc90aba34af0a2a3a386b786e304d83b1bec85af96c4092657b828ae7f1b7bf8
MD5 386e43f8bd19605241f578f6b4d53bfe
BLAKE2b-256 d88b92a81c5de203c2b6adfc36c8ce8ccf6f4427425028f21e69dfb9629e7712

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page