aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar ChrisJL <[email protected]>2022-06-30 19:26:04 +0100
committerGravatar GitHub <[email protected]>2022-06-30 19:26:04 +0100
commit6e4d9fce6b02ab14528ea239b4eb0821b6c87140 (patch)
tree5bdd92652f52dec50761eb206f9a38229c6c0c9b
parentMerge pull request #95 from python-discord/dependabot/pip/urllib3-1.26.5 (diff)
parentMerge branch 'main' into misc-bug-fixes (diff)
Merge pull request #91 from python-discord/misc-bug-fixes
-rw-r--r--botcore/_bot.py4
-rw-r--r--botcore/site_api.py5
-rw-r--r--botcore/utils/_monkey_patches.py5
-rw-r--r--botcore/utils/members.py9
-rw-r--r--botcore/utils/scheduling.py32
-rw-r--r--docs/changelog.rst5
6 files changed, 36 insertions, 24 deletions
diff --git a/botcore/_bot.py b/botcore/_bot.py
index e9eba5c5..ed31d624 100644
--- a/botcore/_bot.py
+++ b/botcore/_bot.py
@@ -197,7 +197,7 @@ class BotBase(commands.Bot):
if not guild.roles or not guild.members or not guild.channels:
msg = "Guild available event was dispatched but the cache appears to still be empty!"
- self.log_to_dev_log(msg)
+ await self.log_to_dev_log(msg)
return
self._guild_available.set()
@@ -249,7 +249,7 @@ class BotBase(commands.Bot):
except Exception as e:
raise StartupError(e)
- async def ping_services() -> None:
+ async def ping_services(self) -> None:
"""Ping all required services on setup to ensure they are up before starting."""
...
diff --git a/botcore/site_api.py b/botcore/site_api.py
index dbdf4f3b..44309f9d 100644
--- a/botcore/site_api.py
+++ b/botcore/site_api.py
@@ -26,7 +26,7 @@ class ResponseCodeError(ValueError):
Args:
response (:obj:`aiohttp.ClientResponse`): The response object from the request.
response_json: The JSON response returned from the request, if any.
- request_text: The text of the request, if any.
+ response_text: The text of the request, if any.
"""
self.status = response.status
self.response_json = response_json or {}
@@ -76,7 +76,8 @@ class APIClient:
"""Close the aiohttp session."""
await self.session.close()
- async def maybe_raise_for_status(self, response: aiohttp.ClientResponse, should_raise: bool) -> None:
+ @staticmethod
+ async def maybe_raise_for_status(response: aiohttp.ClientResponse, should_raise: bool) -> None:
"""
Raise :exc:`ResponseCodeError` for non-OK response if an exception should be raised.
diff --git a/botcore/utils/_monkey_patches.py b/botcore/utils/_monkey_patches.py
index f2c6c100..c2f8aa10 100644
--- a/botcore/utils/_monkey_patches.py
+++ b/botcore/utils/_monkey_patches.py
@@ -1,6 +1,7 @@
"""Contains all common monkey patches, used to alter discord to fit our needs."""
import logging
+import typing
from datetime import datetime, timedelta
from functools import partial, partialmethod
@@ -46,9 +47,9 @@ def _patch_typing() -> None:
log.debug("Patching send_typing, which should fix things breaking when Discord disables typing events. Stay safe!")
original = http.HTTPClient.send_typing
- last_403 = None
+ last_403: typing.Optional[datetime] = None
- async def honeybadger_type(self, channel_id: int) -> None: # noqa: ANN001
+ async def honeybadger_type(self: http.HTTPClient, channel_id: int) -> None:
nonlocal last_403
if last_403 and (datetime.utcnow() - last_403) < timedelta(minutes=5):
log.warning("Not sending typing event, we got a 403 less than 5 minutes ago.")
diff --git a/botcore/utils/members.py b/botcore/utils/members.py
index e89b4618..1536a8d1 100644
--- a/botcore/utils/members.py
+++ b/botcore/utils/members.py
@@ -1,6 +1,6 @@
"""Useful helper functions for interactin with :obj:`discord.Member` objects."""
-
import typing
+from collections import abc
import discord
@@ -30,18 +30,19 @@ async def get_or_fetch_member(guild: discord.Guild, member_id: int) -> typing.Op
async def handle_role_change(
member: discord.Member,
- coro: typing.Callable[..., typing.Coroutine],
+ coro: typing.Callable[[discord.Role], abc.Coroutine],
role: discord.Role
) -> None:
"""
- Await the given ``coro`` with ``member`` as the sole argument.
+ Await the given ``coro`` with ``role`` as the sole argument.
Handle errors that we expect to be raised from
:obj:`discord.Member.add_roles` and :obj:`discord.Member.remove_roles`.
Args:
- member: The member to pass to ``coro``.
+ member: The member that is being modified for logging purposes.
coro: This is intended to be :obj:`discord.Member.add_roles` or :obj:`discord.Member.remove_roles`.
+ role: The role to be passed to ``coro``.
"""
try:
await coro(role)
diff --git a/botcore/utils/scheduling.py b/botcore/utils/scheduling.py
index 164f6b10..ebc42665 100644
--- a/botcore/utils/scheduling.py
+++ b/botcore/utils/scheduling.py
@@ -4,6 +4,7 @@ import asyncio
import contextlib
import inspect
import typing
+from collections import abc
from datetime import datetime
from functools import partial
@@ -38,9 +39,9 @@ class Scheduler:
self.name = name
self._log = logging.get_logger(f"{__name__}.{name}")
- self._scheduled_tasks: typing.Dict[typing.Hashable, asyncio.Task] = {}
+ self._scheduled_tasks: dict[abc.Hashable, asyncio.Task] = {}
- def __contains__(self, task_id: typing.Hashable) -> bool:
+ def __contains__(self, task_id: abc.Hashable) -> bool:
"""
Return :obj:`True` if a task with the given ``task_id`` is currently scheduled.
@@ -52,7 +53,7 @@ class Scheduler:
"""
return task_id in self._scheduled_tasks
- def schedule(self, task_id: typing.Hashable, coroutine: typing.Coroutine) -> None:
+ def schedule(self, task_id: abc.Hashable, coroutine: abc.Coroutine) -> None:
"""
Schedule the execution of a ``coroutine``.
@@ -79,7 +80,7 @@ class Scheduler:
self._scheduled_tasks[task_id] = task
self._log.debug(f"Scheduled task #{task_id} {id(task)}.")
- def schedule_at(self, time: datetime, task_id: typing.Hashable, coroutine: typing.Coroutine) -> None:
+ def schedule_at(self, time: datetime, task_id: abc.Hashable, coroutine: abc.Coroutine) -> None:
"""
Schedule ``coroutine`` to be executed at the given ``time``.
@@ -106,8 +107,8 @@ class Scheduler:
def schedule_later(
self,
delay: typing.Union[int, float],
- task_id: typing.Hashable,
- coroutine: typing.Coroutine
+ task_id: abc.Hashable,
+ coroutine: abc.Coroutine
) -> None:
"""
Schedule ``coroutine`` to be executed after ``delay`` seconds.
@@ -122,7 +123,7 @@ class Scheduler:
"""
self.schedule(task_id, self._await_later(delay, task_id, coroutine))
- def cancel(self, task_id: typing.Hashable) -> None:
+ def cancel(self, task_id: abc.Hashable) -> None:
"""
Unschedule the task identified by ``task_id``. Log a warning if the task doesn't exist.
@@ -150,8 +151,8 @@ class Scheduler:
async def _await_later(
self,
delay: typing.Union[int, float],
- task_id: typing.Hashable,
- coroutine: typing.Coroutine
+ task_id: abc.Hashable,
+ coroutine: abc.Coroutine
) -> None:
"""Await ``coroutine`` after ``delay`` seconds."""
try:
@@ -173,7 +174,7 @@ class Scheduler:
else:
self._log.debug(f"Finally block reached for #{task_id}; {state=}")
- def _task_done_callback(self, task_id: typing.Hashable, done_task: asyncio.Task) -> None:
+ def _task_done_callback(self, task_id: abc.Hashable, done_task: asyncio.Task) -> None:
"""
Delete the task and raise its exception if one exists.
@@ -208,13 +209,16 @@ class Scheduler:
self._log.error(f"Error in task #{task_id} {id(done_task)}!", exc_info=exception)
+TASK_RETURN = typing.TypeVar("TASK_RETURN")
+
+
def create_task(
- coro: typing.Awaitable,
+ coro: abc.Coroutine[typing.Any, typing.Any, TASK_RETURN],
*,
- suppressed_exceptions: tuple[typing.Type[Exception]] = (),
+ suppressed_exceptions: tuple[type[Exception]] = (),
event_loop: typing.Optional[asyncio.AbstractEventLoop] = None,
**kwargs,
-) -> asyncio.Task:
+) -> asyncio.Task[TASK_RETURN]:
"""
Wrapper for creating an :obj:`asyncio.Task` which logs exceptions raised in the task.
@@ -238,7 +242,7 @@ def create_task(
return task
-def _log_task_exception(task: asyncio.Task, *, suppressed_exceptions: typing.Tuple[typing.Type[Exception]]) -> None:
+def _log_task_exception(task: asyncio.Task, *, suppressed_exceptions: tuple[type[Exception]]) -> None:
"""Retrieve and log the exception raised in ``task`` if one exists."""
with contextlib.suppress(asyncio.CancelledError):
exception = task.exception()
diff --git a/docs/changelog.rst b/docs/changelog.rst
index cba9e090..1ba60bd2 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -4,6 +4,11 @@
Changelog
=========
+- :bug:`91` Fix incorrect docstring for ``botcore.utils.member.handle_role_change``.
+- :bug:`91` Pass missing self parameter to ``BotBase.ping_services``.
+- :bug:`91` Add missing await to ``BotBase.ping_services`` in some cases.
+
+
- :release:`7.2.0 <28th June 2022>`
- :support:`93` Bump Discord.py to :literal-url:`0eb3d26 <https://github.com/Rapptz/discord.py/commit/0eb3d26343969a25ffc43ba72eca42538d2e7e7a>`: