mirror of
https://github.com/zulip/zulip.git
synced 2025-11-10 08:56:10 +00:00
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>
51 lines
1.9 KiB
Python
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'])
|