comparison wokkel/mam.py @ 30:73465c020455

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 17ab4fbce513
children c0f71fd5ed6b
comparison
equal deleted inserted replaced
29:17ab4fbce513 30:73465c020455
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 """