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()
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()
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)
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
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
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)