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.6"
|
||||||
- "2.7"
|
- "2.7"
|
||||||
- "3.2"
|
- "3.2"
|
||||||
|
- "3.3"
|
||||||
env:
|
env:
|
||||||
- DJANGO=1.5.5
|
- DJANGO=1.5.6
|
||||||
- DJANGO=1.6.1
|
- DJANGO=1.6.3
|
||||||
install:
|
install:
|
||||||
- pip install -q Django==$DJANGO --use-mirrors
|
- pip install -q Django==$DJANGO --use-mirrors
|
||||||
- pip install -q -e . --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.message import Message as EmailMessage
|
||||||
from email.utils import formatdate, parseaddr
|
from email.utils import formatdate, parseaddr
|
||||||
from email.encoders import encode_base64
|
from email.encoders import encode_base64
|
||||||
import urllib
|
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os.path
|
import os.path
|
||||||
from quopri import encode as encode_quopri
|
from quopri import encode as encode_quopri
|
||||||
import sys
|
import sys
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
try:
|
|
||||||
import urllib.parse as urlparse
|
|
||||||
except ImportError:
|
|
||||||
import urlparse
|
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.mail.message import make_msgid
|
from django.core.mail.message import make_msgid
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
|
|
@ -25,6 +19,7 @@ from django_mailbox.transports import Pop3Transport, ImapTransport,\
|
||||||
MMDFTransport
|
MMDFTransport
|
||||||
from django_mailbox.signals import message_received
|
from django_mailbox.signals import message_received
|
||||||
import six
|
import six
|
||||||
|
from six.moves.urllib.parse import unquote, urlparse
|
||||||
|
|
||||||
|
|
||||||
STRIP_UNALLOWED_MIMETYPES = getattr(
|
STRIP_UNALLOWED_MIMETYPES = getattr(
|
||||||
|
|
@ -117,7 +112,7 @@ class Mailbox(models.Model):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _protocol_info(self):
|
def _protocol_info(self):
|
||||||
return urlparse.urlparse(self.uri)
|
return urlparse(self.uri)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def _domain(self):
|
def _domain(self):
|
||||||
|
|
@ -129,11 +124,11 @@ class Mailbox(models.Model):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def username(self):
|
def username(self):
|
||||||
return urllib.unquote(self._protocol_info.username)
|
return unquote(self._protocol_info.username)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def password(self):
|
def password(self):
|
||||||
return urllib.unquote(self._protocol_info.password)
|
return unquote(self._protocol_info.password)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def location(self):
|
def location(self):
|
||||||
|
|
@ -249,6 +244,21 @@ class Mailbox(models.Model):
|
||||||
placeholder[ATTACHMENT_INTERPOLATION_HEADER] = str(attachment.pk)
|
placeholder[ATTACHMENT_INTERPOLATION_HEADER] = str(attachment.pk)
|
||||||
new = placeholder
|
new = placeholder
|
||||||
else:
|
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
|
new = msg
|
||||||
return new
|
return new
|
||||||
|
|
||||||
|
|
@ -495,7 +505,7 @@ class Message(models.Model):
|
||||||
return self.body.encode('utf-8')
|
return self.body.encode('utf-8')
|
||||||
|
|
||||||
def set_body(self, body):
|
def set_body(self, body):
|
||||||
if sys.version_info >= (3, 0):
|
if six.PY3:
|
||||||
body = body.encode('utf-8')
|
body = body.encode('utf-8')
|
||||||
self.encoded = True
|
self.encoded = True
|
||||||
self.body = base64.b64encode(body).decode('ascii')
|
self.body = base64.b64encode(body).decode('ascii')
|
||||||
|
|
@ -503,10 +513,10 @@ class Message(models.Model):
|
||||||
def get_email_object(self):
|
def get_email_object(self):
|
||||||
""" Returns an `email.message.Message` instance for this message."""
|
""" Returns an `email.message.Message` instance for this message."""
|
||||||
body = self.get_body()
|
body = self.get_body()
|
||||||
if sys.version_info < (3, 0):
|
if six.PY3:
|
||||||
flat = email.message_from_string(body)
|
|
||||||
else:
|
|
||||||
flat = email.message_from_bytes(body)
|
flat = email.message_from_bytes(body)
|
||||||
|
else:
|
||||||
|
flat = email.message_from_string(body)
|
||||||
return self._rehydrate(flat)
|
return self._rehydrate(flat)
|
||||||
|
|
||||||
def delete(self, *args, **kwargs):
|
def delete(self, *args, **kwargs):
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
Date: Fri, 30 Jan 2012 11:30:01 PST
|
Date: Fri, 30 Jan 2012 11:30:01 PST
|
||||||
Subject: Tjest
|
Subject: Tjest Wrong
|
||||||
From: "Somebody" <somebody@somewhere.com>
|
From: "Somebody" <somebody@somewhere.com>
|
||||||
To: idontknow@somewhere.com
|
To: idontknow@somewhere.com
|
||||||
MIME-Version: 1.0
|
MIME-Version: 1.0
|
||||||
|
|
|
||||||
2
setup.py
2
setup.py
|
|
@ -41,6 +41,6 @@ setup(
|
||||||
'django_mailbox.tests',
|
'django_mailbox.tests',
|
||||||
],
|
],
|
||||||
install_requires=[
|
install_requires=[
|
||||||
'six'
|
'six>=1.6.1'
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue