def __init__(self, core, conf): s_eventbus.EventBus.__init__(self) s_config.Configable.__init__(self) s_telepath.reqNotProxy(core) self.core = core # type: s_cores_common.Cortex core.link(self.dist) def fini(): core.unlink(self.dist) self.onfini(fini) # check for decorated functions for model rev self._syn_mrevs = [] for name, meth in s_reflect.getItemLocals(self): mrev = getattr(meth, '_syn_mrev', None) if mrev is None: continue name, vers = mrev self._syn_mrevs.append((name, vers, meth)) self.initCoreModule() self.setConfOpts(conf) self.postCoreModule()
def __init__(self, core, conf): s_eventbus.EventBus.__init__(self) s_config.Configable.__init__(self) if self._mod_name is None: self._mod_name = self.__class__.__name__ s_telepath.reqNotProxy(core) self.core = core # type: s_cores_common.Cortex # check for decorated functions for model rev self._syn_mrevs = [] for name, meth in s_reflect.getItemLocals(self): mrev = getattr(meth, '_syn_mrev', None) if mrev is None: continue name, vers = mrev self._syn_mrevs.append((name, vers, meth)) self.initCoreModule() self.setConfOpts(conf) self.postCoreModule() # Add the automatic fini handler self.onfini(self.finiCoreModule)
def __init__(self): self.isfini = False self.finlock = finlock self.finievt = threading.Event() self._syn_funcs = collections.defaultdict(list) self._syn_links = [] self._syn_queues = {} self._fini_funcs = [] for name, valu in s_reflect.getItemLocals(self): if not callable(valu): continue # check for onfini() decorator if getattr(valu, '_ebus_onfini', None): self.onfini(valu) continue # check for on() decorators for name, filt in getattr(valu, '_ebus_ons', ()): self.on(name, valu, **filt) self.fire('ebus:init')
def _loadDecoratedFuncs(self): for name, meth in s_reflect.getItemLocals(self): if not callable(meth): pass attr = getattr(meth, '_syn_config', None) if attr is None: continue self._syn_confs.append((attr, meth)) for attr, meth in self._syn_confs: if attr in self._syn_loaded_confs: continue self.addConfDefs(meth()) self._syn_loaded_confs.add(attr)
def inspect_mod(mod, cls): '''Find Config classes in a module which has @confdef decorated functions in them.''' for modname in dir(mod): valu = getattr(mod, modname) try: is_cls = issubclass(valu, cls) except TypeError: continue if not is_cls: continue # Snag configable defs for name, meth in s_reflect.getItemLocals(valu): attr = getattr(meth, '_syn_config', None) if attr is None: continue yield modname, valu, name, meth()
def _loadDecoratedFuncs(self): for name, meth in s_reflect.getItemLocals(self): # Telepath will attempt to give you callable Method for any attr # you ask for which will end poorly for us when we try to call it if s_telepath.isProxy(meth): continue attr = getattr(meth, '_syn_config', None) if attr is None: continue self._syn_confs.append((attr, meth)) for attr, meth in self._syn_confs: if attr in self._syn_loaded_confs: continue self.addConfDefs(meth()) self._syn_loaded_confs.add(attr)
def getClientSides(item): ''' Return a dict of name:path pairs for any clientside functions in item. ''' retn = {} for name, valu in s_reflect.getItemLocals(item): if not getattr(valu, '_tele_clientside', False): continue path = s_reflect.getMethName(valu) if path is None: continue retn[name] = path return retn
def __init__(self, core, conf): s_eventbus.EventBus.__init__(self) s_config.Configable.__init__(self) s_telepath.reqNotProxy(core) self.core = core # type: s_cores_common.Cortex core.link(self.dist) def fini(): core.unlink(self.dist) self.onfini(fini) # check for decorated functions for model rev self._syn_mrevs = collections.defaultdict(list) for name, meth in s_reflect.getItemLocals(self): mrev = getattr(meth, '_syn_mrev', None) if mrev is None: continue name, vers = mrev self._syn_mrevs[name].append((vers, meth)) # Generate rev0 functions for new Cortex instances. for name, modl in self.getBaseModels(): revision = 0 if core.isnew and name in self._syn_mrevs: _vers = [vers for vers, meth in self._syn_mrevs.get(name)] revision = max(_vers) def rev0(): self.core.addDataModel(name, modl) return revision self._syn_mrevs[name].append((0, rev0)) # ensure the revs are in sequential order [v.sort(key=lambda x: x[0]) for v in self._syn_mrevs.values()] self.initCoreModule() self.setConfOpts(conf) self.postCoreModule()
def test_reflect_getItemLocals(self): foo = Foo() locls = s_reflect.getItemLocals(foo) self.isin(('foo', foo.foo), locls) self.isin(('lol', foo.lol), locls)