Browse Source

Convert messages to CBV

Alec Nikolas Reiter 7 years ago
parent
commit
d1fdfb8e5b
1 changed files with 183 additions and 155 deletions
  1. 183 155
      flaskbb/message/views.py

+ 183 - 155
flaskbb/message/views.py

@@ -8,171 +8,25 @@
     :copyright: (c) 2014 by the FlaskBB Team.
     :license: BSD, see LICENSE for more details.
 """
-from functools import wraps
 import uuid
+from functools import wraps
 
-from flask import Blueprint, redirect, request, url_for, flash, abort
+from flask import Blueprint, abort, flash, redirect, request, url_for
 from flask.views import MethodView
-from flask_login import login_required, current_user
 from flask_babelplus import gettext as _
+from flask_login import current_user, login_required
 
 from flaskbb.extensions import db
-from flaskbb.utils.settings import flaskbb_config
-from flaskbb.utils.helpers import (format_quote, register_view,
-                                   render_template, time_utcnow)
 from flaskbb.message.forms import ConversationForm, MessageForm
 from flaskbb.message.models import Conversation, Message
 from flaskbb.user.models import User
+from flaskbb.utils.helpers import (format_quote, register_view,
+                                   render_template, time_utcnow)
+from flaskbb.utils.settings import flaskbb_config
 
 message = Blueprint("message", __name__)
 
 
-@message.route("/")
-@message.route("/inbox")
-@login_required
-def inbox():
-    page = request.args.get('page', 1, type=int)
-
-    # the inbox will display both, the recieved and the sent messages
-    conversations = Conversation.query. \
-        filter(
-            Conversation.user_id == current_user.id,
-            Conversation.draft == False,
-            Conversation.trash == False,
-        ).\
-        order_by(Conversation.date_modified.desc()). \
-        paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
-
-    # we can't simply do conversations.total because it would ignore
-    # drafted and trashed messages
-    message_count = Conversation.query. \
-        filter(Conversation.user_id == current_user.id).\
-        count()
-
-    return render_template("message/inbox.html", conversations=conversations,
-                           message_count=message_count)
-
-
-@message.route("/message/<int:message_id>/raw")
-@login_required
-def raw_message(message_id):
-    message = Message.query.filter_by(id=message_id).first_or_404()
-
-    # abort if the message was not the current_user's one or the one of the
-    # recieved ones
-    if not (message.conversation.from_user_id == current_user.id or
-            message.conversation.to_user_id == current_user.id):
-        abort(404)
-
-    return format_quote(username=message.user.username,
-                        content=message.message)
-
-
-@message.route("/<int:conversation_id>/move", methods=["POST"])
-@login_required
-def move_conversation(conversation_id):
-    conversation = Conversation.query.filter_by(
-        id=conversation_id,
-        user_id=current_user.id
-    ).first_or_404()
-
-    conversation.trash = True
-    conversation.save()
-
-    return redirect(url_for("message.inbox"))
-
-
-@message.route("/<int:conversation_id>/restore", methods=["POST"])
-@login_required
-def restore_conversation(conversation_id):
-    conversation = Conversation.query.filter_by(
-        id=conversation_id,
-        user_id=current_user.id
-    ).first_or_404()
-
-    conversation.trash = False
-    conversation.save()
-    return redirect(url_for("message.inbox"))
-
-
-@message.route("/<int:conversation_id>/delete", methods=["POST"])
-@login_required
-def delete_conversation(conversation_id):
-    conversation = Conversation.query.filter_by(
-        id=conversation_id,
-        user_id=current_user.id
-    ).first_or_404()
-
-    conversation.delete()
-    return redirect(url_for("message.inbox"))
-
-
-@message.route("/sent")
-@login_required
-def sent():
-    page = request.args.get('page', 1, type=int)
-
-    conversations = Conversation.query. \
-        filter(
-            Conversation.user_id == current_user.id,
-            Conversation.draft == False,
-            Conversation.trash == False,
-            db.not_(Conversation.to_user_id == current_user.id)
-        ).\
-        order_by(Conversation.date_modified.desc()). \
-        paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
-
-    message_count = Conversation.query. \
-        filter(Conversation.user_id == current_user.id).\
-        count()
-
-    return render_template("message/sent.html", conversations=conversations,
-                           message_count=message_count)
-
-
-@message.route("/draft")
-@login_required
-def drafts():
-    page = request.args.get('page', 1, type=int)
-
-    conversations = Conversation.query. \
-        filter(
-            Conversation.user_id == current_user.id,
-            Conversation.draft == True,
-            Conversation.trash == False
-        ).\
-        order_by(Conversation.date_modified.desc()). \
-        paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
-
-    message_count = Conversation.query. \
-        filter(Conversation.user_id == current_user.id).\
-        count()
-
-    return render_template("message/drafts.html", conversations=conversations,
-                           message_count=message_count)
-
-
-@message.route("/trash")
-@login_required
-def trash():
-    page = request.args.get('page', 1, type=int)
-
-    conversations = Conversation.query. \
-        filter(
-            Conversation.user_id == current_user.id,
-            Conversation.trash == True,
-        ).\
-        order_by(Conversation.date_modified.desc()). \
-        paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
-
-    message_count = Conversation.query. \
-        filter(Conversation.user_id == current_user.id).\
-        count()
-
-    return render_template("message/trash.html", conversations=conversations,
-                           message_count=message_count)
-
-
 def requires_message_box_space(f):
 
     @wraps(f)
@@ -192,6 +46,33 @@ def requires_message_box_space(f):
     return wrapper
 
 
+class Inbox(MethodView):
+    decorators = [login_required]
+
+    def get(self):
+        page = request.args.get('page', 1, type=int)
+
+        # the inbox will display both, the recieved and the sent messages
+        conversations = Conversation.query. \
+            filter(
+                Conversation.user_id == current_user.id,
+                Conversation.draft == False,
+                Conversation.trash == False,
+            ).\
+            order_by(Conversation.date_modified.desc()). \
+            paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
+
+        # we can't simply do conversations.total because it would ignore
+        # drafted and trashed messages
+        message_count = Conversation.query. \
+            filter(Conversation.user_id == current_user.id).\
+            count()
+
+        return render_template(
+            "message/inbox.html", conversations=conversations, message_count=message_count
+        )
+
+
 class ViewConversation(MethodView):
     decorators = [login_required]
     form = MessageForm
@@ -384,14 +265,161 @@ class EditConversation(MethodView):
         return render_template("message/message_form.html", form=form, title=_("Edit Message"))
 
 
+class RawMessage(MethodView):
+    decorators = [login_required]
+
+    def get(self, message_id):
+
+        message = Message.query.filter_by(id=message_id).first_or_404()
+
+        # abort if the message was not the current_user's one or the one of the
+        # recieved ones
+        if not (message.conversation.from_user_id == current_user.id
+                or message.conversation.to_user_id == current_user.id):
+            abort(404)
+
+        return format_quote(username=message.user.username, content=message.message)
+
+
+class MoveConversation(MethodView):
+    decorators = [login_required]
+
+    def post(self, conversation_id):
+        conversation = Conversation.query.filter_by(
+            id=conversation_id, user_id=current_user.id
+        ).first_or_404()
+
+        conversation.trash = True
+        conversation.save()
+
+        return redirect(url_for("message.inbox"))
+
+
+class RestoreConversation(MethodView):
+    decorators = [login_required]
+
+    def post(self, conversation_id):
+        conversation = Conversation.query.filter_by(
+            id=conversation_id, user_id=current_user.id
+        ).first_or_404()
+
+        conversation.trash = False
+        conversation.save()
+        return redirect(url_for("message.inbox"))
+
+
+class DeleteConversation(MethodView):
+    decorators = [login_required]
+
+    def post(self, conversation_id):
+        conversation = Conversation.query.filter_by(
+            id=conversation_id, user_id=current_user.id
+        ).first_or_404()
+
+        conversation.delete()
+        return redirect(url_for("message.inbox"))
+
+
+class SentMessages(MethodView):
+    decorators = [login_required]
+
+    def get(self):
+
+        page = request.args.get('page', 1, type=int)
+
+        conversations = Conversation.query. \
+            filter(
+                Conversation.user_id == current_user.id,
+                Conversation.draft == False,
+                Conversation.trash == False,
+                db.not_(Conversation.to_user_id == current_user.id)
+            ).\
+            order_by(Conversation.date_modified.desc()). \
+            paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
+
+        message_count = Conversation.query. \
+            filter(Conversation.user_id == current_user.id).\
+            count()
+
+        return render_template(
+            "message/sent.html", conversations=conversations, message_count=message_count
+        )
+
+
+class DraftMessages(MethodView):
+    decorators = [login_required]
+
+    def get(self):
+
+        page = request.args.get('page', 1, type=int)
+
+        conversations = Conversation.query. \
+            filter(
+                Conversation.user_id == current_user.id,
+                Conversation.draft == True,
+                Conversation.trash == False
+            ).\
+            order_by(Conversation.date_modified.desc()). \
+            paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
+
+        message_count = Conversation.query. \
+            filter(Conversation.user_id == current_user.id).\
+            count()
+
+        return render_template(
+            "message/drafts.html", conversations=conversations, message_count=message_count
+        )
+
+
+class TrashedMessages(MethodView):
+    decorators = [login_required]
+
+    def get(self):
+
+        page = request.args.get('page', 1, type=int)
+
+        conversations = Conversation.query. \
+            filter(
+                Conversation.user_id == current_user.id,
+                Conversation.trash == True,
+            ).\
+            order_by(Conversation.date_modified.desc()). \
+            paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
+
+        message_count = Conversation.query. \
+            filter(Conversation.user_id == current_user.id).\
+            count()
+
+        return render_template(
+            "message/trash.html", conversations=conversations, message_count=message_count
+        )
+
+
+register_view(message, routes=['/drafts'], DraftMessages.as_view('drafts'))
+register_view(message, routes=['/', '/inbox'], view_func=Inbox.as_view('inbox'))
 register_view(
     message,
-    routes=["/<int:conversation_id>/view"],
-    view_func=ViewConversation.as_view('view_conversation')
+    routes=['/int:conversation_id>/delete'],
+    DeleteConversation.as_view('delete_conversation')
 )
-register_view(message, routes=["/new"], view_func=NewConversation.as_view('new_conversation'))
 register_view(
     message,
     routes=["/<int:conversation_id>/edit"],
     view_func=EditConversation.as_view('edit_conversation')
 )
+register_view(
+    message, routes=['/<int:conversation_id>/move'], MoveConversation.as_view('move_conversation')
+)
+register_view(
+    message.routes=['/<int:conversation_id>/restore'],
+    RestoreConversation.as_view('restore_conversation')
+)
+register_view(
+    message,
+    routes=["/<int:conversation_id>/view"],
+    view_func=ViewConversation.as_view('view_conversation')
+)
+register_view(message, routes=['/message/<int:message_id>/raw'], RawMessage.as_view('raw_message'))
+register_view(message, routes=["/new"], view_func=NewConversation.as_view('new_conversation'))
+register_view(message, routes=['/sent'], SentMessages.as_view('sent'))
+register_view(message, routes=['/trash'], TrashedMessages.as_view('trash'))