Example #1
0
    def test_telepath_eval(self):

        foo = s_telepath.evalurl('ctor://synapse.tests.test_telepath.Foo()')
        self.eq(foo.bar(10, 20), 30)

        env0 = self.getFooEnv()
        port = env0.link[1].get('port')

        foo = s_telepath.evalurl('tcp://127.0.0.1/foo', port=port)
        self.eq(foo.bar(10, 20), 30)

        foo.fini()
        env0.fini()
Example #2
0
    def test_telepath_eval(self):

        foo = s_telepath.evalurl('ctor://synapse.tests.test_telepath.Foo()')
        self.assertEqual( foo.bar(10,20), 30 )

        env0 = self.getFooEnv()
        port = env0.link[1].get('port')

        foo = s_telepath.evalurl('tcp://127.0.0.1/foo', port=port)
        self.assertEqual( foo.bar(10,20), 30 )

        foo.fini()
        env0.fini()
Example #3
0
    def loadDmonConf(self, conf):
        '''
        '''
        for path in conf.get('includes',()):
            fullpath = os.path.expanduser(path)
            self.loadDmonFile(fullpath)

        self._addConfValu(conf,'poolsize')

        for name,url in conf.get('ctors',()):

            item = s_telepath.evalurl(url,locs=self.locs)
            self.locs[name] = item

            self.fire('dmon:conf:ctor', name=name, item=item)

        for name,url in conf.get('addons',()):

            try:
                item = s_telepath.evalurl(url,locs=self.locs)
            except Exception as e:
                raise Exception('DmonConf addon (%s): %s %s' % (name,e.__class__.__name__,e))

            self.addons[name] = item

            self.fire('dmon:conf:addon', name=name, item=item)

        svcbus = self.addons.get('syn.svcbus')

        svcruns = conf.get('svc:run',())
        if svcruns and not svcbus:
            raise Exception('svc:run with no syn.svcbus addon!')

        for name,opts in svcruns:
            item = self.locs.get(name)
            if item == None:
                raise NoSuchObj(name)

            tags = opts.get('tags',())
            svcname = opts.get('name',name)

            s_service.runSynSvc(svcname, item, svcbus, tags=tags)
Example #4
0
    def dmoneval(self, url):
        '''
        Evaluate ( and cache ) a URL (or local var/ctor name).

        This allows multiple instances of the same URL to resolve to the
        same object.
        '''
        item = self.locs.get(url)

        if item is None:
            item = self.evalcache.get(url)

        if item is None:
            item = s_telepath.evalurl(url, locs=self.locs)
            self.evalcache[url] = item

        return item
Example #5
0
    def dmoneval(self, url):
        '''
        Evaluate ( and cache ) a URL (or local var/ctor name).

        This allows multiple instances of the same URL to resolve to the
        same object.
        '''
        item = self.locs.get(url)

        if item == None:
            item = self.evalcache.get(url)

        if item == None:
            item = s_telepath.evalurl(url,locs=self.locs)
            self.evalcache[url] = item

        return item
Example #6
0
    def loadDmonConf(self, conf):
        '''
        {
            'title':'The Foo Thing',

            'vars':{
                'foo':10,
                'bar':["baz","faz"]
            }

            'forks':(
                ('name',{
                    # nested config for forked dmon
                },
            ),

            'includes':(
                '~/foo/config.json',
            ),

            'ctors':(
                ('baz','ctor://foo.bar.Baz()'),
                ('mybus','tcp://host.com/syn.svcbus'),
            ),

            'services':(
                ('mybus',(
                    ('baz',{'tags':('foo.bar','baz')}),
                ),
            ),
        }
        '''
        checkConfDict(conf)
        self.locs.update( conf.get('vars',{}) )

        # handle forks first to prevent socket bind weirdness
        for name,subconf in conf.get('forks',()):
            self._fireDmonFork(name,subconf)

        title = conf.get('title')
        if title != None:
            s_thisplat.setProcName('dmon: %s' % title)

        # handle includes next
        for path in conf.get('includes',()):
            fullpath = os.path.expanduser(path)
            try:
                self.loadDmonFile(fullpath)
            except Exception as e:
                raise Exception('Include Error (%s): %s' % (path,e))

        self._addConfValu(conf,'poolsize')

        for name,url in conf.get('ctors',()):

            item = s_telepath.evalurl(url,locs=self.locs)
            self.locs[name] = item

            self.fire('dmon:conf:ctor', name=name, item=item)

        for busname,svcruns in conf.get('services',()):
            svcbus = self.locs.get(busname)
            if svcbus == None:
                raise NoSuchObj(name)

            for svcname,svcopts in svcruns:
                item = self.locs.get(svcname)
                if item == None:
                    raise NoSuchObj(svcname)

                tags = svcopts.get('tags',())
                svcname = svcopts.get('name',svcname)

                s_service.runSynSvc(svcname, item, svcbus, tags=tags)