def test_onGotDistribution(self): self.dm.broadcastLogs = Mock() self.dm.handleDistribution = Mock(side_effect=utils.good_side_effect('lush')) self.dm._errback = Mock(side_effect=utils.good_side_effect('err logged')) item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(1) params = sim.Parameters(run_id='1', cmd='results') params_el = params.toElement() progress = sim.Progress(200) params_el.addChild(progress.toElement()) dist = sim.Distributions() hist = defaultdict(int) hist[1] = 1 hist[2] = 2 dist.combine('a', hist) params_el.addChild(dist.toElement()) item.addChild(params_el) lg = sim.Logger() d = self.dm.onGotDistribution(params, item, lg) def check(data): self.assertFalse(self.dm.broadcastLogs.called) self.assertEquals(self.dm.handleDistribution.call_count, 1) self.assertFalse(self.dm._errback.called) d.addCallback(check) self.sch.clock.pump([1,1,1]) return d
def set(self, file, xdbns, element): """ Sets a specific xdb namespace in the XDB 'file' to element """ try: element.attributes["xdbns"] = xdbns document = None try: document = self.__getFile(file) except IOError: pass if not document: document = Element((None, "xdb")) # Remove the existing node (if any) for child in document.elements(): if child.getAttribute("xdbns") == xdbns: document.children.remove(child) # Add the new one document.addChild(element) self.__writeFile(file, document.toXml()) except: LogEvent(INFO, msg="XDB error writing entry %s to file %s" % (xdbns, file)) raise
def toElement(self): el = Element((collab.COLLAB_NS, 'asset')) el.addElement('name', content=self.name) el.addElement('dp', content=str(self.dp)) el.addElement('recovery', content=str(self.recovery)) el.addElement('notional', content=str(self.notional)) if self.issuer: el.addChild(self.issuer.toElement()) return el
def sendPresence(pytrans, to, fro, show=None, status=None, priority=None, ptype=None, avatarHash=None, nickname=None, payload=[], url=None): if ptype in ["subscribe", "subscribed", "unsubscribe", "unsubscribed"]: to = internJID(to).userhost() fro = internJID(fro).userhost() el = Element((None, "presence")) el.attributes["to"] = to el.attributes["from"] = fro if ptype: el.attributes["type"] = ptype if show: s = el.addElement("show") s.addContent(utils.xmlify(show)) if status: s = el.addElement("status") s.addContent(utils.xmlify(status)) if priority: s = el.addElement("priority") s.addContent(priority) if url: s = el.addElement("x") s.attributes["xmlns"] = globals.XOOB s = el.addElement("url") s.addContent(url) if not ptype: if avatarHash and not config.disableAvatars and not config.disableVCardAvatars: x = el.addElement("x") x.attributes["xmlns"] = globals.VCARDUPDATE p = x.addElement("photo") p.addContent(avatarHash) if nickname: x = el.addElement("x") x.attributes["xmlns"] = globals.VCARDUPDATE n = x.addElement("nickname") n.addContent(nickname) if avatarHash and not config.disableAvatars and not config.disableIQAvatars: x = el.addElement("x") x.attributes["xmlns"] = globals.XAVATAR h = x.addElement("hash") h.addContent(avatarHash) if nickname and ptype == "subscribe": n = el.addElement("nick") n.attributes["xmlns"] = globals.NICK n.addContent(nickname) if payload: for p in payload: el.addChild(p) pytrans.send(el)
def joinChatRoom(self, room): presence = Element( (None,'presence') ) presence['from'] = self.jid.userhost() jid = '%s@%s/%s' % (room,self.SERVICECONFIG.JABBER_CHAT_SERVICE,self.SERVICECONFIG.JABBER_CHAT_NICK) presence['to'] = jid x = Element( ('http://jabber.org/protocol/muc','x') ) history = Element( (None,'history') ) history['maxchars'] = '0' x.addChild(history) presence.addChild(x) log('sending join: %s' % presence.toXml()) self.xmlstream.send(presence)
def _dictToPubSubItem(self, adict): item = Element((None, 'item')) item['id'] = adict['id'] entry = Element(('http://www.w3.org/2005/Atom', 'entry')) for key in ['author', 'updated', 'published', 'content']: entry.addElement(key, content=adict[key]) geolocation = adict.get('geolocation') if geolocation: entry.addElement('geolocation') entry.geolocation['lattitude'] = geolocation['lattitude'] entry.geolocation['longitude'] = geolocation['longitude'] item.addChild(entry) return item
def _dictToPubSubItem(self, adict): item = Element((None, 'item')) item['id'] = adict['id'] entry = Element(('http://www.w3.org/2005/Atom', 'entry')) for key in ['author', 'updated', 'published', 'content']: entry.addElement(key, content=adict[key]) geolocation = adict.get('geolocation') if geolocation: entry.addElement('geolocation') entry.geolocation['latitude'] = geolocation['latitude'] entry.geolocation['longitude'] = geolocation['longitude'] item.addChild(entry) return item
def joinChatRoom(self, room): presence = Element((None, 'presence')) presence['from'] = self.jid.userhost() jid = '%s@%s/%s' % (room, self.SERVICECONFIG.JABBER_CHAT_SERVICE, self.SERVICECONFIG.JABBER_CHAT_NICK) presence['to'] = jid x = Element(('http://jabber.org/protocol/muc', 'x')) history = Element((None, 'history')) history['maxchars'] = '0' x.addChild(history) presence.addChild(x) log('sending join: %s' % presence.toXml()) self.xmlstream.send(presence)
def requestAuthorization(self, to): request = Element((None, 'iq')) request['type'] = 'set' request['id'] = 'auth-request:%s' % to query = Element((None, 'query')) query['xmlns'] = 'jabber:iq:roster' item = Element((None, 'item')) item['jid'] = to item['name'] = to.split('@')[0] query.addChild(item) request.addChild(query) log('sending auth request: %s' % request.toXml()) self.xmlstream.send(request)
def send(self, obj): if self.routewrap == 1 and type(obj) == Element: to = obj.getAttribute("to") route = Element((None, "route")) route.attributes["from"] = config.jid route.attributes["to"] = internJID(to).host route.addChild(obj) obj.attributes["xmlns"] = "jabber:client" component.Service.send(self, route.toXml()) else: if type(obj) == Element: obj = obj.toXml() component.Service.send(self, obj)
def send(self, obj): if self.routewrap == 1 and type(obj) == Element: to = obj.getAttribute("to") route = Element((None,"route")) route.attributes["from"] = config.jid route.attributes["to"] = internJID(to).host route.addChild(obj) obj.attributes["xmlns"] = "jabber:client" component.Service.send(self,route.toXml()) else: if type(obj) == Element: obj = obj.toXml() component.Service.send(self,obj)
def requestAuthorization(self, to): request = Element( (None,'iq') ) request['type'] = 'set' request['id'] = 'auth-request:%s' % to query = Element( (None,'query') ) query['xmlns'] = 'jabber:iq:roster' item = Element( (None,'item') ) item['jid'] = to item['name'] = to.split('@')[0] query.addChild(item) request.addChild(query) log('sending auth request: %s' % request.toXml()) self.xmlstream.send(request)
def sendMessage(pytrans, to, fro, body=None, mtype=None, delay=None, xhtml=None, nickname=None, receipt=None, mID=None): """ Sends a Jabber message """ LogEvent(INFO) el = Element((None, "message")) el.attributes["to"] = to el.attributes["from"] = fro if mID: el.attributes["id"] = mID else: el.attributes["id"] = pytrans.makeMessageID() if mtype: el.attributes["type"] = mtype if delay: x = el.addElement("x") x.attributes["xmlns"] = globals.XDELAY x.attributes["from"] = fro x.attributes["stamp"] = delay if nickname: n = el.addElement("nick") n.attributes["xmlns"] = globals.NICK n.addContent(nickname) if receipt: r = el.addElement("received") r.attributes["xmlns"] = globals.RECEIPTS else: # do not send state info in message receipt x = el.addElement("x") x.attributes["xmlns"] = globals.XEVENT composing = x.addElement("composing") xx = el.addElement("active") xx.attributes["xmlns"] = globals.CHATSTATES if body: b = el.addElement("body") b.addContent(utils.xmlify(body)) if xhtml and not config.disableXHTML: try: el.addChild(utils.parseText(xhtml)) except: # Hrm, didn't add, we're not going to end the world # because of it. pass pytrans.send(el) sendArchive(pytrans, to, fro, body)
def test_onGotStartSimulation_noPortfolio(self): run_id = '1' item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(run_id) params = sim.Parameters(run_id=run_id, cmd='info') params_el = item.addChild(params.toElement()) logger = sim.Logger() self.cds.broadcastLogs = Mock(side_effect=utils.good_side_effect('done')) self.cds.broadcastResults = Mock() self.cds.simulatorFactory = MagicMock() self.cds._errback = Mock() gen = self.cds.onGotStartSimulation(params, item, logger) d = gen.next() def check(data): self.cds.broadcastLogs.assert_called_once_with(logger, params) self.assertFalse(self.cds.broadcastResults.called) self.assertFalse(self.cds.simulatorFactory.__getitem__.called) self.assertFalse(self.cds._errback.called) d.addCallback(check) self.assertRaises(StopIteration, gen.next) return d
def sendMessage(pytrans, to, fro, body, mtype=None, delay=None, xhtml=None, nickname=None): """ Sends a Jabber message """ LogEvent(INFO) el = Element((None, "message")) el.attributes["to"] = to el.attributes["from"] = fro el.attributes["id"] = pytrans.makeMessageID() if mtype: el.attributes["type"] = mtype if delay: x = el.addElement("x") x.attributes["xmlns"] = globals.XDELAY x.attributes["from"] = fro x.attributes["stamp"] = delay if nickname: n = el.addElement("nick") n.attributes["xmlns"] = globals.NICK n.addContent(nickname) b = el.addElement("body") b.addContent(utils.xmlify(body)) x = el.addElement("x") x.attributes["xmlns"] = globals.XEVENT composing = x.addElement("composing") xx = el.addElement("active") xx.attributes["xmlns"] = globals.CHATSTATES if xhtml and not config.disableXHTML: try: el.addChild(utils.parseText(xhtml)) except: # Hrm, didn't add, we're not going to end the world # because of it. pass pytrans.send(el) sendArchive(pytrans, to, fro, body)
def test_onGotItem_info(self): self.cds.onGotStartSimulation = Mock() self.cds.onGotStoppedSimulation = Mock() run_id = '1' item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(run_id) params = sim.Parameters(run_id=run_id, cmd='info') item.addChild(params.toElement()) d = self.cds.onGotItem(item) def check(data): self.assertTrue(data is None) self.assertFalse(self.cds.onGotStartSimulation.called) self.assertFalse(self.cds.onGotStoppedSimulation.called) d.addCallback(check) self.sch.clock.pump([1]) return d
def test_onGotItem_results(self): self.dm.onGotDistribution = Mock(side_effect=utils.good_side_effect('lush')) self.dm.onGotStoppedSimulation = Mock() item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(1) params = sim.Parameters(run_id='1', cmd='results') params_el = params.toElement() params_el.addChild(sim.Progress(200).toElement()) params_el.addChild(sim.Distributions().toElement()) item.addChild(params_el) d = self.dm.onGotItem(item) def check(data): self.assertEquals(data, 'lush') self.assertEquals(self.dm.onGotDistribution.call_count, 1) self.assertFalse(self.dm.onGotStoppedSimulation.called) d.addCallback(check) return d
def test_onGotItem_start_alreadyGoing(self): self.cds.onGotStartSimulation = Mock() self.cds.onGotStoppedSimulation = Mock() run_id = '1' self.cds.tasks[run_id] = 'I should be a task' item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(run_id) params = sim.Parameters(run_id=run_id, cmd='start') item.addChild(params.toElement()) d = self.cds.onGotItem(item) def check(data): self.assertTrue(data is None) self.assertFalse(self.cds.onGotStartSimulation.called) self.assertFalse(self.cds.onGotStoppedSimulation.called) d.addCallback(check) return d
def test_onGotItem_stop(self): self.cds.onGotStartSimulation = Mock() self.cds.onGotStoppedSimulation = Mock(side_effect=utils.good_side_effect('done')) run_id = '1' item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(run_id) params = sim.Parameters(run_id=run_id, cmd='stop') item.addChild(params.toElement()) d = self.cds.onGotItem(item) def check(data): self.assertEquals(data, 'done') self.assertEquals(self.cds.onGotStoppedSimulation.call_count, 1) self.assertFalse(self.cds.onGotStartSimulation.called) d.addCallback(check) self.sch.clock.pump([1]) return d
def test_onGotItem_stopping(self): cdm = CorrelatedDefaultsManager(testjid) cdm.broadcastStart = Mock() cdm.broadcastStop = Mock(side_effect=utils.good_side_effect('lush')) cdm.broadcastLogs = Mock() item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(1) params = simulation.Parameters(cmd='stop') expected = params.toElement() item.addChild(expected) out = yield cdm.onGotItem(item) self.assertFalse(cdm.broadcastStart.called) self.assertEquals(cdm.broadcastStop.call_count, 1) self.assertFalse(cdm.broadcastLogs.called) for ((a,), dic) in cdm.broadcastStop.call_args_list: self.assertEquals(a.toElement().toXml(), expected.toXml())
def sendPresence(pytrans, to, fro, show=None, status=None, priority=None, ptype=None, avatarHash=None, nickname=None, payload=[]): # Strip the resource off any presence subscribes (as per XMPP RFC 3921 Section 5.1.6) # Makes eJabberd behave :) if ptype in ("subscribe", "subscribed", "unsubscribe", "unsubscribed"): to = internJID(to).userhost() fro = internJID(fro).userhost() el = Element((None, "presence")) el.attributes["to"] = to el.attributes["from"] = fro if(ptype): el.attributes["type"] = ptype if(show): s = el.addElement("show") s.addContent(show) if(status): s = el.addElement("status") s.addContent(status) if(priority): s = el.addElement("priority") s.addContent(priority) if(not ptype): x = el.addElement("x") x.attributes["xmlns"] = disco.XVCARDUPDATE if(avatarHash): xx = el.addElement("x") xx.attributes["xmlns"] = disco.XAVATAR h = xx.addElement("hash") h.addContent(avatarHash) h = x.addElement("photo") h.addContent(avatarHash) if(nickname): n = x.addElement("nickname") n.addContent(nickname) if(payload): for p in payload: el.addChild(p) pytrans.send(el)
def toElement(self): el = Element((self.defaultUri, 'command')) el['node'] = self.node el['sessionid'] = self.sessionid if self.status: el['status'] = self.status if self.action: el['action'] = self.action if self.actions: el.addChild(self.actions.toElement()) if self.form: el.addChild(self.form.toElement()) if self.notes: [el.addChild(n.toElement()) for n in self.notes] return el
def test_onGotItem_start_notAlreadyGoing(self): self.cds.onGotStartSimulation = Mock(side_effect=utils.good_side_effect('done')) self.cds.onGotStoppedSimulation = Mock() run_id = '1' item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(run_id) params = sim.Parameters(run_id=run_id, cmd='start') item.addChild(params.toElement()) self.assertFalse(run_id in self.cds.tasks) d = self.cds.onGotItem(item) def check(data): self.assertTrue(data is None) self.assertEquals(self.cds.onGotStartSimulation.call_count, 1) self.assertIn(run_id, self.cds.tasks) self.assertTrue(isinstance(self.cds.tasks[run_id], task.CooperativeTask)) self.assertFalse(self.cds.onGotStoppedSimulation.called) d.addCallback(check) self.sch.clock.pump([1]) return d
def test_onGotDistribution_noProgress_badBroadcast(self): self.dm.broadcastLogs = Mock(side_effect=utils.bad_side_effect(Exception('%s: groan' % self.__class__))) self.dm.handleDistribution = Mock() self.dm._errback = Mock(side_effect=utils.good_side_effect('err logged')) item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(1) params = sim.Parameters(run_id='1', cmd='results') params_el = params.toElement() params_el.addChild(sim.Distributions().toElement()) item.addChild(params_el) lg = sim.Logger() d = self.dm.onGotDistribution(params, item, lg) def check(data): self.assertFalse(self.dm.handleDistribution.called) self.assertEquals(self.dm.broadcastLogs.call_count, 1) self.assertEquals(self.dm._errback.call_count, 1) d.addCallback(check) self.sch.clock.pump([1,1,1]) return d
def set(self, file, xdbns, element): """ Sets a specific xdb namespace in the XDB 'file' to element """ try: element.attributes["xdbns"] = xdbns document = None try: document = self.__getFile(file) except IOError: pass if (not document): document = Element((None, "xdb")) # Remove the existing node (if any) for child in document.elements(): if (child.getAttribute("xdbns") == xdbns): document.children.remove(child) # Add the new one document.addChild(element) self.__writeFile(file, document.toXml()) except IOError, e: LogEvent(WARN, "", "IOError " + str(e)) raise
def to_xml(self, internal=False): result = Element(("", self._to_value(self.name))) result["type"] = "message" if not internal: if self.id: result["id"] = unicode(self.id) for field in self.properties.keys(): value = self.get(field) if isinstance(value, list): el = result.addElement(field) el["type"] = "list" for item in value: if isinstance(item, Message): el.addChild(item.to_xml(True)) else: el.addElement("item", content=self._to_value(item)) elif isinstance(value, Message): result.addChild(value.to_xml(True)) else: if value: result.addElement(self._to_value(field), content=self._to_value(value)) if internal: return result return result.toXml()
def test_fromElement_notTopNode(self): el = Element(('http://jabber.org/protocol/pubsub#event', 'item')) s = simulation.Parameters(120, 'output', 1000, 'start') sim = el.addChild(s.toElement()) fs = [portfolio.Factor('f1', 0.1), portfolio.Factor('f2', 0.2), portfolio.Factor('f3', 0.3)] iss = [portfolio.Issuer('iss1', set(fs[0:1])), portfolio.Issuer('iss2', set(fs[1:2])), portfolio.Issuer('iss3', set(fs))] a1 = portfolio.Asset('ass1', issuer=iss[0]) a2 = portfolio.Asset('ass2', issuer=iss[1]) a3 = portfolio.Asset('ass3', issuer=iss[2]) a4 = portfolio.Asset('ass4', issuer=iss[2]) port = sim.addElement('portfolio') port.addElement('name', content='port') assets_el = port.addElement('assets') assets_el.addChild(a1.toElement()) assets_el.addChild(a2.toElement()) assets_el.addChild(a3.toElement()) assets_el.addChild(a4.toElement()) p = portfolio.Portfolio.fromElement(el) self.assertEquals(p.name, 'port') self.assertEquals(len(p.assets), 4) assets = [a1,a2,a3,a4] def getExpected(name, assets): for a in assets: if a.name == name: return a for i, ass in enumerate(p.assets): expected = getExpected(ass.name, assets) self.assertTrue(expected is not None) self.assertEquals(ass.dp, expected.dp) self.assertEquals(ass.recovery, expected.recovery) self.assertEquals(ass.notional, expected.notional) iss, exp_iss = ass.issuer, expected.issuer self.assertEquals(iss.name, exp_iss.name) facs, exp_facs = iss.factors, exp_iss.factors self.assertEquals(len(facs), len(exp_facs)) [checkFactor(f.name, f.weight, exp_facs) for f in facs]
def test_onGotItem_startNoRunId(self): cdm = CorrelatedDefaultsManager(testjid) cdm.broadcastStart = Mock() cdm.broadcastStop = Mock() cdm.broadcastLogs = Mock(side_effect=utils.good_side_effect('lush')) item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) params = simulation.Parameters(cmd='start') p = item.addChild(params.toElement()) p.addChild(portfolio.Portfolio('p1').toElement()) expected = simulation.Parameters(cmd='start', run_id=None, timestamp=params.timestamp).toElement() out = yield cdm.onGotItem(item) self.assertFalse(cdm.broadcastStart.called) self.assertEquals(cdm.broadcastLogs.call_count, 1) self.assertFalse(cdm.broadcastStop.called) for ((a,b), dic) in cdm.broadcastLogs.call_args_list: self.assertEquals(b.toElement().toXml(), expected.toXml())
def test_onGotStartSimulation_withPortfolio_noBroadcast_noFactory(self): run_id = '1' item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(run_id) params = sim.Parameters(run_id=run_id, cmd='info') params_el = item.addChild(params.toElement()) portfolio = port.Portfolio('jim') params_el.addChild(portfolio.toElement()) logger = sim.Logger() self.cds.broadcastLogs = Mock() self.cds.broadcastResults = Mock() self.cds.simulatorFactory = {} self.cds.simulatorFactory['sparse2'] = MagicMock() self.cds._errback = Mock() simulator = Mock() simulator.copula = Mock() def simCreater(*a, **kw): return simulator self.cds.simulatorFactory['sparse2'].side_effect = simCreater self.cds.max_runs = 6 self.cds.broadcast_freq = 10 chunk = 2 t = task.Cooperator(scheduler=self.sch.callLater) d = t.coiterate(self.cds.onGotStartSimulation(params, item, logger, chunk)) def check(data): self.assertFalse(self.cds.broadcastLogs.called) self.assertFalse(self.cds.broadcastResults.called) self.assertFalse(simulator.copula.called) self.assertTrue(self.cds._errback.called) d.addCallback(check) self.sch.clock.pump([1,1,1]) return d
def test_onGotStartSimulation_withPortfolio_twoBroadcastWithErrors(self): run_id = '1' item = Element((pubsub.NS_PUBSUB_EVENT, 'item')) item['id'] = str(run_id) params = sim.Parameters(run_id=run_id, cmd='info') params_el = item.addChild(params.toElement()) portfolio = port.Portfolio('jim') params_el.addChild(portfolio.toElement()) logger = sim.Logger() self.cds.broadcastLogs = Mock() self.cds.broadcastResults = Mock(side_effect=utils.good_side_effect('results')) self.cds.simulatorFactory['sparse'] = MagicMock() self.cds._errback = Mock() simulator = Mock() simulator.copula = Mock(side_effect=ValueError('%s: roar' % self.__class__)) def simCreater(*a, **kw): return simulator self.cds.simulatorFactory['sparse'].side_effect = simCreater self.cds.max_runs = 15 self.cds.broadcast_freq = 6 chunk = 3 t = task.Cooperator(scheduler=self.sch.callLater) d = t.coiterate(self.cds.onGotStartSimulation(params, item, logger, chunk)) def check(data): self.assertFalse(self.cds.broadcastLogs.called) self.assertEquals(self.cds.broadcastResults.call_count, 2) self.assertEquals(simulator.copula.call_count, 5) self.assertTrue(self.cds._errback.called) d.addCallback(check) self.sch.clock.pump([1,1,1,1]) return d
def test_fromElement(self): el = Element((collab.COMMAND_NS, 'command')) el['node'] = 'testNode' el['sessionid'] = 'sessionid1' el['status'] = 'completed' a = Actions() a.setDefault('next') el.addChild(a.toElement()) form = data_form.Form( formType='form', title=u'Unregister a machine', instructions=[u'Please select the machine to be unregistered'], formNamespace=collab.COLLAB_NS ) form.addField(data_form.Field( var = 'machine', label = u'Machine', desc = u'Please select a machine domain name', required = True, fieldType='list-multi', options = [data_form.Option(m) for m in ['one', 'two', 'three']] )) el.addChild(form.toElement()) n1 = Note('a test note') el.addChild(n1.toElement()) c = Command.fromElement(el) self.assertEquals(c.node, 'testNode') self.assertEquals(c.defaultUri, collab.COMMAND_NS) self.assertEquals(c.status, 'completed') self.assertEquals(c.sessionid, 'sessionid1') self.assertEquals(len(c.notes), 1) self.assertEquals(c.notes[0].toElement().toXml(), n1.toElement().toXml()) self.assertEquals(c.form.toElement().toXml(), form.toElement().toXml()) self.assertEquals(c.actions.toElement().toXml(), a.toElement().toXml())