slack import: Remove unnecessary zerver_realm_skeleton.json.

This was stored as a fixture file under zerver/fixtures, which caused
problems, since we don't show that directory under production (as its
part of the test system).

The simplest emergency fix here would be to just move the file, but
when looking at it, it's clear that we don't need or want a fixture
file here; we want a Python object, so we just do that.

A valuable follow-up improvement to this block would be to create an
actual new Realm object (not saved to the database), and dump it the
same code we use in the export tool; that should handle the vast
majority of these correctly.

Fixes #9123.
This commit is contained in:
Tim Abbott
2018-04-18 10:10:17 -07:00
parent c0096932a6
commit 86046ae9c3
3 changed files with 43 additions and 56 deletions

View File

@@ -1,35 +0,0 @@
[{
"message_retention_days": null,
"inline_image_preview": true,
"name_changes_disabled": false,
"icon_version": 1,
"waiting_period_threshold": 0,
"email_changes_disabled": false,
"deactivated": false,
"notifications_stream": null,
"restricted_to_domain": false,
"show_digest_email": true,
"allow_message_editing": true,
"description": "Organization imported from Slack!",
"default_language": "en",
"icon_source": "G",
"invite_required": false,
"invite_by_admins_only": false,
"create_stream_by_admins_only": false,
"mandatory_topics": false,
"inline_url_embed_preview": true,
"message_content_edit_limit_seconds": 600,
"authentication_methods": [
["Google", true],
["Email", true],
["GitHub", true],
["LDAP", true],
["Dev", true],
["RemoteUser", true]
],
"name": "",
"org_type": 1,
"add_emoji_by_admins_only": false,
"date_created": 0.0,
"id": 1
}]

View File

@@ -37,7 +37,7 @@ def rm_tree(path: str) -> None:
shutil.rmtree(path)
def slack_workspace_to_realm(domain_name: str, realm_id: int, user_list: List[ZerverFieldsT],
realm_subdomain: str, fixtures_path: str, slack_data_dir: str,
realm_subdomain: str, slack_data_dir: str,
custom_emoji_list: ZerverFieldsT)-> Tuple[ZerverFieldsT, AddedUsersT,
AddedRecipientsT,
AddedChannelsT,
@@ -54,7 +54,7 @@ def slack_workspace_to_realm(domain_name: str, realm_id: int, user_list: List[Ze
"""
NOW = float(timezone_now().timestamp())
zerver_realm = build_zerver_realm(fixtures_path, realm_id, realm_subdomain, NOW)
zerver_realm = build_zerver_realm(realm_id, realm_subdomain, NOW)
realm = dict(zerver_client=[{"name": "populate_db", "id": 1},
{"name": "website", "id": 2},
@@ -99,17 +99,44 @@ def slack_workspace_to_realm(domain_name: str, realm_id: int, user_list: List[Ze
return realm, added_users, added_recipient, added_channels, avatars, emoji_url_map
def build_zerver_realm(fixtures_path: str, realm_id: int, realm_subdomain: str,
def build_zerver_realm(realm_id: int, realm_subdomain: str,
time: float) -> List[ZerverFieldsT]:
zerver_realm_skeleton = get_data_file(fixtures_path + 'zerver_realm_skeleton.json')
zerver_realm_skeleton[0]['id'] = realm_id
zerver_realm_skeleton[0]['string_id'] = realm_subdomain # subdomain / short_name of realm
zerver_realm_skeleton[0]['name'] = realm_subdomain
zerver_realm_skeleton[0]['date_created'] = time
return zerver_realm_skeleton
return [{
"message_retention_days": None,
"inline_image_preview": True,
"name_changes_disabled": False,
"icon_version": 1,
"waiting_period_threshold": 0,
"email_changes_disabled": False,
"deactivated": False,
"notifications_stream": None,
"restricted_to_domain": False,
"show_digest_email": True,
"allow_message_editing": True,
"description": "Organization imported from Slack!",
"default_language": "en",
"icon_source": "G",
"invite_required": True,
"invite_by_admins_only": False,
"create_stream_by_admins_only": False,
"mandatory_topics": False,
"inline_url_embed_preview": True,
"message_content_edit_limit_seconds": 600,
"authentication_methods": [
["Google", True],
["Email", True],
["GitHub", True],
["LDAP", True],
["Dev", True],
["RemoteUser", True]
],
"name": realm_subdomain,
"string_id": realm_subdomain,
"org_type": 1,
"add_emoji_by_admins_only": False,
"id": realm_id,
"date_created": time,
}]
def build_realmemoji(custom_emoji_list: ZerverFieldsT,
realm_id: int) -> Tuple[List[ZerverFieldsT],
@@ -836,6 +863,7 @@ def build_zerver_usermessage(zerver_usermessage: List[ZerverFieldsT], usermessag
def do_convert_data(slack_zip_file: str, output_dir: str, token: str, threads: int=6) -> None:
# Subdomain is set by the user while running the import command
realm_subdomain = ""
realm_id = 0
domain_name = settings.EXTERNAL_HOST
slack_data_dir = slack_zip_file.replace('.zip', '')
@@ -851,11 +879,6 @@ def do_convert_data(slack_zip_file: str, output_dir: str, token: str, threads: i
# with zipfile.ZipFile(slack_zip_file, 'r') as zip_ref:
# zip_ref.extractall(slack_data_dir)
script_path = os.path.dirname(os.path.abspath(__file__)) + '/'
fixtures_path = script_path + '../fixtures/'
realm_id = 0
# We get the user data from the legacy token method of slack api, which is depreciated
# but we use it as the user email data is provided only in this method
user_list = get_slack_api_data(token, "https://slack.com/api/users.list", "members")
@@ -864,7 +887,7 @@ def do_convert_data(slack_zip_file: str, output_dir: str, token: str, threads: i
realm, added_users, added_recipient, added_channels, avatar_list, \
emoji_url_map = slack_workspace_to_realm(domain_name, realm_id, user_list,
realm_subdomain, fixtures_path,
realm_subdomain,
slack_data_dir, custom_emoji_list)
message_json, uploads_list, zerver_attachment = convert_slack_workspace_messages(

View File

@@ -92,11 +92,10 @@ class SlackImporter(ZulipTestCase):
self.assertEqual(invalid.exception.args, ('Something went wrong. Please try again!',),)
def test_build_zerver_realm(self) -> None:
fixtures_path = os.path.dirname(os.path.abspath(__file__)) + '/../fixtures/'
realm_id = 2
realm_subdomain = "test-realm"
time = float(timezone_now().timestamp())
test_realm = build_zerver_realm(fixtures_path, realm_id, realm_subdomain, time)
test_realm = build_zerver_realm(realm_id, realm_subdomain, time)
test_zerver_realm_dict = test_realm[0]
self.assertEqual(test_zerver_realm_dict['id'], realm_id)
@@ -323,7 +322,7 @@ class SlackImporter(ZulipTestCase):
realm_id = 1
user_list = [] # type: List[Dict[str, Any]]
realm, added_users, added_recipient, added_channels, avatar_list, em = slack_workspace_to_realm(
'testdomain', realm_id, user_list, 'test-realm', './fixtures', './random_path', {})
'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