Fix up tag API endpoints, for #130.

master
Nick Sergeant 2014-05-26 17:28:13 -04:00
parent b8b637a629
commit 1af27988c1
2 changed files with 24 additions and 90 deletions

View File

@ -74,34 +74,6 @@ class PrivateSniptAuthorization(Authorization):
def delete_detail(self, object_list, bundle):
return bundle.obj.user == bundle.request.user
class PrivateTagAuthorization(Authorization):
def read_list(self, object_list, bundle):
object_list = object_list.filter(snipt__user=bundle.request.user)
object_list = object_list.annotate(count=models.Count('taggit_taggeditem_items__id'))
object_list = object_list.order_by('-count', 'name')
return object_list
def read_detail(self, object_list, bundle):
raise Unauthorized()
def create_list(self, object_list, bundle):
raise Unauthorized()
def create_detail(self, object_list, bundle):
raise Unauthorized()
def update_list(self, object_list, bundle):
raise Unauthorized()
def update_detail(self, object_list, bundle):
raise Unauthorized()
def delete_list(self, object_list, bundle):
raise Unauthorized()
def delete_detail(self, object_list, bundle):
raise Unauthorized()
class PrivateUserProfileAuthorization(Authorization):
def read_list(self, object_list, bundle):
raise Unauthorized()
@ -202,38 +174,36 @@ class PublicUserResource(ModelResource):
bundle.data['email_md5'] = hashlib.md5(bundle.obj.email.lower()).hexdigest()
return bundle
# class PublicTagResource(ModelResource):
# class Meta:
# queryset = Tag.objects.filter(snipt__public=True)
# queryset = queryset.annotate(count=models.Count('taggit_taggeditem_items__id'))
# queryset = queryset.order_by('-count', 'name')
# resource_name = 'tag'
# fields = ['id', 'name',]
# allowed_methods = ['get']
# max_limit = 200
# cache = SimpleCache()
class PublicTagResource(ModelResource):
class Meta:
queryset = Tag.objects.filter()
queryset = queryset.annotate(count=models.Count('taggit_taggeditem_items__id'))
queryset = queryset.order_by('-count', 'name')
resource_name = 'tag'
fields = ['id', 'name',]
allowed_methods = ['get']
max_limit = 200
cache = SimpleCache()
# def build_filters(self, filters=None):
# if filters is None:
# filters = {}
def build_filters(self, filters=None):
if filters is None:
filters = {}
# orm_filters = super(PublicTagResource, self).build_filters(filters)
orm_filters = super(PublicTagResource, self).build_filters(filters)
# if 'q' in filters:
# orm_filters['slug'] = filters['q']
if 'q' in filters:
orm_filters['slug'] = filters['q']
# return orm_filters
return orm_filters
# def dehydrate(self, bundle):
# bundle.data['absolute_url'] = '/public/tag/%s/' % bundle.obj.slug
# bundle.data['snipts'] = '/api/public/snipt/?tag=%d' % bundle.obj.id
# bundle.data['count'] = bundle.obj.taggit_taggeditem_items.filter(
# snipt__public=True).count()
# return bundle
def dehydrate(self, bundle):
bundle.data['absolute_url'] = '/public/tag/%s/' % bundle.obj.slug
bundle.data['snipts'] = '/api/public/snipt/?tag=%d' % bundle.obj.id
return bundle
class PublicSniptResource(ModelResource):
user = fields.ForeignKey(PublicUserResource, 'user', full=True)
# tags = fields.ToManyField(PublicTagResource, 'tags', related_name='tag', full=True)
tags = fields.ToManyField(PublicTagResource, 'tags', related_name='tag', full=True)
class Meta:
queryset = Snipt.objects.filter(public=True).order_by('-created')
@ -317,43 +287,8 @@ class PrivateUserResource(ModelResource):
Snipt.objects.filter(user=bundle.obj).values('lexer').distinct()]
return bundle
# class PrivateTagResource(ModelResource):
# class Meta:
# queryset = Tag.objects.all()
# resource_name = 'tag'
# fields = ['id', 'name',]
# allowed_methods = ['get']
# authentication = ApiKeyAuthentication()
# authorization = PrivateTagAuthorization()
# always_return_data = True
# max_limit = 200
# cache = SimpleCache()
# def build_filters(self, filters=None):
# if filters is None:
# filters = {}
# orm_filters = super(PrivateTagResource, self).build_filters(filters)
# if 'q' in filters:
# orm_filters['slug'] = filters['q']
# return orm_filters
# def dehydrate(self, bundle):
# bundle.data['absolute_url'] = '/%s/tag/%s/' % (bundle.request.user.username,
# bundle.obj.slug)
# bundle.data['snipts'] = '/api/private/snipt/?tag=%d' % bundle.obj.id
# bundle.data['count'] = bundle.obj.taggit_taggeditem_items.filter(
# snipt__user=bundle.request.user
# ).count()
# return bundle
class PrivateSniptResource(ModelResource):
user = fields.ForeignKey(PrivateUserResource, 'user', full=True)
# tags = fields.ToManyField(PrivateTagResource, 'tags', related_name='tag', full=True)
tags_list = ListField()
class Meta:

View File

@ -7,7 +7,7 @@ from django.contrib import admin
from snipts.api import (PublicSniptResource,
PublicUserResource, PrivateSniptResource,
PrivateFavoriteResource, PrivateUserProfileResource,
PrivateUserResource)
PrivateUserResource, PublicTagResource)
from snipts.views import search
from tastypie.api import Api
from utils.views import SniptRegistrationView
@ -23,12 +23,11 @@ admin.autodiscover()
public_api = Api(api_name='public')
public_api.register(PublicSniptResource())
# public_api.register(PublicTagResource())
public_api.register(PublicTagResource())
public_api.register(PublicUserResource())
private_api = Api(api_name='private')
private_api.register(PrivateSniptResource())
# private_api.register(PrivateTagResource())
private_api.register(PrivateUserResource())
private_api.register(PrivateFavoriteResource())
private_api.register(PrivateUserProfileResource())