forked from pool/python-HyperKitty
Accepting request 1094581 from devel:languages:python:mailman:backports
Update to 1.3.7 and use python 3.11 OBS-URL: https://build.opensuse.org/request/show/1094581 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:mailman/python-HyperKitty?expand=0&rev=63
This commit is contained in:
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:8269222bca481dfb9b6dbc4d766fc3e8bda8ef6d85a6dc5880835874850e9f86
|
||||
size 2488492
|
3
HyperKitty-1.3.7.tar.gz
Normal file
3
HyperKitty-1.3.7.tar.gz
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:4d74aca3ec30546741ca62339ece72392e298f511d0a89e69bcedbfcdc8102cb
|
||||
size 2691781
|
@@ -1,67 +0,0 @@
|
||||
From 94194e0f5eeacf1be2a88a28bfed62dbc6c5d5a2 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Garcia Moreno <daniel.garcia@suse.com>
|
||||
Date: Thu, 6 Oct 2022 12:53:56 +0200
|
||||
Subject: [PATCH] Fix django4.1 compatibility issues with related fields
|
||||
|
||||
In Django4.1 a ValueError exception is raised when trying to access to
|
||||
foreign keys for unsaved model instances:
|
||||
|
||||
https://docs.djangoproject.com/en/4.1/releases/4.1/#reverse-foreign-key-changes-for-unsaved-model-instances
|
||||
|
||||
This patch ensures that everything is saved before trying to use related
|
||||
models and handles the exception correctly in the Thread model pre_save.
|
||||
---
|
||||
hyperkitty/models/thread.py | 8 ++++++++
|
||||
hyperkitty/tests/models/test_email.py | 6 ++++++
|
||||
2 files changed, 14 insertions(+)
|
||||
|
||||
diff --git a/hyperkitty/models/thread.py b/hyperkitty/models/thread.py
|
||||
index b550cdb8..e49954a7 100644
|
||||
--- a/hyperkitty/models/thread.py
|
||||
+++ b/hyperkitty/models/thread.py
|
||||
@@ -148,10 +148,18 @@ class Thread(models.Model):
|
||||
from .email import Email # circular import
|
||||
if self.starting_email is not None:
|
||||
return
|
||||
+
|
||||
try:
|
||||
self.starting_email = self.emails.get(parent_id__isnull=True)
|
||||
except Email.DoesNotExist:
|
||||
self.starting_email = self.emails.order_by("date").first()
|
||||
+ except ValueError:
|
||||
+ # If the Thread is not created yet, the self.emails will raise a
|
||||
+ # ValueError exception. This happens at creation time because this
|
||||
+ # method is called by on_pre_save
|
||||
+ #
|
||||
+ # https://docs.djangoproject.com/en/4.1/releases/4.1/#reverse-foreign-key-changes-for-unsaved-model-instances
|
||||
+ return
|
||||
|
||||
def on_pre_save(self):
|
||||
self.find_starting_email()
|
||||
diff --git a/hyperkitty/tests/models/test_email.py b/hyperkitty/tests/models/test_email.py
|
||||
index 7bcac390..f194e2b1 100644
|
||||
--- a/hyperkitty/tests/models/test_email.py
|
||||
+++ b/hyperkitty/tests/models/test_email.py
|
||||
@@ -195,6 +195,9 @@ class EmailTestCase(TestCase):
|
||||
subject="This is a folded\n subject",
|
||||
in_reply_to="<msg1.example.com>\n <msg2.example.com>",
|
||||
content="Dummy message")
|
||||
+ sender.save()
|
||||
+ mlist.save()
|
||||
+ email.save()
|
||||
msg = email.as_message()
|
||||
self.assertEqual(msg["Subject"], "This is a folded subject")
|
||||
|
||||
@@ -210,6 +213,9 @@ class EmailTestCase(TestCase):
|
||||
mailinglist=mlist,
|
||||
subject="Message subject",
|
||||
content="Dummy message")
|
||||
+ sender.save()
|
||||
+ mlist.save()
|
||||
+ email.save()
|
||||
msg = email.as_message()
|
||||
self.assertEqual(msg['from'], '"Team: J.Q. Doe" <dummy@example.com>')
|
||||
|
||||
--
|
||||
2.37.3
|
||||
|
@@ -1,331 +0,0 @@
|
||||
commit e8228c7eddae75d168b28bc3a7abe351bab04b65
|
||||
Author: John Vandenberg <jayvdb@gmail.com>
|
||||
Date: Mon Dec 27 10:48:27 2021 +0800
|
||||
|
||||
Support Django 4.0
|
||||
|
||||
diff --git a/example_project/urls.py b/example_project/urls.py
|
||||
index 9c854989..53245861 100644
|
||||
--- a/example_project/urls.py
|
||||
+++ b/example_project/urls.py
|
||||
@@ -21,21 +21,21 @@ This file is the main URL config for a Django website including HyperKitty.
|
||||
"""
|
||||
|
||||
from django.conf import settings
|
||||
-from django.conf.urls import include, url
|
||||
+from django.conf.urls import include
|
||||
from django.contrib import admin
|
||||
from django.urls import path, reverse_lazy
|
||||
from django.views.generic import RedirectView
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
- url(r'^$', RedirectView.as_view(
|
||||
+ path('', RedirectView.as_view(
|
||||
url=reverse_lazy('hk_root'))),
|
||||
- url(r'^hyperkitty/', include('hyperkitty.urls')),
|
||||
+ path('hyperkitty/', include('hyperkitty.urls')),
|
||||
# url(r'^postorius/', include('postorius.urls')),
|
||||
- url(r'', include('django_mailman3.urls')),
|
||||
- url(r'^accounts/', include('allauth.urls')),
|
||||
+ path('', include('django_mailman3.urls')),
|
||||
+ path('accounts/', include('allauth.urls')),
|
||||
# Django admin
|
||||
- url(r'^admin/', admin.site.urls),
|
||||
+ path('admin/', admin.site.urls),
|
||||
]
|
||||
|
||||
|
||||
diff --git a/hyperkitty/tests/urls_test.py b/hyperkitty/tests/urls_test.py
|
||||
index 67d5497a..4e1c3af7 100644
|
||||
--- a/hyperkitty/tests/urls_test.py
|
||||
+++ b/hyperkitty/tests/urls_test.py
|
||||
@@ -21,11 +21,12 @@
|
||||
This file is the main URL config for a Django website including HyperKitty.
|
||||
"""
|
||||
|
||||
-from django.conf.urls import include, url
|
||||
+from django.conf.urls import include
|
||||
+from django.urls import path
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
- url(r'', include('hyperkitty.urls')),
|
||||
- url(r'', include('django_mailman3.urls')),
|
||||
- url(r'^accounts/', include('allauth.urls')),
|
||||
+ path('', include('hyperkitty.urls')),
|
||||
+ path('', include('django_mailman3.urls')),
|
||||
+ path('accounts/', include('allauth.urls')),
|
||||
]
|
||||
diff --git a/hyperkitty/urls.py b/hyperkitty/urls.py
|
||||
index a6782fbd..f5e45e1a 100644
|
||||
--- a/hyperkitty/urls.py
|
||||
+++ b/hyperkitty/urls.py
|
||||
@@ -21,8 +21,9 @@
|
||||
# Author: Aurelien Bompard <abompard@fedoraproject.org>
|
||||
#
|
||||
|
||||
-from django.conf.urls import include, url
|
||||
+from django.conf.urls import include
|
||||
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
|
||||
+from django.urls import path, re_path
|
||||
from django.views.generic.base import TemplateView
|
||||
|
||||
from hyperkitty.api import email as api_email
|
||||
@@ -41,146 +42,130 @@ from hyperkitty.views import (
|
||||
|
||||
# List archives and overview
|
||||
list_patterns = [
|
||||
- url(r'^(?P<year>\d{4})/(?P<month>\d\d?)/(?P<day>\d\d?)/$',
|
||||
+ re_path(r'^(?P<year>\d{4})/(?P<month>\d\d?)/(?P<day>\d\d?)/$',
|
||||
mlist.archives, name='hk_archives_with_day'),
|
||||
- url(r'^(?P<year>\d{4})/(?P<month>\d\d?)/$',
|
||||
+ re_path(r'^(?P<year>\d{4})/(?P<month>\d\d?)/$',
|
||||
mlist.archives, name='hk_archives_with_month'),
|
||||
- url(r'^latest$', mlist.archives, name='hk_archives_latest'),
|
||||
- url(r'^$', mlist.overview, name='hk_list_overview'),
|
||||
- url(r'^recent-activity$',
|
||||
- mlist.recent_activity, name='hk_list_recent_activity'),
|
||||
- url(r'^recent-threads$',
|
||||
- mlist.overview_recent_threads, name='hk_list_overview_recent_threads'),
|
||||
- url(r'^pop-threads$',
|
||||
- mlist.overview_pop_threads, name='hk_list_overview_pop_threads'),
|
||||
- url(r'^top-threads$',
|
||||
- mlist.overview_top_threads, name='hk_list_overview_top_threads'),
|
||||
- url(r'^favorites$',
|
||||
- mlist.overview_favorites, name='hk_list_overview_favorites'),
|
||||
- url(r'^posted-to$',
|
||||
- mlist.overview_posted_to, name='hk_list_overview_posted_to'),
|
||||
- url(r'^top-posters$',
|
||||
- mlist.overview_top_posters, name='hk_list_overview_top_posters'),
|
||||
- url(r'^export/(?P<filename>[^/]+)\.mbox.gz$',
|
||||
+ path('latest', mlist.archives, name='hk_archives_latest'),
|
||||
+ path('', mlist.overview, name='hk_list_overview'),
|
||||
+ path('recent-activity', mlist.recent_activity, name='hk_list_recent_activity'),
|
||||
+ path('recent-threads', mlist.overview_recent_threads, name='hk_list_overview_recent_threads'),
|
||||
+ path('pop-threads', mlist.overview_pop_threads, name='hk_list_overview_pop_threads'),
|
||||
+ path('top-threads', mlist.overview_top_threads, name='hk_list_overview_top_threads'),
|
||||
+ path('favorites', mlist.overview_favorites, name='hk_list_overview_favorites'),
|
||||
+ path('posted-to', mlist.overview_posted_to, name='hk_list_overview_posted_to'),
|
||||
+ path('top-posters', mlist.overview_top_posters, name='hk_list_overview_top_posters'),
|
||||
+ re_path(r'^export/(?P<filename>[^/]+)\.mbox.gz$',
|
||||
mlist.export_mbox, name='hk_list_export_mbox'),
|
||||
- url(r'delete/', mlist.delete, name='hk_list_delete'),
|
||||
- url(r'feed/', check_mlist_private(MailingListFeed()), name='hk_list_feed'),
|
||||
+ path('delete/', mlist.delete, name='hk_list_delete'),
|
||||
+ path('feed/', check_mlist_private(MailingListFeed()), name='hk_list_feed'),
|
||||
]
|
||||
|
||||
|
||||
# Messages
|
||||
message_patterns = [
|
||||
- url(r'^$', message.index, name='hk_message_index'),
|
||||
- url(r'^attachment/(?P<counter>\d+)/(?P<filename>.+)$',
|
||||
- message.attachment, name='hk_message_attachment'),
|
||||
- url(r'^vote$', message.vote, name='hk_message_vote'),
|
||||
- url(r'^reply$', message.reply, name='hk_message_reply'),
|
||||
- url(r'^delete$', message.delete, name='hk_message_delete'),
|
||||
+ path('', message.index, name='hk_message_index'),
|
||||
+ path('attachment/<int:counter>/<path:filename>', message.attachment, name='hk_message_attachment'),
|
||||
+ path('vote', message.vote, name='hk_message_vote'),
|
||||
+ path('reply', message.reply, name='hk_message_reply'),
|
||||
+ path('delete', message.delete, name='hk_message_delete'),
|
||||
]
|
||||
|
||||
|
||||
# Threads
|
||||
thread_patterns = [
|
||||
- url(r'^$', thread.thread_index, name='hk_thread'),
|
||||
- url(r'^replies$', thread.replies, name='hk_thread_replies'),
|
||||
- url(r'^tags$', thread.tags, name='hk_tags'),
|
||||
- url(r'^suggest-tags$', thread.suggest_tags, name='hk_suggest_tags'),
|
||||
- url(r'^favorite$', thread.favorite, name='hk_favorite'),
|
||||
- url(r'^category$', thread.set_category, name='hk_thread_set_category'),
|
||||
- url(r'^reattach$', thread.reattach, name='hk_thread_reattach'),
|
||||
- url(r'^reattach-suggest$',
|
||||
- thread.reattach_suggest, name='hk_thread_reattach_suggest'),
|
||||
- url(r'^delete$', message.delete, name='hk_thread_delete'),
|
||||
+ path('', thread.thread_index, name='hk_thread'),
|
||||
+ path('replies', thread.replies, name='hk_thread_replies'),
|
||||
+ path('tags', thread.tags, name='hk_tags'),
|
||||
+ path('suggest-tags', thread.suggest_tags, name='hk_suggest_tags'),
|
||||
+ path('favorite', thread.favorite, name='hk_favorite'),
|
||||
+ path('category', thread.set_category, name='hk_thread_set_category'),
|
||||
+ path('reattach', thread.reattach, name='hk_thread_reattach'),
|
||||
+ path('reattach-suggest', thread.reattach_suggest, name='hk_thread_reattach_suggest'),
|
||||
+ path('delete', message.delete, name='hk_thread_delete'),
|
||||
]
|
||||
|
||||
|
||||
# REST API
|
||||
api_list_patterns = [
|
||||
- url(r'^$',
|
||||
- api_mailinglist.MailingListDetail.as_view(), name="hk_api_mailinglist_detail"),
|
||||
- url(r'^threads/$',
|
||||
- api_thread.ThreadList.as_view(), name="hk_api_thread_list"),
|
||||
- url(r'^thread/(?P<thread_id>[^/]+)/$',
|
||||
- api_thread.ThreadDetail.as_view(), name="hk_api_thread_detail"),
|
||||
- url(r'^emails/$',
|
||||
- api_email.EmailList.as_view(), name="hk_api_email_list"),
|
||||
- url(r'^email/(?P<message_id_hash>.*)/$',
|
||||
+ path('', api_mailinglist.MailingListDetail.as_view(), name="hk_api_mailinglist_detail"),
|
||||
+ path('threads/', api_thread.ThreadList.as_view(), name="hk_api_thread_list"),
|
||||
+ path('thread/<str:thread_id>/', api_thread.ThreadDetail.as_view(), name="hk_api_thread_detail"),
|
||||
+ path('emails/', api_email.EmailList.as_view(), name="hk_api_email_list"),
|
||||
+ re_path(r'^email/(?P<message_id_hash>.*)/$',
|
||||
api_email.EmailDetail.as_view(), name="hk_api_email_detail"),
|
||||
- url(r'^thread/(?P<thread_id>[^/]+)/emails/$',
|
||||
- api_email.EmailList.as_view(), name="hk_api_thread_email_list"),
|
||||
+ path('thread/<str:thread_id>/emails/', api_email.EmailList.as_view(), name="hk_api_thread_email_list"),
|
||||
]
|
||||
api_patterns = [
|
||||
- url(r'^$', TemplateView.as_view(template_name="hyperkitty/api.html")),
|
||||
- url(r'^lists/$',
|
||||
- api_mailinglist.MailingListList.as_view(), name="hk_api_mailinglist_list"),
|
||||
- url(r'^list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/', include(api_list_patterns)),
|
||||
- url(r'^sender/(?P<mailman_id>[^/]+)/emails/$',
|
||||
- api_email.EmailListBySender.as_view(), name="hk_api_sender_email_list"),
|
||||
- url(r'^tags/$', api_tag.TagList.as_view(), name="hk_api_tag_list"),
|
||||
+ path('', TemplateView.as_view(template_name="hyperkitty/api.html")),
|
||||
+ path('lists/', api_mailinglist.MailingListList.as_view(), name="hk_api_mailinglist_list"),
|
||||
+ re_path(r'^list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/', include(api_list_patterns)),
|
||||
+ path('sender/<str:mailman_id>/emails/', api_email.EmailListBySender.as_view(), name="hk_api_sender_email_list"),
|
||||
+ path('tags/', api_tag.TagList.as_view(), name="hk_api_tag_list"),
|
||||
]
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
# Index
|
||||
- url(r'^$', index.index, name='hk_root'),
|
||||
- url(r'^find-list$', index.find_list, name='hk_find_list'),
|
||||
+ path('', index.index, name='hk_root'),
|
||||
+ path('find-list', index.find_list, name='hk_find_list'),
|
||||
|
||||
# User profile
|
||||
- url(r'^profile/', include([
|
||||
- url(r'^$', accounts.user_profile, name='hk_user_profile'),
|
||||
- url(r'^favorites$', accounts.favorites, name='hk_user_favorites'),
|
||||
- url(r'^last_views$', accounts.last_views, name='hk_user_last_views'),
|
||||
- url(r'^votes$', accounts.votes, name='hk_user_votes'),
|
||||
- url(r'^subscriptions$', accounts.subscriptions,
|
||||
+ path('profile/', include([
|
||||
+ path('', accounts.user_profile, name='hk_user_profile'),
|
||||
+ path('favorites', accounts.favorites, name='hk_user_favorites'),
|
||||
+ path('last_views', accounts.last_views, name='hk_user_last_views'),
|
||||
+ path('votes', accounts.votes, name='hk_user_votes'),
|
||||
+ path('subscriptions', accounts.subscriptions,
|
||||
name='hk_user_subscriptions'),
|
||||
])),
|
||||
|
||||
# Users
|
||||
- url(r'^users/$', users.users, name='hk_users_overview'),
|
||||
- url(r'^users/(?P<user_id>[^/]+)/$', accounts.public_profile, name='hk_public_user_profile'),
|
||||
- url(r'^users/(?P<user_id>[^/]+)/posts$', accounts.posts, name='hk_user_posts'),
|
||||
+ path('users/', users.users, name='hk_users_overview'),
|
||||
+ path('users/<str:user_id>/', accounts.public_profile, name='hk_public_user_profile'),
|
||||
+ path('users/<str:user_id>/posts', accounts.posts, name='hk_user_posts'),
|
||||
|
||||
# List archives and overview
|
||||
- url(r'^list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/', include(list_patterns)),
|
||||
+ re_path(r'^list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/', include(list_patterns)),
|
||||
|
||||
# Messages
|
||||
- url(r'^list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/message/'
|
||||
+ re_path(r'^list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/message/'
|
||||
r'(?P<message_id_hash>\w+)/', include(message_patterns)),
|
||||
- url(r'^list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/message/new$',
|
||||
+ re_path(r'^list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/message/new$',
|
||||
message.new_message, name='hk_message_new'),
|
||||
|
||||
# Threads
|
||||
- url(r'^list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/thread/(?P<threadid>\w+)/',
|
||||
+ re_path(r'^list/(?P<mlist_fqdn>[^/@]+@[^/@]+)/thread/(?P<threadid>\w+)/',
|
||||
include(thread_patterns)),
|
||||
|
||||
# Search
|
||||
- url(r'^search$', search.search, name='hk_search'),
|
||||
+ path('search', search.search, name='hk_search'),
|
||||
|
||||
# Categories and Tags
|
||||
- url(r'^categories/$', categories.categories, name='hk_categories_overview'),
|
||||
- url(r'^tags/$', tags.tags, name='hk_tags_overview'),
|
||||
+ path('categories/', categories.categories, name='hk_categories_overview'),
|
||||
+ path('tags/', tags.tags, name='hk_tags_overview'),
|
||||
|
||||
# Mailman archiver API
|
||||
- url(r'^api/mailman/urls$', mailman.urls, name='hk_mailman_urls'),
|
||||
- url(r'^api/mailman/archive$', mailman.archive, name='hk_mailman_archive'),
|
||||
+ path('api/mailman/urls', mailman.urls, name='hk_mailman_urls'),
|
||||
+ path('api/mailman/archive', mailman.archive, name='hk_mailman_archive'),
|
||||
|
||||
# REST API
|
||||
- url(r'^api/', include(api_patterns)),
|
||||
+ path('api/', include(api_patterns)),
|
||||
|
||||
# Mailman 2.X compatibility
|
||||
- url(r'^listinfo/?$', compat.summary),
|
||||
- url(r'^listinfo/(?P<list_name>[^/]+)/?$', compat.summary),
|
||||
- url(r'^pipermail/(?P<list_name>[^/]+)/?$', compat.summary),
|
||||
- url(r'^pipermail/(?P<list_name>[^/]+)/(?P<year>\d\d\d\d)-(?P<month_name>\w+)/?$', compat.arch_month),
|
||||
- url(r'^pipermail/(?P<list_name>[^/]+)/(?P<year>\d\d\d\d)-(?P<month_name>\w+)/(?P<summary_type>[a-z]+)\.html$', compat.arch_month),
|
||||
- url(r'^pipermail/(?P<list_name>[^/]+)/(?P<year>\d\d\d\d)-(?P<month_name>\w+)\.txt.gz', compat.arch_month_mbox),
|
||||
+ re_path(r'^listinfo/?$', compat.summary),
|
||||
+ re_path(r'^listinfo/(?P<list_name>[^/]+)/?$', compat.summary),
|
||||
+ re_path(r'^pipermail/(?P<list_name>[^/]+)/?$', compat.summary),
|
||||
+ re_path(r'^pipermail/(?P<list_name>[^/]+)/(?P<year>\d\d\d\d)-(?P<month_name>\w+)/?$', compat.arch_month),
|
||||
+ re_path(r'^pipermail/(?P<list_name>[^/]+)/(?P<year>\d\d\d\d)-(?P<month_name>\w+)/(?P<summary_type>[a-z]+)\.html$', compat.arch_month),
|
||||
+ re_path(r'^pipermail/(?P<list_name>[^/]+)/(?P<year>\d\d\d\d)-(?P<month_name>\w+)\.txt.gz', compat.arch_month_mbox),
|
||||
#url(r'^pipermail/(?P<list_name>[^/]+)/(?P<year>\d\d\d\d)-(?P<month_name>\w+)/(?P<msg_num>\d+)\.html$', compat.message),
|
||||
- url(r'^list/(?P<list_name>[^@]+)@[^/]+/(?P<year>\d\d\d\d)-(?P<month_name>\w+)/?$', compat.arch_month),
|
||||
+ re_path(r'^list/(?P<list_name>[^@]+)@[^/]+/(?P<year>\d\d\d\d)-(?P<month_name>\w+)/?$', compat.arch_month),
|
||||
#url(r'^list/(?P<list_name>[^@]+)@[^/]+/(?P<year>\d\d\d\d)-(?P<month_name>\w+)/(?P<msg_num>\d+)\.html$', compat.message),
|
||||
|
||||
# URL compatibility with previous versions
|
||||
- url(r'^list/(?P<list_id>[^@/]+)/', compat.redirect_list_id),
|
||||
- url(r'^lists/', compat.redirect_lists),
|
||||
+ re_path(r'^list/(?P<list_id>[^@/]+)/', compat.redirect_list_id),
|
||||
+ path('lists/', compat.redirect_lists),
|
||||
|
||||
]
|
||||
#) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
|
||||
diff --git a/hyperkitty/views/mailman.py b/hyperkitty/views/mailman.py
|
||||
index 285e4cd2..9b6dfb7e 100644
|
||||
--- a/hyperkitty/views/mailman.py
|
||||
+++ b/hyperkitty/views/mailman.py
|
||||
@@ -27,13 +27,12 @@ from email import message_from_binary_file
|
||||
from email.message import EmailMessage
|
||||
from email.policy import default
|
||||
from functools import wraps
|
||||
-from urllib.parse import urljoin
|
||||
+from urllib.parse import unquote, urljoin
|
||||
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ImproperlyConfigured, SuspiciousOperation
|
||||
from django.http import HttpResponse
|
||||
from django.urls import reverse
|
||||
-from django.utils.http import urlunquote
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
from django.views.decorators.http import require_POST
|
||||
|
||||
@@ -134,7 +133,7 @@ def _get_url(mlist_fqdn, msg_id=None):
|
||||
msg_hash = get_message_id_hash(msg_id.strip().strip("<>"))
|
||||
url = reverse('hk_message_index', kwargs={
|
||||
"mlist_fqdn": mlist_fqdn, "message_id_hash": msg_hash})
|
||||
- relative_url = urlunquote(url)
|
||||
+ relative_url = unquote(url)
|
||||
mail_domain = mlist_fqdn.split("@")[1]
|
||||
try:
|
||||
domain = MailDomain.objects.get(
|
||||
diff --git a/setup.py b/setup.py
|
||||
index c16294b0..827cef0b 100755
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -37,7 +37,7 @@ with open('hyperkitty/__init__.py') as fp:
|
||||
|
||||
# Requirements
|
||||
REQUIRES = [
|
||||
- "django>=2.2,<3.3",
|
||||
+ "django>=2.2,<4.1",
|
||||
"django_mailman3>=1.3.7",
|
||||
"django-gravatar2>=1.0.6",
|
||||
"djangorestframework>=3.0.0",
|
@@ -1,55 +0,0 @@
|
||||
From 2c3c189c9aacef3f54de2ae0f653aa13c6167093 Mon Sep 17 00:00:00 2001
|
||||
From: David Runge <dave@sleepmap.de>
|
||||
Date: Sun, 5 Dec 2021 12:39:01 +0100
|
||||
Subject: [PATCH 1/3] Fix mistune imports for mistune >= 2.0.0
|
||||
|
||||
hyperkitty/lib/renderer.py:
|
||||
With mistune 2.0.0 the `escape_url()` and `escape_html()` are moved to
|
||||
mistune.util.
|
||||
---
|
||||
hyperkitty/lib/renderer.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/hyperkitty/lib/renderer.py b/hyperkitty/lib/renderer.py
|
||||
index cf54e7c0..96f026db 100644
|
||||
--- a/hyperkitty/lib/renderer.py
|
||||
+++ b/hyperkitty/lib/renderer.py
|
||||
@@ -4,7 +4,7 @@ from django.conf import settings
|
||||
|
||||
import mistune
|
||||
from mistune.plugins.extra import plugin_url
|
||||
-from mistune.scanner import escape_html, escape_url
|
||||
+from mistune.util import escape_html, escape_url
|
||||
|
||||
|
||||
class MyRenderer(mistune.HTMLRenderer):
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 0807a57860c57ebfe0542cc9d58fedf1ed5582d5 Mon Sep 17 00:00:00 2001
|
||||
From: David Runge <dave@sleepmap.de>
|
||||
Date: Sun, 5 Dec 2021 12:40:10 +0100
|
||||
Subject: [PATCH 2/3] Require mistune >= 2.0.0
|
||||
|
||||
setup.py:
|
||||
Require mistune >= 2.0.0 to rely on a stable mistune release.
|
||||
---
|
||||
setup.py | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/setup.py b/setup.py
|
||||
index 6cc7636e..c16294b0 100755
|
||||
--- a/setup.py
|
||||
+++ b/setup.py
|
||||
@@ -45,7 +45,7 @@ REQUIRES = [
|
||||
"pytz>=2012",
|
||||
"django-compressor>=1.3",
|
||||
"mailmanclient>=3.3.3",
|
||||
- "mistune>=2.0.0rc1",
|
||||
+ "mistune>=2.0.0",
|
||||
"python-dateutil >= 2.0",
|
||||
"networkx>=2.0",
|
||||
"django-haystack>=2.8.0",
|
||||
--
|
||||
GitLab
|
@@ -1,102 +0,0 @@
|
||||
From 2cda594bc0e7af5c0c24dcc3467ecea04be89f9e Mon Sep 17 00:00:00 2001
|
||||
From: David Runge <dave@sleepmap.de>
|
||||
Date: Tue, 7 Dec 2021 22:46:17 +0100
|
||||
Subject: [PATCH 1/4] Ensure that date headers are valid
|
||||
|
||||
hyperkitty/management/commands/hyperkitty_import.py:
|
||||
Change `DbImporter._get_date()` to return None if a `Date:` header is
|
||||
retrieved, that is not valid (its `datetime` attribute is set to
|
||||
`None`).
|
||||
|
||||
The email module has been reworked with python 3.10 to set the `Date:`
|
||||
header string representation even if it is not valid, but ensures, that
|
||||
its `datetime` attribute is set to None in that case:
|
||||
https://github.com/python/cpython/commit/303aac8c56609290e122eecc14c038e9b1e4174a
|
||||
|
||||
hyperkitty/tests/commands/test_import.py:
|
||||
Change `test_ungettable_date()` to rely on differing error messages in
|
||||
the output, depending on python version. With python 3.10 the logged
|
||||
error message has changed.
|
||||
---
|
||||
hyperkitty/management/commands/hyperkitty_import.py | 9 ++++++++-
|
||||
hyperkitty/tests/commands/test_import.py | 7 ++++++-
|
||||
2 files changed, 14 insertions(+), 2 deletions(-)
|
||||
|
||||
Index: HyperKitty-1.3.5/hyperkitty/management/commands/hyperkitty_import.py
|
||||
===================================================================
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/management/commands/hyperkitty_import.py
|
||||
+++ HyperKitty-1.3.5/hyperkitty/management/commands/hyperkitty_import.py
|
||||
@@ -131,7 +131,14 @@ class DbImporter(object):
|
||||
def _get_date(self, message, header, report_name):
|
||||
try:
|
||||
date = message.get(header)
|
||||
- except (TypeError, ValueError) as e:
|
||||
+ if date and not date.datetime:
|
||||
+ if self.verbose:
|
||||
+ self.stderr.write(
|
||||
+ "Bad datetime in {} header in message {}{}.".format(
|
||||
+ header, unquote(message.get("message-id", 'n/a')),
|
||||
+ report_name))
|
||||
+ return None
|
||||
+ except (AttributeError, TypeError, ValueError) as e:
|
||||
if self.verbose:
|
||||
self.stderr.write(
|
||||
"Can't get {} header in message {}{}: {}.".format(
|
||||
Index: HyperKitty-1.3.5/hyperkitty/tests/commands/test_import.py
|
||||
===================================================================
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/commands/test_import.py
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/commands/test_import.py
|
||||
@@ -225,7 +225,12 @@ msg1
|
||||
# The message should be archived.
|
||||
self.assertEqual(Email.objects.count(), 1)
|
||||
# But there should be an error message.
|
||||
- self.assertIn("Can't get date header in message", output.getvalue())
|
||||
+ if sys.hexversion < 0x30a0000:
|
||||
+ self.assertIn("Can't get date header in message",
|
||||
+ output.getvalue())
|
||||
+ else:
|
||||
+ self.assertIn("Bad datetime in date header in message",
|
||||
+ output.getvalue())
|
||||
|
||||
def test_no_date_but_resent_date(self):
|
||||
# If there's no Dete: header, fall back to Resent-Date:.
|
||||
Index: HyperKitty-1.3.5/tox.ini
|
||||
===================================================================
|
||||
--- HyperKitty-1.3.5.orig/tox.ini
|
||||
+++ HyperKitty-1.3.5/tox.ini
|
||||
@@ -1,5 +1,5 @@
|
||||
[tox]
|
||||
-envlist = py{36,37,38,39}-django{22,30,31,32},docs,qa
|
||||
+envlist = py{36,37,38,39,310}-django{22,30,31,32},docs,qa
|
||||
|
||||
|
||||
[testenv]
|
||||
From 3efe7507944dbdbfcfa4c182d332528712476b28 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Sapiro <mark@msapiro.net>
|
||||
Date: Thu, 16 Jun 2022 13:40:28 -0700
|
||||
Subject: [PATCH] Skip test_import.test_unconvertable_message where bpo-43323
|
||||
is fixed.
|
||||
|
||||
---
|
||||
hyperkitty/tests/commands/test_import.py | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/hyperkitty/tests/commands/test_import.py b/hyperkitty/tests/commands/test_import.py
|
||||
index 5284e0a8..c9c288bd 100644
|
||||
--- a/hyperkitty/tests/commands/test_import.py
|
||||
+++ b/hyperkitty/tests/commands/test_import.py
|
||||
@@ -364,6 +364,11 @@ msg1
|
||||
|
||||
def test_unconvertable_message(self):
|
||||
# This message can't be converted to an email.message.EmailMessage.
|
||||
+ # This fails with Python 3.9 >=3.9.13 and versions >= 3.10.5 because
|
||||
+ # https://bugs.python.org/issue43323 is fixed.
|
||||
+ if ((sys.hexversion >= 0x3090df0 and sys.hexversion < 0x30a0000) or
|
||||
+ sys.hexversion >= 0x30a05f0):
|
||||
+ raise SkipTest
|
||||
mbox = mailbox.mbox(os.path.join(self.tmpdir, "test.mbox"))
|
||||
# We have to do it this way to see the exception.
|
||||
with open(get_test_file("unconvertable_message.txt"), "rb") as em_file:
|
||||
--
|
||||
GitLab
|
||||
|
@@ -1,24 +0,0 @@
|
||||
From 3edc0c58b8dea3b0bdccd77c0794ada28d1c6f61 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Sapiro <mark@msapiro.net>
|
||||
Date: Sun, 5 Dec 2021 00:32:33 +0000
|
||||
Subject: [PATCH] Set Q_CLUSTER retry > timeout.
|
||||
|
||||
---
|
||||
example_project/settings.py | 1 +
|
||||
1 files changed, 1 insertions(+)
|
||||
|
||||
diff --git a/example_project/settings.py b/example_project/settings.py
|
||||
index a6e90441..5aca0186 100644
|
||||
--- a/example_project/settings.py
|
||||
+++ b/example_project/settings.py
|
||||
@@ -368,6 +368,7 @@ REST_FRAMEWORK = {
|
||||
#
|
||||
Q_CLUSTER = {
|
||||
'timeout': 300,
|
||||
+ 'retry': 360,
|
||||
'save_limit': 100,
|
||||
'orm': 'default',
|
||||
}
|
||||
--
|
||||
GitLab
|
||||
|
@@ -1,8 +1,8 @@
|
||||
Index: HyperKitty-1.3.5/example_project/settings.py
|
||||
Index: HyperKitty-1.3.6/example_project/settings.py
|
||||
===================================================================
|
||||
--- HyperKitty-1.3.5.orig/example_project/settings.py 2021-10-12 23:40:25.000000000 +0200
|
||||
+++ HyperKitty-1.3.5/example_project/settings.py 2021-11-17 09:36:12.809720361 +0100
|
||||
@@ -135,7 +135,7 @@ DATABASES = {
|
||||
--- HyperKitty-1.3.6.orig/example_project/settings.py 2022-05-19 03:16:49.000000000 +0200
|
||||
+++ HyperKitty-1.3.6/example_project/settings.py 2022-11-21 10:36:26.670671874 +0100
|
||||
@@ -134,7 +134,7 @@ DATABASES = {
|
||||
# Use 'sqlite3', 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
# DB name or path to database file if using sqlite3.
|
||||
@@ -11,7 +11,7 @@ Index: HyperKitty-1.3.5/example_project/settings.py
|
||||
# The following settings are not used with sqlite3:
|
||||
'USER': 'hyperkitty',
|
||||
'PASSWORD': 'hkpass',
|
||||
@@ -203,7 +203,7 @@ USE_TZ = True
|
||||
@@ -205,7 +205,7 @@ USE_TZ = True
|
||||
# Don't put anything in this directory yourself; store your static files
|
||||
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
|
||||
# Example: "/var/www/example.com/static/"
|
||||
@@ -20,7 +20,7 @@ Index: HyperKitty-1.3.5/example_project/settings.py
|
||||
|
||||
# URL prefix for static files.
|
||||
# Example: "http://example.com/static/", "http://static.example.com/"
|
||||
@@ -396,7 +396,7 @@ LOGGING = {
|
||||
@@ -386,7 +386,7 @@ LOGGING = {
|
||||
'level': 'INFO',
|
||||
#'class': 'logging.handlers.RotatingFileHandler',
|
||||
'class': 'logging.handlers.WatchedFileHandler',
|
||||
|
@@ -1,192 +0,0 @@
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/commands/test_import.py HyperKitty-1.3.5/hyperkitty/tests/commands/test_import.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/commands/test_import.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/commands/test_import.py 2022-05-26 11:03:59.326617643 +0200
|
||||
@@ -15,7 +15,7 @@ from django.core.management import call_
|
||||
from django.db import DEFAULT_DB_ALIAS
|
||||
from django.utils.timezone import utc
|
||||
|
||||
-from mock import Mock, patch
|
||||
+from unittest.mock import Mock, patch
|
||||
|
||||
from hyperkitty.lib.incoming import add_to_list
|
||||
from hyperkitty.management.commands.hyperkitty_import import Command
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/commands/test_mailman_sync.py HyperKitty-1.3.5/hyperkitty/tests/commands/test_mailman_sync.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/commands/test_mailman_sync.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/commands/test_mailman_sync.py 2022-05-26 11:03:59.326617643 +0200
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
from django.core.management import call_command
|
||||
|
||||
-from mock import patch
|
||||
+from unittest.mock import patch
|
||||
|
||||
from hyperkitty.tests.utils import TestCase
|
||||
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/lib/test_incoming.py HyperKitty-1.3.5/hyperkitty/tests/lib/test_incoming.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/lib/test_incoming.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/lib/test_incoming.py 2022-05-26 11:03:59.326617643 +0200
|
||||
@@ -30,7 +30,7 @@ from django.core.cache import cache
|
||||
from django.db import DataError, IntegrityError
|
||||
from django.utils import timezone
|
||||
|
||||
-import mock
|
||||
+from unittest import mock
|
||||
|
||||
from hyperkitty.lib.incoming import DuplicateMessage, add_to_list
|
||||
from hyperkitty.lib.utils import get_message_id_hash
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/lib/test_mailman.py HyperKitty-1.3.5/hyperkitty/tests/lib/test_mailman.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/lib/test_mailman.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/lib/test_mailman.py 2022-05-26 11:03:59.326617643 +0200
|
||||
@@ -26,7 +26,7 @@ from django.contrib.auth.models import U
|
||||
from django.core.cache import cache
|
||||
|
||||
from django_mailman3.tests.utils import FakeMMList, FakeMMPage
|
||||
-from mock import Mock, patch
|
||||
+from unittest.mock import Mock, patch
|
||||
|
||||
from hyperkitty.lib import mailman
|
||||
from hyperkitty.models import MailingList, Sender
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/lib/test_posting.py HyperKitty-1.3.5/hyperkitty/tests/lib/test_posting.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/lib/test_posting.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/lib/test_posting.py 2022-05-26 11:03:59.326617643 +0200
|
||||
@@ -28,7 +28,7 @@ from django.core import mail
|
||||
from django.test.client import RequestFactory
|
||||
|
||||
from django_mailman3.tests.utils import FakeMMList, FakeMMMember
|
||||
-from mock import Mock, patch
|
||||
+from unittest.mock import Mock, patch
|
||||
|
||||
from hyperkitty.lib import posting
|
||||
from hyperkitty.models import MailingList
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/_test_caching.py HyperKitty-1.3.5/hyperkitty/tests/_test_caching.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/_test_caching.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/_test_caching.py 2022-05-26 11:03:59.326617643 +0200
|
||||
@@ -8,7 +8,7 @@ from urllib.error import HTTPError
|
||||
|
||||
from mailman.email.message import Message
|
||||
from mailman.interfaces.archiver import ArchivePolicy
|
||||
-from mock import Mock
|
||||
+from unittest.mock import Mock
|
||||
|
||||
|
||||
#import kittystore.utils
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/test_signals.py HyperKitty-1.3.5/hyperkitty/tests/test_signals.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/test_signals.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/test_signals.py 2022-05-26 11:03:59.326617643 +0200
|
||||
@@ -21,7 +21,7 @@
|
||||
#
|
||||
|
||||
from django_mailman3.signals import mailinglist_created, mailinglist_modified
|
||||
-from mock import patch
|
||||
+from unittest.mock import patch
|
||||
|
||||
from hyperkitty.tests.utils import TestCase
|
||||
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/test_tasks.py HyperKitty-1.3.5/hyperkitty/tests/test_tasks.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/test_tasks.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/test_tasks.py 2022-05-26 11:03:59.330617665 +0200
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
from email.message import EmailMessage
|
||||
|
||||
-from mock import patch
|
||||
+from unittest.mock import patch
|
||||
|
||||
from hyperkitty import tasks
|
||||
from hyperkitty.lib.incoming import add_to_list
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/utils.py HyperKitty-1.3.5/hyperkitty/tests/utils.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/utils.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/utils.py 2022-05-26 11:03:59.330617665 +0200
|
||||
@@ -37,7 +37,7 @@ from django.test import TestCase as Djan
|
||||
from django.test import TransactionTestCase
|
||||
|
||||
import mailmanclient
|
||||
-from mock import Mock, patch
|
||||
+from unittest.mock import Mock, patch
|
||||
|
||||
|
||||
def setup_logging(tmpdir):
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_accounts.py HyperKitty-1.3.5/hyperkitty/tests/views/test_accounts.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_accounts.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/views/test_accounts.py 2022-05-26 11:03:59.330617665 +0200
|
||||
@@ -31,7 +31,7 @@ from django.contrib.auth.models import U
|
||||
|
||||
from allauth.account.models import EmailAddress
|
||||
from django_mailman3.tests.utils import FakeMMList, FakeMMMember
|
||||
-from mock import Mock
|
||||
+from unittest.mock import Mock
|
||||
|
||||
from hyperkitty.lib.incoming import add_to_list
|
||||
from hyperkitty.lib.utils import get_message_id_hash
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_archives.py HyperKitty-1.3.5/hyperkitty/tests/views/test_archives.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_archives.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/views/test_archives.py 2022-05-26 11:03:59.330617665 +0200
|
||||
@@ -34,7 +34,7 @@ from django.core.cache import cache
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from django_mailman3.tests.utils import FakeMMList, FakeMMMember
|
||||
-from mock import Mock
|
||||
+from unittest.mock import Mock
|
||||
|
||||
from hyperkitty.lib.incoming import add_to_list
|
||||
from hyperkitty.models import (
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_index.py HyperKitty-1.3.5/hyperkitty/tests/views/test_index.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_index.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/views/test_index.py 2022-05-26 11:03:59.330617665 +0200
|
||||
@@ -31,7 +31,7 @@ from django.test import override_setting
|
||||
|
||||
from django_mailman3.models import MailDomain
|
||||
from django_mailman3.tests.utils import FakeMMList, FakeMMMember
|
||||
-from mock import Mock
|
||||
+from unittest.mock import Mock
|
||||
|
||||
from hyperkitty.lib.incoming import add_to_list
|
||||
from hyperkitty.models import ArchivePolicy, MailingList
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_mailman.py HyperKitty-1.3.5/hyperkitty/tests/views/test_mailman.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_mailman.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/views/test_mailman.py 2022-05-26 11:03:59.330617665 +0200
|
||||
@@ -27,7 +27,7 @@ from io import BytesIO
|
||||
from django.conf import settings
|
||||
from django.contrib.sites.models import Site
|
||||
|
||||
-import mock
|
||||
+from unittest import mock
|
||||
from django_mailman3.models import MailDomain
|
||||
|
||||
from hyperkitty.models.email import Email
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_message.py HyperKitty-1.3.5/hyperkitty/tests/views/test_message.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_message.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/views/test_message.py 2022-05-26 11:03:59.330617665 +0200
|
||||
@@ -36,7 +36,7 @@ from django.utils import timezone
|
||||
from allauth.account.models import EmailAddress
|
||||
from django_gravatar.helpers import get_gravatar_url
|
||||
from django_mailman3.tests.utils import get_flash_messages
|
||||
-from mock import Mock, patch
|
||||
+from unittest.mock import Mock, patch
|
||||
|
||||
from hyperkitty.lib.incoming import add_to_list
|
||||
from hyperkitty.lib.utils import get_message_id_hash
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_search.py HyperKitty-1.3.5/hyperkitty/tests/views/test_search.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_search.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/views/test_search.py 2022-05-26 11:03:59.330617665 +0200
|
||||
@@ -26,7 +26,7 @@ from django.contrib.auth.models import U
|
||||
|
||||
from django_mailman3.tests.utils import FakeMMList, FakeMMMember
|
||||
from haystack import DEFAULT_ALIAS
|
||||
-from mock import Mock, patch
|
||||
+from unittest.mock import Mock, patch
|
||||
|
||||
from hyperkitty.lib.incoming import add_to_list
|
||||
from hyperkitty.models import ArchivePolicy, MailingList
|
||||
diff -upr HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_thread.py HyperKitty-1.3.5/hyperkitty/tests/views/test_thread.py
|
||||
--- HyperKitty-1.3.5.orig/hyperkitty/tests/views/test_thread.py 2022-05-26 11:03:59.294617461 +0200
|
||||
+++ HyperKitty-1.3.5/hyperkitty/tests/views/test_thread.py 2022-05-26 11:03:59.330617665 +0200
|
||||
@@ -31,7 +31,7 @@ from django.test import override_setting
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
from django_mailman3.tests.utils import get_flash_messages
|
||||
-from mock import patch
|
||||
+from unittest.mock import patch
|
||||
|
||||
from hyperkitty.lib.incoming import add_to_list
|
||||
from hyperkitty.models import Email, MailingList, Tag, Tagging, Thread
|
@@ -1,8 +1,59 @@
|
||||
-------------------------------------------------------------------
|
||||
Sun Jun 18 16:12:47 UTC 2023 - Andreas Schneider <asn@cryptomilk.org>
|
||||
|
||||
- Update to version 1.3.7
|
||||
* ``hyperkitty_import`` will now import messages to a list with archiving
|
||||
disabled. (Closes #451)
|
||||
* Add support for Python 3.11.
|
||||
- Use sle15_python_module_pythons
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Apr 5 09:44:44 UTC 2023 - Andreas Schneider <asn@cryptomilk.org>
|
||||
|
||||
- Add missing requires for sassc used by manage.py
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Mon Nov 21 09:34:53 UTC 2022 - Andreas Schneider <asn@cryptomilk.org>
|
||||
|
||||
- Update to version 1.3.6
|
||||
* Fixed an issue in hyperkitty_import with an empty Message-ID. (Closes #396)
|
||||
* Set Q_CLUSTER retry > timeout in example_project. (Closes #402)
|
||||
* Set DEFAULT_AUTO_FIELD to silence errors with Django >= 3.2.
|
||||
* Require mistune >= 2.0.0 and fix a problem with importing from it. (Closes
|
||||
#395)
|
||||
* Adapt parsing of emails to be compatible with python 3.10. (Closes #401)
|
||||
* Add gitlab-ci integration for python 3.10.
|
||||
* Skip lists with private archives in the find list search. (Closes #237)
|
||||
* Add a new setting HYPERKITTY_MBOX_EXPORT which, when set to false, removes
|
||||
the :guilabel:`Download` button and disables the export view. ( Fixes #386)
|
||||
* Return 400 instead of 500 when the sort mode is invalid. (Fixes #270)
|
||||
* Allow HyperKitty to find attachments in either the database or the
|
||||
HYPERKITTY_ATTACHMENT_FOLDER. (Closes #213)
|
||||
* Implemented a new attachments_to_file management command to move attachment
|
||||
content to the file system after setting HYPERKITTY_ATTACHMENT_FOLDER.
|
||||
(Closes #413)
|
||||
* Handle exception when a banned address tries to post. (Fixes #325)
|
||||
* Add an index on the 'name' column (fqdn)for the MailingList table since it
|
||||
is most frequently used to query the MailingList object.
|
||||
* Add the ability to view a thread without Javascript enabled. This uses the
|
||||
same mechanism we use with bot-detection and rendering of the entire page
|
||||
at once, which will be slow to load but allow reading. (See #422)
|
||||
* Improve the performance of the thread view for logged-in users by
|
||||
optimizing the total database calls made. (See !409)
|
||||
* Add support for Django <= 4.1
|
||||
* Remove support for Django < 3.2
|
||||
* Remove support for Python 3.6
|
||||
* Fix tests to be compatible with Python 3.10
|
||||
* Replace use of mock with unittest.mock in all tests. (Closes #429)
|
||||
* The check for writability of HYPERKITTY_ATTACHMENT_FOLDER when set has been
|
||||
improved to avoid a potential race condition. (Closes #389)
|
||||
- Run complete testsuite with pytest
|
||||
- Removed hyperkitty-django4.patch
|
||||
- Removed hyperkitty-fix-mistune-2.0-imports.patch
|
||||
- Removed python-HyperKitty-no-mock.patch
|
||||
- Removed hyperkitty-fix-qcluster-timeout.patch
|
||||
- Removed hyperkitty-fix-py310-tests.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Thu Oct 6 12:07:43 UTC 2022 - Daniel Garcia <daniel.garcia@suse.com>
|
||||
|
||||
|
@@ -38,15 +38,15 @@
|
||||
%define __mypython %{__python39}
|
||||
%define mypython_sitelib %{python39_sitelib}
|
||||
%else
|
||||
%{?!python_module:%define python_module() python3-%{**}}
|
||||
%define pythons python3
|
||||
%{?sle15_python_module_pythons}
|
||||
%define pythons python311
|
||||
%define mypython python3
|
||||
%define __mypython %{__python3}
|
||||
%define mypython_sitelib %{python3_sitelib}
|
||||
%endif
|
||||
|
||||
Name: python-HyperKitty
|
||||
Version: 1.3.5
|
||||
Version: 1.3.7
|
||||
Release: 0
|
||||
Summary: A web interface to access GNU Mailman v3 archives
|
||||
License: GPL-3.0-only
|
||||
@@ -67,21 +67,8 @@ Source30: README.SUSE.md
|
||||
# PATCH-FIX-OPENSUSE hyperkitty-settings.patch mcepl@suse.com
|
||||
# hard-code locations of configuration files
|
||||
Patch0: hyperkitty-settings.patch
|
||||
# PATCH-FIX-UPSTREAM hyperkitty-fix-mistune-2.0-imports.patch gl#mailman/hyperkitty#379 mcepl@suse.com
|
||||
# Two elements moved in mistune 2.0
|
||||
Patch1: hyperkitty-fix-mistune-2.0-imports.patch
|
||||
# PATCH-FIX-UPSTREAM hyperkitty-django4.patch gl#mailman/hyperkitty#384 jayvdb@gmail.com
|
||||
Patch2: hyperkitty-django4.patch
|
||||
# https://gitlab.com/mailman/hyperkitty/-/issues/429
|
||||
Patch3: python-HyperKitty-no-mock.patch
|
||||
# https://gitlab.com/mailman/hyperkitty/-/commit/3edc0c58b8dea3b0bdccd77c0794ada28d1c6f61
|
||||
Patch4: hyperkitty-fix-qcluster-timeout.patch
|
||||
# https://gitlab.com/mailman/hyperkitty/-/merge_requests/381 + https://gitlab.com/mailman/hyperkitty/-/merge_requests/449
|
||||
Patch5: hyperkitty-fix-py310-tests.patch
|
||||
# PATCH-FIX-UPSTREAM fix-django41.patch gl#mailman/hyperkitty#467
|
||||
Patch6: fix-django41.patch
|
||||
# PATCH-FIX-UPSTREAM fix-elasticsearch8.patch gl#mailman/hyperkitty#468
|
||||
Patch7: fix-elasticsearch8.patch
|
||||
Patch1: fix-elasticsearch8.patch
|
||||
#
|
||||
BuildRequires: %{python_module django-debug-toolbar >= 2.2}
|
||||
BuildRequires: %{python_module isort}
|
||||
@@ -108,7 +95,7 @@ BuildRequires: %{python_module django-compressor >= 1.3}
|
||||
BuildRequires: %{python_module django-extensions >= 1.3.7}
|
||||
BuildRequires: %{python_module django-gravatar2 >= 1.0.6}
|
||||
BuildRequires: %{python_module django-haystack >= 2.8.0}
|
||||
BuildRequires: %{python_module django-mailman3 >= 1.3.7}
|
||||
BuildRequires: %{python_module django-mailman3 >= 1.3.8}
|
||||
BuildRequires: %{python_module django-q >= 1.3.9}
|
||||
BuildRequires: %{python_module djangorestframework >= 3.0.0}
|
||||
BuildRequires: %{python_module elasticsearch}
|
||||
@@ -191,18 +178,11 @@ This package holds the uwsgi configuration.
|
||||
cp %{SOURCE30} .
|
||||
touch settings_local.py
|
||||
|
||||
%patch2 -p1
|
||||
|
||||
# Copy example_project to just build the static files
|
||||
rsync -a example_project/* build_static_files
|
||||
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
|
||||
%build
|
||||
sed -i 's|^#!/usr/bin/env.*|#!%{__mypython}|' \
|
||||
@@ -307,9 +287,9 @@ for job in \
|
||||
done
|
||||
|
||||
%check
|
||||
export DJANGO_SETTINGS_MODULE="hyperkitty.tests.settings_test"
|
||||
export PYTHONPATH=$(pwd)
|
||||
%python_exec example_project/manage.py test
|
||||
export PYTHONPATH="$(pwd)"
|
||||
export LANG=C.UTF-8
|
||||
%pytest
|
||||
|
||||
%pre -n %{hyperkitty_pkgname}-web
|
||||
/usr/sbin/groupadd -r hyperkitty &>/dev/null || :
|
||||
@@ -364,7 +344,6 @@ fi
|
||||
%{hyperkitty_basedir}/static/debug_toolbar
|
||||
%{hyperkitty_basedir}/static/django-mailman3
|
||||
%{hyperkitty_basedir}/static/django_extensions
|
||||
%{hyperkitty_basedir}/static/facebook
|
||||
%{hyperkitty_basedir}/static/hyperkitty
|
||||
%{hyperkitty_basedir}/static/rest_framework
|
||||
|
||||
|
Reference in New Issue
Block a user