plugin XEP-0060: getItem(s), publish and (un)subscribe are now coroutines
This commit is contained in:
parent
a3e6425eb2
commit
bab851006f
1 changed files with 165 additions and 161 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue