Esempio n. 1
0
    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
Esempio n. 2
0
    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
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
    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
Esempio n. 6
0
    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
Esempio n. 7
0
    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
Esempio n. 8
0
    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
Esempio n. 9
0
    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