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

@ -212,8 +212,7 @@ class Events(object):
data["creator"] = True
return timestamp, data
@defer.inlineCallbacks
def getEventElement(self, client, service, node, id_):
async def getEventElement(self, client, service, node, id_):
"""Retrieve event element
@param service(jid.JID): pubsub service
@ -224,23 +223,24 @@ class Events(object):
"""
if not id_:
id_ = NS_EVENT
items, metadata = yield self._p.getItems(client, service, node, item_ids=[id_])
items, metadata = await self._p.getItems(client, service, node, item_ids=[id_])
try:
event_elt = next(items[0].elements(NS_EVENT, "event"))
except StopIteration:
raise exceptions.NotFound(_("No event element has been found"))
except IndexError:
raise exceptions.NotFound(_("No event with this id has been found"))
defer.returnValue(event_elt)
return event_elt
def _eventGet(self, service, node, id_="", profile_key=C.PROF_KEY_NONE):
service = jid.JID(service) if service else None
node = node if node else NS_EVENT
client = self.host.getClient(profile_key)
return self.eventGet(client, service, node, id_)
return defer.ensureDeferred(
self.eventGet(client, service, node, id_)
)
@defer.inlineCallbacks
def eventGet(self, client, service, node, id_=NS_EVENT):
async def eventGet(self, client, service, node, id_=NS_EVENT):
"""Retrieve event data
@param service(unicode, None): PubSub service
@ -253,9 +253,9 @@ class Events(object):
image: URL of a picture to use to represent event
background-image: URL of a picture to use in background
"""
event_elt = yield self.getEventElement(client, service, node, id_)
event_elt = await self.getEventElement(client, service, node, id_)
defer.returnValue(self._parseEventElt(event_elt))
return self._parseEventElt(event_elt)
def _eventCreate(
self, timestamp, data, service, node, id_="", profile_key=C.PROF_KEY_NONE
@ -436,10 +436,11 @@ class Events(object):
node = node if node else NS_EVENT
client = self.host.getClient(profile_key)
invitee_jid = jid.JID(invitee_jid_s) if invitee_jid_s else None
return self.eventInviteeGet(client, service, node, invitee_jid)
return defer.ensureDeferred(
self.eventInviteeGet(client, service, node, invitee_jid)
)
@defer.inlineCallbacks
def eventInviteeGet(self, client, service, node, invitee_jid=None):
async def eventInviteeGet(self, client, service, node, invitee_jid=None):
"""Retrieve attendance from event node
@param service(unicode, None): PubSub service
@ -452,28 +453,30 @@ class Events(object):
if invitee_jid is None:
invitee_jid = client.jid
try:
items, metadata = yield self._p.getItems(
items, metadata = await self._p.getItems(
client, service, node, item_ids=[invitee_jid.userhost()]
)
event_elt = next(items[0].elements(NS_EVENT, "invitee"))
except (exceptions.NotFound, IndexError):
# no item found, event data are not set yet
defer.returnValue({})
return {}
data = {}
for key in ("attend", "guests"):
try:
data[key] = event_elt[key]
except KeyError:
continue
defer.returnValue(data)
return data
def _eventInviteeSet(self, service, node, event_data, 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.eventInviteeSet(client, service, node, event_data)
return defer.ensureDeferred(
self.eventInviteeSet(client, service, node, event_data)
)
def eventInviteeSet(self, client, service, node, data):
async def eventInviteeSet(self, client, service, node, data):
"""Set or update attendance data in event node
@param service(unicode, None): PubSub service
@ -490,16 +493,17 @@ class Events(object):
except KeyError:
pass
item_elt = pubsub.Item(id=client.jid.userhost(), payload=event_elt)
return self._p.publish(client, service, node, items=[item_elt])
return await self._p.publish(client, service, node, items=[item_elt])
def _eventInviteesList(self, service, node, 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.eventInviteesList(client, service, node)
return defer.ensureDeferred(
self.eventInviteesList(client, service, node)
)
@defer.inlineCallbacks
def eventInviteesList(self, client, service, node):
async def eventInviteesList(self, client, service, node):
"""Retrieve attendance from event node
@param service(unicode, None): PubSub service
@ -507,7 +511,7 @@ class Events(object):
@return (dict): a dict with current attendance status,
an empty dict is returned if nothing has been answered yed
"""
items, metadata = yield self._p.getItems(client, service, node)
items, metadata = await self._p.getItems(client, service, node)
invitees = {}
for item in items:
try:
@ -525,7 +529,7 @@ class Events(object):
except KeyError:
continue
invitees[item["id"]] = data
defer.returnValue(invitees)
return invitees
async def invitePreflight(
self,