Refactoring base api classes.

remotes/origin/enhancement/email-actions
Andrey Antukh 2013-10-16 17:13:45 +02:00
parent 68f0dd7928
commit 3a08114eea
1 changed files with 49 additions and 3 deletions

View File

@ -1,10 +1,49 @@
# -*- coding: utf-8 -*-
from django.db import transaction
from rest_framework import viewsets
from rest_framework import status
from rest_framework import mixins
from rest_framework.response import Response
from .pagination import HeadersPaginationMixin, ConditionalPaginationMixin
class AtomicMixin(object):
@transaction.atomic
def post(self, *args, **kwargs):
return super().post(*args, **kwargs)
@transaction.atomic
def delete(self, *args, **kwargs):
return super().delete(*args, **kwargs)
@transaction.atomic
def put(self, *args, **kwargs):
return super().put(*args, **kwargs)
@transaction.atomic
def patch(self, *args, **kwargs):
return super().patch(*args, **kwargs)
class DestroyModelMixin(object):
"""
Self version of DestroyModelMixin with
pre_delete hook method.
"""
def pre_delete(self, obj):
pass
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
self.pre_delete(obj)
obj.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
class PreconditionMixin(object):
def pre_conditions_on_save(self, obj):
pass
@ -21,14 +60,21 @@ class PreconditionMixin(object):
self.pre_conditions_on_delete(obj)
class ModelCrudViewSet(PreconditionMixin,
class ModelCrudViewSet(AtomicMixin,
PreconditionMixin,
HeadersPaginationMixin,
ConditionalPaginationMixin,
viewsets.ModelViewSet):
mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
DestroyModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
pass
class ModelListViewSet(PreconditionMixin,
class ModelListViewSet(AtomicMixin,
PreconditionMixin,
HeadersPaginationMixin,
ConditionalPaginationMixin,
viewsets.ReadOnlyModelViewSet):