|
from django.db.models import F
|
|
from django.contrib.auth.models import User
|
|
from django.core.management.base import BaseCommand
|
|
from hc.accounts.models import Profile
|
|
from hc.api.models import Ping
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Prune pings based on limits in user profiles'
|
|
|
|
def handle(self, *args, **options):
|
|
# Create any missing user profiles
|
|
for user in User.objects.filter(profile=None):
|
|
Profile.objects.get_or_create(user_id=user.id)
|
|
|
|
q = Ping.objects
|
|
q = q.annotate(limit=F("owner__user__profile__ping_log_limit"))
|
|
q = q.filter(n__lt=F("owner__n_pings") - F("limit"))
|
|
q = q.filter(n__gt=0)
|
|
n_pruned, _ = q.delete()
|
|
|
|
return "Done! Pruned %d pings" % n_pruned
|