Coverage for snippets/views.py: 86.67%

30 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-29 13:21 -0700

1from django.contrib.auth import get_user_model 1a

2from django.views.generic import ListView 1a

3from rest_framework import permissions, renderers, viewsets 1a

4from rest_framework.decorators import action, api_view 1a

5from rest_framework.response import Response 1a

6from rest_framework.reverse import reverse 1a

7 

8from .models import Snippet 1a

9from .permissions import IsOwnerOrReadOnly 1a

10from .serializers import SnippetSerializer, UserSerializer 1a

11 

12User = get_user_model() 1a

13 

14 

15@api_view(["GET"]) 1a

16def api_root(request, format=None): 1a

17 return Response( 

18 # fmt: off 

19 { 

20 "users": reverse("user-list", request=request, format=format), 

21 "snippets": reverse("snippet-list", request=request, format=format), 

22 } 

23 # fmt: on 

24 ) 

25 

26 

27class SnippetViewSet(viewsets.ModelViewSet): 1a

28 """ 

29 This viewset autmatically provides 'list', 'create', 'retrieve', 

30 'update', and 'destroy' actions. 

31 

32 Additionally we also provide an extra 'highlight' action. 

33 """ 

34 

35 queryset = Snippet.objects.all() 1a

36 serializer_class = SnippetSerializer 1a

37 permission_classes = ( 1a

38 permissions.IsAuthenticatedOrReadOnly, 

39 IsOwnerOrReadOnly, 

40 ) 

41 

42 @action(detail=True, renderer_classes=[renderers.StaticHTMLRenderer]) 1a

43 def highlight(self, request, *args, **kwargs): 1a

44 snippet = self.get_object() 

45 return Response(snippet.highlighted) 

46 

47 def perform_create(self, serializer): 1a

48 serializer.save(owner=self.request.user) 

49 

50 

51class UserViewSet(viewsets.ReadOnlyModelViewSet): 1a

52 """ 

53 This viewset automatically provides 'list' and 'retrieve actions. 

54 """ 

55 

56 queryset = User.objects.all() 1a

57 serializer_class = UserSerializer 1a

58 

59 

60class SnippetListView(ListView): 1a

61 model = Snippet 1a

62 template_name = "snippets/snippets_list.html" 1a

63 

64 paginate_by = 5 1a