comparison sat/plugins/plugin_xep_0346.py @ 3586:5f65f4e9f8cb

plugin XEP-0060: getItems extra is now serialised dict
author Goffi <goffi@goffi.org>
date Wed, 28 Jul 2021 23:01:15 +0200
parents edc79cefe968
children 909b56b115ff
comparison
equal deleted inserted replaced
3585:31628770a15a 3586:5f65f4e9f8cb
116 method=self.getSubmittedNS, 116 method=self.getSubmittedNS,
117 ) 117 )
118 host.bridge.addMethod( 118 host.bridge.addMethod(
119 "psItemsFormGet", 119 "psItemsFormGet",
120 ".plugin", 120 ".plugin",
121 in_sign="ssssiassa{ss}s", 121 in_sign="ssssiassss",
122 out_sign="(asa{ss})", 122 out_sign="(asa{ss})",
123 method=self._getDataFormItems, 123 method=self._getDataFormItems,
124 async_=True, 124 async_=True,
125 ) 125 )
126 host.bridge.addMethod( 126 host.bridge.addMethod(
300 """ 300 """
301 schema_form = await self.getSchemaForm(client, service, nodeIdentifier) 301 schema_form = await self.getSchemaForm(client, service, nodeIdentifier)
302 return xml_tools.dataForm2dataDict(schema_form) 302 return xml_tools.dataForm2dataDict(schema_form)
303 303
304 def _getDataFormItems(self, form_ns="", service="", node="", schema="", max_items=10, 304 def _getDataFormItems(self, form_ns="", service="", node="", schema="", max_items=10,
305 item_ids=None, sub_id=None, extra_dict=None, 305 item_ids=None, sub_id=None, extra="",
306 profile_key=C.PROF_KEY_NONE): 306 profile_key=C.PROF_KEY_NONE):
307 client = self.host.getClient(profile_key) 307 client = self.host.getClient(profile_key)
308 service = jid.JID(service) if service else None 308 service = jid.JID(service) if service else None
309 if not node: 309 if not node:
310 raise exceptions.DataError(_("empty node is not allowed")) 310 raise exceptions.DataError(_("empty node is not allowed"))
311 if schema: 311 if schema:
312 schema = generic.parseXml(schema.encode("utf-8")) 312 schema = generic.parseXml(schema.encode("utf-8"))
313 else: 313 else:
314 schema = None 314 schema = None
315 max_items = None if max_items == C.NO_LIMIT else max_items 315 max_items = None if max_items == C.NO_LIMIT else max_items
316 extra = self._p.parseExtra(extra_dict) 316 extra = self._p.parseExtra(data_format.deserialise(extra))
317 d = defer.ensureDeferred( 317 d = defer.ensureDeferred(
318 self.getDataFormItems( 318 self.getDataFormItems(
319 client, 319 client,
320 service, 320 service,
321 node, 321 node,
551 log.warning(_("Can't parse date field: {msg}").format(msg=e)) 551 log.warning(_("Can't parse date field: {msg}").format(msg=e))
552 return widget_type, args, kwargs 552 return widget_type, args, kwargs
553 553
554 ## Helper methods ## 554 ## Helper methods ##
555 555
556 def prepareBridgeGet(self, service, node, max_items, sub_id, extra_dict, profile_key): 556 def prepareBridgeGet(self, service, node, max_items, sub_id, extra, profile_key):
557 """Parse arguments received from bridge *Get methods and return higher level data 557 """Parse arguments received from bridge *Get methods and return higher level data
558 558
559 @return (tuple): (client, service, node, max_items, extra, sub_id) usable for 559 @return (tuple): (client, service, node, max_items, extra, sub_id) usable for
560 internal methods 560 internal methods
561 """ 561 """
564 if not node: 564 if not node:
565 node = None 565 node = None
566 max_items = None if max_items == C.NO_LIMIT else max_items 566 max_items = None if max_items == C.NO_LIMIT else max_items
567 if not sub_id: 567 if not sub_id:
568 sub_id = None 568 sub_id = None
569 extra = self._p.parseExtra(extra_dict) 569 extra = self._p.parseExtra(extra)
570 570
571 return client, service, node, max_items, extra, sub_id 571 return client, service, node, max_items, extra, sub_id
572 572
573 def _get(self, service="", node="", max_items=10, item_ids=None, sub_id=None, 573 def _get(self, service="", node="", max_items=10, item_ids=None, sub_id=None,
574 extra=None, default_node=None, form_ns=None, filters=None, 574 extra="", default_node=None, form_ns=None, filters=None,
575 profile_key=C.PROF_KEY_NONE): 575 profile_key=C.PROF_KEY_NONE):
576 """Bridge method to retrieve data from node with schema 576 """Bridge method to retrieve data from node with schema
577 577
578 this method is a helper so dependant plugins can use it directly 578 this method is a helper so dependant plugins can use it directly
579 when adding *Get methods 579 when adding *Get methods
581 labels from textbox to list in XMLUI, which usually render better 581 labels from textbox to list in XMLUI, which usually render better
582 in final UI. 582 in final UI.
583 """ 583 """
584 if filters is None: 584 if filters is None:
585 filters = {} 585 filters = {}
586 if extra is None: 586 extra = data_format.deserialise(extra)
587 extra = {}
588 # XXX: Q&D way to get list for labels when displaying them, but text when we 587 # XXX: Q&D way to get list for labels when displaying them, but text when we
589 # have to modify them 588 # have to modify them
590 if C.bool(extra.get("labels_as_list", C.BOOL_FALSE)): 589 if C.bool(extra.get("labels_as_list", C.BOOL_FALSE)):
591 filters = filters.copy() 590 filters = filters.copy()
592 filters["labels"] = self.textbox2ListFilter 591 filters["labels"] = self.textbox2ListFilter