xep_0050:allow partial coroutines as handlers
This commit is contained in:
parent
1f934d375c
commit
92b4f2a7eb
1 changed files with 8 additions and 1 deletions
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue