mirror of
https://github.com/github/codeql.git
synced 2026-04-25 16:55:19 +02:00
Python: Fix asyncio.coroutine deprecation
Was removed in 3.11, see https://docs.python.org/3.10/library/asyncio-task.html#asyncio.coroutine I couldn't make the __awwait__ actually give the result to the agen function... I also tried looking into https://docs.python.org/3/library/types.html#types.coroutine, but also failed to make that work. Without the Future, such as doing `yield SOURCE` inside `__await__` it complains `RuntimeError: Task got bad yield: 'source'`
This commit is contained in:
@@ -186,14 +186,20 @@ SINK(asyncio.run(c.coro(SOURCE))) # $ MISSING: flow
|
||||
class A:
|
||||
|
||||
def __await__(self):
|
||||
# yield SOURCE -- see https://groups.google.com/g/dev-python/c/_lrrc-vp9TI?pli=1
|
||||
return (yield from asyncio.coroutine(lambda: SOURCE)())
|
||||
fut = asyncio.Future()
|
||||
fut.set_result(SOURCE)
|
||||
yield from fut
|
||||
|
||||
async def agen(x):
|
||||
async def atest_custom_await_impl():
|
||||
a = A()
|
||||
return await a
|
||||
x = await a
|
||||
# TODO: Figure out how to actually return something from our custom __await__
|
||||
# implementation. The problem is we have to play nicely with the asyncio framework,
|
||||
# which have their own expectations on what a return value from __await__ should look
|
||||
# like.
|
||||
assert x is None
|
||||
SINK_F(x)
|
||||
|
||||
SINK(asyncio.run(agen(SOURCE))) # $ MISSING: flow
|
||||
|
||||
# Asynchronous generator functions
|
||||
# A function or method which is defined using async def and which uses the yield statement is called a asynchronous generator function. Such a function, when called, returns an asynchronous iterator object which can be used in an async for statement to execute the body of the function.
|
||||
|
||||
Reference in New Issue
Block a user