diff -r 27971a13089f -r 2e0b0af889be thirdparty/google_appengine/google/appengine/api/memcache/__init__.py --- 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)