Mercurial > sat_tmp
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. |