Mercurial > libervia-backend
comparison libervia/backend/plugins/plugin_xep_0353.py @ 4270:0d7bb4df2343
Reformatted code base using black.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 19 Jun 2024 18:44:57 +0200 |
parents | 79c8a70e1813 |
children |
comparison
equal
deleted
inserted
replaced
4269:64a85ce8be70 | 4270:0d7bb4df2343 |
---|---|
56 } | 56 } |
57 | 57 |
58 | 58 |
59 class RejectException(exceptions.CancelError): | 59 class RejectException(exceptions.CancelError): |
60 | 60 |
61 def __init__(self, reason: str, text: str|None = None): | 61 def __init__(self, reason: str, text: str | None = None): |
62 super().__init__(text) | 62 super().__init__(text) |
63 self.reason = reason | 63 self.reason = reason |
64 | 64 |
65 | 65 |
66 class TakenByOtherDeviceException(exceptions.CancelError): | 66 class TakenByOtherDeviceException(exceptions.CancelError): |
205 finally: | 205 finally: |
206 del client._xep_0353_pending_sessions[session["id"]] | 206 del client._xep_0353_pending_sessions[session["id"]] |
207 return True | 207 return True |
208 | 208 |
209 def _terminate_trigger( | 209 def _terminate_trigger( |
210 self, | 210 self, client: SatXMPPEntity, session: dict, reason_elt: domish.Element |
211 client: SatXMPPEntity, | |
212 session: dict, | |
213 reason_elt: domish.Element | |
214 ) -> bool: | 211 ) -> bool: |
215 session_id = session["id"] | 212 session_id = session["id"] |
216 try: | 213 try: |
217 response_d = client._xep_0353_pending_sessions[session_id] | 214 response_d = client._xep_0353_pending_sessions[session_id] |
218 except KeyError: | 215 except KeyError: |
237 | 234 |
238 async def _handle_mess_init( | 235 async def _handle_mess_init( |
239 self, | 236 self, |
240 client: SatXMPPEntity, | 237 client: SatXMPPEntity, |
241 message_elt: domish.Element, | 238 message_elt: domish.Element, |
242 mess_init_elt: domish.Element | 239 mess_init_elt: domish.Element, |
243 ) -> None: | 240 ) -> None: |
244 if mess_init_elt.name == "propose": | 241 if mess_init_elt.name == "propose": |
245 await self._handle_propose(client, message_elt, mess_init_elt) | 242 await self._handle_propose(client, message_elt, mess_init_elt) |
246 elif mess_init_elt.name == "retract": | 243 elif mess_init_elt.name == "retract": |
247 self._handle_retract(client, message_elt, mess_init_elt) | 244 self._handle_retract(client, message_elt, mess_init_elt) |
255 await self._handle_ringing(client, message_elt, mess_init_elt) | 252 await self._handle_ringing(client, message_elt, mess_init_elt) |
256 else: | 253 else: |
257 log.warning(f"invalid element: {mess_init_elt.toXml}") | 254 log.warning(f"invalid element: {mess_init_elt.toXml}") |
258 | 255 |
259 def _get_sid_and_session_d( | 256 def _get_sid_and_session_d( |
260 self, | 257 self, client: SatXMPPEntity, elt: domish.Element |
261 client: SatXMPPEntity, | 258 ) -> tuple[str, defer.Deferred | list[defer.Deferred]]: |
262 elt: domish.Element | |
263 ) -> tuple[str, defer.Deferred|list[defer.Deferred]]: | |
264 """Retrieve session ID and deferred or list of deferred from response element""" | 259 """Retrieve session ID and deferred or list of deferred from response element""" |
265 try: | 260 try: |
266 session_id = elt["id"] | 261 session_id = elt["id"] |
267 except KeyError as e: | 262 except KeyError as e: |
268 assert elt.parent is not None | 263 assert elt.parent is not None |
278 ) | 273 ) |
279 raise e | 274 raise e |
280 return session_id, session_d | 275 return session_id, session_d |
281 | 276 |
282 def _get_sid_and_response_d( | 277 def _get_sid_and_response_d( |
283 self, | 278 self, client: SatXMPPEntity, elt: domish.Element |
284 client: SatXMPPEntity, | |
285 elt: domish.Element | |
286 ) -> tuple[str, defer.Deferred]: | 279 ) -> tuple[str, defer.Deferred]: |
287 """Retrieve session ID and response_d from response element""" | 280 """Retrieve session ID and response_d from response element""" |
288 session_id, response_d = self._get_sid_and_session_d(client, elt) | 281 session_id, response_d = self._get_sid_and_session_d(client, elt) |
289 assert isinstance(response_d, defer.Deferred) | 282 assert isinstance(response_d, defer.Deferred) |
290 return session_id, response_d | 283 return session_id, response_d |
291 | 284 |
292 def _get_sid_and_preflight_d_list( | 285 def _get_sid_and_preflight_d_list( |
293 self, | 286 self, client: SatXMPPEntity, elt: domish.Element |
294 client: SatXMPPEntity, | |
295 elt: domish.Element | |
296 ) -> tuple[str, list[defer.Deferred]]: | 287 ) -> tuple[str, list[defer.Deferred]]: |
297 """Retrieve session ID and list of preflight_d from response element""" | 288 """Retrieve session ID and list of preflight_d from response element""" |
298 session_id, preflight_d_list = self._get_sid_and_session_d(client, elt) | 289 session_id, preflight_d_list = self._get_sid_and_session_d(client, elt) |
299 assert isinstance(preflight_d_list, list) | 290 assert isinstance(preflight_d_list, list) |
300 return session_id, preflight_d_list | 291 return session_id, preflight_d_list |
301 | 292 |
302 async def _handle_propose( | 293 async def _handle_propose( |
303 self, | 294 self, client: SatXMPPEntity, message_elt: domish.Element, elt: domish.Element |
304 client: SatXMPPEntity, | |
305 message_elt: domish.Element, | |
306 elt: domish.Element | |
307 ) -> None: | 295 ) -> None: |
308 peer_jid = jid.JID(message_elt["from"]) | 296 peer_jid = jid.JID(message_elt["from"]) |
309 local_jid = jid.JID(message_elt["to"]) | 297 local_jid = jid.JID(message_elt["to"]) |
310 session_id = elt["id"] | 298 session_id = elt["id"] |
311 try: | 299 try: |
330 log.warning("No application specified: {message_elt.toXml()}") | 318 log.warning("No application specified: {message_elt.toXml()}") |
331 return | 319 return |
332 | 320 |
333 cast(list[tuple[domish.Element, ApplicationData]], desc_and_apps) | 321 cast(list[tuple[domish.Element, ApplicationData]], desc_and_apps) |
334 desc_and_apps.sort( | 322 desc_and_apps.sort( |
335 key=lambda desc_and_app: desc_and_app[1].priority, | 323 key=lambda desc_and_app: desc_and_app[1].priority, reverse=True |
336 reverse=True | |
337 ) | 324 ) |
338 | 325 |
339 session = self._j.create_session( | 326 session = self._j.create_session( |
340 client, session_id, self._j.ROLE_RESPONDER, peer_jid, local_jid | 327 client, session_id, self._j.ROLE_RESPONDER, peer_jid, local_jid |
341 ) | 328 ) |
425 | 412 |
426 def _handle_proceed( | 413 def _handle_proceed( |
427 self, | 414 self, |
428 client: SatXMPPEntity, | 415 client: SatXMPPEntity, |
429 message_elt: domish.Element, | 416 message_elt: domish.Element, |
430 proceed_elt: domish.Element | 417 proceed_elt: domish.Element, |
431 ) -> None: | 418 ) -> None: |
432 from_jid = jid.JID(message_elt["from"]) | 419 from_jid = jid.JID(message_elt["from"]) |
433 # session_d is the deferred of the session, it can be preflight_d or response_d | 420 # session_d is the deferred of the session, it can be preflight_d or response_d |
434 if from_jid.userhostJID() == client.jid.userhostJID(): | 421 if from_jid.userhostJID() == client.jid.userhostJID(): |
435 # an other device took the session | 422 # an other device took the session |