Skip to content

Commit 418470a

Browse files
committed
Remove the analytics view.
1 parent 04994e0 commit 418470a

4 files changed

Lines changed: 2 additions & 163 deletions

File tree

project/newsletter/test_views.py

Lines changed: 0 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -419,81 +419,3 @@ def test_update(self):
419419
)
420420
self.assertRedirects(response, reverse("newsletter:list_posts"))
421421
self.assertEqual(self.subscription.categories.get(), self.data.career)
422-
423-
424-
class TestAnalytics(DataTestCase):
425-
def test_basic(self):
426-
self.client.force_login(self.user)
427-
response = self.client.get(reverse("newsletter:analytics"))
428-
self.assertTemplateUsed(response, "staff/analytics.html")
429-
self.assertEqual(
430-
response.context["aggregates"],
431-
{
432-
"Subscriptions": 1,
433-
"Subscriptions (30 days)": 1,
434-
"Subscriptions (90 days)": 1,
435-
"Subscriptions (180 days)": 1,
436-
"Posts": 3,
437-
"Posts (30 days)": 3,
438-
"Posts (90 days)": 3,
439-
"Posts (180 days)": 3,
440-
},
441-
)
442-
443-
self.assertEqual(
444-
response.context["subscription_category_aggregates"],
445-
{
446-
self.data.career.title: 1,
447-
self.data.social.title: 1,
448-
},
449-
)
450-
self.assertEqual(
451-
response.context["post_category_aggregates"],
452-
{
453-
self.data.career.title: 2,
454-
self.data.social.title: 2,
455-
},
456-
)
457-
458-
def test_date_aggregates(self):
459-
# Create users that are outside the cut-off points.
460-
for days in [31, 91, 181]:
461-
user = User.objects.create_user(username=f"days{days}")
462-
subscription = Subscription.objects.create(user=user)
463-
# We can't specify created in .create() because it's automatically set.
464-
Subscription.objects.filter(id=subscription.id).update(
465-
created=timezone.now() - timedelta(days=days)
466-
)
467-
subscription.categories.set([self.data.career, self.data.social])
468-
469-
self.client.force_login(self.user)
470-
response = self.client.get(reverse("newsletter:analytics"))
471-
self.assertTemplateUsed(response, "staff/analytics.html")
472-
self.assertEqual(
473-
response.context["aggregates"],
474-
{
475-
"Subscriptions": 4,
476-
"Subscriptions (30 days)": 1,
477-
"Subscriptions (90 days)": 2,
478-
"Subscriptions (180 days)": 3,
479-
"Posts": 3,
480-
"Posts (30 days)": 3,
481-
"Posts (90 days)": 3,
482-
"Posts (180 days)": 3,
483-
},
484-
)
485-
486-
self.assertEqual(
487-
response.context["subscription_category_aggregates"],
488-
{
489-
self.data.career.title: 4,
490-
self.data.social.title: 4,
491-
},
492-
)
493-
self.assertEqual(
494-
response.context["post_category_aggregates"],
495-
{
496-
self.data.career.title: 2,
497-
self.data.social.title: 2,
498-
},
499-
)

project/newsletter/urls.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
path("markdown/uploader/", views.markdown_uploader, name="markdown_uploader"),
88
path("", views.landing, name="landing"),
99
path("account/", views.update_subscription, name="update_subscription"),
10-
path("analytics/", views.analytics, name="analytics"),
1110
path("post/unpublished/", views.unpublished_posts, name="unpublished_posts"),
1211
path("post/create/", views.create_post, name="create_post"),
1312
path("post/<slug>/update/", views.update_post, name="update_post"),

project/newsletter/views.py

Lines changed: 2 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import os
22
import uuid
3-
from datetime import timedelta
43

54
from django.conf import settings
65
from django.contrib import messages
@@ -10,17 +9,16 @@
109
from django.core.files.base import ContentFile
1110
from django.core.files.storage import default_storage
1211
from django.core.paginator import Paginator
13-
from django.db.models import Case, Count, F, Q, Value, When
12+
from django.db.models import Case, F, Value, When
1413
from django.http import Http404, HttpResponse, JsonResponse
1514
from django.shortcuts import get_object_or_404, redirect, render
16-
from django.utils import timezone
1715
from django.utils.translation import gettext_lazy as _
1816
from django.views.decorators.http import require_http_methods
1917
from martor.utils import LazyEncoder
2018

2119
from project.newsletter import operations
2220
from project.newsletter.forms import PostForm, SubscriptionForm
23-
from project.newsletter.models import Category, Post, Subscription
21+
from project.newsletter.models import Post, Subscription
2422

2523
LIST_POSTS_PAGE_SIZE = 100
2624

@@ -187,83 +185,6 @@ def toggle_post_privacy(request, slug):
187185
return redirect("newsletter:list_posts")
188186

189187

190-
@staff_member_required(login_url=settings.LOGIN_URL)
191-
@require_http_methods(["GET"])
192-
def analytics(request):
193-
"""
194-
The post detail view.
195-
"""
196-
now = timezone.now()
197-
subscription_aggregates = Subscription.objects.all().aggregate(
198-
subscriptions=Count("user", distinct=True, filter=Q(categories__isnull=False)),
199-
subscriptions_30_days=Count(
200-
"id",
201-
filter=Q(categories__isnull=False, created__gte=now - timedelta(days=30)),
202-
distinct=True,
203-
),
204-
subscriptions_90_days=Count(
205-
"id",
206-
filter=Q(categories__isnull=False, created__gte=now - timedelta(days=90)),
207-
distinct=True,
208-
),
209-
subscriptions_180_days=Count(
210-
"id",
211-
filter=Q(categories__isnull=False, created__gte=now - timedelta(days=180)),
212-
distinct=True,
213-
),
214-
)
215-
subscription_category_aggregates = dict(
216-
Category.objects.annotate(count=Count("subscriptions"))
217-
.order_by("title")
218-
.values_list("title", "count")
219-
)
220-
post_aggregates = Post.objects.all().aggregate(
221-
posts=Count("id"),
222-
posts_30_days=Count(
223-
"id",
224-
filter=Q(created__gte=now - timedelta(days=30)),
225-
),
226-
posts_90_days=Count(
227-
"id",
228-
filter=Q(created__gte=now - timedelta(days=90)),
229-
),
230-
posts_180_days=Count(
231-
"id",
232-
filter=Q(created__gte=now - timedelta(days=180)),
233-
),
234-
)
235-
post_category_aggregates = dict(
236-
Category.objects.annotate(count=Count("posts"))
237-
.order_by("title")
238-
.values_list("title", "count")
239-
)
240-
241-
return render(
242-
request,
243-
"staff/analytics.html",
244-
{
245-
"aggregates": {
246-
"Subscriptions": subscription_aggregates["subscriptions"],
247-
"Subscriptions (30 days)": subscription_aggregates[
248-
"subscriptions_30_days"
249-
],
250-
"Subscriptions (90 days)": subscription_aggregates[
251-
"subscriptions_90_days"
252-
],
253-
"Subscriptions (180 days)": subscription_aggregates[
254-
"subscriptions_180_days"
255-
],
256-
"Posts": post_aggregates["posts"],
257-
"Posts (30 days)": post_aggregates["posts_30_days"],
258-
"Posts (90 days)": post_aggregates["posts_90_days"],
259-
"Posts (180 days)": post_aggregates["posts_180_days"],
260-
},
261-
"subscription_category_aggregates": subscription_category_aggregates,
262-
"post_category_aggregates": post_category_aggregates,
263-
},
264-
)
265-
266-
267188
@staff_member_required(login_url=settings.LOGIN_URL)
268189
@require_http_methods(["POST"])
269190
def markdown_uploader(request):

project/templates/base.html

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@
3535
<a href="{% url "auth_login" %}" class="header item">Login</a>
3636
{% else %}
3737
<a href="{% url "newsletter:update_subscription" %}" class="header item">Settings</a>
38-
{% if request.user.is_staff %}
39-
<a href="{% url "newsletter:analytics" %}" class="header item">Analytics</a>
40-
{% endif %}
4138
{% endif %}
4239
<div class="right menu">
4340
<a class="item" href="https://github.com/tim-schilling/debug-tutorial" target="_blank">

0 commit comments

Comments
 (0)