Files
zulip/zerver/management/commands/delete_tutorial_streams.py
Tim Abbott e111a2f9a5 [manual] Rename Django app from zephyr to zerver.
This needs to be deployed to both staging and prod at the same
off-peak time (and the schema migration run).

At the time it is deployed, we need to make a few changes directly in
the database:

(1) UPDATE django_content_type set app_label='zerver' where app_label='zephyr';
(2) UPDATE south_migrationhistory set app_name='zerver' where app_name='zephyr';

(imported from commit eb3fd719571740189514ef0b884738cb30df1320)
2013-08-06 07:39:36 -04:00

54 lines
2.2 KiB
Python

from __future__ import absolute_import
from django.core.management.base import BaseCommand
from zerver.models import Subscription, Recipient, Message, Stream, \
get_user_profile_by_email
from django.db.models import Q
import datetime
import pytz
from optparse import make_option
class Command(BaseCommand):
help = """Delete all inactive tutorial stream subscriptions."""
option_list = BaseCommand.option_list + (
make_option('-f', '--for-real',
dest='for_real',
action='store_true',
default=False,
help="Actually deactive subscriptions. Default is a dry run."),
)
def has_sent_to(self, user_profile, recipient):
return Message.objects.filter(sender=user_profile, recipient=recipient).count() != 0
def handle(self, **options):
possible_tutorial_streams = Stream.objects.filter(Q(name__startswith='tutorial-'))
tutorial_bot = get_user_profile_by_email("tutorial-bot@zulip.com")
for stream in possible_tutorial_streams:
recipient = Recipient.objects.get(type=Recipient.STREAM, type_id=stream.id)
subscribers = Subscription.objects.filter(recipient=recipient, active=True)
if ((subscribers.count() == 1) and self.has_sent_to(tutorial_bot, recipient)):
# This is a tutorial stream.
most_recent_message = Message.objects.filter(
recipient=recipient).latest("pub_date")
# This cutoff must be more generous than the tutorial bot cutoff
# in the client code.
cutoff = datetime.datetime.now(tz=pytz.utc) - datetime.timedelta(hours=2)
if most_recent_message.pub_date < cutoff:
# The tutorial has expired, so delete the stream.
print stream.name, most_recent_message.pub_date
if options["for_real"]:
tutorial_user = subscribers[0]
tutorial_user.active = False
tutorial_user.save(update_fields=["active"])
if options["for_real"]:
print "Subscriptions deactivated."
else:
print "This was a dry run. Pass -f to actually deactivate."