Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-dogpile.cache for 
openSUSE:Factory checked in at 2022-03-30 20:36:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-dogpile.cache (Old)
 and      /work/SRC/openSUSE:Factory/.python-dogpile.cache.new.1900 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-dogpile.cache"

Wed Mar 30 20:36:24 2022 rev:34 rq:966023 version:1.1.5

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-dogpile.cache/python-dogpile.cache.changes    
    2021-12-05 22:47:10.473434229 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-dogpile.cache.new.1900/python-dogpile.cache.changes
      2022-03-30 20:36:40.489353220 +0200
@@ -1,0 +2,8 @@
+Wed Mar 30 09:37:29 UTC 2022 - Luigi Baldoni <[email protected]>
+
+- Update to version 1.1.5
+  * Added support for additional pymemcache HashClient
+    parameters: retry_attempts, retry_timeout, and
+    dead_timeout.
+
+-------------------------------------------------------------------

Old:
----
  dogpile.cache-1.1.4.tar.gz

New:
----
  dogpile.cache-1.1.5.tar.gz

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

Other differences:
------------------
++++++ python-dogpile.cache.spec ++++++
--- /var/tmp/diff_new_pack.6ceaMC/_old  2022-03-30 20:36:40.993353641 +0200
+++ /var/tmp/diff_new_pack.6ceaMC/_new  2022-03-30 20:36:40.997353644 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-dogpile.cache
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,10 +19,10 @@
 %{?!python_module:%define python_module() python3-%{**}}
 %global pythons python3
 Name:           python-dogpile.cache
-Version:        1.1.4
+Version:        1.1.5
 Release:        0
 %define modname dogpile.cache
-%define modver  1_1_4
+%define modver  1_1_5
 Summary:        A caching front-end based on the Dogpile lock
 License:        BSD-3-Clause
 URL:            https://github.com/sqlalchemy/dogpile.cache

++++++ dogpile.cache-1.1.4.tar.gz -> dogpile.cache-1.1.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dogpile.cache-rel_1_1_4/.gitreview 
new/dogpile.cache-rel_1_1_5/.gitreview
--- old/dogpile.cache-rel_1_1_4/.gitreview      2021-09-02 16:42:13.000000000 
+0200
+++ new/dogpile.cache-rel_1_1_5/.gitreview      2022-01-19 19:23:08.000000000 
+0100
@@ -1,5 +1,5 @@
 [gerrit]
 host=gerrit.sqlalchemy.org
 project=sqlalchemy/dogpile.cache
-defaultbranch=master
+defaultbranch=main
 port=29418
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dogpile.cache-rel_1_1_4/LICENSE 
new/dogpile.cache-rel_1_1_5/LICENSE
--- old/dogpile.cache-rel_1_1_4/LICENSE 2021-09-02 16:42:13.000000000 +0200
+++ new/dogpile.cache-rel_1_1_5/LICENSE 2022-01-19 19:23:08.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright 2005-2021 Michael Bayer.
+Copyright 2005-2022 Michael Bayer.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
 this software and associated documentation files (the "Software"), to deal in
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dogpile.cache-rel_1_1_4/docs/build/changelog.rst 
new/dogpile.cache-rel_1_1_5/docs/build/changelog.rst
--- old/dogpile.cache-rel_1_1_4/docs/build/changelog.rst        2021-09-02 
16:42:13.000000000 +0200
+++ new/dogpile.cache-rel_1_1_5/docs/build/changelog.rst        2022-01-19 
19:23:08.000000000 +0100
@@ -3,6 +3,25 @@
 =========
 
 .. changelog::
+    :version: 1.1.5
+    :released: Wed Jan 19 2022
+
+    .. change::
+        :tags: usecase, memcached
+
+        Added support for additional pymemcache ``HashClient`` parameters
+        ``retry_attempts``, ``retry_timeout``, and
+        ``dead_timeout``.
+
+        .. seealso::
+
+            :paramref:`.PyMemcacheBackend.hashclient_retry_attempts`
+
+            :paramref:`.PyMemcacheBackend.hashclient_retry_timeout`
+
+            :paramref:`.PyMemcacheBackend.dead_timeout`
+
+.. changelog::
     :version: 1.1.4
     :released: Thu Sep 2 2021
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dogpile.cache-rel_1_1_4/docs/build/conf.py 
new/dogpile.cache-rel_1_1_5/docs/build/conf.py
--- old/dogpile.cache-rel_1_1_4/docs/build/conf.py      2021-09-02 
16:42:13.000000000 +0200
+++ new/dogpile.cache-rel_1_1_5/docs/build/conf.py      2022-01-19 
19:23:08.000000000 +0100
@@ -65,7 +65,7 @@
 
 # General information about the project.
 project = "dogpile.cache"
-copyright = "2011-2021 Mike Bayer"
+copyright = "2011-2022 Mike Bayer"
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
@@ -74,7 +74,7 @@
 # The short X.Y version.
 version = dogpile.__version__
 # The full version, including alpha/beta/rc tags.
-release = "1.1.4"
+release = "1.1.5"
 
 
 # The language for content autogenerated by Sphinx. Refer to documentation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dogpile.cache-rel_1_1_4/dogpile/__init__.py 
new/dogpile.cache-rel_1_1_5/dogpile/__init__.py
--- old/dogpile.cache-rel_1_1_4/dogpile/__init__.py     2021-09-02 
16:42:13.000000000 +0200
+++ new/dogpile.cache-rel_1_1_5/dogpile/__init__.py     2022-01-19 
19:23:08.000000000 +0100
@@ -1,4 +1,4 @@
-__version__ = "1.1.4"
+__version__ = "1.1.5"
 
 from .lock import Lock  # noqa
 from .lock import NeedRegenerationException  # noqa
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dogpile.cache-rel_1_1_4/dogpile/cache/api.py 
new/dogpile.cache-rel_1_1_5/dogpile/cache/api.py
--- old/dogpile.cache-rel_1_1_4/dogpile/cache/api.py    2021-09-02 
16:42:13.000000000 +0200
+++ new/dogpile.cache-rel_1_1_5/dogpile/cache/api.py    2022-01-19 
19:23:08.000000000 +0100
@@ -152,7 +152,7 @@
 
     """
 
-    serializer: Union[None, Serializer, staticmethod] = None
+    serializer: Union[None, Serializer] = None
     """Serializer function that will be used by default if not overridden
     by the region.
 
@@ -160,7 +160,7 @@
 
     """
 
-    deserializer: Union[None, Deserializer, staticmethod] = None
+    deserializer: Union[None, Deserializer] = None
     """deserializer function that will be used by default if not overridden
     by the region.
 
@@ -446,10 +446,10 @@
 
 
 class DefaultSerialization:
