Skip to content

Commit 42f231c

Browse files
garg3133timabbott
authored andcommitted
data_import: Ignore Rocket.Chat livechat streams/messages.
This resolves the issues reported in zulip#20108, major chunk of which were due to the incomplete support for importing the livechat streams/messages in the tool. So, it's best not to import any livechat streams/messages for now until a complete support for importing the same is developed.
1 parent 0cbf22f commit 42f231c

File tree

4 files changed

+56
-35
lines changed

4 files changed

+56
-35
lines changed

zerver/data_import/rocketchat.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,6 @@ def process_users(
137137
def get_stream_name(rc_channel: Dict[str, Any]) -> str:
138138
if rc_channel.get("teamMain"):
139139
return f'[TEAM] {rc_channel["name"]}'
140-
elif rc_channel.get("t") == "l":
141-
# Rocket.Chat livechat channels uses the `fname` field
142-
# to specify the channel name.
143-
return rc_channel["fname"]
144140
else:
145141
return rc_channel["name"]
146142

@@ -774,13 +770,15 @@ def map_upload_id_to_upload_data(
774770
return upload_id_to_upload_data_map
775771

776772

777-
def separate_channel_and_private_messages(
773+
def separate_channel_private_and_livechat_messages(
778774
messages: List[Dict[str, Any]],
779775
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]],
780776
direct_id_to_direct_map: Dict[str, Dict[str, Any]],
781777
huddle_id_to_huddle_map: Dict[str, Dict[str, Any]],
778+
livechat_id_to_livechat_map: Dict[str, Dict[str, Any]],
782779
channel_messages: List[Dict[str, Any]],
783780
private_messages: List[Dict[str, Any]],
781+
livechat_messages: List[Dict[str, Any]],
784782
) -> None:
785783
private_channels_list = list(direct_id_to_direct_map.keys()) + list(
786784
huddle_id_to_huddle_map.keys()
@@ -799,6 +797,8 @@ def separate_channel_and_private_messages(
799797
message["rid"] = parent_channel_id
800798
if message["rid"] in private_channels_list:
801799
private_messages.append(message)
800+
elif message["rid"] in livechat_id_to_livechat_map:
801+
livechat_messages.append(message)
802802
else:
803803
channel_messages.append(message)
804804

@@ -826,6 +826,7 @@ def categorize_channels_and_map_with_id(
826826
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]],
827827
direct_id_to_direct_map: Dict[str, Dict[str, Any]],
828828
huddle_id_to_huddle_map: Dict[str, Dict[str, Any]],
829+
livechat_id_to_livechat_map: Dict[str, Dict[str, Any]],
829830
) -> None:
830831
for channel in channel_data:
831832
if channel.get("prid"):
@@ -835,6 +836,8 @@ def categorize_channels_and_map_with_id(
835836
huddle_id_to_huddle_map[channel["_id"]] = channel
836837
else:
837838
direct_id_to_direct_map[channel["_id"]] = channel
839+
elif channel["t"] == "l":
840+
livechat_id_to_livechat_map[channel["_id"]] = channel
838841
else:
839842
room_id_to_room_map[channel["_id"]] = channel
840843
if channel.get("teamMain"):
@@ -959,6 +962,7 @@ def do_convert_data(rocketchat_data_dir: str, output_dir: str) -> None:
959962
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]] = {}
960963
direct_id_to_direct_map: Dict[str, Dict[str, Any]] = {}
961964
huddle_id_to_huddle_map: Dict[str, Dict[str, Any]] = {}
965+
livechat_id_to_livechat_map: Dict[str, Dict[str, Any]] = {}
962966

963967
categorize_channels_and_map_with_id(
964968
channel_data=rocketchat_data["room"],
@@ -967,6 +971,7 @@ def do_convert_data(rocketchat_data_dir: str, output_dir: str) -> None:
967971
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
968972
direct_id_to_direct_map=direct_id_to_direct_map,
969973
huddle_id_to_huddle_map=huddle_id_to_huddle_map,
974+
livechat_id_to_livechat_map=livechat_id_to_livechat_map,
970975
)
971976

