Skip to content

Commit bc05e7a

Browse files
committed
Refactored many instances of msg.get_payload(decode=True).decode('utf-8') and similar to get_payload_text(msg), which uses msg.get_charset() to get the actual charset to do the decoding, in a consistent manner. Also removed some instances of force_str, but more remain.
- Legacy-Id: 17807
1 parent 0bc19f0 commit bc05e7a

File tree

23 files changed

+111
-118
lines changed

23 files changed

+111
-118
lines changed

ietf/doc/mails.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
from django.utils.html import strip_tags
1111
from django.conf import settings
1212
from django.urls import reverse as urlreverse
13-
from django.utils.encoding import force_str, force_text
13+
from django.utils.encoding import force_text
1414

1515
import debug # pyflakes:ignore
1616

17-
from ietf.utils.mail import send_mail, send_mail_text, get_payload
17+
from ietf.utils.mail import send_mail, send_mail_text
1818
from ietf.ipr.utils import iprs_from_docs, related_docs
1919
from ietf.doc.models import WriteupDocEvent, LastCallDocEvent, DocAlias, ConsensusDocEvent
2020
from ietf.doc.utils import needed_ballot_positions
@@ -387,15 +387,15 @@ def generate_issue_ballot_mail(request, doc, ballot):
387387
def email_iana(request, doc, to, msg, cc=None):
388388
# fix up message and send it with extra info on doc in headers
389389
import email
390-
parsed_msg = email.message_from_string(force_str(msg))
390+
parsed_msg = email.message_from_string(msg)
391391
parsed_msg.set_charset('UTF-8')
392392

393393
extra = extra_automation_headers(doc)
394394
extra["Reply-To"] = ["noreply@ietf.org", ]
395395

396396
send_mail_text(request, to,
397397
parsed_msg["From"], parsed_msg["Subject"],
398-
get_payload(parsed_msg),
398+
parsed_msg.get_payload(),
399399
extra=extra,
400400
cc=cc)
401401

ietf/doc/tests_ballot.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from ietf.person.models import Person, PersonalApiKey
2424
from ietf.person.factories import PersonFactory
2525
from ietf.utils.test_utils import TestCase, login_testing_unauthorized
26-
from ietf.utils.mail import outbox, empty_outbox, get_payload
26+
from ietf.utils.mail import outbox, empty_outbox, get_payload_text
2727
from ietf.utils.text import unwrap
2828

2929

@@ -174,7 +174,7 @@ def test_api_set_position(self):
174174
self.assertEqual(len(outbox), mailbox_before + 1)
175175
m = outbox[-1]
176176
self.assertIn('COMMENT', m['Subject'])
177-
self.assertIn('New comment', get_payload(m))
177+
self.assertIn('New comment', get_payload_text(m))
178178

179179

180180
def test_edit_position_as_secretary(self):
@@ -460,11 +460,11 @@ def test_issue_ballot(self):
460460
self.assertTrue('drafts-eval@' in outbox[-1]['To'])
461461
self.assertTrue('X-IETF-Draft-string' in outbox[-1])
462462
if case=='none':
463-
self.assertNotIn('call expire', outbox[-1].get_payload(decode=True).decode("utf-8"))
463+
self.assertNotIn('call expire', get_payload_text(outbox[-1]))
464464
elif case=='past':
465-
self.assertIn('call expired', outbox[-1].get_payload(decode=True).decode("utf-8"))
465+
self.assertIn('call expired', get_payload_text(outbox[-1]))
466466
else:
467-
self.assertIn('call expires', outbox[-1].get_payload(decode=True).decode("utf-8"))
467+
self.assertIn('call expires', get_payload_text(outbox[-1]))
468468
self.client.logout()
469469

470470

@@ -797,7 +797,7 @@ def test_make_last_call(self):
797797
self.assertTrue("ietf-announce@" in outbox[-2]['To'])
798798
for prefix in ['draft-ietf-mars-test','mars-chairs','aread']:
799799
self.assertTrue(prefix+"@" in outbox[-2]['Cc'])
800-
self.assertIn("The following IPR Declarations", get_payload(outbox[-2]))
800+
self.assertIn("The following IPR Declarations", get_payload_text(outbox[-2]))
801801

802802
self.assertTrue("Last Call" in outbox[-1]['Subject'])
803803
self.assertTrue("drafts-lastcall@icann.org" in outbox[-1]['To'])

ietf/doc/tests_charter.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from ietf.iesg.models import TelechatDate
2626
from ietf.person.models import Person
2727
from ietf.utils.test_utils import TestCase
28-
from ietf.utils.mail import outbox, empty_outbox, get_payload
28+
from ietf.utils.mail import outbox, empty_outbox, get_payload_text
2929
from ietf.utils.test_utils import login_testing_unauthorized
3030

