diff --git a/HyperKitty-1.3.5.tar.gz b/HyperKitty-1.3.5.tar.gz deleted file mode 100644 index c24ebef..0000000 --- a/HyperKitty-1.3.5.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8269222bca481dfb9b6dbc4d766fc3e8bda8ef6d85a6dc5880835874850e9f86 -size 2488492 diff --git a/HyperKitty-1.3.7.tar.gz b/HyperKitty-1.3.7.tar.gz new file mode 100644 index 0000000..0a3d82f --- /dev/null +++ b/HyperKitty-1.3.7.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4d74aca3ec30546741ca62339ece72392e298f511d0a89e69bcedbfcdc8102cb +size 2691781 diff --git a/fix-django41.patch b/fix-django41.patch deleted file mode 100644 index 7972f15..0000000 --- a/fix-django41.patch +++ /dev/null @@ -1,67 +0,0 @@ -From 94194e0f5eeacf1be2a88a28bfed62dbc6c5d5a2 Mon Sep 17 00:00:00 2001 -From: Daniel Garcia Moreno -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="\n ", - 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" ') - --- -2.37.3 - diff --git a/hyperkitty-django4.patch b/hyperkitty-django4.patch deleted file mode 100644 index 4c8eb96..0000000 --- a/hyperkitty-django4.patch +++ /dev/null @@ -1,331 +0,0 @@ -commit e8228c7eddae75d168b28bc3a7abe351bab04b65 -Author: John Vandenberg -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 - # - --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\d{4})/(?P\d\d?)/(?P\d\d?)/$', -+ re_path(r'^(?P\d{4})/(?P\d\d?)/(?P\d\d?)/$', - mlist.archives, name='hk_archives_with_day'), -- url(r'^(?P\d{4})/(?P\d\d?)/$', -+ re_path(r'^(?P\d{4})/(?P\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[^/]+)\.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[^/]+)\.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\d+)/(?P.+)$', -- 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//', 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[^/]+)/$', -- 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.*)/$', -+ 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//', 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.*)/$', - api_email.EmailDetail.as_view(), name="hk_api_email_detail"), -- url(r'^thread/(?P[^/]+)/emails/$', -- api_email.EmailList.as_view(), name="hk_api_thread_email_list"), -+ path('thread//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[^/@]+@[^/@]+)/', include(api_list_patterns)), -- url(r'^sender/(?P[^/]+)/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[^/@]+@[^/@]+)/', include(api_list_patterns)), -+ path('sender//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[^/]+)/$', accounts.public_profile, name='hk_public_user_profile'), -- url(r'^users/(?P[^/]+)/posts$', accounts.posts, name='hk_user_posts'), -+ path('users/', users.users, name='hk_users_overview'), -+ path('users//', accounts.public_profile, name='hk_public_user_profile'), -+ path('users//posts', accounts.posts, name='hk_user_posts'), - - # List archives and overview -- url(r'^list/(?P[^/@]+@[^/@]+)/', include(list_patterns)), -+ re_path(r'^list/(?P[^/@]+@[^/@]+)/', include(list_patterns)), - - # Messages -- url(r'^list/(?P[^/@]+@[^/@]+)/message/' -+ re_path(r'^list/(?P[^/@]+@[^/@]+)/message/' - r'(?P\w+)/', include(message_patterns)), -- url(r'^list/(?P[^/@]+@[^/@]+)/message/new$', -+ re_path(r'^list/(?P[^/@]+@[^/@]+)/message/new$', - message.new_message, name='hk_message_new'), - - # Threads -- url(r'^list/(?P[^/@]+@[^/@]+)/thread/(?P\w+)/', -+ re_path(r'^list/(?P[^/@]+@[^/@]+)/thread/(?P\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[^/]+)/?$', compat.summary), -- url(r'^pipermail/(?P[^/]+)/?$', compat.summary), -- url(r'^pipermail/(?P[^/]+)/(?P\d\d\d\d)-(?P\w+)/?$', compat.arch_month), -- url(r'^pipermail/(?P[^/]+)/(?P\d\d\d\d)-(?P\w+)/(?P[a-z]+)\.html$', compat.arch_month), -- url(r'^pipermail/(?P[^/]+)/(?P\d\d\d\d)-(?P\w+)\.txt.gz', compat.arch_month_mbox), -+ re_path(r'^listinfo/?$', compat.summary), -+ re_path(r'^listinfo/(?P[^/]+)/?$', compat.summary), -+ re_path(r'^pipermail/(?P[^/]+)/?$', compat.summary), -+ re_path(r'^pipermail/(?P[^/]+)/(?P\d\d\d\d)-(?P\w+)/?$', compat.arch_month), -+ re_path(r'^pipermail/(?P[^/]+)/(?P\d\d\d\d)-(?P\w+)/(?P[a-z]+)\.html$', compat.arch_month), -+ re_path(r'^pipermail/(?P[^/]+)/(?P\d\d\d\d)-(?P\w+)\.txt.gz', compat.arch_month_mbox), - #url(r'^pipermail/(?P[^/]+)/(?P\d\d\d\d)-(?P\w+)/(?P\d+)\.html$', compat.message), -- url(r'^list/(?P[^@]+)@[^/]+/(?P\d\d\d\d)-(?P\w+)/?$', compat.arch_month), -+ re_path(r'^list/(?P[^@]+)@[^/]+/(?P\d\d\d\d)-(?P\w+)/?$', compat.arch_month), - #url(r'^list/(?P[^@]+)@[^/]+/(?P\d\d\d\d)-(?P\w+)/(?P\d+)\.html$', compat.message), - - # URL compatibility with previous versions -- url(r'^list/(?P[^@/]+)/', compat.redirect_list_id), -- url(r'^lists/', compat.redirect_lists), -+ re_path(r'^list/(?P[^@/]+)/', 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", diff --git a/hyperkitty-fix-mistune-2.0-imports.patch b/hyperkitty-fix-mistune-2.0-imports.patch deleted file mode 100644 index 78da6a6..0000000 --- a/hyperkitty-fix-mistune-2.0-imports.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 2c3c189c9aacef3f54de2ae0f653aa13c6167093 Mon Sep 17 00:00:00 2001 -From: David Runge -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 -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 diff --git a/hyperkitty-fix-py310-tests.patch b/hyperkitty-fix-py310-tests.patch deleted file mode 100644 index a39ac7f..0000000 --- a/hyperkitty-fix-py310-tests.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 2cda594bc0e7af5c0c24dcc3467ecea04be89f9e Mon Sep 17 00:00:00 2001 -From: David Runge -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 -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 - diff --git a/hyperkitty-fix-qcluster-timeout.patch b/hyperkitty-fix-qcluster-timeout.patch deleted file mode 100644 index b219bae..0000000 --- a/hyperkitty-fix-qcluster-timeout.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 3edc0c58b8dea3b0bdccd77c0794ada28d1c6f61 Mon Sep 17 00:00:00 2001 -From: Mark Sapiro -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 - diff --git a/hyperkitty-settings.patch b/hyperkitty-settings.patch index 881eaaf..af7b424 100644 --- a/hyperkitty-settings.patch +++ b/hyperkitty-settings.patch @@ -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', diff --git a/python-HyperKitty-no-mock.patch b/python-HyperKitty-no-mock.patch deleted file mode 100644 index 2345e34..0000000 --- a/python-HyperKitty-no-mock.patch +++ /dev/null @@ -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 diff --git a/python-HyperKitty.changes b/python-HyperKitty.changes index 417df0f..799dd4e 100644 --- a/python-HyperKitty.changes +++ b/python-HyperKitty.changes @@ -1,8 +1,60 @@ +------------------------------------------------------------------- +Sun Jun 18 16:12:47 UTC 2023 - Andreas Schneider + +- 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 - Add missing requires for sassc used by manage.py +------------------------------------------------------------------- +Mon Nov 21 09:34:53 UTC 2022 - Andreas Schneider + +- 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 +- Removed fix-django41.patch + ------------------------------------------------------------------- Thu Oct 6 12:07:43 UTC 2022 - Daniel Garcia diff --git a/python-HyperKitty.spec b/python-HyperKitty.spec index 3e2093c..93b301a 100644 --- a/python-HyperKitty.spec +++ b/python-HyperKitty.spec @@ -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