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