def publish_by(self, *args): # cache ourselves, keyed by the fields given kwargs = {} for field in args: kwargs[field] = getattr(self, field) key = generate_cache_key([self.__class__.__name__, "get"], **kwargs) cache.set(key, self, CACHE_FOREVER_TIMEOUT)
def _fetch_index(self, field_name): cache_key = generate_cache_key([self.model.__name__, "table"], field_name) table = cache.get(cache_key) if table is None: table = self._rebuild_index(field_name) return table
def wrapper(self, *args, **kwargs): key = generate_cache_key([self.__class__.__name__, self.model_version, target.__name__, self.pk], *args, **kwargs) data = cache.get(key) if data is None: data = target(self, *args, **kwargs) cache.set(key, data, CACHE_FOREVER_TIMEOUT) return data
def get_or_create(self, **kwargs): key = generate_cache_key([self.model.__name__, "get"], **kwargs) obj = cache.get(key) if obj is None: return super(CacheModelManager, self).get_or_create(**kwargs) else: return obj, False
def publish_method(self, method_name, *args, **kwargs): method = getattr(self, method_name, None) if not getattr(method, '_cached_method', False): raise AttributeError("method '%s' is not a cached_method."); target = getattr(method, '_cached_method_target', None) if callable(target): key = generate_cache_key([self.__class__.__name__, target.__name__, self.pk], *args, **kwargs) data = target(self, *args, **kwargs) cache.set(key, data, CACHE_FOREVER_TIMEOUT)
def wrapper(self, *args, **kwargs): key = generate_cache_key( [self.__class__.__name__, target.__name__, self.pk], *args, **kwargs) data = cache.get(key) if data is None: data = target(self, *args, **kwargs) cache.set(key, data, CACHE_FOREVER_TIMEOUT) return data
def get(self, **kwargs): key = generate_cache_key([self.model.__name__, "get"], **kwargs) obj = cache.get(key) if obj is None: obj = super(CacheModelManager, self).get(**kwargs) cache.set(key, obj, CACHE_FOREVER_TIMEOUT) # update cache_key_index with obj.pk <- key return obj
def _rebuild_index(self, field_name): cache_key = generate_cache_key([self.model.__name__, "table"], field_name) table = {} for obj in super(CachedTableManager, self).all().select_related(): key = getattr(obj, field_name, None) if key is not None: table[key] = obj cache.set(cache_key, table, CACHE_FOREVER_TIMEOUT); return table
def remove_cached_data(self, method_names): """ Deletes the cached values for the given method names """ for method_name in method_names: method = getattr(self, method_name, None) if not getattr(method, '_cached_method', False): raise AttributeError("method '%s' is not a cached_method.") target = getattr(method, '_cached_method_target', None) if callable(target): key = generate_cache_key( [self.__class__.__name__, target.__name__, self.pk]) cache.delete(key)
def publish_key(self, *args): kwargs = {} for field in args: kwargs[field] = getattr(self, field) return generate_cache_key([self.__class__.__name__, "get"], **kwargs)
def publish_key(self, *args): kwargs = {} for field in args: kwargs[field] = getattr(self, field) return generate_cache_key([self.__class__.__name__, self.model_version, "get"], **kwargs)