mirror of
https://github.com/zulip/zulip.git
synced 2025-11-15 03:11:54 +00:00
Use client_gratavar=True for users on in page_params.
This change affects realm_users and realm_non_active_users. Note that we still send full avatar urls in realm_user/add events, so apply_events has to do something mildly hacky to turn the avatar_url to None in that case. Fixing the event is probably not worth the trouble, as single urls are not bandwidth hogs; we only need this optimization for bulk data.
This commit is contained in:
@@ -15,7 +15,7 @@ session_engine = import_module(settings.SESSION_ENGINE)
|
|||||||
|
|
||||||
from zerver.lib.alert_words import user_alert_words
|
from zerver.lib.alert_words import user_alert_words
|
||||||
from zerver.lib.attachments import user_attachments
|
from zerver.lib.attachments import user_attachments
|
||||||
from zerver.lib.avatar import avatar_url, avatar_url_from_dict
|
from zerver.lib.avatar import avatar_url, get_avatar_field
|
||||||
from zerver.lib.hotspots import get_next_hotspots
|
from zerver.lib.hotspots import get_next_hotspots
|
||||||
from zerver.lib.integrations import EMBEDDED_BOTS
|
from zerver.lib.integrations import EMBEDDED_BOTS
|
||||||
from zerver.lib.message import (
|
from zerver.lib.message import (
|
||||||
@@ -44,13 +44,22 @@ from zproject.backends import email_auth_enabled, password_auth_enabled
|
|||||||
from version import ZULIP_VERSION
|
from version import ZULIP_VERSION
|
||||||
|
|
||||||
|
|
||||||
def get_raw_user_data(realm_id):
|
def get_raw_user_data(realm_id, client_gravatar):
|
||||||
# type: (int) -> Dict[int, Dict[str, Text]]
|
# type: (int, bool) -> Dict[int, Dict[str, Text]]
|
||||||
user_dicts = get_realm_user_dicts(realm_id)
|
user_dicts = get_realm_user_dicts(realm_id)
|
||||||
|
|
||||||
def user_data(row):
|
def user_data(row):
|
||||||
# type: (Dict[str, Any]) -> Dict[str, Any]
|
# type: (Dict[str, Any]) -> Dict[str, Any]
|
||||||
avatar_url = avatar_url_from_dict(row)
|
avatar_url = get_avatar_field(
|
||||||
|
user_id=row['id'],
|
||||||
|
realm_id= realm_id,
|
||||||
|
email=row['email'],
|
||||||
|
avatar_source=row['avatar_source'],
|
||||||
|
avatar_version=row['avatar_version'],
|
||||||
|
medium=False,
|
||||||
|
client_gravatar=client_gravatar,
|
||||||
|
)
|
||||||
|
|
||||||
is_admin = row['is_realm_admin']
|
is_admin = row['is_realm_admin']
|
||||||
|
|
||||||
return dict(
|
return dict(
|
||||||
@@ -169,7 +178,10 @@ def fetch_initial_state_data(user_profile, event_types, queue_id, client_gravata
|
|||||||
state['realm_filters'] = realm_filters_for_realm(user_profile.realm_id)
|
state['realm_filters'] = realm_filters_for_realm(user_profile.realm_id)
|
||||||
|
|
||||||
if want('realm_user'):
|
if want('realm_user'):
|
||||||
state['raw_users'] = get_raw_user_data(user_profile.realm_id)
|
state['raw_users'] = get_raw_user_data(
|
||||||
|
realm_id=user_profile.realm_id,
|
||||||
|
client_gravatar=client_gravatar,
|
||||||
|
)
|
||||||
state['avatar_source'] = user_profile.avatar_source
|
state['avatar_source'] = user_profile.avatar_source
|
||||||
state['avatar_url_medium'] = avatar_url(
|
state['avatar_url_medium'] = avatar_url(
|
||||||
user_profile,
|
user_profile,
|
||||||
@@ -243,9 +255,9 @@ def remove_message_id_from_unread_mgs(state, message_id):
|
|||||||
raw_unread['unmuted_stream_msgs'].discard(message_id)
|
raw_unread['unmuted_stream_msgs'].discard(message_id)
|
||||||
raw_unread['mentions'].discard(message_id)
|
raw_unread['mentions'].discard(message_id)
|
||||||
|
|
||||||
def apply_events(state, events, user_profile, include_subscribers=True,
|
def apply_events(state, events, user_profile, client_gravatar, include_subscribers=True,
|
||||||
fetch_event_types=None):
|
fetch_event_types=None):
|
||||||
# type: (Dict[str, Any], Iterable[Dict[str, Any]], UserProfile, bool, Optional[Iterable[str]]) -> None
|
# type: (Dict[str, Any], Iterable[Dict[str, Any]], UserProfile, bool, bool, Optional[Iterable[str]]) -> None
|
||||||
for event in events:
|
for event in events:
|
||||||
if fetch_event_types is not None and event['type'] not in fetch_event_types:
|
if fetch_event_types is not None and event['type'] not in fetch_event_types:
|
||||||
# TODO: continuing here is not, most precisely, correct.
|
# TODO: continuing here is not, most precisely, correct.
|
||||||
@@ -257,10 +269,10 @@ def apply_events(state, events, user_profile, include_subscribers=True,
|
|||||||
# `apply_event`. For now, be careful in your choice of
|
# `apply_event`. For now, be careful in your choice of
|
||||||
# `fetch_event_types`.
|
# `fetch_event_types`.
|
||||||
continue
|
continue
|
||||||
apply_event(state, event, user_profile, include_subscribers)
|
apply_event(state, event, user_profile, client_gravatar, include_subscribers)
|
||||||
|
|
||||||
def apply_event(state, event, user_profile, include_subscribers):
|
def apply_event(state, event, user_profile, client_gravatar, include_subscribers):
|
||||||
# type: (Dict[str, Any], Dict[str, Any], UserProfile, bool) -> None
|
# type: (Dict[str, Any], Dict[str, Any], UserProfile, bool, bool) -> None
|
||||||
if event['type'] == "message":
|
if event['type'] == "message":
|
||||||
state['max_message_id'] = max(state['max_message_id'], event['message']['id'])
|
state['max_message_id'] = max(state['max_message_id'], event['message']['id'])
|
||||||
if 'raw_unread_msgs' in state:
|
if 'raw_unread_msgs' in state:
|
||||||
@@ -283,6 +295,9 @@ def apply_event(state, event, user_profile, include_subscribers):
|
|||||||
|
|
||||||
if event['op'] == "add":
|
if event['op'] == "add":
|
||||||
person = copy.deepcopy(person)
|
person = copy.deepcopy(person)
|
||||||
|
if client_gravatar:
|
||||||
|
if 'gravatar.com' in person['avatar_url']:
|
||||||
|
person['avatar_url'] = None
|
||||||
person['is_active'] = True
|
person['is_active'] = True
|
||||||
state['raw_users'][person_user_id] = person
|
state['raw_users'][person_user_id] = person
|
||||||
elif event['op'] == "remove":
|
elif event['op'] == "remove":
|
||||||
@@ -563,6 +578,7 @@ def do_events_register(user_profile, user_client, apply_markdown=True, client_gr
|
|||||||
# Apply events that came in while we were fetching initial data
|
# Apply events that came in while we were fetching initial data
|
||||||
events = get_user_events(user_profile, queue_id, -1)
|
events = get_user_events(user_profile, queue_id, -1)
|
||||||
apply_events(ret, events, user_profile, include_subscribers=include_subscribers,
|
apply_events(ret, events, user_profile, include_subscribers=include_subscribers,
|
||||||
|
client_gravatar=client_gravatar,
|
||||||
fetch_event_types=fetch_event_types)
|
fetch_event_types=fetch_event_types)
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|||||||
@@ -491,7 +491,8 @@ class EventsRegisterTest(ZulipTestCase):
|
|||||||
self.assertTrue(len(events) == num_events)
|
self.assertTrue(len(events) == num_events)
|
||||||
|
|
||||||
before = ujson.dumps(hybrid_state)
|
before = ujson.dumps(hybrid_state)
|
||||||
apply_events(hybrid_state, events, self.user_profile, include_subscribers=include_subscribers)
|
apply_events(hybrid_state, events, self.user_profile,
|
||||||
|
client_gravatar=True, include_subscribers=include_subscribers)
|
||||||
after = ujson.dumps(hybrid_state)
|
after = ujson.dumps(hybrid_state)
|
||||||
|
|
||||||
if state_change_expected:
|
if state_change_expected:
|
||||||
@@ -949,7 +950,7 @@ class EventsRegisterTest(ZulipTestCase):
|
|||||||
('person', check_dict_only([
|
('person', check_dict_only([
|
||||||
('user_id', check_int),
|
('user_id', check_int),
|
||||||
('email', check_string),
|
('email', check_string),
|
||||||
('avatar_url', check_string),
|
('avatar_url', check_none_or(check_string)),
|
||||||
('full_name', check_string),
|
('full_name', check_string),
|
||||||
('is_admin', check_bool),
|
('is_admin', check_bool),
|
||||||
('is_bot', check_bool),
|
('is_bot', check_bool),
|
||||||
|
|||||||
Reference in New Issue
Block a user