comparison sat_tmp/wokkel/rsm.py @ 69:0721b6254c9e

python 3 port: - applied 2to3 - replaced zope's implements by @implementer decorator - replaced references to python2 by python3
author Goffi <goffi@goffi.org>
date Tue, 13 Aug 2019 18:58:11 +0200
parents 938c740d31fe
children 76b7ae23dc66
comparison
equal deleted inserted replaced
68:042a926cf3b2 69:0721b6254c9e
26 """ 26 """
27 27
28 from twisted.words.xish import domish 28 from twisted.words.xish import domish
29 from twisted.words.protocols.jabber import error 29 from twisted.words.protocols.jabber import error
30 30
31 import pubsub 31 from . import pubsub
32 import copy 32 import copy
33 33
34 34
35 NS_RSM = 'http://jabber.org/protocol/rsm' 35 NS_RSM = 'http://jabber.org/protocol/rsm'
36 36
74 index = int(index) 74 index = int(index)
75 self.index = index 75 self.index = index
76 76
77 if after is not None: 77 if after is not None:
78 assert before is None 78 assert before is None
79 assert isinstance(after, basestring) 79 assert isinstance(after, str)
80 self.after = after 80 self.after = after
81 81
82 if before is not None: 82 if before is not None:
83 assert isinstance(before, basestring) 83 assert isinstance(before, str)
84 self.before = before 84 self.before = before
85 85
86 def __str__(self): 86 def __str__(self):
87 return "RSM Request: max={0.max} after={0.after} before={0.before} index={0.index}".format(self) 87 return "RSM Request: max={0.max} after={0.after} before={0.before} index={0.index}".format(self)
88 88
99 99
100 if element.name == 'set' and element.uri == NS_RSM: 100 if element.name == 'set' and element.uri == NS_RSM:
101 set_elt = element 101 set_elt = element
102 else: 102 else:
103 try: 103 try:
104 set_elt = element.elements(NS_RSM, 'set').next() 104 set_elt = next(element.elements(NS_RSM, 'set'))
105 except StopIteration: 105 except StopIteration:
106 raise RSMNotFoundError() 106 raise RSMNotFoundError()
107 107
108 try: 108 try:
109 before_elt = set_elt.elements(NS_RSM, 'before').next() 109 before_elt = next(set_elt.elements(NS_RSM, 'before'))
110 except StopIteration: 110 except StopIteration:
111 before = None 111 before = None
112 else: 112 else:
113 before = unicode(before_elt) 113 before = str(before_elt)
114 114
115 try: 115 try:
116 after_elt = set_elt.elements(NS_RSM, 'after').next() 116 after_elt = next(set_elt.elements(NS_RSM, 'after'))
117 except StopIteration: 117 except StopIteration:
118 after = None 118 after = None
119 else: 119 else:
120 after = unicode(after_elt) 120 after = str(after_elt)
121 if not after: 121 if not after:
122 raise RSMError("<after/> element can't be empty in RSM request") 122 raise RSMError("<after/> element can't be empty in RSM request")
123 123
124 try: 124 try:
125 max_elt = set_elt.elements(NS_RSM, 'max').next() 125 max_elt = next(set_elt.elements(NS_RSM, 'max'))
126 except StopIteration: 126 except StopIteration:
127 # FIXME: even if it doesn't make a lot of sense without it 127 # FIXME: even if it doesn't make a lot of sense without it
128 # <max/> element is not mandatory in XEP-0059 128 # <max/> element is not mandatory in XEP-0059
129 raise RSMError("RSM request is missing its 'max' element") 129 raise RSMError("RSM request is missing its 'max' element")
130 else: 130 else:
131 try: 131 try:
132 max_ = int(unicode(max_elt)) 132 max_ = int(str(max_elt))
133 except ValueError: 133 except ValueError:
134 raise RSMError("bad value for 'max' element") 134 raise RSMError("bad value for 'max' element")
135 135
136 try: 136 try:
137 index_elt = set_elt.elements(NS_RSM, 'index').next() 137 index_elt = next(set_elt.elements(NS_RSM, 'index'))
138 except StopIteration: 138 except StopIteration:
139 index = None 139 index = None
140 else: 140 else:
141 try: 141 try:
142 index = int(unicode(index_elt)) 142 index = int(str(index_elt))
143 except ValueError: 143 except ValueError:
144 raise RSMError("bad value for 'index' element") 144 raise RSMError("bad value for 'index' element")
145 145
146 return RSMRequest(max_, after, before, index) 146 return RSMRequest(max_, after, before, index)
147 147
150 Return the DOM representation of this RSM request. 150 Return the DOM representation of this RSM request.
151 151
152 @rtype: L{domish.Element} 152 @rtype: L{domish.Element}
153 """ 153 """
154 set_elt = domish.Element((NS_RSM, 'set')) 154 set_elt = domish.Element((NS_RSM, 'set'))
155 set_elt.addElement('max', content=unicode(self.max)) 155 set_elt.addElement('max', content=str(self.max))
156 156
157 if self.index is not None: 157 if self.index is not None:
158 set_elt.addElement('index', content=unicode(self.index)) 158 set_elt.addElement('index', content=str(self.index))
159 159
160 if self.before is not None: 160 if self.before is not None:
161 if self.before == '': # request the last page 161 if self.before == '': # request the last page
162 set_elt.addElement('before') 162 set_elt.addElement('before')
163 else: 163 else:
229 229
230 @return: RSMResponse instance. 230 @return: RSMResponse instance.
231 @rtype: L{RSMResponse} 231 @rtype: L{RSMResponse}
232 """ 232 """
233 try: 233 try:
234 set_elt = element.elements(NS_RSM, 'set').next() 234 set_elt = next(element.elements(NS_RSM, 'set'))
235 except StopIteration: 235 except StopIteration:
236 raise RSMNotFoundError() 236 raise RSMNotFoundError()
237 237
238 try: 238 try:
239 first_elt = set_elt.elements(NS_RSM, 'first').next() 239 first_elt = next(set_elt.elements(NS_RSM, 'first'))
240 except StopIteration: 240 except StopIteration:
241 first = None 241 first = None
242 index = None 242 index = None
243 else: 243 else:
244 first = unicode(first_elt) 244 first = str(first_elt)
245 try: 245 try:
246 index = int(first_elt['index']) 246 index = int(first_elt['index'])
247 except KeyError: 247 except KeyError:
248 index = None 248 index = None
249 except ValueError: 249 except ValueError:
250 raise RSMError("bad index in RSM response") 250 raise RSMError("bad index in RSM response")
251 251
252 try: 252 try:
253 last_elt = set_elt.elements(NS_RSM, 'last').next() 253 last_elt = next(set_elt.elements(NS_RSM, 'last'))
254 except StopIteration: 254 except StopIteration:
255 if first is not None: 255 if first is not None:
256 raise RSMError("RSM response is missing its 'last' element") 256 raise RSMError("RSM response is missing its 'last' element")
257 else: 257 else:
258 last = None 258 last = None
259 else: 259 else:
260 if first is None: 260 if first is None:
261 raise RSMError("RSM response is missing its 'first' element") 261 raise RSMError("RSM response is missing its 'first' element")
262 last = unicode(last_elt) 262 last = str(last_elt)
263 263
264 try: 264 try:
265 count_elt = set_elt.elements(NS_RSM, 'count').next() 265 count_elt = next(set_elt.elements(NS_RSM, 'count'))
266 except StopIteration: 266 except StopIteration:
267 count = None 267 count = None
268 else: 268 else:
269 try: 269 try:
270 count = int(unicode(count_elt)) 270 count = int(str(count_elt))
271 except ValueError: 271 except ValueError:
272 raise RSMError("invalid count in RSM response") 272 raise RSMError("invalid count in RSM response")
273 273
274 return RSMResponse(first, last, index, count) 274 return RSMResponse(first, last, index, count)
275 275
281 """ 281 """
282 set_elt = domish.Element((NS_RSM, 'set')) 282 set_elt = domish.Element((NS_RSM, 'set'))
283 if self.first is not None: 283 if self.first is not None:
284 first_elt = set_elt.addElement('first', content=self.first) 284 first_elt = set_elt.addElement('first', content=self.first)
285 if self.index is not None: 285 if self.index is not None:
286 first_elt['index'] = unicode(self.index) 286 first_elt['index'] = str(self.index)
287 287
288 set_elt.addElement('last', content=self.last) 288 set_elt.addElement('last', content=self.last)
289 289
290 if self.count is not None: 290 if self.count is not None:
291 set_elt.addElement('count', content=unicode(self.count)) 291 set_elt.addElement('count', content=str(self.count))
292 292
293 return set_elt 293 return set_elt
294 294
295 def render(self, element): 295 def render(self, element):
296 """Embed the DOM representation of this RSM response in the given element. 296 """Embed the DOM representation of this RSM response in the given element.
313 """ 313 """
314 result = {} 314 result = {}
315 for attr in ('first', 'last', 'index', 'count'): 315 for attr in ('first', 'last', 'index', 'count'):
316 value = getattr(self, attr) 316 value = getattr(self, attr)
317 if value is not None: 317 if value is not None:
318 result[attr] = unicode(value) 318 result[attr] = str(value)
319 return result 319 return result
320 320
321 321
322 class PubSubRequest(pubsub.PubSubRequest): 322 class PubSubRequest(pubsub.PubSubRequest):
323 """PubSubRequest extension to handle RSM. 323 """PubSubRequest extension to handle RSM.