def test_onVersion(self): """ Test response to incoming version request. """ self.stub = XmlStreamStub() self.protocol = generic.VersionHandler('Test', '0.1.0') self.protocol.xmlstream = self.stub.xmlstream self.protocol.send = self.stub.xmlstream.send self.protocol.connectionInitialized() iq = domish.Element((None, 'iq')) iq['from'] = '[email protected]/Home' iq['to'] = 'example.org' iq['type'] = 'get' query = iq.addElement((NS_VERSION, 'query')) self.stub.send(iq) response = self.stub.output[-1] self.assertEquals('[email protected]/Home', response['to']) self.assertEquals('example.org', response['from']) self.assertEquals('result', response['type']) self.assertEquals(NS_VERSION, response.query.uri) elements = list(domish.generateElementsQNamed(response.query.children, 'name', NS_VERSION)) self.assertEquals(1, len(elements)) self.assertEquals('Test', unicode(elements[0])) elements = list(domish.generateElementsQNamed(response.query.children, 'version', NS_VERSION)) self.assertEquals(1, len(elements)) self.assertEquals('0.1.0', unicode(elements[0]))
def test_publish(self): """ Test sending publish request. """ item = pubsub.Item() d = self.protocol.publish(JID('pubsub.example.org'), 'test', [item]) iq = self.stub.output[-1] self.assertEquals('pubsub.example.org', iq.getAttribute('to')) self.assertEquals('set', iq.getAttribute('type')) self.assertEquals('pubsub', iq.pubsub.name) self.assertEquals(NS_PUBSUB, iq.pubsub.uri) children = list( domish.generateElementsQNamed(iq.pubsub.children, 'publish', NS_PUBSUB)) self.assertEquals(1, len(children)) child = children[0] self.assertEquals('test', child['node']) items = list( domish.generateElementsQNamed(child.children, 'item', NS_PUBSUB)) self.assertEquals(1, len(items)) self.assertIdentical(item, items[0]) response = toResponse(iq, 'result') self.stub.send(response) return d
def test_publish(self): """ Test sending publish request. """ item = pubsub.Item() d = self.protocol.publish(JID('pubsub.example.org'), 'test', [item]) iq = self.stub.output[-1] self.assertEquals('pubsub.example.org', iq.getAttribute('to')) self.assertEquals('set', iq.getAttribute('type')) self.assertEquals('pubsub', iq.pubsub.name) self.assertEquals(NS_PUBSUB, iq.pubsub.uri) children = list(domish.generateElementsQNamed(iq.pubsub.children, 'publish', NS_PUBSUB)) self.assertEquals(1, len(children)) child = children[0] self.assertEquals('test', child['node']) items = list(domish.generateElementsQNamed(child.children, 'item', NS_PUBSUB)) self.assertEquals(1, len(items)) self.assertIdentical(item, items[0]) response = toResponse(iq, 'result') self.stub.send(response) return d
def test_onVersion(self): """ Test response to incoming version request. """ self.stub = XmlStreamStub() self.protocol = generic.VersionHandler('Test', '0.1.0') self.protocol.xmlstream = self.stub.xmlstream self.protocol.send = self.stub.xmlstream.send self.protocol.connectionInitialized() iq = domish.Element((None, 'iq')) iq['from'] = '[email protected]/Home' iq['to'] = 'example.org' iq['type'] = 'get' iq.addElement((NS_VERSION, 'query')) self.stub.send(iq) response = self.stub.output[-1] self.assertEquals('[email protected]/Home', response['to']) self.assertEquals('example.org', response['from']) self.assertEquals('result', response['type']) self.assertEquals(NS_VERSION, response.query.uri) elements = list( domish.generateElementsQNamed(response.query.children, 'name', NS_VERSION)) self.assertEquals(1, len(elements)) self.assertEquals('Test', unicode(elements[0])) elements = list( domish.generateElementsQNamed(response.query.children, 'version', NS_VERSION)) self.assertEquals(1, len(elements)) self.assertEquals('0.1.0', unicode(elements[0]))
def format_payload(self, payload): """ Render the payload into a notification. If available, this uses the anyMeta specific 'figure' links to point to scaled-and-cropped versions of the image used for the actor (icon) or the object (picture). """ texts = self.texts[self.feed.language] verbs = set([unicode(element) for element in payload.elements(NS_ACTIVITY_SPEC, 'verb')]) if self.ikCamVerb not in verbs: return None # filter out ikcam notifications from other agents if payload.agent and self.creator and unicode(payload.agent.id) != self.creator.uri: return None # filter out ikcam notifications from other events if payload.target and self.event and unicode(payload.target.id) != self.event.uri: return None from twisted.words.xish.domish import generateElementsQNamed actors = generateElementsQNamed(payload.elements(), 'author', NS_ATOM) names = reduce(lambda x, y: x+y, [list(generateElementsQNamed(actor.elements(), 'name', NS_ATOM)) for actor in actors], []) actorTitles = [unicode(element) for element in names] if not actorTitles: return elif len(actorTitles) == 1: subtitle = texts['ikcam_picture_singular'] else: subtitle = texts['ikcam_picture_plural'] if payload.target: subtitle += texts['ikcam_event'] % unicode(payload.target.title) pictureURI = None for element in payload.object.elements(NS_ATOM, 'link'): if element.getAttribute('rel', 'alternate') == 'figure': pictureURI = element.getAttribute('href') break if pictureURI: pictureURI += '?width=480' return {'title': unicode(implodeNames(actorTitles, self.feed.language)), 'subtitle': subtitle, 'icon': u'http://docs.mediamatic.nl/images/ikcam-80x80.png', 'picture': pictureURI, }
def test_setItem(self): """ Setting a roster item renders the item and sends it out. """ item = xmppim.RosterItem(JID('*****@*****.**'), name='Joe User', groups=set(['Friends', 'Jabber'])) d = self.service.setItem(item) # Inspect outgoing iq request iq = self.stub.output[-1] self.assertEqual('set', iq.getAttribute('type')) self.assertNotIdentical(None, iq.query) self.assertEqual(NS_ROSTER, iq.query.uri) children = list( domish.generateElementsQNamed(iq.query.children, 'item', NS_ROSTER)) self.assertEqual(1, len(children)) child = children[0] self.assertEqual('*****@*****.**', child['jid']) self.assertIdentical(None, child.getAttribute('subscription')) # Fake successful response response = toResponse(iq, 'result') d.callback(response) return d
def test_setItemIgnoreAttributes(self): """ Certain attributes should be rendered for roster set. """ item = xmppim.RosterItem(JID('*****@*****.**'), subscriptionTo=True, subscriptionFrom=False, name='Joe User', groups=set(['Friends', 'Jabber'])) item.pendingOut = True item.approved = True d = self.service.setItem(item) # Inspect outgoing iq request iq = self.stub.output[-1] self.assertEqual('set', iq.getAttribute('type')) self.assertNotIdentical(None, iq.query) self.assertEqual(NS_ROSTER, iq.query.uri) children = list(domish.generateElementsQNamed(iq.query.children, 'item', NS_ROSTER)) self.assertEqual(1, len(children)) child = children[0] self.assertIdentical(None, child.getAttribute('ask')) self.assertIdentical(None, child.getAttribute('approved')) self.assertIdentical(None, child.getAttribute('subscription')) # Fake successful response response = toResponse(iq, 'result') d.callback(response) return d
def test_itemsMaxItems(self): """ Test sending items request, with limit on the number of items. """ def cb(items): self.assertEquals(2, len(items)) self.assertEquals([item1, item2], items) d = self.protocol.items(JID('pubsub.example.org'), 'test', maxItems=2) d.addCallback(cb) iq = self.stub.output[-1] self.assertEquals('pubsub.example.org', iq.getAttribute('to')) self.assertEquals('get', iq.getAttribute('type')) self.assertEquals('pubsub', iq.pubsub.name) self.assertEquals(NS_PUBSUB, iq.pubsub.uri) children = list( domish.generateElementsQNamed(iq.pubsub.children, 'items', NS_PUBSUB)) self.assertEquals(1, len(children)) child = children[0] self.assertEquals('test', child['node']) self.assertEquals('2', child['max_items']) response = toResponse(iq, 'result') items = response.addElement((NS_PUBSUB, 'pubsub')).addElement('items') items['node'] = 'test' item1 = items.addElement('item') item1['id'] = 'item1' item2 = items.addElement('item') item2['id'] = 'item2' self.stub.send(response) return d
def test_subscribe(self): """ Test sending subscription request. """ d = self.protocol.subscribe(JID('pubsub.example.org'), 'test', JID('*****@*****.**')) iq = self.stub.output[-1] self.assertEquals('pubsub.example.org', iq.getAttribute('to')) self.assertEquals('set', iq.getAttribute('type')) self.assertEquals('pubsub', iq.pubsub.name) self.assertEquals(NS_PUBSUB, iq.pubsub.uri) children = list( domish.generateElementsQNamed(iq.pubsub.children, 'subscribe', NS_PUBSUB)) self.assertEquals(1, len(children)) child = children[0] self.assertEquals('test', child['node']) self.assertEquals('*****@*****.**', child['jid']) response = toResponse(iq, 'result') pubsub = response.addElement((NS_PUBSUB, 'pubsub')) subscription = pubsub.addElement('subscription') subscription['node'] = 'test' subscription['jid'] = '*****@*****.**' subscription['subscription'] = 'subscribed' self.stub.send(response) return d
def test_removeItem(self): """ Removing a roster item is setting an item with subscription C{remove}. """ d = self.service.removeItem(JID('*****@*****.**')) # Inspect outgoing iq request iq = self.stub.output[-1] self.assertEqual('set', iq.getAttribute('type')) self.assertNotIdentical(None, iq.query) self.assertEqual(NS_ROSTER, iq.query.uri) children = list( domish.generateElementsQNamed(iq.query.children, 'item', NS_ROSTER)) self.assertEqual(1, len(children)) child = children[0] self.assertEqual('*****@*****.**', child['jid']) self.assertEqual('remove', child.getAttribute('subscription')) # Fake successful response response = toResponse(iq, 'result') d.callback(response) return d
def test_createNode(self): """ Test sending create request. """ def cb(nodeIdentifier): self.assertEquals('test', nodeIdentifier) d = self.protocol.createNode(JID('pubsub.example.org'), 'test') d.addCallback(cb) iq = self.stub.output[-1] self.assertEquals('pubsub.example.org', iq.getAttribute('to')) self.assertEquals('set', iq.getAttribute('type')) self.assertEquals('pubsub', iq.pubsub.name) self.assertEquals(NS_PUBSUB, iq.pubsub.uri) children = list( domish.generateElementsQNamed(iq.pubsub.children, 'create', NS_PUBSUB)) self.assertEquals(1, len(children)) child = children[0] self.assertEquals('test', child['node']) response = toResponse(iq, 'result') self.stub.send(response) return d
def test_removeItem(self): """ Removing a roster item is setting an item with subscription C{remove}. """ d = self.protocol.removeItem(JID('*****@*****.**')) # Inspect outgoing iq request iq = self.stub.output[-1] self.assertEquals('set', iq.getAttribute('type')) self.assertNotIdentical(None, iq.query) self.assertEquals(NS_ROSTER, iq.query.uri) children = list(domish.generateElementsQNamed(iq.query.children, 'item', NS_ROSTER)) self.assertEquals(1, len(children)) child = children[0] self.assertEquals('*****@*****.**', child['jid']) self.assertEquals('remove', child['subscription']) # Fake successful response response = toResponse(iq, 'result') self.stub.send(response) return d
def test_createNode(self): """ Test sending create request. """ def cb(nodeIdentifier): self.assertEquals('test', nodeIdentifier) d = self.protocol.createNode(JID('pubsub.example.org'), 'test') d.addCallback(cb) iq = self.stub.output[-1] self.assertEquals('pubsub.example.org', iq.getAttribute('to')) self.assertEquals('set', iq.getAttribute('type')) self.assertEquals('pubsub', iq.pubsub.name) self.assertEquals(NS_PUBSUB, iq.pubsub.uri) children = list(domish.generateElementsQNamed(iq.pubsub.children, 'create', NS_PUBSUB)) self.assertEquals(1, len(children)) child = children[0] self.assertEquals('test', child['node']) response = toResponse(iq, 'result') self.stub.send(response) return d
def test_setItemIgnoreAttributes(self): """ Certain attributes should be rendered for roster set. """ item = xmppim.RosterItem(JID('*****@*****.**'), subscriptionTo=True, subscriptionFrom=False, name='Joe User', groups=set(['Friends', 'Jabber'])) item.pendingOut = True item.approved = True d = self.service.setItem(item) # Inspect outgoing iq request iq = self.stub.output[-1] self.assertEqual('set', iq.getAttribute('type')) self.assertNotIdentical(None, iq.query) self.assertEqual(NS_ROSTER, iq.query.uri) children = list( domish.generateElementsQNamed(iq.query.children, 'item', NS_ROSTER)) self.assertEqual(1, len(children)) child = children[0] self.assertIdentical(None, child.getAttribute('ask')) self.assertIdentical(None, child.getAttribute('approved')) self.assertIdentical(None, child.getAttribute('subscription')) # Fake successful response response = toResponse(iq, 'result') d.callback(response) return d
def test_subscribe(self): """ Test sending subscription request. """ d = self.protocol.subscribe(JID('pubsub.example.org'), 'test', JID('*****@*****.**')) iq = self.stub.output[-1] self.assertEquals('pubsub.example.org', iq.getAttribute('to')) self.assertEquals('set', iq.getAttribute('type')) self.assertEquals('pubsub', iq.pubsub.name) self.assertEquals(NS_PUBSUB, iq.pubsub.uri) children = list(domish.generateElementsQNamed(iq.pubsub.children, 'subscribe', NS_PUBSUB)) self.assertEquals(1, len(children)) child = children[0] self.assertEquals('test', child['node']) self.assertEquals('*****@*****.**', child['jid']) response = toResponse(iq, 'result') pubsub = response.addElement((NS_PUBSUB, 'pubsub')) subscription = pubsub.addElement('subscription') subscription['node'] = 'test' subscription['jid'] = '*****@*****.**' subscription['subscription'] = 'subscribed' self.stub.send(response) return d
def extractHeaders(stanza): """ Extract SHIM headers from stanza. @param stanza: The stanza to extract headers from. @type stanza: L{Element<twisted.words.xish.domish.Element>} @return: Headers as a mapping from header name to a list of values. @rtype: C{dict} """ headers = {} for element in domish.generateElementsQNamed(stanza.children, "headers", NS_SHIM): for header in domish.generateElementsQNamed(element.children, "header", NS_SHIM): headers.setdefault(header["name"], []).append(unicode(header)) return headers
def test_setItem(self): """ Setting a roster item renders the item and sends it out. """ item = xmppim.RosterItem(JID('*****@*****.**'), name='Joe User', groups=set(['Friends', 'Jabber'])) d = self.service.setItem(item) # Inspect outgoing iq request iq = self.stub.output[-1] self.assertEqual('set', iq.getAttribute('type')) self.assertNotIdentical(None, iq.query) self.assertEqual(NS_ROSTER, iq.query.uri) children = list(domish.generateElementsQNamed(iq.query.children, 'item', NS_ROSTER)) self.assertEqual(1, len(children)) child = children[0] self.assertEqual('*****@*****.**', child['jid']) self.assertIdentical(None, child.getAttribute('subscription')) # Fake successful response response = toResponse(iq, 'result') d.callback(response) return d
def fromElement(element): valueElements = list(domish.generateElementsQNamed(element.children, "value", NS_X_DATA)) if not valueElements: raise Error("Option has no value") label = element.getAttribute("label") return Option(unicode(valueElements[0]), label)
def test_itemsMaxItems(self): """ Test sending items request, with limit on the number of items. """ def cb(items): self.assertEquals(2, len(items)) self.assertEquals([item1, item2], items) d = self.protocol.items(JID('pubsub.example.org'), 'test', maxItems=2) d.addCallback(cb) iq = self.stub.output[-1] self.assertEquals('pubsub.example.org', iq.getAttribute('to')) self.assertEquals('get', iq.getAttribute('type')) self.assertEquals('pubsub', iq.pubsub.name) self.assertEquals(NS_PUBSUB, iq.pubsub.uri) children = list(domish.generateElementsQNamed(iq.pubsub.children, 'items', NS_PUBSUB)) self.assertEquals(1, len(children)) child = children[0] self.assertEquals('test', child['node']) self.assertEquals('2', child['max_items']) response = toResponse(iq, 'result') items = response.addElement((NS_PUBSUB, 'pubsub')).addElement('items') items['node'] = 'test' item1 = items.addElement('item') item1['id'] = 'item1' item2 = items.addElement('item') item2['id'] = 'item2' self.stub.send(response) return d
def processRoster(result): roster = {} for element in domish.generateElementsQNamed(result.query.children, 'item', NS_ROSTER): item = self._parseRosterItem(element) roster[item.jid.userhost()] = item return roster
def processRoster(result): roster = {} for element in domish.generateElementsQNamed( result.query.children, 'item', NS_ROSTER): item = self._parseRosterItem(element) roster[item.jid.userhost()] = item return roster
def test_toElementChildren(self): """ Test C{toElement} creates a DOM with proper childs. """ info = disco.DiscoInfo() info.append(disco.DiscoFeature(u"jabber:iq:register")) info.append(disco.DiscoIdentity(u"conference", u"text")) info.append(data_form.Form(u"result")) element = info.toElement() featureElements = domish.generateElementsQNamed(element.children, u"feature", NS_DISCO_INFO) self.assertEqual(1, len(list(featureElements))) identityElements = domish.generateElementsQNamed(element.children, u"identity", NS_DISCO_INFO) self.assertEqual(1, len(list(identityElements))) extensionElements = domish.generateElementsQNamed(element.children, u"x", data_form.NS_X_DATA) self.assertEqual(1, len(list(extensionElements)))
def extractHeaders(stanza): """ Extract SHIM headers from stanza. @param stanza: The stanza to extract headers from. @type stanza: L{Element<twisted.words.xish.domish.Element>} @return: Headers as a mapping from header name to a list of values. @rtype: C{dict} """ headers = {} for element in domish.generateElementsQNamed(stanza.children, 'headers', NS_SHIM): for header in domish.generateElementsQNamed(element.children, 'header', NS_SHIM): headers.setdefault(header['name'], []).append(unicode(header)) return headers
def fromElement(element): valueElements = list( domish.generateElementsQNamed(element.children, 'value', NS_X_DATA)) if not valueElements: raise Error("Option has no value") label = element.getAttribute('label') return Option(unicode(valueElements[0]), label)
def test_toElementChildren(self): """ Test C{toElement} creates a DOM with proper childs. """ items = disco.DiscoItems() items.append(disco.DiscoItem(JID(u"example.org"), u"test", u"A node")) element = items.toElement() itemElements = domish.generateElementsQNamed(element.children, u"item", NS_DISCO_ITEMS) self.assertEqual(1, len(list(itemElements)))
def test_toElementChildren(self): """ Test C{toElement} creates a DOM with proper childs. """ items = disco.DiscoItems() items.append(disco.DiscoItem(JID(u'example.org'), u'test', u'A node')) element = items.toElement() itemElements = domish.generateElementsQNamed(element.children, u'item', NS_DISCO_ITEMS) self.assertEqual(1, len(list(itemElements)))
def test_toElementChildren(self): """ Test C{toElement} creates a DOM with proper childs. """ info = disco.DiscoInfo() info.append(disco.DiscoFeature(u'jabber:iq:register')) info.append(disco.DiscoIdentity(u'conference', u'text')) info.append(data_form.Form(u'result')) element = info.toElement() featureElements = domish.generateElementsQNamed( element.children, u'feature', NS_DISCO_INFO) self.assertEqual(1, len(list(featureElements))) identityElements = domish.generateElementsQNamed( element.children, u'identity', NS_DISCO_INFO) self.assertEqual(1, len(list(identityElements))) extensionElements = domish.generateElementsQNamed( element.children, u'x', data_form.NS_X_DATA) self.assertEqual(1, len(list(extensionElements)))
def _parseRosterItem(self, element): jid = JID(element['jid']) item = RosterItem(jid) item.name = element.getAttribute('name') subscription = element.getAttribute('subscription') item.subscriptionTo = subscription in ('to', 'both') item.subscriptionFrom = subscription in ('from', 'both') item.ask = element.getAttribute('ask') == 'subscribe' for subElement in domish.generateElementsQNamed( element.children, 'group', NS_ROSTER): item.groups.add(unicode(subElement)) return item
def _parseRosterItem(self, element): jid = JID(element['jid']) item = RosterItem(jid) item.name = element.getAttribute('name') subscription = element.getAttribute('subscription') item.subscriptionTo = subscription in ('to', 'both') item.subscriptionFrom = subscription in ('from', 'both') item.ask = element.getAttribute('ask') == 'subscribe' for subElement in domish.generateElementsQNamed(element.children, 'group', NS_ROSTER): item.groups.add(unicode(subElement)) return item
def fromElement(Class, element): entity = JID(element['jid']) item = Class(entity) subscription = element.getAttribute('subscription') if subscription == 'remove': item.remove = True else: item.name = element.getAttribute('name', u'') item.subscriptionTo = subscription in ('to', 'both') item.subscriptionFrom = subscription in ('from', 'both') item.pendingOut = element.getAttribute('ask') == 'subscribe' item.approved = element.getAttribute('approved') in ('true', '1') for subElement in domish.generateElementsQNamed(element.children, 'group', NS_ROSTER): item.groups.add(unicode(subElement)) return item
def fromElement(Class, element): entity = JID(element['jid']) item = Class(entity) subscription = element.getAttribute('subscription') if subscription == 'remove': item.remove = True else: item.name = element.getAttribute('name', u'') item.subscriptionTo = subscription in ('to', 'both') item.subscriptionFrom = subscription in ('from', 'both') item.pendingOut = element.getAttribute('ask') == 'subscribe' item.approved = element.getAttribute('approved') in ('true', '1') for subElement in domish.generateElementsQNamed(element.children, 'group', NS_ROSTER): item.groups.add(unicode(subElement)) return item
def test_createNodeRenamed(self): """ Test sending create request resulting in renamed node. """ def cb(nodeIdentifier): self.assertEquals('test2', nodeIdentifier) d = self.protocol.createNode(JID('pubsub.example.org'), 'test') d.addCallback(cb) iq = self.stub.output[-1] children = list( domish.generateElementsQNamed(iq.pubsub.children, 'create', NS_PUBSUB)) child = children[0] self.assertEquals('test', child['node']) response = toResponse(iq, 'result') command = response.addElement((NS_PUBSUB, 'pubsub')) create = command.addElement('create') create['node'] = 'test2' self.stub.send(response) return d
def test_createNodeRenamed(self): """ Test sending create request resulting in renamed node. """ def cb(nodeIdentifier): self.assertEquals('test2', nodeIdentifier) d = self.protocol.createNode(JID('pubsub.example.org'), 'test') d.addCallback(cb) iq = self.stub.output[-1] children = list(domish.generateElementsQNamed(iq.pubsub.children, 'create', NS_PUBSUB)) child = children[0] self.assertEquals('test', child['node']) response = toResponse(iq, 'result') command = response.addElement((NS_PUBSUB, 'pubsub')) create = command.addElement('create') create['node'] = 'test2' self.stub.send(response) return d