@defaultconfig @depend(redisdb.RedisDB) class RedisNotifier(Module): """ Update notification with Redis Pub/Sub """ _default_vhostbind = '' _default_prefix = 'vlcp.updatenotifier.' _default_singlecastlimit = 256 _default_deflate = False def __init__(self, server): Module.__init__(self, server) self.createAPI(api(self.createnotifier)) def load(self, container): self.scheduler.queue.addSubQueue(999, ModifyListen.createMatcher(), "redisnotifier_modifylisten") for m in Module.load(self, container): yield m def unload(self, container, force=False): for m in Module.unload(self, container, force=force): yield m for m in container.syscall_noreturn(syscall_removequeue(self.scheduler.queue, "redisnotifier_modifylisten")): yield m def createnotifier(self): "Create a new notifier object" n = _Notifier(self.vhostbind, self.prefix, self.scheduler, self.singlecastlimit, self.deflate) n.start() return n UpdateNotifier = proxy('UpdateNotifier', RedisNotifier)
''' Created on 2016/3/22 :author: hubo ''' import vlcp.service.connection.redisdb as redisdb from vlcp.server.module import proxy KVStorage = proxy('KVStorage', redisdb.RedisDB)
# module.redisdb.deflate=True _default_deflate = False def __init__(self, server): Module.__init__(self, server) self.createAPI(api(self.createnotifier)) def load(self, container): self.scheduler.queue.addSubQueue(999, ModifyListen.createMatcher(), "redisnotifier_modifylisten") for m in Module.load(self, container): yield m def unload(self, container, force=False): for m in Module.unload(self, container, force=force): yield m for m in container.syscall_noreturn( syscall_removequeue(self.scheduler.queue, "redisnotifier_modifylisten")): yield m def createnotifier(self): "Create a new notifier object" n = _Notifier(self.vhostbind, self.prefix, self.scheduler, self.singlecastlimit, self.deflate) n.start() return n UpdateNotifier = proxy('UpdateNotifier', RedisNotifier)
self._set(k, v, t, timeout) else: self.delete(k) return (newkeys, newvs) def return_self_updater(func): ''' Run func, but still return v. Useful for using knowledge.update with operates like append, extend, etc. e.g. return_self(lambda k,v: v.append('newobj')) ''' @functools.wraps(func) def decorator(k, v): func(k, v) return v return decorator def escape_key(k): "Escape k, ensuring there is not a '.' in the string." return k.replace('+', '+_').replace('.', '++') def unescape_key(k): "Unescape key to get '.' back" return k.replace('++', '.').replace('+_', '+') MemoryStorage = proxy('MemoryStorage', Knowledge)