diff 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
line wrap: on
line diff
--- a/sat/plugins/plugin_xep_0346.py	Tue Nov 30 23:31:09 2021 +0100
+++ b/sat/plugins/plugin_xep_0346.py	Wed Dec 01 16:13:31 2021 +0100
@@ -118,7 +118,7 @@
         host.bridge.addMethod(
             "psItemsFormGet",
             ".plugin",
-            in_sign="ssssiassa{ss}s",
+            in_sign="ssssiassss",
             out_sign="(asa{ss})",
             method=self._getDataFormItems,
             async_=True,
@@ -302,7 +302,7 @@
         return xml_tools.dataForm2dataDict(schema_form)
 
     def _getDataFormItems(self, form_ns="", service="", node="", schema="", max_items=10,
-                          item_ids=None, sub_id=None, extra_dict=None,
+                          item_ids=None, sub_id=None, extra="",
                           profile_key=C.PROF_KEY_NONE):
         client = self.host.getClient(profile_key)
         service = jid.JID(service) if service else None
@@ -313,7 +313,7 @@
         else:
             schema = None
         max_items = None if max_items == C.NO_LIMIT else max_items
-        extra = self._p.parseExtra(extra_dict)
+        extra = self._p.parseExtra(data_format.deserialise(extra))
         d = defer.ensureDeferred(
             self.getDataFormItems(
                 client,
@@ -553,7 +553,7 @@
 
     ## Helper methods ##
 
-    def prepareBridgeGet(self, service, node, max_items, sub_id, extra_dict, profile_key):
+    def prepareBridgeGet(self, service, node, max_items, sub_id, extra, profile_key):
         """Parse arguments received from bridge *Get methods and return higher level data
 
         @return (tuple): (client, service, node, max_items, extra, sub_id) usable for
@@ -566,12 +566,12 @@
         max_items = None if max_items == C.NO_LIMIT else max_items
         if not sub_id:
             sub_id = None
-        extra = self._p.parseExtra(extra_dict)
+        extra = self._p.parseExtra(extra)
 
         return client, service, node, max_items, extra, sub_id
 
     def _get(self, service="", node="", max_items=10, item_ids=None, sub_id=None,
-             extra=None, default_node=None, form_ns=None, filters=None,
+             extra="", default_node=None, form_ns=None, filters=None,
              profile_key=C.PROF_KEY_NONE):
         """Bridge method to retrieve data from node with schema
 
@@ -583,8 +583,7 @@
         """
         if filters is None:
             filters = {}
-        if extra is None:
-            extra = {}
+        extra = data_format.deserialise(extra)
         # XXX: Q&D way to get list for labels when displaying them, but text when we
         #      have to modify them
         if C.bool(extra.get("labels_as_list", C.BOOL_FALSE)):
@@ -627,8 +626,7 @@
         extra = data_format.deserialise(extra)
         return client, service, node or None, schema, item_id or None, extra
 
-    @defer.inlineCallbacks
-    def copyMissingValues(self, client, service, node, item_id, form_ns, values):
+    async def copyMissingValues(self, client, service, node, item_id, form_ns, values):
         """Retrieve values existing in original item and missing in update
 
         Existing item will be retrieve, and values not already specified in values will
@@ -643,7 +641,7 @@
         """
         try:
             # we get previous item
-            items_data = yield self._p.getItems(
+            items_data = await self._p.getItems(
                 client, service, node, item_ids=[item_id]
             )
             item_elt = items_data[0][0]