import_data: Make sure converted DMs don't have topic name.

Previously, `build_message` sets a message's topic name to the given
topic name, regardless of whether the message was a direct message (DM)
or a group direct message (GDM).

This change adds the `is_private` parameter to `build_message`. If
`is_private` is `True`, the `topic_name` will be overridden to an empty
string (""). Consequently, this also updates the third-party importers
to pass this parameter when calling `build_message`.

Co-authored-by: Pieter CK <pieterceka123@gmail.com>
This commit is contained in:
Elsa Kihlberg Gawell
2024-11-08 09:36:37 +01:00
committed by Tim Abbott
parent 7d3b77e490
commit 845f0d40e1
7 changed files with 28 additions and 7 deletions

View File

@@ -487,7 +487,7 @@ def build_direct_message_group(direct_message_group_id: int, group_size: int) ->
def build_message(
*,
topic_name: str,
topic_name: str = "",
date_sent: float,
message_id: int,
content: str,
@@ -499,6 +499,7 @@ def build_message(
has_image: bool = False,
has_link: bool = False,
has_attachment: bool = True,
is_direct_message_type: bool,
) -> ZerverFieldsT:
# check and remove NULL Bytes if any.
content = normalize_body_for_import(content)
@@ -512,6 +513,8 @@ def build_message(
has_attachment=has_attachment,
has_link=has_link,
)
if is_direct_message_type:
topic_name = ""
zulip_message.set_topic_name(topic_name)
zulip_message_dict = model_to_dict(
zulip_message, exclude=["recipient", "sender", "sending_client"]

View File

@@ -445,12 +445,15 @@ def process_raw_message_batch(
date_sent = raw_message["date_sent"]
sender_user_id = raw_message["sender_id"]
if "channel_name" in raw_message:
is_direct_message_type = False
recipient_id = get_recipient_id_from_channel_name(raw_message["channel_name"])
elif "direct_message_group_members" in raw_message:
is_direct_message_type = True
recipient_id = get_recipient_id_from_direct_message_group_members(
raw_message["direct_message_group_members"]
)
elif "pm_members" in raw_message:
is_direct_message_type = True
members = raw_message["pm_members"]
member_ids = {user_id_mapper.get(member) for member in members}
pm_members[message_id] = member_ids
@@ -501,6 +504,7 @@ def process_raw_message_batch(
has_image=has_image,
has_link=has_link,
has_attachment=has_attachment,
is_direct_message_type=is_direct_message_type,
)
zerver_message.append(message)
build_reactions(

View File

@@ -552,6 +552,7 @@ def process_raw_message_batch(
has_image=has_image,
has_link=has_link,
has_attachment=has_attachment,
is_direct_message_type=is_pm_data,
)
zerver_message.append(message)
build_reactions(

View File

@@ -943,13 +943,13 @@ def channel_message_to_zerver_message(
rendered_content = None
if "channel_name" in message:
is_private = False
is_direct_message_type = False
recipient_id = slack_recipient_name_to_zulip_recipient_id[message["channel_name"]]
elif "mpim_name" in message:
is_private = True
is_direct_message_type = True
recipient_id = slack_recipient_name_to_zulip_recipient_id[message["mpim_name"]]
elif "pm_name" in message:
is_private = True
is_direct_message_type = True
sender = get_message_sending_user(message)
members = dm_members[message["pm_name"]]
if sender == members[0]:
@@ -1019,6 +1019,9 @@ def channel_message_to_zerver_message(
topic_name = f"{thread_date} Slack thread {count}"
thread_map[thread_ts_str] = topic_name
if is_direct_message_type:
topic_name = ""
zulip_message = build_message(
topic_name=topic_name,
date_sent=get_timestamp_from_message(message),
@@ -1028,10 +1031,11 @@ def channel_message_to_zerver_message(
user_id=slack_user_id_to_zulip_user_id[slack_user_id],
recipient_id=recipient_id,
realm_id=realm_id,
is_channel_message=not is_private,
is_channel_message=not is_direct_message_type,
has_image=has_image,
has_link=has_link,
has_attachment=has_attachment,
is_direct_message_type=is_direct_message_type,
)
zerver_message.append(zulip_message)
@@ -1041,7 +1045,7 @@ def channel_message_to_zerver_message(
recipient_id=recipient_id,
mentioned_user_ids=mentioned_user_ids,
message_id=message_id,
is_private=is_private,
is_private=is_direct_message_type,
long_term_idle=long_term_idle,
)
total_user_messages += num_created
@@ -1054,7 +1058,7 @@ def channel_message_to_zerver_message(
recipient_id=sender_recipient_id,
mentioned_user_ids=mentioned_user_ids,
message_id=message_id,
is_private=is_private,
is_private=is_direct_message_type,
long_term_idle=long_term_idle,
)
total_user_messages += num_created

View File

@@ -902,6 +902,7 @@ class MatterMostImporter(ZulipTestCase):
self.assertEqual(
group_direct_messages[0].content, "Who is going to Hogsmeade this weekend?\n\n"
)
self.assertEqual(group_direct_messages[0].topic_name(), "")
personal_messages = messages.filter(recipient__type=Recipient.PERSONAL).order_by(
"date_sent"
@@ -914,6 +915,7 @@ class MatterMostImporter(ZulipTestCase):
self.assertTrue(personal_messages[0].has_attachment)
self.assertTrue(personal_messages[0].has_image)
self.assertTrue(personal_messages[0].has_link)
self.assertEqual(personal_messages[0].topic_name(), "")
def test_do_convert_data_with_masking(self) -> None:
mattermost_data_dir = self.fixture_file_name("", "mattermost_fixtures")

View File

@@ -1055,6 +1055,7 @@ class RocketChatImporter(ZulipTestCase):
self.assertEqual(group_direct_messages[0].sender.email, "hermionegranger@email.com")
self.assertEqual(group_direct_messages[0].content, "Hey people!")
self.assertEqual(group_direct_messages[0].topic_name(), "")
self.assertEqual(group_direct_messages[2].sender.email, "harrypotter@email.com")
self.assertRegex(
group_direct_messages[2].content,
@@ -1075,6 +1076,7 @@ class RocketChatImporter(ZulipTestCase):
personal_messages[0].content,
"Hey @**Hermione Granger** :grin:, how's everything going?",
)
self.assertEqual(personal_messages[0].topic_name(), "")
self.verify_emoji_code_foreign_keys()

View File

@@ -1274,6 +1274,11 @@ class SlackImporter(ZulipTestCase):
self.assertEqual(zerver_message[5]["has_link"], False)
self.assertEqual(zerver_message[7]["has_link"], False)
# Test that topic_name is an empty string for direct messages and
# group direct messages.
self.assertEqual(zerver_message[6][EXPORT_TOPIC_NAME], "")
self.assertEqual(zerver_message[8][EXPORT_TOPIC_NAME], "")
self.assertEqual(zerver_message[3][EXPORT_TOPIC_NAME], "imported from Slack")
self.assertEqual(zerver_message[3]["content"], "/me added bot")
self.assertEqual(