Skip to content

Instantly share code, notes, and snippets.

@paul-english
Created November 7, 2011 23:51
Show Gist options
  • Save paul-english/1346584 to your computer and use it in GitHub Desktop.
Save paul-english/1346584 to your computer and use it in GitHub Desktop.
class ExtBaseHandler(BaseHandler):
allowed_methods = ('GET', 'POST', 'PUT', 'DELETE',)
def create(self, request, *args, **kwargs):
print "create"
if not self.has_model():
return rc.NOT_IMPLEMENTED
print request.data
attrs = self.flatten_dict(request.data)
print attrs
if attrs.has_key('data'):
ext_posted_data = simplejson.loads(request.data.get('data'))
attrs = self.flatten_dict(ext_posted_data)
try:
inst = self.model.objects.all().get(**attrs)
print inst
return rc.DUPLICATE_ENTRY
except self.model.DoesNotExist:
inst = self.model(**attrs)
inst.save()
return inst
except self.model.MultipleObjectsReturned:
return rc.DUPLICATE_ENTRY
def read(self, request, *args, **kwargs):
if not self.has_model():
raise rc.NOT_IMPLEMENTED
pkfield = self.model._meta.pk.name
if pkfield in kwargs:
try:
return self.model.objects.all().get(pk=kwargs.get(pkfield))
except ObjectDoesNotExist:
return rc.NOT_FOUND
except MultipleObjectsReturned: # should never happen, since we're using a PK
return rc.BAD_REQUEST
else:
# TODO limit, filter, dir, group, page, sort, start
start = request.GET.get('start', 0)
limit = request.GET.get('limit', 10)
if start != 0:
limit = int(limit) + int(start)
request.total = self.model.objects.aggregate(Count('id')).get('id__count')
return self.model.objects.all().filter(*args, **kwargs)[start:limit]
def update(self, request, *args, **kwargs):
if not self.has_model():
return rc.NOT_IMPLEMENTED
pkfield = self.model._meta.pk.name
if pkfield not in kwargs:
# No pk was specified
return rc.BAD_REQUEST
try:
#inst = self.queryset(request).get(pk=kwargs.get(pkfield))
inst = self.model.objects.all().get(pk=kwargs.get(pkfield))
except ObjectDoesNotExist:
return rc.NOT_FOUND
except MultipleObjectsReturned: # should never happen, since we're using a PK
return rc.BAD_REQUEST
attrs = self.flatten_dict(request.data)
for k,v in attrs.iteritems():
setattr( inst, k, v )
inst.save()
return rc.ALL_OK
def delete(self, request, *args, **kwargs):
if not self.has_model():
return rc.NOT_IMPLEMENTED
try:
inst = self.model.objects.all().get(*args, **kwargs)
inst.delete()
return rc.DELETED
except self.model.MultipleObjectsReturned:
return rc.DUPLICATE_ENTRY
except self.model.DoesNotExist:
return rc.NOT_HERE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment