aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar MarkKoz <[email protected]>2020-02-19 09:26:42 -0800
committerGravatar MarkKoz <[email protected]>2020-02-19 09:52:52 -0800
commite5a7af3811f7f2687026254f44194b3a16459ca2 (patch)
treeb9df84fc889fdc12844828d5291752dc3dfb5847
parentTests: fix unawaited error for MockAPIClient (diff)
Sync: add confirmation timeout and max diff to config
-rw-r--r--bot/cogs/sync/syncers.py25
-rw-r--r--bot/constants.py7
-rw-r--r--config-default.yml4
-rw-r--r--tests/bot/cogs/sync/test_base.py4
4 files changed, 24 insertions, 16 deletions
diff --git a/bot/cogs/sync/syncers.py b/bot/cogs/sync/syncers.py
index 23039d1fc..43a8f2b62 100644
--- a/bot/cogs/sync/syncers.py
+++ b/bot/cogs/sync/syncers.py
@@ -26,9 +26,6 @@ class Syncer(abc.ABC):
_CORE_DEV_MENTION = f"<@&{constants.Roles.core_developer}> "
_REACTION_EMOJIS = (constants.Emojis.check_mark, constants.Emojis.cross_mark)
- CONFIRM_TIMEOUT = 60 * 5 # 5 minutes
- MAX_DIFF = 10
-
def __init__(self, bot: Bot) -> None:
self.bot = bot
@@ -50,7 +47,7 @@ class Syncer(abc.ABC):
msg_content = (
f'Possible cache issue while syncing {self.name}s. '
- f'More than {self.MAX_DIFF} {self.name}s were changed. '
+ f'More than {constants.Sync.max_diff} {self.name}s were changed. '
f'React to confirm or abort the sync.'
)
@@ -110,8 +107,8 @@ class Syncer(abc.ABC):
Uses the `_reaction_check` function to determine if a reaction is valid.
- If there is no reaction within `CONFIRM_TIMEOUT` seconds, return False. To acknowledge the
- reaction (or lack thereof), `message` will be edited.
+ If there is no reaction within `bot.constants.Sync.confirm_timeout` seconds, return False.
+ To acknowledge the reaction (or lack thereof), `message` will be edited.
"""
# Preserve the core-dev role mention in the message edits so users aren't confused about
# where notifications came from.
@@ -123,7 +120,7 @@ class Syncer(abc.ABC):
reaction, _ = await self.bot.wait_for(
'reaction_add',
check=partial(self._reaction_check, author, message),
- timeout=self.CONFIRM_TIMEOUT
+ timeout=constants.Sync.confirm_timeout
)
except TimeoutError:
# reaction will remain none thus sync will be aborted in the finally block below.
@@ -159,15 +156,15 @@ class Syncer(abc.ABC):
"""
Prompt for confirmation and return a tuple of the result and the prompt message.
- `diff_size` is the size of the diff of the sync. If it is greater than `MAX_DIFF`, the
- prompt will be sent. The `author` is the invoked of the sync and the `message` is an extant
- message to edit to display the prompt.
+ `diff_size` is the size of the diff of the sync. If it is greater than
+ `bot.constants.Sync.max_diff`, the prompt will be sent. The `author` is the invoked of the
+ sync and the `message` is an extant message to edit to display the prompt.
If confirmed or no confirmation was needed, the result is True. The returned message will
either be the given `message` or a new one which was created when sending the prompt.
"""
log.trace(f"Determining if confirmation prompt should be sent for {self.name} syncer.")
- if diff_size > self.MAX_DIFF:
+ if diff_size > constants.Sync.max_diff:
message = await self._send_prompt(message)
if not message:
return False, None # Couldn't get channel.
@@ -182,9 +179,9 @@ class Syncer(abc.ABC):
"""
Synchronise the database with the cache of `guild`.
- If the differences between the cache and the database are greater than `MAX_DIFF`, then
- a confirmation prompt will be sent to the dev-core channel. The confirmation can be
- optionally redirect to `ctx` instead.
+ If the differences between the cache and the database are greater than
+ `bot.constants.Sync.max_diff`, then a confirmation prompt will be sent to the dev-core
+ channel. The confirmation can be optionally redirect to `ctx` instead.
"""
log.info(f"Starting {self.name} syncer.")
diff --git a/bot/constants.py b/bot/constants.py
index 6279388de..81ce3e903 100644
--- a/bot/constants.py
+++ b/bot/constants.py
@@ -539,6 +539,13 @@ class RedirectOutput(metaclass=YAMLGetter):
delete_delay: int
+class Sync(metaclass=YAMLGetter):
+ section = 'sync'
+
+ confirm_timeout: int
+ max_diff: int
+
+
class Event(Enum):
"""
Event names. This does not include every event (for example, raw
diff --git a/config-default.yml b/config-default.yml
index 74dcc1862..0ebdc4080 100644
--- a/config-default.yml
+++ b/config-default.yml
@@ -430,6 +430,10 @@ redirect_output:
delete_invocation: true
delete_delay: 15
+sync:
+ confirm_timeout: 300
+ max_diff: 10
+
duck_pond:
threshold: 5
custom_emojis: [*DUCKY_YELLOW, *DUCKY_BLURPLE, *DUCKY_CAMO, *DUCKY_DEVIL, *DUCKY_NINJA, *DUCKY_REGAL, *DUCKY_TUBE, *DUCKY_HUNT, *DUCKY_WIZARD, *DUCKY_PARTY, *DUCKY_ANGEL, *DUCKY_MAUL, *DUCKY_SANTA]
diff --git a/tests/bot/cogs/sync/test_base.py b/tests/bot/cogs/sync/test_base.py
index 0539f5683..e6a6f9688 100644
--- a/tests/bot/cogs/sync/test_base.py
+++ b/tests/bot/cogs/sync/test_base.py
@@ -361,10 +361,10 @@ class SyncerSyncTests(unittest.TestCase):
self.assertEqual(self.syncer._get_confirmation_result.call_args[0][1], author)
self.assertEqual(self.syncer._get_confirmation_result.call_args[0][2], message)
+ @mock.patch.object(constants.Sync, "max_diff", new=3)
@helpers.async_test
async def test_confirmation_result_small_diff(self):
"""Should always return True and the given message if the diff size is too small."""
- self.syncer.MAX_DIFF = 3
author = helpers.MockMember()
expected_message = helpers.MockMessage()
@@ -381,10 +381,10 @@ class SyncerSyncTests(unittest.TestCase):
self.syncer._send_prompt.assert_not_called()
self.syncer._wait_for_confirmation.assert_not_called()
+ @mock.patch.object(constants.Sync, "max_diff", new=3)
@helpers.async_test
async def test_confirmation_result_large_diff(self):
"""Should return True if confirmed and False if _send_prompt fails or aborted."""
- self.syncer.MAX_DIFF = 3
author = helpers.MockMember()
mock_message = helpers.MockMessage()