def set_multi_async(self, mapping, time=0, key_prefix='', min_compress_len=0, namespace=None, rpc=None): prefixed_mapping = {} for key, value in mapping.items(): prefixed_mapping[default_key_func(key, KEY_PREFIX, VERSION)] = value if self.sync_mode: # We don't call up, because set_multi calls set_multi_async return memcache.set_multi(prefixed_mapping, time=time, key_prefix=key_prefix, min_compress_len=min_compress_len, namespace=namespace) else: return super(KeyPrefixedClient, self).set_multi_async( prefixed_mapping, time=time, key_prefix=key_prefix, min_compress_len=min_compress_len, namespace=namespace, rpc=rpc)
def get_multi(self, keys, key_prefix='', namespace=None, for_cas=False): # Convert the given keys to our prefixed keys, then map the results back onto the original keys key_mapping = { default_key_func(x, KEY_PREFIX, VERSION): x for x in keys } ret = super(KeyPrefixedClient, self).get_multi( key_mapping.keys(), key_prefix=key_prefix, namespace=namespace, for_cas=for_cas ) return { key_mapping[k]: v for k, v in ret.iteritems() }
def get_multi(self, keys, key_prefix='', namespace=None, for_cas=False): # Convert the given keys to our prefixed keys, then map the results back onto the original keys key_mapping = { default_key_func(x, KEY_PREFIX, VERSION): x for x in keys } ret = super(KeyPrefixedClient, self).get_multi( key_mapping.keys(), key_prefix=key_prefix, namespace=namespace, for_cas=for_cas ) return { key_mapping[k]: v for k, v in ret.iteritems() }
def make_key(self, key): """ Make a proper cache key from the given string, by prepending our cache prefix. Recall that the cache clients that we're given are raw memcached clients; they know nothing about Django at all, and they certainly don't know about the custom cache key setup that the Multihost class that we're testing, uses. """ # This is kind of a hack; this test case doesn't know about the Django configuration, # but the Django configuration controls what keys actually get sent to the # cache backend. Here we're assuming that Django is running on defaults. return default_key_func(settings.CACHE_PREFIX + key, '', '1')
def delete_multi_async(self, keys, seconds=0, key_prefix='', namespace=None, rpc=None): keys = [default_key_func(x, KEY_PREFIX, VERSION) for x in keys] if self.sync_mode: # We don't call up, because delete_multi calls delete_multi_async return memcache.delete_multi( keys, seconds=seconds, key_prefix=key_prefix, namespace=namespace ) else: return super(KeyPrefixedClient, self).delete_multi_async( keys, seconds=seconds, key_prefix=key_prefix, namespace=namespace, rpc=rpc )
def delete_multi_async(self, keys, seconds=0, key_prefix='', namespace=None, rpc=None): keys = [default_key_func(x, KEY_PREFIX, VERSION) for x in keys] if self.sync_mode: # We don't call up, because delete_multi calls delete_multi_async return memcache.delete_multi( keys, seconds=seconds, key_prefix=key_prefix, namespace=namespace ) else: return super(KeyPrefixedClient, self).delete_multi_async( keys, seconds=seconds, key_prefix=key_prefix, namespace=namespace, rpc=rpc )
def set_multi_async(self, mapping, time=0, key_prefix='', min_compress_len=0, namespace=None, rpc=None): prefixed_mapping = {} for key, value in mapping.items(): prefixed_mapping[default_key_func(key, KEY_PREFIX, VERSION)] = value if self.sync_mode: # We don't call up, because set_multi calls set_multi_async return memcache.set_multi( prefixed_mapping, time=time, key_prefix=key_prefix, min_compress_len=min_compress_len, namespace=namespace ) else: return super(KeyPrefixedClient, self).set_multi_async( prefixed_mapping, time=time, key_prefix=key_prefix, min_compress_len=min_compress_len, namespace=namespace, rpc=rpc )
def memcache_safe_cache_key(key, key_prefix, version): """Hashes cache keys that are longer than MEMCACHE_MAX_KEY_LENGTH chars.""" result = default_key_func(key, key_prefix, version) if len(result) > MEMCACHE_MAX_KEY_LENGTH: result = hashlib.md5(result).hexdigest() return result