Review Board

beta

Move to using a set instead of a dict when computing e-mail recipients

Updated 10 months ago

Christian Hammond Reviewers
trunk reviewboard
None Review Board SVN
This is some cleanup code from Jonathan Ellis's e-mail patch (http://reviews.review-board.org/r/208/) that moves our e-mail recipient code to using a set instead of a dict.
Unit tests pass.

Diff revision 1 (Latest)

  1. /trunk/reviewboard/reviews/email.py: 17 changes [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ]
/trunk/reviewboard/reviews/email.py
Revision 1208 New Change
55
    """
55
    """
56
    current_site = Site.objects.get(pk=settings.SITE_ID)
56
    current_site = Site.objects.get(pk=settings.SITE_ID)
57
57
58
    from_email = get_email_address_for_user(user)
58
    from_email = get_email_address_for_user(user)
59
59
60
    recipient_table = {
60
    recipients = set([from_email])
61
        from_email: 1,
62
    }
63
61
64
    if review_request.submitter.is_active:
62
    if review_request.submitter.is_active:
65
        recipient_table[get_email_address_for_user(review_request.submitter)] = 1
63
        recipients.add(get_email_address_for_user(review_request.submitter))
66
64
67
    for u in review_request.target_people.filter(is_active=True):
65
    for u in review_request.target_people.filter(is_active=True):
68
        recipient_table[get_email_address_for_user(u)] = 1
66
        recipients.add(get_email_address_for_user(u))
69
67
70
    for group in review_request.target_groups.all():
68
    for group in review_request.target_groups.all():
71
        for address in get_email_addresses_for_group(group):
69
        for address in get_email_addresses_for_group(group):
72
            recipient_table[address] = 1
70
            recipients.add(address)
73
71
74
    for profile in review_request.starred_by.all():
72
    for profile in review_request.starred_by.all():
75
        if profile.user.is_active:
73
        if profile.user.is_active:
76
            recipient_table[get_email_address_for_user(profile.user)] = 1
74
            recipients.add(get_email_address_for_user(profile.user))
77
75
78
    if extra_recipients:
76
    if extra_recipients:
79
        for recipient in extra_recipients:
77
        for recipient in extra_recipients:
80
            if recipient.is_active:
78
            if recipient.is_active:
81
                recipient_table[get_email_address_for_user(recipient)] = 1
79
                recipients.add(get_email_address_for_user(recipient))
82
80
83
    recipient_list = recipient_table.keys()
81
    context['user'] = user
84
    context['domain'] = current_site.domain
82
    context['domain'] = current_site.domain
85
    context['domain_method'] = settings.DOMAIN_METHOD
83
    context['domain_method'] = settings.DOMAIN_METHOD
86
    context['review_request'] = review_request
84
    context['review_request'] = review_request
87
    body = render_to_string(template_name, context)
85
    body = render_to_string(template_name, context)
88
86
89
    message = SpiffyEmailMessage(subject.strip(), body, from_email,
87
    message = SpiffyEmailMessage(subject.strip(), body, from_email,
90
                                 recipient_list, in_reply_to)
88
                                 recipients, in_reply_to)
91
    message.send()
89
    message.send()
92
90
93
    return message.message_id
91
    return message.message_id
94
92
95
93
156
    review_request.save()
154
    review_request.save()
157
155
158
156
159
def mail_review(user, review):
157
def mail_review(user, review):
160
    """Sends an e-mail representing the supplied review."""
158
    """Sends an e-mail representing the supplied review."""
161
    if not review.review_request.public:
159
    review_request = review.review_request
160
161
    if not review_request.public:
162
        return
162
        return
163
163
164
    review.ordered_comments = \
164
    review.ordered_comments = \
165
        review.comments.order_by('filediff', 'first_line')
165
        review.comments.order_by('filediff', 'first_line')
166
166
167
    review.email_message_id = \
167
    review.email_message_id = \
168
        send_review_mail(user,
168
        send_review_mail(user,
169
                         review.review_request,
169
                         review_request,
170
                         u"Re: Review Request: %s" %
170
                         u"Re: Review Request: %s" % review_request.summary,
171
                         review.review_request.summary,
171
                         review_request.email_message_id,
172
                         review.review_request.email_message_id,
173
                         None,
172
                         None,
174
                         'reviews/review_email.txt',
173
                         'reviews/review_email.txt',
175
                         {'review': review})
174
                         {'review': review})
176
    review.time_emailed = datetime.now()
175
    review.time_emailed = datetime.now()
177
    review.save()
176
    review.save()
178
177
179
178
180
def mail_reply(user, reply):
179
def mail_reply(user, reply):
181
    """
180
    """
182
    Sends an e-mail representing the supplied reply to a review.
181
    Sends an e-mail representing the supplied reply to a review.
183
    """
182
    """
184
    review = reply.base_reply_to
183
    review = reply.base_reply_to
184
    review_request = review.review_request
185
185
186
    if not review.review_request.public:
186
    if not review_request.public:
187
        return
187
        return
188
188
189
    reply.email_message_id = \
189
    reply.email_message_id = \
190
        send_review_mail(user,
190
        send_review_mail(user,
191
                         review.review_request,
191
                         review_request,
192
                         u"Re: Review Request: %s" %
192
                         u"Re: Review Request: %s" % review_request.summary,
193
                         review.review_request.summary,
194
                         review.email_message_id,
193
                         review.email_message_id,
195
                         harvest_people_from_review(review),
194
                         harvest_people_from_review(review),
196
                         'reviews/reply_email.txt',
195
                         'reviews/reply_email.txt',
197
                         {'review': review,
196
                         {'review': review,
198
                          'reply': reply})
197
                          'reply': reply})
199
    reply.time_emailed = datetime.now()
198
    reply.time_emailed = datetime.now()
200
    reply.save()
199
    reply.save()
  1. /trunk/reviewboard/reviews/email.py: 17 changes [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ]