1
0

Accepting request 1009242 from devel:languages:python:mailman

- Add fix-django41.patch to fix issues with django4.1
- Add fix-elasticsearch8.patch to fix issues with elasticsearch 8.0.0
- Rename the built package to python prefixless HyperKitty
  * Doesn't imply any false impression of multiflavor
- Go back to python39 -- highest supported Python by mailman

OBS-URL: https://build.opensuse.org/request/show/1009242
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-HyperKitty?expand=0&rev=18
This commit is contained in:
2022-10-12 16:23:58 +00:00
committed by Git OBS Bridge
5 changed files with 179 additions and 31 deletions

67
fix-django41.patch Normal file
View File

@@ -0,0 +1,67 @@
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

34
fix-elasticsearch8.patch Normal file
View File

@@ -0,0 +1,34 @@
From 0e86f9cc40bf05cb819087f1fb0ee56f43968e1b Mon Sep 17 00:00:00 2001
From: Daniel Garcia Moreno <daniel.garcia@suse.com>
Date: Thu, 6 Oct 2022 14:01:54 +0200
Subject: [PATCH] Make it compatible with elasticsearch 8.0.0
---
hyperkitty/tests/views/test_search.py | 10 +++++++++-
tox.ini | 2 +-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/hyperkitty/tests/views/test_search.py b/hyperkitty/tests/views/test_search.py
index ad0e9632..cad76fe6 100644
--- a/hyperkitty/tests/views/test_search.py
+++ b/hyperkitty/tests/views/test_search.py
@@ -211,10 +211,18 @@ class SearchViewsTestCase(SearchEnabledTestCase):
# For elasticsearch backend
from elasticsearch import RequestError
+ from elasticsearch import VERSION
+ mayor, _minor, _p = VERSION
+
+ search_error = "dummy parsing failure"
+ if mayor > 7:
+ class ElasticError:
+ status = search_error
+ search_error = ElasticError
class CrashingIterator(list):
def __len__(self):
- raise RequestError(400, "dummy parsing failure", {})
+ raise RequestError(400, search_error, {})
query = Mock()
with self.settings(HAYSTACK_CONNECTIONS={

View File

@@ -3,3 +3,4 @@ addFilter("non-standard-gid")
addFilter("non-standard-uid")
addFilter("spurious-executable-perm .*example_project/wsgi.py")
addFilter("hidden-file-or-dir .*example_project/logs/.keep")
addFilter("obsolete-not-provided python3-HyperKitty")

View File

@@ -1,3 +1,16 @@
-------------------------------------------------------------------
Thu Oct 6 12:07:43 UTC 2022 - Daniel Garcia <daniel.garcia@suse.com>
- Add fix-django41.patch to fix issues with django4.1
- Add fix-elasticsearch8.patch to fix issues with elasticsearch 8.0.0
-------------------------------------------------------------------
Mon Jul 4 11:02:04 UTC 2022 - Ben Greiner <code@bnavigator.de>
- Rename the built package to python prefixless HyperKitty
* Doesn't imply any false impression of multiflavor
- Go back to python39 -- highest supported Python by mailman
-------------------------------------------------------------------
Sun Jul 3 20:46:20 UTC 2022 - Ben Greiner <code@bnavigator.de>

View File

@@ -31,9 +31,20 @@
%global hyperkitty_services hyperkitty-qcluster.service hyperkitty-runjob-daily.service hyperkitty-runjob-daily.timer hyperkitty-runjob-hourly.service hyperkitty-runjob-hourly.timer hyperkitty-runjob-minutely.service hyperkitty-runjob-minutely.timer hyperkitty-runjob-monthly.service hyperkitty-runjob-monthly.timer hyperkitty-runjob-quarter-hourly.service hyperkitty-runjob-quarter-hourly.timer hyperkitty-runjob-weekly.service hyperkitty-runjob-weekly.timer hyperkitty-runjob-yearly.service hyperkitty-runjob-yearly.timer
%if 0%{?suse_version} >= 1550
# Newest python supported by mailman is Python 3.9 -- https://gitlab.com/mailman/mailman/-/issues/936
%define pythons python39
%define mypython python39
%define __mypython %{__python39}
%define mypython_sitelib %{python39_sitelib}
%else
%{?!python_module:%define python_module() python3-%{**}}
# mailman is built only for primary python3 flavor
%define pythons python3
%define mypython python3
%define __mypython %{__python3}
%define mypython_sitelib %{python3_sitelib}
%endif
Name: python-HyperKitty
Version: 1.3.5
Release: 0
@@ -67,6 +78,10 @@ Patch3: python-HyperKitty-no-mock.patch
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
#
BuildRequires: %{python_module django-debug-toolbar >= 2.2}
BuildRequires: %{python_module isort}
@@ -79,25 +94,11 @@ BuildRequires: openssl
BuildRequires: python-rpm-macros
BuildRequires: rsync
BuildRequires: sudo
Requires: python-Django >= 1.11
Requires: python-django-compressor >= 1.3
Requires: python-django-debug-toolbar >= 2.2
Requires: python-django-extensions >= 1.3.7
Requires: python-django-gravatar2 >= 1.0.6
Requires: python-django-haystack >= 2.8.0
Requires: python-django-mailman3 >= 1.3.7
Requires: python-django-q >= 1.3.9
Requires: python-djangorestframework >= 3.0.0
Requires: python-flufl.lock
Requires: python-libsass
Requires: python-mailmanclient >= 3.3.2
Requires: python-mistune
Requires: python-networkx >= 1.9.1
Requires: python-python-dateutil >= 2.0
Requires: python-pytz >= 2012
Requires: python-robot-detection >= 0.3
Requires: python-xapian-haystack >= 2.1.0
BuildArch: noarch
%if 0%{?suse_version} >= 1550
# use the real python3 primary for rpm pythondistdeps.py
BuildRequires: python3-packaging
%endif
# SECTION test requirements
BuildRequires: %{python_module Django >= 1.11}
BuildRequires: %{python_module Whoosh >= 2.5.7}
@@ -121,21 +122,45 @@ BuildRequires: %{python_module python-dateutil >= 2.0}
BuildRequires: %{python_module pytz >= 2012}
BuildRequires: %{python_module robot-detection >= 0.3}
# /SECTION
%if 0%{python3_version_nodots} == 38
# help in replacing any previously installed multiflavor package back to the primary python3 package
Provides: python38-Hyperkitty = %{version}-%{release}
Obsoletes: python38-Hyperkitty < %{version}-%{release}
%endif
%python_subpackages
%description
A web interface to access GNU Mailman v3 archives.
%package -n %{hyperkitty_pkgname}
Summary: A web interface to access GNU Mailman v3 archives
Requires: %{mypython}-Django >= 1.11
Requires: %{mypython}-django-compressor >= 1.3
Requires: %{mypython}-django-debug-toolbar >= 2.2
Requires: %{mypython}-django-extensions >= 1.3.7
Requires: %{mypython}-django-gravatar2 >= 1.0.6
Requires: %{mypython}-django-haystack >= 2.8.0
Requires: %{mypython}-django-mailman3 >= 1.3.7
Requires: %{mypython}-django-q >= 1.3.9
Requires: %{mypython}-djangorestframework >= 3.0.0
Requires: %{mypython}-flufl.lock
Requires: %{mypython}-libsass
Requires: %{mypython}-mailmanclient >= 3.3.2
Requires: %{mypython}-mistune
Requires: %{mypython}-networkx >= 1.9.1
Requires: %{mypython}-python-dateutil >= 2.0
Requires: %{mypython}-pytz >= 2012
Requires: %{mypython}-robot-detection >= 0.3
Requires: %{mypython}-xapian-haystack >= 2.1.0
%if "%{expand:%%%{mypython}_provides}" == "python3"
Provides: python3-%{hyperkitty_pkgname} = %{version}-%{release}
%endif
Obsoletes: python3-%{hyperkitty_pkgname} < %{version}-%{release}
Provides: %{mypython}-%{hyperkitty_pkgname} = %{version}-%{release}
Obsoletes: %{mypython}-%{hyperkitty_pkgname} < %{version}-%{release}
%description -n %{hyperkitty_pkgname}
A web interface to access GNU Mailman v3 archives.
%package -n %{hyperkitty_pkgname}-web
Summary: The webroot for GNU Mailman
Requires: %{hyperkitty_pkgname}
Requires: acl
Requires: openssl
Requires: python3-HyperKitty
Requires: sudo
%description -n %{hyperkitty_pkgname}-web
@@ -146,7 +171,11 @@ This package holds the web interface.
%package -n %{hyperkitty_pkgname}-web-uwsgi
Summary: HyperKitty - uwsgi configuration
Requires: %{hyperkitty_pkgname}-web
Requires: uwsgi
%if 0%{suse_version} >= 1550
Requires: %{mypython}-uwsgi-python3
%else
Requires: uwsgi-python3
%endif
%description -n %{hyperkitty_pkgname}-web-uwsgi
A web user interface for GNU Mailman.
@@ -168,10 +197,14 @@ rsync -a example_project/* build_static_files
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%build
sed -i 's|^#!/usr/bin/env.*|#!%{_bindir}/python3|' \
sed -i 's|^#!/usr/bin/env.*|#!%{__mypython}|' \
example_project/manage.py
sed -i 's|/usr/bin/python3|%{__mypython}|' %{SOURCE10} %{SOURCE20} %{SOURCE21}
sed -i 's|python3|%{mypython}|' %{SOURCE12}
%python_build
@@ -296,11 +329,11 @@ fi
%postun -n %{hyperkitty_pkgname}-web
%service_del_postun %{hyperkitty_services}
%files %{python_files}
%files -n %{hyperkitty_pkgname}
%doc AUTHORS.txt README.rst example_project doc/*.rst
%license COPYING.txt
%{python_sitelib}/hyperkitty
%{python_sitelib}/HyperKitty*.egg-info
%{mypython_sitelib}/hyperkitty
%{mypython_sitelib}/HyperKitty-%{version}*-info
%files -n %{hyperkitty_pkgname}-web
%doc README.SUSE.md