Skip to main content
https://img.shields.io/travis/cboelsen/tastytopping/master.png https://img.shields.io/pypi/v/TastyTopping.png

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()                                # DELETE
  • Easily 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:

(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)

Source distribution for TastyTopping 1.2.5
File Size Uploaded Provenance
TastyTopping-1.2.5.tar.gz 36.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for TastyTopping 1.2.5
File Interpreter ABI Platform
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page