diff options
-rw-r--r-- | sphinx/websupport/storage/__init__.py (renamed from sphinx/websupport/comments/__init__.py) | 8 | ||||
-rw-r--r-- | sphinx/websupport/storage/db.py (renamed from sphinx/websupport/comments/db.py) | 4 | ||||
-rw-r--r-- | sphinx/websupport/storage/differ.py (renamed from sphinx/websupport/comments/differ.py) | 4 | ||||
-rw-r--r-- | sphinx/websupport/storage/sqlalchemystorage.py (renamed from sphinx/websupport/comments/sqlalchemystorage.py) | 61 |
4 files changed, 62 insertions, 15 deletions
diff --git a/sphinx/websupport/comments/__init__.py b/sphinx/websupport/storage/__init__.py index 10856dffd..6948c8c73 100644 --- a/sphinx/websupport/comments/__init__.py +++ b/sphinx/websupport/storage/__init__.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- """ - sphinx.websupport.comments - ~~~~~~~~~~~~~~~~~~~~~~~~~~ + sphinx.websupport.storage + ~~~~~~~~~~~~~~~~~~~~~~~~~ - Comments for the websupport package. + Storage for the websupport package. :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. @@ -40,7 +40,7 @@ class StorageBackend(object): """Called when a comment is being added.""" raise NotImplementedError() - def get_comments(self, parent_id, user_id, moderator): + def get_data(self, parent_id, user_id, moderator): """Called to retrieve all comments for a node.""" raise NotImplementedError() diff --git a/sphinx/websupport/comments/db.py b/sphinx/websupport/storage/db.py index 91175ed38..23b6a462c 100644 --- a/sphinx/websupport/comments/db.py +++ b/sphinx/websupport/storage/db.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ - sphinx.websupport.comments.db - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + sphinx.websupport.storage.db + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SQLAlchemy table and mapper definitions used by the :class:`sphinx.websupport.comments.SQLAlchemyStorage`. diff --git a/sphinx/websupport/comments/differ.py b/sphinx/websupport/storage/differ.py index 2ecacea58..4e5660c59 100644 --- a/sphinx/websupport/comments/differ.py +++ b/sphinx/websupport/storage/differ.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ - sphinx.websupport.comments.differ - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + sphinx.websupport.storage.differ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A differ for creating an HTML representations of proposal diffs diff --git a/sphinx/websupport/comments/sqlalchemystorage.py b/sphinx/websupport/storage/sqlalchemystorage.py index 085913fdf..e96f38cf0 100644 --- a/sphinx/websupport/comments/sqlalchemystorage.py +++ b/sphinx/websupport/storage/sqlalchemystorage.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- """ - sphinx.websupport.comments.sqlalchemystorage - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + sphinx.websupport.storage.sqlalchemystorage + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - A SQLAlchemy storage backend. + An SQLAlchemy storage backend. :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. @@ -12,10 +12,11 @@ from datetime import datetime from sqlalchemy.orm import aliased -from sphinx.websupport.comments import StorageBackend -from sphinx.websupport.comments.db import Base, Node, Comment, CommentVote,\ +from sphinx.websupport.errors import * +from sphinx.websupport.storage import StorageBackend +from sphinx.websupport.storage.db import Base, Node, Comment, CommentVote,\ Session -from sphinx.websupport.comments.differ import CombinedHtmlDiff +from sphinx.websupport.storage.differ import CombinedHtmlDiff class SQLAlchemyStorage(StorageBackend): def __init__(self, engine): @@ -45,6 +46,13 @@ class SQLAlchemyStorage(StorageBackend): node = session.query(Node).filter(Node.id == node_id).one() differ = CombinedHtmlDiff() proposal_diff = differ.make_html(node.source, proposal) + elif parent_id: + parent = session.query(Comment.displayed).\ + filter(Comment.id == parent_id).one() + if not parent.displayed: + raise CommentNotAllowedError( + "Can't add child to a parent that is not displayed") + proposal_diff = None else: proposal_diff = None @@ -58,6 +66,19 @@ class SQLAlchemyStorage(StorageBackend): session.close() return comment + def delete_comment(self, comment_id, username, moderator): + session = Session() + comment = session.query(Comment).\ + filter(Comment.id == comment_id).one() + if moderator or comment.username == username: + comment.username = '[deleted]' + comment.text = '[deleted]' + session.commit() + session.close() + else: + session.close() + raise UserNotAuthorizedError() + def get_data(self, node_id, username, moderator): session = Session() node = session.query(Node).filter(Node.id == node_id).one() @@ -81,7 +102,7 @@ class SQLAlchemyStorage(StorageBackend): q = session.query(Comment) # Filter out all comments not descending from this node. - q = q.filter(Comment.path.like(node_id + '.%')) + 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) @@ -129,3 +150,29 @@ class SQLAlchemyStorage(StorageBackend): session.add(vote) session.commit() session.close() + + def update_username(self, old_username, new_username): + session = Session() + session.query(Comment).filter(Comment.username == old_username).\ + update({Comment.username: new_username}) + session.query(CommentVote).\ + filter(CommentVote.username == old_username).\ + update({CommentVote.username: new_username}) + session.commit() + session.close() + + def accept_comment(self, comment_id): + session = Session() + comment = session.query(Comment).\ + filter(Comment.id == comment_id).one() + comment.displayed = True + session.commit() + session.close() + + def reject_comment(self, comment_id): + session = Session() + comment = session.query(Comment).\ + filter(Comment.id == comment_id).one() + session.delete(comment) + session.commit() + session.close() |