Coverage for learning_logs/views.py: 57.78%

74 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-08-31 09:09 -0700

1from django.contrib.auth.decorators import login_required 

2from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator 

3from django.http import Http404 

4from django.shortcuts import get_object_or_404, redirect, render 

5 

6from .forms import EntryForm, TopicForm 

7from .models import Entry, Topic 

8 

9 

10@login_required() 

11def topics(request): 

12 """Show all topics.""" 

13 topics = Topic.objects.filter(owner=request.user).order_by("date_added") 1d

14 page = request.GET.get("page", 1) 1d

15 

16 paginator = Paginator(topics, 3) 1d

17 try: 1d

18 topics = paginator.page(page) 1d

19 except PageNotAnInteger: 

20 topics = paginator.page(1) 

21 except EmptyPage: 

22 topics = paginator.page(paginator.num_pages) 

23 

24 context = {"topics": topics} 1d

25 return render(request, "learning_logs/topics.html", context) 1d

26 

27 

28@login_required() 

29def topic(request, topic_id): 

30 """Show a single topic and all its entries.""" 

31 topic = get_object_or_404(Topic, id=topic_id) 1b

32 page = request.GET.get("page", 1) 1b

33 # Make sure the topic belongs to the current user. 

34 if topic.owner != request.user: 34 ↛ 35line 34 didn't jump to line 35 because the condition on line 34 was never true1b

35 raise Http404 

36 entries = topic.entry_set.order_by("-date_added") 1b

37 paginator = Paginator(entries, 3) 1b

38 try: 1b

39 entries = paginator.page(page) 1b

40 except PageNotAnInteger: 

41 entries = paginator.page(1) 

42 except EmptyPage: 

43 entries = paginator.page(paginator.num_pages) 

44 

45 context = {"topic": topic, "entries": entries} 1b

46 return render(request, "learning_logs/topic.html", context) 1b

47 

48 

49@login_required() 

50def new_topic(request): 

51 """Add a new topic.""" 

52 if request.method != "POST": 52 ↛ 54line 52 didn't jump to line 54 because the condition on line 52 was never true1e

53 # No data submitted; create a blank form. 

54 form = TopicForm() 

55 else: 

56 # POST data submitted; process data. 

57 form = TopicForm(data=request.POST) 1e

58 if form.is_valid(): 58 ↛ 65line 58 didn't jump to line 65 because the condition on line 58 was always true1e

59 new_topic = form.save(commit=False) 1e

60 new_topic.owner = request.user 1e

61 new_topic.save() 1e

62 return redirect("topics") 1e

63 

64 # Display a blank or invalid form. 

65 context = {"form": form} 

66 return render(request, "learning_logs/new_topic.html", context) 

67 

68 

69@login_required() 

70def new_entry(request, topic_id): 

71 """Add a new entry for a particular topic.""" 

72 topic = Topic.objects.get(id=topic_id) 1c

73 

74 if request.method != "POST": 74 ↛ 76line 74 didn't jump to line 76 because the condition on line 74 was never true1c

75 # No data submitted; create a blank form. 

76 form = EntryForm() 

77 else: 

78 # POST data submitted; process data. 

79 form = EntryForm(data=request.POST) 1c

80 if form.is_valid(): 80 ↛ 87line 80 didn't jump to line 87 because the condition on line 80 was always true1c

81 new_entry = form.save(commit=False) 1c

82 new_entry.topic = topic 1c

83 new_entry.save() 1c

84 return redirect("topic", topic_id=topic_id) 1c

85 

86 # Display a blank or invalid form. 

87 context = {"topic": topic, "form": form} 

88 return render(request, "learning_logs/new_entry.html", context) 

89 

90 

91@login_required() 

92def edit_entry(request, entry_id): 

93 """Edit an existing entry.""" 

94 entry = Entry.objects.get(id=entry_id) 

95 topic = entry.topic 

96 if topic.owner != request.user: 

97 raise Http404 

98 

99 if request.method != "POST": 

100 # Initial request; pre-fill form with the current entry. 

101 form = EntryForm(instance=entry) 

102 else: 

103 # Post data submitted; process data. 

104 form = EntryForm(instance=entry, data=request.POST) 

105 if form.is_valid(): 

106 form.save() 

107 return redirect("topic", topic_id=topic.id) 

108 

109 context = {"entry": entry, "topic": topic, "form": form} 

110 return render(request, "learning_logs/edit_entry.html", context)