comment.py
107 lines
| 3.4 KiB
| text/x-python
|
PythonLexer
r1670 | # -*- coding: utf-8 -*- | |||
""" | ||||
rhodecode.model.comment | ||||
~~~~~~~~~~~~~~~~~~~~~~~ | ||||
comments model for RhodeCode | ||||
:created_on: Nov 11, 2011 | ||||
:author: marcink | ||||
:copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com> | ||||
:license: GPLv3, see COPYING for more details. | ||||
""" | ||||
# This program is free software: you can redistribute it and/or modify | ||||
# it under the terms of the GNU General Public License as published by | ||||
# the Free Software Foundation, either version 3 of the License, or | ||||
# (at your option) any later version. | ||||
# | ||||
# This program is distributed in the hope that it will be useful, | ||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU General Public License | ||||
# along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
import logging | ||||
import traceback | ||||
from rhodecode.model import BaseModel | ||||
r1703 | from rhodecode.model.db import ChangesetComment, User, Notification | |||
r1675 | from sqlalchemy.util.compat import defaultdict | |||
r1703 | from rhodecode.model.notification import NotificationModel | |||
r1670 | ||||
log = logging.getLogger(__name__) | ||||
class ChangesetCommentsModel(BaseModel): | ||||
r1675 | def create(self, text, repo_id, user_id, revision, f_path=None, | |||
r1670 | line_no=None): | |||
""" | ||||
Creates new comment for changeset | ||||
:param text: | ||||
:param repo_id: | ||||
:param user_id: | ||||
r1675 | :param revision: | |||
r1670 | :param f_path: | |||
:param line_no: | ||||
""" | ||||
r1677 | if text: | |||
comment = ChangesetComment() | ||||
comment.repo_id = repo_id | ||||
comment.user_id = user_id | ||||
comment.revision = revision | ||||
comment.text = text | ||||
comment.f_path = f_path | ||||
comment.line_no = line_no | ||||
r1670 | ||||
r1677 | self.sa.add(comment) | |||
self.sa.commit() | ||||
r1703 | ||||
# make notification | ||||
usr = User.get(user_id) | ||||
subj = 'User %s commented on %s' % (usr.username, revision) | ||||
body = text | ||||
recipients = ChangesetComment.get_users(revision=revision) | ||||
NotificationModel().create(created_by=user_id, subject=subj, | ||||
body = body, recipients = recipients, | ||||
type_ = Notification.TYPE_CHANGESET_COMMENT) | ||||
r1677 | return comment | |||
r1670 | ||||
def delete(self, comment_id): | ||||
""" | ||||
Deletes given comment | ||||
:param comment_id: | ||||
""" | ||||
comment = ChangesetComment.get(comment_id) | ||||
self.sa.delete(comment) | ||||
self.sa.commit() | ||||
return comment | ||||
r1675 | ||||
def get_comments(self, repo_id, revision): | ||||
return ChangesetComment.query()\ | ||||
.filter(ChangesetComment.repo_id == repo_id)\ | ||||
.filter(ChangesetComment.revision == revision)\ | ||||
.filter(ChangesetComment.line_no == None)\ | ||||
.filter(ChangesetComment.f_path == None).all() | ||||
r1677 | def get_inline_comments(self, repo_id, revision): | |||
r1675 | comments = self.sa.query(ChangesetComment)\ | |||
.filter(ChangesetComment.repo_id == repo_id)\ | ||||
r1681 | .filter(ChangesetComment.revision == revision)\ | |||
.filter(ChangesetComment.line_no != None)\ | ||||
.filter(ChangesetComment.f_path != None).all() | ||||
r1677 | ||||
paths = defaultdict(lambda:defaultdict(list)) | ||||
r1675 | ||||
for co in comments: | ||||
r1677 | paths[co.f_path][co.line_no].append(co) | |||
return paths.items() | ||||