from django.core.management.base import BaseCommand from peeringdb_server.models import REFTAG_MAP, NetworkContact, User, Sponsorship, Partnership from django.core.management import call_command from django.contrib.auth.models import Group from django.conf import settings class Command(BaseCommand): help = "Wipe all peering data, including users - superusers will be kept - cannot be used in production environments" def add_arguments(self, parser): parser.add_argument('--commit', action='store_true', help="will commit the changes") parser.add_argument('--keep-users', action='store_true', help="do not delete users") parser.add_argument('--load-data', action='store_true', help="load data after wipe") parser.add_argument('--load-data-url', type=str, default="https://www.peeringdb.com/api", help="load data from here") def log(self, msg): if self.commit: self.stdout.write(msg) else: self.stdout.write("[pretend] {}".format(msg)) def handle(self, *args, **options): self.commit = options.get("commit", False) self.keep_users = options.get("keep_users", False) self.load_data = options.get("load_data", False) self.load_data_url = options.get("load_data_url") if not settings.TUTORIAL_MODE: self.log("Command can only be run with tutorial mode enabled") return self.log("Wiping peeringdb data") if not self.keep_users: if self.commit: User.objects.filter(is_superuser=False).delete() self.log("Deleted users") if self.commit: REFTAG_MAP["org"].objects.all().delete() self.log("Deleted peering entities") if self.commit: Sponsorship.objects.all().delete() Partnership.objects.all().delete() self.log("Deleted sponsorships and partnerships") if self.commit: call_command("deleterevisions") self.log("Deleted reversion data") if self.commit: call_command("clearsessions", stdout=self.stdout) self.log("Cleared seassions") if self.load_data: call_command("pdb_load_data", commit=self.commit, url=self.load_data_url, stdout=self.stdout)