Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
6ce29fa7
Commit
6ce29fa7
authored
Oct 30, 2010
by
Georg Brandl
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix test_mailbox by supporting context manager protocol for get_file() returns.
parent
849e12bf
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
24 additions
and
3 deletions
+24
-3
Doc/library/mailbox.rst
Doc/library/mailbox.rst
+7
-3
Lib/mailbox.py
Lib/mailbox.py
+14
-0
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Doc/library/mailbox.rst
View file @
6ce29fa7
...
...
@@ -180,15 +180,19 @@ Maildir, mbox, MH, Babyl, and MMDF.
.. method:: get_file(key)
Return a file-like representation of the message corresponding to *key*,
or raise a :exc:`KeyError` exception if no such message exists. The
file-like object behaves as if open in binary mode. This file should be
or raise a :exc:`KeyError` exception if no such message exists.
The
file-like object behaves as if open in binary mode.
This file should be
closed once it is no longer needed.
.. versionadded:: 3.2
The file-like object supports the context manager protocol, so that
you can use a :keyword:`with` statement to automatically close it.
.. note::
Unlike other representations of messages, file-like representations are
not necessarily independent of the :class:`Mailbox` instance that
created them or of the underlying mailbox. More specific documentation
created them or of the underlying mailbox.
More specific documentation
is provided by each subclass.
...
...
Lib/mailbox.py
View file @
6ce29fa7
...
...
@@ -1827,6 +1827,8 @@ class _ProxyFile:
def
close
(
self
):
"""Close the file."""
if
hasattr
(
self
.
_file
,
'close'
):
self
.
_file
.
close
()
del
self
.
_file
def
_read
(
self
,
size
,
read_method
):
...
...
@@ -1838,6 +1840,13 @@ class _ProxyFile:
self
.
_pos
=
self
.
_file
.
tell
()
return
result
def
__enter__
(
self
):
"""Context manager protocol support."""
return
self
def
__exit__
(
self
,
*
exc
):
self
.
close
()
class
_PartialFile
(
_ProxyFile
):
"""A read-only wrapper of part of a file."""
...
...
@@ -1871,6 +1880,11 @@ class _PartialFile(_ProxyFile):
size
=
remaining
return
_ProxyFile
.
_read
(
self
,
size
,
read_method
)
def
close
(
self
):
# do *not* close the underlying file object for partial files,
# since it's global to the mailbox object
del
self
.
_file
def
_lock_file
(
f
,
dotlock
=
True
):
"""Lock file f using lockf and dot locking."""
...
...
Misc/NEWS
View file @
6ce29fa7
...
...
@@ -57,6 +57,9 @@ Core and Builtins
Library
-------
- Support context manager protocol for file-like objects returned by
mailbox ``get_file()`` methods.
- Issue #10246: uu.encode didn't close file objects explicitly when filenames
were given to it. Patch by Brian Brazil.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment