summaryrefslogtreecommitdiff
path: root/sphinx/websupport/storage/sqlalchemystorage.py
diff options
context:
space:
mode:
Diffstat (limited to 'sphinx/websupport/storage/sqlalchemystorage.py')
-rw-r--r--sphinx/websupport/storage/sqlalchemystorage.py48
1 files changed, 1 insertions, 47 deletions
diff --git a/sphinx/websupport/storage/sqlalchemystorage.py b/sphinx/websupport/storage/sqlalchemystorage.py
index e96f38cf0..02fa33b50 100644
--- a/sphinx/websupport/storage/sqlalchemystorage.py
+++ b/sphinx/websupport/storage/sqlalchemystorage.py
@@ -11,7 +11,6 @@
from datetime import datetime
-from sqlalchemy.orm import aliased
from sphinx.websupport.errors import *
from sphinx.websupport.storage import StorageBackend
from sphinx.websupport.storage.db import Base, Node, Comment, CommentVote,\
@@ -83,55 +82,10 @@ class SQLAlchemyStorage(StorageBackend):
session = Session()
node = session.query(Node).filter(Node.id == node_id).one()
session.close()
- comments = self._serializable_list(node_id, username, moderator)
+ comments = node.nested_comments(username, moderator)
return {'source': node.source,
'comments': comments}
- def _serializable_list(self, node_id, username, moderator):
- session = Session()
-
- if username:
- # If a username is provided, create a subquery to retrieve all
- # votes by this user. We will outerjoin with the comment query
- # with this subquery so we have a user's voting information.
- sq = session.query(CommentVote).\
- filter(CommentVote.username == username).subquery()
- cvalias = aliased(CommentVote, sq)
- q = session.query(Comment, cvalias.value).outerjoin(cvalias)
- else:
- q = session.query(Comment)
-
- # Filter out all comments not descending from this node.
- q = q.filter(Comment.path.like(str(node_id) + '.%'))
- # Filter out non-displayed comments if this isn't a moderator.
- if not moderator:
- q = q.filter(Comment.displayed == True)
- # Retrieve all results. Results must be ordered by Comment.path
- # so that we can easily transform them from a flat list to a tree.
- results = q.order_by(Comment.path).all()
- session.close()
-
- # We now need to convert the flat list of results to a nested
- # lists to form the comment tree. Results will by ordered by
- # the materialized path.
- comments = []
- list_stack = [comments]
- for r in results:
- comment, vote = r if username else (r, 0)
-
- inheritance_chain = comment.path.split('.')[1:]
-
- if len(inheritance_chain) == len(list_stack) + 1:
- parent = list_stack[-1][-1]
- list_stack.append(parent['children'])
- elif len(inheritance_chain) < len(list_stack):
- while len(inheritance_chain) < len(list_stack):
- list_stack.pop()
-
- list_stack[-1].append(comment.serializable(vote=vote))
-
- return comments
-
def process_vote(self, comment_id, username, value):
session = Session()
vote = session.query(CommentVote).filter(