def set(self, key, value, expire=_DEFAULT_TTL, namespace=None): from kay.ext.live_settings.models import KayLiveSetting old_namespace = namespace_manager.get_namespace() try: if namespace is not None: namespace_manager.set_namespace(namespace) new_setting = KayLiveSetting( key_name=key, ttl=expire, value=value, ) new_setting.put() # Set the memcached key to never expire. It only expires # if it is evicted from memory. TTLs are handled by the # in-memory cache. memcache.set("kay:live:%s" % key, (value, expire)) self._set_local_cache(key, value, ttl=expire, namespace=namespace) finally: if namespace is not None: namespace_manager.set_namespace(old_namespace) return new_setting
def set_multi(self, data, expire=_DEFAULT_TTL, namespace=None): from kay.ext.live_settings.models import KayLiveSetting old_namespace = namespace_manager.get_namespace() try: if namespace is not None: namespace_manager.set_namespace(namespace) data_items = data.items() db.put( map( lambda x: KayLiveSetting( key_name=x[0], ttl=expire, value=x[1]), data_items)) memcache.set_multi( dict( map(lambda x: ("kay:live:%s" % x[0], (x[1], expire)), data_items))) for key, value in data_items: self._set_local_cache(key, value, ttl=expire, namespace=namespace) finally: if namespace is not None: namespace_manager.set_namespace(old_namespace)