From 00ad1f429f391901bdaa0c1c774b012be9f97359 Mon Sep 17 00:00:00 2001 From: Joey Hines Date: Sun, 21 Jul 2019 09:51:47 -0500 Subject: [PATCH] Added update_mc_username management command + This replaces the internal background task to handle username updates + This command can be called from an external service to update usernames --- GeoffreyApp/apps.py | 5 +--- GeoffreyApp/background_tasks.py | 21 -------------- .../management/commands/update_mc_username.py | 28 +++++++++++++++++++ 3 files changed, 29 insertions(+), 25 deletions(-) delete mode 100644 GeoffreyApp/background_tasks.py create mode 100644 GeoffreyApp/management/commands/update_mc_username.py diff --git a/GeoffreyApp/apps.py b/GeoffreyApp/apps.py index a2a116a..868f068 100644 --- a/GeoffreyApp/apps.py +++ b/GeoffreyApp/apps.py @@ -1,5 +1,6 @@ from django.apps import AppConfig import os +import background_task path = os.path.dirname(os.path.abspath(__file__)) + "/assets/bots/geoffrey.py" @@ -7,7 +8,3 @@ path = os.path.dirname(os.path.abspath(__file__)) + "/assets/bots/geoffrey.py" class GeoffreyAppConfig(AppConfig): name = 'GeoffreyApp' verbose_name = "Geoffrey: Minecraft Web Database" - - def ready(self): - import GeoffreyApp.background_tasks as background_tasks - background_tasks.run_tasks() diff --git a/GeoffreyApp/background_tasks.py b/GeoffreyApp/background_tasks.py deleted file mode 100644 index 9dd8c31..0000000 --- a/GeoffreyApp/background_tasks.py +++ /dev/null @@ -1,21 +0,0 @@ -from GeoffreyApp.models import Player -from GeoffreyApp.minecraft_api import grab_playername -from apscheduler.schedulers.background import BackgroundScheduler - - -def update_usernames(): - players = Player.objects.all() - - for player in players: - mc_username = grab_playername(player.mc_uuid) - if player.name != mc_username: - player.name = mc_username - player.save() - - -def run_tasks(): - scheduler = BackgroundScheduler() - - scheduler.add_job(update_usernames, 'interval', minutes=10) - - scheduler.start() diff --git a/GeoffreyApp/management/commands/update_mc_username.py b/GeoffreyApp/management/commands/update_mc_username.py new file mode 100644 index 0000000..e8660b3 --- /dev/null +++ b/GeoffreyApp/management/commands/update_mc_username.py @@ -0,0 +1,28 @@ +from django.core.management.base import BaseCommand, CommandError +from GeoffreyApp.models import Player +from GeoffreyApp.minecraft_api import grab_playername +from GeoffreyApp.errors import UsernameLookupFailed +import logging + +logger = logging.getLogger(__name__) + + +class Command(BaseCommand): + help = "Updates all the minecraft usernames in the database" + + def handle(self, *args, **options): + players = Player.objects.all() + for player in players: + try: + mc_username = grab_playername(player.mc_uuid) + if player.name != mc_username: + player.name = mc_username + player.save() + except UsernameLookupFailed: + logger.error("Error updating MC UUID %s" % player.mc_uuid) + except Exception as e: + error_str = "Error updating MC usernames: %s" % e.__str__() + logger.error(error_str) + raise CommandError(error_str) + + self.stdout.write("Done updating MC usernames")