2012-09-04 20:26:45 +02:00
|
|
|
from django.core.management.base import BaseCommand
|
2012-08-28 23:08:38 +02:00
|
|
|
from django.utils.timezone import utc
|
2012-08-28 18:45:10 +02:00
|
|
|
|
|
|
|
from django.contrib.auth.models import User
|
2012-10-10 22:53:24 +02:00
|
|
|
from zephyr.models import Message, UserProfile, Stream, Recipient, \
|
2012-09-21 16:40:46 +02:00
|
|
|
Subscription, Huddle, get_huddle, Realm, UserMessage, get_user_profile_by_id, \
|
2012-10-10 22:55:26 +02:00
|
|
|
create_user, do_send_message, create_user_if_needed, create_stream_if_needed
|
2012-09-14 18:31:11 +02:00
|
|
|
from zephyr.lib.parallel import run_parallel
|
2012-10-10 16:59:59 +02:00
|
|
|
from zephyr.lib.initial_password import initial_password
|
2012-09-14 18:31:11 +02:00
|
|
|
from django.db import transaction
|
2012-09-21 16:10:36 +02:00
|
|
|
from django.conf import settings
|
2012-10-06 23:53:05 +02:00
|
|
|
from api import mit_subs_list
|
2012-08-28 18:45:10 +02:00
|
|
|
|
2012-09-27 19:58:42 +02:00
|
|
|
import simplejson
|
2012-08-28 18:45:10 +02:00
|
|
|
import datetime
|
|
|
|
import random
|
2012-09-04 20:26:45 +02:00
|
|
|
from optparse import make_option
|
2012-08-28 18:45:10 +02:00
|
|
|
|
2012-09-21 00:03:43 +02:00
|
|
|
def create_users(name_list):
|
|
|
|
for name, email in name_list:
|
2012-09-21 16:40:46 +02:00
|
|
|
(short_name, domain) = email.split("@")
|
2012-09-21 16:10:36 +02:00
|
|
|
if User.objects.filter(email=email):
|
2012-09-07 17:54:00 +02:00
|
|
|
# We're trying to create the same user twice!
|
|
|
|
raise
|
2012-09-21 00:03:43 +02:00
|
|
|
realm = Realm.objects.get(domain=domain)
|
2012-10-10 16:59:59 +02:00
|
|
|
create_user(email, initial_password(email), realm, name, short_name)
|
2012-09-07 17:54:00 +02:00
|
|
|
|
2012-10-10 23:17:43 +02:00
|
|
|
def create_streams(stream_list, realm):
|
|
|
|
for name in stream_list:
|
2012-10-10 22:53:24 +02:00
|
|
|
if Stream.objects.filter(name=name, realm=realm):
|
2012-10-10 23:17:43 +02:00
|
|
|
# We're trying to create the same stream twice!
|
2012-09-07 17:54:00 +02:00
|
|
|
raise
|
2012-10-10 22:53:24 +02:00
|
|
|
Stream.create(name, realm)
|
2012-09-07 17:54:00 +02:00
|
|
|
|
2012-09-04 20:26:45 +02:00
|
|
|
class Command(BaseCommand):
|
2012-08-28 18:45:10 +02:00
|
|
|
help = "Populate a test database"
|
|
|
|
|
2012-09-04 20:26:45 +02:00
|
|
|
option_list = BaseCommand.option_list + (
|
2012-10-03 21:07:40 +02:00
|
|
|
make_option('-n', '--num-messages',
|
|
|
|
dest='num_messages',
|
2012-09-04 20:26:45 +02:00
|
|
|
type='int',
|
2012-09-14 18:31:11 +02:00
|
|
|
default=600,
|
2012-10-10 16:29:48 +02:00
|
|
|
help='The number of messages to create.'),
|
2012-09-20 06:19:37 +02:00
|
|
|
make_option('--extra-users',
|
|
|
|
dest='extra_users',
|
|
|
|
type='int',
|
|
|
|
default=0,
|
|
|
|
help='The number of extra users to create'),
|
2012-09-05 18:38:35 +02:00
|
|
|
make_option('--huddles',
|
|
|
|
dest='num_huddles',
|
|
|
|
type='int',
|
|
|
|
default=3,
|
|
|
|
help='The number of huddles to create.'),
|
|
|
|
make_option('--personals',
|
|
|
|
dest='num_personals',
|
|
|
|
type='int',
|
|
|
|
default=6,
|
|
|
|
help='The number of personal pairs to create.'),
|
2012-09-14 22:52:09 +02:00
|
|
|
make_option('--threads',
|
|
|
|
dest='threads',
|
|
|
|
type='int',
|
|
|
|
default=10,
|
|
|
|
help='The number of threads to use.'),
|
2012-09-05 18:38:35 +02:00
|
|
|
make_option('--percent-huddles',
|
|
|
|
dest='percent_huddles',
|
|
|
|
type='float',
|
|
|
|
default=15,
|
|
|
|
help='The percent of messages to be huddles.'),
|
|
|
|
make_option('--percent-personals',
|
|
|
|
dest='percent_personals',
|
|
|
|
type='float',
|
|
|
|
default=15,
|
|
|
|
help='The percent of messages to be personals.'),
|
2012-09-05 19:38:48 +02:00
|
|
|
make_option('--stickyness',
|
|
|
|
dest='stickyness',
|
|
|
|
type='float',
|
|
|
|
default=20,
|
|
|
|
help='The percent of messages to repeat recent folks.'),
|
2012-09-10 20:38:29 +02:00
|
|
|
make_option('--nodelete',
|
|
|
|
action="store_false",
|
|
|
|
default=True,
|
|
|
|
dest='delete',
|
|
|
|
help='Whether to delete all the existing messages.'),
|
2012-10-03 21:07:40 +02:00
|
|
|
make_option('--replay-old-messages',
|
2012-09-27 19:58:42 +02:00
|
|
|
action="store_true",
|
|
|
|
default=False,
|
2012-10-03 21:07:40 +02:00
|
|
|
dest='replay_old_messages',
|
2012-09-27 19:58:42 +02:00
|
|
|
help='Whether to replace the log of old messages.'),
|
2012-09-04 20:26:45 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
def handle(self, **options):
|
2012-09-05 18:38:35 +02:00
|
|
|
if options["percent_huddles"] + options["percent_personals"] > 100:
|
|
|
|
self.stderr.write("Error! More than 100% of messages allocated.\n")
|
|
|
|
return
|
|
|
|
|
2012-10-10 23:17:43 +02:00
|
|
|
stream_list = ["Verona", "Denmark", "Scotland", "Venice", "Rome"]
|
2012-09-05 17:23:58 +02:00
|
|
|
|
2012-09-10 20:38:29 +02:00
|
|
|
if options["delete"]:
|
2012-10-10 22:54:24 +02:00
|
|
|
for model in [Message, Stream, UserProfile, User, Recipient,
|
2012-09-10 20:38:29 +02:00
|
|
|
Realm, Subscription, Huddle, UserMessage]:
|
2012-10-10 22:54:24 +02:00
|
|
|
model.objects.all().delete()
|
2012-09-05 21:49:56 +02:00
|
|
|
|
2012-09-10 20:38:29 +02:00
|
|
|
# Create a test realm
|
2012-09-21 00:03:43 +02:00
|
|
|
humbug_realm = Realm(domain="humbughq.com")
|
|
|
|
humbug_realm.save()
|
2012-09-05 17:23:58 +02:00
|
|
|
|
2012-09-10 20:38:29 +02:00
|
|
|
# Create test Users (UserProfiles are automatically created,
|
|
|
|
# as are subscriptions to the ability to receive personals).
|
2012-09-21 00:03:43 +02:00
|
|
|
names = [("Othello, the Moor of Venice", "othello@humbughq.com"), ("Iago", "iago@humbughq.com"),
|
|
|
|
("Prospero from The Tempest", "prospero@humbughq.com"),
|
|
|
|
("Cordelia Lear", "cordelia@humbughq.com"), ("King Hamlet", "hamlet@humbughq.com")]
|
2012-09-20 17:22:39 +02:00
|
|
|
for i in xrange(options["extra_users"]):
|
2012-09-20 06:19:37 +02:00
|
|
|
names.append(('Extra User %d' % (i,), 'extrauser%d' % (i,)))
|
|
|
|
|
2012-09-21 00:03:43 +02:00
|
|
|
create_users(names)
|
2012-09-10 20:38:29 +02:00
|
|
|
|
2012-10-10 23:17:43 +02:00
|
|
|
# Create public streams.
|
|
|
|
create_streams(stream_list, humbug_realm)
|
|
|
|
recipient_streams = [klass.type_id for klass in
|
2012-10-10 22:57:21 +02:00
|
|
|
Recipient.objects.filter(type=Recipient.STREAM)]
|
2012-09-10 20:38:29 +02:00
|
|
|
|
2012-10-10 23:17:43 +02:00
|
|
|
# Create subscriptions to streams
|
2012-09-10 20:38:29 +02:00
|
|
|
profiles = UserProfile.objects.all()
|
|
|
|
for i, profile in enumerate(profiles):
|
2012-10-10 23:17:43 +02:00
|
|
|
# Subscribe to some streams.
|
|
|
|
for recipient in recipient_streams[:int(len(recipient_streams) *
|
2012-09-10 20:38:29 +02:00
|
|
|
float(i)/len(profiles)) + 1]:
|
2012-10-10 22:57:21 +02:00
|
|
|
r = Recipient.objects.get(type=Recipient.STREAM, type_id=recipient)
|
2012-09-10 20:38:29 +02:00
|
|
|
new_subscription = Subscription(userprofile=profile,
|
|
|
|
recipient=r)
|
|
|
|
new_subscription.save()
|
|
|
|
else:
|
2012-09-21 00:03:43 +02:00
|
|
|
humbug_realm = Realm.objects.get(domain="humbughq.com")
|
2012-10-10 23:17:43 +02:00
|
|
|
recipient_streams = [klass.type_id for klass in
|
2012-10-10 22:57:21 +02:00
|
|
|
Recipient.objects.filter(type=Recipient.STREAM)]
|
2012-09-10 20:38:29 +02:00
|
|
|
|
|
|
|
# Extract a list of all users
|
|
|
|
users = [user.id for user in User.objects.all()]
|
2012-09-05 17:23:58 +02:00
|
|
|
|
2012-09-05 18:38:35 +02:00
|
|
|
# Create several initial huddles
|
2012-09-20 17:22:39 +02:00
|
|
|
for i in xrange(options["num_huddles"]):
|
2012-09-10 20:38:29 +02:00
|
|
|
get_huddle(random.sample(users, random.randint(3, 4)))
|
2012-09-05 18:38:35 +02:00
|
|
|
|
|
|
|
# Create several initial pairs for personals
|
2012-09-20 17:22:39 +02:00
|
|
|
personals_pairs = [random.sample(users, 2)
|
|
|
|
for i in xrange(options["num_personals"])]
|
2012-09-14 17:52:38 +02:00
|
|
|
|
2012-09-14 22:52:09 +02:00
|
|
|
threads = options["threads"]
|
2012-09-14 18:31:11 +02:00
|
|
|
jobs = []
|
2012-09-20 17:22:39 +02:00
|
|
|
for i in xrange(threads):
|
2012-10-03 21:07:40 +02:00
|
|
|
count = options["num_messages"] / threads
|
|
|
|
if i < options["num_messages"] % threads:
|
2012-09-14 18:31:11 +02:00
|
|
|
count += 1
|
|
|
|
jobs.append((count, personals_pairs, options, self.stdout.write))
|
2012-10-03 21:07:40 +02:00
|
|
|
for status, job in run_parallel(send_messages, jobs, threads=threads):
|
2012-09-14 18:31:11 +02:00
|
|
|
pass
|
2012-08-28 18:45:10 +02:00
|
|
|
|
2012-09-10 20:38:29 +02:00
|
|
|
if options["delete"]:
|
2012-09-21 00:03:43 +02:00
|
|
|
mit_realm = Realm(domain="mit.edu")
|
|
|
|
mit_realm.save()
|
|
|
|
|
2012-09-10 20:38:29 +02:00
|
|
|
# Create internal users
|
2012-09-21 17:06:37 +02:00
|
|
|
internal_mit_users = []
|
|
|
|
create_users(internal_mit_users)
|
2012-09-07 17:54:00 +02:00
|
|
|
|
2012-10-10 22:54:48 +02:00
|
|
|
create_streams(mit_subs_list.all_subs, mit_realm)
|
2012-09-07 17:54:00 +02:00
|
|
|
|
2012-10-10 23:17:43 +02:00
|
|
|
# Now subscribe everyone to these streams
|
2012-09-21 00:03:43 +02:00
|
|
|
profiles = UserProfile.objects.filter(realm=mit_realm)
|
2012-09-21 23:54:23 +02:00
|
|
|
for cls in mit_subs_list.all_subs:
|
2012-10-10 22:53:24 +02:00
|
|
|
stream = Stream.objects.get(name=cls, realm=mit_realm)
|
2012-10-10 22:57:21 +02:00
|
|
|
recipient = Recipient.objects.get(type=Recipient.STREAM, type_id=stream.id)
|
2012-09-10 20:38:29 +02:00
|
|
|
for i, profile in enumerate(profiles):
|
2012-09-21 23:54:23 +02:00
|
|
|
if profile.user.email in mit_subs_list.subs_lists:
|
|
|
|
key = profile.user.email
|
|
|
|
else:
|
|
|
|
key = "default"
|
|
|
|
if cls in mit_subs_list.subs_lists[key]:
|
|
|
|
new_subscription = Subscription(userprofile=profile, recipient=recipient)
|
|
|
|
new_subscription.save()
|
2012-09-21 17:06:37 +02:00
|
|
|
|
|
|
|
internal_humbug_users = []
|
|
|
|
create_users(internal_humbug_users)
|
2012-10-11 16:55:27 +02:00
|
|
|
humbug_stream_list = ["devel", "all", "humbug", "design", "support", "social", "test"]
|
2012-10-10 23:17:43 +02:00
|
|
|
create_streams(humbug_stream_list, humbug_realm)
|
2012-09-21 17:06:37 +02:00
|
|
|
|
2012-10-10 23:17:43 +02:00
|
|
|
# Now subscribe everyone to these streams
|
2012-09-21 17:06:37 +02:00
|
|
|
profiles = UserProfile.objects.filter(realm=humbug_realm)
|
2012-10-10 23:17:43 +02:00
|
|
|
for cls in humbug_stream_list:
|
2012-10-10 22:53:24 +02:00
|
|
|
stream = Stream.objects.get(name=cls, realm=humbug_realm)
|
2012-10-10 22:57:21 +02:00
|
|
|
recipient = Recipient.objects.get(type=Recipient.STREAM, type_id=stream.id)
|
2012-09-21 17:06:37 +02:00
|
|
|
for i, profile in enumerate(profiles):
|
2012-10-10 23:17:43 +02:00
|
|
|
# Subscribe to some streams.
|
2012-09-21 17:06:37 +02:00
|
|
|
new_subscription = Subscription(userprofile=profile, recipient=recipient)
|
|
|
|
new_subscription.save()
|
2012-09-07 17:54:00 +02:00
|
|
|
|
2012-09-10 20:38:29 +02:00
|
|
|
self.stdout.write("Successfully populated test database.\n")
|
2012-10-03 21:07:40 +02:00
|
|
|
if options["replay_old_messages"]:
|
|
|
|
restore_saved_messages()
|
2012-09-14 18:31:11 +02:00
|
|
|
|
2012-10-02 22:58:13 +02:00
|
|
|
# Set restored pointers to the very latest messages
|
|
|
|
for user_profile in UserProfile.objects.all():
|
|
|
|
ids = [u.message_id for u in UserMessage.objects.filter(user_profile = user_profile)]
|
|
|
|
if ids != []:
|
|
|
|
user_profile.pointer = max(ids)
|
|
|
|
user_profile.save()
|
|
|
|
|
|
|
|
|
2012-09-14 22:43:54 +02:00
|
|
|
recipient_hash = {}
|
|
|
|
def get_recipient_by_id(rid):
|
|
|
|
if rid in recipient_hash:
|
|
|
|
return recipient_hash[rid]
|
|
|
|
return Recipient.objects.get(id=rid)
|
|
|
|
|
2012-10-03 21:07:40 +02:00
|
|
|
def restore_saved_messages():
|
2012-10-05 20:42:40 +02:00
|
|
|
old_messages = file("all_messages_log", "r").readlines()
|
2012-10-03 21:05:48 +02:00
|
|
|
for old_message_json in old_messages:
|
|
|
|
old_message = simplejson.loads(old_message_json.strip())
|
|
|
|
message = Message()
|
2012-09-29 00:33:49 +02:00
|
|
|
|
2012-10-03 21:05:48 +02:00
|
|
|
sender_email = old_message["sender_email"]
|
2012-09-29 00:33:49 +02:00
|
|
|
realm = None
|
|
|
|
try:
|
|
|
|
realm = Realm.objects.get(domain=sender_email.split('@')[1])
|
|
|
|
except IndexError:
|
|
|
|
pass
|
|
|
|
except Realm.DoesNotExist:
|
|
|
|
pass
|
|
|
|
|
|
|
|
if not realm:
|
|
|
|
realm = Realm.objects.get(domain='mit.edu')
|
|
|
|
|
2012-09-27 19:58:42 +02:00
|
|
|
create_user_if_needed(realm, sender_email, sender_email.split('@')[0],
|
2012-10-03 21:05:48 +02:00
|
|
|
old_message["sender_full_name"],
|
|
|
|
old_message["sender_short_name"])
|
|
|
|
message.sender = UserProfile.objects.get(user__email=old_message["sender_email"])
|
2012-10-10 22:57:21 +02:00
|
|
|
type_hash = {"stream": Recipient.STREAM, "huddle": Recipient.HUDDLE, "personal": Recipient.PERSONAL}
|
2012-10-03 21:05:48 +02:00
|
|
|
message.type = type_hash[old_message["type"]]
|
|
|
|
message.content = old_message["content"]
|
2012-10-11 00:01:39 +02:00
|
|
|
message.subject = old_message["subject"]
|
2012-10-03 21:05:48 +02:00
|
|
|
message.pub_date = datetime.datetime.utcfromtimestamp(float(old_message["timestamp"])).replace(tzinfo=utc)
|
2012-09-27 19:58:42 +02:00
|
|
|
|
2012-10-03 21:05:48 +02:00
|
|
|
if message.type == Recipient.PERSONAL:
|
|
|
|
u = old_message["recipient"][0]
|
2012-09-27 19:58:42 +02:00
|
|
|
create_user_if_needed(realm, u["email"], u["email"].split('@')[0],
|
|
|
|
u["full_name"], u["short_name"])
|
|
|
|
user_profile = UserProfile.objects.get(user__email=u["email"])
|
2012-10-03 21:05:48 +02:00
|
|
|
message.recipient = Recipient.objects.get(type=Recipient.PERSONAL,
|
2012-09-27 19:58:42 +02:00
|
|
|
type_id=user_profile.id)
|
2012-10-10 22:57:21 +02:00
|
|
|
elif message.type == Recipient.STREAM:
|
2012-10-10 22:55:26 +02:00
|
|
|
stream = create_stream_if_needed(realm, old_message["recipient"])
|
2012-10-10 22:57:21 +02:00
|
|
|
message.recipient = Recipient.objects.get(type=Recipient.STREAM,
|
2012-10-10 22:53:24 +02:00
|
|
|
type_id=stream.id)
|
2012-10-03 21:05:48 +02:00
|
|
|
elif message.type == Recipient.HUDDLE:
|
|
|
|
for u in old_message["recipient"]:
|
2012-09-27 19:58:42 +02:00
|
|
|
create_user_if_needed(realm, u["email"], u["email"].split('@')[0],
|
|
|
|
u["full_name"], u["short_name"])
|
|
|
|
target_huddle = get_huddle([UserProfile.objects.get(user__email=u["email"]).id
|
2012-10-03 21:05:48 +02:00
|
|
|
for u in old_message["recipient"]])
|
|
|
|
message.recipient = Recipient.objects.get(type=Recipient.HUDDLE,
|
2012-09-27 19:58:42 +02:00
|
|
|
type_id=target_huddle.id)
|
|
|
|
else:
|
|
|
|
raise
|
2012-10-03 21:05:48 +02:00
|
|
|
do_send_message(message, synced_from_mit=True, no_log=True)
|
2012-09-27 19:58:42 +02:00
|
|
|
|
|
|
|
|
2012-10-03 21:07:40 +02:00
|
|
|
# Create some test messages, including:
|
2012-10-10 23:17:43 +02:00
|
|
|
# - multiple streams
|
2012-10-11 00:01:39 +02:00
|
|
|
# - multiple subjects per stream
|
2012-09-14 18:31:11 +02:00
|
|
|
# - multiple huddles
|
|
|
|
# - multiple personals converastions
|
2012-10-11 00:01:39 +02:00
|
|
|
# - multiple messages per subject
|
2012-09-14 18:31:11 +02:00
|
|
|
# - both single and multi-line content
|
2012-10-03 21:07:40 +02:00
|
|
|
def send_messages(data):
|
2012-10-03 21:05:48 +02:00
|
|
|
(tot_messages, personals_pairs, options, output) = data
|
2012-09-14 18:31:11 +02:00
|
|
|
from django.db import connection
|
|
|
|
connection.close()
|
2012-10-03 21:07:40 +02:00
|
|
|
texts = file("zephyr/management/commands/test_messages.txt", "r").readlines()
|
2012-09-27 21:00:10 +02:00
|
|
|
offset = random.randint(0, len(texts))
|
2012-09-14 18:31:11 +02:00
|
|
|
|
2012-10-10 23:17:43 +02:00
|
|
|
recipient_streams = [klass.id for klass in
|
2012-10-10 22:57:21 +02:00
|
|
|
Recipient.objects.filter(type=Recipient.STREAM)]
|
2012-09-14 22:22:23 +02:00
|
|
|
recipient_huddles = [h.id for h in Recipient.objects.filter(type=Recipient.HUDDLE)]
|
2012-09-14 18:31:11 +02:00
|
|
|
|
|
|
|
huddle_members = {}
|
|
|
|
for h in recipient_huddles:
|
|
|
|
huddle_members[h] = [s.userprofile.id for s in
|
2012-09-14 22:22:23 +02:00
|
|
|
Subscription.objects.filter(recipient_id=h)]
|
2012-09-14 18:31:11 +02:00
|
|
|
|
2012-10-03 21:05:48 +02:00
|
|
|
num_messages = 0
|
2012-09-14 18:31:11 +02:00
|
|
|
random_max = 1000000
|
|
|
|
recipients = {}
|
2012-10-03 21:05:48 +02:00
|
|
|
while num_messages < tot_messages:
|
2012-09-14 18:31:11 +02:00
|
|
|
with transaction.commit_on_success():
|
|
|
|
saved_data = ''
|
2012-10-03 21:05:48 +02:00
|
|
|
message = Message()
|
2012-09-14 18:31:11 +02:00
|
|
|
length = random.randint(1, 5)
|
2012-09-26 20:41:54 +02:00
|
|
|
lines = (t.strip() for t in texts[offset: offset + length])
|
2012-10-03 21:05:48 +02:00
|
|
|
message.content = '\n'.join(lines)
|
2012-09-14 18:31:11 +02:00
|
|
|
offset += length
|
|
|
|
offset = offset % len(texts)
|
|
|
|
|
|
|
|
randkey = random.randint(1, random_max)
|
2012-10-03 21:05:48 +02:00
|
|
|
if (num_messages > 0 and
|
2012-09-14 18:31:11 +02:00
|
|
|
random.randint(1, random_max) * 100. / random_max < options["stickyness"]):
|
|
|
|
# Use an old recipient
|
2012-10-03 21:05:48 +02:00
|
|
|
message_type, recipient_id, saved_data = recipients[num_messages - 1]
|
|
|
|
if message_type == Recipient.PERSONAL:
|
2012-09-14 18:31:11 +02:00
|
|
|
personals_pair = saved_data
|
|
|
|
random.shuffle(personals_pair)
|
2012-10-10 22:57:21 +02:00
|
|
|
elif message_type == Recipient.STREAM:
|
2012-10-11 00:01:39 +02:00
|
|
|
message.subject = saved_data
|
2012-10-03 21:05:48 +02:00
|
|
|
message.recipient = get_recipient_by_id(recipient_id)
|
|
|
|
elif message_type == Recipient.HUDDLE:
|
|
|
|
message.recipient = get_recipient_by_id(recipient_id)
|
2012-09-14 18:31:11 +02:00
|
|
|
elif (randkey <= random_max * options["percent_huddles"] / 100.):
|
2012-10-03 21:05:48 +02:00
|
|
|
message_type = Recipient.HUDDLE
|
|
|
|
message.recipient = get_recipient_by_id(random.choice(recipient_huddles))
|
2012-09-14 18:31:11 +02:00
|
|
|
elif (randkey <= random_max * (options["percent_huddles"] + options["percent_personals"]) / 100.):
|
2012-10-03 21:05:48 +02:00
|
|
|
message_type = Recipient.PERSONAL
|
2012-09-14 18:31:11 +02:00
|
|
|
personals_pair = random.choice(personals_pairs)
|
|
|
|
random.shuffle(personals_pair)
|
|
|
|
elif (randkey <= random_max * 1.0):
|
2012-10-10 22:57:21 +02:00
|
|
|
message_type = Recipient.STREAM
|
2012-10-10 23:17:43 +02:00
|
|
|
message.recipient = get_recipient_by_id(random.choice(recipient_streams))
|
2012-10-03 21:05:48 +02:00
|
|
|
|
|
|
|
if message_type == Recipient.HUDDLE:
|
|
|
|
sender_id = random.choice(huddle_members[message.recipient.id])
|
|
|
|
message.sender = get_user_profile_by_id(sender_id)
|
|
|
|
elif message_type == Recipient.PERSONAL:
|
|
|
|
message.recipient = Recipient.objects.get(type=Recipient.PERSONAL,
|
2012-09-14 18:31:11 +02:00
|
|
|
type_id=personals_pair[0])
|
2012-10-03 21:05:48 +02:00
|
|
|
message.sender = get_user_profile_by_id(personals_pair[1])
|
2012-09-14 18:31:11 +02:00
|
|
|
saved_data = personals_pair
|
2012-10-10 22:57:21 +02:00
|
|
|
elif message_type == Recipient.STREAM:
|
2012-10-10 22:53:24 +02:00
|
|
|
stream = Stream.objects.get(id=message.recipient.type_id)
|
2012-10-10 23:17:43 +02:00
|
|
|
# Pick a random subscriber to the stream
|
2012-10-03 21:05:48 +02:00
|
|
|
message.sender = random.choice(Subscription.objects.filter(
|
|
|
|
recipient=message.recipient)).userprofile
|
2012-10-11 00:01:39 +02:00
|
|
|
message.subject = stream.name + str(random.randint(1, 3))
|
|
|
|
saved_data = message.subject
|
2012-09-14 18:31:11 +02:00
|
|
|
|
2012-10-03 21:05:48 +02:00
|
|
|
message.pub_date = datetime.datetime.utcnow().replace(tzinfo=utc)
|
|
|
|
do_send_message(message)
|
2012-09-14 18:31:11 +02:00
|
|
|
|
2012-10-03 21:05:48 +02:00
|
|
|
recipients[num_messages] = [message_type, message.recipient.id, saved_data]
|
|
|
|
num_messages += 1
|
|
|
|
return tot_messages
|