Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
38684c36
Kaydet (Commit)
38684c36
authored
Eyl 09, 2014
tarafından
Serhiy Storchaka
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
imaplib.IMAP4 now supports the context manager protocol.
Original patch by Tarek Ziadé.
üst
bb1e3f1e
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
67 additions
and
0 deletions
+67
-0
imaplib.rst
Doc/library/imaplib.rst
+13
-0
3.5.rst
Doc/whatsnew/3.5.rst
+8
-0
imaplib.py
Lib/imaplib.py
+8
-0
test_imaplib.py
Lib/test/test_imaplib.py
+35
-0
NEWS
Misc/NEWS
+3
-0
No files found.
Doc/library/imaplib.rst
Dosyayı görüntüle @
38684c36
...
...
@@ -37,6 +37,19 @@ base class:
initialized. If *host* is not specified, ``''`` (the local host) is used. If
*port* is omitted, the standard IMAP4 port (143) is used.
The :class:`IMAP4` class supports the :keyword:`with` statement. When used
like this, the IMAP4 ``LOGOUT`` command is issued automatically when the
:keyword:`with` statement exits. E.g.::
>>> from imaplib import IMAP4
>>> with IMAP4("domain.org") as M:
... M.noop()
...
('OK', [b'Nothing Accomplished. d25if65hy903weo.87'])
.. versionchanged:: 3.5
Support for the :keyword:`with` statement was added.
Three exceptions are defined as attributes of the :class:`IMAP4` class:
...
...
Doc/whatsnew/3.5.rst
Dosyayı görüntüle @
38684c36
...
...
@@ -141,6 +141,14 @@ doctest
*module* contains no docstrings instead of raising :exc:`ValueError`
(contributed by Glenn Jones in :issue:`15916`).
imaplib
-------
* :class:`IMAP4` now supports the context management protocol. When used in a
:keyword:`with` statement, the IMAP4 ``LOGOUT`` command will be called
automatically at the end of the block. (Contributed by Tarek Ziadé and
Serhiy Storchaka in :issue:`4972`).
imghdr
------
...
...
Lib/imaplib.py
Dosyayı görüntüle @
38684c36
...
...
@@ -238,6 +238,14 @@ class IMAP4:
return
getattr
(
self
,
attr
.
lower
())
raise
AttributeError
(
"Unknown IMAP4 command: '
%
s'"
%
attr
)
def
__enter__
(
self
):
return
self
def
__exit__
(
self
,
*
args
):
try
:
self
.
logout
()
except
OSError
:
pass
# Overridable methods
...
...
Lib/test/test_imaplib.py
Dosyayı görüntüle @
38684c36
...
...
@@ -98,6 +98,10 @@ class SimpleIMAPHandler(socketserver.StreamRequestHandler):
continuation
=
None
capabilities
=
''
def
setup
(
self
):
super
()
.
setup
()
self
.
server
.
logged
=
None
def
_send
(
self
,
message
):
if
verbose
:
print
(
"SENT:
%
r"
%
message
.
strip
())
...
...
@@ -162,9 +166,14 @@ class SimpleIMAPHandler(socketserver.StreamRequestHandler):
self
.
_send_tagged
(
tag
,
'OK'
,
'CAPABILITY completed'
)
def
cmd_LOGOUT
(
self
,
tag
,
args
):
self
.
server
.
logged
=
None
self
.
_send_textline
(
'* BYE IMAP4ref1 Server logging out'
)
self
.
_send_tagged
(
tag
,
'OK'
,
'LOGOUT completed'
)
def
cmd_LOGIN
(
self
,
tag
,
args
):
self
.
server
.
logged
=
args
[
0
]
self
.
_send_tagged
(
tag
,
'OK'
,
'LOGIN completed'
)
class
ThreadedNetworkedTests
(
unittest
.
TestCase
):
server_class
=
socketserver
.
TCPServer
...
...
@@ -345,6 +354,32 @@ class ThreadedNetworkedTests(unittest.TestCase):
self
.
assertRaises
(
imaplib
.
IMAP4
.
error
,
self
.
imap_class
,
*
server
.
server_address
)
@reap_threads
def
test_simple_with_statement
(
self
):
# simplest call
with
self
.
reaped_server
(
SimpleIMAPHandler
)
as
server
:
with
self
.
imap_class
(
*
server
.
server_address
):
pass
@reap_threads
def
test_with_statement
(
self
):
with
self
.
reaped_server
(
SimpleIMAPHandler
)
as
server
:
with
self
.
imap_class
(
*
server
.
server_address
)
as
imap
:
imap
.
login
(
'user'
,
'pass'
)
self
.
assertEqual
(
server
.
logged
,
'user'
)
self
.
assertIsNone
(
server
.
logged
)
@reap_threads
def
test_with_statement_logout
(
self
):
# what happens if already logout in the block?
with
self
.
reaped_server
(
SimpleIMAPHandler
)
as
server
:
with
self
.
imap_class
(
*
server
.
server_address
)
as
imap
:
imap
.
login
(
'user'
,
'pass'
)
self
.
assertEqual
(
server
.
logged
,
'user'
)
imap
.
logout
()
self
.
assertIsNone
(
server
.
logged
)
self
.
assertIsNone
(
server
.
logged
)
@unittest.skipUnless
(
ssl
,
"SSL not available"
)
class
ThreadedNetworkedTestsSSL
(
ThreadedNetworkedTests
):
...
...
Misc/NEWS
Dosyayı görüntüle @
38684c36
...
...
@@ -132,6 +132,9 @@ Core and Builtins
Library
-------
-
Issue
#
12410
:
imaplib
.
IMAP4
now
supports
the
context
manager
protocol
.
Original
patch
by
Tarek
Ziad
é
.
-
Issue
#
16662
:
load_tests
()
is
now
unconditionally
run
when
it
is
present
in
a
package
's __init__.py. TestLoader.loadTestsFromModule() still accepts
use_load_tests, but it is deprecated and ignored. A new keyword-only
...
...
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