""" Generic views that provide commonly needed behaviour. """ from django.core.exceptions import ValidationError from django.db.models.query import QuerySet from django.http import Http404 from django.shortcuts import get_object_or_404 as _get_object_or_404 from rest_framework import views from rest_framework.generics import GenericAPIView from rest_framework.settings import api_settings from libraries import mixins # Concrete view classes that provide method handlers # by composing the mixin classes with the base view. # Single item CRUD class CachedCreateAPIView(mixins.CachedCreateModelMixin,GenericAPIView): """ Concrete view for creating a model instance. """ def post(self, request, *args, **kwargs): return self.create(request, *args, **kwargs) class CachedRetrieveAPIView(mixins.CachedRetrieveModelMixin,GenericAPIView): """ Concrete view for retrieving a model instance. """ def get(self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) class CachedUpdateAPIView(mixins.CachedUpdateModelMixin,GenericAPIView): """ Concrete view for updating a model instance. """ def put(self, request, *args, **kwargs): return self.update(request, *args, **kwargs) def patch(self, request, *args, **kwargs): return self.partial_update(request, *args, **kwargs) class CachedDestroyAPIView(mixins.CachedDestroyModelMixin,GenericAPIView): """ Concrete view for deleting a model instance. """ def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs) class CachedRetrieveUpdateAPIView(mixins.CachedRetrieveModelMixin,mixins.CachedUpdateModelMixin,GenericAPIView): """ Concrete view for retrieving, updating a model instance. """ def get(self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) def put(self, request, *args, **kwargs): return self.update(request, *args, **kwargs) def patch(self, request, *args, **kwargs): return self.partial_update(request, *args, **kwargs) class CachedRetrieveDestroyAPIView(mixins.CachedRetrieveModelMixin,mixins.CachedDestroyModelMixin,GenericAPIView): """ Concrete view for retrieving or deleting a model instance. """ def get(self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs) class CachedRetrieveUpdateDestroyAPIView(mixins.CachedRetrieveModelMixin,mixins.CachedUpdateModelMixin,mixins.CachedDestroyModelMixin,GenericAPIView): """ Concrete view for retrieving, updating or deleting a model instance. """ def get(self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) def put(self, request, *args, **kwargs): return self.update(request, *args, **kwargs) def patch(self, request, *args, **kwargs): return self.partial_update(request, *args, **kwargs) def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs) class CachedCreateRetrieveUpdateDestroyAPIView(mixins.CachedCreateModelMixin,mixins.CachedRetrieveModelMixin,mixins.CachedUpdateModelMixin,mixins.CachedDestroyModelMixin,GenericAPIView): """ Concrete view for creating, retrieving, updating or deleting a model instance. """ def get(self, request, *args, **kwargs): return self.retrieve(request, *args, **kwargs) def post(self, request, *args, **kwargs): return self.create(request, *args, **kwargs) def put(self, request, *args, **kwargs): return self.update(request, *args, **kwargs) def patch(self, request, *args, **kwargs): return self.partial_update(request, *args, **kwargs) def delete(self, request, *args, **kwargs): return self.destroy(request, *args, **kwargs) # List based CRUD class CachedListRetrieveAPIView(mixins.CachedListRetrieveModelMixin,GenericAPIView): """ Concrete view for listing a queryset. """ def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) class CachedListCreateAPIView(mixins.CachedListCreateModelMixin,GenericAPIView): """ Concrete view for creating multiple instances. """ def post(self, request, *args, **kwargs): return self.list_create(request, *args, **kwargs) class CachedListUpdateAPIView(mixins.CachedListUpdateModelMixin,GenericAPIView): """ Concrete view for updating multiple instances. """ def put(self, request, *args, **kwargs): return self.list_update(request, *args, **kwargs) def patch(self, request, *args, **kwargs): return self.list_partial_update(request, *args, **kwargs) class CachedListDestroyAPIView(mixins.CachedListDestroyModelMixin,GenericAPIView): """ Concrete view for deleting multiple instances. """ def delete(self, request, *args, **kwargs): return self.list_destroy(request, *args, **kwargs) class CachedListRetrieveCreateAPIView(mixins.CachedListRetrieveModelMixin,mixins.CachedListCreateModelMixin,GenericAPIView): """ Concrete view for listing a queryset or creating a model instance. """ def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs): return self.create(request, *args, **kwargs) class CachedListCreateRetrieveDestroyAPIView(mixins.CachedListCreateModelMixin,mixins.CachedListRetrieveModelMixin,mixins.CachedListDestroyModelMixin,GenericAPIView): """ Concrete view for creating, retrieving or deleting a model instance. """ def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs): return self.list_create(request, *args, **kwargs) def delete(self, request, *args, **kwargs): return self.list_destroy(request, *args, **kwargs) class CachedListCreateRetrieveUpdateAPIView(mixins.CachedListCreateModelMixin,mixins.CachedListRetrieveModelMixin,mixins.CachedListUpdateModelMixin,GenericAPIView): """ Concrete view for creating, retrieving, updating or deleting a model instance. """ def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs): return self.list_create(request, *args, **kwargs) def put(self, request, *args, **kwargs): return self.list_update(request, *args, **kwargs) def patch(self, request, *args, **kwargs): return self.list_partial_update(request, *args, **kwargs) class CachedListCreateRetrieveUpdateDestroyAPIView(mixins.CachedListCreateModelMixin,mixins.CachedListRetrieveModelMixin,mixins.CachedListUpdateModelMixin,mixins.CachedListDestroyModelMixin,GenericAPIView): """ Concrete view for creating, retrieving, updating or deleting a model instance. """ def get(self, request, *args, **kwargs): return self.list(request, *args, **kwargs) def post(self, request, *args, **kwargs): return self.list_create(request, *args, **kwargs) def put(self, request, *args, **kwargs): return self.list_update(request, *args, **kwargs) def patch(self, request, *args, **kwargs): return self.list_partial_update(request, *args, **kwargs) def delete(self, request, *args, **kwargs): return self.list_destroy(request, *args, **kwargs)