Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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() }
Ejemplo n.º 3
0
    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() }
Ejemplo n.º 4
0
        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')
Ejemplo n.º 5
0
    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
            )
Ejemplo n.º 6
0
    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
            )
Ejemplo n.º 7
0
    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
            )
Ejemplo n.º 8
0
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