diff options
author | Jacob Mason <jacoblmason@gmail.com> | 2010-08-06 15:07:59 -0500 |
---|---|---|
committer | Jacob Mason <jacoblmason@gmail.com> | 2010-08-06 15:07:59 -0500 |
commit | bfbbbe5851c71706f79d823696648f96ff88af40 (patch) | |
tree | 12aafbefb6ae1eaa84a9c2b7d981b3a07682fc9a /sphinx/websupport/storage/sqlalchemystorage.py | |
parent | ad9ebe38cc7f478349dfb5594c341dbcf0833507 (diff) | |
download | sphinx-git-bfbbbe5851c71706f79d823696648f96ff88af40.tar.gz |
moved _serializable_list into db.py
Diffstat (limited to 'sphinx/websupport/storage/sqlalchemystorage.py')
-rw-r--r-- | sphinx/websupport/storage/sqlalchemystorage.py | 48 |
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( |