mirror of
https://github.com/zulip/zulip.git
synced 2025-11-02 21:13:36 +00:00
Extract MessageDict.set_sender_avatar().
We now populate the avatar url as part of the post processing step of building message dictionaries, so that the avatar url is no longer in cache. This change makes the cache slimmer, because instead of caching the avatar url (which often includes a long hash), we just cache the smaller fields that are used to compute the url. Note that this commit still has the problem that we're essentially computing the avatar url from cached fields that can be invalid. We will address that a few commits later. An immediate benefit of this change is that how we compute avatar urls (or whether we compute them all) is now decoupled from caching concerns. We will address this later as well. (Some clients will be capable of computing their own gravatar urls, for example.)
This commit is contained in:
@@ -75,6 +75,11 @@ class MessageDict(object):
|
||||
|
||||
for obj in objs:
|
||||
MessageDict.hydrate_recipient_info(obj)
|
||||
MessageDict.set_sender_avatar(obj)
|
||||
|
||||
del obj['sender_realm_id']
|
||||
del obj['sender_avatar_source']
|
||||
del obj['sender_avatar_version']
|
||||
|
||||
del obj['raw_display_recipient']
|
||||
del obj['recipient_type']
|
||||
@@ -174,19 +179,6 @@ class MessageDict(object):
|
||||
):
|
||||
# type: (bool, Optional[Message], int, Optional[datetime.datetime], Optional[Text], Text, Text, datetime.datetime, Optional[Text], Optional[int], int, Text, int, Text, Text, int, bool, Text, int, int, int, List[Dict[str, Any]]) -> Dict[str, Any]
|
||||
|
||||
# TODO: Make client_gravatar configurable.
|
||||
client_gravatar = False
|
||||
|
||||
avatar_url = get_avatar_field(
|
||||
user_id=sender_id,
|
||||
realm_id=sender_realm_id,
|
||||
email=sender_email,
|
||||
avatar_source=sender_avatar_source,
|
||||
avatar_version=sender_avatar_version,
|
||||
medium=False,
|
||||
client_gravatar=client_gravatar,
|
||||
)
|
||||
|
||||
obj = dict(
|
||||
id = message_id,
|
||||
sender_email = sender_email,
|
||||
@@ -197,9 +189,12 @@ class MessageDict(object):
|
||||
recipient_id = recipient_id,
|
||||
subject = subject,
|
||||
timestamp = datetime_to_timestamp(pub_date),
|
||||
avatar_url = avatar_url,
|
||||
client = sending_client_name)
|
||||
|
||||
obj['sender_realm_id'] = sender_realm_id
|
||||
obj['sender_avatar_source'] = sender_avatar_source
|
||||
obj['sender_avatar_version'] = sender_avatar_version
|
||||
|
||||
obj['raw_display_recipient'] = get_display_recipient_by_id(
|
||||
recipient_id,
|
||||
recipient_type,
|
||||
@@ -332,6 +327,28 @@ class MessageDict(object):
|
||||
if obj['type'] == 'stream':
|
||||
obj['stream_id'] = recipient_type_id
|
||||
|
||||
@staticmethod
|
||||
def set_sender_avatar(obj):
|
||||
# type: (Dict[str, Any]) -> None
|
||||
sender_id = obj['sender_id']
|
||||
sender_realm_id = obj['sender_realm_id']
|
||||
sender_email = obj['sender_email']
|
||||
sender_avatar_source = obj['sender_avatar_source']
|
||||
sender_avatar_version = obj['sender_avatar_version']
|
||||
|
||||
# TODO: Make client_gravatar configurable.
|
||||
client_gravatar = False
|
||||
|
||||
obj['avatar_url'] = get_avatar_field(
|
||||
user_id=sender_id,
|
||||
realm_id=sender_realm_id,
|
||||
email=sender_email,
|
||||
avatar_source=sender_avatar_source,
|
||||
avatar_version=sender_avatar_version,
|
||||
medium=False,
|
||||
client_gravatar=client_gravatar,
|
||||
)
|
||||
|
||||
class ReactionDict(object):
|
||||
@staticmethod
|
||||
def build_dict_from_raw_db_row(row):
|
||||
|
||||
Reference in New Issue
Block a user