mirror of https://github.com/python/cpython
GH-90985: Revert "Deprecate passing a message into cancel()" (#97999)
Reason: we were too hasty in deprecating this. We shouldn't deprecate it before we have a replacement.
This commit is contained in:
parent
c46a423a52
commit
09de8d7aaf
|
@ -197,11 +197,6 @@ Future Object
|
|||
.. versionchanged:: 3.9
|
||||
Added the *msg* parameter.
|
||||
|
||||
.. deprecated-removed:: 3.11 3.14
|
||||
*msg* parameter is ambiguous when multiple :meth:`cancel`
|
||||
are called with different cancellation messages.
|
||||
The argument will be removed.
|
||||
|
||||
.. method:: exception()
|
||||
|
||||
Return the exception that was set on this Future.
|
||||
|
@ -282,8 +277,3 @@ the Future has a result::
|
|||
|
||||
- :meth:`asyncio.Future.cancel` accepts an optional ``msg`` argument,
|
||||
but :func:`concurrent.futures.cancel` does not.
|
||||
|
||||
.. deprecated-removed:: 3.11 3.14
|
||||
*msg* parameter is ambiguous when multiple :meth:`cancel`
|
||||
are called with different cancellation messages.
|
||||
The argument will be removed.
|
||||
|
|
|
@ -1144,10 +1144,8 @@ Task Object
|
|||
.. versionchanged:: 3.9
|
||||
Added the *msg* parameter.
|
||||
|
||||
.. deprecated-removed:: 3.11 3.14
|
||||
*msg* parameter is ambiguous when multiple :meth:`cancel`
|
||||
are called with different cancellation messages.
|
||||
The argument will be removed.
|
||||
.. versionchanged:: 3.11
|
||||
The ``msg`` parameter is propagated from cancelled task to its awaiter.
|
||||
|
||||
.. _asyncio_example_task_cancel:
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ import concurrent.futures
|
|||
import contextvars
|
||||
import logging
|
||||
import sys
|
||||
import warnings
|
||||
from types import GenericAlias
|
||||
|
||||
from . import base_futures
|
||||
|
@ -151,11 +150,6 @@ class Future:
|
|||
change the future's state to cancelled, schedule the callbacks and
|
||||
return True.
|
||||
"""
|
||||
if msg is not None:
|
||||
warnings.warn("Passing 'msg' argument to Future.cancel() "
|
||||
"is deprecated since Python 3.11, and "
|
||||
"scheduled for removal in Python 3.14.",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
self.__log_traceback = False
|
||||
if self._state != _PENDING:
|
||||
return False
|
||||
|
|
|
@ -210,11 +210,6 @@ class Task(futures._PyFuture): # Inherit Python Task implementation
|
|||
|
||||
This also increases the task's count of cancellation requests.
|
||||
"""
|
||||
if msg is not None:
|
||||
warnings.warn("Passing 'msg' argument to Task.cancel() "
|
||||
"is deprecated since Python 3.11, and "
|
||||
"scheduled for removal in Python 3.14.",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
self._log_traceback = False
|
||||
if self.done():
|
||||
return False
|
||||
|
|
|
@ -229,22 +229,14 @@ class BaseFutureTests:
|
|||
self.assertTrue(hasattr(f, '_cancel_message'))
|
||||
self.assertEqual(f._cancel_message, None)
|
||||
|
||||
with self.assertWarnsRegex(
|
||||
DeprecationWarning,
|
||||
"Passing 'msg' argument"
|
||||
):
|
||||
f.cancel('my message')
|
||||
f.cancel('my message')
|
||||
with self.assertRaises(asyncio.CancelledError):
|
||||
self.loop.run_until_complete(f)
|
||||
self.assertEqual(f._cancel_message, 'my message')
|
||||
|
||||
def test_future_cancel_message_setter(self):
|
||||
f = self._new_future(loop=self.loop)
|
||||
with self.assertWarnsRegex(
|
||||
DeprecationWarning,
|
||||
"Passing 'msg' argument"
|
||||
):
|
||||
f.cancel('my message')
|
||||
f.cancel('my message')
|
||||
f._cancel_message = 'my new message'
|
||||
self.assertEqual(f._cancel_message, 'my new message')
|
||||
|
||||
|
|
|
@ -109,11 +109,7 @@ class BaseTaskTests:
|
|||
self.assertTrue(hasattr(t, '_cancel_message'))
|
||||
self.assertEqual(t._cancel_message, None)
|
||||
|
||||
with self.assertWarnsRegex(
|
||||
DeprecationWarning,
|
||||
"Passing 'msg' argument"
|
||||
):
|
||||
t.cancel('my message')
|
||||
t.cancel('my message')
|
||||
self.assertEqual(t._cancel_message, 'my message')
|
||||
|
||||
with self.assertRaises(asyncio.CancelledError) as cm:
|
||||
|
@ -125,11 +121,7 @@ class BaseTaskTests:
|
|||
async def coro():
|
||||
pass
|
||||
t = self.new_task(self.loop, coro())
|
||||
with self.assertWarnsRegex(
|
||||
DeprecationWarning,
|
||||
"Passing 'msg' argument"
|
||||
):
|
||||
t.cancel('my message')
|
||||
t.cancel('my message')
|
||||
t._cancel_message = 'my new message'
|
||||
self.assertEqual(t._cancel_message, 'my new message')
|
||||
|
||||
|
@ -706,14 +698,7 @@ class BaseTaskTests:
|
|||
async def coro():
|
||||
task = self.new_task(loop, sleep())
|
||||
await asyncio.sleep(0)
|
||||
if cancel_args not in ((), (None,)):
|
||||
with self.assertWarnsRegex(
|
||||
DeprecationWarning,
|
||||
"Passing 'msg' argument"
|
||||
):
|
||||
task.cancel(*cancel_args)
|
||||
else:
|
||||
task.cancel(*cancel_args)
|
||||
task.cancel(*cancel_args)
|
||||
done, pending = await asyncio.wait([task])
|
||||
task.result()
|
||||
|
||||
|
@ -747,14 +732,7 @@ class BaseTaskTests:
|
|||
async def coro():
|
||||
task = self.new_task(loop, sleep())
|
||||
await asyncio.sleep(0)
|
||||
if cancel_args not in ((), (None,)):
|
||||
with self.assertWarnsRegex(
|
||||
DeprecationWarning,
|
||||
"Passing 'msg' argument"
|
||||
):
|
||||
task.cancel(*cancel_args)
|
||||
else:
|
||||
task.cancel(*cancel_args)
|
||||
task.cancel(*cancel_args)
|
||||
done, pending = await asyncio.wait([task])
|
||||
task.exception()
|
||||
|
||||
|
@ -777,17 +755,10 @@ class BaseTaskTests:
|
|||
fut.set_result(None)
|
||||
await asyncio.sleep(10)
|
||||
|
||||
def cancel(task, msg):
|
||||
with self.assertWarnsRegex(
|
||||
DeprecationWarning,
|
||||
"Passing 'msg' argument"
|
||||
):
|
||||
task.cancel(msg)
|
||||
|
||||
async def coro():
|
||||
inner_task = self.new_task(loop, sleep())
|
||||
await fut
|
||||
loop.call_soon(cancel, inner_task, 'msg')
|
||||
loop.call_soon(inner_task.cancel, 'msg')
|
||||
try:
|
||||
await inner_task
|
||||
except asyncio.CancelledError as ex:
|
||||
|
@ -813,11 +784,7 @@ class BaseTaskTests:
|
|||
async def coro():
|
||||
task = self.new_task(loop, sleep())
|
||||
# We deliberately leave out the sleep here.
|
||||
with self.assertWarnsRegex(
|
||||
DeprecationWarning,
|
||||
"Passing 'msg' argument"
|
||||
):
|
||||
task.cancel('my message')
|
||||
task.cancel('my message')
|
||||
done, pending = await asyncio.wait([task])
|
||||
task.exception()
|
||||
|
||||
|
@ -2179,14 +2146,7 @@ class BaseTaskTests:
|
|||
async def main():
|
||||
qwe = self.new_task(loop, test())
|
||||
await asyncio.sleep(0.2)
|
||||
if cancel_args not in ((), (None,)):
|
||||
with self.assertWarnsRegex(
|
||||
DeprecationWarning,
|
||||
"Passing 'msg' argument"
|
||||
):
|
||||
qwe.cancel(*cancel_args)
|
||||
else:
|
||||
qwe.cancel(*cancel_args)
|
||||
qwe.cancel(*cancel_args)
|
||||
await qwe
|
||||
|
||||
try:
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Earlier in 3.11 we deprecated ``asyncio.Task.cancel("message")``. We realized we were too harsh, and have undeprecated it.
|
|
@ -1116,16 +1116,6 @@ static PyObject *
|
|||
_asyncio_Future_cancel_impl(FutureObj *self, PyObject *msg)
|
||||
/*[clinic end generated code: output=3edebbc668e5aba3 input=925eb545251f2c5a]*/
|
||||
{
|
||||
if (msg != Py_None) {
|
||||
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
||||
"Passing 'msg' argument to Future.cancel() "
|
||||
"is deprecated since Python 3.11, and "
|
||||
"scheduled for removal in Python 3.14.",
|
||||
2))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
ENSURE_FUTURE_ALIVE(self)
|
||||
return future_cancel(self, msg);
|
||||
}
|
||||
|
@ -2214,16 +2204,6 @@ static PyObject *
|
|||
_asyncio_Task_cancel_impl(TaskObj *self, PyObject *msg)
|
||||
/*[clinic end generated code: output=c66b60d41c74f9f1 input=7bb51bf25974c783]*/
|
||||
{
|
||||
if (msg != Py_None) {
|
||||
if (PyErr_WarnEx(PyExc_DeprecationWarning,
|
||||
"Passing 'msg' argument to Task.cancel() "
|
||||
"is deprecated since Python 3.11, and "
|
||||
"scheduled for removal in Python 3.14.",
|
||||
2))
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
self->task_log_tb = 0;
|
||||
|
||||
if (self->task_state != STATE_PENDING) {
|
||||
|
|
Loading…
Reference in New Issue