Files
starfields-drf-generics/generics.py

215 lines
7.4 KiB
Python

"""
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)