From mboxrd@z Thu Jan  1 00:00:00 1970
Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org)
	by finch.gentoo.org with esmtp (Exim 4.60)
	(envelope-from <gentoo-commits+bounces-317638-garchives=archives.gentoo.org@lists.gentoo.org>)
	id 1PqLmH-0004II-4b
	for garchives@archives.gentoo.org; Fri, 18 Feb 2011 08:33:25 +0000
Received: from pigeon.gentoo.org (localhost [127.0.0.1])
	by pigeon.gentoo.org (Postfix) with SMTP id 80E23E0630;
	Fri, 18 Feb 2011 08:33:15 +0000 (UTC)
Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183])
	by pigeon.gentoo.org (Postfix) with ESMTP id 40965E0630
	for <gentoo-commits@lists.gentoo.org>; Fri, 18 Feb 2011 08:33:15 +0000 (UTC)
Received: from pelican.gentoo.org (unknown [66.219.59.40])
	(using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits))
	(No client certificate requested)
	by smtp.gentoo.org (Postfix) with ESMTPS id A6C341B4038
	for <gentoo-commits@lists.gentoo.org>; Fri, 18 Feb 2011 08:33:14 +0000 (UTC)
Received: from localhost.localdomain (localhost [127.0.0.1])
	by pelican.gentoo.org (Postfix) with ESMTP id EC7B58006A
	for <gentoo-commits@lists.gentoo.org>; Fri, 18 Feb 2011 08:33:13 +0000 (UTC)
From: "Zac Medico" <zmedico@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Content-type: text/plain; charset=UTF-8
Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" <zmedico@gentoo.org>
Message-ID: <e7ca7fc07c00584259b6a303c1cdca87e91dc70e.zmedico@gentoo>
Subject: [gentoo-commits] proj/portage:master commit in: pym/portage/
X-VCS-Repository: proj/portage
X-VCS-Files: pym/portage/mail.py
X-VCS-Directories: pym/portage/
X-VCS-Committer: zmedico
X-VCS-Committer-Name: Zac Medico
X-VCS-Revision: e7ca7fc07c00584259b6a303c1cdca87e91dc70e
Date: Fri, 18 Feb 2011 08:33:13 +0000 (UTC)
Precedence: bulk
List-Post: <mailto:gentoo-commits@lists.gentoo.org>
List-Help: <mailto:gentoo-commits+help@lists.gentoo.org>
List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org>
List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org>
List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org>
X-BeenThere: gentoo-commits@lists.gentoo.org
Content-Transfer-Encoding: quoted-printable
X-Archives-Salt: 
X-Archives-Hash: 2abab87c285e6f8af5b5e653ce1c10bc

commit:     e7ca7fc07c00584259b6a303c1cdca87e91dc70e
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Fri Feb 18 08:32:27 2011 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Fri Feb 18 08:32:27 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a=
=3Dcommit;h=3De7ca7fc0

mail: handle unicode in subject more for python3

---
 pym/portage/mail.py |   48 ++++++++++++++++++++++++++-------------------=
---
 1 files changed, 26 insertions(+), 22 deletions(-)

diff --git a/pym/portage/mail.py b/pym/portage/mail.py
index 598c1f9..7268398 100644
--- a/pym/portage/mail.py
+++ b/pym/portage/mail.py
@@ -24,6 +24,20 @@ import portage
 if sys.hexversion >=3D 0x3000000:
 	basestring =3D str
=20
+	def _force_ascii_if_necessary(s):
+		# Force ascii encoding in order to avoid UnicodeEncodeError
+		# from smtplib.sendmail with python3 (bug #291331).
+		s =3D _unicode_encode(s,
+			encoding=3D'ascii', errors=3D'backslashreplace')
+		s =3D _unicode_decode(s,
+			encoding=3D'ascii', errors=3D'replace')
+		return s
+
+else:
+
+	def _force_ascii_if_necessary(s):
+		return s
+
 def TextMessage(_text):
 	from email.mime.text import MIMEText
 	mimetext =3D MIMEText(_text)
@@ -68,18 +82,16 @@ def create_message(sender, recipient, subject, body, =
attachments=3DNone):
 	mymessage["To"] =3D recipient
 	mymessage["From"] =3D sender
=20
-	if sys.hexversion >=3D 0x3000000:
-		# Avoid UnicodeEncodeError in python3 with non-ascii characters.
-		#  File "/usr/lib/python3.1/email/header.py", line 189, in __init__
-		#    self.append(s, charset, errors)
-		#  File "/usr/lib/python3.1/email/header.py", line 262, in append
-		#    input_bytes =3D s.encode(input_charset, errors)
-		#UnicodeEncodeError: 'ascii' codec can't encode characters in position=
 0-9: ordinal not in range(128)
-		mymessage["Subject"] =3D subject
-	else:
-		# Use Header as a workaround so that long subject lines are wrapped
-		# correctly by <=3Dpython-2.6 (gentoo bug #263370, python issue #1974)=
.
-		mymessage["Subject"] =3D Header(subject)
+	# Use Header as a workaround so that long subject lines are wrapped
+	# correctly by <=3Dpython-2.6 (gentoo bug #263370, python issue #1974).
+	# Also, need to force ascii for python3, in order to avoid
+	# UnicodeEncodeError with non-ascii characters:
+	#  File "/usr/lib/python3.1/email/header.py", line 189, in __init__
+	#    self.append(s, charset, errors)
+	#  File "/usr/lib/python3.1/email/header.py", line 262, in append
+	#    input_bytes =3D s.encode(input_charset, errors)
+	#UnicodeEncodeError: 'ascii' codec can't encode characters in position =
0-9: ordinal not in range(128)
+	mymessage["Subject"] =3D Header(_force_ascii_if_necessary(subject))
 	mymessage["Date"] =3D time.strftime("%a, %d %b %Y %H:%M:%S %z")
 =09
 	return mymessage
@@ -138,7 +150,7 @@ def send_mail(mysettings, message):
 	# user wants to use a sendmail binary instead of smtp
 	if mymailhost[0] =3D=3D os.sep and os.path.exists(mymailhost):
 		fd =3D os.popen(mymailhost+" -f "+myfrom+" "+myrecipient, "w")
-		fd.write(message.as_string())
+		fd.write(_force_ascii_if_necessary(message.as_string()))
 		if fd.close() !=3D None:
 			sys.stderr.write(_("!!! %s returned with a non-zero exit code. This g=
enerally indicates an error.\n") % mymailhost)
 	else:
@@ -155,15 +167,7 @@ def send_mail(mysettings, message):
 			if mymailuser !=3D "" and mymailpasswd !=3D "":
 				myconn.login(mymailuser, mymailpasswd)
=20
-			message_str =3D message.as_string()
-			if sys.hexversion >=3D 0x3000000:
-				# Force ascii encoding in order to avoid UnicodeEncodeError
-				# from smtplib.sendmail with python3 (bug #291331).
-				message_str =3D _unicode_encode(message_str,
-					encoding=3D'ascii', errors=3D'backslashreplace')
-				message_str =3D _unicode_decode(message_str,
-					encoding=3D'ascii', errors=3D'replace')
-
+			message_str =3D _force_ascii_if_necessary(message.as_string())
 			myconn.sendmail(myfrom, myrecipient, message_str)
 			myconn.quit()
 		except smtplib.SMTPException as e: