Remove regular context manager support from Typing

This commit is contained in:
Rapptz 2022-02-23 16:05:08 -05:00
parent c7df838a39
commit 0ed745f5ae
2 changed files with 7 additions and 24 deletions

View File

@ -1391,15 +1391,10 @@ class Messageable:
await self._state.http.send_typing(channel.id)
def typing(self) -> Typing:
"""Returns a context manager that allows you to type for an indefinite period of time.
"""Returns an asynchronous context manager that allows you to type for an indefinite period of time.
This is useful for denoting long computations in your bot.
.. note::
This is both a regular context manager and an async context manager.
This means that both ``with`` and ``async with`` work with this.
Example Usage: ::
async with channel.typing():
@ -1408,6 +1403,8 @@ class Messageable:
await channel.send('done!')
.. versionchanged:: 2.0
This no longer works with the ``with`` syntax, ``async with`` must be used instead.
"""
return Typing(self)

View File

@ -25,15 +25,13 @@ DEALINGS IN THE SOFTWARE.
from __future__ import annotations
import asyncio
from typing import TYPE_CHECKING, TypeVar, Optional, Type
from typing import TYPE_CHECKING, Optional, Type
if TYPE_CHECKING:
from .abc import Messageable
from types import TracebackType
TypingT = TypeVar('TypingT', bound='Typing')
# fmt: off
__all__ = (
'Typing',
@ -66,23 +64,11 @@ class Typing:
await typing(channel.id)
await asyncio.sleep(5)
def __enter__(self: TypingT) -> TypingT:
self.task: asyncio.Task = self.loop.create_task(self.do_typing())
self.task.add_done_callback(_typing_done_callback)
return self
def __exit__(
self,
exc_type: Optional[Type[BaseException]],
exc_value: Optional[BaseException],
traceback: Optional[TracebackType],
) -> None:
self.task.cancel()
async def __aenter__(self: TypingT) -> TypingT:
async def __aenter__(self) -> None:
self._channel = channel = await self.messageable._get_channel()
await channel._state.http.send_typing(channel.id)
return self.__enter__()
self.task: asyncio.Task = self.loop.create_task(self.do_typing())
self.task.add_done_callback(_typing_done_callback)
async def __aexit__(
self,