Skip to content

Commit 36cac48

Browse files
committed
Fixed a bunch of str/bytes issues.
- Legacy-Id: 16341
1 parent 8573cd9 commit 36cac48

12 files changed

Lines changed: 48 additions & 44 deletions

File tree

ietf/doc/mails.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,15 +383,15 @@ def generate_issue_ballot_mail(request, doc, ballot):
383383
def email_iana(request, doc, to, msg, cc=None):
384384
# fix up message and send it with extra info on doc in headers
385385
import email
386-
parsed_msg = email.message_from_string(msg.encode("utf-8"))
386+
parsed_msg = email.message_from_string(msg)
387387
parsed_msg.set_charset('UTF-8')
388388

389389
extra = extra_automation_headers(doc)
390390
extra["Reply-To"] = ["noreply@ietf.org", ]
391391

392392
send_mail_text(request, to,
393393
parsed_msg["From"], parsed_msg["Subject"],
394-
parsed_msg.get_payload().decode(str(parsed_msg.get_charset())),
394+
parsed_msg.get_payload(),
395395
extra=extra,
396396
cc=cc)
397397

ietf/doc/tests_charter.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -399,9 +399,9 @@ def test_submit_charter(self):
399399
# post
400400
prev_rev = charter.rev
401401

402-
latin_1_snippet = '\xe5' * 10
403-
utf_8_snippet = '\xc3\xa5' * 10
404-
test_file = StringIO("Windows line\r\nMac line\rUnix line\n" + latin_1_snippet)
402+
latin_1_snippet = b'\xe5' * 10
403+
utf_8_snippet = b'\xc3\xa5' * 10
404+
test_file = StringIO("Windows line\r\nMac line\rUnix line\n" + latin_1_snippet.decode('latin-1'))
405405
test_file.name = "unnamed"
406406

407407
r = self.client.post(url, dict(txt=test_file))
@@ -413,7 +413,7 @@ def test_submit_charter(self):
413413

414414
with open(os.path.join(self.charter_dir, charter.canonical_name() + "-" + charter.rev + ".txt")) as f:
415415
self.assertEqual(f.read(),
416-
"Windows line\nMac line\nUnix line\n" + utf_8_snippet)
416+
"Windows line\nMac line\nUnix line\n" + utf_8_snippet.decode('utf_8'))
417417

418418
def test_submit_initial_charter(self):
419419
group = GroupFactory(type_id='wg',acronym='mars',list_email='mars-wg@ietf.org')

ietf/doc/views_review.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -620,13 +620,13 @@ def complete_review(request, name, assignment_id):
620620

621621
# save file on disk
622622
if review_submission == "upload":
623-
encoded_content = form.cleaned_data['review_file']
623+
content = form.cleaned_data['review_file']
624624
else:
625-
encoded_content = form.cleaned_data['review_content'].encode("utf-8")
625+
content = form.cleaned_data['review_content']
626626

627627
filename = os.path.join(review.get_file_path(), '{}.txt'.format(review.name, review.rev))
628-
with open(filename, 'wb') as destination:
629-
destination.write(encoded_content)
628+
with open(filename, 'w', encoding='utf-8') as destination:
629+
destination.write(content)
630630

631631
completion_datetime = datetime.datetime.now()
632632
if "completion_date" in form.cleaned_data:
@@ -699,7 +699,7 @@ def complete_review(request, name, assignment_id):
699699
cc=form.cleaned_data["cc"],
700700
body = render_to_string("review/completed_review.txt", {
701701
"assignment": assignment,
702-
"content": encoded_content.decode("utf-8"),
702+
"content": content,
703703
}),
704704
)
705705
msg.related_groups.add(*related_groups)

ietf/ietfauth/htpasswd.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1+
# Copyright The IETF Trust 2016-2019, All Rights Reserved
2+
13
import subprocess, hashlib
4+
from django.utils.encoding import force_bytes
25

36
from django.conf import settings
47

