comparison sat/plugins/plugin_xep_0346.py @ 3715:b9718216a1c0 0.9

merge bookmark 0.9
author Goffi <goffi@goffi.org>
date Wed, 01 Dec 2021 16:13:31 +0100
parents 909b56b115ff
children 3ef988734869
comparison
equal deleted inserted replaced
3714:af09b5aaa5d7 3715:b9718216a1c0
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
625 else: 624 else:
626 schema = None 625 schema = None
627 extra = data_format.deserialise(extra) 626 extra = data_format.deserialise(extra)
628 return client, service, node or None, schema, item_id or None, extra 627 return client, service, node or None, schema, item_id or None, extra
629 628
630 @defer.inlineCallbacks 629 async def copyMissingValues(self, client, service, node, item_id, form_ns, values):
631 def copyMissingValues(self, client, service, node, item_id, form_ns, values):
632 """Retrieve values existing in original item and missing in update 630 """Retrieve values existing in original item and missing in update
633 631
634 Existing item will be retrieve, and values not already specified in values will 632 Existing item will be retrieve, and values not already specified in values will
635 be filled 633 be filled
636 @param service: same as for [XEP_0060.getItems] 634 @param service: same as for [XEP_0060.getItems]
641 This dict will be modified *in place* to fill value present in existing 639 This dict will be modified *in place* to fill value present in existing
642 item and missing in the dict. 640 item and missing in the dict.
643 """ 641 """
644 try: 642 try:
645 # we get previous item 643 # we get previous item
646 items_data = yield self._p.getItems( 644 items_data = await self._p.getItems(
647 client, service, node, item_ids=[item_id] 645 client, service, node, item_ids=[item_id]
648 ) 646 )
649 item_elt = items_data[0][0] 647 item_elt = items_data[0][0]
650 except Exception as e: 648 except Exception as e:
651 log.warning( 649 log.warning(