mirror of
https://github.com/zulip/zulip.git
synced 2025-10-29 11:03:54 +00:00
slack: Rename added_users to slack_user_id_to_zulip_user_id.
This commit is contained in:
@@ -28,7 +28,7 @@ from zerver.lib.emoji import NAME_TO_CODEPOINT_PATH
|
||||
from urllib.parse import urlencode
|
||||
|
||||
# stubs
|
||||
AddedUsersT = Dict[str, int]
|
||||
SlackToZulipUserIDT = Dict[str, int]
|
||||
AddedChannelsT = Dict[str, Tuple[str, int]]
|
||||
AddedMPIMsT = Dict[str, Tuple[str, int]]
|
||||
DMMembersT = Dict[str, Tuple[str, str]]
|
||||
@@ -40,7 +40,8 @@ def rm_tree(path: str) -> None:
|
||||
|
||||
def slack_workspace_to_realm(domain_name: str, realm_id: int, user_list: List[ZerverFieldsT],
|
||||
realm_subdomain: str, slack_data_dir: str,
|
||||
custom_emoji_list: ZerverFieldsT) -> Tuple[ZerverFieldsT, AddedUsersT,
|
||||
custom_emoji_list: ZerverFieldsT) -> Tuple[ZerverFieldsT,
|
||||
SlackToZulipUserIDT,
|
||||
AddedRecipientsT,
|
||||
AddedChannelsT,
|
||||
AddedMPIMsT,
|
||||
@@ -50,7 +51,7 @@ def slack_workspace_to_realm(domain_name: str, realm_id: int, user_list: List[Ze
|
||||
"""
|
||||
Returns:
|
||||
1. realm, Converted Realm data
|
||||
2. added_users, which is a dictionary to map from slack user id to zulip user id
|
||||
2. slack_user_id_to_zulip_user_id, which is a dictionary to map from slack user id to zulip user id
|
||||
3. added_recipient, which is a dictionary to map from channel name to zulip recipient_id
|
||||
4. added_channels, which is a dictionary to map from channel name to channel id, zulip stream_id
|
||||
5. added_mpims, which is a dictionary to map from MPIM name to MPIM id, zulip huddle_id
|
||||
@@ -63,12 +64,12 @@ def slack_workspace_to_realm(domain_name: str, realm_id: int, user_list: List[Ze
|
||||
zerver_realm = build_zerver_realm(realm_id, realm_subdomain, NOW, 'Slack') # type: List[ZerverFieldsT]
|
||||
realm = build_realm(zerver_realm, realm_id, domain_name)
|
||||
|
||||
zerver_userprofile, avatars, added_users, zerver_customprofilefield, \
|
||||
zerver_userprofile, avatars, slack_user_id_to_zulip_user_id, zerver_customprofilefield, \
|
||||
zerver_customprofilefield_value = users_to_zerver_userprofile(slack_data_dir, user_list,
|
||||
realm_id, int(NOW), domain_name)
|
||||
realm, added_channels, added_mpims, dm_members, \
|
||||
added_recipient = channels_to_zerver_stream(slack_data_dir, realm_id, realm,
|
||||
added_users, zerver_userprofile)
|
||||
slack_user_id_to_zulip_user_id, zerver_userprofile)
|
||||
|
||||
zerver_realmemoji, emoji_url_map = build_realmemoji(custom_emoji_list, realm_id)
|
||||
realm['zerver_realmemoji'] = zerver_realmemoji
|
||||
@@ -81,7 +82,7 @@ def slack_workspace_to_realm(domain_name: str, realm_id: int, user_list: List[Ze
|
||||
realm['zerver_customprofilefield'] = zerver_customprofilefield
|
||||
realm['zerver_customprofilefieldvalue'] = zerver_customprofilefield_value
|
||||
|
||||
return realm, added_users, added_recipient, added_channels, added_mpims, \
|
||||
return realm, slack_user_id_to_zulip_user_id, added_recipient, added_channels, added_mpims, \
|
||||
dm_members, avatars, emoji_url_map
|
||||
|
||||
def build_realmemoji(custom_emoji_list: ZerverFieldsT,
|
||||
@@ -112,14 +113,14 @@ def build_realmemoji(custom_emoji_list: ZerverFieldsT,
|
||||
def users_to_zerver_userprofile(slack_data_dir: str, users: List[ZerverFieldsT], realm_id: int,
|
||||
timestamp: Any, domain_name: str) -> Tuple[List[ZerverFieldsT],
|
||||
List[ZerverFieldsT],
|
||||
AddedUsersT,
|
||||
SlackToZulipUserIDT,
|
||||
List[ZerverFieldsT],
|
||||
List[ZerverFieldsT]]:
|
||||
"""
|
||||
Returns:
|
||||
1. zerver_userprofile, which is a list of user profile
|
||||
2. avatar_list, which is list to map avatars to zulip avatard records.json
|
||||
3. added_users, which is a dictionary to map from slack user id to zulip
|
||||
3. slack_user_id_to_zulip_user_id, which is a dictionary to map from slack user id to zulip
|
||||
user id
|
||||
4. zerver_customprofilefield, which is a list of all custom profile fields
|
||||
5. zerver_customprofilefield_values, which is a list of user profile fields
|
||||
@@ -129,7 +130,7 @@ def users_to_zerver_userprofile(slack_data_dir: str, users: List[ZerverFieldsT],
|
||||
zerver_customprofilefield = [] # type: List[ZerverFieldsT]
|
||||
zerver_customprofilefield_values = [] # type: List[ZerverFieldsT]
|
||||
avatar_list = [] # type: List[ZerverFieldsT]
|
||||
added_users = {}
|
||||
slack_user_id_to_zulip_user_id = {}
|
||||
|
||||
# The user data we get from the slack api does not contain custom profile data
|
||||
# Hence we get it from the slack zip file
|
||||
@@ -205,7 +206,7 @@ def users_to_zerver_userprofile(slack_data_dir: str, users: List[ZerverFieldsT],
|
||||
userprofile_dict['realm'] = realm_id
|
||||
|
||||
zerver_userprofile.append(userprofile_dict)
|
||||
added_users[slack_user_id] = user_id
|
||||
slack_user_id_to_zulip_user_id[slack_user_id] = user_id
|
||||
if not user.get('is_primary_owner', False):
|
||||
user_id_count += 1
|
||||
|
||||
@@ -213,7 +214,7 @@ def users_to_zerver_userprofile(slack_data_dir: str, users: List[ZerverFieldsT],
|
||||
|
||||
process_customprofilefields(zerver_customprofilefield, zerver_customprofilefield_values)
|
||||
logging.info('######### IMPORTING USERS FINISHED #########\n')
|
||||
return zerver_userprofile, avatar_list, added_users, zerver_customprofilefield, \
|
||||
return zerver_userprofile, avatar_list, slack_user_id_to_zulip_user_id, zerver_customprofilefield, \
|
||||
zerver_customprofilefield_values
|
||||
|
||||
def build_customprofile_field(customprofile_field: List[ZerverFieldsT], fields: ZerverFieldsT,
|
||||
@@ -324,7 +325,8 @@ def get_user_timezone(user: ZerverFieldsT) -> str:
|
||||
return timezone
|
||||
|
||||
def channels_to_zerver_stream(slack_data_dir: str, realm_id: int,
|
||||
realm: Dict[str, Any], added_users: AddedUsersT,
|
||||
realm: Dict[str, Any],
|
||||
slack_user_id_to_zulip_user_id: SlackToZulipUserIDT,
|
||||
zerver_userprofile: List[ZerverFieldsT]) \
|
||||
-> Tuple[Dict[str, List[ZerverFieldsT]], AddedChannelsT, AddedMPIMsT, DMMembersT, AddedRecipientsT]:
|
||||
"""
|
||||
@@ -392,12 +394,13 @@ def channels_to_zerver_stream(slack_data_dir: str, realm_id: int,
|
||||
|
||||
# construct the subscription object and append it to realm["zerver_subscription"]
|
||||
subscription_id_count = get_subscription(channel['members'], realm["zerver_subscription"],
|
||||
recipient_id, added_users,
|
||||
recipient_id, slack_user_id_to_zulip_user_id,
|
||||
subscription_id_count)
|
||||
# TODO add realm["zerver_subscription"] which correspond to
|
||||
# huddles type recipient
|
||||
# For huddles:
|
||||
# sub['recipient']=recipient['id'] where recipient['type_id']=added_users[member]
|
||||
# sub['recipient']=recipient['id'] where
|
||||
# recipient['type_id']=slack_user_id_to_zulip_user_id[member]
|
||||
|
||||
stream_id_count += 1
|
||||
recipient_id_count += 1
|
||||
@@ -442,7 +445,7 @@ def channels_to_zerver_stream(slack_data_dir: str, realm_id: int,
|
||||
added_recipient[mpim['name']] = recipient_id_count
|
||||
|
||||
subscription_id_count = get_subscription(mpim['members'], realm["zerver_subscription"],
|
||||
recipient_id_count, added_users,
|
||||
recipient_id_count, slack_user_id_to_zulip_user_id,
|
||||
subscription_id_count)
|
||||
|
||||
huddle_id_count += 1
|
||||
@@ -455,7 +458,7 @@ def channels_to_zerver_stream(slack_data_dir: str, realm_id: int,
|
||||
mpims = []
|
||||
process_mpims(mpims)
|
||||
|
||||
for slack_user_id, zulip_user_id in added_users.items():
|
||||
for slack_user_id, zulip_user_id in slack_user_id_to_zulip_user_id.items():
|
||||
recipient = build_recipient(zulip_user_id, recipient_id_count, Recipient.PERSONAL)
|
||||
added_recipient[slack_user_id] = recipient_id_count
|
||||
sub = build_subscription(recipient_id_count, zulip_user_id, subscription_id_count)
|
||||
@@ -480,17 +483,19 @@ def channels_to_zerver_stream(slack_data_dir: str, realm_id: int,
|
||||
return realm, added_channels, added_mpims, dm_members, added_recipient
|
||||
|
||||
def get_subscription(channel_members: List[str], zerver_subscription: List[ZerverFieldsT],
|
||||
recipient_id: int, added_users: AddedUsersT,
|
||||
recipient_id: int, slack_user_id_to_zulip_user_id: SlackToZulipUserIDT,
|
||||
subscription_id: int) -> int:
|
||||
for member in channel_members:
|
||||
sub = build_subscription(recipient_id, added_users[member], subscription_id)
|
||||
for slack_user_id in channel_members:
|
||||
sub = build_subscription(recipient_id, slack_user_id_to_zulip_user_id[slack_user_id],
|
||||
subscription_id)
|
||||
# The recipient corresponds to a stream for stream-readable message.
|
||||
zerver_subscription.append(sub)
|
||||
subscription_id += 1
|
||||
return subscription_id
|
||||
|
||||
def process_long_term_idle_users(slack_data_dir: str, users: List[ZerverFieldsT],
|
||||
added_users: AddedUsersT, added_channels: AddedChannelsT,
|
||||
slack_user_id_to_zulip_user_id: SlackToZulipUserIDT,
|
||||
added_channels: AddedChannelsT,
|
||||
added_mpims: AddedMPIMsT, dm_members: DMMembersT,
|
||||
zerver_userprofile: List[ZerverFieldsT]) -> Set[int]:
|
||||
"""Algorithmically, we treat users who have sent at least 10 messages
|
||||
@@ -527,7 +532,7 @@ def process_long_term_idle_users(slack_data_dir: str, users: List[ZerverFieldsT]
|
||||
for slack_user in users:
|
||||
if slack_user["id"] in recent_senders:
|
||||
continue
|
||||
zulip_user_id = added_users[slack_user['id']]
|
||||
zulip_user_id = slack_user_id_to_zulip_user_id[slack_user['id']]
|
||||
long_term_idle.add(zulip_user_id)
|
||||
|
||||
# Record long-term idle status in zerver_userprofile
|
||||
@@ -542,7 +547,8 @@ def process_long_term_idle_users(slack_data_dir: str, users: List[ZerverFieldsT]
|
||||
return long_term_idle
|
||||
|
||||
def convert_slack_workspace_messages(slack_data_dir: str, users: List[ZerverFieldsT], realm_id: int,
|
||||
added_users: AddedUsersT, added_recipient: AddedRecipientsT,
|
||||
slack_user_id_to_zulip_user_id: SlackToZulipUserIDT,
|
||||
added_recipient: AddedRecipientsT,
|
||||
added_channels: AddedChannelsT,
|
||||
added_mpims: AddedMPIMsT,
|
||||
dm_members: DMMembersT,
|
||||
@@ -560,8 +566,9 @@ def convert_slack_workspace_messages(slack_data_dir: str, users: List[ZerverFiel
|
||||
3. attachment, which is a list of the attachments
|
||||
"""
|
||||
|
||||
long_term_idle = process_long_term_idle_users(slack_data_dir, users, added_users, added_channels,
|
||||
added_mpims, dm_members, zerver_userprofile)
|
||||
long_term_idle = process_long_term_idle_users(slack_data_dir, users, slack_user_id_to_zulip_user_id,
|
||||
added_channels, added_mpims, dm_members,
|
||||
zerver_userprofile)
|
||||
|
||||
# Now, we actually import the messages.
|
||||
all_messages = get_messages_iterator(slack_data_dir, added_channels, added_mpims, dm_members)
|
||||
@@ -591,7 +598,7 @@ def convert_slack_workspace_messages(slack_data_dir: str, users: List[ZerverFiel
|
||||
|
||||
zerver_message, zerver_usermessage, attachment, uploads, reactions = \
|
||||
channel_message_to_zerver_message(
|
||||
realm_id, users, added_users, added_recipient, message_data,
|
||||
realm_id, users, slack_user_id_to_zulip_user_id, added_recipient, message_data,
|
||||
zerver_realmemoji, subscriber_map, added_channels, dm_members,
|
||||
domain_name, long_term_idle)
|
||||
|
||||
@@ -651,7 +658,7 @@ def get_messages_iterator(slack_data_dir: str, added_channels: Dict[str, Any],
|
||||
|
||||
def channel_message_to_zerver_message(realm_id: int,
|
||||
users: List[ZerverFieldsT],
|
||||
added_users: AddedUsersT,
|
||||
slack_user_id_to_zulip_user_id: SlackToZulipUserIDT,
|
||||
added_recipient: AddedRecipientsT,
|
||||
all_messages: List[ZerverFieldsT],
|
||||
zerver_realmemoji: List[ZerverFieldsT],
|
||||
@@ -685,9 +692,9 @@ def channel_message_to_zerver_message(realm_id: int,
|
||||
total_user_messages = 0
|
||||
total_skipped_user_messages = 0
|
||||
for message in all_messages:
|
||||
user = get_message_sending_user(message)
|
||||
if not user:
|
||||
# Ignore messages without user names
|
||||
slack_user_id = get_message_sending_user(message)
|
||||
if not slack_user_id:
|
||||
# Ignore messages without slack_user_id
|
||||
# These are Sometimes produced by slack
|
||||
continue
|
||||
|
||||
@@ -705,7 +712,7 @@ def channel_message_to_zerver_message(realm_id: int,
|
||||
|
||||
try:
|
||||
content, mentioned_user_ids, has_link = convert_to_zulip_markdown(
|
||||
message['text'], users, added_channels, added_users)
|
||||
message['text'], users, added_channels, slack_user_id_to_zulip_user_id)
|
||||
except Exception:
|
||||
print("Slack message unexpectedly missing text representation:")
|
||||
print(ujson.dumps(message, indent=4))
|
||||
@@ -733,9 +740,8 @@ def channel_message_to_zerver_message(realm_id: int,
|
||||
|
||||
# Process message reactions
|
||||
if 'reactions' in message.keys():
|
||||
build_reactions(reaction_list, message['reactions'], added_users,
|
||||
message_id, name_to_codepoint,
|
||||
zerver_realmemoji)
|
||||
build_reactions(reaction_list, message['reactions'], slack_user_id_to_zulip_user_id,
|
||||
message_id, name_to_codepoint, zerver_realmemoji)
|
||||
|
||||
# Process different subtypes of slack messages
|
||||
|
||||
@@ -755,9 +761,9 @@ def channel_message_to_zerver_message(realm_id: int,
|
||||
domain_name=domain_name,
|
||||
realm_id=realm_id,
|
||||
message_id=message_id,
|
||||
user=user,
|
||||
slack_user_id=slack_user_id,
|
||||
users=users,
|
||||
added_users=added_users,
|
||||
slack_user_id_to_zulip_user_id=slack_user_id_to_zulip_user_id,
|
||||
zerver_attachment=zerver_attachment,
|
||||
uploads_list=uploads_list,
|
||||
)
|
||||
@@ -772,8 +778,8 @@ def channel_message_to_zerver_message(realm_id: int,
|
||||
topic_name = 'imported from slack'
|
||||
|
||||
zulip_message = build_message(topic_name, float(message['ts']), message_id, content,
|
||||
rendered_content, added_users[user], recipient_id,
|
||||
has_image, has_link, has_attachment)
|
||||
rendered_content, slack_user_id_to_zulip_user_id[slack_user_id],
|
||||
recipient_id, has_image, has_link, has_attachment)
|
||||
zerver_message.append(zulip_message)
|
||||
|
||||
# construct usermessages
|
||||
@@ -811,9 +817,9 @@ def process_message_files(message: ZerverFieldsT,
|
||||
domain_name: str,
|
||||
realm_id: int,
|
||||
message_id: int,
|
||||
user: str,
|
||||
slack_user_id: str,
|
||||
users: List[ZerverFieldsT],
|
||||
added_users: AddedUsersT,
|
||||
slack_user_id_to_zulip_user_id: SlackToZulipUserIDT,
|
||||
zerver_attachment: List[ZerverFieldsT],
|
||||
uploads_list: List[ZerverFieldsT]) -> Dict[str, Any]:
|
||||
has_attachment = False
|
||||
@@ -854,10 +860,10 @@ def process_message_files(message: ZerverFieldsT,
|
||||
markdown_links.append(content_for_link)
|
||||
|
||||
# construct attachments
|
||||
build_uploads(added_users[user], realm_id, file_user_email, fileinfo, s3_path,
|
||||
uploads_list)
|
||||
build_uploads(slack_user_id_to_zulip_user_id[slack_user_id], realm_id, file_user_email,
|
||||
fileinfo, s3_path, uploads_list)
|
||||
|
||||
build_attachment(realm_id, {message_id}, added_users[user],
|
||||
build_attachment(realm_id, {message_id}, slack_user_id_to_zulip_user_id[slack_user_id],
|
||||
fileinfo, s3_path, zerver_attachment)
|
||||
else:
|
||||
# For attachments with link not from slack
|
||||
@@ -896,7 +902,7 @@ def get_attachment_path_and_content(fileinfo: ZerverFieldsT, realm_id: int) -> T
|
||||
return s3_path, content
|
||||
|
||||
def build_reactions(reaction_list: List[ZerverFieldsT], reactions: List[ZerverFieldsT],
|
||||
added_users: AddedUsersT, message_id: int,
|
||||
slack_user_id_to_zulip_user_id: SlackToZulipUserIDT, message_id: int,
|
||||
name_to_codepoint: ZerverFieldsT,
|
||||
zerver_realmemoji: List[ZerverFieldsT]) -> None:
|
||||
realmemoji = {}
|
||||
@@ -918,7 +924,7 @@ def build_reactions(reaction_list: List[ZerverFieldsT], reactions: List[ZerverFi
|
||||
else:
|
||||
continue
|
||||
|
||||
for user in slack_reaction['users']:
|
||||
for slack_user_id in slack_reaction['users']:
|
||||
reaction_id = NEXT_ID('reaction')
|
||||
reaction = Reaction(
|
||||
id=reaction_id,
|
||||
@@ -929,7 +935,7 @@ def build_reactions(reaction_list: List[ZerverFieldsT], reactions: List[ZerverFi
|
||||
reaction_dict = model_to_dict(reaction,
|
||||
exclude=['message', 'user_profile'])
|
||||
reaction_dict['message'] = message_id
|
||||
reaction_dict['user_profile'] = added_users[user]
|
||||
reaction_dict['user_profile'] = slack_user_id_to_zulip_user_id[slack_user_id]
|
||||
|
||||
reaction_list.append(reaction_dict)
|
||||
|
||||
@@ -1019,14 +1025,15 @@ def do_convert_data(slack_zip_file: str, output_dir: str, token: str, threads: i
|
||||
# Get custom emoji from slack api
|
||||
custom_emoji_list = get_slack_api_data("https://slack.com/api/emoji.list", "emoji", token=token)
|
||||
|
||||
realm, added_users, added_recipient, added_channels, added_mpims, dm_members, avatar_list, \
|
||||
emoji_url_map = slack_workspace_to_realm(domain_name, realm_id, user_list,
|
||||
realm_subdomain,
|
||||
slack_data_dir, custom_emoji_list)
|
||||
realm, slack_user_id_to_zulip_user_id, added_recipient, added_channels, added_mpims, \
|
||||
dm_members, avatar_list, emoji_url_map = slack_workspace_to_realm(domain_name, realm_id, user_list,
|
||||
realm_subdomain, slack_data_dir,
|
||||
custom_emoji_list)
|
||||
|
||||
reactions, uploads_list, zerver_attachment = convert_slack_workspace_messages(
|
||||
slack_data_dir, user_list, realm_id, added_users, added_recipient, added_channels, added_mpims,
|
||||
dm_members, realm, realm['zerver_userprofile'], realm['zerver_realmemoji'], domain_name, output_dir)
|
||||
slack_data_dir, user_list, realm_id, slack_user_id_to_zulip_user_id,
|
||||
added_recipient, added_channels, added_mpims, dm_members, realm,
|
||||
realm['zerver_userprofile'], realm['zerver_realmemoji'], domain_name, output_dir)
|
||||
|
||||
# Move zerver_reactions to realm.json file
|
||||
realm['zerver_reaction'] = reactions
|
||||
|
||||
@@ -3,7 +3,7 @@ from typing import Any, Dict, Tuple, List, Optional
|
||||
|
||||
# stubs
|
||||
ZerverFieldsT = Dict[str, Any]
|
||||
AddedUsersT = Dict[str, int]
|
||||
SlackToZulipUserIDT = Dict[str, int]
|
||||
AddedChannelsT = Dict[str, Tuple[str, int]]
|
||||
|
||||
# Slack link can be in the format <http://www.foo.com|www.foo.com> and <http://foo.com/>
|
||||
@@ -67,7 +67,8 @@ def get_user_full_name(user: ZerverFieldsT) -> str:
|
||||
# Markdown mapping
|
||||
def convert_to_zulip_markdown(text: str, users: List[ZerverFieldsT],
|
||||
added_channels: AddedChannelsT,
|
||||
added_users: AddedUsersT) -> Tuple[str, List[int], bool]:
|
||||
slack_user_id_to_zulip_user_id: SlackToZulipUserIDT) -> \
|
||||
Tuple[str, List[int], bool]:
|
||||
mentioned_users_id = []
|
||||
text = convert_markdown_syntax(text, SLACK_BOLD_REGEX, "**")
|
||||
text = convert_markdown_syntax(text, SLACK_STRIKETHROUGH_REGEX, "~~")
|
||||
@@ -92,8 +93,8 @@ def convert_to_zulip_markdown(text: str, users: List[ZerverFieldsT],
|
||||
# Check user mentions and change mention format from
|
||||
# '<@slack_id|short_name>' to '@**full_name**'
|
||||
if (re.findall(SLACK_USERMENTION_REGEX, tokens[iterator], re.VERBOSE)):
|
||||
tokens[iterator], user_id = get_user_mentions(tokens[iterator],
|
||||
users, added_users)
|
||||
tokens[iterator], user_id = get_user_mentions(tokens[iterator], users,
|
||||
slack_user_id_to_zulip_user_id)
|
||||
if user_id is not None:
|
||||
mentioned_users_id.append(user_id)
|
||||
|
||||
@@ -112,7 +113,7 @@ def convert_to_zulip_markdown(text: str, users: List[ZerverFieldsT],
|
||||
return text, mentioned_users_id, message_has_link
|
||||
|
||||
def get_user_mentions(token: str, users: List[ZerverFieldsT],
|
||||
added_users: AddedUsersT) -> Tuple[str, Optional[int]]:
|
||||
slack_user_id_to_zulip_user_id: SlackToZulipUserIDT) -> Tuple[str, Optional[int]]:
|
||||
slack_usermention_match = re.search(SLACK_USERMENTION_REGEX, token, re.VERBOSE)
|
||||
assert slack_usermention_match is not None
|
||||
short_name = slack_usermention_match.group(4)
|
||||
@@ -121,7 +122,7 @@ def get_user_mentions(token: str, users: List[ZerverFieldsT],
|
||||
if (user['id'] == slack_id and user['name'] == short_name and short_name) or \
|
||||
(user['id'] == slack_id and short_name is None):
|
||||
full_name = get_user_full_name(user)
|
||||
user_id = added_users[slack_id]
|
||||
user_id = slack_user_id_to_zulip_user_id[slack_id]
|
||||
mention = "@**" + full_name + "**"
|
||||
token = re.sub(SLACK_USERMENTION_REGEX, mention, token, flags=re.VERBOSE)
|
||||
return token, user_id
|
||||
|
||||
@@ -237,11 +237,11 @@ class SlackImporter(ZulipTestCase):
|
||||
mock_get_data_file.return_value = user_data
|
||||
# As user with slack_id 'U0CBK5KAT' is the primary owner, that user should be imported first
|
||||
# and hence has zulip_id = 1
|
||||
test_added_users = {'U08RGD1RD': 1, 'U0CBK5KAT': 0, 'U09TYF5Sk': 2, 'UHSG7OPQN': 3}
|
||||
test_slack_user_id_to_zulip_user_id = {'U08RGD1RD': 1, 'U0CBK5KAT': 0, 'U09TYF5Sk': 2, 'UHSG7OPQN': 3}
|
||||
slack_data_dir = './random_path'
|
||||
timestamp = int(timezone_now().timestamp())
|
||||
mock_get_data_file.return_value = user_data
|
||||
zerver_userprofile, avatar_list, added_users, customprofilefield, \
|
||||
zerver_userprofile, avatar_list, slack_user_id_to_zulip_user_id, customprofilefield, \
|
||||
customprofilefield_value = users_to_zerver_userprofile(slack_data_dir, user_data, 1,
|
||||
timestamp, 'test_domain')
|
||||
|
||||
@@ -263,7 +263,7 @@ class SlackImporter(ZulipTestCase):
|
||||
self.assertEqual(customprofilefield_value[5]['value'], 'test_skype_name')
|
||||
|
||||
# test that the primary owner should always be imported first
|
||||
self.assertDictEqual(added_users, test_added_users)
|
||||
self.assertDictEqual(slack_user_id_to_zulip_user_id, test_slack_user_id_to_zulip_user_id)
|
||||
self.assertEqual(len(avatar_list), 4)
|
||||
|
||||
self.assertEqual(len(zerver_userprofile), 4)
|
||||
@@ -277,13 +277,13 @@ class SlackImporter(ZulipTestCase):
|
||||
self.assertEqual(zerver_userprofile[0]['email'], 'jon@gmail.com')
|
||||
self.assertEqual(zerver_userprofile[0]['full_name'], 'John Doe')
|
||||
|
||||
self.assertEqual(zerver_userprofile[1]['id'], test_added_users['U0CBK5KAT'])
|
||||
self.assertEqual(zerver_userprofile[1]['id'], test_slack_user_id_to_zulip_user_id['U0CBK5KAT'])
|
||||
self.assertEqual(zerver_userprofile[1]['is_realm_admin'], True)
|
||||
self.assertEqual(zerver_userprofile[1]['is_staff'], False)
|
||||
self.assertEqual(zerver_userprofile[1]['is_active'], True)
|
||||
self.assertEqual(zerver_userprofile[0]['is_mirror_dummy'], False)
|
||||
|
||||
self.assertEqual(zerver_userprofile[2]['id'], test_added_users['U09TYF5Sk'])
|
||||
self.assertEqual(zerver_userprofile[2]['id'], test_slack_user_id_to_zulip_user_id['U09TYF5Sk'])
|
||||
self.assertEqual(zerver_userprofile[2]['is_bot'], True)
|
||||
self.assertEqual(zerver_userprofile[2]['is_active'], True)
|
||||
self.assertEqual(zerver_userprofile[2]['is_mirror_dummy'], False)
|
||||
@@ -291,7 +291,7 @@ class SlackImporter(ZulipTestCase):
|
||||
self.assertEqual(zerver_userprofile[2]['bot_type'], 1)
|
||||
self.assertEqual(zerver_userprofile[2]['avatar_source'], 'U')
|
||||
|
||||
self.assertEqual(zerver_userprofile[3]['id'], test_added_users['UHSG7OPQN'])
|
||||
self.assertEqual(zerver_userprofile[3]['id'], test_slack_user_id_to_zulip_user_id['UHSG7OPQN'])
|
||||
self.assertEqual(zerver_userprofile[3]['is_realm_admin'], False)
|
||||
self.assertEqual(zerver_userprofile[3]['is_staff'], False)
|
||||
self.assertEqual(zerver_userprofile[3]['is_active'], False)
|
||||
@@ -331,32 +331,35 @@ class SlackImporter(ZulipTestCase):
|
||||
|
||||
def test_build_subscription(self) -> None:
|
||||
channel_members = ["U061A1R2R", "U061A3E0G", "U061A5N1G", "U064KUGRJ"]
|
||||
added_users = {"U061A1R2R": 1, "U061A3E0G": 8, "U061A5N1G": 7, "U064KUGRJ": 5}
|
||||
slack_user_id_to_zulip_user_id = {"U061A1R2R": 1, "U061A3E0G": 8, "U061A5N1G": 7, "U064KUGRJ": 5}
|
||||
subscription_id_count = 0
|
||||
recipient_id = 12
|
||||
zerver_subscription = [] # type: List[Dict[str, Any]]
|
||||
final_subscription_id = get_subscription(channel_members, zerver_subscription,
|
||||
recipient_id, added_users,
|
||||
recipient_id, slack_user_id_to_zulip_user_id,
|
||||
subscription_id_count)
|
||||
# sanity checks
|
||||
self.assertEqual(final_subscription_id, 4)
|
||||
self.assertEqual(zerver_subscription[0]['recipient'], 12)
|
||||
self.assertEqual(zerver_subscription[0]['id'], 0)
|
||||
self.assertEqual(zerver_subscription[0]['user_profile'], added_users[channel_members[0]])
|
||||
self.assertEqual(zerver_subscription[2]['user_profile'], added_users[channel_members[2]])
|
||||
self.assertEqual(zerver_subscription[0]['user_profile'],
|
||||
slack_user_id_to_zulip_user_id[channel_members[0]])
|
||||
self.assertEqual(zerver_subscription[2]['user_profile'],
|
||||
slack_user_id_to_zulip_user_id[channel_members[2]])
|
||||
self.assertEqual(zerver_subscription[3]['id'], 3)
|
||||
self.assertEqual(zerver_subscription[1]['recipient'],
|
||||
zerver_subscription[3]['recipient'])
|
||||
self.assertEqual(zerver_subscription[1]['pin_to_top'], False)
|
||||
|
||||
def test_channels_to_zerver_stream(self) -> None:
|
||||
added_users = {"U061A1R2R": 1, "U061A3E0G": 8, "U061A5N1G": 7, "U064KUGRJ": 5}
|
||||
slack_user_id_to_zulip_user_id = {"U061A1R2R": 1, "U061A3E0G": 8, "U061A5N1G": 7, "U064KUGRJ": 5}
|
||||
zerver_userprofile = [{'id': 1}, {'id': 8}, {'id': 7}, {'id': 5}]
|
||||
realm_id = 3
|
||||
|
||||
realm, added_channels, added_mpims, dm_members, \
|
||||
added_recipient = channels_to_zerver_stream(self.fixture_file_name("", "slack_fixtures"), realm_id,
|
||||
{"zerver_userpresence": []}, added_users, zerver_userprofile)
|
||||
{"zerver_userpresence": []}, slack_user_id_to_zulip_user_id,
|
||||
zerver_userprofile)
|
||||
|
||||
test_added_channels = {'sharedchannel': ("C061A0HJG", 3), 'general': ("C061A0YJG", 1),
|
||||
'general1': ("C061A0YJP", 2), 'random': ("C061A0WJG", 0)}
|
||||
@@ -365,7 +368,8 @@ class SlackImporter(ZulipTestCase):
|
||||
'mpdm-user4--user1--user5-1': ('G6N944JPL', 2)}
|
||||
test_dm_members = {'DJ47BL849': ('U061A1R2R', 'U061A5N1G'), 'DHX1UP7EG': ('U061A5N1G', 'U064KUGRJ'),
|
||||
'DK8HSJDHS': ('U061A1R2R', 'U064KUGRJ'), 'DRS3PSLDK': ('U064KUGRJ', 'U064KUGRJ')}
|
||||
test_added_recipient_keys = set(added_users.keys()) | set(test_added_channels.keys()) | set(test_added_mpims.keys())
|
||||
test_added_recipient_keys = set(slack_user_id_to_zulip_user_id.keys()) | set(test_added_channels.keys()) \
|
||||
| set(test_added_mpims.keys())
|
||||
|
||||
self.assertDictEqual(test_added_channels, added_channels)
|
||||
# zerver defaultstream already tested in helper functions
|
||||
@@ -376,7 +380,7 @@ class SlackImporter(ZulipTestCase):
|
||||
self.assertDictEqual(test_dm_members, dm_members)
|
||||
|
||||
# We can't do an assertDictEqual since during the construction of Personal
|
||||
# recipients, added_users are iterated in diffrent order in Python 3.5 and 3.6.
|
||||
# recipients, slack_user_id_to_zulip_user_id are iterated in diffrent order in Python 3.5 and 3.6.
|
||||
self.assertEqual(set(added_recipient.keys()), test_added_recipient_keys)
|
||||
self.assertEqual(set(added_recipient.values()), set(i for i in range(11)))
|
||||
|
||||
@@ -415,12 +419,14 @@ class SlackImporter(ZulipTestCase):
|
||||
|
||||
realm_id = 1
|
||||
user_list = [] # type: List[Dict[str, Any]]
|
||||
realm, added_users, added_recipient, added_channels, added_mpims, dm_members, avatar_list, em = slack_workspace_to_realm(
|
||||
'testdomain', realm_id, user_list, 'test-realm', './random_path', {})
|
||||
realm, slack_user_id_to_zulip_user_id, added_recipient, \
|
||||
added_channels, added_mpims, dm_members, \
|
||||
avatar_list, em = slack_workspace_to_realm('testdomain', realm_id, user_list, 'test-realm',
|
||||
'./random_path', {})
|
||||
test_zerver_realmdomain = [{'realm': realm_id, 'allow_subdomains': False,
|
||||
'domain': 'testdomain', 'id': realm_id}]
|
||||
# Functioning already tests in helper functions
|
||||
self.assertEqual(added_users, {})
|
||||
self.assertEqual(slack_user_id_to_zulip_user_id, {})
|
||||
self.assertEqual(added_channels, {})
|
||||
self.assertEqual(added_mpims, {})
|
||||
self.assertEqual(added_recipient, {})
|
||||
@@ -498,7 +504,7 @@ class SlackImporter(ZulipTestCase):
|
||||
{"id": "U061A5N1G", "name": "jane doe", "deleted": False, "real_name": "Jane"},
|
||||
{"id": "U061A1R2R", "name": "jon", "deleted": False, "real_name": "Jon"}]
|
||||
|
||||
added_users = {"U066MTL5U": 5, "U061A5N1G": 24, "U061A1R2R": 43}
|
||||
slack_user_id_to_zulip_user_id = {"U066MTL5U": 5, "U061A5N1G": 24, "U061A1R2R": 43}
|
||||
|
||||
reactions = [{"name": "grinning", "users": ["U061A5N1G"], "count": 1}]
|
||||
|
||||
@@ -543,7 +549,7 @@ class SlackImporter(ZulipTestCase):
|
||||
|
||||
zerver_message, zerver_usermessage, attachment, uploads, reaction = \
|
||||
channel_message_to_zerver_message(
|
||||
1, user_data, added_users, added_recipient,
|
||||
1, user_data, slack_user_id_to_zulip_user_id, added_recipient,
|
||||
all_messages, [], subscriber_map,
|
||||
added_channels, dm_members, 'domain', set())
|
||||
# functioning already tested in helper function
|
||||
@@ -726,9 +732,9 @@ class SlackImporter(ZulipTestCase):
|
||||
domain_name = 'example.com'
|
||||
realm_id = 5
|
||||
message_id = 99
|
||||
user = 'alice'
|
||||
slack_user_id = 'alice'
|
||||
users = [alice]
|
||||
added_users = {
|
||||
slack_user_id_to_zulip_user_id = {
|
||||
'alice': alice_id,
|
||||
}
|
||||
|
||||
@@ -740,9 +746,9 @@ class SlackImporter(ZulipTestCase):
|
||||
domain_name=domain_name,
|
||||
realm_id=realm_id,
|
||||
message_id=message_id,
|
||||
user=user,
|
||||
slack_user_id=slack_user_id,
|
||||
users=users,
|
||||
added_users=added_users,
|
||||
slack_user_id_to_zulip_user_id=slack_user_id_to_zulip_user_id,
|
||||
zerver_attachment=zerver_attachment,
|
||||
uploads_list=uploads_list,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user