2025-07-17 12:51:04 +00:00
committed by Git OBS Bridge
commit c95a4d1b8d
6 changed files with 357 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.osc

View File

@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:63581c604ca7eac021489c15aacca06a4958eb76f66574c6fab05eac654dd857
size 89608

View File

@@ -0,0 +1,98 @@
Index: mailmanclient-3.3.3/src/mailmanclient/tests/test_async_client.py
===================================================================
--- mailmanclient-3.3.3.orig/src/mailmanclient/tests/test_async_client.py 2021-11-19 10:35:49.358591669 +0100
+++ mailmanclient-3.3.3/src/mailmanclient/tests/test_async_client.py 2021-11-19 10:35:59.998665466 +0100
@@ -1,93 +0,0 @@
-import httpx
-import pytest
-import concurrent.futures
-
-from mailmanclient.asynclient import AsyncClient
-from mailmanclient import Client
-
-
-@pytest.fixture(autouse=True)
-def setup():
- """Setup for testing. Create test data."""
- client = Client('http://localhost:9001/3.1', 'restadmin', 'restpass')
- print('Loading test data...')
- try:
- domain = client.create_domain('example.com')
- except Exception:
- domain = client.get_domain('example.com')
- # Create some lists.
- lists = []
- print('Creating lists...')
- with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
- future_to_id = {
- executor.submit(domain.create_list, f'list{i}'): f'list{i}'
- for i in range(10)}
- for future in concurrent.futures.as_completed(future_to_id):
- lists.append(future.result())
-
- # Subscribe some addresses.
- print('Creating subscirbers...')
- for i, ml in enumerate(lists):
- with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
- futures = [
- executor.submit(
- ml.subscribe, f'mylist{each}@example.com',
- pre_verified=True, pre_confirmed=True, pre_approved=True)
- for each in range(i*5)]
- for _future in concurrent.futures.as_completed(futures):
- print('.', end='')
- yield
- # Cleanup after test.
- for ml in lists:
- ml.delete()
- domain.delete()
-
-
-@pytest.fixture
-async def client():
- async with httpx.AsyncClient() as conn:
- client = AsyncClient(
- conn, 'http://localhost:9001/3.1', 'restadmin', 'restpass')
- yield client
-
-
-@pytest.mark.asyncio
-async def test_async_client(client):
- domains = await client.domains()
- for each in domains:
- print(f'Domain: {each.mail_host}')
-
-
-@pytest.mark.asyncio
-async def test_get_lists(client):
- lists = await client.lists()
- for ml in lists:
- print(f'Mailinglist: {ml.fqdn_listname}')
- await ml.config()
-
-
-@pytest.mark.asyncio
-async def test_get_members(client):
- members = await client.members()
- for member in members:
- print(f'Member: {member.role} {member.list_id} {member.email} ',
- end='')
-
-
-@pytest.mark.asyncio
-async def test_get_users(client):
- users = await client.users()
- for user in users:
- print(f'User: {user.user_id} ', end='')
- addrs = await user.addresses()
- for addr in addrs:
- print(f'UserAddress: {addr.email}', end='')
- prefs = await user.preferences()
- print('UserPreference: {}'.format(prefs._data), end='')
-
-
-@pytest.mark.asyncio
-async def test_get_addresses(client):
- addresses = await client.addresses()
- for addr in addresses:
- print(f'Address: {addr.email}', end='')

View File

