Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-IMAPClient for
openSUSE:Factory checked in at 2026-03-23 17:15:42
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-IMAPClient (Old)
and /work/SRC/openSUSE:Factory/.python-IMAPClient.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-IMAPClient"
Mon Mar 23 17:15:42 2026 rev:9 rq:1342020 version:3.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-IMAPClient/python-IMAPClient.changes
2025-04-14 12:59:39.719473497 +0200
+++
/work/SRC/openSUSE:Factory/.python-IMAPClient.new.8177/python-IMAPClient.changes
2026-03-23 17:17:47.280702685 +0100
@@ -1,0 +2,16 @@
+Mon Mar 23 10:40:28 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 3.1.0:
+ * Simplify IMAP4_TLS class and fix Python 3.14+ compatibility
+ * Fix typo in man page: certifcate -> certificate
+ * Move man page to section 7
+ * update supported python versions in doc
+ * chore: add `setuptools` to `requirements-dev.txt`
+ * Don't assume capabilities have been cached when sending
+ literals
+ * Support Python 3.8 - 3.13
+ * feat: add popular special folder for SENT provided by qq mail
+ * Remove unused import in imapclient.tls
+ * Updates for 3.1.0
+
+-------------------------------------------------------------------
Old:
----
3.0.1.tar.gz
New:
----
3.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-IMAPClient.spec ++++++
--- /var/tmp/diff_new_pack.9uoNgi/_old 2026-03-23 17:17:47.780723421 +0100
+++ /var/tmp/diff_new_pack.9uoNgi/_new 2026-03-23 17:17:47.780723421 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-IMAPClient
#
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
# Copyright (c) 2016-2019 LISA GmbH, Bingen, Germany.
#
# All modifications and additions to the file contributed by third parties
@@ -18,7 +18,7 @@
Name: python-IMAPClient
-Version: 3.0.1
+Version: 3.1.0
Release: 0
Summary: Pythonic IMAP client library
License: BSD-3-Clause
@@ -26,7 +26,7 @@
Source0: https://github.com/mjs/imapclient/archive/%{version}.tar.gz
BuildRequires: %{python_module pip}
BuildRequires: %{python_module pytest}
-BuildRequires: %{python_module setuptools >= 20.5}
+BuildRequires: %{python_module setuptools >= 80.9.0}
BuildRequires: %{python_module wheel}
BuildRequires: fdupes
BuildRequires: python-rpm-macros
++++++ 3.0.1.tar.gz -> 3.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/.github/workflows/main.yml
new/imapclient-3.1.0/.github/workflows/main.yml
--- old/imapclient-3.0.1/.github/workflows/main.yml 2023-12-02
09:20:41.000000000 +0100
+++ new/imapclient-3.1.0/.github/workflows/main.yml 2026-01-17
19:36:47.000000000 +0100
@@ -9,17 +9,19 @@
workflow_dispatch:
jobs:
test:
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-latest
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
python-version:
- - "3.7"
- "3.8"
- "3.9"
- "3.10"
- "3.11"
+ - "3.12"
+ - "3.13"
+ - "3.14"
- "pypy-3.9"
steps:
- uses: actions/checkout@v3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/.gitignore
new/imapclient-3.1.0/.gitignore
--- old/imapclient-3.0.1/.gitignore 2023-12-02 09:20:41.000000000 +0100
+++ new/imapclient-3.1.0/.gitignore 2026-01-17 19:36:47.000000000 +0100
@@ -3,6 +3,8 @@
*~
build/
dist/
+.venv
+venv
__pycache__/
IMAPClient.egg-info
doc/doctrees/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/AUTHORS.rst
new/imapclient-3.1.0/AUTHORS.rst
--- old/imapclient-3.0.1/AUTHORS.rst 2023-12-02 09:20:41.000000000 +0100
+++ new/imapclient-3.1.0/AUTHORS.rst 2026-01-17 19:36:47.000000000 +0100
@@ -45,3 +45,5 @@
- Stefan Wójcik
- Andrzej Bartosiński
- @axoroll7
+- Sean Whalen
+- Peter Wienemann
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/README.rst
new/imapclient-3.1.0/README.rst
--- old/imapclient-3.0.1/README.rst 2023-12-02 09:20:41.000000000 +0100
+++ new/imapclient-3.1.0/README.rst 2026-01-17 19:36:47.000000000 +0100
@@ -5,7 +5,7 @@
========================= ========================================
Current version 3.0.1
-Supported Python versions 3.7 - 3.11
+Supported Python versions 3.8 - 3.14
License New BSD
Project home https://github.com/mjs/imapclient/
PyPI https://pypi.python.org/pypi/IMAPClient
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/doc/src/advanced.rst
new/imapclient-3.1.0/doc/src/advanced.rst
--- old/imapclient-3.0.1/doc/src/advanced.rst 2023-12-02 09:20:41.000000000
+0100
+++ new/imapclient-3.1.0/doc/src/advanced.rst 2026-01-17 19:36:47.000000000
+0100
@@ -135,7 +135,7 @@
ssl bool Use SSL/TLS to connect.
starttls bool Use STARTTLS to connect.
ssl_check_hostname bool If true and SSL is in use, check that certificate
matches the hostname (defaults to true)
-ssl_verify_cert bool If true and SSL is in use, check that the
certifcate is valid (defaults to true).
+ssl_verify_cert bool If true and SSL is in use, check that the
certificate is valid (defaults to true).
ssl_ca_file string If SSL is true, use this to specify certificate
authority certs to validate with.
timeout int Time out I/O operations after this many seconds.
oauth2 bool If true, use OAUTH2 to authenticate (``username``
and ``password`` are ignored).
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/doc/src/conf.py
new/imapclient-3.1.0/doc/src/conf.py
--- old/imapclient-3.0.1/doc/src/conf.py 2023-12-02 09:20:41.000000000
+0100
+++ new/imapclient-3.1.0/doc/src/conf.py 2026-01-17 19:36:47.000000000
+0100
@@ -210,4 +210,4 @@
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
-man_pages = [("index", "imapclient", "IMAPClient Documentation", ["Menno
Smits"], 1)]
+man_pages = [("index", "imapclient", "IMAPClient Documentation", ["Menno
Smits"], 7)]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/doc/src/contributing.rst
new/imapclient-3.1.0/doc/src/contributing.rst
--- old/imapclient-3.0.1/doc/src/contributing.rst 2023-12-02
09:20:41.000000000 +0100
+++ new/imapclient-3.1.0/doc/src/contributing.rst 2026-01-17
19:36:47.000000000 +0100
@@ -70,9 +70,9 @@
./tox-all
The script passes any arguments on to tox. For example to run just the tests
-just against Python 3.7 do::
+just against Python 3.10 do::
- ./tox-all -e py37
+ ./tox-all -e py310
Writing Unit Tests
------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/doc/src/index.rst
new/imapclient-3.1.0/doc/src/index.rst
--- old/imapclient-3.0.1/doc/src/index.rst 2023-12-02 09:20:41.000000000
+0100
+++ new/imapclient-3.1.0/doc/src/index.rst 2026-01-17 19:36:47.000000000
+0100
@@ -30,7 +30,7 @@
to the base protocol. These are referred to in the documentation below
where relevant.
-Python versions 3.4 through 3.9 are officially supported.
+Python versions 3.8 through 3.14 are officially supported.
Getting Started
---------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/imapclient/imapclient.py
new/imapclient-3.1.0/imapclient/imapclient.py
--- old/imapclient-3.0.1/imapclient/imapclient.py 2023-12-02
09:20:41.000000000 +0100
+++ new/imapclient-3.1.0/imapclient/imapclient.py 2026-01-17
19:36:47.000000000 +0100
@@ -99,7 +99,7 @@
# Names of special folders that are common among providers
_POPULAR_SPECIAL_FOLDERS = {
- SENT: ("Sent", "Sent Items", "Sent items"),
+ SENT: ("Sent", "Sent Items", "Sent items", "Sent Messages"),
DRAFTS: ("Drafts",),
ARCHIVE: ("Archive",),
TRASH: ("Trash", "Deleted Items", "Deleted Messages", "Deleted"),
@@ -1157,9 +1157,11 @@
"about search criteria syntax..\n"
"https://imapclient.readthedocs.io/en/master/#imapclient.IMAPClient.search".format(
original_msg=m.group(1),
- criteria='"%s"' % criteria
- if not isinstance(criteria, list)
- else criteria,
+ criteria=(
+ '"%s"' % criteria
+ if not isinstance(criteria, list)
+ else criteria
+ ),
)
)
@@ -1675,6 +1677,10 @@
"""
command = command.upper()
+ # Check for LITERAL+ now because if capabilities haven't been cached
+ # yet, we can't call CAPABILITY while sending another command.
+ has_literal_plus = self.has_capability("LITERAL+")
+
if isinstance(args, tuple):
args = list(args)
if not isinstance(args, list):
@@ -1702,7 +1708,7 @@
# Now send the (unquoted) literal
if isinstance(item, _quoted):
item = item.original
- self._send_literal(tag, item)
+ self._send_literal(tag, item, has_literal_plus)
if not is_last:
self._imap.send(b" ")
else:
@@ -1717,9 +1723,9 @@
return self._imap._command_complete(to_unicode(command), tag)
- def _send_literal(self, tag, item):
+ def _send_literal(self, tag, item, has_literal_plus):
"""Send a single literal for the command with *tag*."""
- if b"LITERAL+" in self._cached_capabilities:
+ if has_literal_plus:
out = b" {" + str(len(item)).encode("ascii") + b"+}\r\n" + item
logger.debug("> %s", debug_trunc(out, 64))
self._imap.send(out)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/imapclient/response_types.py
new/imapclient-3.1.0/imapclient/response_types.py
--- old/imapclient-3.0.1/imapclient/response_types.py 2023-12-02
09:20:41.000000000 +0100
+++ new/imapclient-3.1.0/imapclient/response_types.py 2026-01-17
19:36:47.000000000 +0100
@@ -53,6 +53,7 @@
See :rfc:`3501#section-7.4.2` and :rfc:`2822` for further details.
"""
+
date: Optional[datetime.datetime]
subject: bytes
from_: Optional[Tuple["Address", ...]]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/imapclient/testable_imapclient.py
new/imapclient-3.1.0/imapclient/testable_imapclient.py
--- old/imapclient-3.0.1/imapclient/testable_imapclient.py 2023-12-02
09:20:41.000000000 +0100
+++ new/imapclient-3.1.0/imapclient/testable_imapclient.py 2026-01-17
19:36:47.000000000 +0100
@@ -2,7 +2,7 @@
# Released subject to the New BSD License
# Please see http://en.wikipedia.org/wiki/BSD_licenses
-from typing import Any, Dict
+from typing import Any, Dict, List
from unittest.mock import Mock
from .imapclient import IMAPClient
@@ -30,6 +30,8 @@
self.use_uid = True
self.sent = b"" # Accumulates what was given to send()
self.tagged_commands: Dict[Any, Any] = {}
+ self.untagged_responses: Dict[Any, Any] = {}
+ self.capabilities: List[str] = []
self._starttls_done = False
def send(self, data: bytes) -> None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/imapclient/tls.py
new/imapclient-3.1.0/imapclient/tls.py
--- old/imapclient-3.0.1/imapclient/tls.py 2023-12-02 09:20:41.000000000
+0100
+++ new/imapclient-3.1.0/imapclient/tls.py 2026-01-17 19:36:47.000000000
+0100
@@ -8,13 +8,9 @@
"""
import imaplib
-import io
import socket
import ssl
-from typing import Optional, TYPE_CHECKING
-
-if TYPE_CHECKING:
- from typing_extensions import Buffer
+from typing import Optional
def wrap_socket(
@@ -35,34 +31,15 @@
def __init__(
self,
host: str,
- port: int,
- ssl_context: Optional[ssl.SSLContext],
+ port: int = 993,
+ ssl_context: Optional[ssl.SSLContext] = None,
timeout: Optional[float] = None,
):
self.ssl_context = ssl_context
self._timeout = timeout
- imaplib.IMAP4.__init__(self, host, port)
- self.file: io.BufferedReader
-
- def open(
- self, host: str = "", port: int = 993, timeout: Optional[float] = None
- ) -> None:
- self.host = host
- self.port = port
- sock = socket.create_connection(
- (host, port), timeout if timeout is not None else self._timeout
- )
- self.sock = wrap_socket(sock, self.ssl_context, host)
- self.file = self.sock.makefile("rb")
-
- def read(self, size: int) -> bytes:
- return self.file.read(size)
-
- def readline(self) -> bytes:
- return self.file.readline()
+ super().__init__(host, port)
- def send(self, data: "Buffer") -> None:
- self.sock.sendall(data)
+ def _create_socket(self, timeout: Optional[float]) -> socket.socket:
+ sock = socket.create_connection((self.host, self.port),
timeout=timeout)
- def shutdown(self) -> None:
- imaplib.IMAP4.shutdown(self)
+ return wrap_socket(sock, self.ssl_context, self.host)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/imapclient/version.py
new/imapclient-3.1.0/imapclient/version.py
--- old/imapclient-3.0.1/imapclient/version.py 2023-12-02 09:20:41.000000000
+0100
+++ new/imapclient-3.1.0/imapclient/version.py 2026-01-17 19:36:47.000000000
+0100
@@ -4,7 +4,7 @@
from typing import Tuple
-version_info = (3, 0, 1, "final")
+version_info = (3, 1, 0, "final")
def _imapclient_version_string(vinfo: Tuple[int, int, int, str]) -> str:
@@ -21,4 +21,4 @@
maintainer_email = "[email protected]"
author = "Menno Finlay-Smits"
-author_email = "[email protected]"
+author_email = "[email protected]"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/requirements-dev.txt
new/imapclient-3.1.0/requirements-dev.txt
--- old/imapclient-3.0.1/requirements-dev.txt 2023-12-02 09:20:41.000000000
+0100
+++ new/imapclient-3.1.0/requirements-dev.txt 2026-01-17 19:36:47.000000000
+0100
@@ -1,6 +1,7 @@
-sphinx==6.2.1
-black==23.11.0
-flake8==6.1.0
+sphinx==8.0.0
+black==25.11.0
+flake8==7.3.0
isort==5.12.0
-mypy==1.6.1
-pylint==3.0.2
+mypy==1.8.0
+pylint==3.2.6
+setuptools==80.9.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/setup.py
new/imapclient-3.1.0/setup.py
--- old/imapclient-3.0.1/setup.py 2023-12-02 09:20:41.000000000 +0100
+++ new/imapclient-3.1.0/setup.py 2026-01-17 19:36:47.000000000 +0100
@@ -27,7 +27,7 @@
* Convenience methods are provided for commonly used functionality.
* Exceptions are raised when errors occur.
-Python versions 3.7 through 3.11 are officially supported.
+Python versions 3.8 through 3.13 are officially supported.
IMAPClient includes comprehensive units tests and automated
functional tests that can be run against a live IMAP server.
@@ -50,7 +50,7 @@
package_data=dict(imapclient=["examples/*.py"]),
extras_require={"doc": doc_deps},
long_description=desc,
- python_requires=">=3.7.0",
+ python_requires=">=3.8.0",
classifiers=[
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/imapclient-3.0.1/tox.ini new/imapclient-3.1.0/tox.ini
--- old/imapclient-3.0.1/tox.ini 2023-12-02 09:20:41.000000000 +0100
+++ new/imapclient-3.1.0/tox.ini 2026-01-17 19:36:47.000000000 +0100
@@ -1,7 +1,7 @@
[tox]
skipsdist = True
minversion = 3.0
-envlist=py37,py38,py39,py310,py311,black,isort,flake8,mypy,pylint
+envlist=py38,py39,py310,py311,py312,py313,black,isort,flake8,mypy,pylint
[testenv]
commands=python -m unittest