Skip to main content

An ORM for tastypie's API on the client-side.

Project description

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!

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

TastyTopping-1.2.5.tar.gz (36.6 kB view details)

Uploaded Source

Built Distribution

TastyTopping-1.2.5-py2.py3-none-any.whl (32.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file TastyTopping-1.2.5.tar.gz.

File metadata

File hashes

Hashes for TastyTopping-1.2.5.tar.gz
Algorithm Hash digest
SHA256 b21adf48bdb03b08b30ae459c55c584363331c335cde376cb07383ae9604b966
MD5 855d9a35b43fac63de3f766e5d9419dc
BLAKE2b-256 d764afbb65138a24ec0ab3defebb7bd3f1eb9bf7f2b6cf08282f15990d632a55

See more details on using hashes here.

File details

Details for the file TastyTopping-1.2.5-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for TastyTopping-1.2.5-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 0eab60a36901b8131cf7762d964f8e0a4c653286e8b8ecc0cd703d98e85355b7
MD5 7483596ed5414a595bfdcdd569844072
BLAKE2b-256 0e06c385fac7138701967c736d311bea7aaaad51f93db614b14aa921544eca55

See more details on using hashes here.

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