Skip to content

Commit a4c2eff

Browse files
authored
Merge branch 'master' into windows
2 parents 67df390 + e8efea4 commit a4c2eff

4 files changed

Lines changed: 63 additions & 9 deletions

File tree

tests/test_base.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,36 @@ def factory(loop, coro, **kwargs):
630630
self.loop.set_task_factory(None)
631631
self.assertIsNone(self.loop.get_task_factory())
632632

633+
@unittest.skipUnless(
634+
sys.version_info >= (3, 13),
635+
"loop.create_task with eager_start requires Python 3.13+",
636+
)
637+
def test_loop_create_task_eager_start(self):
638+
async def coro():
639+
return "eager"
640+
641+
async def main():
642+
task = self.loop.create_task(coro(), eager_start=True)
643+
self.assertTrue(task.done())
644+
self.assertEqual(task.result(), "eager")
645+
646+
self.loop.run_until_complete(main())
647+
648+
@unittest.skipUnless(
649+
sys.version_info >= (3, 14),
650+
"asyncio.create_task with eager_start requires Python 3.14+",
651+
)
652+
def test_asyncio_create_task_eager_start(self):
653+
async def coro():
654+
return "eager"
655+
656+
async def main():
657+
task = asyncio.create_task(coro(), eager_start=True)
658+
self.assertTrue(task.done())
659+
self.assertEqual(task.result(), "eager")
660+
661+
self.loop.run_until_complete(main())
662+
633663
def test_shutdown_asyncgens_01(self):
634664
finalized = list()
635665

uvloop/loop.pyi

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import asyncio
2+
import contextvars
23
import ssl
34
import sys
45
from socket import AddressFamily, SocketKind, _Address, _RetAddress, socket
@@ -46,12 +47,30 @@ class Loop:
4647
def is_running(self) -> bool: ...
4748
def is_closed(self) -> bool: ...
4849
def create_future(self) -> asyncio.Future[Any]: ...
49-
def create_task(
50-
self,
51-
coro: Union[Awaitable[_T], Generator[Any, None, _T]],
52-
*,
53-
name: Optional[str] = ...,
54-
) -> asyncio.Task[_T]: ...
50+
if sys.version_info >= (3, 13):
51+
def create_task(
52+
self,
53+
coro: Union[Awaitable[_T], Generator[Any, None, _T]],
54+
*,
55+
name: Optional[str] = ...,
56+
context: Optional[contextvars.Context] = ...,
57+
eager_start: Optional[bool] = ...,
58+
) -> asyncio.Task[_T]: ...
59+
elif sys.version_info >= (3, 11):
60+
def create_task(
61+
self,
62+
coro: Union[Awaitable[_T], Generator[Any, None, _T]],
63+
*,
64+
name: Optional[str] = ...,
65+
context: Optional[contextvars.Context] = ...,
66+
) -> asyncio.Task[_T]: ...
67+
else:
68+
def create_task(
69+
self,
70+
coro: Union[Awaitable[_T], Generator[Any, None, _T]],
71+
*,
72+
name: Optional[str] = ...,
73+
) -> asyncio.Task[_T]: ...
5574
def set_task_factory(
5675
self,
5776
factory: Optional[

uvloop/loop.pyx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1409,7 +1409,7 @@ cdef class Loop:
14091409
"""Create a Future object attached to the loop."""
14101410
return self._new_future()
14111411

1412-
def create_task(self, coro, *, name=None, context=None):
1412+
def create_task(self, coro, *, name=None, context=None, eager_start=None):
14131413
"""Schedule a coroutine object.
14141414
14151415
Return a task object.
@@ -1422,7 +1422,12 @@ cdef class Loop:
14221422
created when no context is provided.
14231423
"""
14241424
self._check_closed()
1425-
if PY311:
1425+
if PY313:
1426+
if self._task_factory is None:
1427+
task = aio_Task(coro, loop=self, context=context, eager_start=eager_start)
1428+
else:
1429+
task = self._task_factory(self, coro, context=context, eager_start=eager_start)
1430+
elif PY311:
14261431
if self._task_factory is None:
14271432
task = aio_Task(coro, loop=self, context=context)
14281433
else:

vendor/libuv

Submodule libuv updated 178 files

0 commit comments

Comments
 (0)