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