Commit 52130116 authored by Guido van Rossum's avatar Guido van Rossum

SF patch# 1757839 by Alexandre Vassalotti -- make test_mailbox and

test_old_mailbox pass.
parent 8e636971
...@@ -21,14 +21,20 @@ NL = '\n' ...@@ -21,14 +21,20 @@ NL = '\n'
fcre = re.compile(r'^From ', re.MULTILINE) fcre = re.compile(r'^From ', re.MULTILINE)
def _is8bitstring(s): def _is8bitstring(s):
if isinstance(s, str): if isinstance(s, bytes):
try: try:
str(s, 'us-ascii') str(s, 'us-ascii')
return True
except UnicodeError: except UnicodeError:
pass
elif isinstance(s, str):
try:
s.decode('us-ascii')
return True return True
except UnicodeError:
pass
return False return False
class Generator: class Generator:
"""Generates output from a Message object tree. """Generates output from a Message object tree.
......
...@@ -253,7 +253,7 @@ class Header: ...@@ -253,7 +253,7 @@ class Header:
# We need to test that the string can be converted to unicode and # 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 # back to a byte string, given the input and output codecs of the
# charset. # charset.
if isinstance(s, str): if isinstance(s, bytes):
# Possibly raise UnicodeError if the byte string can't be # Possibly raise UnicodeError if the byte string can't be
# converted to a unicode with the input codec of the charset. # converted to a unicode with the input codec of the charset.
incodec = charset.input_codec or 'us-ascii' incodec = charset.input_codec or 'us-ascii'
...@@ -263,7 +263,7 @@ class Header: ...@@ -263,7 +263,7 @@ class Header:
# than the iput coded. Still, use the original byte string. # than the iput coded. Still, use the original byte string.
outcodec = charset.output_codec or 'us-ascii' outcodec = charset.output_codec or 'us-ascii'
ustr.encode(outcodec, errors) ustr.encode(outcodec, errors)
elif isinstance(s, str): elif isinstance(s, bytes):
# Now we have to be sure the unicode string can be converted # Now we have to be sure the unicode string can be converted
# to a byte string with a reasonable output codec. We want to # to a byte string with a reasonable output codec. We want to
# use the byte string in the chunk. # use the byte string in the chunk.
......
...@@ -498,15 +498,15 @@ class _singlefileMailbox(Mailbox): ...@@ -498,15 +498,15 @@ class _singlefileMailbox(Mailbox):
"""Initialize a single-file mailbox.""" """Initialize a single-file mailbox."""
Mailbox.__init__(self, path, factory, create) Mailbox.__init__(self, path, factory, create)
try: try:
f = open(self._path, 'rb+') f = open(self._path, 'r+')
except IOError as e: except IOError as e:
if e.errno == errno.ENOENT: if e.errno == errno.ENOENT:
if create: if create:
f = open(self._path, 'wb+') f = open(self._path, 'w+')
else: else:
raise NoSuchMailboxError(self._path) raise NoSuchMailboxError(self._path)
elif e.errno == errno.EACCES: elif e.errno == errno.EACCES:
f = open(self._path, 'rb') f = open(self._path, 'r')
else: else:
raise raise
self._file = f self._file = f
...@@ -1761,11 +1761,11 @@ class _ProxyFile: ...@@ -1761,11 +1761,11 @@ class _ProxyFile:
def read(self, size=None): def read(self, size=None):
"""Read bytes.""" """Read bytes."""
return self._read(size, self._file.read) return str(self._read(size, self._file.read))
def readline(self, size=None): def readline(self, size=None):
"""Read a line.""" """Read a line."""
return self._read(size, self._file.readline) return str(self._read(size, self._file.readline))
def readlines(self, sizehint=None): def readlines(self, sizehint=None):
"""Read multiple lines.""" """Read multiple lines."""
...@@ -1900,7 +1900,7 @@ def _create_carefully(path): ...@@ -1900,7 +1900,7 @@ def _create_carefully(path):
"""Create a file if it doesn't exist and open for reading and writing.""" """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) fd = os.open(path, os.O_CREAT | os.O_EXCL | os.O_RDWR)
try: try:
return open(path, 'rb+') return open(path, 'r+')
finally: finally:
os.close(fd) os.close(fd)
......
...@@ -58,7 +58,6 @@ class TestMailbox(TestBase): ...@@ -58,7 +58,6 @@ class TestMailbox(TestBase):
self._box = self._factory(self._path) self._box = self._factory(self._path)
def tearDown(self): def tearDown(self):
self._box.close()
self._delete_recursively(self._path) self._delete_recursively(self._path)
def test_add(self): def test_add(self):
...@@ -695,7 +694,6 @@ class TestMaildir(TestMailbox): ...@@ -695,7 +694,6 @@ class TestMaildir(TestMailbox):
class _TestMboxMMDF(TestMailbox): class _TestMboxMMDF(TestMailbox):
def tearDown(self): def tearDown(self):
self._box.close()
self._delete_recursively(self._path) self._delete_recursively(self._path)
for lock_remnant in glob.glob(self._path + '.*'): for lock_remnant in glob.glob(self._path + '.*'):
test_support.unlink(lock_remnant) test_support.unlink(lock_remnant)
...@@ -736,7 +734,7 @@ class _TestMboxMMDF(TestMailbox): ...@@ -736,7 +734,7 @@ class _TestMboxMMDF(TestMailbox):
self._box._file.seek(0) self._box._file.seek(0)
contents = self._box._file.read() contents = self._box._file.read()
self._box.close() 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) self._box = self._factory(self._path)
def test_lock_conflict(self): def test_lock_conflict(self):
...@@ -918,7 +916,6 @@ class TestBabyl(TestMailbox): ...@@ -918,7 +916,6 @@ class TestBabyl(TestMailbox):
_factory = lambda self, path, factory=None: mailbox.Babyl(path, factory) _factory = lambda self, path, factory=None: mailbox.Babyl(path, factory)
def tearDown(self): def tearDown(self):
self._box.close()
self._delete_recursively(self._path) self._delete_recursively(self._path)
for lock_remnant in glob.glob(self._path + '.*'): for lock_remnant in glob.glob(self._path + '.*'):
test_support.unlink(lock_remnant) test_support.unlink(lock_remnant)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment