Previously eleith wrote: > > My solution was to write my own decorator. > could you share your decorator?
For what it's worth below is my variant of beaker_cache. It has the advantage over the stock version that it works everywhere instead of only for controller methods and will never try to cache response headers. The only missing feature I can think of is a simple way to add request headers to the cache key. That is trivial to add, but not needed for my current projects so I haven't added that. Wichert. def timed(expire=None, invalidate_on_startup=False, **b_kwargs): """Cache decorator utilizing Beaker. Caches action or other function that returns a pickle-able object as a result. Optional arguments: ``expire`` Time in seconds before cache expires, or the string "never". Defaults to "never" ``invalidate_on_startup`` If True, the cache will be invalidated each time the application starts or is restarted. If cache_enabled is set to False in the .ini file, then cache is disabled globally. """ if invalidate_on_startup: starttime = time.time() else: starttime = None def wrapper(func, *args, **kwargs): """Decorator wrapper""" enabled = pylons.config.get("cache_enabled", "True") if not asbool(enabled): log.debug("Caching disabled, skipping cache lookup") return func(*args, **kwargs) key_dict=kwargs.copy() key_dict.update(_make_dict_from_args(func, args)) cache_key = " ".join(["%s=%s" % (k, v) for k, v in key_dict.iteritems()]) if hasattr(func, "im_class"): namespace="%s.%s.%s" % (func.__module__, func.im_class.__name__, func.__name__) else: namespace="%s.%s" % (func.__module__, func.__name__) my_cache = pylons.cache.get_cache(namespace, **b_kwargs) def create_func(): log.debug("Creating new cache copy with key: %s", cache_key) return func(*args, **kwargs) return my_cache.get_value(cache_key, createfunc=create_func, expiretime=expire, starttime=starttime) return decorator(wrapper) -- Wichert Akkerman <wich...@wiggy.net> It is simple to make things. http://www.wiggy.net/ It is hard to make things simple. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "pylons-discuss" group. To post to this group, send email to pylons-discuss@googlegroups.com To unsubscribe from this group, send email to pylons-discuss+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/pylons-discuss?hl=en -~----------~----~----~----~------~----~------~--~---