972977
zerver_stream = convert_channel_data(
@@ -1047,14 +1052,17 @@ def do_convert_data(rocketchat_data_dir: str, output_dir: str) -> None:
10471052

10481053
channel_messages: List[Dict[str, Any]] = []
10491054
private_messages: List[Dict[str, Any]] = []
1055+
livechat_messages: List[Dict[str, Any]] = []
10501056

1051-
separate_channel_and_private_messages(
1057+
separate_channel_private_and_livechat_messages(
10521058
messages=rocketchat_data["message"],
10531059
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
10541060
direct_id_to_direct_map=direct_id_to_direct_map,
10551061
huddle_id_to_huddle_map=huddle_id_to_huddle_map,
1062+
livechat_id_to_livechat_map=livechat_id_to_livechat_map,
10561063
channel_messages=channel_messages,
10571064
private_messages=private_messages,
1065+
livechat_messages=livechat_messages,
10581066
)
10591067

10601068
total_reactions: List[ZerverFieldsT] = []
Binary file not shown.
Binary file not shown.

zerver/tests/test_rocketchat_importer.py

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
process_message_attachment,
2121
process_users,
2222
rocketchat_data_to_dict,
23-
separate_channel_and_private_messages,
23+
separate_channel_private_and_livechat_messages,
2424
)
2525
from zerver.data_import.sequencer import IdMapper
2626
from zerver.data_import.user_handler import UserHandler
@@ -40,11 +40,11 @@ def test_rocketchat_data_to_dict(self) -> None:
4040
self.assertEqual(rocketchat_data["user"][2]["username"], "harry.potter")
4141
self.assert_length(rocketchat_data["user"][2]["__rooms"], 10)
4242

43-
self.assert_length(rocketchat_data["room"], 14)
43+
self.assert_length(rocketchat_data["room"], 16)
4444
self.assertEqual(rocketchat_data["room"][0]["_id"], "GENERAL")
4545
self.assertEqual(rocketchat_data["room"][0]["name"], "general")
4646

47-
self.assert_length(rocketchat_data["message"], 73)
47+
self.assert_length(rocketchat_data["message"], 87)
4848
self.assertEqual(rocketchat_data["message"][1]["msg"], "Hey everyone, how's it going??")
4949
self.assertEqual(rocketchat_data["message"][1]["rid"], "GENERAL")
5050
self.assertEqual(rocketchat_data["message"][1]["u"]["username"], "priyansh3133")
@@ -186,6 +186,7 @@ def test_categorize_channels_and_map_with_id(self) -> None:
186186
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]] = {}
187187
direct_id_to_direct_map: Dict[str, Dict[str, Any]] = {}
188188
huddle_id_to_huddle_map: Dict[str, Dict[str, Any]] = {}
189+
livechat_id_to_livechat_map: Dict[str, Dict[str, Any]] = {}
189190

190191
categorize_channels_and_map_with_id(
191192
channel_data=rocketchat_data["room"],
@@ -194,15 +195,17 @@ def test_categorize_channels_and_map_with_id(self) -> None:
194195
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
195196
direct_id_to_direct_map=direct_id_to_direct_map,
196197
huddle_id_to_huddle_map=huddle_id_to_huddle_map,
198+
livechat_id_to_livechat_map=livechat_id_to_livechat_map,
197199
)
198200

199-
self.assert_length(rocketchat_data["room"], 14)
201+
self.assert_length(rocketchat_data["room"], 16)
200202
# Teams are a subset of rooms.
201203
self.assert_length(room_id_to_room_map, 6)
202204
self.assert_length(team_id_to_team_map, 1)
203205
self.assert_length(dsc_id_to_dsc_map, 5)
204206
self.assert_length(direct_id_to_direct_map, 2)
205207
self.assert_length(huddle_id_to_huddle_map, 1)
208+
self.assert_length(livechat_id_to_livechat_map, 2)
206209

207210
room_id = rocketchat_data["room"][0]["_id"]
208211
self.assertIn(room_id, room_id_to_room_map)
@@ -224,6 +227,10 @@ def test_categorize_channels_and_map_with_id(self) -> None:
224227
self.assertIn(huddle_id, huddle_id_to_huddle_map)
225228
self.assertEqual(huddle_id_to_huddle_map[huddle_id], rocketchat_data["room"][12])
226229

230+
livechat_id = rocketchat_data["room"][14]["_id"]
231+
self.assertIn(livechat_id, livechat_id_to_livechat_map)
232+
self.assertEqual(livechat_id_to_livechat_map[livechat_id], rocketchat_data["room"][14])
233+
227234
def test_convert_channel_data(self) -> None:
228235
fixture_dir_name = self.fixture_file_name("", "rocketchat_fixtures")
229236
rocketchat_data = rocketchat_data_to_dict(fixture_dir_name)
@@ -236,6 +243,7 @@ def test_convert_channel_data(self) -> None:
236243
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]] = {}
237244
direct_id_to_direct_map: Dict[str, Dict[str, Any]] = {}
238245
huddle_id_to_huddle_map: Dict[str, Dict[str, Any]] = {}
246+
livechat_id_to_livechat_map: Dict[str, Dict[str, Any]] = {}
239247

240248
categorize_channels_and_map_with_id(
241249
channel_data=rocketchat_data["room"],
@@ -244,16 +252,9 @@ def test_convert_channel_data(self) -> None:
244252
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
245253
direct_id_to_direct_map=direct_id_to_direct_map,
246254
huddle_id_to_huddle_map=huddle_id_to_huddle_map,
255+
livechat_id_to_livechat_map=livechat_id_to_livechat_map,
247256
)
248257

