from django.conf import settings from django.core.management.base import BaseCommand, CommandError from core.backup import BackupError, DatabaseTarget, verify_backup class Command(BaseCommand): help = "Restore a backup into an explicitly allowed disposable database and verify it." def add_arguments(self, parser): parser.add_argument("--input", dest="input", required=True) parser.add_argument("--target-name", required=True) parser.add_argument("--target-host", required=True) parser.add_argument("--target-user", required=True) def handle(self, *args, **options): default = settings.DATABASES["default"] target = DatabaseTarget( host=options["target_host"], port=str(default.get("PORT") or "5432"), name=options["target_name"], user=options["target_user"], password=str(default.get("PASSWORD", "")), ) try: result = verify_backup(options["input"], target) except BackupError as error: raise CommandError(error.code) from None self.stdout.write(f"backup={result.name} format={result.version} verified") for table, count in sorted(result.row_counts.items()): self.stdout.write(f"table={table} rows={count}")