Changelog — dogpile.cache 0.5.5 documentation

### Navigation

- index
- modules |
- previous |
- dogpile.cache 0.5.5 documentation »

# Changelog

## 0.5.5

Released: Wed Jan 21 2015

### feature

- [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

- [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.

## 0.5.4

Released: Sat Jun 14 2014

### feature

- [feature] Added new `NullBackend`, for testing and cache-disabling purposes. Pull request courtesy Wichert Akkerman.

  References: pull request 18

- [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

- [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

- [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

## 0.5.3

Released: Wed Jan 8 2014

### feature

- [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

- [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.

- [bug] Fixed a format call in the redis backend which would otherwise fail on Python 2.6; courtesy Jeff Dairiki.

  References: pull request 9

## 0.5.2

Released: Fri Nov 15 2013

### feature

- [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

### bug

- [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

## 0.5.1

Released: Thu Oct 10 2013

### feature

- [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

- [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] [redis] [py3k] 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.

## 0.5.0

Released: Fri Jun 21 2013

### feature

- [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.

  References: #33, #35

- [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

- [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.

- [bug] Fixed bug where the “name” parameter for `CacheRegion` was ignored entirely. Courtesy Wichert Akkerman.

  References: #27

### misc

- [misc] Source repository has been moved to git.

## 0.4.3

Released: Thu Apr 4 2013

### feature

- [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

### bug

- [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()`.

## 0.4.2

Released: Sat Jan 19 2013

### feature

- [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

## 0.4.1

Released: Sat Dec 15 2012

### feature

- [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

- [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

- [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

## 0.4.0

Released: Tue Oct 30 2012

### bug

- [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.

## 0.3.1

Released: Tue Sep 25 2012

### bug

- [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.

## 0.3.0

Released: Thu Jun 14 2012

### feature

- [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

- [bug] Fixed bug whereby region.get() didn’t work if the value wasn’t present.

  References: #8

## 0.2.4

no release date

- Fixed py3k issue with config string coerce, courtesy Alexander Fedorov

## 0.2.3

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).

## 0.2.2

Released: Thu Apr 19 2012

- add Redis backend, courtesy Ollie Rutherfurd

## 0.2.1

Released: Sun Apr 15 2012

- move tests into tests/cache namespace

- py3k compatibility is in-place now, no 2to3 needed.

## 0.2.0

Released: Sat Apr 14 2012

- Based on dogpile.core now, to get the package namespace thing worked out.

## 0.1.1

Released: Tue Apr 10 2012

- Fixed the configure_from_config() method of region and backend which wasn’t working. Courtesy Christian Klinger.

## 0.1.0

Released: Sun Apr 08 2012

- Initial release.

- Includes a pylibmc backend and a plain dictionary backend.

### Navigation

- index
- modules |
- previous |
- dogpile.cache 0.5.5 documentation »