diff options
author | 2022-08-06 18:51:51 +0100 | |
---|---|---|
committer | 2022-08-06 18:51:51 +0100 | |
commit | 1eff1d81a19883136501757738cd8444634be893 (patch) | |
tree | 294a8938a3b608eb969e9d5f745e93926b8903b4 | |
parent | Fix tests (diff) |
Add note to docstring, fix type-hints, and update log messages
-rw-r--r-- | bot/exts/moderation/infraction/_scheduler.py | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/bot/exts/moderation/infraction/_scheduler.py b/bot/exts/moderation/infraction/_scheduler.py index db2ae9454..a44b66804 100644 --- a/bot/exts/moderation/infraction/_scheduler.py +++ b/bot/exts/moderation/infraction/_scheduler.py @@ -1,7 +1,7 @@ import textwrap import typing as t from abc import abstractmethod -from collections.abc import Callable +from collections.abc import Awaitable, Callable from gettext import ngettext import arrow @@ -80,9 +80,14 @@ class InfractionScheduler: async def reapply_infraction( self, infraction: _utils.Infraction, - action: t.Optional[Callable[[], None]] + action: t.Optional[Callable[[], Awaitable[None]]] ) -> None: - """Reapply an infraction if it's still active or deactivate it if less than 60 sec left.""" + """ + Reapply an infraction if it's still active or deactivate it if less than 60 sec left. + + Note: The `action` provided is an async function rather than a coroutine + to prevent getting a RuntimeWarning if it is not used (e.g. in mocked tests). + """ if infraction["expires_at"] is not None: # Calculate the time remaining, in seconds, for the mute. expiry = dateutil.parser.isoparse(infraction["expires_at"]) @@ -112,7 +117,7 @@ class InfractionScheduler: else: log.exception( f"Got unexpected HTTPException (HTTP {e.status}, Discord code {e.code})" - f"when awaiting {infraction['type']} coroutine for {infraction['user']}." + f"when running {infraction['type']} action for {infraction['user']}." ) else: log.info(f"Re-applied {infraction['type']} to user {infraction['user']} upon rejoining.") @@ -122,7 +127,7 @@ class InfractionScheduler: ctx: Context, infraction: _utils.Infraction, user: MemberOrUser, - action: t.Optional[Callable[[], None]] = None, + action: t.Optional[Callable[[], Awaitable[None]]] = None, user_reason: t.Optional[str] = None, additional_info: str = "", ) -> bool: @@ -133,6 +138,9 @@ class InfractionScheduler: `user_reason`, if provided, will be sent to the user in place of the infraction reason. `additional_info` will be attached to the text field in the mod-log embed. + Note: The `action` provided is an async function rather than just a coroutine + to prevent getting a RuntimeWarning if it is not used (e.g. in mocked tests). + Returns whether or not the infraction succeeded. """ infr_type = infraction["type"] @@ -196,7 +204,7 @@ class InfractionScheduler: # Execute the necessary actions to apply the infraction on Discord. if action: - log.trace(f"Awaiting the infraction #{id_} application action coroutine.") + log.trace(f"Running the infraction #{id_} application action.") try: await action() if expiry: |