##// END OF EJS Templates
fixes timezone issues with tests
fixes timezone issues with tests

File last commit:

r1703:f23828b0 beta
r1707:54fda6ce beta
Show More
comment.py
107 lines | 3.4 KiB | text/x-python | PythonLexer
# -*- 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
from rhodecode.model.db import ChangesetComment, User, Notification
from sqlalchemy.util.compat import defaultdict
from rhodecode.model.notification import NotificationModel
log = logging.getLogger(__name__)
class ChangesetCommentsModel(BaseModel):
def create(self, text, repo_id, user_id, revision, f_path=None,
line_no=None):
"""
Creates new comment for changeset
:param text:
:param repo_id:
:param user_id:
:param revision:
:param f_path:
:param line_no:
"""
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
self.sa.add(comment)
self.sa.commit()
# 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)
return comment
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
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()
def get_inline_comments(self, repo_id, revision):
comments = self.sa.query(ChangesetComment)\
.filter(ChangesetComment.repo_id == repo_id)\
.filter(ChangesetComment.revision == revision)\
.filter(ChangesetComment.line_no != None)\
.filter(ChangesetComment.f_path != None).all()
paths = defaultdict(lambda:defaultdict(list))
for co in comments:
paths[co.f_path][co.line_no].append(co)
return paths.items()