1
0

Accepting request 1155812 from home:gladiac:mailman

- Update to version 1.3.9
  * https://gitlab.com/mailman/hyperkitty/-/releases/1.3.9
- Removed mistune3.patch

OBS-URL: https://build.opensuse.org/request/show/1155812
OBS-URL: https://build.opensuse.org/package/show/devel:languages:python:mailman/python-HyperKitty?expand=0&rev=82
This commit is contained in:
2024-03-07 18:03:43 +00:00
committed by Git OBS Bridge
parent a9ab896712
commit b91c0629da
7 changed files with 125 additions and 607 deletions

View File

@@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:8fffccadba2cfe0d4119e9c746639ee46bc0cdae67bbf99c84081d2d0bbd87b8
size 2556166

3
hyperkitty-1.3.9.tar.gz Normal file
View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:05f842878cd971fc2821fb9b5bff8c5165f0875c85387fe3a5175076c8fa94c1
size 2204377

View File

@@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCAAdFiEEVB6gRIRTOU/3eg7MnZsroGHQpnwFAmXdpUoACgkQnZsroGHQ
pnyY9g//RnBU9jWIctSQSxpU5KkSigsznJ98WfrZDt8bJus/AIt9heMSKHsnOo7s
DkU6Bd+W92bk685nUJxLws4AncsWXqGnyANI2N8BWdTCTXDBgAPSlr9cryqO7rM7
n95eIMX8N40nS9WUeIV3qlHuDR0eBaNB0GseLu24W+JbB+JCKbxLn/nQT3MVeno4
WbAhq8NAQsE1IFbUTVyyoaETTuHbCkNoetmpz+OPR70zKs57as78FAYaGrOPdWpL
10DxIDOqQS4SZu9Ca1pv5avDOuP+1dkyR584mY462GX1yjb5m2IIIocBnOGbgqaL
Mz7cuc186e9KHWk43uPecj5i02D1oyoQ2HqswNkeT/p1It0H0vO86UI79wuewes6
WOvLibO0FnbINjv3ckLTi0JzpLSe4tVkJhzt59NeYkB0S8X9LXGM7MTXxiJYQhDP
orVGGTd7AFtA0QLqKH75ZgI1/vlpSeAJe5+tYORByPWCfeKZCyhe6sDEgqj4E+Fc
XDZov5gyS/b1yhvpU1OeaWKUh613PLnfSVpo8lS0mbYENAApkMNZkXGbssqXnDZP
Gtkj6PGHVBEN1rZWhKehMjPBvGuyfu1Jt0BxS99SbMKnKuUbPgm1MCUCgBvTZ3P0
1Ca6l2n06RJ7G+7jorPQhkPXOLJiG/73+Cj4K2uqhZe3pxwooh8=
=Ww80
-----END PGP SIGNATURE-----

View File

@@ -1,596 +0,0 @@
From 2d123efddf474b6cc367b16e59ba9b99e95164e1 Mon Sep 17 00:00:00 2001
From: Abhilash Raj <raj.abhilash1@gmail.com>
Date: Wed, 5 Jul 2023 10:15:04 +0530
Subject: [PATCH 1/6] fix: Update mistune plugin to be compat with 3.0.x
Mistune bump to 3.x updated the plugin API making our current one
incompatible and requiring changes. This commit makes the required
changes so we can work with newer version.
This also strictly works on mistune>=3.0 since the older API won't
work for us anymore.
---
hyperkitty/lib/haystack.py | 57 ++++++++++++++++++++++++++++++++++++++
hyperkitty/lib/renderer.py | 44 +++++++++++++++--------------
setup.py | 2 +-
4 files changed, 82 insertions(+), 22 deletions(-)
create mode 100644 hyperkitty/lib/haystack.py
diff --git a/hyperkitty/lib/haystack.py b/hyperkitty/lib/haystack.py
new file mode 100644
index 00000000..8dbe64a7
--- /dev/null
+++ b/hyperkitty/lib/haystack.py
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2023 by the Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+"""This module contains Django-haystack backend for SQLlite3."""
+
+from haystack.backends import (
+ BaseEngine, BaseSearchBackend, BaseSearchQuery, SearchNode, log_query)
+
+
+class SqliteSearchBackend(BaseSearchBackend):
+
+ def update(self, index, iterable, commit=True):
+ return super().update(index, iterable, commit)
+
+ def remove(self, obj_or_string):
+ return super().remove(obj_or_string)
+
+ def clear(self, models=None, commit=True):
+ return super().clear(models, commit)
+
+ @log_query
+ def search(self, query_string, **kwargs):
+ return super().search(query_string, **kwargs)
+
+ def prep_value(self, value):
+ return super().prep_value(value)
+
+ def more_like_this(self, model_instance, additional_query_string=None, result_class=None):
+ return super().more_like_this(model_instance, additional_query_string, result_class)
+
+
+class SqliteSearchQuery(BaseSearchQuery):
+
+ def build_query(self):
+ return super().build_query()
+
+
+class SqliteEngine(BaseEngine):
+
+ backend = SqliteSearchBackend
+ query = SqliteSearchQuery
\ No newline at end of file
diff --git a/hyperkitty/lib/renderer.py b/hyperkitty/lib/renderer.py
index cbb83b9a..2db2aee6 100644
--- a/hyperkitty/lib/renderer.py
+++ b/hyperkitty/lib/renderer.py
@@ -3,8 +3,9 @@ import re
from django.conf import settings
import mistune
-from mistune.plugins.extra import plugin_url
-from mistune.util import escape_html, escape_url
+from mistune.plugins.url import url
+from mistune.util import escape as escape_html
+from mistune.util import escape_url
class MyRenderer(mistune.HTMLRenderer):
@@ -42,7 +43,7 @@ class MyRenderer(mistune.HTMLRenderer):
return '![{alt}]({src} {title})'.format(
src=src, title=title, alt=alt)
- def image(self, src, alt_text, title):
+ def image(self, alt, src, title):
"""Render image if configured to do so.
HYPERKITTY_RENDER_INLINE_IMAGE configuration allows for
@@ -50,10 +51,10 @@ class MyRenderer(mistune.HTMLRenderer):
default since embeded images can cause problems.
"""
if getattr(settings, 'HYPERKITTY_RENDER_INLINE_IMAGE', False):
- return super().image(src, alt_text, title, )
- return self._md_style_img(src, title, alt_text)
+ return super().image(src, alt, title, )
+ return self._md_style_img(src, title, alt)
- def link(self, link, text=None, title=None):
+ def link(self, text=None, url=None, title=None):
"""URL link renderer that truncates the length of the URL.
This only does it for the URLs that are not hyperlinks by just literal
@@ -61,14 +62,14 @@ class MyRenderer(mistune.HTMLRenderer):
It also adds target=“_blank” so that the URLs open in a new tab.
"""
if text is None:
- text = link
+ text = url
if len(text) > 76:
- text = link[:76] + '...'
+ text = url[:76] + '...'
- s = '<a target="_blank" href="' + self._safe_url(link) + '"'
+ s = '<a target="_blank" href="' + self.safe_url(url) + '"'
if title:
s += ' title="' + escape_html(title) + '"'
- return s + '>' + (text or link) + '</a>'
+ return s + '>' + (text or url) + '</a>'
class InlineParser(mistune.inline_parser.InlineParser):
@@ -113,7 +114,7 @@ def remove_header_rules(rules):
class BlockParser(mistune.block_parser.BlockParser):
"""A copy of Mistune's block parser with header parsing rules removed."""
RULE_NAMES = remove_header_rules(
- mistune.block_parser.BlockParser.RULE_NAMES)
+ mistune.block_parser.BlockParser.DEFAULT_RULES)
OUTLOOK_REPLY_PATTERN = re.compile(
@@ -163,10 +164,10 @@ def plugin_signature(md):
It only provides an HTML renderer because that is the only one needed.
"""
- md.block.register_rule('signature', SIGNATURE_PATTERN, parse_signature)
+ md.block.register('signature', SIGNATURE_PATTERN, parse_signature)
- md.block.rules.insert(0, 'signature')
- if md.renderer.NAME == 'html':
+ # md.block.rules.insert(0, 'signature')
+ if md.renderer and md.renderer.NAME == 'html':
md.renderer.register('signature', render_html_signature)
@@ -211,22 +212,23 @@ def plugin_pgp_signature(md):
It parses BEGIN PGP SIGNATURE and END PGP SIGNATURE and collapses content
in between them.
"""
- md.block.register_rule('pgp', PGP_SIGNATURE_MATCH, parse_pgp_signature)
- md.block.rules.append('pgp')
- if md.renderer.NAME == 'html':
+ md.block.register('pgp', PGP_SIGNATURE_MATCH, parse_pgp_signature)
+ # md.block.rules.append('pgp')
+ if md.renderer and md.renderer.NAME == 'html':
md.renderer.register('pgp', render_pgp_signature)
renderer = MyRenderer(escape=True)
markdown_renderer = mistune.Markdown(
renderer=renderer,
- inline=InlineParser(renderer, hard_wrap=False),
+ inline=InlineParser(hard_wrap=False),
block=BlockParser(),
+
plugins=[
plugin_pgp_signature,
plugin_signature,
plugin_outlook_reply,
- plugin_url
+ url
])
@@ -235,10 +237,10 @@ markdown_renderer = mistune.Markdown(
# rules that results in a regularly formatted email.
text_renderer = mistune.Markdown(
renderer=renderer,
- inline=InlineParser(renderer, hard_wrap=False),
+ inline=InlineParser(hard_wrap=False),
block=BlockParser(),
plugins=[plugin_disable_markdown,
plugin_pgp_signature,
plugin_signature,
- plugin_url,
+ url,
])
diff --git a/setup.py b/setup.py
index 2d8da168..d8c2d2fb 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.0,<3.0",
+ "mistune>=3.0",
"python-dateutil >= 2.0",
"networkx>=2.0",
"django-haystack>=2.8.0",
--
GitLab
From 2312689ea67f631c2aae54013a3e6a57be7ef36d Mon Sep 17 00:00:00 2001
From: Abhilash Raj <raj.abhilash1@gmail.com>
Date: Wed, 5 Jul 2023 10:20:04 +0530
Subject: [PATCH 2/6] Remove the hack for urls with @ since it is fixed
upstream
---
hyperkitty/lib/renderer.py | 15 ---------------
1 file changed, 15 deletions(-)
diff --git a/hyperkitty/lib/renderer.py b/hyperkitty/lib/renderer.py
index 2db2aee6..6a86cc4c 100644
--- a/hyperkitty/lib/renderer.py
+++ b/hyperkitty/lib/renderer.py
@@ -87,21 +87,6 @@ class InlineParser(mistune.inline_parser.InlineParser):
return 'emphasis', marker, self.render(text, state)
return 'strong', marker, self.render(text, state)
- # This is an override for a fix that should be in mistune.
- # https://github.com/lepture/mistune/pull/276
- def parse_auto_link(self, m, state):
- if state.get('_in_link'):
- return 'text', m.group(0)
-
- text = m.group(1)
- if ('@' in text and
- not text.lower().startswith('mailto:') and
- not text.lower().startswith('http')):
- link = 'mailto:' + text
- else:
- link = text
- return 'link', escape_url(link), text
-
def remove_header_rules(rules):
rules = list(rules)
--
GitLab
From 373dadee496c70ee0c6384ef2ad467919e5315cb Mon Sep 17 00:00:00 2001
From: Abhilash Raj <raj.abhilash1@gmail.com>
Date: Wed, 5 Jul 2023 10:39:31 +0530
Subject: [PATCH 3/6] QA checks
---
hyperkitty/lib/renderer.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/hyperkitty/lib/renderer.py b/hyperkitty/lib/renderer.py
index 6a86cc4c..b233dcad 100644
--- a/hyperkitty/lib/renderer.py
+++ b/hyperkitty/lib/renderer.py
@@ -5,7 +5,6 @@ from django.conf import settings
import mistune
from mistune.plugins.url import url
from mistune.util import escape as escape_html
-from mistune.util import escape_url
class MyRenderer(mistune.HTMLRenderer):
--
GitLab
From 481e81d32c2e5ff1c9516fe41512bcfd3cf2c208 Mon Sep 17 00:00:00 2001
From: Abhilash Raj <raj.abhilash1@gmail.com>
Date: Wed, 5 Jul 2023 13:10:49 +0530
Subject: [PATCH 4/6] Fixes for more mistune 3.x compat
---
hyperkitty/lib/renderer.py | 32 ++++++++++++++-------------
hyperkitty/tests/test_templatetags.py | 3 +++
2 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/hyperkitty/lib/renderer.py b/hyperkitty/lib/renderer.py
index b233dcad..346472d2 100644
--- a/hyperkitty/lib/renderer.py
+++ b/hyperkitty/lib/renderer.py
@@ -5,6 +5,7 @@ from django.conf import settings
import mistune
from mistune.plugins.url import url
from mistune.util import escape as escape_html
+from mistune.util import safe_entity
class MyRenderer(mistune.HTMLRenderer):
@@ -24,15 +25,16 @@ class MyRenderer(mistune.HTMLRenderer):
quote-switched classed hyperlink that can collapse the next quote-text
using JS.
"""
+ print(text)
return (
f'<div class="quoted-switch"><a href="#">...</a></div>'
f'<blockquote class="blockquote quoted-text">{text}</blockquote>')
- def emphasis(self, marker, text):
+ def emphasis(self, text, marker):
"""Emphasis with marker included."""
return super().emphasis(marker + text + marker)
- def strong(self, marker, text):
+ def strong(self, text, marker):
"""Strong with marker included."""
return super().strong(marker + text + marker)
@@ -42,7 +44,7 @@ class MyRenderer(mistune.HTMLRenderer):
return '![{alt}]({src} {title})'.format(
src=src, title=title, alt=alt)
- def image(self, alt, src, title):
+ def image(self, alt, url, title=None):
"""Render image if configured to do so.
HYPERKITTY_RENDER_INLINE_IMAGE configuration allows for
@@ -50,10 +52,10 @@ class MyRenderer(mistune.HTMLRenderer):
default since embeded images can cause problems.
"""
if getattr(settings, 'HYPERKITTY_RENDER_INLINE_IMAGE', False):
- return super().image(src, alt, title, )
- return self._md_style_img(src, title, alt)
+ return super().image(alt, url, title)
+ return self._md_style_img(url, title, alt)
- def link(self, text=None, url=None, title=None):
+ def link(self, text, url, title=None):
"""URL link renderer that truncates the length of the URL.
This only does it for the URLs that are not hyperlinks by just literal
@@ -67,7 +69,7 @@ class MyRenderer(mistune.HTMLRenderer):
s = '<a target="_blank" href="' + self.safe_url(url) + '"'
if title:
- s += ' title="' + escape_html(title) + '"'
+ s += ' title="' + safe_entity(title) + '"'
return s + '>' + (text or url) + '</a>'
@@ -79,13 +81,13 @@ class InlineParser(mistune.inline_parser.InlineParser):
emphasis or strong node.
"""
- def tokenize_emphasis(self, m, state):
- marker = m.group(1)
- text = m.group(2)
- if len(marker) == 1:
- return 'emphasis', marker, self.render(text, state)
- return 'strong', marker, self.render(text, state)
-
+ def parse_emphasis(self, m, state):
+ end_pos = super().parse_emphasis(m, state)
+ last_token = state.tokens[-1].copy()
+ marker = m.group(0)
+ last_token['attrs'] = {'marker': marker}
+ state.tokens[-1] = last_token
+ return end_pos
def remove_header_rules(rules):
rules = list(rules)
@@ -97,7 +99,7 @@ def remove_header_rules(rules):
class BlockParser(mistune.block_parser.BlockParser):
"""A copy of Mistune's block parser with header parsing rules removed."""
- RULE_NAMES = remove_header_rules(
+ DEFAULT_RULES = remove_header_rules(
mistune.block_parser.BlockParser.DEFAULT_RULES)
diff --git a/hyperkitty/tests/test_templatetags.py b/hyperkitty/tests/test_templatetags.py
index 79372d84..b1d83177 100644
--- a/hyperkitty/tests/test_templatetags.py
+++ b/hyperkitty/tests/test_templatetags.py
@@ -156,6 +156,7 @@ On Fri, 09.11.12 11:27, Someone wrote:
> This is the first quoted line
> On Fri 07.25.12, Aperson wrote:
>> This is the second quoted line.
+
This is the response.
"""
expected = (
@@ -167,6 +168,8 @@ This is the response.
'</blockquote></blockquote>'
'<p>This is the response.</p>\n')
result = markdown_renderer(contents)
+ print('----------'*10)
+ print(result)
self.assertEqual(result.strip(), expected.strip())
def test_parse_heading_normal(self):
--
GitLab
From b2d809b446402296b5e1b830a7f408a6e464210d Mon Sep 17 00:00:00 2001
From: Abhilash Raj <raj.abhilash1@gmail.com>
Date: Wed, 12 Jul 2023 12:23:23 +0530
Subject: [PATCH 5/6] Fix the outlook_reply_plugin for mixtune 3.x
---
hyperkitty/lib/renderer.py | 29 ++++++++++++++-------------
hyperkitty/tests/test_templatetags.py | 12 +++--------
2 files changed, 18 insertions(+), 23 deletions(-)
diff --git a/hyperkitty/lib/renderer.py b/hyperkitty/lib/renderer.py
index 346472d2..ddb2a77d 100644
--- a/hyperkitty/lib/renderer.py
+++ b/hyperkitty/lib/renderer.py
@@ -25,7 +25,6 @@ class MyRenderer(mistune.HTMLRenderer):
quote-switched classed hyperlink that can collapse the next quote-text
using JS.
"""
- print(text)
return (
f'<div class="quoted-switch"><a href="#">...</a></div>'
f'<blockquote class="blockquote quoted-text">{text}</blockquote>')
@@ -62,7 +61,10 @@ class MyRenderer(mistune.HTMLRenderer):
URLs (text=None) so text is same as URL.
It also adds target=“_blank” so that the URLs open in a new tab.
"""
- if text is None:
+ # text can be none of same as url in case of autolink parsing. This
+ # will truncate the length of the URL in both cases but preserve
+ # the actual URL destination in the hyperlink.
+ if text is None or text == url:
text = url
if len(text) > 76:
text = url[:76] + '...'
@@ -103,26 +105,26 @@ class BlockParser(mistune.block_parser.BlockParser):
mistune.block_parser.BlockParser.DEFAULT_RULES)
-OUTLOOK_REPLY_PATTERN = re.compile(
+OUTLOOK_REPLY_PATTERN = (
r'^-------- Original message --------\n'
- r'([\s\S]+)', # everything after newline.
- re.M
+ r'(?P<reply_text>[\s\S]+)' # everything after newline
)
def parse_outlook_reply(block, m, state):
"""Parser for outlook style replies."""
- text = m.group(0)
- return {
+ text = m.group('reply_text')
+ reply_token = '-------- Original message --------\n'
+ state.append_token({
'type': 'block_quote',
- 'children': [{'type': 'paragraph', 'text': text}]
- }
+ 'children': [{'type': 'paragraph', 'text': reply_token + text}],
+ })
+ return m.end() + 1
def plugin_outlook_reply(md):
- md.block.register_rule(
+ md.block.register(
'outlook_reply', OUTLOOK_REPLY_PATTERN, parse_outlook_reply)
- md.block.rules.insert(-1, 'outlook_reply')
# Signature Plugin looks for signature pattern in email content and converts it
@@ -209,12 +211,11 @@ markdown_renderer = mistune.Markdown(
renderer=renderer,
inline=InlineParser(hard_wrap=False),
block=BlockParser(),
-
plugins=[
+ plugin_outlook_reply,
plugin_pgp_signature,
plugin_signature,
- plugin_outlook_reply,
- url
+ url,
])
diff --git a/hyperkitty/tests/test_templatetags.py b/hyperkitty/tests/test_templatetags.py
index b1d83177..f567388d 100644
--- a/hyperkitty/tests/test_templatetags.py
+++ b/hyperkitty/tests/test_templatetags.py
@@ -147,9 +147,6 @@ class TestGravatar(TestCase):
class TestDecorate(TestCase):
- def setUp(self):
- pass
-
def test_parse_quote(self):
contents = """
On Fri, 09.11.12 11:27, Someone wrote:
@@ -168,8 +165,6 @@ This is the response.
'</blockquote></blockquote>'
'<p>This is the response.</p>\n')
result = markdown_renderer(contents)
- print('----------'*10)
- print(result)
self.assertEqual(result.strip(), expected.strip())
def test_parse_heading_normal(self):
@@ -187,7 +182,7 @@ https://some.url/llasdfjaksdgfjsdfgkjasdfbgksdfjgbsdfkgjbsdflkgjbsdflgksjdhfbgks
result = markdown_renderer(contents)
self.assertEqual(
result.strip(),
- '<p><a target="_blank" href="https://some.url/llasdfjaksdgfjsdfgkjasdfbgksdfjgbsdfkgjbsdflkgjbsdflgksjdhfbgksdfgb">https://some.url/llasdfjaksdgfjsdfgkjasdfbgksdfjgbsdfkgjbsdflkgjbsdflgksjdhf...</a></p>') # noqa: E501
+ ('<p><a target="_blank" href="https://some.url/llasdfjaksdgfjsdfgkjasdfbgksdfjgbsdfkgjbsdflkgjbsdflgksjdhfbgksdfgb">https://some.url/llasdfjaksdgfjsdfgkjasdfbgksdfjgbsdfkgjbsdflkgjbsdflgksjdhf...</a></p>')) # noqa: E501
def test_autolink_small_url(self):
# Test that autolink doesn't add ... to URLs that aren't truncated.
@@ -241,6 +236,7 @@ Subject: Testing if the quoted reply works with Outlook style.
This is the original text *with* some __markup__.
"""
result = markdown_renderer(contents)
+ print(result)
self.assertEqual(
result.strip(),
"""<p>This is the replied text.</p>
@@ -250,9 +246,7 @@ From: A person &lt;person(a)example.com&gt;
Date: 6/26/23 16:23 (GMT-05:00)
To: mytestlist@example.com
Subject: Testing if the quoted reply works with Outlook style.
-
-This is the original text <em>*with*</em> some <strong>__markup__</strong>.
-</p>
+This is the original text <em>*with*</em> some <strong>__markup__</strong>.</p>
</blockquote>""") # noqa: E501
--
GitLab
From af17c334a2a35d672c9c732ed9a37bc780fdb64d Mon Sep 17 00:00:00 2001
From: Abhilash Raj <raj.abhilash1@gmail.com>
Date: Wed, 12 Jul 2023 14:14:00 +0530
Subject: [PATCH 6/6] qa fixes
---
hyperkitty/lib/renderer.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/hyperkitty/lib/renderer.py b/hyperkitty/lib/renderer.py
index ddb2a77d..7f1a3230 100644
--- a/hyperkitty/lib/renderer.py
+++ b/hyperkitty/lib/renderer.py
@@ -4,7 +4,6 @@ from django.conf import settings
import mistune
from mistune.plugins.url import url
-from mistune.util import escape as escape_html
from mistune.util import safe_entity
@@ -91,6 +90,7 @@ class InlineParser(mistune.inline_parser.InlineParser):
state.tokens[-1] = last_token
return end_pos
+
def remove_header_rules(rules):
rules = list(rules)
for rule in ('setex_header', 'axt_heading'):
@@ -107,7 +107,7 @@ class BlockParser(mistune.block_parser.BlockParser):
OUTLOOK_REPLY_PATTERN = (
r'^-------- Original message --------\n'
- r'(?P<reply_text>[\s\S]+)' # everything after newline
+ r'(?P<reply_text>[\s\S]+)' # everything after newline
)
--
GitLab

View File

@@ -1,3 +1,10 @@
-------------------------------------------------------------------
Sat Mar 2 07:57:47 UTC 2024 - Andreas Schneider <asn@cryptomilk.org>
- Update to version 1.3.9
* https://gitlab.com/mailman/hyperkitty/-/releases/1.3.9
- Removed mistune3.patch
-------------------------------------------------------------------
Thu Feb 29 19:57:33 UTC 2024 - Ben Greiner <code@bnavigator.de>

90
python-HyperKitty.keyring Normal file
View File

@@ -0,0 +1,90 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
13uS0qfwHEvxfNbR011PQGPf7eD4e4i0uh4IcTw=
=s7HB
-----END PGP PUBLIC KEY BLOCK-----

View File

@@ -66,14 +66,16 @@
%define plainpython python
Name: python-HyperKitty
Version: 1.3.8
Version: 1.3.9
Release: 0
Summary: A web interface to access GNU Mailman v3 archives
License: GPL-3.0-only
URL: https://gitlab.com/mailman/hyperkitty
#
Source0: https://files.pythonhosted.org/packages/source/H/HyperKitty/HyperKitty-%{version}.tar.gz
Source1: python-HyperKitty-rpmlintrc
Source0: https://gitlab.com/mailman/hyperkitty/-/releases/%{version}/downloads/hyperkitty-%{version}.tar.gz
Source1: https://gitlab.com/mailman/hyperkitty/-/releases/%{version}/downloads/hyperkitty-%{version}.tar.gz.asc
Source2: python-HyperKitty.keyring
Source3: python-HyperKitty-rpmlintrc
#
Source10: hyperkitty-manage.sh
Source12: hyperkitty.uwsgi
@@ -87,8 +89,6 @@ 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 mistune3.patch gl#mailman/hyperkitty#541
Patch2: mistune3.patch
#
# PATCH-FIX-UPSTREAM gl-mr300-add-opengraph-metadata.patch gl#mailman/hyperkitty#300
Patch98: gl-mr300-add-opengraph-metadata.patch
@@ -104,6 +104,7 @@ BuildRequires: %{python_module django-gravatar2 >= %{django_gravatar2_min_versi
BuildRequires: %{python_module isort}
BuildRequires: %{python_module mailmanclient >= %{mailmanclient_min_version}}
BuildRequires: %{python_module mistune >= %{mistune_min_version}}
BuildRequires: %{python_module pdm}
BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module wheel}
@@ -212,7 +213,7 @@ BuildRequires: sysuser-tools
System user for HyperKitty.
%prep
%setup -n HyperKitty-%{version}
%setup -n hyperkitty-%{version}
cp %{SOURCE30} .
touch settings_local.py
@@ -360,10 +361,10 @@ fi
%service_del_postun %{hyperkitty_services}
%files -n %{hyperkitty_pkgname}
%doc AUTHORS.txt README.rst example_project doc/*.rst
%doc AUTHORS.txt README.rst example_project
%license COPYING.txt
%{mypython_sitelib}/hyperkitty
%{mypython_sitelib}/HyperKitty-%{version}*-info
%{mypython_sitelib}/hyperkitty-%{version}*-info
%files -n %{hyperkitty_pkgname}-web
%doc README.SUSE.md