Beispiel #1
0
    def test_trigger_base(self):

        trig = s_trigger.Triggers()

        data = {}

        def foo():
            data['valu'] = 'foo'

        def bar():
            data['valu'] = 'bar'

        def baz():
            data['valu'] = 'baz'

        trig.add(foo, ('hehe:*', {}))
        trig.add(bar, ('haha:hoho', {'blah': 'woot*'}))
        trig.add(baz, ('rofl:lulz', {'gronk': 'boing'}))

        trig.trigger(('hehe:haha', {}))
        self.eq(data.pop('valu'), 'foo')

        trig.trigger(('haha:hoho', {'blah': 'lulz'}))
        self.none(data.get('valu'))

        trig.trigger(('haha:hoho', {'blah': 'wootwoot'}))
        self.eq(data.pop('valu'), 'bar')
Beispiel #2
0
    async def __anit__(self, core, node):
        '''
        Async init the view.

        Args:
            core (Cortex):  The cortex that owns the view.
            node (HiveNode): The hive node containing the view info.
        '''
        self.node = node
        self.iden = node.name()
        self.info = await node.dict()

        self.core = core
        self.dirn = s_common.gendir(core.dirn, 'views', self.iden)

        slabpath = s_common.genpath(self.dirn, 'viewstate.lmdb')
        self.viewslab = await s_lmdbslab.Slab.anit(slabpath)
        self.trigqueue = self.viewslab.getSeqn('trigqueue')

        trignode = await node.open(('triggers',))
        self.trigdict = await trignode.dict()

        self.triggers = s_trigger.Triggers(self)
        for _, tdef in self.trigdict.items():
            try:
                await self.triggers.load(tdef)

            except asyncio.CancelledError:  # pragma: no cover  TODO:  remove once >= py 3.8 only
                raise

            except Exception:
                logger.exception(f'Failed to load trigger {tdef!r}')

        await s_nexus.Pusher.__anit__(self, iden=self.iden, nexsroot=core.nexsroot)

        self.onfini(self.viewslab.fini)

        self.layers = []
        self.invalid = None
        self.parent = None  # The view this view was forked from

        self.permCheck = {
            'node:add': self._nodeAddConfirm,
            'prop:set': self._propSetConfirm,
            'tag:add': self._tagAddConfirm,
            'tag:prop:set': self._tagPropSetConfirm,
        }

        # isolate some initialization to easily override.
        await self._initViewLayers()

        self.trigtask = None
        await self.initTrigTask()
Beispiel #3
0
    async def __anit__(self, core, node):
        '''
        Async init the view.

        Args:
            core (Cortex):  The cortex that owns the view.
            node (HiveNode): The hive node containing the view info.
        '''
        self.node = node
        self.iden = node.name()
        self.info = await node.dict()

        self.core = core

        trignode = await node.open(('triggers', ))
        self.trigdict = await trignode.dict()

        self.triggers = s_trigger.Triggers(self)
        for _, tdef in self.trigdict.items():
            try:
                self.triggers.load(tdef)

            except asyncio.CancelledError:
                raise

            except Exception:
                logger.exception(f'Failed to load trigger {tdef!r}')

        await s_nexus.Pusher.__anit__(self,
                                      iden=self.iden,
                                      nexsroot=core.nexsroot)

        self.layers = []
        self.invalid = None
        self.parent = None  # The view this view was forked from

        self.permCheck = {
            'node:add': self._nodeAddConfirm,
            'prop:set': self._propSetConfirm,
            'tag:add': self._tagAddConfirm,
            'tag:prop:set': self._tagPropSetConfirm,
        }

        # isolate some initialization to easily override for SpawnView.
        await self._initViewLayers()
Beispiel #4
0
    async def __anit__(self, dirn):

        await s_cell.Cell.__anit__(self, dirn)

        self.layers = []
        self.modules = {}
        self.feedfuncs = {}

        self.stormcmds = {}
        self.stormrunts = {}

        self.libroot = (None, {}, {})
        self.bldgbuids = {} # buid -> (Node, Event)  Nodes under construction

        self.addStormCmd(s_storm.MaxCmd)
        self.addStormCmd(s_storm.MinCmd)
        self.addStormCmd(s_storm.HelpCmd)
        self.addStormCmd(s_storm.IdenCmd)
        self.addStormCmd(s_storm.SpinCmd)
        self.addStormCmd(s_storm.SudoCmd)
        self.addStormCmd(s_storm.UniqCmd)
        self.addStormCmd(s_storm.CountCmd)
        self.addStormCmd(s_storm.GraphCmd)
        self.addStormCmd(s_storm.LimitCmd)
        self.addStormCmd(s_storm.SleepCmd)
        self.addStormCmd(s_storm.DelNodeCmd)
        self.addStormCmd(s_storm.MoveTagCmd)
        self.addStormCmd(s_storm.ReIndexCmd)
        self.addStormCmd(s_storm.NoderefsCmd)

        self.addStormLib(('time',), s_stormtypes.LibTime)

        self.splicers = {
            'node:add': self._onFeedNodeAdd,
            'node:del': self._onFeedNodeDel,
            'prop:set': self._onFeedPropSet,
            'prop:del': self._onFeedPropDel,
            'tag:add': self._onFeedTagAdd,
            'tag:del': self._onFeedTagDel,
        }

        self.setFeedFunc('syn.nodes', self._addSynNodes)
        self.setFeedFunc('syn.splice', self._addSynSplice)
        self.setFeedFunc('syn.ingest', self._addSynIngest)

        await self._initCoreLayers()
        await self._checkLayerModels()

        async def fini():
            await asyncio.gather(*[layr.fini() for layr in self.layers], loop=self.loop)
        self.onfini(fini)

        self.agenda = await s_agenda.Agenda.anit(self)
        self.onfini(self.agenda)

        # these may be used directly
        self.model = s_datamodel.Model()
        self.view = View(self, self.layers)

        self.ontagadds = collections.defaultdict(list)
        self.ontagdels = collections.defaultdict(list)

        self._runtLiftFuncs = {}
        self._runtPropSetFuncs = {}
        self._runtPropDelFuncs = {}

        await self.addCoreMods(s_modules.coremods)

        self.triggers = s_trigger.Triggers(self)

        mods = self.conf.get('modules')

        self._initFormCounts()

        await self.addCoreMods(mods)

        if self.conf.get('cron:enable'):
            await self.agenda.enable()

        self._initCryoLoop()
        self._initPushLoop()
        self._initFeedLoops()