forked from mirror/django-mailbox
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:
parent
ff68e564d5
commit
002e33bd95
4 changed files with 28 additions and 17 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
2
setup.py
2
setup.py
|
|
@ -41,6 +41,6 @@ setup(
|
|||
'django_mailbox.tests',
|
||||
],
|
||||
install_requires=[
|
||||
'six'
|
||||
'six>=1.6.1'
|
||||
]
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue