This commit is contained in:
Sébastien Piquemal 2012-01-06 15:47:03 +02:00
parent 587c890ef1
commit e96666fa44
2 changed files with 14 additions and 12 deletions

View File

@ -490,6 +490,7 @@ class InstanceMixin(object):
""" """
view = super(InstanceMixin, cls).as_view(**initkwargs) view = super(InstanceMixin, cls).as_view(**initkwargs)
resource_class = getattr(cls(**initkwargs), 'resource_class', None) resource_class = getattr(cls(**initkwargs), 'resource_class', None)
# TODO: FIX !!! Very bad now, since this is attached on the class
if resource_class: if resource_class:
# We do a little dance when we store the view callable... # We do a little dance when we store the view callable...
# we need to store it wrapped in a 1-tuple, so that inspect will # we need to store it wrapped in a 1-tuple, so that inspect will
@ -506,7 +507,7 @@ class GetResourceMixin(object):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
try: try:
self.resource.retrieve(request, *args, **kwargs) self.resource.retrieve(*args, **kwargs)
except self.resource.DoesNotExist: except self.resource.DoesNotExist:
raise ErrorResponse(status.HTTP_404_NOT_FOUND) raise ErrorResponse(status.HTTP_404_NOT_FOUND)
return self.resource.instance return self.resource.instance
@ -515,8 +516,8 @@ class GetResourceMixin(object):
class PostResourceMixin(object): class PostResourceMixin(object):
def post(self, request, *args, **kwargs): def post(self, request, *args, **kwargs):
self.resource.create(request, *args, **kwargs) self.resource.create(*args, **kwargs)
self.resource.update(self.CONTENT, request, *args, **kwargs) self.resource.update(self.CONTENT, *args, **kwargs)
headers = {'Location': self.resource.get_url()} headers = {'Location': self.resource.get_url()}
return Response(status.HTTP_201_CREATED, self.resource.instance, headers) return Response(status.HTTP_201_CREATED, self.resource.instance, headers)
@ -526,12 +527,12 @@ class PutResourceMixin(object):
def put(self, request, *args, **kwargs): def put(self, request, *args, **kwargs):
headers = {} headers = {}
try: try:
self.resource.retrieve(request, *args, **kwargs) self.resource.retrieve(*args, **kwargs)
status_code = status.HTTP_204_NO_CONTENT status_code = status.HTTP_204_NO_CONTENT
except self.resource.DoesNotExist: except self.resource.DoesNotExist:
self.resource.create(request, *args, **kwargs) self.resource.create(*args, **kwargs)
status_code = status.HTTP_201_CREATED status_code = status.HTTP_201_CREATED
self.resource.update(self.CONTENT, request, *args, **kwargs) self.resource.update(self.CONTENT, *args, **kwargs)
return Response(status_code, self.resource.instance, {}) return Response(status_code, self.resource.instance, {})
@ -539,17 +540,17 @@ class DeleteResourceMixin(object):
def delete(self, request, *args, **kwargs): def delete(self, request, *args, **kwargs):
try: try:
self.resource.retrieve(request, *args, **kwargs) self.resource.retrieve(*args, **kwargs)
except self.resource.DoesNotExist: except self.resource.DoesNotExist:
raise ErrorResponse(status.HTTP_404_NOT_FOUND) raise ErrorResponse(status.HTTP_404_NOT_FOUND)
self.resource.delete(request, *args, **kwargs) self.resource.delete(*args, **kwargs)
return return
class ListResourceMixin(object): class ListResourceMixin(object):
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
return self.resource.list(request, *args, **kwargs) return self.resource.list(*args, **kwargs)
########## Pagination Mixins ########## ########## Pagination Mixins ##########

View File

@ -19,7 +19,8 @@ class BaseResource(object):
# TODO: Inheritance, like for models # TODO: Inheritance, like for models
class DoesNotExist(Exception): pass class DoesNotExist(Exception): pass
def __init__(self, instance=None, view=None, depth=None, stack=[], **kwargs): # !!! `view` should be first kwarg to avoid backward incompatibilities.
def __init__(self, view=None, instance=None, depth=None, stack=[], **kwargs):
super(BaseResource, self).__init__(depth, stack, **kwargs) super(BaseResource, self).__init__(depth, stack, **kwargs)
self.view = view self.view = view
self.instance = instance self.instance = instance
@ -320,13 +321,13 @@ class ModelResource(FormResource):
is not set. is not set.
""" """
def __init__(self, instance=None, view=None, depth=None, stack=[], **kwargs): def __init__(self, view=None, instance=None, depth=None, stack=[], **kwargs):
""" """
Allow :attr:`form` and :attr:`model` attributes set on the Allow :attr:`form` and :attr:`model` attributes set on the
:class:`View` to override the :attr:`form` and :attr:`model` :class:`View` to override the :attr:`form` and :attr:`model`
attributes set on the :class:`Resource`. attributes set on the :class:`Resource`.
""" """
super(ModelResource, self).__init__(instance=instance, view=view, depth=depth, stack=stack, **kwargs) super(ModelResource, self).__init__(view=view, instance=instance, depth=depth, stack=stack, **kwargs)
self.model = getattr(view, 'model', None) or self.model self.model = getattr(view, 'model', None) or self.model