def from_element(e): registration = Registration(JID.parse(e.get_attribute_value('from')), JID.parse(e.get_attribute_value('to')), type=e.get_attribute_value('type'), stanza_id=e.get_attribute_value('id')) error = e.get_child('error', XMPP_CLIENT_NS) if error: registration.error = Error.from_element(error) query = e.get_child('query', XMPP_IBR_NS) for c in query.xml_children: if not isinstance(c, E): continue if c.xml_ns == XMPP_DATA_FORM_NS: registration.x = Date.from_element(c) elif c.xml_ns == XMPP_IBR_NS: if c.xml_name == 'remove': registration.remove = True elif c.xml_name == 'registered': registration.registered = True else: registration.infos[c.xml_name] = c.xml_text return registration
def from_element(e): disco = FeaturesDiscovery(JID.parse(e.get_attribute_value('from')), JID.parse(e.get_attribute_value('to')), type=e.get_attribute_value('type'), stanza_id=e.get_attribute_value('id')) for c in e.xml_children: if not isinstance(c, E): continue if c.xml_ns in [XMPP_DISCO_INFO_NS, XMPP_DISCO_ITEMS_NS]: for i in c.xml_children: if i.xml_ns in [XMPP_DISCO_INFO_NS, XMPP_DISCO_ITEMS_NS]: if i.xml_name == 'identity': ident = Identity(i.get_attribute_value('name'), i.get_attribute_value('category'), i.get_attribute_value('type')) disco.identities.append(ident) elif i.xml_name == 'feature': feat = Feature(i.get_attribute_value('var')) disco.features.append(feat) elif i.xml_name == 'item': jid = JID.parse(unicode(i.get_attribute_value('jid'))) item = Item(jid, i.get_attribute_value('action'), i.get_attribute_value('name'), i.get_attribute_value('node')) disco.items.append(item) elif i.xml_ns == XMPP_DATA_FORM_NS: disco.x = Data.from_element(i) elif c.xml_ns == XMPP_CLIENT_NS and c.xml_name == 'error': disco.error = Error.from_element(c) return disco
def from_element(e): disco = SubscriptionsDiscovery(JID.parse(e.get_attribute_value('from')), JID.parse(e.get_attribute_value('to')), type=e.get_attribute_value('type'), stanza_id=e.get_attribute_value('id')) for c in e.xml_children: if not isinstance(c, E): continue if c.xml_ns == XMPP_PUBSUB_NS and c.xml_name == 'pubsub': for p in c.xml_children: if not isinstance(p, E): continue if p.xml_ns == XMPP_PUBSUB_NS and p.xml_name == 'subscriptions': for s in p.xml_children: if not isinstance(s, E): continue jid = s.get_attribute_value('jid', None) if jid: JID.parse(jid) sub = Subscription(s.get_attribute_value('node'), jid, s.get_attribute_value('subscription')) disco.subscriptions.append(sub) elif c.xml_ns == XMPP_CLIENT_NS and c.xml_name == 'error': disco.error = Error.from_element(c) return disco
def from_purge_element(e): node = Node(JID.parse(e.get_attribute_value('from')), JID.parse(e.get_attribute_value('to')), type=e.get_attribute_value('type'), stanza_id=e.get_attribute_value('id')) for i in e.xml_children: if i.xml_ns in [XMPP_PUBSUB_OWNER_NS]: for p in i.xml_children: if p.xml_ns in [XMPP_PUBSUB_OWNER_NS]: if p.xml_name == 'purge': node.node_name = p.get_attribute_value('node') elif i.xml_ns == XMPP_CLIENT_NS and i.xml_name == 'error': node.error = Error.from_element(i) return node
def from_unsubscription_element(e): sub = Node(JID.parse(e.get_attribute_value('from')), JID.parse(e.get_attribute_value('to')), type=e.get_attribute_value('type'), stanza_id=e.get_attribute_value('id')) for i in e.xml_children: if i.xml_ns in [XMPP_PUBSUB_NS]: for p in i.xml_children: if p.xml_ns in [XMPP_PUBSUB_NS]: if p.xml_name == 'subscribe': sub.node_name = p.get_attribute_value('node') sub.sub_jid = p.get_attribute_value('jid') elif i.xml_ns == XMPP_CLIENT_NS and i.xml_name == 'error': sub.error = Error.from_element(i) return sub
def from_retract_element(e): node = Node(JID.parse(e.get_attribute_value('from')), JID.parse(e.get_attribute_value('to')), type=e.get_attribute_value('type'), stanza_id=e.get_attribute_value('id')) for i in e.xml_children: if i.xml_ns in [XMPP_PUBSUB_NS]: for p in i.xml_children: if p.xml_ns in [XMPP_PUBSUB_NS]: if p.xml_name == 'retract': node.node_name = p.get_attribute_value('node') for q in p.xml_children: if q.xml_name == 'item': node.item = Item(q.get_attribute_value('id')) elif i.xml_ns == XMPP_CLIENT_NS and i.xml_name == 'error': node.error = Error.from_element(i) return node
def from_publication_element(e): node = Node(JID.parse(e.get_attribute_value('from')), JID.parse(e.get_attribute_value('to')), type=e.get_attribute_value('type'), stanza_id=e.get_attribute_value('id')) for i in e.xml_children: if i.xml_ns in [XMPP_PUBSUB_NS]: for p in i.xml_children: if p.xml_ns in [XMPP_PUBSUB_NS]: if p.xml_name == 'publish': node.node_name = p.get_attribute_value('node') for q in p.xml_children: if q.xml_name == 'item': payload = None if q.xml_children: payload = q.xml_children[0].clone() node.item = Item(q.get_attribute_value('id'), payload) elif i.xml_ns == XMPP_CLIENT_NS and i.xml_name == 'error': node.error = Error.from_element(i) return node
def from_element(e): disco = AffiliationsDiscovery(JID.parse(e.get_attribute_value('from')), JID.parse(e.get_attribute_value('to')), type=e.get_attribute_value('type'), stanza_id=e.get_attribute_value('id')) for c in e.xml_children: if not isinstance(c, E): continue if c.xml_ns == XMPP_PUBSUB_NS and c.xml_name == 'pubsub': for p in c.xml_children: if not isinstance(p, E): continue if p.xml_ns == XMPP_PUBSUB_NS and p.xml_name == 'affiliations': for s in p.xml_children: if not isinstance(s, E): continue aff = Affiliation(s.get_attribute_value('node'), s.get_attribute_value('affiliation')) disco.affiliations.append(aff) elif c.xml_ns == XMPP_CLIENT_NS and c.xml_name == 'error': disco.error = Error.from_element(c) return disco
def from_element(e): disco = ItemsDiscovery(JID.parse(e.get_attribute_value('from')), JID.parse(e.get_attribute_value('to')), type=e.get_attribute_value('type'), stanza_id=e.get_attribute_value('id')) for c in e.xml_children: if not isinstance(c, E): continue if c.xml_ns in [XMPP_DISCO_ITEMS_NS]: if c.xml_name == 'query': disco.node_name = c.get_attribute_value('node') for i in c.xml_children: if i.xml_name == 'item' and i.xml_ns in [XMPP_DISCO_ITEMS_NS]: jid = JID.parse(unicode(i.get_attribute_value('jid'))) item = Item(jid, i.get_attribute_value('action'), i.get_attribute_value('name'), disco.node_name) disco.items.append(item) elif c.xml_ns == XMPP_CLIENT_NS and c.xml_name == 'error': disco.error = Error.from_element(c) return disco