58
def update_htpasswd_file(username, password):
69
if getattr(settings, 'USE_PYTHON_HTDIGEST', None):
710
pass_file = settings.HTPASSWD_FILE
811
realm = settings.HTDIGEST_REALM
9-
prefix = '%s:%s:' % (username, realm)
10-
key = hashlib.md5(prefix + password).hexdigest()
11-
f = open(pass_file, 'r+')
12+
prefix = force_bytes('%s:%s:' % (username, realm))
13+
key = force_bytes(hashlib.md5(prefix + force_bytes(password)).hexdigest())
14+
f = open(pass_file, 'r+b')
1215
pos = f.tell()
1316
line = f.readline()
1417
while line:
@@ -17,7 +20,7 @@ def update_htpasswd_file(username, password):
1720
pos=f.tell()
1821
line = f.readline()
1922
f.seek(pos)
20-
f.write('%s%s\n' % (prefix, key))
23+
f.write(b'%s%s\n' % (prefix, key))
2124
f.close()
2225
else:
2326
p = subprocess.Popen([settings.HTPASSWD_COMMAND, "-b", settings.HTPASSWD_FILE, username, password], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

ietf/meeting/models.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ def build_timeslices(self):
255255
days.sort()
256256
for ymd in time_slices:
257257
time_slices[ymd].sort()
258-
slots[ymd].sort(lambda x,y: cmp(x.time, y.time))
258+
slots[ymd].sort(key=lambda x: x.time)
259259
return days,time_slices,slots
260260

261261
# this functions makes a list of timeslices and rooms, and
@@ -1080,22 +1080,22 @@ def json_dict(self, host_scheme):
10801080
sess1['group_href'] = urljoin(host_scheme, self.group.json_url())
10811081
if self.group.parent is not None:
10821082
sess1['area'] = self.group.parent.acronym.upper()
1083-
sess1['description'] = self.group.name.encode('utf-8')
1083+
sess1['description'] = self.group.name
10841084
sess1['group_id'] = str(self.group.pk)
10851085
reslist = []
10861086
for r in self.resources.all():
10871087
reslist.append(r.json_dict(host_scheme))
10881088
sess1['resources'] = reslist
10891089
sess1['session_id'] = str(self.pk)
1090-
sess1['name'] = self.name.encode('utf-8')
1091-
sess1['title'] = self.short_name.encode('utf-8')
1092-
sess1['short_name'] = self.short_name.encode('utf-8')
1090+
sess1['name'] = self.name
1091+
sess1['title'] = self.short_name
1092+
sess1['short_name'] = self.short_name
10931093
sess1['bof'] = str(self.group.is_bof())
1094-
sess1['agenda_note'] = self.agenda_note.encode('utf-8')
1094+
sess1['agenda_note'] = self.agenda_note
10951095
sess1['attendees'] = str(self.attendees)
1096-
sess1['status'] = self.status.name.encode('utf-8')
1096+
sess1['status'] = self.status.name
10971097
if self.comments is not None:
1098-
sess1['comments'] = self.comments.encode('utf-8')
1098+
sess1['comments'] = self.comments
10991099
sess1['requested_time'] = self.requested.strftime("%Y-%m-%d")
11001100
# the related person object sometimes does not exist in the dataset.
11011101
try:

ietf/message/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def send_scheduled_message_from_send_queue(send_queue):
4141
# make body a real message so we can parse it
4242
body = ("MIME-Version: 1.0\r\nContent-Type: %s\r\n" % message.content_type) + body
4343

44-
msg = email.message_from_string(body.encode("utf-8"))
44+
msg = email.message_from_string(body)
4545
send_mail_mime(None, message.to, message.frm, message.subject,
4646
msg, cc=message.cc, bcc=message.bcc)
4747

ietf/nomcom/fields.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Copyright The IETF Trust 2012-2019, All Rights Reserved
12
from django.conf import settings
23
from django.db import models
34
from django.utils.encoding import smart_str
@@ -19,7 +20,7 @@ def pre_save(self, instance, add):
1920
raise ValueError("Trying to read the NomCom public key: " + str(e))
2021

2122
command = "%s smime -encrypt -in /dev/stdin %s" % (settings.OPENSSL_COMMAND, cert_file)
22-
code, out, error = pipe(command, comments)
23+
code, out, error = pipe(command, comments.encode())
2324
if code != 0:
2425
log("openssl error: %s:\n Error %s: %s" %(command, code, error))
2526
if not error:

ietf/nomcom/test_data.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# Copyright The IETF Trust 2012-2019, All Rights Reserved
12
import tempfile
23
import os
34

@@ -38,7 +39,7 @@
3839

3940
def generate_cert():
4041
"""Function to generate cert"""
41-
config = """
42+
config = b"""
4243
[ req ]
4344
distinguished_name = req_distinguished_name
4445
string_mask = utf8only
@@ -89,7 +90,7 @@ def check_comments(encryped, plain, privatekey_file):
8990

9091
decrypted_file.close()
9192
encrypted_file.close()
92-
decrypted_comments = open(decrypted_file.name, 'r').read().decode('utf8')
93+
decrypted_comments = open(decrypted_file.name, 'r').read()
9394
os.unlink(encrypted_file.name)
9495
os.unlink(decrypted_file.name)
9596

ietf/nomcom/utils.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def get_user_email(user):
8787
return user._email_cache
8888

8989
def get_hash_nominee_position(date, nominee_position_id):
90-
return hashlib.md5('%s%s%s' % (settings.SECRET_KEY, date, nominee_position_id)).hexdigest()
90+
return hashlib.md5(('%s%s%s' % (settings.SECRET_KEY, date, nominee_position_id)).encode()).hexdigest()
9191

9292

9393
def initialize_templates_for_group(group):
@@ -160,7 +160,7 @@ def retrieve_nomcom_private_key(request, year):
160160

161161
command = "%s bf -d -in /dev/stdin -k \"%s\" -a"
162162
code, out, error = pipe(command % (settings.OPENSSL_COMMAND,
163-
settings.SECRET_KEY), private_key)
163+
settings.SECRET_KEY), private_key.encode())
164164
if code != 0:
165165
log("openssl error: %s:\n Error %s: %s" %(command, code, error))
166166
return out
@@ -399,9 +399,8 @@ def make_nomineeposition_for_newperson(nomcom, candidate_name, candidate_email,
399399
def getheader(header_text, default="ascii"):
400400
"""Decode the specified header"""
401401

402-
headers = decode_header(header_text)
403-
header_sections = [str(text, charset or default)
404-
for text, charset in headers]
402+
tuples = decode_header(header_text)
403+
header_sections = [ text.decode(charset or default) if isinstance(text, bytes) else text for text, charset in tuples]
405404
return "".join(header_sections)
406405

407406

ietf/review/mailarch.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from pyquery import PyQuery
1212

1313
from django.conf import settings
14+
from django.utils.encoding import force_bytes
1415

1516
def list_name_from_email(list_email):
1617
if not list_email.endswith("@ietf.org"):
@@ -23,9 +24,9 @@ def hash_list_message_id(list_name, msgid):
2324
# https://www.mail-archive.com/faq.html#listserver except the list
2425
# name (without "@ietf.org") is used instead of the full address,
2526
# and rightmost "=" signs are (optionally) stripped
26-
sha = hashlib.sha1(msgid)
27-
sha.update(list_name)
28-
return base64.urlsafe_b64encode(sha.digest()).rstrip("=")
27+
sha = hashlib.sha1(force_bytes(msgid))
28+
sha.update(force_bytes(list_name))
29+
return base64.urlsafe_b64encode(sha.digest()).rstrip(b"=")
2930

3031
def construct_query_urls(review_req, query=None):
3132
list_name = list_name_from_email(review_req.team.list_email)

0 commit comments

Comments
 (0)