slack import: Fix issues with Slack empty files.

Fixes #9217.
This commit is contained in:
Tim Abbott 2018-04-25 10:18:32 -07:00
parent f5ec2639b7
commit ff9371d63c
2 changed files with 12 additions and 7 deletions

View File

@ -16,7 +16,7 @@ from django.conf import settings
from django.db import connection from django.db import connection
from django.utils.timezone import now as timezone_now from django.utils.timezone import now as timezone_now
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
from typing import Any, Dict, List, Tuple from typing import Any, Dict, List, Optional, Tuple
from zerver.forms import check_subdomain_available from zerver.forms import check_subdomain_available
from zerver.models import Reaction, RealmEmoji, Realm from zerver.models import Reaction, RealmEmoji, Realm
from zerver.lib.slack_message_conversion import convert_to_zulip_markdown, \ from zerver.lib.slack_message_conversion import convert_to_zulip_markdown, \
@ -817,12 +817,12 @@ def build_zerver_attachment(realm_id: int, message_id: int, attachment_id: int,
file_name=fileinfo['name']) file_name=fileinfo['name'])
zerver_attachment.append(attachment) zerver_attachment.append(attachment)
def get_message_sending_user(message: ZerverFieldsT) -> str: def get_message_sending_user(message: ZerverFieldsT) -> Optional[str]:
try: if 'user' in message:
user = message.get('user', message['file']['user']) return message['user']
except KeyError: if message.get('file'):
user = message.get('user') return message['file'].get('user')
return user return None
def build_zerver_usermessage(zerver_usermessage: List[ZerverFieldsT], usermessage_id: int, def build_zerver_usermessage(zerver_usermessage: List[ZerverFieldsT], usermessage_id: int,
zerver_subscription: List[ZerverFieldsT], recipient_id: int, zerver_subscription: List[ZerverFieldsT], recipient_id: int,

View File

@ -397,6 +397,11 @@ class SlackImporter(ZulipTestCase):
"ts": "1463868370.000008", "channel_name": "general"}, "ts": "1463868370.000008", "channel_name": "general"},
{"text": "test message 2", "user": "U061A5N1G", {"text": "test message 2", "user": "U061A5N1G",
"ts": "1433868549.000010", "channel_name": "general"}, "ts": "1433868549.000010", "channel_name": "general"},
# This message will be ignored since it has no user and file is None.
# See #9217 for the situation; likely file uploads on archived channels
{'upload': False, 'file': None, 'text': 'A file was shared',
'channel_name': 'general', 'type': 'message', 'ts': '1433868549.000011',
'subtype': 'file_share'},
{"text": "random test", "user": "U061A1R2R", {"text": "random test", "user": "U061A1R2R",
"ts": "1433868669.000012", "channel_name": "general"}] # type: List[Dict[str, Any]] "ts": "1433868669.000012", "channel_name": "general"}] # type: List[Dict[str, Any]]