Mercurial > libervia-backend
comparison src/tmp/wokkel/mam.py @ 1785:ac73d7456abc
tmp (wokkel.mam): recipient and sender are handled in MAM Request. TODO: MAMRequest should inherit from generic.Stanza, the same way as for PubSubRequest
author | Goffi <goffi@goffi.org> |
---|---|
date | Fri, 08 Jan 2016 18:54:23 +0100 |
parents | 21f0bcd3b637 |
children | 3b75ab26f09b |
comparison
equal
deleted
inserted
replaced
1784:21f0bcd3b637 | 1785:ac73d7456abc |
---|---|
91 @itype form: C{unicode} | 91 @itype form: C{unicode} |
92 | 92 |
93 @ivar query_id: id to use to track the query | 93 @ivar query_id: id to use to track the query |
94 @itype form: C{unicode} | 94 @itype form: C{unicode} |
95 """ | 95 """ |
96 | 96 # FIXME: should be based on generic.Stanza |
97 def __init__(self, form=None, rsm_=None, node=None, query_id=None): | 97 |
98 def __init__(self, form=None, rsm_=None, node=None, query_id=None, sender=None, recipient=None): | |
98 if form is not None: | 99 if form is not None: |
99 assert form.formType == 'submit' | 100 assert form.formType == 'submit' |
100 assert form.formNamespace == NS_MAM | 101 assert form.formNamespace == NS_MAM |
101 self.form = form | 102 self.form = form |
102 self.rsm = rsm_ | 103 self.rsm = rsm_ |
103 self.node = node | 104 self.node = node |
104 self.query_id = query_id | 105 self.query_id = query_id |
106 self.sender = sender | |
107 self.recipient = recipient | |
105 | 108 |
106 @classmethod | 109 @classmethod |
107 def fromElement(cls, element): | 110 def fromElement(cls, iq): |
108 """Parse the DOM representation of a MAM <query/> request. | 111 """Parse the DOM representation of a MAM <query/> request. |
109 | 112 |
110 @param element: element containing a MAM <query/>. | 113 @param iq: <iq/> element containing a MAM <query/>. |
111 @type element: L{Element<twisted.words.xish.domish.Element>} | 114 @type iq: L{Element<twisted.words.xish.domish.Element>} |
112 | 115 |
113 @return: MAMRequest instance. | 116 @return: MAMRequest instance. |
114 @rtype: L{MAMRequest} | 117 @rtype: L{MAMRequest} |
115 """ | 118 """ |
119 sender = jid.JID(iq.getAttribute('from')) | |
120 recipient = jid.JID(iq.getAttribute('to')) | |
116 try: | 121 try: |
117 query = element.elements(NS_MAM, 'query').next() | 122 query = iq.elements(NS_MAM, 'query').next() |
118 except StopIteration: | 123 except StopIteration: |
119 raise MAMError("Can't find MAM <query/> in element") | 124 raise MAMError("Can't find MAM <query/> in element") |
120 form = data_form.findForm(query, NS_MAM) | 125 form = data_form.findForm(query, NS_MAM) |
121 try: | 126 try: |
122 rsm_request = rsm.RSMRequest.fromElement(query) | 127 rsm_request = rsm.RSMRequest.fromElement(query) |
123 except rsm.RSMNotFoundError: | 128 except rsm.RSMNotFoundError: |
124 rsm_request = None | 129 rsm_request = None |
125 node = query.getAttribute('node') | 130 node = query.getAttribute('node') |
126 query_id = query.getAttribute('queryid') | 131 query_id = query.getAttribute('queryid') |
127 return MAMRequest(form, rsm_request, node, query_id) | 132 return MAMRequest(form, rsm_request, node, query_id, sender, recipient) |
128 | 133 |
129 def toElement(self): | 134 def toElement(self): |
130 """ | 135 """ |
131 Return the DOM representation of this RSM <query/> request. | 136 Return the DOM representation of this RSM <query/> request. |
132 | 137 |
348 return iq.send(to=service.full() if service else None) | 353 return iq.send(to=service.full() if service else None) |
349 | 354 |
350 | 355 |
351 class IMAMResource(Interface): | 356 class IMAMResource(Interface): |
352 | 357 |
353 def onArchiveRequest(self, mam, requestor): | 358 def onArchiveRequest(self, mam): |
354 """ | 359 """ |
355 | 360 |
356 @param mam: The MAM <query/> request. | 361 @param mam: The MAM <query/> request. |
357 @type mam: L{MAMQueryReques<wokkel.mam.MAMRequest>} | 362 @type mam: L{MAMQueryReques<wokkel.mam.MAMRequest>} |
358 | |
359 @param requestor: JID of the requestor. | |
360 @type requestor: L{JID<twisted.words.protocols.jabber.jid.JID>} | |
361 | 363 |
362 @return: The RSM answer. | 364 @return: The RSM answer. |
363 @rtype: L{RSMResponse<wokkel.rsm.RSMResponse>} | 365 @rtype: L{RSMResponse<wokkel.rsm.RSMResponse>} |
364 """ | 366 """ |
365 | 367 |
480 @return: A tuple with list of message data (id, element, data) and RSM element | 482 @return: A tuple with list of message data (id, element, data) and RSM element |
481 @rtype: C{tuple} | 483 @rtype: C{tuple} |
482 """ | 484 """ |
483 iq.handled = True | 485 iq.handled = True |
484 mam_ = self._request_class.fromElement(iq) | 486 mam_ = self._request_class.fromElement(iq) |
485 requestor = jid.JID(iq['from']) | |
486 | 487 |
487 # remove unsupported filters | 488 # remove unsupported filters |
488 unsupported_fields = [] | 489 unsupported_fields = [] |
489 if mam_.form: | 490 if mam_.form: |
490 for key, field in mam_.form.fields.iteritems(): | 491 for key, field in mam_.form.fields.iteritems(): |
515 | 516 |
516 if rsm_elt is not None: | 517 if rsm_elt is not None: |
517 fin_elt.addChild(rsm_elt) | 518 fin_elt.addChild(rsm_elt) |
518 return fin_elt | 519 return fin_elt |
519 | 520 |
520 d = defer.maybeDeferred(self.resource.onArchiveRequest, mam_, requestor) | 521 d = defer.maybeDeferred(self.resource.onArchiveRequest, mam_) |
521 d.addCallback(cb) | 522 d.addCallback(cb) |
522 return d | 523 return d |
523 | 524 |
524 def _onPrefsGetRequest(self, iq): | 525 def _onPrefsGetRequest(self, iq): |
525 """ | 526 """ |