From 362dd505201e58313cfcd11bc32bfd8dd808e59c Mon Sep 17 00:00:00 2001 From: Nick Sergeant Date: Sat, 1 Oct 2011 19:09:59 -0400 Subject: [PATCH] Working on public API --- settings.py | 1 + snipts/admin.py | 2 +- snipts/api.py | 60 ++++++++++++++++++++++++++++++++++++++++++++---- snipts/models.py | 5 +++- urls.py | 16 +++++++------ 5 files changed, 71 insertions(+), 13 deletions(-) diff --git a/settings.py b/settings.py index 831a16d..a89b756 100644 --- a/settings.py +++ b/settings.py @@ -36,6 +36,7 @@ TEMPLATE_LOADERS = ( 'django.template.loaders.app_directories.load_template_source', ) MIDDLEWARE_CLASSES = ( + 'django.middleware.cache.CacheMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware', diff --git a/snipts/admin.py b/snipts/admin.py index 91e9546..70a5c0a 100644 --- a/snipts/admin.py +++ b/snipts/admin.py @@ -19,7 +19,7 @@ class SniptAdmin(admin.ModelAdmin): admin.site.register(Snipt, SniptAdmin) class CommentAdmin(admin.ModelAdmin): - readonly_fields = ('user', 'snipt',) + #readonly_fields = ('user', 'snipt',) list_display = ('comment', 'user', 'snipt', 'created', 'modified',) search_fields = ('comment', 'user__username',) ordering = ('created',) diff --git a/snipts/api.py b/snipts/api.py index e35e9f7..e02f737 100644 --- a/snipts/api.py +++ b/snipts/api.py @@ -1,8 +1,60 @@ from tastypie.resources import ModelResource -from snipts.models import Snipt +from django.contrib.auth.models import User +from snipts.models import Comment, Snipt +from tastypie.cache import SimpleCache +from taggit.models import Tag +from tastypie import fields - -class SniptResource(ModelResource): +class PublicUserResource(ModelResource): class Meta: - queryset = Snipt.objects.all() + queryset = User.objects.all() + resource_name = 'user' + fields = ['username',] + cache = SimpleCache() + + def dehydrate(self, bundle): + bundle.data['url'] = 'https://snipt.net/%s/' % bundle.obj.username + return bundle + +class PublicCommentSniptResource(ModelResource): + class Meta: + queryset = Snipt.objects.filter(public=True).order_by('-created') resource_name = 'snipt' + fields = ['id',] + cache = SimpleCache() + +class PublicTagResource(ModelResource): + class Meta: + queryset = Tag.objects.all() + resource_name = 'tag' + fields = ['name', 'slug',] + cache = SimpleCache() + +class PublicCommentResource(ModelResource): + user = fields.ForeignKey(PublicUserResource, 'user') + snipt = fields.ForeignKey(PublicCommentSniptResource, 'snipt') + + class Meta: + queryset = Comment.objects.all() + resource_name = 'comment' + fields = ['user', 'snipt', 'comment', 'created', 'modified',] + cache = SimpleCache() + +class PublicSniptResource(ModelResource): + user = fields.ForeignKey(PublicUserResource, 'user') + comments = fields.ToManyField(PublicCommentResource, 'comment_set', + related_name='comment') + tags = fields.ToManyField(PublicTagResource, 'tags', related_name='tag') + + class Meta: + queryset = Snipt.objects.filter(public=True).order_by('-created') + resource_name = 'snipt' + fields = ['user', 'title', 'slug', 'tags', 'lexer', 'code', 'stylized', + 'created', 'modified',] + cache = SimpleCache() + + def dehydrate(self, bundle): + bundle.data['url'] = bundle.obj.get_absolute_url() + bundle.data['user_username'] = bundle.obj.user.username + bundle.data['user_url'] = 'https://snipt.net/%s/' % bundle.obj.user.username + return bundle diff --git a/snipts/models.py b/snipts/models.py index e0f56cd..ba89bb0 100644 --- a/snipts/models.py +++ b/snipts/models.py @@ -33,6 +33,9 @@ class Snipt(models.Model): def __unicode__(self): return self.title + def get_absolute_url(self): + return "https://snipt.net/%s/%s/" % (self.user.username, self.slug) + class Comment(models.Model): """A comment on a Snipt""" @@ -42,7 +45,7 @@ class Comment(models.Model): comment = models.TextField() # TODO Set auto_now_add back to True for production! - created = models.DateTimeField(auto_now_add=False, editable=False) + created = models.DateTimeField(auto_now_add=True, editable=False) modified = models.DateTimeField(auto_now=True, editable=False) def __unicode__(self): diff --git a/urls.py b/urls.py index ad8361f..f37ce3b 100644 --- a/urls.py +++ b/urls.py @@ -1,15 +1,17 @@ +from snipts.api import PublicCommentResource, PublicSniptResource, PublicUserResource, PublicTagResource from django.views.generic.simple import direct_to_template from django.conf.urls.defaults import * from django.contrib import admin +from tastypie.api import Api +from views import home admin.autodiscover() -from views import home - -from snipts.api import SniptResource - -snipt_resource = SniptResource() - +public_api = Api(api_name='public') +public_api.register(PublicCommentResource()) +public_api.register(PublicUserResource()) +public_api.register(PublicSniptResource()) +public_api.register(PublicTagResource()) urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), @@ -18,7 +20,7 @@ urlpatterns = patterns('', url(r'^404/$', direct_to_template, {'template': '404.html'}), url(r'^500/$', direct_to_template, {'template': '500.html'}), - url(r'^api/', include(snipt_resource.urls)), + url(r'^api/', include(public_api.urls)), url(r'^$', home), )