|
| 1 | +"""Update user badges based on OWASP awards.""" |
| 2 | + |
| 3 | +from django.core.management.base import BaseCommand |
| 4 | + |
| 5 | +from apps.github.models.user import User |
| 6 | +from apps.nest.models.badge import Badge |
| 7 | +from apps.owasp.models.award import Award |
| 8 | + |
| 9 | + |
| 10 | +class Command(BaseCommand): |
| 11 | + """Update user badges based on OWASP awards.""" |
| 12 | + |
| 13 | + help = "Update user badges based on OWASP awards" |
| 14 | + |
| 15 | + def handle(self, *args, **options): |
| 16 | + """Handle the command execution.""" |
| 17 | + # Get or create WASPY badge |
| 18 | + waspy_badge, created = Badge.objects.get_or_create( |
| 19 | + name="WASPY Award Winner", |
| 20 | + defaults={ |
| 21 | + "description": "Recipient of WASPY award from OWASP", |
| 22 | + "css_class": "badge-waspy", |
| 23 | + "weight": 10, |
| 24 | + }, |
| 25 | + ) |
| 26 | + |
| 27 | + if created: |
| 28 | + self.stdout.write(f"Created badge: {waspy_badge.name}") |
| 29 | + |
| 30 | + # Get users with WASPY awards |
| 31 | + waspy_winners = Award.get_waspy_award_winners() |
| 32 | + |
| 33 | + # Add badge to WASPY winners |
| 34 | + for user in waspy_winners: |
| 35 | + user.badges.add(waspy_badge) |
| 36 | + |
| 37 | + # Remove badge from users without WASPY awards |
| 38 | + users_with_badge = User.objects.filter(badges=waspy_badge) |
| 39 | + for user in users_with_badge: |
| 40 | + if not Award.get_user_waspy_awards(user).exists(): |
| 41 | + user.badges.remove(waspy_badge) |
| 42 | + |
| 43 | + self.stdout.write(f"Updated badges for {waspy_winners.count()} WASPY winners") |
0 commit comments