Setting up stuff for private API

master
Nick Sergeant 2011-12-22 23:36:06 -05:00
parent 737740add2
commit fafc0685a4
2 changed files with 89 additions and 5 deletions

View File

@ -1,4 +1,4 @@
from tastypie.resources import ModelResource, ALL_WITH_RELATIONS from tastypie.resources import ModelResource
from django.contrib.auth.models import User from django.contrib.auth.models import User
from snipts.models import Comment, Snipt from snipts.models import Comment, Snipt
from tastypie.cache import SimpleCache from tastypie.cache import SimpleCache
@ -82,3 +82,81 @@ class PublicSniptResource(ModelResource):
orm_filters['pk__in'] = [i.object_id for i in tagged_items] orm_filters['pk__in'] = [i.object_id for i in tagged_items]
return orm_filters return orm_filters
class PrivateUserResource(ModelResource):
class Meta:
queryset = User.objects.all()
resource_name = 'user'
fields = ['username',]
include_absolute_url = True
allowed_methods = ['get']
list_allowed_methods = []
cache = SimpleCache()
def dehydrate(self, bundle):
bundle.data['snipts'] = '/api/public/snipt/?user=%d' % bundle.obj.id
return bundle
class PrivateTagResource(ModelResource):
class Meta:
queryset = Tag.objects.filter(snipt__public=True)
queryset = queryset.annotate(count=Count('taggit_taggeditem_items__id'))
queryset = queryset.order_by('-count')
resource_name = 'tag'
fields = ['name',]
allowed_methods = ['get']
cache = SimpleCache()
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
class PrivateCommentResource(ModelResource):
user = fields.ForeignKey(PrivateUserResource, 'user')
snipt = fields.ForeignKey('snipts.api.PrivateSniptResource', 'snipt')
class Meta:
queryset = Comment.objects.filter(snipt__public=True).order_by('-created')
resource_name = 'comment'
fields = ['user', 'snipt', 'comment', 'created', 'modified',]
include_absolute_url = True
allowed_methods = ['get']
cache = SimpleCache()
class PrivateSniptResource(ModelResource):
user = fields.ForeignKey(PrivateUserResource, 'user', full=True)
tags = fields.ToManyField(PrivateTagResource, 'tags', related_name='tag', full=True)
comments = fields.ToManyField(PrivateCommentResource, 'comment_set',
related_name='comment', full=True)
class Meta:
queryset = Snipt.objects.filter(public=True).order_by('-created')
resource_name = 'snipt'
fields = ['title', 'slug', 'lexer', 'code', 'created', 'modified',]
include_absolute_url = True
allowed_methods = ['get']
filtering = { 'user': 'exact', }
cache = SimpleCache()
def dehydrate(self, bundle):
bundle.data['embed_url'] = bundle.obj.get_embed_url()
bundle.data['stylized'] = bundle.obj.get_stylized()
return bundle
def build_filters(self, filters=None):
if filters is None:
filters = {}
orm_filters = super(PrivateSniptResource, self).build_filters(filters)
if 'tag' in filters:
tag = Tag.objects.get(pk=filters['tag'])
tagged_items = tag.taggit_taggeditem_items.all()
orm_filters['pk__in'] = [i.object_id for i in tagged_items]
return orm_filters

View File

@ -1,18 +1,23 @@
from snipts.api import PublicCommentResource, PublicSniptResource, PublicUserResource, PublicTagResource
from django.views.generic.simple import direct_to_template from django.views.generic.simple import direct_to_template
from django.conf.urls.static import static
from django.conf.urls.defaults import * from django.conf.urls.defaults import *
from django.contrib import admin from django.contrib import admin
from django.conf import settings from django.conf import settings
from tastypie.api import Api from tastypie.api import Api
from snipts.api import *
admin.autodiscover() admin.autodiscover()
public_api = Api(api_name='public') public_api = Api(api_name='public')
public_api.register(PublicCommentResource())
public_api.register(PublicUserResource()) public_api.register(PublicUserResource())
public_api.register(PublicSniptResource())
public_api.register(PublicTagResource()) public_api.register(PublicTagResource())
public_api.register(PublicCommentResource())
public_api.register(PublicSniptResource())
private_api = Api(api_name='private')
private_api.register(PrivateUserResource())
private_api.register(PrivateTagResource())
private_api.register(PrivateCommentResource())
private_api.register(PrivateSniptResource())
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', include(admin.site.urls)),
@ -22,6 +27,7 @@ urlpatterns = patterns('',
url(r'^500/$', direct_to_template, {'template': '500.html'}), url(r'^500/$', direct_to_template, {'template': '500.html'}),
url(r'^api/', include(public_api.urls)), url(r'^api/', include(public_api.urls)),
url(r'^api/', include(private_api.urls)),
url(r'^', include('snipts.urls')), url(r'^', include('snipts.urls')),