Skip to content

Instantly share code, notes, and snippets.

View bogsio's full-sized avatar

George-Bogdan Ivanov bogsio

View GitHub Profile
@bogsio
bogsio / api.py
Created July 25, 2014 11:00
TPT3 - add foreign key
# ...
from tastypie.resources import ModelResource, fields
# ...
class TodoItemResource(ModelResource):
todo_list = fields.ForeignKey(TodoListResource, 'todo_list')
class Meta:
authentication = SessionAuthentication()
authorization = AuthorizationByList()
@bogsio
bogsio / icontains.json
Created July 24, 2014 11:13
TPT3 - icontains json data
{
"meta":{
"limit":20,
"next":null,
"offset":0,
"previous":null,
"total_count":1
},
"objects":[
{
@bogsio
bogsio / api.py
Created July 24, 2014 11:11
TPT3 - Adding icontains filtering
class TodoItemResource(ModelResource):
class Meta:
authentication = SessionAuthentication()
authorization = AuthorizationByList()
queryset = TodoItem.objects.all()
resource_name = 'item'
filtering = {
'text': ('icontains',)
}
@bogsio
bogsio / stats.json
Created July 24, 2014 10:58
TPT3 - Stats json
{
"item_count":2,
"list_count":1
}
@bogsio
bogsio / api.py
Created July 24, 2014 10:56
TPT3 - Adding custom resource method
class TodoListResource(ModelResource):
def prepend_urls(self):
return [
url(r"^(?P<resource_name>%s)/stats%s$" %
(self._meta.resource_name, trailing_slash()),
self.wrap_view('stats'), name="api_list_stats"),
]
def dehydrate(self, bundle):
@bogsio
bogsio / api.py
Created July 24, 2014 10:37
TPT3 - adding dehydrate method
class TodoListResource(ModelResource):
def dehydrate(self, bundle):
items = bundle.obj.items.all()
bundle.data['item_count'] = items.count()
bundle.data['items'] = [i.to_dict() for i in items]
return bundle
class Meta:
authentication = SessionAuthentication()
@bogsio
bogsio / models.py
Created July 24, 2014 10:35
TPT3 - Adding to_dict
class TodoItem(models.Model):
text = models.TextField('Item Text')
todo_list = models.ForeignKey(TodoList, related_name='items')
def to_dict(self):
return {'text': self.text, 'id': self.pk}
def __unicode__(self):
return self.text[:50] + ' ' + unicode(self.todo_list)
@bogsio
bogsio / api_authorization.py
Created July 23, 2014 17:12
TPT2 - Add list authorization
class AuthorizationByList(Authorization):
def read_list(self, object_list, bundle):
author = bundle.request.user
print dir(author)
return object_list.filter(todo_list_id__in=[l.id for l in author.todo_lists.all()])
def read_detail(self, object_list, bundle):
return bundle.obj.todo_list.author == bundle.request.user
@bogsio
bogsio / api.py
Created July 23, 2014 17:01
TPT2 - Adding authorization
class TodoListResource(ModelResource):
class Meta:
authentication = SessionAuthentication()
authorization = AuthorizationByUser()
queryset = TodoList.objects.all()
resource_name = 'list'
@bogsio
bogsio / api_authorization.py
Created July 23, 2014 16:55
T2T - Add authorization
from tastypie.authorization import Authorization
from tastypie.exceptions import Unauthorized
class AuthorizationByUser(Authorization):
def read_list(self, object_list, bundle):
return object_list.filter(author=bundle.request.user)
def read_detail(self, object_list, bundle):