1
0
Fork 1
mirror of https://github.com/coddingtonbear/django-mailbox.git synced 2026-07-09 22:38:19 +02:00

Refactoring imports for Python3 support. Fixes #13.

* Refactoring unicode payload handling of mis-encoded payloads.
* Uses six.moves.urllib to find proper urllib versions.
This commit is contained in:
Adam Coddington 2014-04-24 15:28:54 -07:00
parent ff68e564d5
commit 002e33bd95
4 changed files with 28 additions and 17 deletions

View file

@ -3,9 +3,10 @@ python:
- "2.6"
- "2.7"
- "3.2"
- "3.3"
env:
- DJANGO=1.5.5
- DJANGO=1.6.1
- DJANGO=1.5.6
- DJANGO=1.6.3
install:
- pip install -q Django==$DJANGO --use-mirrors
- pip install -q -e . --use-mirrors

View file

@ -4,18 +4,12 @@ from email.header import decode_header
from email.message import Message as EmailMessage
from email.utils import formatdate, parseaddr
from email.encoders import encode_base64
import urllib
import mimetypes
import os.path
from quopri import encode as encode_quopri
import sys
import uuid
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
from django.conf import settings
from django.core.mail.message import make_msgid
from django.core.files.base import ContentFile
@ -25,6 +19,7 @@ from django_mailbox.transports import Pop3Transport, ImapTransport,\
MMDFTransport
from django_mailbox.signals import message_received
import six
from six.moves.urllib.parse import unquote, urlparse
STRIP_UNALLOWED_MIMETYPES = getattr(
@ -117,7 +112,7 @@ class Mailbox(models.Model):
@property
def _protocol_info(self):
return urlparse.urlparse(self.uri)
return urlparse(self.uri)
@property
def _domain(self):
@ -129,11 +124,11 @@ class Mailbox(models.Model):
@property
def username(self):
return urllib.unquote(self._protocol_info.username)
return unquote(self._protocol_info.username)
@property
def password(self):
return urllib.unquote(self._protocol_info.password)
return unquote(self._protocol_info.password)
@property
def location(self):
@ -249,6 +244,21 @@ class Mailbox(models.Model):
placeholder[ATTACHMENT_INTERPOLATION_HEADER] = str(attachment.pk)
new = placeholder
else:
content_charset = msg.get_content_charset()
if not content_charset:
content_charset = 'ascii'
try:
# Make sure that the payload can be properly decoded in the
# defined charset, if it can't, let's mash some things
# inside the payload :-\
msg.get_payload(decode=True).decode(content_charset)
except UnicodeDecodeError:
msg.set_payload(
msg.get_payload(decode=True).decode(
content_charset,
'ignore'
)
)
new = msg
return new
@ -495,7 +505,7 @@ class Message(models.Model):
return self.body.encode('utf-8')
def set_body(self, body):
if sys.version_info >= (3, 0):
if six.PY3:
body = body.encode('utf-8')
self.encoded = True
self.body = base64.b64encode(body).decode('ascii')
@ -503,10 +513,10 @@ class Message(models.Model):
def get_email_object(self):
""" Returns an `email.message.Message` instance for this message."""
body = self.get_body()
if sys.version_info < (3, 0):
flat = email.message_from_string(body)
else:
if six.PY3:
flat = email.message_from_bytes(body)
else:
flat = email.message_from_string(body)
return self._rehydrate(flat)
def delete(self, *args, **kwargs):

View file

@ -1,5 +1,5 @@
Date: Fri, 30 Jan 2012 11:30:01 PST
Subject: Tjest
Subject: Tjest Wrong
From: "Somebody" <somebody@somewhere.com>
To: idontknow@somewhere.com
MIME-Version: 1.0

View file

@ -41,6 +41,6 @@ setup(
'django_mailbox.tests',
],
install_requires=[
'six'
'six>=1.6.1'
]
)