Mercurial > libervia-backend
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( |