""" Generic views that provide commonly needed behaviour. """ from rest_framework.generics import GenericAPIView from starfields_drf_generics 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)