249-
# Add a dummy livechat channel
250-
room_id_to_room_map["2t6Lyzd2KAD3nS8Ch"] = {
251-
"_id": "2t6Lyzd2KAD3nS8Ch",
252-
"fname": "guest",
253-
"t": "l",
254-
"ts": datetime.datetime(2019, 11, 6, 0, 38, 42, 796000),
255-
}
256-
257258
zerver_stream = convert_channel_data(
258259
room_id_to_room_map=room_id_to_room_map,
259260
team_id_to_team_map=team_id_to_team_map,
@@ -262,8 +263,8 @@ def test_convert_channel_data(self) -> None:
262263
)
263264

264265
# Only rooms are converted to streams.
265-
self.assert_length(room_id_to_room_map, 7)
266-
self.assert_length(zerver_stream, 7)
266+
self.assert_length(room_id_to_room_map, 6)
267+
self.assert_length(zerver_stream, 6)
267268

268269
# Normal public stream
269270
self.assertEqual(zerver_stream[0]["name"], "general")
@@ -299,14 +300,6 @@ def test_convert_channel_data(self) -> None:
299300
self.assertEqual(zerver_stream[5]["stream_post_policy"], 1)
300301
self.assertEqual(zerver_stream[5]["realm"], realm_id)
301302

302-
# Livechat channel
303-
self.assertEqual(zerver_stream[6]["name"], "guest")
304-
self.assertEqual(zerver_stream[6]["invite_only"], False)
305-
self.assertEqual(zerver_stream[6]["description"], "")
306-
self.assertEqual(zerver_stream[6]["rendered_description"], "")
307-
self.assertEqual(zerver_stream[6]["stream_post_policy"], 1)
308-
self.assertEqual(zerver_stream[6]["realm"], realm_id)
309-
310303
def test_convert_stream_subscription_data(self) -> None:
311304
fixture_dir_name = self.fixture_file_name("", "rocketchat_fixtures")
312305
rocketchat_data = rocketchat_data_to_dict(fixture_dir_name)
@@ -334,6 +327,7 @@ def test_convert_stream_subscription_data(self) -> None:
334327
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]] = {}
335328
direct_id_to_direct_map: Dict[str, Dict[str, Any]] = {}
336329
huddle_id_to_huddle_map: Dict[str, Dict[str, Any]] = {}
330+
livechat_id_to_livechat_map: Dict[str, Dict[str, Any]] = {}
337331

338332
categorize_channels_and_map_with_id(
339333
channel_data=rocketchat_data["room"],
@@ -342,6 +336,7 @@ def test_convert_stream_subscription_data(self) -> None:
342336
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
343337
direct_id_to_direct_map=direct_id_to_direct_map,
344338
huddle_id_to_huddle_map=huddle_id_to_huddle_map,
339+
livechat_id_to_livechat_map=livechat_id_to_livechat_map,
345340
)
346341

347342
zerver_stream = convert_channel_data(
@@ -438,6 +433,7 @@ def test_convert_huddle_data(self) -> None:
438433
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]] = {}
439434
direct_id_to_direct_map: Dict[str, Dict[str, Any]] = {}
440435
huddle_id_to_huddle_map: Dict[str, Dict[str, Any]] = {}
436+
livechat_id_to_livechat_map: Dict[str, Dict[str, Any]] = {}
441437

442438
categorize_channels_and_map_with_id(
443439
channel_data=rocketchat_data["room"],
@@ -446,6 +442,7 @@ def test_convert_huddle_data(self) -> None:
446442
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
447443
direct_id_to_direct_map=direct_id_to_direct_map,
448444
huddle_id_to_huddle_map=huddle_id_to_huddle_map,
445+
livechat_id_to_livechat_map=livechat_id_to_livechat_map,
449446
)
450447

451448
zerver_huddle = convert_huddle_data(
@@ -536,6 +533,7 @@ def test_map_receiver_id_to_recipient_id(self) -> None:
536533
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]] = {}
537534
direct_id_to_direct_map: Dict[str, Dict[str, Any]] = {}
538535
huddle_id_to_huddle_map: Dict[str, Dict[str, Any]] = {}
536+
livechat_id_to_livechat_map: Dict[str, Dict[str, Any]] = {}
539537

540538
categorize_channels_and_map_with_id(
541539
channel_data=rocketchat_data["room"],
@@ -544,6 +542,7 @@ def test_map_receiver_id_to_recipient_id(self) -> None:
544542
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
545543
direct_id_to_direct_map=direct_id_to_direct_map,
546544
huddle_id_to_huddle_map=huddle_id_to_huddle_map,
545+
livechat_id_to_livechat_map=livechat_id_to_livechat_map,
547546
)
548547

549548
zerver_stream = convert_channel_data(
@@ -604,7 +603,7 @@ def test_map_receiver_id_to_recipient_id(self) -> None:
604603
huddle_id_to_recipient_id[zerver_recipient[12]["type_id"]], zerver_recipient[12]["id"]
605604
)
606605

607-
def test_separate_channel_and_private_messages(self) -> None:
606+
def test_separate_channel_private_and_livechat_messages(self) -> None:
608607
fixture_dir_name = self.fixture_file_name("", "rocketchat_fixtures")
609608
rocketchat_data = rocketchat_data_to_dict(fixture_dir_name)
610609

@@ -613,6 +612,7 @@ def test_separate_channel_and_private_messages(self) -> None:
613612
dsc_id_to_dsc_map: Dict[str, Dict[str, Any]] = {}
614613
direct_id_to_direct_map: Dict[str, Dict[str, Any]] = {}
615614
huddle_id_to_huddle_map: Dict[str, Dict[str, Any]] = {}
615+
livechat_id_to_livechat_map: Dict[str, Dict[str, Any]] = {}
616616

617617
categorize_channels_and_map_with_id(
618618
channel_data=rocketchat_data["room"],
@@ -621,23 +621,28 @@ def test_separate_channel_and_private_messages(self) -> None:
621621
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
622622
direct_id_to_direct_map=direct_id_to_direct_map,
623623
huddle_id_to_huddle_map=huddle_id_to_huddle_map,
624+
livechat_id_to_livechat_map=livechat_id_to_livechat_map,
624625
)
625626

626627
channel_messages: List[Dict[str, Any]] = []
627628
private_messages: List[Dict[str, Any]] = []
629+
livechat_messages: List[Dict[str, Any]] = []
628630

629-
separate_channel_and_private_messages(
631+
separate_channel_private_and_livechat_messages(
630632
messages=rocketchat_data["message"],
631633
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
632634
direct_id_to_direct_map=direct_id_to_direct_map,
633635
huddle_id_to_huddle_map=huddle_id_to_huddle_map,
636+
livechat_id_to_livechat_map=livechat_id_to_livechat_map,
634637
channel_messages=channel_messages,
635638
private_messages=private_messages,
639+
livechat_messages=livechat_messages,
636640
)
637641

638-
self.assert_length(rocketchat_data["message"], 73)
639-
self.assert_length(channel_messages, 62)
642+
self.assert_length(rocketchat_data["message"], 87)
643+
self.assert_length(channel_messages, 68)
640644
self.assert_length(private_messages, 11)
645+
self.assert_length(livechat_messages, 8)
641646

642647
self.assertIn(rocketchat_data["message"][0], channel_messages)
643648
self.assertIn(rocketchat_data["message"][1], channel_messages)
@@ -647,6 +652,10 @@ def test_separate_channel_and_private_messages(self) -> None:
647652
self.assertIn(rocketchat_data["message"][12], private_messages)
648653
self.assertIn(rocketchat_data["message"][50], private_messages) # Huddle message
649654

655+
self.assertIn(rocketchat_data["message"][79], livechat_messages)
656+
self.assertIn(rocketchat_data["message"][83], livechat_messages)
657+
self.assertIn(rocketchat_data["message"][86], livechat_messages)
658+
650659
# Message in a Discussion originating from a direct channel
651660
self.assertIn(rocketchat_data["message"][70], private_messages)
652661
self.assertIn(rocketchat_data["message"][70]["rid"], direct_id_to_direct_map)
@@ -677,19 +686,23 @@ def test_separate_channel_and_private_messages(self) -> None:
677686

678687
channel_messages = []
679688
private_messages = []
689+
livechat_messages = []
680690

681-
separate_channel_and_private_messages(
691+
separate_channel_private_and_livechat_messages(
682692
messages=rocketchat_data["message"],
683693
dsc_id_to_dsc_map=dsc_id_to_dsc_map,
684694
direct_id_to_direct_map=direct_id_to_direct_map,
685695
huddle_id_to_huddle_map=huddle_id_to_huddle_map,
696+
livechat_id_to_livechat_map=livechat_id_to_livechat_map,
686697
channel_messages=channel_messages,
687698
private_messages=private_messages,
699+
livechat_messages=livechat_messages,
688700
)
689701

690-
# No new message added to channel or private messages
691-
self.assert_length(channel_messages, 62)
702+
# No new message added to channel, private or livechat messages
703+
self.assert_length(channel_messages, 68)
692704
self.assert_length(private_messages, 11)
705+
self.assert_length(livechat_messages, 8)
693706

694707
def test_map_upload_id_to_upload_data(self) -> None:
695708
fixture_dir_name = self.fixture_file_name("", "rocketchat_fixtures")

0 commit comments

Comments
 (0)