from django.core.management import BaseCommand, CommandError from django.db.models import Q from api import settings from desecapi.models import RRset, Domain, User from desecapi.pdns_change_tracker import PDNSChangeTracker class Command(BaseCommand): help = 'Sets/updates limits for users and domains.' def add_arguments(self, parser): parser.add_argument('kind', help='Identifies which limit should be updated. Possible values: domains, ttl') parser.add_argument('id', help='Identifies the entity to be updated. Users are identified by email address; ' 'domains by their name.') parser.add_argument('new_limit', help='New value for the limit.') def handle(self, *args, **options): if options['kind'] == 'domains': try: user = User.objects.get(email=options['id']) except User.DoesNotExist: raise CommandError(f'User with email address "{options["id"]}" could not be found.') user.limit_domains = options['new_limit'] user.save() print(f'Updated {user.email}: set max number of domains to {user.limit_domains}.') elif options['kind'] == 'ttl': try: domain = Domain.objects.get(name=options['id']) except Domain.DoesNotExist: raise CommandError(f'Domain with name "{options["id"]}" could not be found.') domain.minimum_ttl = options['new_limit'] domain.save() print(f'Updated {domain.name}: set minimum TTL to {domain.minimum_ttl}.') else: raise CommandError(f'Unknown limit "{options["kind"]}" specified.')