Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-oslo.cache for
openSUSE:Factory checked in at 2026-06-15 19:44:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-oslo.cache (Old)
and /work/SRC/openSUSE:Factory/.python-oslo.cache.new.1981 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-oslo.cache"
Mon Jun 15 19:44:33 2026 rev:23 rq:1359324 version:4.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-oslo.cache/python-oslo.cache.changes
2026-03-23 17:17:33.480129624 +0100
+++
/work/SRC/openSUSE:Factory/.python-oslo.cache.new.1981/python-oslo.cache.changes
2026-06-15 19:48:00.362889958 +0200
@@ -1,0 +2,25 @@
+Tue Jun 2 14:46:02 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 4.2.0:
+ * Drop Python 3.10
+ * tox: Use new constraints option
+ * Fix new mypy error
+ * typing: Fix return type
+ * Skip functional tests for unit test code update
+ * Skip functional jobs for git config updates
+ * Update packaging configuration
+ * ruff: Configure hacking as external linter
+ * Run functional tests in gate
+ * Remove [cache] enforce_fips_mode
+ * Create helper to document backends
+ * Update backends with tls_allowed_ciphers support
+ * Fix outdated lower bound of redis library
+ * Fix wrong module name in warning messages
+ * Drop unnecessary import
+ * Update master for stable/2026.1
+ * redis: Support tls_allowed_cipher
+ * Refactor setup of redis backend
+ * Drop verbose logs about config options
+ * Stop passing down tls_enabled argument
+
+-------------------------------------------------------------------
Old:
----
oslo_cache-4.1.1.tar.gz
New:
----
oslo_cache-4.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-oslo.cache.spec ++++++
--- /var/tmp/diff_new_pack.wZSufe/_old 2026-06-15 19:48:02.290970978 +0200
+++ /var/tmp/diff_new_pack.wZSufe/_new 2026-06-15 19:48:02.298971314 +0200
@@ -17,7 +17,7 @@
Name: python-oslo.cache
-Version: 4.1.1
+Version: 4.2.0
Release: 0
Summary: Cache storage for Openstack projects
License: Apache-2.0
@@ -29,12 +29,13 @@
BuildRequires: %{python_module oslo.i18n >= 5.0.0}
BuildRequires: %{python_module oslo.log >= 4.2.1}
BuildRequires: %{python_module oslo.utils >= 4.2.0}
-BuildRequires: %{python_module oslotest}
+BuildRequires: %{python_module oslotest >= 3.2.0}
+BuildRequires: %{python_module pbr >= 6.1.1}
BuildRequires: %{python_module pip}
-BuildRequires: %{python_module pymemcache}
-BuildRequires: %{python_module python-binary-memcached}
-BuildRequires: %{python_module python-memcached}
-BuildRequires: %{python_module stestr}
+BuildRequires: %{python_module pymemcache >= 3.5.0}
+BuildRequires: %{python_module python-binary-memcached >= 0.29.0}
+BuildRequires: %{python_module python-memcached >= 1.56}
+BuildRequires: %{python_module stestr >= 2.0.0}
BuildRequires: %{python_module wheel}
BuildRequires: openstack-macros
Requires: python-dogpile.cache >= 1.3.3
@@ -42,7 +43,7 @@
Requires: python-oslo.i18n >= 5.0.0
Requires: python-oslo.log >= 4.2.1
Requires: python-oslo.utils >= 4.2.0
-Requires: python-python-memcached
+Requires: python-python-memcached >= 1.56
BuildArch: noarch
%python_subpackages
++++++ oslo_cache-4.1.1.tar.gz -> oslo_cache-4.2.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/.zuul.yaml
new/oslo_cache-4.2.0/.zuul.yaml
--- old/oslo_cache-4.1.1/.zuul.yaml 2026-02-24 11:39:39.000000000 +0100
+++ new/oslo_cache-4.2.0/.zuul.yaml 2026-05-20 11:00:49.000000000 +0200
@@ -15,11 +15,14 @@
vars:
tox_envlist: functional
irrelevant-files:
+ - ^\.gitignore$
+ - ^\.gitreview$
- ^.*\.rst$
- ^doc/.*$
- LICENSE
- ^releasenotes/.*$
- ^\.pre-commit-config\.yaml$
+ - ^oslo_cache/tests/unit/.*$
- job:
name: oslo.cache-functional-etcd3gw
@@ -91,6 +94,14 @@
jobs:
- oslo.cache-functional-etcd3gw
- oslo.cache-functional-dogpile.cache.bmemcached
+ - oslo.cache-functional-dogpile.cache.pymemcache
+ - oslo.cache-functional-memcache_pool
+ - oslo.cache-functional-dogpile.cache.redis
+ - oslo.cache-functional-dogpile.cache.redis_sentinel
+ gate:
+ jobs:
+ - oslo.cache-functional-etcd3gw
+ - oslo.cache-functional-dogpile.cache.bmemcached
- oslo.cache-functional-dogpile.cache.pymemcache
- oslo.cache-functional-memcache_pool
- oslo.cache-functional-dogpile.cache.redis
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/ChangeLog
new/oslo_cache-4.2.0/ChangeLog
--- old/oslo_cache-4.1.1/ChangeLog 2026-02-24 11:40:07.000000000 +0100
+++ new/oslo_cache-4.2.0/ChangeLog 2026-05-20 11:01:54.000000000 +0200
@@ -1,10 +1,35 @@
CHANGES
=======
+4.2.0
+-----
+
+* Drop Python 3.10
+* tox: Use new constraints option
+* Fix new mypy error
+* typing: Fix return type
+* Skip functional tests for unit test code update
+* Skip functional jobs for git config updates
+* Update packaging configuration
+* ruff: Configure hacking as external linter
+* Run functional tests in gate
+* Remove [cache] enforce\_fips\_mode
+* Create helper to document backends
+* Update backends with tls\_allowed\_ciphers support
+* Fix outdated lower bound of redis library
+* Fix wrong module name in warning messages
+* Drop unnecessary import
+* Update master for stable/2026.1
+* redis: Support tls\_allowed\_cipher
+* Refactor setup of redis backend
+* Drop verbose logs about config options
+* Stop passing down tls\_enabled argument
+
4.1.1
-----
* Fix remaining access to [cache] memcache\_username/password
+* Replace remaining usage of deprecated options
4.1.0
-----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/PKG-INFO
new/oslo_cache-4.2.0/PKG-INFO
--- old/oslo_cache-4.1.1/PKG-INFO 2026-02-24 11:40:07.299274200 +0100
+++ new/oslo_cache-4.2.0/PKG-INFO 2026-05-20 11:01:54.194029600 +0200
@@ -1,24 +1,23 @@
Metadata-Version: 2.4
Name: oslo.cache
-Version: 4.1.1
+Version: 4.2.0
Summary: Cache storage for OpenStack projects.
Author-email: OpenStack <[email protected]>
-License: Apache-2.0
+License-Expression: Apache-2.0
Project-URL: Homepage, https://docs.openstack.org/oslo.cache
Project-URL: Repository, https://opendev.org/openstack/oslo.cache
Classifier: Environment :: OpenStack
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
-Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
-Requires-Python: >=3.10
+Requires-Python: >=3.11
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: dogpile.cache>=1.3.3
@@ -30,7 +29,7 @@
Requires-Dist: python-memcached>=1.56; extra == "dogpile"
Requires-Dist: pymemcache>=3.5.0; extra == "dogpile"
Requires-Dist: python-binary-memcached>=0.29.0; extra == "dogpile"
-Requires-Dist: redis>=3.0.0; extra == "dogpile"
+Requires-Dist: redis>=5.1.0; extra == "dogpile"
Provides-Extra: etcd3gw
Requires-Dist: etcd3gw>=0.2.0; extra == "etcd3gw"
Dynamic: license-file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/oslo.cache.egg-info/PKG-INFO
new/oslo_cache-4.2.0/oslo.cache.egg-info/PKG-INFO
--- old/oslo_cache-4.1.1/oslo.cache.egg-info/PKG-INFO 2026-02-24
11:40:07.000000000 +0100
+++ new/oslo_cache-4.2.0/oslo.cache.egg-info/PKG-INFO 2026-05-20
11:01:54.000000000 +0200
@@ -1,24 +1,23 @@
Metadata-Version: 2.4
Name: oslo.cache
-Version: 4.1.1
+Version: 4.2.0
Summary: Cache storage for OpenStack projects.
Author-email: OpenStack <[email protected]>
-License: Apache-2.0
+License-Expression: Apache-2.0
Project-URL: Homepage, https://docs.openstack.org/oslo.cache
Project-URL: Repository, https://opendev.org/openstack/oslo.cache
Classifier: Environment :: OpenStack
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: System Administrators
-Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
-Requires-Python: >=3.10
+Requires-Python: >=3.11
Description-Content-Type: text/x-rst
License-File: LICENSE
Requires-Dist: dogpile.cache>=1.3.3
@@ -30,7 +29,7 @@
Requires-Dist: python-memcached>=1.56; extra == "dogpile"
Requires-Dist: pymemcache>=3.5.0; extra == "dogpile"
Requires-Dist: python-binary-memcached>=0.29.0; extra == "dogpile"
-Requires-Dist: redis>=3.0.0; extra == "dogpile"
+Requires-Dist: redis>=5.1.0; extra == "dogpile"
Provides-Extra: etcd3gw
Requires-Dist: etcd3gw>=0.2.0; extra == "etcd3gw"
Dynamic: license-file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/oslo.cache.egg-info/SOURCES.txt
new/oslo_cache-4.2.0/oslo.cache.egg-info/SOURCES.txt
--- old/oslo_cache-4.1.1/oslo.cache.egg-info/SOURCES.txt 2026-02-24
11:40:07.000000000 +0100
+++ new/oslo_cache-4.2.0/oslo.cache.egg-info/SOURCES.txt 2026-05-20
11:01:54.000000000 +0200
@@ -110,7 +110,10 @@
releasenotes/notes/redis-sentinel-18ba4a0da83dabc7.yaml
releasenotes/notes/redis-socket-keepalive-4c6cfde0be827282.yaml
releasenotes/notes/redis-ssl-ca14b4b99c2e5a84.yaml
+releasenotes/notes/redis-tls_allowed_ciphers-0ac7c50d83da1000.yaml
+releasenotes/notes/remove-enforce_fips_mode-a998b6870ab4c245.yaml
releasenotes/notes/remove-mongodb-backend-f539ec21d2a32848.yaml
+releasenotes/notes/remove-py310-2365f57e1178d92f.yaml
releasenotes/notes/remove-py38-bb1062b0726bf422.yaml
releasenotes/notes/remove-py39-7482eb74fcd78249.yaml
releasenotes/notes/switch-from-python-memcached-to-pymemcache-566e70b224f92b73.yaml
@@ -121,6 +124,7 @@
releasenotes/source/2024.2.rst
releasenotes/source/2025.1.rst
releasenotes/source/2025.2.rst
+releasenotes/source/2026.1.rst
releasenotes/source/conf.py
releasenotes/source/index.rst
releasenotes/source/newton.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/oslo.cache.egg-info/pbr.json
new/oslo_cache-4.2.0/oslo.cache.egg-info/pbr.json
--- old/oslo_cache-4.1.1/oslo.cache.egg-info/pbr.json 2026-02-24
11:40:07.000000000 +0100
+++ new/oslo_cache-4.2.0/oslo.cache.egg-info/pbr.json 2026-05-20
11:01:54.000000000 +0200
@@ -1 +1 @@
-{"git_version": "258c0f9", "is_release": true}
\ No newline at end of file
+{"git_version": "7fcb0a8", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/oslo.cache.egg-info/requires.txt
new/oslo_cache-4.2.0/oslo.cache.egg-info/requires.txt
--- old/oslo_cache-4.1.1/oslo.cache.egg-info/requires.txt 2026-02-24
11:40:07.000000000 +0100
+++ new/oslo_cache-4.2.0/oslo.cache.egg-info/requires.txt 2026-05-20
11:01:54.000000000 +0200
@@ -8,7 +8,7 @@
python-memcached>=1.56
pymemcache>=3.5.0
python-binary-memcached>=0.29.0
-redis>=3.0.0
+redis>=5.1.0
[etcd3gw]
etcd3gw>=0.2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/oslo_cache/_bmemcache_pool.py
new/oslo_cache-4.2.0/oslo_cache/_bmemcache_pool.py
--- old/oslo_cache-4.1.1/oslo_cache/_bmemcache_pool.py 2026-02-24
11:39:39.000000000 +0100
+++ new/oslo_cache-4.2.0/oslo_cache/_bmemcache_pool.py 2026-05-20
11:00:49.000000000 +0200
@@ -19,7 +19,7 @@
import warnings
try:
- import eventlet
+ import eventlet # type: ignore[import-not-found]
except ImportError:
eventlet = None
import bmemcached
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/oslo_cache/_memcache_pool.py
new/oslo_cache-4.2.0/oslo_cache/_memcache_pool.py
--- old/oslo_cache-4.1.1/oslo_cache/_memcache_pool.py 2026-02-24
11:39:39.000000000 +0100
+++ new/oslo_cache-4.2.0/oslo_cache/_memcache_pool.py 2026-05-20
11:00:49.000000000 +0200
@@ -26,7 +26,7 @@
import warnings
try:
- import eventlet
+ import eventlet # type: ignore[import-not-found]
except ImportError:
eventlet = None
import memcache
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/oslo_cache/_opts.py
new/oslo_cache-4.2.0/oslo_cache/_opts.py
--- old/oslo_cache-4.1.1/oslo_cache/_opts.py 2026-02-24 11:39:39.000000000
+0100
+++ new/oslo_cache-4.2.0/oslo_cache/_opts.py 2026-05-20 11:00:49.000000000
+0200
@@ -12,9 +12,23 @@
# License for the specific language governing permissions and limitations
# under the License.
+from collections.abc import Sequence
+
from oslo_config import cfg
+def _supported_backends_msg(backends: list[str]) -> str:
+ backends_in_msg = [f'``{name}``' for name in backends]
+ return ' '.join(
+ [
+ 'Currently supported by',
+ ', '.join(backends_in_msg[:-1]),
+ 'and',
+ backends_in_msg[-1],
+ ]
+ )
+
+
_DEFAULT_BACKEND = 'dogpile.cache.null'
FILE_OPTIONS = {
@@ -230,12 +244,16 @@
default=False,
help=(
'Global toggle for TLS usage when communicating with'
- ' the caching servers. Currently supported by '
- '``dogpile.cache.bmemcache``, '
- '``dogpile.cache.pymemcache``, '
- '``oslo_cache.memcache_pool``, '
- '``dogpile.cache.redis`` and '
- '``dogpile.cache.redis_sentinel``.'
+ ' the caching servers.'
+ + _supported_backends_msg(
+ [
+ 'dogpile.cache.bmemcache',
+ 'dogpile.cache.pymemcache',
+ 'oslo_cache.memcache_pool',
+ 'dogpile.cache.redis',
+ 'dogpile.cache.redis_sentinel',
+ ]
+ )
),
),
cfg.StrOpt(
@@ -277,10 +295,16 @@
'Set the available ciphers for sockets created with '
'the TLS context. It should be a string in the OpenSSL '
'cipher list format. If not specified, all OpenSSL enabled '
- 'ciphers will be available. Currently supported by '
- '``dogpile.cache.bmemcache``, '
- '``dogpile.cache.pymemcache`` and '
- '``oslo_cache.memcache_pool``.'
+ 'ciphers will be available. '
+ + _supported_backends_msg(
+ [
+ 'dogpile.cache.bmemcache',
+ 'dogpile.cache.pymemcache',
+ 'oslo_cache.memcache_pool',
+ 'dogpile.cache.redis',
+ 'dogpile.cache.redis_sentinel',
+ ]
+ )
),
),
cfg.FloatOpt(
@@ -292,9 +316,14 @@
],
help=(
'Timeout in seconds for every call to a server. '
- 'Currently supported by ``dogpile.cache.memcache``, '
- '``oslo_cache.memcache_pool``, ``dogpile.cache.redis`` '
- 'and ``dogpile.cache.redis_sentinel``.'
+ + _supported_backends_msg(
+ [
+ 'dogpile.cache.memcache',
+ 'oslo_cache.memcache_pool',
+ 'dogpile.cache.redis',
+ 'dogpile.cache.redis_sentinel',
+ ]
+ )
),
),
cfg.BoolOpt(
@@ -384,27 +413,6 @@
'back in the pool in the HashClient\'s internal mechanisms.'
),
),
- cfg.BoolOpt(
- 'enforce_fips_mode',
- default=False,
- deprecated_for_removal=True,
- deprecated_reason=(
- 'FIPS_mode_set API was removed in OpenSSL 3.0.0. '
- 'This option has no effect now.'
- ),
- help=(
- 'Global toggle for enforcing the OpenSSL FIPS mode. '
- 'This feature requires Python support. '
- 'This is available in Python 3.9 in all '
- 'environments and may have been backported to older '
- 'Python versions on select environments. If the Python '
- 'executable used does not support OpenSSL FIPS mode, '
- 'an exception will be raised. Currently supported by '
- '``dogpile.cache.bmemcache``, '
- '``dogpile.cache.pymemcache`` and '
- '``oslo_cache.memcache_pool``.'
- ),
- ),
],
}
@@ -437,7 +445,7 @@
)
-def list_opts() -> list[tuple[str, cfg.Opt]]:
+def list_opts() -> list[tuple[str, Sequence[cfg.Opt]]]:
"""Return a list of oslo_config options.
The returned list includes all oslo_config options which are registered as
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_cache-4.1.1/oslo_cache/backends/memcache_pool.py
new/oslo_cache-4.2.0/oslo_cache/backends/memcache_pool.py
--- old/oslo_cache-4.1.1/oslo_cache/backends/memcache_pool.py 2026-02-24
11:39:39.000000000 +0100
+++ new/oslo_cache-4.2.0/oslo_cache/backends/memcache_pool.py 2026-05-20
11:00:49.000000000 +0200
@@ -67,7 +67,7 @@
# Composed from GenericMemcachedBackend's and MemcacheArgs's __init__
def __init__(self, arguments: dict[str, Any]) -> None:
super().__init__(arguments) # type: ignore
- if arguments.get('tls_enabled', False) or arguments.get(
+ if arguments.get('tls_context') is not None or arguments.get(
'sasl_enabled', False
):
if arguments.get('sasl_enabled', False) and (
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/oslo_cache/core.py
new/oslo_cache-4.2.0/oslo_cache/core.py
--- old/oslo_cache-4.1.1/oslo_cache/core.py 2026-02-24 11:39:39.000000000
+0100
+++ new/oslo_cache-4.2.0/oslo_cache/core.py 2026-05-20 11:00:49.000000000
+0200
@@ -40,7 +40,6 @@
import socket
import ssl
from typing import Any
-import urllib.parse
import warnings
import dogpile.cache
@@ -169,46 +168,29 @@
_LOG.debug('Oslo Cache Config: %s', conf_dict)
- if conf.cache.backend == 'dogpile.cache.redis':
- if conf.cache.password is None:
- netloc = conf.cache.redis_server
- else:
- if conf.cache.username:
- netloc = (
- f'{conf.cache.username}:{conf.cache.password}'
- f'@{conf.cache.redis_server}'
- )
- else:
- netloc = f':{conf.cache.password}@{conf.cache.redis_server}'
-
- parts = urllib.parse.ParseResult(
- scheme=('rediss' if conf.cache.tls_enabled else 'redis'),
- netloc=netloc,
- path=str(conf.cache.redis_db),
- params='',
- query='',
- fragment='',
- )
-
- conf_dict.setdefault(
- f'{prefix}.arguments.url', urllib.parse.urlunparse(parts)
- )
- conf_dict[f'{prefix}.arguments.socket_timeout'] = (
- conf.cache.socket_timeout
- )
- elif conf.cache.backend == 'dogpile.cache.redis_sentinel':
+ if conf.cache.backend in (
+ 'dogpile.cache.redis',
+ 'dogpile.cache.redis_sentinel',
+ ):
for arg in ('username', 'password', 'socket_timeout'):
conf_dict[f'{prefix}.arguments.{arg}'] = getattr(conf.cache, arg)
conf_dict[f'{prefix}.arguments.db'] = conf.cache.redis_db
- conf_dict[f'{prefix}.arguments.service_name'] = (
- conf.cache.redis_sentinel_service_name
- )
- if conf.cache.redis_sentinels:
- conf_dict[f'{prefix}.arguments.sentinels'] = [
- _parse_sentinel(s) for s in conf.cache.redis_sentinels
- ]
+ if conf.cache.backend == 'dogpile.cache.redis_sentinel':
+ conf_dict[f'{prefix}.arguments.service_name'] = (
+ conf.cache.redis_sentinel_service_name
+ )
+ if conf.cache.redis_sentinels:
+ conf_dict[f'{prefix}.arguments.sentinels'] = [
+ _parse_sentinel(s) for s in conf.cache.redis_sentinels
+ ]
+ else:
+ host, port = netutils.parse_host_port(
+ conf.cache.redis_server, 6379
+ )
+ conf_dict[f'{prefix}.arguments.host'] = host
+ conf_dict[f'{prefix}.arguments.port'] = port
else:
# NOTE(yorik-sar): these arguments will be used for memcache-related
# backends. Use setdefault for url to support old-style setting through
@@ -289,61 +271,40 @@
'dogpile.cache.pymemcache',
'oslo_cache.memcache_pool',
):
- _LOG.debug('Oslo Cache TLS - CA: %s', conf.cache.tls_cafile)
tls_context = ssl.create_default_context(
cafile=conf.cache.tls_cafile
)
if conf.cache.tls_certfile is not None:
- _LOG.debug(
- 'Oslo Cache TLS - cert: %s', conf.cache.tls_certfile
- )
- _LOG.debug('Oslo Cache TLS - key: %s', conf.cache.tls_keyfile)
tls_context.load_cert_chain(
conf.cache.tls_certfile,
conf.cache.tls_keyfile,
)
if conf.cache.tls_allowed_ciphers is not None:
- _LOG.debug(
- 'Oslo Cache TLS - ciphers: %s',
- conf.cache.tls_allowed_ciphers,
- )
tls_context.set_ciphers(conf.cache.tls_allowed_ciphers)
conf_dict[f'{prefix}.arguments.tls_context'] = tls_context
-
- # pass the value of tls_enabled to the backend
- conf_dict[f'{prefix}.arguments.tls_enabled'] = (
- conf.cache.tls_enabled
- )
elif conf.cache.backend in (
'dogpile.cache.redis',
'dogpile.cache.redis_sentinel',
):
- if conf.cache.tls_allowed_ciphers is not None:
- raise exception.ConfigurationError(
- "Limiting allowed ciphers is not supported by "
- f"the {conf.cache.backend} backend"
- )
-
- conn_kwargs = {}
+ conn_kwargs = {'ssl': True}
if conf.cache.tls_cafile is not None:
- _LOG.debug('Oslo Cache TLS - CA: %s', conf.cache.tls_cafile)
conn_kwargs['ssl_ca_certs'] = conf.cache.tls_cafile
if conf.cache.tls_certfile is not None:
- _LOG.debug(
- 'Oslo Cache TLS - cert: %s', conf.cache.tls_certfile
- )
- _LOG.debug('Oslo Cache TLS - key: %s', conf.cache.tls_keyfile)
conn_kwargs.update(
{
'ssl_certfile': conf.cache.tls_certfile,
'ssl_keyfile': conf.cache.tls_keyfile,
}
)
+ if conf.cache.tls_allowed_ciphers is not None:
+ conn_kwargs.update(
+ {'ssl_ciphers': conf.cache.tls_allowed_ciphers}
+ )
+
if conf.cache.backend == 'dogpile.cache.redis_sentinel':
- conn_kwargs.update({'ssl': True})
conf_dict[f'{prefix}.arguments.connection_kwargs'] = (
conn_kwargs
)
@@ -409,7 +370,6 @@
"'dogpile.cache.pymemcache' backend."
)
raise exception.ConfigurationError(msg)
- import pymemcache
conf_dict[f'{prefix}.arguments.enable_retry_client'] = True
conf_dict[f'{prefix}.arguments.retry_attempts'] = (
@@ -451,7 +411,7 @@
to_str: Callable[[Any], str] = str,
) -> Callable[..., str]:
warnings.warn(
- "Use dogpile.cache.utils.function_key_generator instead",
+ "Use dogpile.cache.util.function_key_generator instead",
category=DeprecationWarning,
stacklevel=2,
)
@@ -464,7 +424,7 @@
to_str: Callable[[Any], str] = str,
) -> Callable[..., str]:
warnings.warn(
- "Use dogpile.cache.utils.kwarg_function_key_generator instead",
+ "Use dogpile.cache.util.kwarg_function_key_generator instead",
category=DeprecationWarning,
stacklevel=2,
)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_cache-4.1.1/oslo_cache/tests/functional/memcache_pool/test_cache_backend.py
new/oslo_cache-4.2.0/oslo_cache/tests/functional/memcache_pool/test_cache_backend.py
---
old/oslo_cache-4.1.1/oslo_cache/tests/functional/memcache_pool/test_cache_backend.py
2026-02-24 11:39:39.000000000 +0100
+++
new/oslo_cache-4.2.0/oslo_cache/tests/functional/memcache_pool/test_cache_backend.py
2026-05-20 11:00:49.000000000 +0200
@@ -44,7 +44,7 @@
enabled=True,
memcache_servers=[f'localhost:{MEMCACHED_PORT}'],
memcache_sasl_enabled=False,
- memcache_username='sasl_name',
- memcache_password='sasl_pswd',
+ username='sasl_name',
+ password='sasl_pswd',
)
super().setUp()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_cache-4.1.1/oslo_cache/tests/unit/test_cache_basics.py
new/oslo_cache-4.2.0/oslo_cache/tests/unit/test_cache_basics.py
--- old/oslo_cache-4.1.1/oslo_cache/tests/unit/test_cache_basics.py
2026-02-24 11:39:39.000000000 +0100
+++ new/oslo_cache-4.2.0/oslo_cache/tests/unit/test_cache_basics.py
2026-05-20 11:00:49.000000000 +0200
@@ -324,9 +324,12 @@
config_dict = cache._build_cache_config(self.config_fixture.conf)
self.assertEqual(
- 'redis://localhost:6379/0',
- config_dict['test_prefix.arguments.url'],
+ 'localhost', config_dict['test_prefix.arguments.host']
)
+ self.assertEqual(6379, config_dict['test_prefix.arguments.port'])
+ self.assertIsNone(config_dict['test_prefix.arguments.username'])
+ self.assertIsNone(config_dict['test_prefix.arguments.password'])
+ self.assertEqual(0, config_dict['test_prefix.arguments.db'])
self.assertFalse(self.config_fixture.conf.cache.tls_enabled)
self.assertNotIn(
'test_prefix.arguments.connection_kwargs', config_dict
@@ -390,6 +393,7 @@
tls_cafile='path_to_ca_file',
tls_keyfile='path_to_key_file',
tls_certfile='path_to_cert_file',
+ tls_allowed_ciphers='allowed_ciphers',
)
config_dict = cache._build_cache_config(self.config_fixture.conf)
@@ -397,14 +401,19 @@
self.assertTrue(self.config_fixture.conf.cache.tls_enabled)
self.assertIn('test_prefix.arguments.connection_kwargs', config_dict)
self.assertEqual(
- 'rediss://localhost:6379/0',
- config_dict['test_prefix.arguments.url'],
+ 'localhost', config_dict['test_prefix.arguments.host']
)
+ self.assertEqual(6379, config_dict['test_prefix.arguments.port'])
+ self.assertIsNone(config_dict['test_prefix.arguments.username'])
+ self.assertIsNone(config_dict['test_prefix.arguments.password'])
+ self.assertEqual(0, config_dict['test_prefix.arguments.db'])
self.assertEqual(
{
+ 'ssl': True,
'ssl_ca_certs': 'path_to_ca_file',
'ssl_keyfile': 'path_to_key_file',
'ssl_certfile': 'path_to_cert_file',
+ 'ssl_ciphers': 'allowed_ciphers',
},
config_dict['test_prefix.arguments.connection_kwargs'],
)
@@ -421,6 +430,7 @@
tls_cafile='path_to_ca_file',
tls_keyfile='path_to_key_file',
tls_certfile='path_to_cert_file',
+ tls_allowed_ciphers='allowed_ciphers',
)
config_dict = cache._build_cache_config(self.config_fixture.conf)
@@ -433,6 +443,7 @@
'ssl_ca_certs': 'path_to_ca_file',
'ssl_keyfile': 'path_to_key_file',
'ssl_certfile': 'path_to_cert_file',
+ 'ssl_ciphers': 'allowed_ciphers',
},
config_dict['test_prefix.arguments.connection_kwargs'],
)
@@ -443,6 +454,7 @@
'ssl_ca_certs': 'path_to_ca_file',
'ssl_keyfile': 'path_to_key_file',
'ssl_certfile': 'path_to_cert_file',
+ 'ssl_ciphers': 'allowed_ciphers',
},
config_dict['test_prefix.arguments.sentinel_kwargs'],
)
@@ -752,9 +764,11 @@
)
config_dict = cache._build_cache_config(self.config_fixture.conf)
- self.assertEqual(
- 'redis://[::1]:6379/0', config_dict['test_prefix.arguments.url']
- )
+ self.assertEqual('::1', config_dict['test_prefix.arguments.host'])
+ self.assertEqual(6379, config_dict['test_prefix.arguments.port'])
+ self.assertIsNone(config_dict['test_prefix.arguments.username'])
+ self.assertIsNone(config_dict['test_prefix.arguments.password'])
+ self.assertEqual(0, config_dict['test_prefix.arguments.db'])
self.assertEqual(
1.0, config_dict['test_prefix.arguments.socket_timeout']
)
@@ -774,9 +788,11 @@
)
config_dict = cache._build_cache_config(self.config_fixture.conf)
- self.assertEqual(
- 'redis://[::1]:6379/1', config_dict['test_prefix.arguments.url']
- )
+ self.assertEqual('::1', config_dict['test_prefix.arguments.host'])
+ self.assertEqual(6379, config_dict['test_prefix.arguments.port'])
+ self.assertIsNone(config_dict['test_prefix.arguments.username'])
+ self.assertIsNone(config_dict['test_prefix.arguments.password'])
+ self.assertEqual(1, config_dict['test_prefix.arguments.db'])
self.assertEqual(
1.0, config_dict['test_prefix.arguments.socket_timeout']
)
@@ -796,9 +812,11 @@
)
config_dict = cache._build_cache_config(self.config_fixture.conf)
- self.assertEqual(
- 'redis://[::1]:6379/0', config_dict['test_prefix.arguments.url']
- )
+ self.assertEqual('::1', config_dict['test_prefix.arguments.host'])
+ self.assertEqual(6379, config_dict['test_prefix.arguments.port'])
+ self.assertIsNone(config_dict['test_prefix.arguments.username'])
+ self.assertIsNone(config_dict['test_prefix.arguments.password'])
+ self.assertEqual(0, config_dict['test_prefix.arguments.db'])
self.assertEqual(
10.0, config_dict['test_prefix.arguments.socket_timeout']
)
@@ -818,9 +836,11 @@
)
config_dict = cache._build_cache_config(self.config_fixture.conf)
- self.assertEqual(
- 'redis://[::1]:6379/0', config_dict['test_prefix.arguments.url']
- )
+ self.assertEqual('::1', config_dict['test_prefix.arguments.host'])
+ self.assertEqual(6379, config_dict['test_prefix.arguments.port'])
+ self.assertIsNone(config_dict['test_prefix.arguments.username'])
+ self.assertIsNone(config_dict['test_prefix.arguments.password'])
+ self.assertEqual(0, config_dict['test_prefix.arguments.db'])
self.assertEqual(
1.0, config_dict['test_prefix.arguments.socket_timeout']
)
@@ -848,9 +868,11 @@
)
config_dict = cache._build_cache_config(self.config_fixture.conf)
- self.assertEqual(
- 'redis://[::1]:6379/0', config_dict['test_prefix.arguments.url']
- )
+ self.assertEqual('::1', config_dict['test_prefix.arguments.host'])
+ self.assertEqual(6379, config_dict['test_prefix.arguments.port'])
+ self.assertIsNone(config_dict['test_prefix.arguments.username'])
+ self.assertIsNone(config_dict['test_prefix.arguments.password'])
+ self.assertEqual(0, config_dict['test_prefix.arguments.db'])
self.assertEqual(
1.0, config_dict['test_prefix.arguments.socket_timeout']
)
@@ -875,10 +897,13 @@
)
config_dict = cache._build_cache_config(self.config_fixture.conf)
+ self.assertEqual('::1', config_dict['test_prefix.arguments.host'])
+ self.assertEqual(6379, config_dict['test_prefix.arguments.port'])
+ self.assertIsNone(config_dict['test_prefix.arguments.username'])
self.assertEqual(
- 'redis://:secrete@[::1]:6379/0',
- config_dict['test_prefix.arguments.url'],
+ 'secrete', config_dict['test_prefix.arguments.password']
)
+ self.assertEqual(0, config_dict['test_prefix.arguments.db'])
def test_cache_config_builder_redis_with_auth_and_user(self):
"""Validate we build a sane dogpile.cache dictionary config."""
@@ -887,15 +912,18 @@
config_prefix='test_prefix',
backend='dogpile.cache.redis',
redis_server='[::1]:6379',
- redis_username='user',
- redis_password='secrete',
+ username='user',
+ password='secrete',
)
config_dict = cache._build_cache_config(self.config_fixture.conf)
+ self.assertEqual('::1', config_dict['test_prefix.arguments.host'])
+ self.assertEqual(6379, config_dict['test_prefix.arguments.port'])
+ self.assertEqual('user', config_dict['test_prefix.arguments.username'])
self.assertEqual(
- 'redis://user:secrete@[::1]:6379/0',
- config_dict['test_prefix.arguments.url'],
+ 'secrete', config_dict['test_prefix.arguments.password']
)
+ self.assertEqual(0, config_dict['test_prefix.arguments.db'])
def test_cache_config_builder_redis_sentinel(self):
"""Validate we build a sane dogpile.cache dictionary config."""
@@ -1002,8 +1030,8 @@
enabled=True,
config_prefix='test_prefix',
backend='dogpile.cache.redis_sentinel',
- redis_username='user',
- redis_password='secrete',
+ username='user',
+ password='secrete',
redis_db=1,
redis_sentinels=[
'127.0.0.1:26379',
@@ -1100,6 +1128,7 @@
self.assertEqual(NO_VALUE, value)
def test_configure_non_region_object_raises_error(self):
+ # we're intentionally calling this with the wrong type
self.assertRaises(
exception.ConfigurationError,
cache.configure_cache_region,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/pyproject.toml
new/oslo_cache-4.2.0/pyproject.toml
--- old/oslo_cache-4.1.1/pyproject.toml 2026-02-24 11:39:39.000000000 +0100
+++ new/oslo_cache-4.2.0/pyproject.toml 2026-05-20 11:00:49.000000000 +0200
@@ -9,21 +9,20 @@
{name = "OpenStack", email = "[email protected]"},
]
readme = {file = "README.rst", content-type = "text/x-rst"}
-license = {text = "Apache-2.0"}
+license = "Apache-2.0"
dynamic = ["version", "dependencies"]
-requires-python = ">=3.10"
+requires-python = ">=3.11"
classifiers = [
"Environment :: OpenStack",
"Intended Audience :: Information Technology",
"Intended Audience :: System Administrators",
- "License :: OSI Approved :: Apache Software License",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
"Typing :: Typed",
]
@@ -36,7 +35,7 @@
"python-memcached>=1.56", # PSF
"pymemcache>=3.5.0", # Apache-2.0
"python-binary-memcached>=0.29.0", # MIT
- "redis>=3.0.0", # MIT
+ "redis>=5.1.0", # MIT
]
etcd3gw = [
"etcd3gw>=0.2.0", # Apache-2.0
@@ -50,10 +49,22 @@
"oslo_cache.dict" = "oslo_cache.backends.dictionary:DictCacheBackend"
"oslo_cache.etcd3gw" = "oslo_cache.backends.etcd3gw:Etcd3gwCacheBackend"
-[tool.setuptools]
-packages = [
- "oslo_cache"
-]
+[tool.setuptools.packages.find]
+include = ["oslo_cache"]
+
+[tool.mypy]
+python_version = "3.10"
+show_column_numbers = true
+show_error_context = true
+strict = true
+disable_error_code = ["import-untyped"]
+exclude = "(?x)(doc | releasenotes)"
+
+[[tool.mypy.overrides]]
+module = ["oslo_cache.tests.*"]
+disallow_untyped_calls = false
+disallow_untyped_defs = false
+disallow_subclassing_any = false
[tool.ruff]
line-length = 79
@@ -64,23 +75,10 @@
[tool.ruff.lint]
select = ["E4", "E5", "E7", "E9", "F", "G", "LOG", "S", "UP"]
+external = ["H"]
ignore = [
"S101", # asserts are only used for type narrowing
]
[tool.ruff.lint.per-file-ignores]
"oslo_cache/tests/*" = ["S"]
-
-[tool.mypy]
-python_version = "3.10"
-show_column_numbers = true
-show_error_context = true
-strict = true
-ignore_missing_imports = true
-exclude = '(?x)(doc | releasenotes)'
-
-[[tool.mypy.overrides]]
-module = ["oslo_cache.tests.*"]
-disallow_untyped_calls = false
-disallow_untyped_defs = false
-disallow_subclassing_any = false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_cache-4.1.1/releasenotes/notes/redis-tls_allowed_ciphers-0ac7c50d83da1000.yaml
new/oslo_cache-4.2.0/releasenotes/notes/redis-tls_allowed_ciphers-0ac7c50d83da1000.yaml
---
old/oslo_cache-4.1.1/releasenotes/notes/redis-tls_allowed_ciphers-0ac7c50d83da1000.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/oslo_cache-4.2.0/releasenotes/notes/redis-tls_allowed_ciphers-0ac7c50d83da1000.yaml
2026-05-20 11:00:49.000000000 +0200
@@ -0,0 +1,8 @@
+---
+features:
+ - |
+ The following backends now support the ``[cache] tls_allowed_ciphers``
+ option. Note that using this option requires redis-py 5.1.0 or later.
+
+ - ``dogpile.cache.redis``
+ - ``dogpile.cache.redis_sentinel``
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_cache-4.1.1/releasenotes/notes/remove-enforce_fips_mode-a998b6870ab4c245.yaml
new/oslo_cache-4.2.0/releasenotes/notes/remove-enforce_fips_mode-a998b6870ab4c245.yaml
---
old/oslo_cache-4.1.1/releasenotes/notes/remove-enforce_fips_mode-a998b6870ab4c245.yaml
1970-01-01 01:00:00.000000000 +0100
+++
new/oslo_cache-4.2.0/releasenotes/notes/remove-enforce_fips_mode-a998b6870ab4c245.yaml
2026-05-20 11:00:49.000000000 +0200
@@ -0,0 +1,4 @@
+---
+upgrade:
+ - |
+ The deprecated ``[cache] enforce_fips_mode`` option has been removed.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/oslo_cache-4.1.1/releasenotes/notes/remove-py310-2365f57e1178d92f.yaml
new/oslo_cache-4.2.0/releasenotes/notes/remove-py310-2365f57e1178d92f.yaml
--- old/oslo_cache-4.1.1/releasenotes/notes/remove-py310-2365f57e1178d92f.yaml
1970-01-01 01:00:00.000000000 +0100
+++ new/oslo_cache-4.2.0/releasenotes/notes/remove-py310-2365f57e1178d92f.yaml
2026-05-20 11:00:49.000000000 +0200
@@ -0,0 +1,5 @@
+---
+upgrade:
+ - |
+ Support for Python 3.10 has been removed. Now the minimum python version
+ supported is 3.11.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/releasenotes/source/2026.1.rst
new/oslo_cache-4.2.0/releasenotes/source/2026.1.rst
--- old/oslo_cache-4.1.1/releasenotes/source/2026.1.rst 1970-01-01
01:00:00.000000000 +0100
+++ new/oslo_cache-4.2.0/releasenotes/source/2026.1.rst 2026-05-20
11:00:49.000000000 +0200
@@ -0,0 +1,6 @@
+===========================
+2026.1 Series Release Notes
+===========================
+
+.. release-notes::
+ :branch: stable/2026.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/releasenotes/source/index.rst
new/oslo_cache-4.2.0/releasenotes/source/index.rst
--- old/oslo_cache-4.1.1/releasenotes/source/index.rst 2026-02-24
11:39:39.000000000 +0100
+++ new/oslo_cache-4.2.0/releasenotes/source/index.rst 2026-05-20
11:00:49.000000000 +0200
@@ -6,6 +6,7 @@
:maxdepth: 1
unreleased
+ 2026.1
2025.2
2025.1
2024.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/test-requirements.txt
new/oslo_cache-4.2.0/test-requirements.txt
--- old/oslo_cache-4.1.1/test-requirements.txt 2026-02-24 11:39:39.000000000
+0100
+++ new/oslo_cache-4.2.0/test-requirements.txt 2026-05-20 11:00:49.000000000
+0200
@@ -5,4 +5,4 @@
python-binary-memcached>=0.29.0 # MIT
python-memcached>=1.56 # PSF
etcd3gw>=0.2.0 # Apache-2.0
-redis>=3.0.0 # MIT
+redis>=5.0.0 # MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/oslo_cache-4.1.1/tox.ini new/oslo_cache-4.2.0/tox.ini
--- old/oslo_cache-4.1.1/tox.ini 2026-02-24 11:39:39.000000000 +0100
+++ new/oslo_cache-4.2.0/tox.ini 2026-05-20 11:00:49.000000000 +0200
@@ -1,12 +1,13 @@
[tox]
-minversion = 3.18.0
+minversion = 4.28.0
envlist = py3,pep8
[testenv]
allowlist_externals =
find
+constraints =
+
{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
deps =
-
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
commands =
@@ -46,7 +47,6 @@
allowlist_externals =
rm
deps =
-
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-r{toxinidir}/doc/requirements.txt
commands =
rm -fr doc/build