def delete_memoized_verhash(self, f, *args): """ Delete the version hash associated with the function. ..warning:: Performing this operation could leave keys behind that have been created with this version hash. It is up to the application to make sure that all keys that may have been created with this version hash at least have timeouts so they will not sit orphaned in the cache backend. """ if not callable(f): raise exceptions.DeprecationWarning( "Deleting messages by relative name is no longer" " reliable, please use a function reference") _fname = function_namespace(f, args) try: version_key = self._memvname(_fname) self.cache.delete(version_key) except Exception: if current_app.debug: raise logger.exception("Exception possibly due to cache backend.")
def delete_memoized(self, f, *args, **kwargs): """ Deletes the specified functions caches, based by given parameters. If parameters are given, only the functions that were memoized with them will be erased. Otherwise all versions of the caches will be forgotten. Example:: @cache.memoize(50) def random_func(): return random.randrange(1, 50) @cache.memoize() def param_func(a, b): return a+b+random.randrange(1, 50) .. code-block:: pycon >>> random_func() 43 >>> random_func() 43 >>> cache.delete_memoized('random_func') >>> random_func() 16 >>> param_func(1, 2) 32 >>> param_func(1, 2) 32 >>> param_func(2, 2) 47 >>> cache.delete_memoized('param_func', 1, 2) >>> param_func(1, 2) 13 >>> param_func(2, 2) 47 :param fname: Name of the memoized function, or a reference to the function. :param \*args: A list of positional parameters used with memoized function. :param \**kwargs: A dict of named parameters used with memoized function. .. note:: Flask-Cache uses inspect to order kwargs into positional args when the function is memoized. If you pass a function reference into ``fname`` instead of the function name, Flask-Cache will be able to place the args/kwargs in the proper order, and delete the positional cache. However, if ``delete_memozied`` is just called with the name of the function, be sure to pass in potential arguments in the same order as defined in your function as args only, otherwise Flask-Cache will not be able to compute the same cache key. .. note:: Flask-Cache maintains an internal random version hash for the function. Using delete_memoized will only swap out the version hash, causing the memoize function to recompute results and put them into another key. This leaves any computed caches for this memoized function within the caching backend. It is recommended to use a very high timeout with memoize if using this function, so that when the version has is swapped, the old cached results would eventually be reclaimed by the caching backend. """ if not callable(f): raise exceptions.DeprecationWarning( "Deleting messages by relative name is no longer" " reliable, please switch to a function reference" " or use the full function import name") _fname = function_namespace(f, args) if not args and not kwargs: version_key = self._memvname(_fname) version_data = self.memoize_make_version_hash() self.cache.set(version_key, version_data) else: cache_key = f.make_cache_key(f.uncached, *args, **kwargs) self.cache.delete(cache_key)