Hi.
Let's say I have this library that expose a decorator; it's meant to be used
with normal functions.
but I have to "apply" the decorator to an async function.
>From what I understand I cannot "really" wait for this decorated async
>function, as it's not really "async", and, from a simple test I made, I see
>that the order of execution is not really "straight" (I have simplifield the
>example to the bone)
import asyncio
def deco(fun): # the "classic" decorator
def wrap(*args, **kwargs):
print('wrap begin')
try:
return fun(*args, **kwargs)
finally:
print('wrap end')
return wrap
@deco
async def decorated_async():
print('a')
await asyncio.sleep(1)
print('b')
loop = asyncio.get_event_loop()
loop.run_until_complete(decorated_async())
loop.close()
the output of this script is
wrap begin
wrap end
a
b
while an "async-aware" decorator (with an "async" wrap that "await"s the fun
call) would print the "wrap end" line at the end.
I can easily rewrite my dumb decorator to handle async functions (I can just
make an "async def wrap" and "return await fun"), but I cannot rewrite this
library.
is there a way to "convert" a "normal" decorator in one that can handle async
functions?
Thanks
--
https://mail.python.org/mailman/listinfo/python-list