mirror of https://github.com/zulip/zulip.git
alert_words: Only fetch and cache non-null alert word sets.
This removes from our cache a moderate amount of totally useless alert word data corresponding to users who don't have any alert words. Thanks to @dbiollo for the suggestion!
This commit is contained in:
parent
84114ab31f
commit
bddf971554
|
@ -1,13 +1,15 @@
|
|||
from __future__ import absolute_import
|
||||
|
||||
from django.db.models import Q
|
||||
import zerver.models
|
||||
from zerver.lib.cache import cache_with_key, realm_alert_words_cache_key
|
||||
import ujson
|
||||
|
||||
@cache_with_key(realm_alert_words_cache_key, timeout=3600*24)
|
||||
def alert_words_in_realm(realm):
|
||||
users = zerver.models.UserProfile.objects.filter(realm=realm, is_active=True).values('id', 'alert_words')
|
||||
all_user_words = dict((user['id'], ujson.loads(user['alert_words'])) for user in users)
|
||||
users_query = zerver.models.UserProfile.objects.filter(realm=realm, is_active=True)
|
||||
alert_word_data = users_query.filter(~Q(alert_words=ujson.dumps([]))).values('id', 'alert_words')
|
||||
all_user_words = dict((elt['id'], ujson.loads(elt['alert_words'])) for elt in alert_word_data)
|
||||
user_ids_with_words = dict((user_id, w) for (user_id, w) in all_user_words.iteritems() if len(w))
|
||||
return user_ids_with_words
|
||||
|
||||
|
|
Loading…
Reference in New Issue