Exemple #1
0
    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()
Exemple #2
0
    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)
Exemple #3
0
    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')
Exemple #4
0
    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)
Exemple #5
0
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()
Exemple #6
0
    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)
Exemple #7
0
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
Exemple #8
0
    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)