from typing import List,Any
from lback.api.view import APIView
from lback.api.mixins import ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin
from lback.core.response import Response
[docs]
class GenericAPIView(APIView):
"""
Base class for all generic views.
Provides context for various generic behaviors.
"""
[docs]
class ListAPIView(ListModelMixin, GenericAPIView):
"""
View for listing a queryset.
"""
[docs]
def get(self, request: Any, *args, **kwargs) -> List[Any]:
return self.list(request, *args, **kwargs)
[docs]
class CreateAPIView(CreateModelMixin, GenericAPIView):
"""
View for creating a model instance.
"""
[docs]
def post(self, request: Any, *args, **kwargs) -> Any:
return self.create(request, *args, **kwargs)
[docs]
class RetrieveAPIView(RetrieveModelMixin, GenericAPIView):
"""
View for retrieving a model instance.
"""
[docs]
def get(self, request: Any, *args, **kwargs) -> Any:
return self.retrieve(request, *args, **kwargs)
[docs]
class UpdateAPIView(UpdateModelMixin, GenericAPIView):
"""
View for updating a model instance.
"""
[docs]
def put(self, request: Any, *args, **kwargs) -> Any:
return self.update(request, *args, **kwargs)
[docs]
def patch(self, request: Any, *args, **kwargs) -> Any:
return self.update(request, *args, **kwargs)
[docs]
class DestroyAPIView(DestroyModelMixin, GenericAPIView):
"""
View for deleting a model instance.
"""
[docs]
def delete(self, request: Any, *args, **kwargs) -> Response:
return self.destroy(request, *args, **kwargs)
[docs]
class ListCreateAPIView(ListModelMixin, CreateModelMixin, GenericAPIView):
"""
View for listing and creating model instances.
"""
[docs]
def get(self, request: Any, *args, **kwargs) -> List[Any]: return self.list(request, *args, **kwargs)
[docs]
def post(self, request: Any, *args, **kwargs) -> Any: return self.create(request, *args, **kwargs)
[docs]
class RetrieveUpdateDestroyAPIView(RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin, GenericAPIView):
"""
View for retrieving, updating, and deleting a model instance.
"""
[docs]
def get(self, request: Any, *args, **kwargs) -> Any: return self.retrieve(request, *args, **kwargs)
[docs]
def put(self, request: Any, *args, **kwargs) -> Any: return self.update(request, *args, **kwargs)
[docs]
def patch(self, request: Any, *args, **kwargs) -> Any: return self.update(request, *args, **kwargs)
[docs]
def delete(self, request: Any, *args, **kwargs) -> Response: return self.destroy(request, *args, **kwargs)