summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2007-07-21 00:21:26 (GMT)
committerGuido van Rossum <guido@python.org>2007-07-21 00:21:26 (GMT)
commitd4eda825c7ed83822868e2e6d794e2ad4dc6c955 (patch)
tree3e66eeefe7aed19451a9483d93ac427019ab3a79
parentbf4806bac5697bd50e6ca41fcf6838f93ed9a511 (diff)
downloadcpython-d4eda825c7ed83822868e2e6d794e2ad4dc6c955.zip
cpython-d4eda825c7ed83822868e2e6d794e2ad4dc6c955.tar.gz
cpython-d4eda825c7ed83822868e2e6d794e2ad4dc6c955.tar.bz2
SF patch# 1757839 by Alexandre Vassalotti -- make test_mailbox and
test_old_mailbox pass.
-rw-r--r--Lib/email/generator.py10
-rw-r--r--Lib/email/header.py4
-rwxr-xr-xLib/mailbox.py12
-rw-r--r--Lib/test/test_mailbox.py5
4 files changed, 17 insertions, 14 deletions
diff --git a/Lib/email/generator.py b/Lib/email/generator.py
index 02b4495..c480229 100644
--- a/Lib/email/generator.py
+++ b/Lib/email/generator.py
@@ -21,14 +21,20 @@ NL = '\n'
fcre = re.compile(r'^From ', re.MULTILINE)
def _is8bitstring(s):
- if isinstance(s, str):
+ if isinstance(s, bytes):
try:
str(s, 'us-ascii')
+ return True
except UnicodeError:
+ pass
+ elif isinstance(s, str):
+ try:
+ s.decode('us-ascii')
return True
+ except UnicodeError:
+ pass
return False
-
class Generator:
"""Generates output from a Message object tree.
diff --git a/Lib/email/header.py b/Lib/email/header.py
index 675b68d..5ea1871 100644
--- a/Lib/email/header.py
+++ b/Lib/email/header.py
@@ -253,7 +253,7 @@ class Header:
# We need to test that the string can be converted to unicode and
# back to a byte string, given the input and output codecs of the
# charset.
- if isinstance(s, str):
+ if isinstance(s, bytes):
# Possibly raise UnicodeError if the byte string can't be
# converted to a unicode with the input codec of the charset.
incodec = charset.input_codec or 'us-ascii'
@@ -263,7 +263,7 @@ class Header:
# than the iput coded. Still, use the original byte string.
outcodec = charset.output_codec or 'us-ascii'
ustr.encode(outcodec, errors)
- elif isinstance(s, str):
+ elif isinstance(s, bytes):
# Now we have to be sure the unicode string can be converted
# to a byte string with a reasonable output codec. We want to
# use the byte string in the chunk.
diff --git a/Lib/mailbox.py b/Lib/mailbox.py
index fdb118d..2a6b24c 100755
--- a/Lib/mailbox.py
+++ b/Lib/mailbox.py
@@ -498,15 +498,15 @@ class _singlefileMailbox(Mailbox):
"""Initialize a single-file mailbox."""
Mailbox.__init__(self, path, factory, create)
try:
- f = open(self._path, 'rb+')
+ f = open(self._path, 'r+')
except IOError as e:
if e.errno == errno.ENOENT:
if create:
- f = open(self._path, 'wb+')
+ f = open(self._path, 'w+')
else:
raise NoSuchMailboxError(self._path)
elif e.errno == errno.EACCES:
- f = open(self._path, 'rb')
+ f = open(self._path, 'r')
else:
raise
self._file = f
@@ -1761,11 +1761,11 @@ class _ProxyFile:
def read(self, size=None):
"""Read bytes."""
- return self._read(size, self._file.read)
+ return str(self._read(size, self._file.read))
def readline(self, size=None):
"""Read a line."""
- return self._read(size, self._file.readline)
+ return str(self._read(size, self._file.readline))
def readlines(self, sizehint=None):
"""Read multiple lines."""
@@ -1900,7 +1900,7 @@ def _create_carefully(path):
"""Create a file if it doesn't exist and open for reading and writing."""
fd = os.open(path, os.O_CREAT | os.O_EXCL | os.O_RDWR)
try:
- return open(path, 'rb+')
+ return open(path, 'r+')
finally:
os.close(fd)
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index e5930d8..91e7847 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -58,7 +58,6 @@ class TestMailbox(TestBase):
self._box = self._factory(self._path)
def tearDown(self):
- self._box.close()
self._delete_recursively(self._path)
def test_add(self):
@@ -695,7 +694,6 @@ class TestMaildir(TestMailbox):
class _TestMboxMMDF(TestMailbox):
def tearDown(self):
- self._box.close()
self._delete_recursively(self._path)
for lock_remnant in glob.glob(self._path + '.*'):
test_support.unlink(lock_remnant)
@@ -736,7 +734,7 @@ class _TestMboxMMDF(TestMailbox):
self._box._file.seek(0)
contents = self._box._file.read()
self._box.close()
- self.assert_(contents == open(self._path, 'rb').read())
+ self.assert_(contents == open(self._path, 'r').read())
self._box = self._factory(self._path)
def test_lock_conflict(self):
@@ -918,7 +916,6 @@ class TestBabyl(TestMailbox):
_factory = lambda self, path, factory=None: mailbox.Babyl(path, factory)
def tearDown(self):
- self._box.close()
self._delete_recursively(self._path)
for lock_remnant in glob.glob(self._path + '.*'):
test_support.unlink(lock_remnant)