Merge branch 'adhoc-partial-coroutine' into 'master'

xep_0050:allow partial coroutines as handlers

See merge request poezio/slixmpp!231
This commit is contained in:
Maxime Buquet 2023-02-23 23:40:42 +00:00
commit e34fbfb28f

View File

@ -4,6 +4,7 @@
# This file is part of Slixmpp.
# See the file LICENSE for copying permission.
import asyncio
import functools
import logging
import time
@ -619,10 +620,16 @@ class XEP_0050(BasePlugin):
self.terminate_command(session)
def _iscoroutine_or_partial_coroutine(handler):
return asyncio.iscoroutinefunction(handler) \
or isinstance(handler, functools.partial) \
and asyncio.iscoroutinefunction(handler.func)
async def _await_if_needed(handler, *args):
if handler is None:
raise XMPPError("bad-request", text="The command is completed")
if asyncio.iscoroutinefunction(handler):
if _iscoroutine_or_partial_coroutine(handler):
log.debug(f"%s is async", handler)
return await handler(*args)
else: