jp: jp asyncio port:

/!\ this commit is huge. Jp is temporarily not working with `dbus` bridge /!\

This patch implements the port of jp to asyncio, so it is now correctly using the bridge
asynchronously, and it can be used with bridges like `pb`. This also simplify the code,
notably for things which were previously implemented with many callbacks (like pagination
with RSM).

During the process, some behaviours have been modified/fixed, in jp and backends, check
diff for details.
This commit is contained in:
Goffi 2019-09-25 08:56:41 +02:00
commit 76aadbb3fb

View file

@ -381,7 +381,7 @@ class Events(object):
if register:
yield self.register(
client, service, None, {}, node, event_id, event_elt, creator=True)
client, None, {}, service, node, event_id, item_elt, creator=True)
defer.returnValue(node)
def _eventModify(self, service, node, id_, timestamp_update, data_update,
@ -447,24 +447,29 @@ class Events(object):
events.append((timestamp, data))
defer.returnValue(events)
def _eventInviteeGet(self, service, node, profile_key):
def _eventInviteeGet(self, service, node, invitee_jid_s, profile_key):
service = jid.JID(service) if service else None
node = node if node else NS_EVENT
client = self.host.getClient(profile_key)
return self.eventInviteeGet(client, service, node)
invitee_jid = jid.JID(invitee_jid_s) if invitee_jid_s else None
return self.eventInviteeGet(client, service, node, invitee_jid)
@defer.inlineCallbacks
def eventInviteeGet(self, client, service, node):
def eventInviteeGet(self, client, service, node, invitee_jid=None):
"""Retrieve attendance from event node
@param service(unicode, None): PubSub service
@param node(unicode): PubSub node of the event
@param node(unicode): PubSub node of the event's invitees
@param invitee_jid(jid.JId, None): jid of the invitee to retrieve (None to
retrieve profile's invitation). The bare jid correspond to the PubSub item id.
@return (dict): a dict with current attendance status,
an empty dict is returned if nothing has been answered yed
"""
if invitee_jid is None:
invitee_jid = client.jid
try:
items, metadata = yield self._p.getItems(
client, service, node, item_ids=[client.jid.userhost()]
client, service, node, item_ids=[invitee_jid.userhost()]
)
event_elt = next(items[0].elements(NS_EVENT, "invitee"))
except (exceptions.NotFound, IndexError):