plugin XEP-0060: getItems extra is now serialised dict
This commit is contained in:
parent
fcbbc2aeed
commit
f2a06bbcbf
9 changed files with 32 additions and 31 deletions
|
|
@ -219,7 +219,7 @@ class PubsubLists:
|
|||
host.bridge.addMethod(
|
||||
"listGet",
|
||||
".plugin",
|
||||
in_sign="ssiassa{ss}s",
|
||||
in_sign="ssiassss",
|
||||
out_sign="s",
|
||||
method=lambda service, node, max_items, items_ids, sub_id, extra, profile_key:
|
||||
self._s._get(
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ class MergeRequests(object):
|
|||
self._handlers_list = [] # handlers sorted by priority
|
||||
self._type_handlers = {} # data type => handler map
|
||||
host.bridge.addMethod("mergeRequestsGet", ".plugin",
|
||||
in_sign='ssiassa{ss}s', out_sign='s',
|
||||
in_sign='ssiassss', out_sign='s',
|
||||
method=self._get,
|
||||
async_=True
|
||||
)
|
||||
|
|
@ -149,11 +149,10 @@ class MergeRequests(object):
|
|||
})
|
||||
|
||||
def _get(self, service='', node='', max_items=10, item_ids=None, sub_id=None,
|
||||
extra_dict=None, profile_key=C.PROF_KEY_NONE):
|
||||
if extra_dict and 'parse' in extra_dict:
|
||||
extra_dict['parse'] = C.bool(extra_dict['parse'])
|
||||
extra="", profile_key=C.PROF_KEY_NONE):
|
||||
extra = data_format.deserialise(extra)
|
||||
client, service, node, max_items, extra, sub_id = self._s.prepareBridgeGet(
|
||||
service, node, max_items, sub_id, extra_dict, profile_key)
|
||||
service, node, max_items, sub_id, extra, profile_key)
|
||||
d = self.get(client, service, node or None, max_items, item_ids, sub_id or None,
|
||||
extra.rsm_request, extra.extra)
|
||||
d.addCallback(self.serialise)
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ class XEP_0060(object):
|
|||
host.bridge.addMethod(
|
||||
"psItemsGet",
|
||||
".plugin",
|
||||
in_sign="ssiassa{ss}s",
|
||||
in_sign="ssiassss",
|
||||
out_sign="s",
|
||||
method=self._getItems,
|
||||
async_=True,
|
||||
|
|
@ -284,7 +284,7 @@ class XEP_0060(object):
|
|||
host.bridge.addMethod(
|
||||
"psGetFromMany",
|
||||
".plugin",
|
||||
in_sign="a(ss)ia{ss}s",
|
||||
in_sign="a(ss)iss",
|
||||
out_sign="s",
|
||||
method=self._getFromMany,
|
||||
)
|
||||
|
|
@ -613,7 +613,7 @@ class XEP_0060(object):
|
|||
return data_format.serialise(metadata)
|
||||
|
||||
def _getItems(self, service="", node="", max_items=10, item_ids=None, sub_id=None,
|
||||
extra_dict=None, profile_key=C.PROF_KEY_NONE):
|
||||
extra="", profile_key=C.PROF_KEY_NONE):
|
||||
"""Get items from pubsub node
|
||||
|
||||
@param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
|
||||
|
|
@ -621,7 +621,7 @@ class XEP_0060(object):
|
|||
client = self.host.getClient(profile_key)
|
||||
service = jid.JID(service) if service else None
|
||||
max_items = None if max_items == C.NO_LIMIT else max_items
|
||||
extra = self.parseExtra(extra_dict)
|
||||
extra = self.parseExtra(data_format.deserialise(extra))
|
||||
d = defer.ensureDeferred(self.getItems(
|
||||
client,
|
||||
service,
|
||||
|
|
@ -1439,13 +1439,13 @@ class XEP_0060(object):
|
|||
return d
|
||||
|
||||
def _getFromMany(
|
||||
self, node_data, max_item=10, extra_dict=None, profile_key=C.PROF_KEY_NONE
|
||||
self, node_data, max_item=10, extra="", profile_key=C.PROF_KEY_NONE
|
||||
):
|
||||
"""
|
||||
@param max_item(int): maximum number of item to get, C.NO_LIMIT for no limit
|
||||
"""
|
||||
max_item = None if max_item == C.NO_LIMIT else max_item
|
||||
extra = self.parseExtra(extra_dict)
|
||||
extra = self.parseExtra(data_format.deserialise(extra))
|
||||
return self.getFromMany(
|
||||
[(jid.JID(service), str(node)) for service, node in node_data],
|
||||
max_item,
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ class XEP_0277(object):
|
|||
host.bridge.addMethod(
|
||||
"mbGet",
|
||||
".plugin",
|
||||
in_sign="ssiasa{ss}s",
|
||||
in_sign="ssiasss",
|
||||
out_sign="s",
|
||||
method=self._mbGet,
|
||||
async_=True,
|
||||
|
|
@ -931,7 +931,7 @@ class XEP_0277(object):
|
|||
metadata['items'] = items
|
||||
return data_format.serialise(metadata)
|
||||
|
||||
def _mbGet(self, service="", node="", max_items=10, item_ids=None, extra_dict=None,
|
||||
def _mbGet(self, service="", node="", max_items=10, item_ids=None, extra="",
|
||||
profile_key=C.PROF_KEY_NONE):
|
||||
"""
|
||||
@param max_items(int): maximum number of item to get, C.NO_LIMIT for no limit
|
||||
|
|
@ -940,7 +940,7 @@ class XEP_0277(object):
|
|||
client = self.host.getClient(profile_key)
|
||||
service = jid.JID(service) if service else 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.mbGet(client, service, node or None, max_items, item_ids,
|
||||
extra.rsm_request, extra.extra)
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ class PubsubSchema(object):
|
|||
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 @@ class PubsubSchema(object):
|
|||
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 @@ class PubsubSchema(object):
|
|||
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 @@ class PubsubSchema(object):
|
|||
|
||||
## 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 @@ class PubsubSchema(object):
|
|||
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 @@ class PubsubSchema(object):
|
|||
"""
|
||||
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)):
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ from sat.tools.common import dynamic_import
|
|||
from sat.tools.common import uri
|
||||
from sat.tools.common import date_utils
|
||||
from sat.tools.common import utils
|
||||
from sat.tools.common import data_format
|
||||
from sat.tools.common.ansi import ANSI as A
|
||||
from sat.core import exceptions
|
||||
import sat_frontends.jp
|
||||
|
|
@ -1189,11 +1190,11 @@ class CommandBase(object):
|
|||
_('trying to use output when use_output has not been set'))
|
||||
return self.host.output(output_type, self.args.output, self.extra_outputs, data)
|
||||
|
||||
def getPubsubExtra(self, extra=None):
|
||||
def getPubsubExtra(self, extra: Optional[dict] = None) -> str:
|
||||
"""Helper method to compute extra data from pubsub arguments
|
||||
|
||||
@param extra(None, dict): base extra dict, or None to generate a new one
|
||||
@return (dict): dict which can be used directly in the bridge for pubsub
|
||||
@param extra: base extra dict, or None to generate a new one
|
||||
@return: dict which can be used directly in the bridge for pubsub
|
||||
"""
|
||||
if extra is None:
|
||||
extra = {}
|
||||
|
|
@ -1234,7 +1235,7 @@ class CommandBase(object):
|
|||
else:
|
||||
if order_by is not None:
|
||||
extra[C.KEY_ORDER_BY] = self.args.order_by
|
||||
return extra
|
||||
return data_format.serialise(extra)
|
||||
|
||||
def add_parser_options(self):
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -600,7 +600,9 @@ class Edit(base.CommandBase, BlogPublishCommon, common.BaseEdit):
|
|||
items = [item] if item else []
|
||||
|
||||
mb_data = data_format.deserialise(
|
||||
await self.host.bridge.mbGet(service, node, 1, items, {}, self.profile)
|
||||
await self.host.bridge.mbGet(
|
||||
service, node, 1, items, data_format.serialise({}), self.profile
|
||||
)
|
||||
)
|
||||
item = mb_data["items"][0]
|
||||
|
||||
|
|
|
|||
|
|
@ -139,7 +139,7 @@ class Get(base.CommandBase):
|
|||
self.args.max,
|
||||
self.args.items,
|
||||
"",
|
||||
extra,
|
||||
data_format.serialise(extra),
|
||||
self.profile,
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -955,7 +955,7 @@ class Edit(base.CommandBase, common.BaseEdit):
|
|||
items = [item] if item else []
|
||||
ps_result = data_format.deserialise(
|
||||
await self.host.bridge.psItemsGet(
|
||||
service, node, 1, items, "", {}, self.profile
|
||||
service, node, 1, items, "", data_format.serialise({}), self.profile
|
||||
)
|
||||
)
|
||||
item_raw = ps_result["items"][0]
|
||||
|
|
@ -1687,7 +1687,7 @@ class Transform(base.CommandBase):
|
|||
self.args.rsm_max,
|
||||
self.args.items,
|
||||
"",
|
||||
extra,
|
||||
data_format.serialise(extra),
|
||||
self.profile,
|
||||
)
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in a new issue