Setting up stuff for private API
parent
737740add2
commit
fafc0685a4
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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')),
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue