--- a/thirdparty/google_appengine/google/appengine/api/memcache/__init__.py Sat Sep 05 14:04:24 2009 +0200
+++ b/thirdparty/google_appengine/google/appengine/api/memcache/__init__.py Sun Sep 06 23:31:53 2009 +0200
@@ -346,7 +346,14 @@
return None
if not response.has_stats():
- return None
+ return {
+ STAT_HITS: 0,
+ STAT_MISSES: 0,
+ STAT_BYTE_HITS: 0,
+ STAT_ITEMS: 0,
+ STAT_BYTES: 0,
+ STAT_OLDEST_ITEM_AGES: 0,
+ }
stats = response.stats()
return {
@@ -770,15 +777,16 @@
time=time, key_prefix=key_prefix,
namespace=namespace)
- def incr(self, key, delta=1, namespace=None):
+ def incr(self, key, delta=1, namespace=None, initial_value=None):
"""Atomically increments a key's value.
Internally, the value is a unsigned 64-bit integer. Memcache
doesn't check 64-bit overflows. The value, if too large, will
wrap around.
- The key must already exist in the cache to be incremented. To
- initialize a counter, set() it to the initial value, as an
+ Unless an initial_value is specified, the key must already exist
+ in the cache to be incremented. To initialize a counter, either
+ specify initial_value or set() it to the initial value, as an
ASCII decimal integer. Future get()s of the key, post-increment,
will still be an ASCII decimal value.
@@ -788,6 +796,9 @@
defaulting to 1.
namespace: a string specifying an optional namespace to use in
the request.
+ initial_value: initial value to put in the cache, if it doesn't
+ already exist. The default value, None, will not create a cache
+ entry if it doesn't already exist.
Returns:
New long integer value, or None if key was not in the cache, could not
@@ -798,9 +809,10 @@
ValueError: If number is negative.
TypeError: If delta isn't an int or long.
"""
- return self._incrdecr(key, False, delta, namespace=namespace)
+ return self._incrdecr(key, False, delta, namespace=namespace,
+ initial_value=initial_value)
- def decr(self, key, delta=1, namespace=None):
+ def decr(self, key, delta=1, namespace=None, initial_value=None):
"""Atomically decrements a key's value.
Internally, the value is a unsigned 64-bit integer. Memcache
@@ -815,6 +827,9 @@
defaulting to 1.
namespace: a string specifying an optional namespace to use in
the request.
+ initial_value: initial value to put in the cache, if it doesn't
+ already exist. The default value, None, will not create a cache
+ entry if it doesn't already exist.
Returns:
New long integer value, or None if key wasn't in cache and couldn't
@@ -824,9 +839,11 @@
ValueError: If number is negative.
TypeError: If delta isn't an int or long.
"""
- return self._incrdecr(key, True, delta, namespace=namespace)
+ return self._incrdecr(key, True, delta, namespace=namespace,
+ initial_value=initial_value)
- def _incrdecr(self, key, is_negative, delta, namespace=None):
+ def _incrdecr(self, key, is_negative, delta, namespace=None,
+ initial_value=None):
"""Increment or decrement a key by a provided delta.
Args:
@@ -836,6 +853,9 @@
or decrement by.
namespace: a string specifying an optional namespace to use in
the request.
+ initial_value: initial value to put in the cache, if it doesn't
+ already exist. The default value, None, will not create a cache
+ entry if it doesn't already exist.
Returns:
New long integer value, or None on cache miss or network/RPC/server
@@ -859,6 +879,8 @@
request.set_direction(MemcacheIncrementRequest.DECREMENT)
else:
request.set_direction(MemcacheIncrementRequest.INCREMENT)
+ if initial_value is not None:
+ request.set_initial_value(long(initial_value))
try:
self._make_sync_call('memcache', 'Increment', request, response)