From 019d541e4724ccbb0660ecd590e415f426db9701 Mon Sep 17 00:00:00 2001 From: Steve Howell Date: Sat, 9 Sep 2017 10:47:38 -0700 Subject: [PATCH] Optimize UserMessage.flags_list(). This small function was consuming way too much time when we sent messages to many recipients. --- zerver/models.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/zerver/models.py b/zerver/models.py index ef7c32ddf3..7cc0ce027c 100644 --- a/zerver/models.py +++ b/zerver/models.py @@ -1320,7 +1320,17 @@ class AbstractUserMessage(ModelReprMixin, models.Model): def flags_list(self): # type: () -> List[str] - return [flag for flag in self.flags.keys() if getattr(self.flags, flag).is_set] + ''' + This function is highly optimized, because it actually slows down + sending messages in a naive implementation. + ''' + flags = int(self.flags) + names = self.ALL_FLAGS + return [ + names[i] + for i in range(len(names)) + if flags & (2 ** i) + ] def __unicode__(self): # type: () -> Text