Designed to take the heavy lifting out of working with django-tastypie APIs on the client side.
Features
Django model-like ORM API allowing you to GET, POST, PUT, PATCH, and DELETE:
factory = ResourceFactory('http://localhost:8000/myapp/api/v1/') current_resource = factory.resource.get(field='name') # GET new_resource = factory.resource(field='new_name').save() # POST new_resource.field = 'different_name' new_resource.save() # PUT / PATCH current_resource.delete() # DELETEEasily work with any related resources:
new_resource.children = [ factory.resource(field='new_name1').save(), factory.resource(field='new_name2').save(), ]QuerySets:
queryset1 = factory.resource.filter(field2__gt=20) queryset2 = queryset1.order_by('field2') # Evaluation happens here: resources = queryset2[5:-8]Simple way to set and update authentication per resource:
factory.resource.auth = HTTPApiKeyAuth('username', 'key12345')Access nested resources using simple methods:
new_resource.nested.nested_resource('arg1', arg2=3)Basic field validation before connecting to the API.
Bulk create / update / delete to minimise API access:
factory.resource.bulk( create=[{field='name1'}, {field='name2'}], update=[current_resource, new_resource], delete=[new_resource], )
Find more information on these features at read the docs!
Requirements
The following needs to be installed locally to run TastyTopping:
Python 2.7+ or Python 3.3+
requests >= 1.2.3
Tested with / against:
django >= 1.5.0
django-tastypie >= 0.9.14
requests >= 1.2.3
(see the tox.ini file for more information).
Example
A basic example of a simple workflow, using the following API on the server side:
# myapp/models.py
# ===============
from django.db import models
class Example(models.Model):
path = models.CharField(max_length=255, unique=True)
rating = models.IntegerField(default=50)
date = models.DateTimeField('date', null=True)
# myapp/api.py
# ============
from .models import Example
class ExampleResource(ModelResource):
class Meta:
queryset = Example.objects.all()
resource_name = 'example'
authorization = Authorization()
filtering = {'path': ALL, 'rating': ALL}
ordering = ['rating']
Using TastyTopping on the client side would look like this:
from datetime import datetime
from tastytopping import ResourceFactory
factory = ResourceFactory('http://localhost:8000/myapp/api/v1/')
ex1 = factory.example(path='any text', rating=80).save()
ex1.date = datetime.now()
ex1_copy = factory.example.get(rating=80)
ex1.delete()
Find more examples at read the docs!
Justification
Why another one? There are some other packages around that do something similar, but none are the complete package:
ORM. A lot of other packages use a C-style API, which involves passing a dict with your data to their functions. TastyTopping wraps it all up in an ORM-style object, which is more OO, more elegant, and more pythonic.
Python3 support.
Support for authentication.
Support for nested resources.
QuerySets!
A thorough set of unit tests.
Development has stagnated (none of them have released in close to a year, whereas tastypie has been releasing thick and fast).
Creating this was FUN!
Metadata
Release files for TastyTopping 1.2.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| TastyTopping-1.2.5.tar.gz | 36.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| TastyTopping-1.2.5-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 68.8 kB
Release files / TastyTopping-1.2.5.tar.gz
| Download URL | TastyTopping-1.2.5.tar.gz |
|---|---|
| Size | 36.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b21adf48bdb03b08b30ae459c55c584363331c335cde376cb07383ae9604b966
|
|
BLAKE2b-256 checksum How to use checksums |
d764afbb65138a24ec0ab3defebb7bd3f1eb9bf7f2b6cf08282f15990d632a55
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / TastyTopping-1.2.5-py2.py3-none-any.whl
| Download URL | TastyTopping-1.2.5-py2.py3-none-any.whl |
|---|---|
| Size | 32.2 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
0eab60a36901b8131cf7762d964f8e0a4c653286e8b8ecc0cd703d98e85355b7
|
|
BLAKE2b-256 checksum How to use checksums |
0e06c385fac7138701967c736d311bea7aaaad51f93db614b14aa921544eca55
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Security for TastyTopping 1.2.5
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.