Files
Pinry/pinry/api/api.py

74 lines
2.2 KiB
Python
Raw Normal View History

from django.conf import settings
from django_images.models import Thumbnail
from tastypie.resources import ModelResource
from tastypie import fields
from tastypie.authorization import DjangoAuthorization
2012-07-06 20:01:33 +00:00
from pinry.core.models import User
from pinry.pins.models import Pin
class UserResource(ModelResource):
gravatar = fields.CharField()
def dehydrate_gravatar(self, bundle):
return bundle.obj.gravatar
class Meta:
queryset = User.objects.all()
resource_name = 'user'
2013-02-21 07:43:52 +00:00
excludes = ['password', 'is_superuser', 'first_name',
'last_name', 'is_active', 'is_staff', 'last_login', 'date_joined']
include_resource_uri = False
class PinResource(ModelResource):
images = fields.DictField()
2012-09-28 04:42:13 +00:00
tags = fields.ListField()
submitter = fields.ForeignKey(UserResource, 'submitter', full=True)
2012-09-28 04:42:13 +00:00
def dehydrate_images(self, bundle):
original = bundle.obj.image
images = {'original': {
'url': original.get_absolute_url(), 'width': original.width, 'height': original.height}
}
for image in ['standard', 'thumbnail']:
obj = Thumbnail.objects.get_or_create_at_size(original.pk, image)
images[image] = {
'url': obj.get_absolute_url(), 'width': obj.width, 'height': obj.height
}
return images
class Meta:
queryset = Pin.objects.all()
resource_name = 'pin'
include_resource_uri = False
filtering = {
'published': ['gt'],
'submitter': ['exact']
}
fields = ['submitter', 'tags', 'published', 'description', 'url']
authorization = DjangoAuthorization()
2012-09-28 04:42:13 +00:00
def build_filters(self, filters=None):
if filters is None:
filters = {}
orm_filters = super(PinResource, self).build_filters(filters)
if 'tag' in filters:
orm_filters['tags__name__in'] = filters['tag'].split(',')
2012-09-28 05:28:31 +00:00
2012-09-28 04:42:13 +00:00
return orm_filters
def dehydrate_tags(self, bundle):
return map(str, bundle.obj.tags.all())
def save_m2m(self, bundle):
tags = bundle.data.get('tags', [])
bundle.obj.tags.set(*tags)
return super(PinResource, self).save_m2m(bundle)