gh-128308: pass **kwargs to asyncio task_factory (#128768)

Co-authored-by: Kumar Aditya <kumaraditya@python.org>
This commit is contained in:
Thomas Grainger 2025-01-20 16:53:55 +00:00 committed by GitHub
parent 6c914bf85c
commit 38a9956876
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 48 additions and 29 deletions

View file

@ -458,25 +458,18 @@ class BaseEventLoop(events.AbstractEventLoop):
"""Create a Future object attached to the loop."""
return futures.Future(loop=self)
def create_task(self, coro, *, name=None, context=None):
def create_task(self, coro, **kwargs):
"""Schedule a coroutine object.
Return a task object.
"""
self._check_closed()
if self._task_factory is None:
task = tasks.Task(coro, loop=self, name=name, context=context)
if task._source_traceback:
del task._source_traceback[-1]
else:
if context is None:
# Use legacy API if context is not needed
task = self._task_factory(self, coro)
else:
task = self._task_factory(self, coro, context=context)
task.set_name(name)
if self._task_factory is not None:
return self._task_factory(self, coro, **kwargs)
task = tasks.Task(coro, loop=self, **kwargs)
if task._source_traceback:
del task._source_traceback[-1]
try:
return task
finally:
@ -490,9 +483,10 @@ class BaseEventLoop(events.AbstractEventLoop):
If factory is None the default task factory will be set.
If factory is a callable, it should have a signature matching
'(loop, coro)', where 'loop' will be a reference to the active
event loop, 'coro' will be a coroutine object. The callable
must return a Future.
'(loop, coro, **kwargs)', where 'loop' will be a reference to the active
event loop, 'coro' will be a coroutine object, and **kwargs will be
arbitrary keyword arguments that should be passed on to Task.
The callable must return a Task.
"""
if factory is not None and not callable(factory):
raise TypeError('task factory must be a callable or None')

View file

@ -329,7 +329,7 @@ class AbstractEventLoop:
# Method scheduling a coroutine object: create a task.
def create_task(self, coro, *, name=None, context=None):
def create_task(self, coro, **kwargs):
raise NotImplementedError
# Methods for interacting with threads.