-    serializer: Union[None, Serializer, staticmethod] = staticmethod(
+    serializer: Union[None, Serializer] = staticmethod(  # type: ignore
         pickle.dumps
     )
-    deserializer: Union[None, Deserializer, staticmethod] = staticmethod(
+    deserializer: Union[None, Deserializer] = staticmethod(  # type: ignore
         pickle.loads
     )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/dogpile.cache-rel_1_1_4/dogpile/cache/backends/memcached.py 
new/dogpile.cache-rel_1_1_5/dogpile/cache/backends/memcached.py
--- old/dogpile.cache-rel_1_1_4/dogpile/cache/backends/memcached.py     
2021-09-02 16:42:13.000000000 +0200
+++ new/dogpile.cache-rel_1_1_5/dogpile/cache/backends/memcached.py     
2022-01-19 19:23:08.000000000 +0100
@@ -513,13 +513,14 @@
 
      .. versionadded:: 1.1.4
 
-    :param retry_attempts: how many times to attempt an action before
-     failing. Must be 1 or above. Defaults to None.
+    :param retry_attempts: how many times to attempt an action with
+     pymemcache's retrying wrapper before failing. Must be 1 or above.
+     Defaults to None.
 
      .. versionadded:: 1.1.4
 
     :param retry_delay: optional int|float, how many seconds to sleep between
-     each attempt. Defaults to None.
+     each attempt. Used by the retry wrapper. Defaults to None.
 
      .. versionadded:: 1.1.4
 
@@ -537,6 +538,22 @@
 
      .. versionadded:: 1.1.4
 
+    :param hashclient_retry_attempts: Amount of times a client should be tried
+     before it is marked dead and removed from the pool in the HashClient's
+     internal mechanisms.
+
+     .. versionadded:: 1.1.5
+
+    :param hashclient_retry_timeout: Time in seconds that should pass between
+     retry attempts in the HashClient's internal mechanisms.
+
+     .. versionadded:: 1.1.5
+
+    :param dead_timeout: Time in seconds before attempting to add a node
+     back in the pool in the HashClient's internal mechanisms.
+
+     .. versionadded:: 1.1.5
+
     """  # noqa E501
 
     def __init__(self, arguments):
@@ -551,6 +568,13 @@
         self.retry_delay = arguments.get("retry_delay", None)
         self.retry_for = arguments.get("retry_for", None)
         self.do_not_retry_for = arguments.get("do_not_retry_for", None)
+        self.hashclient_retry_attempts = arguments.get(
+            "hashclient_retry_attempts", 2
+        )
+        self.hashclient_retry_timeout = arguments.get(
+            "hashclient_retry_timeout", 1
+        )
+        self.dead_timeout = arguments.get("hashclient_dead_timeout", 60)
         if (
             self.retry_delay is not None
             or self.retry_attempts is not None
@@ -571,12 +595,14 @@
             "serde": self.serde,
             "default_noreply": self.default_noreply,
             "tls_context": self.tls_context,
+            "retry_attempts": self.hashclient_retry_attempts,
+            "retry_timeout": self.hashclient_retry_timeout,
+            "dead_timeout": self.dead_timeout,
         }
         if self.socket_keepalive is not None:
             _kwargs.update({"socket_keepalive": self.socket_keepalive})
 
         client = pymemcache.client.hash.HashClient(self.url, **_kwargs)
-
         if self.enable_retry_client:
             return pymemcache.client.retrying.RetryingClient(
                 client,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dogpile.cache-rel_1_1_4/hash_port.py 
new/dogpile.cache-rel_1_1_5/hash_port.py
--- old/dogpile.cache-rel_1_1_4/hash_port.py    2021-09-02 16:42:13.000000000 
+0200
+++ new/dogpile.cache-rel_1_1_5/hash_port.py    2022-01-19 19:23:08.000000000 
+0100
@@ -25,4 +25,4 @@
 
 dir_ = os.getcwd()
 
-print(hash(dir_) % (end - start)) + start
+print((hash(dir_) % (end - start)) + start)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/dogpile.cache-rel_1_1_4/tests/cache/test_memcached_backend.py 
new/dogpile.cache-rel_1_1_5/tests/cache/test_memcached_backend.py
--- old/dogpile.cache-rel_1_1_4/tests/cache/test_memcached_backend.py   
2021-09-02 16:42:13.000000000 +0200
+++ new/dogpile.cache-rel_1_1_5/tests/cache/test_memcached_backend.py   
2022-01-19 19:23:08.000000000 +0100
@@ -8,11 +8,12 @@
 
 import pytest
 
-from dogpile.cache import make_region
 from dogpile.cache.backends.memcached import GenericMemcachedBackend
 from dogpile.cache.backends.memcached import MemcachedBackend
 from dogpile.cache.backends.memcached import PylibmcBackend
+from dogpile.cache.backends.memcached import PyMemcacheBackend
 from . import eq_
+from . import is_
 from ._fixtures import _GenericBackendTest
 from ._fixtures import _GenericMutexTest
 from ._fixtures import _GenericSerializerTest
@@ -171,20 +172,6 @@
 class PyMemcacheTest(_NonDistributedMemcachedTest):
     backend = "dogpile.cache.pymemcache"
 
-    def test_pymemcache_enable_retry_client_not_set(self):
-        with mock.patch("warnings.warn") as warn_mock:
-            _ = make_region().configure(
-                "dogpile.cache.pymemcache",
-                arguments={"url": "foo", "retry_attempts": 2},
-            )
-            eq_(
-                warn_mock.mock_calls[0],
-                mock.call(
-                    "enable_retry_client is not set; retry options "
-                    "will be ignored"
-                ),
-            )
-
 
 class PyMemcacheDistributedWithTimeoutTest(
     _DistributedMemcachedWithTimeoutTest
@@ -227,6 +214,136 @@
     }
 
 
+class PyMemcacheArgsTest(TestCase):
+    # TODO: convert dogpile to be able to use pytest.fixtures (remove
+    # unittest.TestCase dependency) and use that to set up the mock module
+    # instead of an explicit method call
+    def _mock_pymemcache_fixture(self):
+        self.hash_client = mock.Mock()
+        self.retrying_client = mock.Mock()
+        self.pickle_serde = mock.Mock()
+        pymemcache_module = mock.Mock(
+            serde=mock.Mock(pickle_serde=self.pickle_serde),
+            client=mock.Mock(
+                hash=mock.Mock(HashClient=self.hash_client),
+                retrying=mock.Mock(RetryingClient=self.retrying_client),
+            ),
+        )
+        return mock.patch(
+            "dogpile.cache.backends.memcached.pymemcache", pymemcache_module
+        )
+
+    def test_pymemcache_hashclient_retry_attempts(self):
+        config_args = {
+            "url": "127.0.0.1:11211",
+            "hashclient_retry_attempts": 4,
+        }
+
+        with self._mock_pymemcache_fixture():
+            backend = MockPyMemcacheBackend(config_args)
+            is_(backend._create_client(), self.hash_client())
+            eq_(
+                self.hash_client.mock_calls[0],
+                mock.call(
+                    ["127.0.0.1:11211"],
+                    serde=self.pickle_serde,
+                    default_noreply=False,
+                    tls_context=None,
+                    retry_attempts=4,
+                    retry_timeout=1,
+                    dead_timeout=60,
+                ),
+            )
+            eq_(self.retrying_client.mock_calls, [])
+
+    def test_pymemcache_hashclient_retry_timeout(self):
+        config_args = {"url": "127.0.0.1:11211", "hashclient_retry_timeout": 4}
+        with self._mock_pymemcache_fixture():
+            backend = MockPyMemcacheBackend(config_args)
+            is_(backend._create_client(), self.hash_client())
+            eq_(
+                self.hash_client.mock_calls[0],
+                mock.call(
+                    ["127.0.0.1:11211"],
+                    serde=self.pickle_serde,
+                    default_noreply=False,
+                    tls_context=None,
+                    retry_attempts=2,
+                    retry_timeout=4,
+                    dead_timeout=60,
+                ),
+            )
+            eq_(self.retrying_client.mock_calls, [])
+
+    def test_pymemcache_hashclient_retry_timeout_w_enable_retry(self):
+        config_args = {
+            "url": "127.0.0.1:11211",
+            "hashclient_retry_timeout": 4,
+            "enable_retry_client": True,
+            "retry_attempts": 3,
+        }
+        with self._mock_pymemcache_fixture():
+            backend = MockPyMemcacheBackend(config_args)
+            is_(backend._create_client(), self.retrying_client())
+            eq_(
+                self.hash_client.mock_calls[0],
+                mock.call(
+                    ["127.0.0.1:11211"],
+                    serde=self.pickle_serde,
+                    default_noreply=False,
+                    tls_context=None,
+                    retry_attempts=2,
+                    retry_timeout=4,
+                    dead_timeout=60,
+                ),
+            )
+            eq_(
+                self.retrying_client.mock_calls[0],
+                mock.call(
+                    self.hash_client(),
+                    attempts=3,
+                    retry_delay=None,
+                    retry_for=None,
+                    do_not_retry_for=None,
+                ),
+            )
+
+    def test_pymemcache_dead_timeout(self):
+        config_args = {"url": "127.0.0.1:11211", "hashclient_dead_timeout": 4}
+        with self._mock_pymemcache_fixture():
+            backend = MockPyMemcacheBackend(config_args)
+            backend._create_client()
+            eq_(
+                self.hash_client.mock_calls,
+                [
+                    mock.call(
+                        ["127.0.0.1:11211"],
+                        serde=self.pickle_serde,
+                        default_noreply=False,
+                        tls_context=None,
+                        retry_attempts=2,
+                        retry_timeout=1,
+                        dead_timeout=4,
+                    )
+                ],
+            )
+            eq_(self.retrying_client.mock_calls, [])
+
+    def test_pymemcache_enable_retry_client_not_set(self):
+        config_args = {"url": "127.0.0.1:11211", "retry_attempts": 2}
+
+        with self._mock_pymemcache_fixture():
+            with mock.patch("warnings.warn") as warn_mock:
+                MockPyMemcacheBackend(config_args)
+                eq_(
+                    warn_mock.mock_calls[0],
+                    mock.call(
+                        "enable_retry_client is not set; retry options "
+                        "will be ignored"
+                    ),
+                )
+
+
 class MemcachedTest(_NonDistributedMemcachedTest):
     backend = "dogpile.cache.memcached"
 
@@ -253,6 +370,11 @@
         return MockClient(self.url)
 
 
+class MockPyMemcacheBackend(PyMemcacheBackend):
+    def _imports(self):
+        pass
+
+
 class MockMemcacheBackend(MemcachedBackend):
     def _imports(self):
         pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/dogpile.cache-rel_1_1_4/tox.ini 
new/dogpile.cache-rel_1_1_5/tox.ini
--- old/dogpile.cache-rel_1_1_4/tox.ini 2021-09-02 16:42:13.000000000 +0200
+++ new/dogpile.cache-rel_1_1_5/tox.ini 2022-01-19 19:23:08.000000000 +0100
@@ -51,7 +51,8 @@
 sitepackages=False
 usedevelop=True
 
-[testenv:mypy]
+
+[testenv:pep484]
 basepython = python3
 deps=
     mypy
@@ -64,6 +65,13 @@
     types-decorator
 commands = mypy ./dogpile/
 
+[testenv:mypy]
+basepython = python3
+deps=
+    {[testenv:pep484]deps}
+commands = mypy ./dogpile/
+
+
 # thanks to https://julien.danjou.info/the-best-flake8-extensions/
 [testenv:pep8]
 basepython = python3

Reply via email to