Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-Beaker for openSUSE:Factory 
checked in at 2024-04-21 20:27:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-Beaker (Old)
 and      /work/SRC/openSUSE:Factory/.python-Beaker.new.26366 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-Beaker"

Sun Apr 21 20:27:01 2024 rev:34 rq:1169355 version:1.13.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-Beaker/python-Beaker.changes      
2023-02-10 14:36:12.186237024 +0100
+++ /work/SRC/openSUSE:Factory/.python-Beaker.new.26366/python-Beaker.changes   
2024-04-21 20:28:31.752669204 +0200
@@ -1,0 +2,8 @@
+Sat Apr 20 13:26:25 UTC 2024 - Dirk Müller <dmuel...@suse.com>
+
+- update to 1.13.0:
+  * Fix validation messages for validate_key and encrypt_key
+  * Added support for rediscluster via ext:redisclusternm
+  * Removed the need to install mock library to run tests
+
+-------------------------------------------------------------------

Old:
----
  1.12.1.tar.gz

New:
----
  1.13.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-Beaker.spec ++++++
--- /var/tmp/diff_new_pack.Tr3Na1/_old  2024-04-21 20:28:33.820745097 +0200
+++ /var/tmp/diff_new_pack.Tr3Na1/_new  2024-04-21 20:28:33.820745097 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-Beaker
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           python-Beaker
-Version:        1.12.1
+Version:        1.13.0
 Release:        0
 Summary:        A Session and Caching library with WSGI Middleware
 License:        BSD-3-Clause

++++++ 1.12.1.tar.gz -> 1.13.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/beaker-1.12.1/.github/workflows/runtests.yml 
new/beaker-1.13.0/.github/workflows/runtests.yml
--- old/beaker-1.12.1/.github/workflows/runtests.yml    2023-02-04 
18:17:01.000000000 +0100
+++ new/beaker-1.13.0/.github/workflows/runtests.yml    2024-04-11 
22:27:23.000000000 +0200
@@ -26,6 +26,15 @@
         uses: supercharge/redis-github-action@1.4.0
       - name: Start MongoDB
         uses: supercharge/mongodb-github-action@1.8.0
+      - uses: vishnudxb/redis-cluster@1.0.9
+        with:
+          master1-port: 5000
+          master2-port: 5001
+          master3-port: 5002
+          slave1-port: 5003
+          slave2-port: 5004
+          slave3-port: 5005
+          sleep-duration: 5
       - name: Test with pytest
         run: |
           pytest -vv
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/beaker-1.12.1/CHANGELOG new/beaker-1.13.0/CHANGELOG
--- old/beaker-1.12.1/CHANGELOG 2023-02-04 18:17:01.000000000 +0100
+++ new/beaker-1.13.0/CHANGELOG 2024-04-11 22:27:23.000000000 +0200
@@ -1,3 +1,10 @@
+Release 1.13.0 (2024-04-11)
+===========================
+
+* Fix validation messages for validate_key and encrypt_key
+* Added support for rediscluster via ext:redisclusternm
+* Removed the need to install mock library to run tests
+
 Release 1.12.1 (2023-01-04)
 ===========================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/beaker-1.12.1/beaker/__init__.py 
new/beaker-1.13.0/beaker/__init__.py
--- old/beaker-1.12.1/beaker/__init__.py        2023-02-04 18:17:01.000000000 
+0100
+++ new/beaker-1.13.0/beaker/__init__.py        2024-04-11 22:27:23.000000000 
+0200
@@ -1 +1 @@
-__version__ = '1.12.1'
+__version__ = '1.13.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/beaker-1.12.1/beaker/cache.py 
new/beaker-1.13.0/beaker/cache.py
--- old/beaker-1.12.1/beaker/cache.py   2023-02-04 18:17:01.000000000 +0100
+++ new/beaker-1.13.0/beaker/cache.py   2024-04-11 22:27:23.000000000 +0200
@@ -22,6 +22,7 @@
 import beaker.ext.google as google
 import beaker.ext.mongodb as mongodb
 import beaker.ext.redisnm as redisnm
+import beaker.ext.redisclusternm as redisclusternm
 from functools import wraps
 
 # Initialize the cache region dict
@@ -126,7 +127,8 @@
     'ext:sqla': sqla.SqlaNamespaceManager,
     'ext:google': google.GoogleNamespaceManager,
     'ext:mongodb': mongodb.MongoNamespaceManager,