3131
class ViewCharterTests(TestCase):
@@ -187,7 +187,7 @@ def find_event(t):
187187
self.assertIn("Internal WG Review", outbox[-3]['Subject'])
188188
self.assertIn("iab@", outbox[-3]['To'])
189189
self.assertIn("iesg@", outbox[-3]['To'])
190-
body = get_payload(outbox[-3])
190+
body = get_payload_text(outbox[-3])
191191
for word in ["A new IETF WG", "Chairs", "Ames Man <ameschairman@example.org>",
192192
"Secretaries", "Secretary <amessecretary@example.org>",
193193
"Assigned Area Director", "Areað Irector <aread@example.org>",
@@ -198,13 +198,13 @@ def find_event(t):
198198

199199
self.assertIn("state changed", outbox[-2]['Subject'].lower())
200200
self.assertIn("iesg-secretary@", outbox[-2]['To'])
201-
body = get_payload(outbox[-2])
201+
body = get_payload_text(outbox[-2])
202202
for word in ["WG", "Charter", ]:
203203
self.assertIn(word, body)
204204

205205
self.assertIn("State Update Notice", outbox[-1]['Subject'])
206206
self.assertIn("ames-chairs@", outbox[-1]['To'])
207-
body = get_payload(outbox[-1])
207+
body = get_payload_text(outbox[-1])
208208
for word in ["State changed", "Datatracker URL", ]:
209209
self.assertIn(word, body)
210210

@@ -224,7 +224,7 @@ def find_event(t):
224224
empty_outbox()
225225
r = self.client.post(url, dict(charter_state=str(State.objects.get(used=True,type="charter",slug="intrev").pk), message="test"))
226226
self.assertEqual(r.status_code, 302)
227-
self.assertTrue("A new charter" in get_payload(outbox[-3]))
227+
self.assertTrue("A new charter" in get_payload_text(outbox[-3]))
228228

229229
def test_change_rg_state(self):
230230

@@ -245,7 +245,7 @@ def test_change_rg_state(self):
245245
self.assertIn("Internal RG Review", outbox[-3]['Subject'])
246246
self.assertIn("iab@", outbox[-3]['To'])
247247
self.assertIn("irsg@", outbox[-3]['To'])
248-
body = get_payload(outbox[-3])
248+
body = get_payload_text(outbox[-3])
249249
for word in ["A new IRTF RG",
250250
"Mailing list", "somerg@ietf.org",
251251
"Charter", "Milestones"]:
@@ -254,13 +254,13 @@ def test_change_rg_state(self):
254254

255255
self.assertIn("state changed", outbox[-2]['Subject'].lower())
256256
self.assertIn("iesg-secretary@", outbox[-2]['To'])
257-
body = get_payload(outbox[-2])
257+
body = get_payload_text(outbox[-2])
258258
for word in ["RG", "Charter", ]:
259259
self.assertIn(word, body)
260260

261261
self.assertIn("State Update Notice", outbox[-1]['Subject'])
262262
self.assertIn("somerg-chairs@", outbox[-1]['To'])
263-
body = get_payload(outbox[-1])
263+
body = get_payload_text(outbox[-1])
264264
for word in ["State changed", "Datatracker URL", ]:
265265
self.assertIn(word, body)
266266

@@ -793,15 +793,15 @@ def test_approve(self):
793793
#
794794
self.assertTrue("approved" in outbox[0]['Subject'].lower())
795795
self.assertTrue("iesg-secretary" in outbox[0]['To'])
796-
body = get_payload(outbox[0])
796+
body = get_payload_text(outbox[0])
797797
for word in ["WG", "/wg/ames/about/",
798798
"Charter", "/doc/charter-ietf-ames/", ]:
799799
self.assertIn(word, body)
800800
#
801801
self.assertTrue("WG Action" in outbox[1]['Subject'])
802802
self.assertTrue("ietf-announce" in outbox[1]['To'])
803803
self.assertTrue("ames-wg@ietf.org" in outbox[1]['Cc'])
804-
body = get_payload(outbox[1])
804+
body = get_payload_text(outbox[1])
805805
for word in ["Chairs", "Ames Man <ameschairman@example.org>",
806806
"Secretaries", "Secretary <amessecretary@example.org>",
807807
"Assigned Area Director", "Areað Irector <aread@example.org>",

ietf/doc/tests_conflict_review.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from ietf.iesg.models import TelechatDate
2323
from ietf.name.models import StreamName
2424
from ietf.utils.test_utils import TestCase
25-
from ietf.utils.mail import outbox, empty_outbox, get_payload
25+
from ietf.utils.mail import outbox, empty_outbox, get_payload_text
2626
from ietf.utils.test_utils import login_testing_unauthorized
2727

2828

@@ -302,9 +302,9 @@ def approve_test_helper(self,approve_type):
302302
self.assertIn('iana@', outbox[0]['Cc'])
303303

304304
if approve_type == 'appr-noprob':
305-
self.assertIn( 'IESG has no problem', ''.join(wrap(get_payload(outbox[0]), 2**16)))
305+
self.assertIn( 'IESG has no problem', ''.join(wrap(get_payload_text(outbox[0]), 2**16)))
306306
else:
307-
self.assertIn( 'NOT be published', ''.join(wrap(get_payload(outbox[0]), 2**16)))
307+
self.assertIn( 'NOT be published', ''.join(wrap(get_payload_text(outbox[0]), 2**16)))
308308

309309

310310
def test_approve_reqnopub(self):

ietf/doc/tests_draft.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from ietf.meeting.models import Meeting, MeetingTypeName
3131
from ietf.iesg.models import TelechatDate
3232
from ietf.utils.test_utils import login_testing_unauthorized
33-
from ietf.utils.mail import outbox, empty_outbox, get_payload
33+
from ietf.utils.mail import outbox, empty_outbox, get_payload_text
3434
from ietf.utils.test_utils import TestCase
3535

3636

@@ -387,7 +387,7 @@ def test_edit_telechat_date(self):
387387
data["telechat_date"] = next_week.isoformat()
388388
r = self.client.post(url,data)
389389
self.assertEqual(r.status_code, 302)
390-
self.assertIn("may not leave enough time", get_payload(outbox[-1]))
390+
self.assertIn("may not leave enough time", get_payload_text(outbox[-1]))
391391

392392
def test_start_iesg_process_on_draft(self):
393393

ietf/doc/tests_irsg_ballot.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from django.urls import reverse as urlreverse
1313

14-
from ietf.utils.mail import outbox, empty_outbox, get_payload
14+
from ietf.utils.mail import outbox, empty_outbox, get_payload_text
1515
from ietf.utils.test_utils import TestCase, unicontent, login_testing_unauthorized
1616
from ietf.doc.factories import IndividualDraftFactory, WgDraftFactory, RgDraftFactory, RgRfcFactory, BallotDocEventFactory, IRSGBallotDocEventFactory, BallotPositionDocEventFactory
1717
from ietf.doc.models import BallotDocEvent, BallotPositionDocEvent
@@ -363,7 +363,7 @@ def test_take_and_email_position(self):
363363
r = self.client.post(url, dict(cc_choices=['doc_authors','doc_group_chairs','doc_group_mail_list'], body="Stuff"))
364364
self.assertEqual(r.status_code, 302)
365365
self.assertEqual(len(outbox),1)
366-
self.assertNotIn('discuss-criteria', get_payload(outbox[0]))
366+
self.assertNotIn('discuss-criteria', get_payload_text(outbox[0]))
367367

368368
def test_close_ballot(self):
369369
draft = RgDraftFactory()

ietf/doc/tests_review.py

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,23 @@
2020
import debug # pyflakes:ignore
2121

2222
import ietf.review.mailarch
23+
2324
from ietf.doc.factories import ( NewRevisionDocEventFactory, IndividualDraftFactory, WgDraftFactory,
24-
WgRfcFactory, ReviewFactory, DocumentFactory)
25-
from ietf.doc.models import DocumentAuthor, RelatedDocument, DocEvent, ReviewRequestDocEvent, ReviewAssignmentDocEvent
25+
WgRfcFactory, ReviewFactory, DocumentFactory)
26+
from ietf.doc.models import ( DocumentAuthor, RelatedDocument, DocEvent, ReviewRequestDocEvent,
27+
ReviewAssignmentDocEvent, )
2628
from ietf.group.factories import RoleFactory, ReviewTeamFactory
2729
from ietf.group.models import Group
2830
from ietf.message.models import Message
29-
from ietf.name.models import ReviewResultName, ReviewRequestStateName, ReviewAssignmentStateName, \
30-
ReviewTypeName
31+
from ietf.name.models import ReviewResultName, ReviewRequestStateName, ReviewAssignmentStateName, ReviewTypeName
32+
from ietf.person.factories import PersonFactory
3133
from ietf.person.models import Email, Person
3234
from ietf.review.factories import ReviewRequestFactory, ReviewAssignmentFactory
33-
from ietf.review.models import (ReviewRequest, ReviewerSettings,
34-
ReviewWish, NextReviewerInTeam)
35+
from ietf.review.models import ReviewRequest, ReviewerSettings, ReviewWish, NextReviewerInTeam
3536
from ietf.review.policies import get_reviewer_queue_policy
36-
37-
from ietf.utils.test_utils import TestCase
37+
from ietf.utils.mail import outbox, empty_outbox, parseaddr, on_behalf_of, get_payload_text
3838
from ietf.utils.test_utils import login_testing_unauthorized, reload_db_objects
39-
from ietf.utils.mail import outbox, empty_outbox, parseaddr, on_behalf_of
40-
from ietf.person.factories import PersonFactory
39+
from ietf.utils.test_utils import TestCase
4140

4241
class ReviewTests(TestCase):
4342
def setUp(self):
@@ -228,7 +227,7 @@ def test_close_request(self):
228227
self.assertIn('<reviewer@example.com>', outbox[0]["To"])
229228
self.assertNotIn("<reviewsecretary@example.com>", outbox[0]["To"])
230229
self.assertIn("reviewsecretary2@example.com", outbox[0]["CC"])
231-
mail_content = outbox[0].get_payload(decode=True).decode("utf-8").lower()
230+
mail_content = get_payload_text(outbox[0])
232231
self.assertIn("closed", mail_content)
233232
self.assertIn("review_request_close_comment", mail_content)
234233

@@ -330,7 +329,7 @@ def test_assign_reviewer(self):
330329

331330
self.assertEqual(len(outbox), 1)
332331
self.assertEqual('"Some Reviewer" <reviewer@example.com>', outbox[0]["To"])
333-
message = outbox[0].get_payload(decode=True).decode("utf-8")
332+
message = get_payload_text(outbox[0])
334333
self.assertIn("Pages: {}".format(doc.pages), message )
335334
self.assertIn("{} has assigned {}".format(secretary.person.ascii, reviewer.person.ascii), message)
336335
self.assertIn("This team has completed other reviews", message)
@@ -423,7 +422,7 @@ def test_reject_reviewer_assignment(self):
423422
self.assertEqual(len(outbox), 1)
424423
self.assertIn(assignment.reviewer.address, outbox[0]["To"])
425424
self.assertNotIn("<reviewsecretary@example.com>", outbox[0]["To"])
426-
self.assertTrue("Test message" in outbox[0].get_payload(decode=True).decode("utf-8"))
425+
self.assertTrue("Test message" in get_payload_text(outbox[0]))
427426

428427
# try again, but now with an expired review request, which should not be allowed (#2277)
429428
assignment.state_id = 'assigned'
@@ -645,7 +644,7 @@ def test_complete_review_upload_content(self):
645644
self.assertEqual(len(outbox), 1)
646645
self.assertIn(assignment.review_request.team.list_email, outbox[0]["To"])
647646
self.assertIn(assignment.reviewer.role_set.filter(group=assignment.review_request.team,name='reviewer').first().person.plain_name(), parseaddr(outbox[0]["From"])[0] )
648-
self.assertIn("This is a review", outbox[0].get_payload(decode=True).decode("utf-8"))
647+
self.assertIn("This is a review", get_payload_text(outbox[0]))
649648

650649
self.assertIn(settings.MAILING_LIST_ARCHIVE_URL, assignment.review.external_url)
651650

@@ -658,7 +657,7 @@ def test_complete_review_upload_content(self):
658657
self.assertEqual(parseaddr(outbox[0]["To"]), parseaddr(message.to))
659658
self.assertEqual(parseaddr(outbox[0]["From"]), parseaddr(on_behalf_of(message.frm)))
660659
self.assertEqual(parseaddr(outbox[0]["Reply-To"]), parseaddr(message.frm))
661-
self.assertEqual(outbox[0].get_payload(decode=True).decode(str(outbox[0].get_charset())), message.body)
660+
self.assertEqual(get_payload_text(outbox[0]), message.body)
662661

663662
# check the review document page
664663
url = urlreverse('ietf.doc.views_doc.document_main', kwargs={ "name": assignment.review.name })
@@ -699,7 +698,7 @@ def test_complete_review_enter_content(self):
699698

700699
self.assertEqual(len(outbox), 1)
701700
self.assertIn(assignment.review_request.team.list_email, outbox[0]["To"])
702-
self.assertIn("This is a review", outbox[0].get_payload(decode=True).decode("utf-8"))
701+
self.assertIn("This is a review", get_payload_text(outbox[0]))
703702

704703
self.assertIn(settings.MAILING_LIST_ARCHIVE_URL, assignment.review.external_url)
705704

@@ -740,7 +739,7 @@ def test_complete_review_enter_content_by_secretary(self):
740739

741740
self.assertEqual(len(outbox), 1)
742741
self.assertIn(assignment.review_request.team.list_email, outbox[0]["To"])
743-
self.assertIn("This is a review", outbox[0].get_payload(decode=True).decode("utf-8"))
742+
self.assertIn("This is a review", get_payload_text(outbox[0]))
744743

745744
self.assertIn(settings.MAILING_LIST_ARCHIVE_URL, assignment.review.external_url)
746745

@@ -767,7 +766,7 @@ def test_complete_notify_ad_because_team_settings(self):
767766

768767
self.assertEqual(len(outbox), 2)
769768
self.assertIn('Has Issues', outbox[-1]['Subject'])
770-
self.assertIn('settings indicated', outbox[-1].get_payload(decode=True).decode("utf-8"))
769+
self.assertIn('settings indicated', get_payload_text(outbox[-1]))
771770

772771
def test_complete_notify_ad_because_checkbox(self):
773772
assignment, url = self.setup_complete_review_test()
@@ -791,7 +790,7 @@ def test_complete_notify_ad_because_checkbox(self):
791790

792791
self.assertEqual(len(outbox), 2)
793792
self.assertIn('Has Issues', outbox[-1]['Subject'])
794-
self.assertIn('reviewer indicated', outbox[-1].get_payload(decode=True).decode("utf-8"))
793+
self.assertIn('reviewer indicated', get_payload_text(outbox[-1]))
795794

796795
@patch('requests.get')
797796
def test_complete_review_link_to_mailing_list(self, mock):
@@ -908,7 +907,7 @@ def test_partially_complete_review(self):
908907

909908
self.assertTrue(assignment.review_request.team.list_email in outbox[1]["To"])
910909
self.assertTrue("partial review" in outbox[1]["Subject"].lower())
911-
body = outbox[1].get_payload(decode=True).decode("utf-8")
910+
body = get_payload_text(outbox[1])
912911
self.assertTrue("This is a review" in body)
913912
# This review has a line longer than 80, but less than 100; it should
914913
# not be wrapped.
@@ -941,7 +940,7 @@ def test_partially_complete_review(self):
941940

942941
# This review has a line longer than 100; it should be wrapped to less
943942
# than 80.
944-
body = outbox[2].get_payload(decode=True).decode("utf-8")
943+
body = get_payload_text(outbox[2])
945944
self.assertIn('really, really, really', body)
946945
self.assertTrue(all( len(line) <= 80 for line in body.splitlines() ))
947946

ietf/group/tests_info.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from ietf.person.models import Person, Email
3636
from ietf.person.factories import PersonFactory
3737
from ietf.review.factories import ReviewRequestFactory, ReviewAssignmentFactory
38-
from ietf.utils.mail import outbox, empty_outbox
38+
from ietf.utils.mail import outbox, empty_outbox, get_payload_text
3939
from ietf.utils.test_utils import login_testing_unauthorized, TestCase, unicontent, reload_db_objects
4040

4141
def group_urlreverse_list(group, viewname):
@@ -629,7 +629,7 @@ def test_edit_info(self):
629629
self.assertTrue('Personnel change' in outbox[0]['Subject'])
630630
for prefix in ['ad1','ad2','aread','marschairman','marsdelegate']:
631631
self.assertTrue(prefix+'@' in outbox[0]['To'])
632-
self.assertTrue(outbox[0].get_payload(decode=True).decode(str(outbox[0].get_charset())).startswith('Sec Retary'))
632+
self.assertTrue(get_payload_text(outbox[0]).startswith('Sec Retary'))
633633

634634

635635
def test_edit_field(self):

ietf/group/views.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@
111111

112112

113113
from ietf.name.models import ReviewAssignmentStateName
114-
from ietf.utils.mail import send_mail_text, parse_preformatted, get_payload
114+
from ietf.utils.mail import send_mail_text, parse_preformatted
115115

116116
from ietf.ietfauth.utils import user_is_person
117117
from ietf.dbtemplate.models import DBTemplate
@@ -1704,7 +1704,7 @@ def should_be_replicated_in_last_call_section(r):
17041704

17051705
(msg,_,_) = parse_preformatted(partial_msg)
17061706

1707-
body = get_payload(msg)
1707+
body = msg.get_payload()
17081708
subject = msg['Subject']
17091709

17101710
form = EmailOpenAssignmentsForm(initial={

0 commit comments

Comments
 (0)