from django.contrib import admin, messages from submissions.tasks import sync_event_game_scopes_task from .models import EventGame, Game class EventGameInline(admin.TabularInline): model = EventGame extra = 0 @admin.register(Game) class GameAdmin(admin.ModelAdmin): list_display = ["name", "steam_app_id", "updated_at"] search_fields = ["name", "steam_app_id"] readonly_fields = ["created_at", "updated_at"] inlines = [EventGameInline] @admin.register(EventGame) class EventGameAdmin(admin.ModelAdmin): list_display = ["game", "event", "enabled", "has_apibot_token"] list_filter = ["event", "enabled"] search_fields = ["game__name", "event__name"] actions = ["sync_scopes"] @admin.display(description="AAndT token", boolean=True) def has_apibot_token(self, obj): return bool(obj.apibot_token) @admin.action(description="Sync scopes from AAndT for selected EventGames") def sync_scopes(self, request, queryset): tokened = queryset.exclude(apibot_token__isnull=True).exclude(apibot_token="") skipped = queryset.count() - tokened.count() for event_game in tokened: sync_event_game_scopes_task.enqueue(event_game.id) self.message_user( request, f"Queued scope sync for {tokened.count()} EventGame(s)." ) if skipped: self.message_user( request, f"Skipped {skipped} EventGame(s) with no AAndT token configured.", level=messages.WARNING, )