mirror of
https://github.com/zulip/zulip.git
synced 2025-11-12 18:06:44 +00:00
[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)
This commit is contained in:
53
zerver/management/commands/delete_tutorial_streams.py
Normal file
53
zerver/management/commands/delete_tutorial_streams.py
Normal file
@@ -0,0 +1,53 @@
|
||||
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."
|
||||
Reference in New Issue
Block a user