def load(self, key): self.messages = [] self.key = key message_keys = self.redis.lrange('thread:%s:messages' % key, 0, -1) self._update_recipients() data = self.redis.get('thread:%s:data' % key) if not data: raise ThreadError("Thread %s data doesn't exist." % self.key) data = json.loads(data) self.subject = data['subject'] self.encrypted = data['encrypted'] if self.encrypted: self.decrypted = False for message_key in message_keys: m = Message(redis=self.redis, user=self.user) try: m.load(message_key) except MessageError: pass self.messages.append(m) if len(self.messages) < 1: self.delete() raise DestroyedThreadError try: self.sender = self.messages[0].data['sender'] except KeyError: self.delete_message(self.messages[0])
def delete_message(message_id, thread_id): if request.method == "POST": t = Thread(redis=g.r, user=g.user) t.load(thread_id) m = Message(redis=g.r, user=g.user, key=message_id) m.load() if g.r.get("username:%s" % m.sender.username) != g.user.key: abort(401) t.delete_message(m) flash(u"Message deleted", "success") return redirect(url_for("view_thread", thread_id=thread_id)) else: return render_template( "confirm.html", _message="Are you sure you want to delete this message?", _ok=url_for("delete_message", thread_id=thread_id, message_id=message_id), _cancel=url_for("view_thread", thread_id=thread_id), )