You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

31 lines
1.3 KiB

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}")