From a64dda2a2e64d1629f389adcf7ce67d15c3085bd Mon Sep 17 00:00:00 2001 From: Adarnof Date: Wed, 21 Feb 2018 17:47:05 -0500 Subject: [PATCH] Handle HTTP429 on nickname API endpoint Closes #971 --- allianceauth/services/modules/discord/manager.py | 1 + allianceauth/services/modules/discord/tasks.py | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/allianceauth/services/modules/discord/manager.py b/allianceauth/services/modules/discord/manager.py index 1814eeb1..51bb4f03 100644 --- a/allianceauth/services/modules/discord/manager.py +++ b/allianceauth/services/modules/discord/manager.py @@ -210,6 +210,7 @@ class DiscordOAuthManager: return None @staticmethod + @api_backoff def update_nickname(user_id, nickname): try: nickname = DiscordOAuthManager._sanitize_name(nickname) diff --git a/allianceauth/services/modules/discord/tasks.py b/allianceauth/services/modules/discord/tasks.py index 9fa1a5b1..8dc1316e 100644 --- a/allianceauth/services/modules/discord/tasks.py +++ b/allianceauth/services/modules/discord/tasks.py @@ -92,7 +92,7 @@ class DiscordTasks: @staticmethod @shared_task(bind=True, name='discord.update_nickname') - def update_nickname(self, pk): + def update_nickname(task_self, pk): user = User.objects.get(pk=pk) logger.debug("Updating discord nickname for user %s" % user) if DiscordTasks.has_account(user): @@ -101,10 +101,14 @@ class DiscordTasks: logger.debug("Updating user %s discord nickname to %s" % (user, character.character_name)) try: DiscordOAuthManager.update_nickname(user.discord.uid, DiscordTasks.get_nickname(user)) + except DiscordApiBackoff as bo: + logger.info("Discord nickname update API back off for %s, " + "retrying in %s seconds" % (user, bo.retry_after_seconds)) + raise task_self.retry(countdown=bo.retry_after_seconds) except Exception as e: - if self: + if task_self: logger.exception("Discord nickname sync failed for %s, retrying in 10 mins" % user) - raise self.retry(countdown=60 * 10) + raise task_self.retry(countdown=60 * 10) else: # Rethrow raise e