diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index fd3021005e..f0036d7e43 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -356,6 +356,7 @@ def notify_created_user(user_profile): user_id=user_profile.id, is_admin=user_profile.is_realm_admin, full_name=user_profile.full_name, + avatar_url=avatar_url(user_profile), is_bot=user_profile.is_bot)) send_event(event, active_user_ids(user_profile.realm)) @@ -1915,17 +1916,17 @@ def do_change_avatar_fields(user_profile, avatar_source, log=True): avatar_url=avatar_url(user_profile), )), bot_owner_userids(user_profile)) - else: - payload = dict( - email=user_profile.email, - avatar_url=avatar_url(user_profile), - user_id=user_profile.id - ) - send_event(dict(type='realm_user', - op='update', - person=payload), - active_user_ids(user_profile.realm)) + payload = dict( + email=user_profile.email, + avatar_url=avatar_url(user_profile), + user_id=user_profile.id + ) + + send_event(dict(type='realm_user', + op='update', + person=payload), + active_user_ids(user_profile.realm)) def _default_stream_permision_check(user_profile, stream): # type: (UserProfile, Optional[Stream]) -> None diff --git a/zerver/lib/cache.py b/zerver/lib/cache.py index c70f7c66c8..7a34f16995 100644 --- a/zerver/lib/cache.py +++ b/zerver/lib/cache.py @@ -313,7 +313,11 @@ def user_profile_by_id_cache_key(user_profile_id): # TODO: Refactor these cache helpers into another file that can import # models.py so that python v3 style type annotations can also work. -active_user_dict_fields = ['id', 'full_name', 'short_name', 'email', 'is_realm_admin', 'is_bot'] # type: List[str] +active_user_dict_fields = [ + 'id', 'full_name', 'short_name', 'email', + 'avatar_source', 'avatar_version', + 'is_realm_admin', 'is_bot'] # type: List[str] + def active_user_dicts_in_realm_cache_key(realm): # type: (Realm) -> Text return u"active_user_dicts_in_realm:%s" % (realm.id,) diff --git a/zerver/lib/events.py b/zerver/lib/events.py index efc1874950..a3b3cd7079 100644 --- a/zerver/lib/events.py +++ b/zerver/lib/events.py @@ -19,6 +19,7 @@ session_engine = import_module(settings.SESSION_ENGINE) from zerver.lib.alert_words import user_alert_words from zerver.lib.attachments import user_attachments +from zerver.lib.avatar import get_avatar_url from zerver.lib.narrow import check_supported_events_narrow_filter from zerver.lib.request import JsonableError from zerver.lib.actions import validate_user_access_to_subscribers_helper, \ @@ -32,8 +33,16 @@ from zerver.models import Client, Message, UserProfile, \ def get_realm_user_dicts(user_profile): # type: (UserProfile) -> List[Dict[str, Text]] + def avatar_url(userdict): + # type: (Dict[str, Any]) -> Text + return get_avatar_url(userdict['avatar_source'], + userdict['email'], + userdict['avatar_version'], + ) + return [{'email': userdict['email'], 'user_id': userdict['id'], + 'avatar_url': avatar_url(userdict), 'is_admin': userdict['is_realm_admin'], 'is_bot': userdict['is_bot'], 'full_name': userdict['full_name']} @@ -187,12 +196,6 @@ def apply_event(state, event, user_profile, include_subscribers): if not p['is_admin'] and person['is_admin']: state['realm_bots'] = get_owned_bot_dicts(user_profile) - # This is temporary code to support tests, but it does avoid polluting - # our data with misleading avatar_url data (although we will soon support - # that field in realm_users). - if 'avatar_url' in person: - return - # Now update the person p.update(person) elif event['type'] == 'realm_bot': diff --git a/zerver/tests/test_events.py b/zerver/tests/test_events.py index 8b3a205dc6..63c80a391b 100644 --- a/zerver/tests/test_events.py +++ b/zerver/tests/test_events.py @@ -495,7 +495,6 @@ class EventsRegisterTest(ZulipTestCase): ]) events = self.do_test( lambda: do_change_avatar_fields(self.user_profile, UserProfile.AVATAR_FROM_USER), - state_change_expected=False, ) error = schema_checker('events[0]', events[0]) self.assert_on_error(error)