from optparse import make_option
from django.core.management.base import BaseCommand
from zerver.models import Message, Realm, Stream, Recipient

import datetime
import time

class Command(BaseCommand):
    default_cutoff = time.time() - 60 * 60 * 24 * 30 # 30 days.

    option_list = BaseCommand.option_list + (
        make_option('--domain',
                    dest='domain',
                    type='str',
                    help='The domain whose public streams you want to dump.'),
        make_option('--since',
                    dest='since',
                    type='int',
                    default=default_cutoff,
                    help='The time in epoch since from which to start the dump.')
        )

    def handle(self, *args, **options):
        realm = Realm.objects.get(domain=options["domain"])
        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"])
        messages = Message.objects.filter(pub_date__gt=cutoff, recipient__in=recipients)

        for message in messages:
            print message.to_dict(False)

Add a management command to dump all messages on public streams for a realm.
Add a management command to dump all messages on public streams for a realm.

(imported from commit f4f8bfece408b466af4db93b2da15cf69b68e0a3)
