Extract Message.is_stream_message().

This sets us up to denormalize on to Message some notion of
whether a message is for a stream (without having to hit the
Recipient table).
This commit is contained in:
Steve Howell 2017-10-28 12:53:47 -07:00 committed by Tim Abbott
parent 8b012c6210
commit 8302689789
5 changed files with 27 additions and 17 deletions

View File

@ -1049,7 +1049,7 @@ def do_send_messages(messages_maybe_none):
)
message['mention_data'] = mention_data
if message['message'].recipient.type == Recipient.STREAM:
if message['message'].is_stream_message():
stream_id = message['message'].recipient.type_id
stream_topic = StreamTopicTarget(
stream_id=stream_id,
@ -1173,7 +1173,7 @@ def do_send_messages(messages_maybe_none):
for user_id in message['active_user_ids']
]
if message['message'].recipient.type == Recipient.STREAM:
if message['message'].is_stream_message():
# Note: This is where authorization for single-stream
# get_updates happens! We only attach stream data to the
# notify new_message request if it's a public stream,
@ -1283,7 +1283,7 @@ def create_user_messages(message, um_eligible_user_ids, long_term_idle_user_ids,
user_messages = []
for um in ums_to_create:
if (um.user_profile_id in long_term_idle_user_ids and
message.recipient.type == Recipient.STREAM and
message.is_stream_message() and
int(um.flags) == 0):
continue
user_messages.append(um)
@ -3289,7 +3289,7 @@ def do_update_message(user_profile, message, topic_name, propagate_mode,
} # type: Dict[str, Any]
changed_messages = [message]
if message.recipient.type == Recipient.STREAM:
if message.is_stream_message():
stream_id = message.recipient.type_id
event['stream_name'] = Stream.objects.get(id=stream_id).name
@ -3339,7 +3339,7 @@ def do_update_message(user_profile, message, topic_name, propagate_mode,
if Message.content_has_attachment(prev_content) or Message.content_has_attachment(message.content):
check_attachment_reference_change(prev_content, message)
if message.recipient.type == Recipient.STREAM:
if message.is_stream_message():
if topic_name is not None:
new_topic_name = topic_name
else:
@ -4073,7 +4073,7 @@ def do_claim_attachments(message):
path_id = attachment_url_to_path_id(url)
user_profile = message.sender
is_message_realm_public = False
if message.recipient.type == Recipient.STREAM:
if message.is_stream_message():
is_message_realm_public = Stream.objects.get(id=message.recipient.type_id).is_public()
if not validate_attachment_request(user_profile, path_id):

View File

@ -299,7 +299,7 @@ def do_send_missedmessage_events_reply_in_zulip(user_profile, missed_messages, m
'name': user_profile.full_name,
'messages': build_message_list(user_profile, missed_messages),
'message_count': message_count,
'mention': missed_messages[0].recipient.type == Recipient.STREAM,
'mention': missed_messages[0].is_stream_message(),
'unsubscribe_link': unsubscribe_link,
})
@ -419,7 +419,7 @@ def handle_missedmessage_emails(user_profile_id, missed_email_events):
for msg_list in messages_by_recipient_subject.values():
msg = min(msg_list, key=lambda msg: msg.pub_date)
if msg.recipient.type == Recipient.STREAM:
if msg.is_stream_message():
msg_list.extend(get_context_for_message(msg))
# Send an email per recipient subject pair

View File

@ -392,9 +392,9 @@ def get_alert_from_message(message):
return "New private group message from %s" % (sender_str,)
elif message.recipient.type == Recipient.PERSONAL and message.trigger == 'private_message':
return "New private message from %s" % (sender_str,)
elif message.recipient.type == Recipient.STREAM and message.trigger == 'mentioned':
elif message.is_stream_message() and message.trigger == 'mentioned':
return "New mention from %s" % (sender_str,)
elif (message.recipient.type == Recipient.STREAM and
elif (message.is_stream_message() and
(message.trigger == 'stream_push_notify' and message.stream_name)):
return "New stream message from %s in %s" % (sender_str, message.stream_name,)
else:
@ -481,7 +481,7 @@ def get_gcm_payload(user_profile, message):
'sender_avatar_url': absolute_avatar_url(message.sender),
}
if message.recipient.type == Recipient.STREAM:
if message.is_stream_message():
android_data['recipient_type'] = "stream"
android_data['stream'] = get_display_recipient(message.recipient)
android_data['topic'] = message.subject

View File

@ -1124,6 +1124,17 @@ class Message(AbstractMessage):
"""
return self.subject
def is_stream_message(self):
# type: () -> bool
'''
Find out whether a message is a stream message by
looking up its recipient.type. TODO: Make this
an easier operation by denormalizing the message
type onto Message, either explicity (message.type)
or implicitly (message.stream_id is not None).
'''
return self.recipient.type == Recipient.STREAM
def get_realm(self):
# type: () -> Realm
return self.sender.realm

View File

@ -586,8 +586,7 @@ class GetOldMessagesTest(ZulipTestCase):
[self.example_email("iago"), self.example_email("cordelia")],
)
personals = [m for m in get_user_messages(self.example_user('hamlet'))
if m.recipient.type == Recipient.PERSONAL or
m.recipient.type == Recipient.HUDDLE]
if not m.is_stream_message()]
for personal in personals:
emails = dr_emails(get_display_recipient(personal.recipient))
@ -675,7 +674,7 @@ class GetOldMessagesTest(ZulipTestCase):
self.subscribe(self.example_user("hamlet"), 'Scotland')
self.send_stream_message(self.example_email("hamlet"), "Scotland")
messages = get_user_messages(self.example_user('hamlet'))
stream_messages = [msg for msg in messages if msg.recipient.type == Recipient.STREAM]
stream_messages = [msg for msg in messages if msg.is_stream_message()]
stream_name = get_display_recipient(stream_messages[0].recipient)
stream_id = stream_messages[0].recipient.id
@ -712,7 +711,7 @@ class GetOldMessagesTest(ZulipTestCase):
subdomain="zephyr")
messages = get_user_messages(self.mit_user("starnine"))
stream_messages = [msg for msg in messages if msg.recipient.type == Recipient.STREAM]
stream_messages = [msg for msg in messages if msg.is_stream_message()]
self.assertEqual(len(result["messages"]), 2)
for i, message in enumerate(result["messages"]):
@ -751,7 +750,7 @@ class GetOldMessagesTest(ZulipTestCase):
subdomain="zephyr")
messages = get_user_messages(mit_user_profile)
stream_messages = [msg for msg in messages if msg.recipient.type == Recipient.STREAM]
stream_messages = [msg for msg in messages if msg.is_stream_message()]
self.assertEqual(len(result["messages"]), 5)
for i, message in enumerate(result["messages"]):
self.assertEqual(message["type"], "stream")
@ -793,7 +792,7 @@ class GetOldMessagesTest(ZulipTestCase):
subdomain="zephyr")
messages = get_user_messages(mit_user_profile)
stream_messages = [msg for msg in messages if msg.recipient.type == Recipient.STREAM]
stream_messages = [msg for msg in messages if msg.is_stream_message()]
self.assertEqual(len(result["messages"]), 7)
for i, message in enumerate(result["messages"]):
self.assertEqual(message["type"], "stream")