plugin XEP-0060: getItem(s), publish and (un)subscribe are now coroutines

This commit is contained in:
Goffi 2021-06-30 16:19:14 +02:00
commit bab851006f

View file

@ -189,23 +189,22 @@ class forums(object):
service = None
if not node.strip():
node = None
d=self.get(client, service, node, forums_key or None)
d = defer.ensureDeferred(self.get(client, service, node, forums_key or None))
d.addCallback(lambda data: json.dumps(data))
return d
@defer.inlineCallbacks
def get(self, client, service=None, node=None, forums_key=None):
async def get(self, client, service=None, node=None, forums_key=None):
if service is None:
service = client.pubsub_service
if node is None:
node = NS_FORUMS
if forums_key is None:
forums_key = 'default'
items_data = yield self._p.getItems(client, service, node, item_ids=[forums_key])
items_data = await self._p.getItems(client, service, node, item_ids=[forums_key])
item = items_data[0][0]
# we have the item and need to convert it to json
forums = self._parseForums(item)
defer.returnValue(forums)
return forums
def _set(self, forums, service=None, node=None, forums_key=None, profile_key=C.PROF_KEY_NONE):
client = self.host.getClient(profile_key)
@ -216,10 +215,11 @@ class forums(object):
service = None
if not node.strip():
node = None
return self.set(client, forums, service, node, forums_key or None)
return defer.ensureDeferred(
self.set(client, forums, service, node, forums_key or None)
)
@defer.inlineCallbacks
def set(self, client, forums, service=None, node=None, forums_key=None):
async def set(self, client, forums, service=None, node=None, forums_key=None):
"""Create or replace forums structure
@param forums(list): list of dictionary as follow:
@ -242,25 +242,33 @@ class forums(object):
node = NS_FORUMS
if forums_key is None:
forums_key = 'default'
forums_elt = yield self._createForums(client, forums, service, node)
yield self._p.sendItem(client, service, node, forums_elt, item_id=forums_key)
forums_elt = await self._createForums(client, forums, service, node)
return await self._p.sendItem(
client, service, node, forums_elt, item_id=forums_key
)
def _getTopics(self, service, node, extra=None, profile_key=C.PROF_KEY_NONE):
client = self.host.getClient(profile_key)
extra = self._p.parseExtra(extra)
d = self.getTopics(client, jid.JID(service), node, rsm_request=extra.rsm_request, extra=extra.extra)
d = defer.ensureDeferred(
self.getTopics(
client, jid.JID(service), node, rsm_request=extra.rsm_request,
extra=extra.extra
)
)
d.addCallback(
lambda topics_data: (topics_data[0], data_format.serialise(topics_data[1]))
)
return d
@defer.inlineCallbacks
def getTopics(self, client, service, node, rsm_request=None, extra=None):
async def getTopics(self, client, service, node, rsm_request=None, extra=None):
"""Retrieve topics data
Topics are simple microblog URIs with some metadata duplicated from first post
"""
topics_data = yield self._p.getItems(client, service, node, rsm_request=rsm_request, extra=extra)
topics_data = await self._p.getItems(
client, service, node, rsm_request=rsm_request, extra=extra
)
topics = []
item_elts, metadata = topics_data
for item_elt in item_elts:
@ -270,7 +278,7 @@ class forums(object):
'author': topic_elt['author'],
'title': str(title_elt)}
topics.append(topic)
defer.returnValue((topics, metadata))
return (topics, metadata)
def _createTopic(self, service, node, mb_data, profile_key):
client = self.host.getClient(profile_key)