NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2926 most downloaded on PyPI
A caching front-end based on the Dogpile lock.
Last release 11 months ago
11 Oct 2025
Release timing varies
gaps range from 2 weeks to 10 months
Nearly every release is documented
notes for 55 of 56 stable releases
1 version withdrawn
withdrawn after publishing
14 years old
58 releases · first in 2012
[feature] [redis] Added a new RedisBackend.lock_prefix parameter to the RedisBackend and ValkeyBackend backends to allow customization of the lock key
Released: Sat Oct 11 2025
[feature] [redis] Added a new RedisBackend.lock_prefix parameter to the
RedisBackend and ValkeyBackend backends to allow
customization of the lock key prefix. The prefix must be between 2 and 10
characters long and may contain any alphanumeric character and the symbols
_-.: . This allows for improved visual clarity when inspecting backend
keys, particularly when key names may be ambiguous with the default
_lock prefix. Pull request courtesy Jonathan Vanasco.
References: #76
[change] [tests] The top-level test runner has been changed to use nox, adding a
noxfile.py as well as some included modules. The tox.ini file
remains in place so that tox runs will continue to function in the near
term, however it will be eventually removed and improvements and
maintenance going forward will be only towards noxfile.py.
[change] [platform] Minimum Python version is now 3.10, as Python 3.9 is EOL.
One column per quarter.
[usecase] [redis] Added new parameters RedisBackend.lock_blocking_timeout and RedisBackend.lock_blocking to the Redis backend; and ValkeyBackend.lock_
Released: Fri Sep 12 2025
[usecase] [redis] Added new parameters RedisBackend.lock_blocking_timeout and
RedisBackend.lock_blocking to the Redis backend; and
ValkeyBackend.lock_blocking_timeout and
ValkeyBackend.lock_blocking to the Valkey backends. These
parameters are then passed onto the redis/valkey client Lock creation
methods and use the same defaults.
References: #271
[usecase] [redis] Added new parameters for the Redis/Valkey backends. These params are passed directly to the constructors:
- `RedisBackend.ssl`
- `ValkeyBackend.ssl`
These params default to None, and are only passed to the constructor if
set. The docstrings instruct users to submit all additional ssl_
prefixed params via the optional
RedisBackend.connection_kwargs or
ValkeyBackend.connection_kwargs parameter.
References: #276
[bug] [memory] Fixed issue where MemoryBackend.configure() would unexpectedly
modify the input arguments dictionary by removing its contents. The method
now preserves the original arguments dictionary as expected, consistent
with the behavior of other backend types. Pull request courtesy Nicolas
Simonds.
References: #273
…configuration for license, which eliminates loud deprecation warnings when building the package. Note this necessarily bumps setuptools build requirem…
Released: Sat Apr 26 2025
[usecase] [valkey] Added backend for valkey server. This is based on valkey-py as the driver.
Released: Tue Jan 28 2025
[bug] [redis] Fixes to the recently added RedisClusterBackend fixing a runtime typing
error that prevented it from running.
References: #263
setuptools<69.3 in pyproject.toml has been removed.
This pin was to prevent a sudden change to PEP 625 in setuptools from
taking place which changes the file name of SQLAlchemy's source
distribution on pypi to be an all lower case name, and the change was
extended to all SQLAlchemy projects to prevent any further surprises.
However, the presence of this pin is now holding back environments that
otherwise want to use a newer setuptools, so we've decided to move forward
with this change, with the assumption that build environments will have
largely accommodated the setuptools change by now.[usecase] [memcached] Added support for an additional pymemcached client parameter PyMemcacheBackend.memcached_expire_time. Pull request courtesy Taka
Released: Sun May 5 2024
PyMemcacheBackend.memcached_expire_time. Pull request
courtesy Takashi Kajinami.[bug] [typing] Fixed the return type for CacheRegion.get(), which was inadvertently
hardcoded to use CacheReturnType that only resolved to CachedValue
or NoValue. Fixed to return ValuePayload which resolves to
Any, as well as a new literal indicating an enum constant for
:data:.api.NO_VALUE. The :data:.api.NO_VALUE constant remains
available as the single element of this enum.
Unknown interpreted text role "data".
Unknown interpreted text role "data".
[usecase] [redis] Added a new backend RedisClusterBackend, allowing support for Redis Cluster. Pull request courtesy Maël Naccache Tüfekçi.
Released: Wed Feb 21 2024
[usecase] [redis] Added a new backend RedisClusterBackend, allowing support for
Redis Cluster. Pull request courtesy Maël Naccache Tüfekçi.
References: #250
[usecase] [redis] Added support for additional Redis client parameters
RedisBackend.socket_connect_timeout,
RedisBackend.socket_keepalive and
RedisBackend.socket_keepalive_options. Pull request courtesy
Takashi Kajinami.
References: #252
[usecase] [redis] Added new parameter RedisBackend.username to the Redis backend, and RedisSentinelBackend.username to the Redis Sentinel backend. The
Released: Wed Feb 7 2024
RedisBackend.username to the Redis
backend, and RedisSentinelBackend.username to the Redis
Sentinel backend. These parameters allow for username authentication in
Redis when RBAC is enabled. Pull request courtesy Takashi Kajinami.[feature] [region] Added new method CacheRegion.get_value_metadata() which can be used to get a value from the cache along with its metadata, includin
Released: Wed Dec 20 2023
[feature] [region] Added new method CacheRegion.get_value_metadata() which can be used
to get a value from the cache along with its metadata, including timestamp
of when the value was cached. The CachedValue object is returned
which features new accessors to retrieve cached time and current age. Pull
request courtesy Grégoire Deveaux.
References: #37
[change] [setup] Minimum Python version is now Python 3.8; prior versions Python 3.7 and 3.6 are EOL.
[change] [setup] Project setup is now based on pep-621 pyproject.toml configuration.
[bug] [typing] Made use of pep-673 Self type for method chained methods such as CacheRegion.configure() and ProxyBackend.wrap(). Pull request courtesy
Released: Sat Jul 8 2023
[bug] [typing] Made use of pep-673 Self type for method chained methods such as
CacheRegion.configure() and ProxyBackend.wrap(). Pull request
courtesy Viicos.
References: #240
[bug] [typing] Added py.typed file to root so that typing tools such as Mypy recognize dogpile as typed. Pull request courtesy Daverball.
Released: Sat May 20 2023
[bug] [typing] Added py.typed file to root so that typing tools such as Mypy recognize dogpile as typed. Pull request courtesy Daverball.
References: #238
[feature] [region] Added new construct api.CantDeserializeException which can be raised by user-defined deserializer functions which would be passed t
Released: Wed Apr 26 2023
[feature] [region] Added new construct api.CantDeserializeException which can be
raised by user-defined deserializer functions which would be passed to
CacheRegion.deserializer, to indicate a cache value that can't
be deserialized and therefore should be regenerated. This can allow an
application that's been updated to gracefully re-cache old items that were
persisted from a previous version of the application. Pull request courtesy
Simon Hewitt.
References: #236
[bug] [memcached] Moved the MemcacheArgs.dead_retry argument and the MemcacheArgs.socket_timeout argument which were erroneously added to the "set_par
Released: Fri Jul 8 2022
[bug] [memcached] Moved the MemcacheArgs.dead_retry argument and the
MemcacheArgs.socket_timeout argument which were
erroneously added to the "set_parameters",
where they have no effect, to be part of the Memcached connection
arguments MemcachedBackend.dead_retry,
MemcachedBackend.socket_timeout.
[usecase] [memcached] Added MemcacheArgs.dead_retry and MemcacheArgs.socket_timeout to the dictionary of additional keyword arguments that will be pas
Released: Tue Jul 5 2022
[usecase] [memcached] Added MemcacheArgs.dead_retry and
MemcacheArgs.socket_timeout to the dictionary of
additional keyword arguments that will be passed
directly to GenericMemcachedBackend().
References: #223
[usecase] [redis] Added RedisBackend.connection_kwargs parameter, which is a dictionary of additional keyword arguments that will be passed directly t
Released: Fri Jun 10 2022
[usecase] [redis] Added RedisBackend.connection_kwargs parameter, which is a
dictionary of additional keyword arguments that will be passed directly to
StrictRedis() or StrictRedis.from_url(), in the same way that this
parameter works with the RedisSentinelBackend already.
References: #221
[bug] [redis] Fixed regression caused by backwards-incompatible API changes in Redis that caused the "distributed lock" feature to not function.
References: #220
[usecase] [memcached] Added support for additional pymemcache HashClient parameters retry_attempts, retry_timeout, and dead_timeout.
Released: Wed Jan 19 2022
HashClient parameters
retry_attempts, retry_timeout, and
dead_timeout.[bug] [general] Fixed Python 3.10 deprecation warning involving threading. Pull request courtesy Karthikeyan Singaravelan.
Released: Thu Sep 2 2021
[bug] [general] Fixed Python 3.10 deprecation warning involving threading. Pull request courtesy Karthikeyan Singaravelan.
References: #203
[bug] [regression] [tests] Repaired the test suite to work with the 5.x series of the decorator module, which now appears to make use of the __signatu
Released: Thu May 20 2021
[bug] [regression] [tests] Repaired the test suite to work with the 5.x series of the decorator
module, which now appears to make use of the __signature__ attribute.
[bug] [regression] Fixed regression where ProxyBackend was missing several methods
that were added as part of the 1.1 release.
References: #202
[feature] [region] Added new region method CacheRegion.key_is_locked(). Returns True if the given key is subject to the dogpile lock, which would indi
Released: Tue Jan 26 2021
[feature] [region] Added new region method CacheRegion.key_is_locked(). Returns True if
the given key is subject to the dogpile lock, which would indicate that the
generator function is running at that time. Pull request courtesy Bastien
Gerard.
References: #101
[feature] [memcached] Added support for the pymemcache backend, using the
"dogpile.cache.pymemcache" backend identifier. Pull request courtesy
Moisés Guimarães de Medeiros.
References: #134
[bug] [region] Fixed regression where the serialization and deserialization functions could be inadvertently turned into instance methods with an unex
Released: Mon Nov 23 2020
[bug] [region] Fixed regression where the serialization and deserialization functions could be inadvertently turned into instance methods with an unexpected argument signature, namely when pickle.dumps and pickle.loads are the pure Python version as is the case in pypy.
References: #195
[feature] [region] Reworked the means by which values are serialized and deserialized from backends, and provided for custom serialization of values.
Released: Sun Nov 15 2020
[feature] [region] Reworked the means by which values are serialized and deserialized from
backends, and provided for custom serialization of values. Added the
CacheRegion.serializer and
CacheRegion.deserializer parameters which may be set to any
serializer.
Serialization and deserialization now take place within the
CacheRegion so that backends may now assume string values
in all cases. This simplifies the existing backends and also makes
custom backends easier to write and maintain.
Additionally, the serializer is now applied to the user-defined value
portion of the CachedValue and not to the metadata or other
portions of CachedValue object itself, so the serialized portion
is effectively a "payload" within the larger CachedValue
structure that is passed as part of the larger string format. The overall
format is a separate JSON of the cached value metadata, followed by the
serialized form. This allows for end-user serialization schemes that are
hardwired to the values themselves without the need to serialize dogpile's
internal structures as well.
Existing custom backends should continue to work without issue; they
now have the option to forego any separate serialization steps, and
can also subclass a new backend BytesBackend that marks them
as a backend that only deals with bytes coming in and out; all
internal serialization logic from such a backend can be removed.
Pull request courtesy Alessio Bogon.
References: #191
[feature] [memcached] Added support for TLS connections to the bmemcached backend. Pull request courtesy Moisés Guimarães de Medeiros.
Released: Fri Aug 7 2020
[feature] [memcached] Added support for TLS connections to the bmemcached backend. Pull request courtesy Moisés Guimarães de Medeiros.
References: #173
[bug] [install] dogpile.cache 1.0.0 was released with a minimum Python version of 3.5. However, due to a dependency issue, the minimum version is now
Released: Tue Jul 21 2020
[bug] [install] dogpile.cache 1.0.0 was released with a minimum Python version of 3.5. However, due to a dependency issue, the minimum version is now Python 3.6. The 1.0.0 release will be removed from PyPI so that Python versions prior to 3.6 will continue to make use of the previous dogpile.cache 0.9.2.
References: #184
[bug] [installation] Removed the "universal=1" directive from setup.cfg as this would create py2/py3 wheels. dogpile 1.0.x is Python 3 only so a py3-only wheel is now created.
References: #185
[feature] Improved plugin scanner performance by switching from pkg_resources to stevedore.
Released: Sun Jul 19 2020
[feature] Improved plugin scanner performance by switching from pkg_resources to stevedore.
[feature] [redis] Added support for Redis Sentinel. Pull request courtesy Stéphane Brunner.
See RedisSentinelBackend.
References: #181
[bug] [installation] Ensured that the "pyproject.toml" file is not included in builds, as the presence of this file indicates to pip that a pep-517 in
Released: Mon May 4 2020
[bug] [installation] Ensured that the "pyproject.toml" file is not included in builds, as the presence of this file indicates to pip that a pep-517 installation process should be used. As this mode of operation appears to be not well supported by current tools / distros, these problems are avoided within the scope of dogpile.cache installation by omitting the file.
References: #178
[bug] [tests] Added decorator module as a required testing dependency to tox.ini so that tests work when this is not pre-installed.
Released: Wed Apr 29 2020
[bug] [tests] Added decorator module as a required testing dependency to
tox.ini so that tests work when this is not pre-installed.
[bug] [redis] Added option to the Redis backend
RedisBackend.thread_local_lock, which when set to False will
disable the use of a threading local by the redis module in its
distributed lock service, which is known to interfere with the lock's
behavior when used in an "async" use case, within dogpile this would be
when using the CacheRegion.async_creation_runner feature. The
default is conservatively being left at True, but it's likely this should
be set to False in all cases, so a warning is emitted if this flag is not
set to False in conjunction with the distributed lock. Added an optional
argument to RedisBackend that specifies whether or not a
thread-local Redis lock should be used. This is the default, but it breaks
asynchronous runner compatibility.
References: #171
[feature] Added logging facililities into CacheRegion, to indicate key events such as cache keys missing or regeneration of values. As these can be ve
Released: Mon Oct 28 2019
CacheRegion, to indicate key
events such as cache keys missing or regeneration of values. As these can
be very high volume log messages, logging.DEBUG is used as the log
level for the events. Pull request courtesy Stéphane Brunner.Per Pypa / pytest developers, "setup.py" commands are in general headed towards deprecation in favor of tox. The tox.ini script has been updated such…
no release date
[bug] [setup] Removed the "python setup.py test" feature in favor of a straight run of "tox". Per Pypa / pytest developers, "setup.py" commands are in general headed towards deprecation in favor of tox. The tox.ini script has been updated such that running "tox" with no arguments will perform a single run of the test suite against the default installed Python interpreter.
References: #157
[bug] [py3k] Replaced the Python compatbility routines for getfullargspec() with a
fully vendored version from Python 3.3. Originally, Python was emitting
deprecation warnings for this function in Python 3.8 alphas. While this
change was reverted, it was observed that Python 3 implementations for
getfullargspec() are an order of magnitude slower as of the 3.4 series
where it was rewritten against Signature. While Python plans to
improve upon this situation, SQLAlchemy projects for now are using a simple
replacement to avoid any future issues.
References: #154
[bug] [installation] Pinned minimum version of Python decorator module at 4.0.0 (July, 2015) as previous versions don't provide the API that dogpile is using.
References: #160
[bug] [py3k] Fixed the sha1_mangle_key() key mangler to coerce incoming Unicode
objects into bytes as is required by the Py3k version of this function.
References: #159
[bug] [region] Fixed regression in 0.7.0 caused by #136 where the assumed arguments for the CacheRegion.async_creation_runner expanded to include the
Released: Tue Dec 11 2018
[bug] [region] Fixed regression in 0.7.0 caused by #136 where the assumed
arguments for the CacheRegion.async_creation_runner expanded to
include the new CacheRegion.get_or_create.creator_args
parameter, as it was not tested that the async runner would be implicitly
called with these arguments when the CacheRegion.cache_on_arguments()
decorator was used. The exact signature of async_creation_runner is
now restored to have the same arguments in all cases.
References: #139
[bug] [py3k] Fixed all Python 3.x deprecation warnings including inspect.getargspec().
Released: Mon Dec 10 2018
[bug] The decorator module is now used when creating function decorators
within CacheRegion.cache_on_arguments() and
CacheRegion.cache_multi_on_arguments() so that function signatures
are preserved. Pull request courtesy ankitpatel96.
Additionally adds a small performance enhancement which is to avoid
internally creating a @wraps() decorator for the creator function on
every get operation, by allowing the arguments to the creator be passed
separately to CacheRegion.get_or_create().
References: #137
[bug] [py3k] Fixed all Python 3.x deprecation warnings including
inspect.getargspec().
References: #129
[change] Project hosting has moved to GitHub, under the SQLAlchemy organization at https://github.com/sqlalchemy/dogpile.cache
Released: Sat Nov 24 2018
[bug] Fixed issue in the CacheRegion.get_or_create_multi() method which was erroneously considering the cached value as the timestamp field if the Cac
Released: Thu Jul 26 2018
[bug] Fixed issue in the CacheRegion.get_or_create_multi() method which
was erroneously considering the cached value as the timestamp field if the
CacheRegion.invalidate() method had ben used, usually causing a
TypeError to occur, or in less frequent cases an invalid result for
whether or not the cached value was invalid, leading to excessive caching
or regeneration. The issue was a regression caused by an implementation
issue in the pluggable invalidation feature added in #38.
References: #128
[feature] Added method CacheRegion.actual_backend which calculates and caches the actual backend for the region, which may be abstracted by the use of
Released: Wed Jun 27 2018
[feature] Added method CacheRegion.actual_backend which calculates and
caches the actual backend for the region, which may be abstracted by
the use of one or more ProxyBackend subclasses.
References: #123
[bug] Fixed a condition in the Lock where the "get" function could be
called a second time unnecessarily, when returning an existing, expired
value from the cache.
References: #122
[bug] Fixed import issue for Python 3.7 where several variables named "async" were, leading to syntax errors. Pull request courtesy Brian Sheldon.
Released: Mon Mar 5 2018
[bug] Fixed import issue for Python 3.7 where several variables named "async" were, leading to syntax errors. Pull request courtesy Brian Sheldon.
References: #119
[bug] The method Region.get_or_create_multi() will not pass to the cache backend if no values are ultimately to be stored, based on the use of the Reg
Released: Mon Jun 26, 2017
[bug] The method Region.get_or_create_multi() will not pass to the
cache backend if no values are ultimately to be stored, based on
the use of the Region.get_or_create_multi.should_cache_fn
function. This empty dictionary is unnecessary and can cause API
problems for backends like that of Redis. Pull request courtesy
Tobias Sauerwein.
[bug] The api.NO_VALUE constant now has a fixed __repr__()
output, so that scenarios where this constant's string value
ends up being used as a cache key do not create multiple values.
Pull request courtesy Paul Brown.
[bug] A new exception class exception.PluginNotFound is now
raised when a particular cache plugin class cannot be located
either as a setuptools entrypoint or as a registered backend.
Previously, a plain Exception was thrown. Pull request
courtesy Jamie Lennox.
[feature] Added replace_existing_backend to CacheRegion.configure_from_config(). Pull request courtesy Daniel Kraus.
Released: Thu May 18, 2017
replace_existing_backend to
CacheRegion.configure_from_config().
Pull request courtesy Daniel Kraus.[feature] Added a new system to allow custom plugins specific to the issue of "invalidate the entire region", using a new base class RegionInvalidatio
Released: Tue Aug 16 2016
[feature] Added a new system to allow custom plugins specific to the issue of
"invalidate the entire region", using a new base class
RegionInvalidationStrategy. As there are many potential
strategies to this (special backend function, storing special keys, etc.)
the mechanism for both soft and hard invalidation is now customizable.
New approaches to region invalidation can be contributed as documented
recipes. Pull request courtesy Alexander Makarov.
References: #38
[feature] Added a new cache key generator kwarg_function_key_generator(),
which takes keyword arguments as well as positional arguments into
account when forming the cache key.
References: #43
[bug] Restored some more util symbols that users may have been relying upon
(although these were not necessarily intended as user-facing):
dogpile.cache.util.coerce_string_conf,
dogpile.cache.util.KeyReentrantMutex,
dogpile.cache.util.memoized_property,
dogpile.cache.util.PluginLoader,
dogpile.cache.util.to_list.
[bug] Fixed imports for dogpile.core restoring ReadWriteMutex and NameRegistry into the base namespace, in addition to dogpile.core.nameregistry and d
Released: Mon Jun 6 2016
[bug] Fixed imports for dogpile.core restoring ReadWriteMutex
and NameRegistry into the base namespace, in addition to
dogpile.core.nameregistry and dogpile.core.readwrite_lock.
References: #99
Additionally, the long-deprecated dogpile.core.Dogpile and dogpile.core.SyncReaderDogpile classes have been removed.
Released: Mon Jun 6 2016
[feature] The dogpile.core library has been rolled in as part of the
dogpile.cache distribution. The configuration of the dogpile
name as a namespace package is also removed from dogpile.cache.
In order to allow existing installations of dogpile.core as a separate
package to remain unaffected, the .core package has been retired
within dogpile.cache directly; the Lock class is now
available directly as dogpile.Lock and the additional dogpile.core
constructs are under the dogpile.util namespace.
Additionally, the long-deprecated dogpile.core.Dogpile and
dogpile.core.SyncReaderDogpile classes have been removed.
References: #91
[bug] The Redis backend now creates a copy of the "arguments" dictionary passed to it, before popping values out of it. This prevents the given dictionary from losing its keys.
[bug] Fixed bug in "null" backend where NullLock did not
accept a flag for the NullLock.acquire() method, nor did
it return a boolean value for "success".
References: #97
[feature] Added new parameter GenericMemcachedBackend.lock_timeout, used in conjunction with GenericMemcachedBackend.distributed_lock, will specify th
Released: Mon Oct 19 2015
[feature] Added new parameter GenericMemcachedBackend.lock_timeout,
used in conjunction with
GenericMemcachedBackend.distributed_lock, will specify the
timeout used when communicating to the .add() method of the memcached
client. Pull request courtesy Frits Stegmann and Morgan Fainberg.
References: #54, pull request 37
[feature] Added a new flag CacheRegion.configure.replace_existing_backend,
allows a region to have a new backend replace an existing one.
Pull request courtesy hbccbh.
References: #65, pull request 35
[feature] [tests] Test suite now runs using py.test. Pull request courtesy John Anderson.
References: pull request 33
[bug] [redis] Repaired the CacheRegion.get_multi() method when used with a
list of zero length against the redis backend.
References: #74
[feature] Changed the pickle protocol for the file/DBM backend to pickle.HIGHEST_PROTOCOL when producing new pickles, to match that of the redis and m
Released: Mon Feb 2 2015
[feature] Changed the pickle protocol for the file/DBM backend to
pickle.HIGHEST_PROTOCOL when producing new pickles,
to match that of the redis and memorypickle backends.
Pull request courtesy anentropic.
References: pull request 30
[feature] Added new arguments CacheRegion.cache_on_arguments.function_key_generator and CacheRegion.cache_multi_on_arguments.function_multi_key_genera
Released: Wed Jan 21 2015
[feature] Added new arguments
CacheRegion.cache_on_arguments.function_key_generator and
CacheRegion.cache_multi_on_arguments.function_multi_key_generator
which serve as per-decorator replacements for the region-wide
CacheRegion.function_key_generator and
CacheRegion.function_multi_key_generator parameters,
respectively, so that custom key production schemes can be applied
on a per-function basis within one region.
Pull request courtesy Hongbin Lu.
References: pull request 26
[bug] Fixed bug where sending -1 for the
CacheRegion.get_or_create.expiration_time parameter to
CacheRegion.get_or_create() or
CacheRegion.get_or_create_multi()
would fail to honor the setting as "no expiration time". Pull request
courtesy Hongbin Lu.
References: #71, pull request 25
[bug] The wrap argument is now propagated when calling
CacheRegion.configure_from_config(). Pull request courtesy
Jonathan Vanasco.
References: #41, pull request 28
[bug] Fixed tests under py.test, which were importing a symbol from
pytest itself is_unittest which has been removed.
[feature] Added new NullBackend, for testing and cache-disabling purposes. Pull request courtesy Wichert Akkerman.
Released: Sat Jun 14 2014
[feature] Added new NullBackend, for testing and cache-disabling
purposes. Pull request courtesy Wichert Akkerman.
References: pull request 18
[bug] Added missing Mako test dependency to setup.py. Pull request courtesy Wichert Akkerman.
References: pull request 19
[bug] Fixed bug where calling CacheRegion.get_multi() or
CacheRegion.set_multi() with an empty list would cause failures
based on backend. Pull request courtesy Wichert Akkerman.
References: #58, pull request 20
[feature] Added new RedisBackend.connection_pool option
on the Redis backend; this can be passed a redis.ConnectionPool
instance directly. Pull request courtesy Masayuko.
References: pull request 17
[feature] Added new RedisBackend.socket_timeout option
on the Redis backend. Pull request courtesy
Saulius Menkevičius.
References: pull request 16
[feature] Added support for tests to run via py.test.
[bug] Repaired the entry point for Mako templates; the name of the entrypoint itself was wrong vs. what was in the docs, but beyond that the entrypoint would load the wrong module name. Pull request courtesy zoomorph.
References: pull request 15
[bug] The coerce_string_conf() function, which is used by
Region.configure_from_config(), will now recognize floating point
values when parsing conf strings and deliver them as such; this supports
non-integer values such as Redis lock_sleep. Pullreq courtesy
Jeff Dairiki.
References: #57, pull request 13
[bug] Fixed bug where the key_mangler would get in the way of usage of the async_creation_runner feature within the Region.get_or_create() method, by
Released: Wed Jan 8 2014
[bug] Fixed bug where the key_mangler would get in the way of usage of the
async_creation_runner feature within the Region.get_or_create()
method, by sending in the mangled key instead of the original key. The
"mangled" key is only supposed to be exposed within the backend storage,
not the creation function which sends the key back into the Region.set(),
which does the mangling itself. Pull request courtesy Ryan Kolak.
References: pull request 10
[bug] [py3k] Fixed bug where the Region.get_multi() method wasn't calling
the backend correctly in Py3K (e.g. was passing a destructive map()
object) which would cause this method to fail on the memcached backend.
[feature] Added a get() method to complement the set(), invalidate()
and refresh() methods established on functions decorated by
CacheRegion.cache_on_arguments() and
CacheRegion.cache_multi_on_arguments(). Pullreq courtesy
Eric Hanchrow.
References: #55
[feature] Added a new variant on MemoryBackend, MemoryPickleBackend.
This backend applies pickle.dumps() and pickle.loads() to cached
values upon set and get, so that similar copy-on-cache behavior as that
of other backends is employed, guarding cached values against subsequent
in-memory state changes. Pullreq courtesy Jonathan Vanasco.
References: #51, pull request 11
[bug] Fixed a format call in the redis backend which would otherwise fail on Python 2.6; courtesy Jeff Dairiki.
References: pull request 9
[bug] Fixes to routines on Windows, including that default unit tests pass, and an adjustment to the "soft expiration" feature to ensure the expiratio
Released: Fri Nov 15 2013
[bug] Fixes to routines on Windows, including that default unit tests pass, and an adjustment to the "soft expiration" feature to ensure the expiration works given windows time.time() behavior.
[bug] Added py2.6 compatibility for unsupported total_seconds() call
in region.py
[feature] Added a new argument lock_factory to the DBMBackend
implementation. This allows for drop-in replacement of the default
FileLock backend, which builds on os.flock() and only
supports Unix platforms. A new abstract base AbstractFileLock
has been added to provide a common base for custom lock implementations.
The documentation points to an example thread-based rw lock which is
now tested on Windows.
References: #44
[feature] The CacheRegion.invalidate() method now supports an option hard=True|False. A "hard" invalidation, equivalent to the existing functionality
Released: Thu Oct 10 2013
[feature] The CacheRegion.invalidate() method now supports an option
hard=True|False. A "hard" invalidation, equivalent to the
existing functionality of CacheRegion.invalidate(), means
CacheRegion.get_or_create() will not return the "old" value at
all, forcing all getters to regenerate or wait for a regeneration.
"soft" invalidation means that getters can continue to return the
old value until a new one is generated.
References: #38
[feature] New dogpile-specific exception classes have been added, so that
issues like "region already configured", "region unconfigured",
raise dogpile-specific exceptions. Other exception classes have
been made more specific. Also added new accessor
CacheRegion.is_configured. Pullreq courtesy Morgan Fainberg.
References: #40
[bug] Erroneously missed when the same change was made for set()
in 0.5.0, the Redis backend now uses pickle.HIGHEST_PROTOCOL
for the set_multi() method as well when producing pickles.
Courtesy Łukasz Fidosz.
[bug] [py3k] [redis] Fixed an errant u'' causing incompatibility in Python3.2
in the Redis backend, courtesy Jimmey Mabey.
References: #39
[bug] The util.coerce_string_conf() method now correctly coerces
negative integers and those with a leading + sign. This previously
prevented configuring a CacheRegion with an expiration_time
of '-1'. Courtesy David Beitey.
[bug] The refresh() method on CacheRegion.cache_multi_on_arguments()
now supports the asdict flag.
[misc] Source repository has been moved to git.
Released: Fri Jun 21 2013
[misc] Source repository has been moved to git.
[bug] The Redis backend now uses pickle.HIGHEST_PROTOCOL when
producing pickles. Courtesy Lx Yu.
[bug] CacheRegion.cache_on_arguments() now has a new argument
to_str, defaults to str(). Can be replaced with unicode()
or other functions to support caching of functions that
accept non-unicode arguments. Initial patch courtesy Lx Yu.
[feature] Now using the Lock included with the Python
redis backend, which adds lock_timeout
and lock_sleep arguments to the RedisBackend.
[feature] Added new methods CacheRegion.get_or_create_multi()
and CacheRegion.cache_multi_on_arguments(), which
make use of the CacheRegion.get_multi() and similar
functions to store and retrieve multiple keys at once while
maintaining dogpile semantics for each.
[feature] Added a method refresh() to functions decorated by
CacheRegion.cache_on_arguments() and
CacheRegion.cache_multi_on_arguments(), to complement
invalidate() and set().
References: #36
[feature] CacheRegion.configure() accepts an
optional datetime.timedelta object
for the expiration_time argument as well
as an integer, courtesy Jack Lutz.
References: #13
[feature] The expiration_time argument passed to
CacheRegion.cache_on_arguments()
may be a callable, to return a dynamic
timeout value. Courtesy David Beitey.
References: #20
[feature] Added support for simple augmentation of existing
backends using the ProxyBackend class.
Thanks to Tim Hanus for the great effort with
development, testing, and documentation.
References: #26
[feature] Full support for multivalue get/set/delete
added, using CacheRegion.get_multi(),
CacheRegion.set_multi(), CacheRegion.delete_multi(),
courtesy Marcos Araujo Sobrinho.
References: pull request 14
[bug] Fixed bug where the "name" parameter for
CacheRegion was ignored entirely.
Courtesy Wichert Akkerman.
References: #27
[bug] Added support for the cache_timeout Mako argument to the Mako plugin, which will pass the value to the expiration_time argument of CacheRegion.g
Released: Thu Apr 4 2013
[bug] Added support for the cache_timeout Mako
argument to the Mako plugin, which will pass
the value to the expiration_time argument
of CacheRegion.get_or_create().
[feature] CacheRegion.get_or_create() and
CacheRegion.cache_on_arguments() now accept a new
argument should_cache_fn, receives the value
returned by the "creator" and then returns True or
False, where True means "cache plus return",
False means "return the value but don't cache it."
References: pull request 13
[feature] An "async creator" function can be specified to CacheRegion which allows the "creation" function to be called asynchronously or be subsitute
Released: Sat Jan 19 2013
[feature] An "async creator" function can be specified to
CacheRegion which allows the "creation" function
to be called asynchronously or be subsituted for
another asynchronous creation scheme. Courtesy
Ralph Bean.
References: pull request 10
[feature] The function decorated by CacheRegion.cache_on_arguments() now includes a set() method, in addition to the existing invalidate() method. Lik
Released: Sat Dec 15 2012
[feature] The function decorated by CacheRegion.cache_on_arguments()
now includes a set() method, in addition to the existing
invalidate() method. Like invalidate(), it accepts
a set of function arguments, but additionally accepts as the
first positional argument a new value to place in the cache,
to take the place of that key. Courtesy Antoine Bertin.
References: pull request 9
[bug] Fixed bug in DBM backend whereby if an error occurred during the "write" operation, the file lock, if enabled, would not be released, thereby deadlocking the app.
References: #15
[bug] The util.function_key_generator() used by the
function decorator no longer coerces non-unicode
arguments into a Python unicode object on Python 2.x;
this causes failures on backends such as DBM which
on Python 2.x apparently require bytestrings. The
key_mangler is still needed if actual unicode arguments
are being used by the decorated function, however.
References: #12
[feature] Redis backend now accepts optional "url" argument,
will be passed to the new StrictRedis.from_url()
method to determine connection info. Courtesy
Jon Rosebaugh.
[feature] Redis backend now accepts optional "password" argument. Courtesy Jon Rosebaugh.
[feature] DBM backend has "fallback" when calling dbm.get() to instead use dictionary access + KeyError, in the case that the "gdbm" backend is used which does not include .get(). Courtesy Jon Rosebaugh.
[bug] Using dogpile.core 0.4.0 now, fixes a critical bug whereby dogpile pileup could occur on first value get across multiple processes, due to relia
Released: Tue Oct 30 2012
[bug] Using dogpile.core 0.4.0 now, fixes a critical bug whereby dogpile pileup could occur on first value get across multiple processes, due to reliance upon a non-shared creation time. This is a dogpile.core issue.
References: #1
[bug] Fixed missing future with_statement directive in region.py.
[bug] Fixed the mako_cache plugin which was not yet covered, and wasn't implementing the mako plugin API correctly; fixed docs as well. Courtesy Ben H
Released: Tue Sep 25 2012
[bug] Fixed the mako_cache plugin which was not yet covered, and wasn't implementing the mako plugin API correctly; fixed docs as well. Courtesy Ben Hayden.
[bug] Fixed setup so that the tests/* directory isn't yanked into the install. Courtesy Ben Hayden.
[feature] get() method now checks expiration time by default. Use ignore_expiration=True to bypass this.
Released: Thu Jun 14 2012
[feature] get() method now checks expiration time by default. Use ignore_expiration=True to bypass this.
[feature] Added new invalidate() method. Sets the current timestamp as a minimum value that all retrieved values must be created after. Is honored by the get_or_create() and get() methods.
References: #7
[bug] Fixed bug whereby region.get() didn't work if the value wasn't present.
References: #8
Nothing published for this version
support "min_compress_len" and "memcached_expire_time" with python-memcached backend. Tests courtesy Justin Azoff
Released: Wed May 16 2012
support "min_compress_len" and "memcached_expire_time" with python-memcached backend. Tests courtesy Justin Azoff
References: #3
Add support for coercion of string config values to Python objects - ints, "false", "true", "None".
References: #4
Added support to DBM file lock to allow reentrant access per key within a single thread, so that even though the DBM backend locks for the whole file, a creation function that calls upon a different key in the cache can still proceed.
References: #5
Fixed DBM glitch where multiple readers could be serialized.
Adjust bmemcached backend to work with newly-repaired bmemcached calling API (see bmemcached ef206ed4473fec3b639e).
add Redis backend, courtesy Ollie Rutherfurd
Released: Thu Apr 19 2012
move tests into tests/cache namespace
Released: Sun Apr 15 2012
move tests into tests/cache namespace
py3k compatibility is in-place now, no 2to3 needed.
Based on dogpile.core now, to get the package namespace thing worked out.
Released: Sat Apr 14 2012
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →