Files
zulip/zerver/management/commands/restore_messages.py
Anders Kaseorg 365fe0b3d5 python: Sort imports with isort.
Fixes #2665.

Regenerated by tabbott with `lint --fix` after a rebase and change in
parameters.

Note from tabbott: In a few cases, this converts technical debt in the
form of unsorted imports into different technical debt in the form of
our largest files having very long, ugly import sequences at the
start.  I expect this change will increase pressure for us to split
those files, which isn't a bad thing.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
2020-06-11 16:45:32 -07:00

51 lines
1.9 KiB
Python

from typing import Any
from django.core.management.base import CommandParser
from zerver.lib.management import ZulipBaseCommand
from zerver.lib.retention import (
restore_all_data_from_archive,
restore_data_from_archive,
restore_data_from_archive_by_realm,
)
from zerver.models import ArchiveTransaction
class Command(ZulipBaseCommand):
help = """
Restore recently deleted messages from the archive, that
have not been vacuumed (because the time limit of
ARCHIVED_DATA_VACUUMING_DELAY_DAYS has not passed).
Intended primarily for use after against potential bugs in
Zulip's message retention and deletion features.
Examples:
To restore all recently deleted messages:
./manage.py restore_messages
To restore a specific ArchiveTransaction:
./manage.py restore_messages --transaction-id=1
"""
def add_arguments(self, parser: CommandParser) -> None:
parser.add_argument('-d', '--restore-deleted',
dest='restore_deleted',
action='store_true',
help='Restore manually deleted messages.')
parser.add_argument('-t', '--transaction-id',
dest='transaction_id',
type=int,
help='Restore a specific ArchiveTransaction.')
self.add_realm_args(parser, help='Restore archived messages from the specified realm. '
'(Does not restore manually deleted messages.)')
def handle(self, **options: Any) -> None:
realm = self.get_realm(options)
if realm:
restore_data_from_archive_by_realm(realm)
elif options['transaction_id']:
restore_data_from_archive(ArchiveTransaction.objects.get(id=options['transaction_id']))
else:
restore_all_data_from_archive(restore_manual_transactions=options['restore_deleted'])