-    'ext:redis': redisnm.RedisNamespaceManager
+    'ext:redis': redisnm.RedisNamespaceManager,
+    'ext:rediscluster': redisclusternm.RedisClusterNamespaceManager,
 })
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/beaker-1.12.1/beaker/docs/modules/rediscluster.rst 
new/beaker-1.13.0/beaker/docs/modules/rediscluster.rst
--- old/beaker-1.12.1/beaker/docs/modules/rediscluster.rst      1970-01-01 
01:00:00.000000000 +0100
+++ new/beaker-1.13.0/beaker/docs/modules/rediscluster.rst      2024-04-11 
22:27:23.000000000 +0200
@@ -0,0 +1,10 @@
+:mod:`beaker.ext.redisclusternm` -- Redis cluster NameSpace Manager and 
Synchronizer
+==============================================================================
+
+.. automodule:: beaker.ext.redisclusternm
+
+Module Contents
+---------------
+
+.. autoclass:: RedisClusterNamespaceManager
+.. autoclass:: RedisClusterSynchronizer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/beaker-1.12.1/beaker/ext/redisclusternm.py 
new/beaker-1.13.0/beaker/ext/redisclusternm.py
--- old/beaker-1.12.1/beaker/ext/redisclusternm.py      1970-01-01 
01:00:00.000000000 +0100
+++ new/beaker-1.13.0/beaker/ext/redisclusternm.py      2024-04-11 
22:27:23.000000000 +0200
@@ -0,0 +1,100 @@
+import os
+import threading
+import time
+import pickle
+
+from beaker.container import NamespaceManager
+
+try:
+    import redis
+except ImportError:
+    redis = None
+
+from beaker.ext.redisnm import RedisNamespaceManager, RedisSynchronizer
+from beaker._compat import string_type
+
+
+class RedisClusterNamespaceManager(RedisNamespaceManager):
+    """Provides the :class:`.NamespaceManager` API over Redis cluster.
+
+    Provided ``urls`` can be both multiple redis connection strings separated 
by a comma or
+    an already existing RedisCluster instance.
+
+    Unlike a StrictRedis connection string, a RedisCluster one does not support
+    database indicators, it is zero by default.
+
+    Example: `redis://node-1:7001,redis://node-2:7002`
+
+    Additional options can be passed in kwargs (e.g. `username="redis", 
password="secure_password"`).
+
+    The data will be stored into redis keys, with their name
+    starting with ``beaker_cache:``.
+    """
+
+    def __init__(self, namespace, urls, timeout=None, **kwargs):
+        super(RedisNamespaceManager, self).__init__(namespace)
+        self.lock_dir = None  # Redis uses redis itself for locking.
+        self.timeout = timeout
+        self.nodes = []
+        self.options = kwargs
+
+        if redis is None:
+            raise RuntimeError('redis is not available')
+
+        if isinstance(urls, string_type):
+            for url in urls.split(','):
+                url_options = redis.connection.parse_url(url)
+                if 'db' in url_options:
+                    raise redis.exceptions.RedisClusterException(
+                        "A ``db`` querystring option can only be 0 in cluster 
mode"
+                    )
+                self.nodes.append(redis.cluster.ClusterNode(
+                    host=url_options.get('host'),
+                    port=url_options.get('port')
+                ))
+            self.client = RedisClusterNamespaceManager.clients.get(
+                urls, redis.cluster.RedisCluster, startup_nodes=self.nodes, 
**kwargs
+            )
+        else:
+            self.client = urls
+
+    def get_creation_lock(self, key):
+        return RedisClusterSynchronizer(self._format_key(key), self.client, 
self.nodes, **self.options)
+
+
+class RedisClusterSynchronizer(RedisSynchronizer):
+    """Synchronizer based on redis cluster.
+
+    Provided ``urls`` can be both multiple redis connection strings separated 
by a comma or
+    an already existing RedisCluster instance.
+
+    Unlike a StrictRedis connection string, a RedisCluster one does not support
+    database indicators, it is zero by default.
+
+    Example: ``redis://node-1:7001,redis://node-2:7002,
+
+    This Synchronizer only supports 1 reader or 1 writer at time, not 
concurrent readers.
+    """
+    RELEASE_LOCK_LUA = """
+        if redis.call('get', KEYS[1]) == ARGV[1] then
+            return redis.call('del', KEYS[1])
+        else
+            return 0
+        end
+    """
+
+    def __init__(self, identifier, urls, nodes=None, **kwargs):
+        super(RedisSynchronizer, self).__init__()
+        self.identifier = 'beaker_lock:%s' % identifier
+        if isinstance(urls, string_type):
+            self.client = RedisClusterNamespaceManager.clients.get(
+                urls, redis.cluster.RedisCluster, startup_nodes=nodes, **kwargs
+            )
+        else:
+            self.client = urls
+        self._release_lock = self.client.register_script(self.RELEASE_LOCK_LUA)
+
+    def do_release_write_lock(self):
+        identifier = self.identifier
+        owner_id = self._get_owner_id()
+        self._release_lock(keys=[identifier], args=[owner_id])
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/beaker-1.12.1/beaker/util.py 
new/beaker-1.13.0/beaker/util.py
--- old/beaker-1.12.1/beaker/util.py    2023-02-04 18:17:01.000000000 +0100
+++ new/beaker-1.13.0/beaker/util.py    2024-04-11 22:27:23.000000000 +0200
@@ -303,8 +303,8 @@
         ('id', (str,), "Session id must be a string."),
         ('key', (str,), "Session key must be a string."),
         ('secret', (str, NoneType), "Session secret must be a string."),
