from typing import Any, Dict

from django.db.models import Model
from rest_framework.request import Request
from rest_framework.response import Response
from rest_framework.serializers import BaseSerializer

class CreateModelMixin(object):
    def create(self, request: Request, *args: Any, **kwargs: Any) -> Response: ...
    def perform_create(self, serializer: BaseSerializer) -> None: ...
    def get_success_headers(self, data: Any) -> Dict[str, str]: ...

class ListModelMixin(object):
    def list(self, request: Request, *args: Any, **kwargs: Any) -> Response: ...

class RetrieveModelMixin(object):
    def retrieve(self, request: Request, *args: Any, **kwargs: Any) -> Response: ...

class UpdateModelMixin(object):
    def update(self, request: Request, *args: Any, **kwargs: Any) -> Response: ...
    def perform_update(self, serializer: BaseSerializer) -> None: ...
    def partial_update(self, request: Request, *args: Any, **kwargs: Any) -> Response: ...

class DestroyModelMixin(object):
    def destroy(self, request: Request, *args: Any, **kwargs: Any) -> Response: ...
    def perform_destroy(self, instance: Model) -> None: ...
