mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 06:53:25 +00:00
This is preparatory for stopping using the User model. (imported from commit a1b0808c8cc2ddd19a25163f91c4f18620c9ce90)
49 lines
1.7 KiB
Python
Executable File
49 lines
1.7 KiB
Python
Executable File
from optparse import make_option
|
|
from django.core.management.base import BaseCommand
|
|
from zephyr.models import Realm, UserProfile, Message, UserMessage, \
|
|
get_user_profile_by_email
|
|
from zephyr.lib.timestamp import datetime_to_timestamp, timestamp_to_datetime
|
|
import simplejson
|
|
|
|
def dump():
|
|
pointers = []
|
|
for u in UserProfile.objects.all():
|
|
pointer = u.pointer
|
|
if pointer != -1:
|
|
pub_date = Message.objects.get(id=pointer).pub_date
|
|
pointers.append((u.email, datetime_to_timestamp(pub_date)))
|
|
else:
|
|
pointers.append((u.email, -1))
|
|
file("dumped-pointers", "w").write(simplejson.dumps(pointers) + "\n")
|
|
|
|
def restore(change):
|
|
for (email, timestamp) in simplejson.loads(file("dumped-pointers").read()):
|
|
try:
|
|
u = get_user_profile_by_email(email)
|
|
except UserProfile.DoesNotExist:
|
|
print "Skipping...", email
|
|
continue
|
|
if timestamp == -1:
|
|
pointer = -1
|
|
else:
|
|
try:
|
|
pointer = UserMessage.objects.filter(user_profile=u,
|
|
message__pub_date__gte=timestamp_to_datetime(timestamp)).order_by("message")[0].message_id
|
|
except IndexError:
|
|
print "Alert...", email, timestamp
|
|
continue
|
|
if change:
|
|
u.pointer = pointer
|
|
u.save()
|
|
|
|
class Command(BaseCommand):
|
|
option_list = BaseCommand.option_list + (
|
|
make_option('--restore', default=False, action='store_true'),
|
|
make_option('--dry-run', '-n', default=False, action='store_true'),)
|
|
|
|
def handle(self, *args, **options):
|
|
if options["restore"]:
|
|
restore(change=not options['dry_run'])
|
|
else:
|
|
dump()
|