summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Kerr <jk@ozlabs.org>2008-10-07 13:32:27 +1100
committerJeremy Kerr <jk@ozlabs.org>2008-10-07 13:32:27 +1100
commit65404776f7f0e975737a5c8c69dc0b2ae5fe93da (patch)
tree252e6d64092c0c44dc54103e05fa14ee2360a383
parente0fac2b893fd69caedd00c9256ac1e59c8dcbc9b (diff)
downloadpatchwork-65404776f7f0e975737a5c8c69dc0b2ae5fe93da.tar.bz2
patchwork-65404776f7f0e975737a5c8c69dc0b2ae5fe93da.tar.xz
[encoding] Don't output patch mbox as quoted-printable
git-am doesn't like quoted-printable, so output mbox files as raw 7- or 8-bit mbox files. This means we have to create a new MIMEText class, so that the content isn't automatically QP-encoded on __init__(). Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
-rw-r--r--apps/patchwork/models.py16
-rw-r--r--apps/patchwork/tests/encodings.py8
2 files changed, 21 insertions, 3 deletions
diff --git a/apps/patchwork/models.py b/apps/patchwork/models.py
index 3cfbacd..02fb8b4 100644
--- a/apps/patchwork/models.py
+++ b/apps/patchwork/models.py
@@ -31,11 +31,13 @@ import string
import random
try:
- from email.mime.text import MIMEText
+ from email.mime.nonmultipart import MIMENonMultipart
+ from email.encoders import encode_7or8bit
import email.utils
except ImportError:
# Python 2.4 compatibility
- from email.MIMEText import MIMEText
+ from email.MIMENonMultipart import MIMENonMultipart
+ from email.Encoders import encode_7or8bit
import email.Utils
email.utils = email.Utils
@@ -167,6 +169,14 @@ class HashField(models.CharField):
def db_type(self):
return 'char(%d)' % self.n_bytes
+class PatchMbox(MIMENonMultipart):
+ patch_charset = 'utf-8'
+ def __init__(self, _text):
+ MIMENonMultipart.__init__(self, 'text', 'plain',
+ **{'charset': self.patch_charset})
+ self.set_payload(_text.encode(self.patch_charset))
+ encode_7or8bit(self)
+
class Patch(models.Model):
project = models.ForeignKey(Project)
msgid = models.CharField(max_length=255, unique = True)
@@ -238,7 +248,7 @@ class Patch(models.Model):
body += self.content
- mail = MIMEText(body, _charset = 'utf-8')
+ mail = PatchMbox(body)
mail['Subject'] = self.name
mail['Date'] = email.utils.formatdate(
time.mktime(self.date.utctimetuple()))
diff --git a/apps/patchwork/tests/encodings.py b/apps/patchwork/tests/encodings.py
index ac63fb0..9dde023 100644
--- a/apps/patchwork/tests/encodings.py
+++ b/apps/patchwork/tests/encodings.py
@@ -48,6 +48,14 @@ class UTF8PatchViewTest(TestCase):
def testMboxView(self):
response = self.client.get('/patch/%d/mbox/' % self.patch.id)
self.assertEquals(response.status_code, 200)
+ self.assertTrue(self.patch.content in \
+ response.content.decode(self.patch_encoding))
+
+ def testRawView(self):
+ response = self.client.get('/patch/%d/raw/' % self.patch.id)
+ self.assertEquals(response.status_code, 200)
+ self.assertEquals(response.content.decode(self.patch_encoding),
+ self.patch.content)
def tearDown(self):
self.patch.delete()