Remove old code for mailing list. (#1363)

- Remove old templates, views, urls, tests and models
- Per #204, this project was abandoned.
- We will query and save aggregated stats from hyperkitty in a future
commit, in #1289
This commit is contained in:
Brian Perrett
2024-10-16 11:45:04 -07:00
committed by GitHub
parent ef954fe0fa
commit 21aaf323f6
9 changed files with 16 additions and 247 deletions

View File

@@ -36,7 +36,6 @@ from libraries.views import (
LibraryListByCategory,
LibraryListMini,
)
from mailing_list.views import MailingListDetailView, MailingListView
from news.feeds import AtomNewsFeed, RSSNewsFeed
from news.views import (
AllTypesCreateView,
@@ -169,12 +168,6 @@ urlpatterns = (
LibraryDetail.as_view(redirect_to_docs=True),
name="library-docs-redirect",
),
path(
"mailing-list/<int:pk>/",
MailingListDetailView.as_view(),
name="mailing-list-detail",
),
path("mailing-list/", MailingListView.as_view(), name="mailing-list"),
path("news/", EntryListView.as_view(), name="news"),
path("news/blogpost/", BlogPostListView.as_view(), name="news-blogpost-list"),
path("news/link/", LinkListView.as_view(), name="news-link-list"),

View File

@@ -1,59 +0,0 @@
import random
from django.core.management.base import BaseCommand
from django.utils import timezone
from model_bakery import baker
from mailing_list.models import MailingListMessage
subjects = [
"Re: Master is open for merges",
"Re: Suggestion for ccmath library",
"Re: Update on boost::asio",
"Re: boost::python issue",
"Re: boost::filesystem question",
"Re: boost::mpl - New release?",
"Re: boost::log - Configuration",
]
sender_displays = [
"Oliver Smith",
"Sophia Johnson",
"Liam Williams",
"Ava Taylor",
"Noah Davis",
"Isabella Brown",
"Lucas Wilson",
]
class Command(BaseCommand):
help = "Generate realistic-looking test data for MailingListMessage model"
def handle(self, *args, **options):
self.stdout.write("Generating test data...")
for _ in range(5):
# Create a top-level message
top_level_message = baker.make(
MailingListMessage,
sender=None,
sender_email=None,
sender_display=random.choice(sender_displays),
subject=random.choice(subjects),
sent_at=timezone.now() - timezone.timedelta(days=random.randint(1, 30)),
)
# Create replies for the top-level message
for _ in range(random.randint(1, 5)):
baker.make(
MailingListMessage,
sender=None,
sender_email=None,
sender_display=random.choice(sender_displays),
subject=f"Re: {top_level_message.subject}",
parent=top_level_message,
sent_at=timezone.now()
- timezone.timedelta(days=random.randint(1, 30)),
)
self.stdout.write(self.style.SUCCESS("Test data generated successfully!"))

View File

@@ -0,0 +1,16 @@
# Generated by Django 4.2.15 on 2024-10-16 18:28
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("mailing_list", "0002_mailinglistmessage_sender_and_more"),
]
operations = [
migrations.DeleteModel(
name="MailingListMessage",
),
]

View File

@@ -1,43 +0,0 @@
from django.db import models
from django.contrib.auth import get_user_model
from mptt.models import MPTTModel, TreeForeignKey
from django.utils.translation import gettext_lazy as _
User = get_user_model()
class MailingListMessage(MPTTModel):
sender = models.ForeignKey(
User,
on_delete=models.CASCADE,
null=True,
blank=True,
help_text=_("The registered user who sent the message."),
)
sender_email = models.EmailField(
null=True, blank=True, help_text=_("The email address of the sender.")
)
sender_display = models.CharField(
max_length=255,
null=True,
blank=True,
help_text=_("The display name of the sender."),
)
subject = models.CharField(
max_length=255, help_text=_("The subject of the message.")
)
body = models.TextField(help_text=_("The body of the message."))
parent = TreeForeignKey(
"self",
on_delete=models.CASCADE,
null=True,
blank=True,
related_name="replies",
help_text=_("The parent message to which this message is a reply."),
)
sent_at = models.DateTimeField(
help_text=_("The date and time when the message was sent.")
)
class MPTTMeta:
order_insertion_by = ["-sent_at"]

View File

@@ -1,30 +0,0 @@
import pytest
from model_bakery import baker
@pytest.fixture
def mailing_list_message_factory():
def factory(**kwargs):
return baker.make("mailing_list.MailingListMessage", **kwargs)
return factory
def test_mailing_list_message_tree_structure(mailing_list_message_factory):
root = mailing_list_message_factory(subject="Root")
child1 = mailing_list_message_factory(subject="Child 1", parent=root)
child2 = mailing_list_message_factory(subject="Child 2", parent=root)
grandchild1 = mailing_list_message_factory(subject="Grandchild 1", parent=child1)
grandchild2 = mailing_list_message_factory(subject="Grandchild 2", parent=child1)
assert root.get_children().count() == 2
assert child1 in root.get_children()
assert child2 in root.get_children()
assert child1.get_children().count() == 2
assert grandchild1 in child1.get_children()
assert grandchild2 in child1.get_children()
assert child2.get_children().count() == 0
assert grandchild1.get_children().count() == 0
assert grandchild2.get_children().count() == 0

View File

@@ -1,24 +0,0 @@
import pytest
from model_bakery import baker
from ..models import MailingListMessage
@pytest.fixture
def mailing_list_messages():
return baker.make(MailingListMessage, _quantity=10)
@pytest.mark.django_db
def test_mailing_list_view(tp, mailing_list_messages):
"""Test the mailing list view."""
url = tp.reverse("mailing-list")
response = tp.get_check_200(url)
assert len(response.context["object_list"]) == len(mailing_list_messages)
assert set(response.context["object_list"]) == set(mailing_list_messages)
@pytest.mark.django_db
def test_mailing_list_detail_view(tp, mailing_list_messages):
"""Test the mailing list view."""
url = tp.reverse("mailing-list-detail", pk=mailing_list_messages[0].pk)
tp.get_check_200(url)

View File

@@ -1,25 +0,0 @@
from django.views.generic import DetailView, ListView
from .models import MailingListMessage
class MailingListView(ListView):
model = MailingListMessage
template_name = "mailing_list/list.html"
context_object_name = "objects"
paginate_by = 10
def get_queryset(self):
return MailingListMessage.objects.filter(parent__isnull=True).order_by(
"-sent_at"
)
class MailingListDetailView(DetailView):
model = MailingListMessage
template_name = "mailing_list/detail.html"
context_object_name = "message"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["replies"] = self.object.replies.order_by("sent_at")
return context

View File

@@ -1,22 +0,0 @@
{% extends 'base.html' %}
{% block content %}
<h1>Mailing List Message</h1>
<div>
<h2>{{ message.subject }}</h2>
<p><strong>{{ message.sender_display }}</strong> - {{ message.sent_at }}</p>
<p>{{ message.body|linebreaks }}</p>
</div>
<h3>Replies</h3>
<ul>
{% for reply in replies %}
<li>
<a href="{% url 'mailing-list-detail' pk=reply.pk %}" class="text-orange"><strong>{{ reply.sender_display }}</strong>: {{ reply.subject }}</a>
<p>{{ reply.body|linebreaks }}</p>
</li>
{% empty %}
<li>No replies for this message.</li>
{% endfor %}
</ul>
<p><a href="{% url 'mailing-list' %}" class="text-orange">Back to Mailing List Archives</a></p>
{% endblock %}

View File

@@ -1,37 +0,0 @@
{% extends "base.html" %}
{% block content %}
<div class="p-3 md:p-0">
<h1 class="my-5 text-4xl">Mailing List Archives</h1>
</div>
<div class="py-0 px-3 mb-3 md:py-6 md:px-0">
<ul class="space-y-3">
{% for message in objects %}
<li>
{{ message.sent_at }}: <a href="{% url 'mailing-list-detail' pk=message.pk %}" class="text-orange">
<strong>{{ message.sender_display }}</strong>: {{ message.subject }}
</a>
<ul class="pl-5 space-y-2">
{% for reply in message.get_descendants %}
<li>
<a href="{% url 'mailing-list-detail' pk=reply.pk %}" class="text-orange">
<strong>{{ reply.sender_display }}</strong>: {{ reply.subject }}
</a>
</li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
<div class="mt-5 space-x-3 text-center">
{% if messages.has_previous %}
<a href="?page=1" class="text-orange"><small> &lt;&lt; First</small></a>
<a href="?page={{ messages.previous_page_number }}" class="text-orange"><small> &lt; Previous</small> </a>
{% endif %}
{% if messages.has_next %}
<a href="?page={{ messages.next_page_number }}" class="text-orange"><small>Next <small> &gt; </small></a>
<a href="?page={{ messages.paginator.num_pages }}" class="text-orange">Last <small> &gt;&gt;</small></a>
{% endif %}
</div>
</div>
{% endblock %}