annotate rhodecode/model/comment.py @ 3625:260a7a01b054 beta

follow Python conventions for boolean values True and False might be singletons and the "default" values for "boolean" expressions, but "all" values in Python has a boolean value and should be evaluated as such. Checking with 'is True' and 'is False' is thus confusing, error prone and unnessarily complex. If we anywhere rely and nullable boolean fields from the database layer and don't want the null value to be treated as False then we should check explicitly for null with 'is None'.
author Mads Kiilerich <madski@unity3d.com>
date Thu, 28 Mar 2013 01:10:45 +0100
parents bbe21df7ad48
children 1de8abd9a4e1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
2 """
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
3 rhodecode.model.comment
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
4 ~~~~~~~~~~~~~~~~~~~~~~~
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
5
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
6 comments model for RhodeCode
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
7
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
8 :created_on: Nov 11, 2011
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
9 :author: marcink
1824
89efedac4e6c 2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents: 1789
diff changeset
10 :copyright: (C) 2011-2012 Marcin Kuzminski <marcin@python-works.com>
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
11 :license: GPLv3, see COPYING for more details.
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
12 """
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
13 # This program is free software: you can redistribute it and/or modify
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
14 # it under the terms of the GNU General Public License as published by
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
15 # the Free Software Foundation, either version 3 of the License, or
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
16 # (at your option) any later version.
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
17 #
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
18 # This program is distributed in the hope that it will be useful,
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
21 # GNU General Public License for more details.
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
22 #
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
23 # You should have received a copy of the GNU General Public License
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
25
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
26 import logging
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
27 import traceback
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
28
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
29 from pylons.i18n.translation import _
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
30 from sqlalchemy.util.compat import defaultdict
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
31
2178
989c137f26eb Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2150
diff changeset
32 from rhodecode.lib.utils2 import extract_mentioned_users, safe_unicode
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
33 from rhodecode.lib import helpers as h
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
34 from rhodecode.model import BaseModel
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
35 from rhodecode.model.db import ChangesetComment, User, Repository, \
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
36 Notification, PullRequest
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1681
diff changeset
37 from rhodecode.model.notification import NotificationModel
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
38 from rhodecode.model.meta import Session
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
39
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
40 log = logging.getLogger(__name__)
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
41
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
42
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
43 class ChangesetCommentsModel(BaseModel):
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
44
2522
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
45 cls = ChangesetComment
17893d61792a Added associated classes into child models
Marcin Kuzminski <marcin@python-works.com>
parents: 2478
diff changeset
46
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
47 def __get_changeset_comment(self, changeset_comment):
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
48 return self._get_instance(ChangesetComment, changeset_comment)
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
49
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
50 def __get_pull_request(self, pull_request):
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
51 return self._get_instance(PullRequest, pull_request)
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
52
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
53 def _extract_mentions(self, s):
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
54 user_objects = []
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
55 for username in extract_mentioned_users(s):
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
56 user_obj = User.get_by_username(username, case_insensitive=True)
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
57 if user_obj:
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
58 user_objects.append(user_obj)
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
59 return user_objects
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
60
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
61 def _get_notification_data(self, repo, comment, user, comment_text,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
62 line_no=None, revision=None, pull_request=None,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
63 status_change=None, closing_pr=False):
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
64 """
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
65 Get notification data
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
66
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
67 :param comment_text:
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
68 :param line:
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
69 :returns: tuple (subj,body,recipients,notification_type,email_kwargs)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
70 """
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
71 # make notification
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
72 body = comment_text # text of the comment
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
73 line = ''
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
74 if line_no:
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
75 line = _('on line %s') % line_no
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
76
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
77 #changeset
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
78 if revision:
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
79 notification_type = Notification.TYPE_CHANGESET_COMMENT
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
80 cs = repo.scm_instance.get_changeset(revision)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
81 desc = "%s" % (cs.short_id)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
82
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
83 _url = h.url('changeset_home',
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
84 repo_name=repo.repo_name,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
85 revision=revision,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
86 anchor='comment-%s' % comment.comment_id,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
87 qualified=True,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
88 )
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
89 subj = safe_unicode(
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
90 h.link_to('Re changeset: %(desc)s %(line)s' % \
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
91 {'desc': desc, 'line': line},
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
92 _url)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
93 )
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
94 email_subject = 'User %s commented on changeset %s' % \
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
95 (user.username, h.short_id(revision))
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
96 # get the current participants of this changeset
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
97 recipients = ChangesetComment.get_users(revision=revision)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
98 # add changeset author if it's in rhodecode system
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
99 cs_author = User.get_from_cs_author(cs.author)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
100 if not cs_author:
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
101 #use repo owner if we cannot extract the author correctly
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
102 cs_author = repo.user
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
103 recipients += [cs_author]
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
104 email_kwargs = {
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
105 'status_change': status_change,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
106 'cs_comment_user': h.person(user.email),
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
107 'cs_target_repo': h.url('summary_home', repo_name=repo.repo_name,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
108 qualified=True),
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
109 'cs_comment_url': _url,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
110 'raw_id': revision,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
111 'message': cs.message
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
112 }
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
113 #pull request
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
114 elif pull_request:
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
115 notification_type = Notification.TYPE_PULL_REQUEST_COMMENT
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
116 desc = comment.pull_request.title
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
117 _url = h.url('pullrequest_show',
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
118 repo_name=pull_request.other_repo.repo_name,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
119 pull_request_id=pull_request.pull_request_id,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
120 anchor='comment-%s' % comment.comment_id,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
121 qualified=True,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
122 )
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
123 subj = safe_unicode(
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
124 h.link_to('Re pull request #%(pr_id)s: %(desc)s %(line)s' % \
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
125 {'desc': desc,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
126 'pr_id': comment.pull_request.pull_request_id,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
127 'line': line},
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
128 _url)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
129 )
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
130 email_subject = 'User %s commented on pull request #%s' % \
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
131 (user.username, comment.pull_request.pull_request_id)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
132 # get the current participants of this pull request
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
133 recipients = ChangesetComment.get_users(pull_request_id=
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
134 pull_request.pull_request_id)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
135 # add pull request author
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
136 recipients += [pull_request.author]
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
137
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
138 # add the reviewers to notification
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
139 recipients += [x.user for x in pull_request.reviewers]
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
140
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
141 #set some variables for email notification
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
142 email_kwargs = {
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
143 'pr_id': pull_request.pull_request_id,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
144 'status_change': status_change,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
145 'closing_pr': closing_pr,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
146 'pr_comment_url': _url,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
147 'pr_comment_user': h.person(user.email),
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
148 'pr_target_repo': h.url('summary_home',
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
149 repo_name=pull_request.other_repo.repo_name,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
150 qualified=True)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
151 }
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
152
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
153 return subj, body, recipients, notification_type, email_kwargs, email_subject
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
154
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
155 def create(self, text, repo, user, revision=None, pull_request=None,
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
156 f_path=None, line_no=None, status_change=None, closing_pr=False,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
157 send_email=True):
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
158 """
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
159 Creates new comment for changeset or pull request.
2478
8eab81115660 white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2443
diff changeset
160 IF status_change is not none this comment is associated with a
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
161 status change of changeset or changesets associated with pull request
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
162
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
163 :param text:
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
164 :param repo:
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
165 :param user:
1675
7c487d2678c7 code refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
166 :param revision:
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
167 :param pull_request:
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
168 :param f_path:
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
169 :param line_no:
2296
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2187
diff changeset
170 :param status_change:
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
171 :param closing_pr:
3257
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
172 :param send_email:
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
173 """
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
174 if not text:
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
175 log.warning('Missing text for comment, skipping...')
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
176 return
2150
a8c9c0094ddf White space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
177
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
178 repo = self._get_repo(repo)
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
179 user = self._get_user(user)
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
180 comment = ChangesetComment()
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
181 comment.repo = repo
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
182 comment.author = user
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
183 comment.text = text
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
184 comment.f_path = f_path
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
185 comment.line_no = line_no
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
186
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
187 if revision:
1677
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1675
diff changeset
188 comment.revision = revision
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
189 elif pull_request:
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
190 pull_request = self.__get_pull_request(pull_request)
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
191 comment.pull_request = pull_request
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
192 else:
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
193 raise Exception('Please specify revision or pull_request_id')
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
194
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
195 Session().add(comment)
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
196 Session().flush()
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
197
3257
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
198 if send_email:
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
199 (subj, body, recipients, notification_type,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
200 email_kwargs, email_subject) = self._get_notification_data(
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
201 repo, comment, user,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
202 comment_text=text,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
203 line_no=line_no,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
204 revision=revision,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
205 pull_request=pull_request,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
206 status_change=status_change,
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
207 closing_pr=closing_pr)
3257
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
208 # create notification objects, and emails
2077
179604334d98 code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
209 NotificationModel().create(
2541
1c2ba03c42b4 Added dynamic data loading for other repo we open pull request against
Marcin Kuzminski <marcin@python-works.com>
parents: 2522
diff changeset
210 created_by=user, subject=subj, body=body,
3257
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
211 recipients=recipients, type_=notification_type,
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
212 email_kwargs=email_kwargs, email_subject=email_subject
2077
179604334d98 code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
213 )
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1681
diff changeset
214
3257
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
215 mention_recipients = set(self._extract_mentions(body))\
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
216 .difference(recipients)
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
217 if mention_recipients:
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
218 email_kwargs.update({'pr_mention': True})
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
219 subj = _('[Mention]') + ' ' + subj
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
220 NotificationModel().create(
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
221 created_by=user, subject=subj, body=body,
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
222 recipients=mention_recipients,
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
223 type_=notification_type,
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
224 email_kwargs=email_kwargs
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
225 )
32a283e5fd0d Don't send notification email for auto-status changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3250
diff changeset
226
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
227 return comment
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
228
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
229 def delete(self, comment):
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
230 """
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
231 Deletes given comment
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
232
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
233 :param comment_id:
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
234 """
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
235 comment = self.__get_changeset_comment(comment)
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
236 Session().delete(comment)
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
237
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
diff changeset
238 return comment
1675
7c487d2678c7 code refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
239
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
240 def get_comments(self, repo_id, revision=None, pull_request=None):
2439
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
241 """
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
242 Get's main comments based on revision or pull_request_id
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
243
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
244 :param repo_id:
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
245 :param revision:
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
246 :param pull_request:
2439
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
247 """
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
248
2439
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
249 q = ChangesetComment.query()\
1675
7c487d2678c7 code refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
250 .filter(ChangesetComment.repo_id == repo_id)\
7c487d2678c7 code refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
251 .filter(ChangesetComment.line_no == None)\
2439
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
252 .filter(ChangesetComment.f_path == None)
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
253 if revision:
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
254 q = q.filter(ChangesetComment.revision == revision)
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
255 elif pull_request:
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
256 pull_request = self.__get_pull_request(pull_request)
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
257 q = q.filter(ChangesetComment.pull_request == pull_request)
2439
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
258 else:
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
259 raise Exception('Please specify revision or pull_request')
2639
f3e039e4dc49 Added created_on column to changeset comments for proper ordering.
Marcin Kuzminski <marcin@python-works.com>
parents: 2541
diff changeset
260 q = q.order_by(ChangesetComment.created_on)
2439
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
261 return q.all()
1675
7c487d2678c7 code refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
262
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
263 def get_inline_comments(self, repo_id, revision=None, pull_request=None):
3430
bbe21df7ad48 notifications changes
Marcin Kuzminski <marcin@python-works.com>
parents: 3257
diff changeset
264 q = Session().query(ChangesetComment)\
1675
7c487d2678c7 code refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
265 .filter(ChangesetComment.repo_id == repo_id)\
1681
1bf03daafaf0 fixes inline comments double entries
Marcin Kuzminski <marcin@python-works.com>
parents: 1677
diff changeset
266 .filter(ChangesetComment.line_no != None)\
2187
b61e540122f2 #415: Adding comment to changeset causes reload
Marcin Kuzminski <marcin@python-works.com>
parents: 2178
diff changeset
267 .filter(ChangesetComment.f_path != None)\
b61e540122f2 #415: Adding comment to changeset causes reload
Marcin Kuzminski <marcin@python-works.com>
parents: 2178
diff changeset
268 .order_by(ChangesetComment.comment_id.asc())\
2439
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
269
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
270 if revision:
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
271 q = q.filter(ChangesetComment.revision == revision)
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
272 elif pull_request:
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
273 pull_request = self.__get_pull_request(pull_request)
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2439
diff changeset
274 q = q.filter(ChangesetComment.pull_request == pull_request)
2439
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
275 else:
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
276 raise Exception('Please specify revision or pull_request_id')
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
277
ad19dfcdb1cc Refactoring of changeset_file_comments for more generic usage. In both It enables sharing code between changeset, and pull requests discussions
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
278 comments = q.all()
1677
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1675
diff changeset
279
1789
17caf4efe15c implements #308 rewrote diffs to enable displaying full diff on each file
Marcin Kuzminski <marcin@python-works.com>
parents: 1734
diff changeset
280 paths = defaultdict(lambda: defaultdict(list))
1675
7c487d2678c7 code refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
281
7c487d2678c7 code refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1670
diff changeset
282 for co in comments:
1677
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1675
diff changeset
283 paths[co.f_path][co.line_no].append(co)
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1675
diff changeset
284 return paths.items()