@@ -0,0 +1,147 @@
-------------------------------------------------------------------
Thu Feb 29 20:26:33 UTC 2024 - Ben Greiner <code@bnavigator.de>
- Build PEP517 wheel
-------------------------------------------------------------------
Tue Feb 20 13:23:35 UTC 2024 - Markéta Machová <mmachova@suse.com>
- Get rid of six dependency
-------------------------------------------------------------------
Tue Feb 6 14:56:06 UTC 2024 - Markéta Machová <mmachova@suse.com>
- Drop unneeded test dependency python-pytest-vcr
-------------------------------------------------------------------
Thu Jun 29 13:43:42 UTC 2023 - Matej Cepl <mcepl@suse.com>
- Update to 3.3.5:
- Add support for Python 3.11.
-------------------------------------------------------------------
Thu Jun 29 13:03:21 UTC 2023 - Matej Cepl <mcepl@suse.com>
- Remove weird %if %{pkg_vcmp python3-pytest-asyncio >= 0.19}
construct. It just cannot work correctly (bsc#1212834).
-------------------------------------------------------------------
Mon Nov 21 10:38:25 UTC 2022 - Andreas Schneider <asn@cryptomilk.org>
- Update to version 3.3.4
* URL quote the query in find_user* methods. (Fixes #75)
* Add support for Python 3.10 and drops support for 3.6.
-------------------------------------------------------------------
Sat Aug 20 20:38:15 UTC 2022 - Ben Greiner <code@bnavigator.de>
- Force pytest-asyncio auto mode -- 0.19.0 changed the default
* https://github.com/pytest-dev/pytest-asyncio#modes
-------------------------------------------------------------------
Mon Jul 4 10:44:31 UTC 2022 - Ben Greiner <code@bnavigator.de>
- Enable multiflavor so that we can pin mailman3 itself to python39
-------------------------------------------------------------------
Thu Jun 9 08:48:24 UTC 2022 - Andreas Schneider <asn@cryptomilk.org>
- Fix BR for mailman3 (package has been renamed)
- Add missing BR for async_generator on openSUSE Leap >= 15.3
-------------------------------------------------------------------
Fri Nov 19 09:22:22 UTC 2021 - Andreas Schneider <asn@cryptomilk.org>
- Fix running the tests
* Added mailmanclient-skip-httpx-tests.patch
- Set missing Group
-------------------------------------------------------------------
Thu Nov 18 18:14:51 UTC 2021 - Matej Cepl <mcepl@suse.com>
- Update to 3.3.3:
- Add pre_confirmed and pre_approved parameters to
MailingList.unsubscribe.
- Add support to fetch pending unsubscription requests.
- Add member_id as a property of Member object.
- Return pending token when a Member is unsubscribed.
- Allow specifying a reason when handling subscription requests
- Add support to specify fields when fetching a roster.
- Add a mechanism to hook into the request parameters.
- Add basic support for async client for Mailman API.
- Allow specifying delivery_mode and delivery_status when
subscribing a Member.
- Add a new Client.find_users API which allows searching for
the users.
-------------------------------------------------------------------
Tue May 4 09:30:03 UTC 2021 - Ben Greiner <code@bnavigator.de>
- Restrict to python3 build
-------------------------------------------------------------------
Thu Feb 4 00:11:53 UTC 2021 - Jan Engelhardt <jengelh@inai.de>
- Avoid name repetition (e.g. rpmlint's name-repeated-in-summary)
-------------------------------------------------------------------
Wed Feb 3 16:36:32 UTC 2021 - Andreas Schneider <asn@cryptomilk.org>
- Update to 3.3.2
* Add two new get_requests() and get_requests_count() to get pending
subscription requests``MailingList.get_requests`` is the new API to fetch
pending requests and supersedes the previous requests property. (See !121)
* Add Member.subscription_mode to determine if a User is subscribed or an
Address. (See !121)
* Add a new get_held_count() API to get a count of held messages for a
MailingList. (See !122)
* Add display_name to the pending subscription requests. (Fixes #55)
* Allow setting a Member's address attribute. (See !128)
* Add support for inviting an email address to join a list.
* Rewrite urls according to the baseurl used to instantiate Client instead of
relying on self_link. (Fixes #22)
* Add get_request API to MailingList to get individual request objects.
* Add send_welcome_message parameter to MailingList.subscribe() to suppress
welcome message. (Closes #61)
- Fix build on tumbleweed
-------------------------------------------------------------------
Tue Aug 4 02:03:44 UTC 2020 - Stasiek Michalski <stasiek@michalski.cc>
- Update to 3.3.1
* Held message moderation now supports an optional keyword, reason to
specify the reason to reject the message.
* Fix a bug where missing display_name attribute with
MalingList.subscribe would subscribe the user with a display name of
"None".
* Add advertised flag to MailingList object.
* MailingList.nonmembers now uses roster/nonmembers resource instead of
the find/ API for consistency.
* Add Client.get_nonmember and MailingList.get_nonmember to get a
non-member by address.
-------------------------------------------------------------------
Thu Jan 23 14:56:37 UTC 2020 - pgajdos@suse.com
- removing 15 conditionals, LANG definition will be removed
later anyway
-------------------------------------------------------------------
Thu Jan 16 11:06:44 UTC 2020 - pgajdos@suse.com
- be able to build also for 15
-------------------------------------------------------------------
Mon Dec 2 10:47:15 UTC 2019 - pgajdos@suse.com
- call spec-cleaner
-------------------------------------------------------------------
Wed Nov 6 11:10:07 UTC 2019 - pgajdos@suse.com
- run tests except doc ones
-------------------------------------------------------------------
Tue Oct 1 10:21:27 UTC 2019 - pgajdos@suse.com
- initial version 3.3.0, required by HyperKitty [SLE-7686]

85
python-mailmanclient.spec Normal file
View File

@@ -0,0 +1,85 @@
#
# spec file for package python-mailmanclient
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%{?sle15_python_module_pythons}
Name: python-mailmanclient
Version: 3.3.5
Release: 0
Summary: Python bindings for the Mailman REST API
License: LGPL-3.0-only
Group: Productivity/Networking/Email/Mailinglists
URL: https://www.list.org/
Source: https://files.pythonhosted.org/packages/source/m/mailmanclient/mailmanclient-%{version}.tar.gz
BuildRequires: %{python_module pip}
BuildRequires: %{python_module setuptools}
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
Requires: python-requests
BuildArch: noarch
%if 0%{?sle_version} && 0%{?sle_version} <= 150300
Patch0: mailmanclient-skip-httpx-tests.patch
%endif
# SECTION test requirements
BuildRequires: %{python_module falcon}
BuildRequires: %{python_module pytest-asyncio}
BuildRequires: %{python_module pytest-services}
BuildRequires: %{python_module pytest}
BuildRequires: %{python_module requests}
BuildRequires: mailman3 >= 3.3.5
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400
BuildRequires: %{python_module httpx}
%endif
%if 0%{?sle_version} && 0%{?sle_version} <= 150400
BuildRequires: %{python_module async_generator}
%endif
# /SECTION
%python_subpackages
%description
Python bindings for Mailman REST API.
%prep
%autosetup -n mailmanclient-%{version} -p1
# get rid of six
sed -i 's/six.moves.urllib_error/urllib.error/' src/mailmanclient/tests/test_domain.py src/mailmanclient/tests/test_unicode.py
%build
export LC_ALL=C.UTF-8
%pyproject_wheel
%install
%pyproject_install
%python_expand %fdupes %{buildroot}%{$python_sitelib}
%check
# doctest does not work:
# Traceback (most recent call last):
# File "/usr/lib64/python3.7/logging/handlers.py", line 933, in emit
# self.socket.send(msg)
# OSError: [Errno 9] Bad file descriptor
export LC_ALL=C.UTF-8
%pytest -k 'not using.rst' --asyncio-mode=auto
%files %{python_files}
%doc README.rst
%license COPYING.LESSER
%{python_sitelib}/mailmanclient
%{python_sitelib}/mailmanclient-%{version}.dist-info
%changelog