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