-        ('validate_key', (str, NoneType), "Session encrypt_key must be a 
string."),
-        ('encrypt_key', (str, NoneType), "Session validate_key must be a 
string."),
+        ('validate_key', (str, NoneType), "Session validate_key must be a 
string."),
+        ('encrypt_key', (str, NoneType), "Session encrypt_key must be a 
string."),
         ('encrypt_nonce_bits', (int, NoneType), "Session encrypt_nonce_bits 
must be a number"),
         ('secure', (bool, NoneType), "Session secure must be a boolean."),
         ('httponly', (bool, NoneType), "Session httponly must be a boolean."),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/beaker-1.12.1/setup.py new/beaker-1.13.0/setup.py
--- old/beaker-1.12.1/setup.py  2023-02-04 18:17:01.000000000 +0100
+++ new/beaker-1.13.0/setup.py  2024-04-11 22:27:23.000000000 +0200
@@ -23,7 +23,7 @@
     INSTALL_REQUIRES.append('funcsigs')
 
 
-TESTS_REQUIRE = ['pytest', 'Mock', 'pycryptodome']
+TESTS_REQUIRE = ['pytest', 'pycryptodome']
 
 if py_version == (2, 6):
     TESTS_REQUIRE.append('WebTest<2.0.24')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/beaker-1.12.1/tests/test_managers/test_ext_rediscluster.py 
new/beaker-1.13.0/tests/test_managers/test_ext_rediscluster.py
--- old/beaker-1.12.1/tests/test_managers/test_ext_rediscluster.py      
1970-01-01 01:00:00.000000000 +0100
+++ new/beaker-1.13.0/tests/test_managers/test_ext_rediscluster.py      
2024-04-11 22:27:23.000000000 +0200
@@ -0,0 +1,16 @@
+from beaker.cache import Cache
+from . import base
+
+
+class TestRedis(base.CacheManagerBaseTests):
+    CACHE_ARGS = {
+        'type': 'ext:rediscluster',
+        'urls': 'redis://localhost:5000'
+    }
+
+    def test_client_reuse(self):
+        cache1 = Cache('test1', **self.CACHE_ARGS)
+        cli1 = cache1.namespace.client
+        cache2 = Cache('test2', **self.CACHE_ARGS)
+        cli2 = cache2.namespace.client
+        self.assertTrue(cli1 is cli2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/beaker-1.12.1/tests/test_memcached.py 
new/beaker-1.13.0/tests/test_memcached.py
--- old/beaker-1.12.1/tests/test_memcached.py   2023-02-04 18:17:01.000000000 
+0100
+++ new/beaker-1.13.0/tests/test_memcached.py   2024-04-11 22:27:23.000000000 
+0200
@@ -1,7 +1,7 @@
 # coding: utf-8
 from beaker._compat import u_
 
-import mock
+import unittest.mock
 
 from beaker.cache import Cache, CacheManager, util
 from beaker.middleware import CacheMiddleware, SessionMiddleware
@@ -291,9 +291,9 @@
 
     def test_dont_use_pylibmc_client(self):
         from beaker.ext.memcached import _load_client
-        load_mock = mock.Mock()
+        load_mock = unittest.mock.Mock()
         load_mock.return_value = _load_client('memcache')
-        with mock.patch('beaker.ext.memcached._load_client', load_mock):
+        with unittest.mock.patch('beaker.ext.memcached._load_client', 
load_mock):
             cache = Cache('test', data_dir='./cache', url=mc_url, 
type="ext:memcached")
             assert not isinstance(cache.namespace, 
memcached.PyLibMCNamespaceManager)
             assert isinstance(cache.namespace, 
memcached.MemcachedNamespaceManager)

Reply via email to