mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 14:35:27 +00:00
This makes management commands more readable, since one doesn't need to know details of how the library works to read based code.
35 lines
1.2 KiB
Python
35 lines
1.2 KiB
Python
import datetime
|
|
import time
|
|
from typing import Any
|
|
|
|
from django.core.management.base import CommandParser
|
|
|
|
from zerver.lib.management import ZulipBaseCommand
|
|
from zerver.models import Message, Recipient, Stream
|
|
|
|
|
|
class Command(ZulipBaseCommand):
|
|
help = "Dump messages from public streams of a realm"
|
|
|
|
def add_arguments(self, parser: CommandParser) -> None:
|
|
default_cutoff = time.time() - 60 * 60 * 24 * 30 # 30 days.
|
|
self.add_realm_args(parser, required=True)
|
|
parser.add_argument(
|
|
"--since",
|
|
type=int,
|
|
default=default_cutoff,
|
|
help="The time in epoch since from which to start the dump.",
|
|
)
|
|
|
|
def handle(self, *args: Any, **options: Any) -> None:
|
|
realm = self.get_realm(options)
|
|
streams = Stream.objects.filter(realm=realm, invite_only=False)
|
|
recipients = Recipient.objects.filter(
|
|
type=Recipient.STREAM, type_id__in=[stream.id for stream in streams]
|
|
)
|
|
cutoff = datetime.datetime.fromtimestamp(options["since"], tz=datetime.timezone.utc)
|
|
messages = Message.objects.filter(date_sent__gt=cutoff, recipient__in=recipients)
|
|
|
|
for message in messages:
|
|
print(message.to_dict(False))
|