def deliver(self, recipient, sender, notice_type, extra_context): context = self.default_context() context.update(extra_context) if shadow_ban_applies(notice_type, recipient, context): return template = 'notice.html' message = self.get_formatted_messages([template], notice_type.label, context)[template] level = persistent_messages.INFO try: request = get_request() persistent_messages.add_message(request, level, message, user=recipient, from_user=sender) except IndexError: persistent_message = Message(user=recipient, from_user=sender, level=level, message=message) persistent_message.save()
def add(self, level, message, extra_tags='', subject='', user=None, from_user=None, expires=None, close_timeout=None): """ Queues a message to be stored. The message is only queued if it contained something and its level is not less than the recording level (``self.level``). """ to_user = user or get_user(self.request) if not to_user.is_authenticated(): if Message(level=level).is_persistent(): raise NotImplementedError( 'Persistent message levels cannot be used for anonymous users.' ) else: return super(PersistentMessageStorage, self).add(level, message, extra_tags) if not message: return # Check that the message level is not less than the recording level. level = int(level) if level < self.level: return # Add the message. message = Message(user=to_user, level=level, message=message, extra_tags=extra_tags, subject=subject, from_user=from_user, expires=expires, close_timeout=close_timeout) # Messages need a primary key when being displayed so that they can be closed/marked as read by the user. # Hence, save it now instead of adding it to queue: if STORE_WHEN_ADDING: message.save() else: self.added_new = True self._queued_messages.append(message)