Mercurial > cpython-lru_cache-weakref
annotate Lib/imaplib.py @ 79675:c0a2294de787 2.7
Issue #16199: Backport 2to3 typo fix from 3.2.
| author | Chris Jerdonek <chris.jerdonek@gmail.com> |
|---|---|
| date | Thu, 11 Oct 2012 16:15:46 -0700 |
| parents | 0dee36595699 |
| children | 74eeefc4137f |
| rev | line source |
|---|---|
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 """IMAP4 client. |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
2 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
3 Based on RFC 2060. |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
4 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
5 Public class: IMAP4 |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
6 Public variable: Debug |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
7 Public functions: Internaldate2tuple |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
8 Int2AP |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
9 ParseFlags |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
10 Time2Internaldate |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
11 """ |
|
8546
dc8daa748c40
Piers' latest version, labeled 2.11. This time he integrated my
Guido van Rossum <guido@python.org>
parents:
8520
diff
changeset
|
12 |
|
11870
d7eca5b0960a
Simple changes by Gerrit Holl - move author acknowledgements out of
Guido van Rossum <guido@python.org>
parents:
11842
diff
changeset
|
13 # Author: Piers Lauder <piers@cs.su.oz.au> December 1997. |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
14 # |
|
11870
d7eca5b0960a
Simple changes by Gerrit Holl - move author acknowledgements out of
Guido van Rossum <guido@python.org>
parents:
11842
diff
changeset
|
15 # Authentication code contributed by Donn Cave <donn@u.washington.edu> June 1998. |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
16 # String method conversion by ESR, February 2001. |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
17 # GET/SETACL contributed by Anthony Baxter <anthony@interlink.com.au> April 2001. |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
18 # IMAP4_SSL contributed by Tino Lange <Tino.Lange@isg.de> March 2002. |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
19 # GET/SETQUOTA contributed by Andreas Zeidler <az@kreativkombinat.de> June 2002. |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
20 # PROXYAUTH contributed by Rick Holbert <holbert.13@osu.edu> November 2002. |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
21 # GET/SETANNOTATION contributed by Tomas Lindroos <skitta@abo.fi> June 2005. |
|
11870
d7eca5b0960a
Simple changes by Gerrit Holl - move author acknowledgements out of
Guido van Rossum <guido@python.org>
parents:
11842
diff
changeset
|
22 |
| 35488 | 23 __version__ = "2.58" |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
24 |
|
66136
a5b39d89dccb
Merged revisions 86391 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66132
diff
changeset
|
25 import binascii, errno, random, re, socket, subprocess, sys, time |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
26 |
|
43093
1d57fb7efb15
Don't lie in __all__ attributes when SSL is not available: only add the SSL
Thomas Wouters <thomas@python.org>
parents:
43008
diff
changeset
|
27 __all__ = ["IMAP4", "IMAP4_stream", "Internaldate2tuple", |
|
16194
f4ac060a841b
__all__: removed "error", "abort", "readonly", as these are not
Barry Warsaw <barry@python.org>
parents:
16160
diff
changeset
|
28 "Int2AP", "ParseFlags", "Time2Internaldate"] |
|
16160
46920b60cd33
added a few more __all__ lists
Skip Montanaro <skip@pobox.com>
parents:
15868
diff
changeset
|
29 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
30 # Globals |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
31 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 CRLF = '\r\n' |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
33 Debug = 0 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
34 IMAP4_PORT = 143 |
|
22178
6fa56c43a1ba
fixed missing IMAP4_SSL_PORT
Piers Lauder <piers@cs.su.oz.au>
parents:
22173
diff
changeset
|
35 IMAP4_SSL_PORT = 993 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
36 AllowedVersions = ('IMAP4REV1', 'IMAP4') # Most recent first |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
37 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
38 # Commands |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
39 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
40 Commands = { |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
41 # name valid states |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
42 'APPEND': ('AUTH', 'SELECTED'), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
43 'AUTHENTICATE': ('NONAUTH',), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
44 'CAPABILITY': ('NONAUTH', 'AUTH', 'SELECTED', 'LOGOUT'), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
45 'CHECK': ('SELECTED',), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
46 'CLOSE': ('SELECTED',), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
47 'COPY': ('SELECTED',), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
48 'CREATE': ('AUTH', 'SELECTED'), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
49 'DELETE': ('AUTH', 'SELECTED'), |
|
32828
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
50 'DELETEACL': ('AUTH', 'SELECTED'), |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
51 'EXAMINE': ('AUTH', 'SELECTED'), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
52 'EXPUNGE': ('SELECTED',), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
53 'FETCH': ('SELECTED',), |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
54 'GETACL': ('AUTH', 'SELECTED'), |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
55 'GETANNOTATION':('AUTH', 'SELECTED'), |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
56 'GETQUOTA': ('AUTH', 'SELECTED'), |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
57 'GETQUOTAROOT': ('AUTH', 'SELECTED'), |
|
32828
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
58 'MYRIGHTS': ('AUTH', 'SELECTED'), |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
59 'LIST': ('AUTH', 'SELECTED'), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
60 'LOGIN': ('NONAUTH',), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
61 'LOGOUT': ('NONAUTH', 'AUTH', 'SELECTED', 'LOGOUT'), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
62 'LSUB': ('AUTH', 'SELECTED'), |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
63 'NAMESPACE': ('AUTH', 'SELECTED'), |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
64 'NOOP': ('NONAUTH', 'AUTH', 'SELECTED', 'LOGOUT'), |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
65 'PARTIAL': ('SELECTED',), # NB: obsolete |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
66 'PROXYAUTH': ('AUTH',), |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
67 'RENAME': ('AUTH', 'SELECTED'), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
68 'SEARCH': ('SELECTED',), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
69 'SELECT': ('AUTH', 'SELECTED'), |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
70 'SETACL': ('AUTH', 'SELECTED'), |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
71 'SETANNOTATION':('AUTH', 'SELECTED'), |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
72 'SETQUOTA': ('AUTH', 'SELECTED'), |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
73 'SORT': ('SELECTED',), |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
74 'STATUS': ('AUTH', 'SELECTED'), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
75 'STORE': ('SELECTED',), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
76 'SUBSCRIBE': ('AUTH', 'SELECTED'), |
|
30893
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
77 'THREAD': ('SELECTED',), |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
78 'UID': ('SELECTED',), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
79 'UNSUBSCRIBE': ('AUTH', 'SELECTED'), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
80 } |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
81 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
82 # Patterns to match server responses |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
83 |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
84 Continuation = re.compile(r'\+( (?P<data>.*))?') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
85 Flags = re.compile(r'.*FLAGS \((?P<flags>[^\)]*)\)') |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
86 InternalDate = re.compile(r'.*INTERNALDATE "' |
|
34645
fa3cdd4f9cd0
Fix bug in InternalDate regexp that failed to allow leading 0 in day - courtesy of Rimon Barr <rimon.barr@cornell.edu>
Piers Lauder <piers@cs.su.oz.au>
parents:
33689
diff
changeset
|
87 r'(?P<day>[ 0123][0-9])-(?P<mon>[A-Z][a-z][a-z])-(?P<year>[0-9][0-9][0-9][0-9])' |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
88 r' (?P<hour>[0-9][0-9]):(?P<min>[0-9][0-9]):(?P<sec>[0-9][0-9])' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
89 r' (?P<zonen>[-+])(?P<zoneh>[0-9][0-9])(?P<zonem>[0-9][0-9])' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
90 r'"') |
|
11803
c2286a1c2f29
Patches by Piers Lauder.
Guido van Rossum <guido@python.org>
parents:
11562
diff
changeset
|
91 Literal = re.compile(r'.*{(?P<size>\d+)}$') |
|
28900
0e35c159741b
improved CRLF regex for previous fix
Piers Lauder <piers@cs.su.oz.au>
parents:
28899
diff
changeset
|
92 MapCRLF = re.compile(r'\r\n|\r|\n') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
93 Response_code = re.compile(r'\[(?P<type>[A-Z-]+)( (?P<data>[^\]]*))?\]') |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
94 Untagged_response = re.compile(r'\* (?P<type>[A-Z-]+)( (?P<data>.*))?') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
95 Untagged_status = re.compile(r'\* (?P<data>\d+) (?P<type>[A-Z-]+)( (?P<data2>.*))?') |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
96 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
97 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
98 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
99 class IMAP4: |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
100 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
101 """IMAP4 client class. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
102 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
103 Instantiate with: IMAP4([host[, port]]) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
104 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
105 host - host's name (default: localhost); |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
106 port - port number (default: standard IMAP4 port). |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
107 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
108 All IMAP4rev1 commands are supported by methods of the same |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
109 name (in lower-case). |
|
8453
4e59d890a4bd
Piers Lauders' latest version, with some of my own changes reapplied.
Guido van Rossum <guido@python.org>
parents:
8394
diff
changeset
|
110 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
111 All arguments to commands are converted to strings, except for |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
112 AUTHENTICATE, and the last argument to APPEND which is passed as |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
113 an IMAP4 literal. If necessary (the string contains any |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
114 non-printing characters or white-space and isn't enclosed with |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
115 either parentheses or double quotes) each string is quoted. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
116 However, the 'password' argument to the LOGIN command is always |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
117 quoted. If you want to avoid having an argument string quoted |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
118 (eg: the 'flags' argument to STORE) then enclose the string in |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
119 parentheses (eg: "(\Deleted)"). |
|
8453
4e59d890a4bd
Piers Lauders' latest version, with some of my own changes reapplied.
Guido van Rossum <guido@python.org>
parents:
8394
diff
changeset
|
120 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
121 Each command returns a tuple: (type, [data, ...]) where 'type' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
122 is usually 'OK' or 'NO', and 'data' is either the text from the |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
123 tagged response, or untagged results from command. Each 'data' |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
124 is either a string, or a tuple. If a tuple, then the first part |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
125 is the header of the response, and the second part contains |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
126 the data (ie: 'literal' value). |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
127 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
128 Errors raise the exception class <instance>.error("<reason>"). |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
129 IMAP4 server errors raise <instance>.abort("<reason>"), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
130 which is a sub-class of 'error'. Mailbox status changes |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
131 from READ-WRITE to READ-ONLY raise the exception class |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
132 <instance>.readonly("<reason>"), which is a sub-class of 'abort'. |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
133 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
134 "error" exceptions imply a program error. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
135 "abort" exceptions imply the connection should be reset, and |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
136 the command re-tried. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
137 "readonly" exceptions imply the command should be re-tried. |
| 11562 | 138 |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
139 Note: to use this module, you must read the RFCs pertaining to the |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
140 IMAP4 protocol, as the semantics of the arguments to each IMAP4 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
141 command are left to the invoker, not to mention the results. Also, |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
142 most IMAP servers implement a sub-set of the commands available here. |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
143 """ |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
144 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
145 class error(Exception): pass # Logical errors - debug required |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
146 class abort(error): pass # Service errors - close and retry |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
147 class readonly(abort): pass # Mailbox status changed to READ-ONLY |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
148 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
149 mustquote = re.compile(r"[^\w!#$%&'*+,.:;<=>?^`|~-]") |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
150 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
151 def __init__(self, host = '', port = IMAP4_PORT): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
152 self.debug = Debug |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
153 self.state = 'LOGOUT' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
154 self.literal = None # A literal argument to a command |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
155 self.tagged_commands = {} # Tagged commands awaiting response |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
156 self.untagged_responses = {} # {typ: [data, ...], ...} |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
157 self.continuation_response = '' # Last continuation response |
|
35487
4681a8fa46d0
changed select() so readonly flag is treated as a boolean
Piers Lauder <piers@cs.su.oz.au>
parents:
35205
diff
changeset
|
158 self.is_readonly = False # READ-ONLY desired state |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
159 self.tagnum = 0 |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
160 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
161 # Open socket to server. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
162 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
163 self.open(host, port) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
164 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
165 # Create unique tag for this session, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
166 # and compile tagged response matcher. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
167 |
|
35205
e2636d108d7d
fixed tag generation to avoid null tags
Piers Lauder <piers@cs.su.oz.au>
parents:
34986
diff
changeset
|
168 self.tagpre = Int2AP(random.randint(4096, 65535)) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
169 self.tagre = re.compile(r'(?P<tag>' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
170 + self.tagpre |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
171 + r'\d+) (?P<type>[A-Z]+) (?P<data>.*)') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
172 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
173 # Get server welcome message, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
174 # request and store CAPABILITY response. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
175 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
176 if __debug__: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
177 self._cmd_log_len = 10 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
178 self._cmd_log_idx = 0 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
179 self._cmd_log = {} # Last `_cmd_log_len' interactions |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
180 if self.debug >= 1: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
181 self._mesg('imaplib version %s' % __version__) |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
182 self._mesg('new IMAP4 connection, tag=%s' % self.tagpre) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
183 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
184 self.welcome = self._get_response() |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
185 if 'PREAUTH' in self.untagged_responses: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
186 self.state = 'AUTH' |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
187 elif 'OK' in self.untagged_responses: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
188 self.state = 'NONAUTH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
189 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
190 raise self.error(self.welcome) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
191 |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
192 typ, dat = self.capability() |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
193 if dat == [None]: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
194 raise self.error('no CAPABILITY response from server') |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
195 self.capabilities = tuple(dat[-1].upper().split()) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
196 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
197 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
198 if self.debug >= 3: |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
30893
diff
changeset
|
199 self._mesg('CAPABILITIES: %r' % (self.capabilities,)) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
200 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
201 for version in AllowedVersions: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
202 if not version in self.capabilities: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
203 continue |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
204 self.PROTOCOL_VERSION = version |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
205 return |
|
8546
dc8daa748c40
Piers' latest version, labeled 2.11. This time he integrated my
Guido van Rossum <guido@python.org>
parents:
8520
diff
changeset
|
206 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
207 raise self.error('server not IMAP4 compliant') |
|
7990
de10566dec5c
New version doesn't require REV1 capability.
Guido van Rossum <guido@python.org>
parents:
7924
diff
changeset
|
208 |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
209 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
210 def __getattr__(self, attr): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
211 # Allow UPPERCASE variants of IMAP4 command methods. |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
212 if attr in Commands: |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
213 return getattr(self, attr.lower()) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
214 raise AttributeError("Unknown IMAP4 command: '%s'" % attr) |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
215 |
|
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
216 |
|
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
217 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
218 # Overridable methods |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
219 |
|
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
220 |
|
23694
8b9d9130820e
open method changed to use arguments and set instance host/port values (instead of __init__)
Piers Lauder <piers@cs.su.oz.au>
parents:
23620
diff
changeset
|
221 def open(self, host = '', port = IMAP4_PORT): |
|
8b9d9130820e
open method changed to use arguments and set instance host/port values (instead of __init__)
Piers Lauder <piers@cs.su.oz.au>
parents:
23620
diff
changeset
|
222 """Setup connection to remote server on "host:port" |
|
8b9d9130820e
open method changed to use arguments and set instance host/port values (instead of __init__)
Piers Lauder <piers@cs.su.oz.au>
parents:
23620
diff
changeset
|
223 (default: localhost:standard IMAP4 port). |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
224 This connection will be used by the routines: |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
225 read, readline, send, shutdown. |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
226 """ |
|
23694
8b9d9130820e
open method changed to use arguments and set instance host/port values (instead of __init__)
Piers Lauder <piers@cs.su.oz.au>
parents:
23620
diff
changeset
|
227 self.host = host |
|
8b9d9130820e
open method changed to use arguments and set instance host/port values (instead of __init__)
Piers Lauder <piers@cs.su.oz.au>
parents:
23620
diff
changeset
|
228 self.port = port |
|
54093
88d965be8617
Merged revisions 72662 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
45473
diff
changeset
|
229 self.sock = socket.create_connection((host, port)) |
|
20430
5d5ad951a6d6
SF bug #469910 by Alfonso Baciero: Bugfix for imaplib for macintosh
Guido van Rossum <guido@python.org>
parents:
19227
diff
changeset
|
230 self.file = self.sock.makefile('rb') |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
231 |
|
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
232 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
233 def read(self, size): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
234 """Read 'size' bytes from remote.""" |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
235 return self.file.read(size) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
236 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
237 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
238 def readline(self): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
239 """Read line from remote.""" |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
240 return self.file.readline() |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
241 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
242 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
243 def send(self, data): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
244 """Send data to remote.""" |
|
21963
2faa23facef7
The Grande 'sendall()' patch, copied from release21-maint. Fixes #516715.
Martin v. Löwis <martin@v.loewis.de>
parents:
21649
diff
changeset
|
245 self.sock.sendall(data) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
246 |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
247 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
248 def shutdown(self): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
249 """Close I/O established in "open".""" |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
250 self.file.close() |
|
66136
a5b39d89dccb
Merged revisions 86391 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66132
diff
changeset
|
251 try: |
|
a5b39d89dccb
Merged revisions 86391 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66132
diff
changeset
|
252 self.sock.shutdown(socket.SHUT_RDWR) |
|
a5b39d89dccb
Merged revisions 86391 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66132
diff
changeset
|
253 except socket.error as e: |
|
a5b39d89dccb
Merged revisions 86391 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66132
diff
changeset
|
254 # The server might already have closed the connection |
|
a5b39d89dccb
Merged revisions 86391 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66132
diff
changeset
|
255 if e.errno != errno.ENOTCONN: |
|
a5b39d89dccb
Merged revisions 86391 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66132
diff
changeset
|
256 raise |
|
a5b39d89dccb
Merged revisions 86391 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66132
diff
changeset
|
257 finally: |
|
a5b39d89dccb
Merged revisions 86391 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66132
diff
changeset
|
258 self.sock.close() |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
259 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
260 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
261 def socket(self): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
262 """Return socket instance used to connect to IMAP4 server. |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
263 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
264 socket = <instance>.socket() |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
265 """ |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
266 return self.sock |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
267 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
268 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
269 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
270 # Utility methods |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
271 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
272 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
273 def recent(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
274 """Return most recent 'RECENT' responses if any exist, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
275 else prompt server for an update using the 'NOOP' command. |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
276 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
277 (typ, [data]) = <instance>.recent() |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
278 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
279 'data' is None if no new messages, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
280 else list of RECENT responses, most recent last. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
281 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
282 name = 'RECENT' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
283 typ, dat = self._untagged_response('OK', [None], name) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
284 if dat[-1]: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
285 return typ, dat |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
286 typ, dat = self.noop() # Prod server for response |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
287 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
288 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
289 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
290 def response(self, code): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
291 """Return data for response 'code' if received, or None. |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
292 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
293 Old value for response 'code' is cleared. |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
294 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
295 (code, [data]) = <instance>.response(code) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
296 """ |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
297 return self._untagged_response(code, [None], code.upper()) |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
298 |
|
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
299 |
|
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
300 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
301 # IMAP4 commands |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
302 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
303 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
304 def append(self, mailbox, flags, date_time, message): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
305 """Append message to named mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
306 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
307 (typ, [data]) = <instance>.append(mailbox, flags, date_time, message) |
| 11562 | 308 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
309 All args except `message' can be None. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
310 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
311 name = 'APPEND' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
312 if not mailbox: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
313 mailbox = 'INBOX' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
314 if flags: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
315 if (flags[0],flags[-1]) != ('(',')'): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
316 flags = '(%s)' % flags |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
317 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
318 flags = None |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
319 if date_time: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
320 date_time = Time2Internaldate(date_time) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
321 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
322 date_time = None |
|
28899
081ef7b6be04
added code to canonicalise line endings in data sent via "append" - fix for bug report 723962
Piers Lauder <piers@cs.su.oz.au>
parents:
28414
diff
changeset
|
323 self.literal = MapCRLF.sub(CRLF, message) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
324 return self._simple_command(name, mailbox, flags, date_time) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
325 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
326 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
327 def authenticate(self, mechanism, authobject): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
328 """Authenticate command - requires response processing. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
329 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
330 'mechanism' specifies which authentication mechanism is to |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
331 be used - it must appear in <instance>.capabilities in the |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
332 form AUTH=<mechanism>. |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
333 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
334 'authobject' must be a callable object: |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
335 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
336 data = authobject(response) |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
337 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
338 It will be called to process server continuation responses. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
339 It should return data that will be encoded and sent to server. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
340 It should return None if the client abort response '*' should |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
341 be sent instead. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
342 """ |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
343 mech = mechanism.upper() |
|
29660
9a4bcfddbfa1
Comment out cap, it was unused.
Neal Norwitz <nnorwitz@gmail.com>
parents:
28900
diff
changeset
|
344 # XXX: shouldn't this code be removed, not commented out? |
|
9a4bcfddbfa1
Comment out cap, it was unused.
Neal Norwitz <nnorwitz@gmail.com>
parents:
28900
diff
changeset
|
345 #cap = 'AUTH=%s' % mech |
|
26387
fcf9734e1021
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
26336
diff
changeset
|
346 #if not cap in self.capabilities: # Let the server decide! |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
347 # raise self.error("Server doesn't allow %s authentication." % mech) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
348 self.literal = _Authenticator(authobject).process |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
349 typ, dat = self._simple_command('AUTHENTICATE', mech) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
350 if typ != 'OK': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
351 raise self.error(dat[-1]) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
352 self.state = 'AUTH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
353 return typ, dat |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
354 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
355 |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
356 def capability(self): |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
357 """(typ, [data]) = <instance>.capability() |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
358 Fetch capabilities list from server.""" |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
359 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
360 name = 'CAPABILITY' |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
361 typ, dat = self._simple_command(name) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
362 return self._untagged_response(typ, dat, name) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
363 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
364 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
365 def check(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
366 """Checkpoint mailbox on server. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
367 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
368 (typ, [data]) = <instance>.check() |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
369 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
370 return self._simple_command('CHECK') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
371 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
372 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
373 def close(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
374 """Close currently selected mailbox. |
|
7924
de90bbe85013
Piers' new version (but I unfolded a few doc strings).
Guido van Rossum <guido@python.org>
parents:
7918
diff
changeset
|
375 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
376 Deleted messages are removed from writable mailbox. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
377 This is the recommended command before 'LOGOUT'. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
378 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
379 (typ, [data]) = <instance>.close() |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
380 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
381 try: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
382 typ, dat = self._simple_command('CLOSE') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
383 finally: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
384 self.state = 'AUTH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
385 return typ, dat |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
386 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
387 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
388 def copy(self, message_set, new_mailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
389 """Copy 'message_set' messages onto end of 'new_mailbox'. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
390 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
391 (typ, [data]) = <instance>.copy(message_set, new_mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
392 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
393 return self._simple_command('COPY', message_set, new_mailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
394 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
395 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
396 def create(self, mailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
397 """Create new mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
398 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
399 (typ, [data]) = <instance>.create(mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
400 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
401 return self._simple_command('CREATE', mailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
402 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
403 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
404 def delete(self, mailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
405 """Delete old mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
406 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
407 (typ, [data]) = <instance>.delete(mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
408 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
409 return self._simple_command('DELETE', mailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
410 |
|
32828
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
411 def deleteacl(self, mailbox, who): |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
412 """Delete the ACLs (remove any rights) set for who on mailbox. |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
413 |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
414 (typ, [data]) = <instance>.deleteacl(mailbox, who) |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
415 """ |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
416 return self._simple_command('DELETEACL', mailbox, who) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
417 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
418 def expunge(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
419 """Permanently remove deleted items from selected mailbox. |
|
7924
de90bbe85013
Piers' new version (but I unfolded a few doc strings).
Guido van Rossum <guido@python.org>
parents:
7918
diff
changeset
|
420 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
421 Generates 'EXPUNGE' response for each deleted message. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
422 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
423 (typ, [data]) = <instance>.expunge() |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
424 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
425 'data' is list of 'EXPUNGE'd message numbers in order received. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
426 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
427 name = 'EXPUNGE' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
428 typ, dat = self._simple_command(name) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
429 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
430 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
431 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
432 def fetch(self, message_set, message_parts): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
433 """Fetch (parts of) messages. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
434 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
435 (typ, [data, ...]) = <instance>.fetch(message_set, message_parts) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
436 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
437 'message_parts' should be a string of selected parts |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
438 enclosed in parentheses, eg: "(UID BODY[TEXT])". |
|
12751
2c2b40eb3a65
Piers Lauder <piers@cs.su.oz.au>:
Fred Drake <fdrake@acm.org>
parents:
12081
diff
changeset
|
439 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
440 'data' are tuples of message part envelope and data. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
441 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
442 name = 'FETCH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
443 typ, dat = self._simple_command(name, message_set, message_parts) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
444 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
445 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
446 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
447 def getacl(self, mailbox): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
448 """Get the ACLs for a mailbox. |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
449 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
450 (typ, [data]) = <instance>.getacl(mailbox) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
451 """ |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
452 typ, dat = self._simple_command('GETACL', mailbox) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
453 return self._untagged_response(typ, dat, 'ACL') |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
454 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
455 |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
456 def getannotation(self, mailbox, entry, attribute): |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
457 """(typ, [data]) = <instance>.getannotation(mailbox, entry, attribute) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
458 Retrieve ANNOTATIONs.""" |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
459 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
460 typ, dat = self._simple_command('GETANNOTATION', mailbox, entry, attribute) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
461 return self._untagged_response(typ, dat, 'ANNOTATION') |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
462 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
463 |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
464 def getquota(self, root): |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
465 """Get the quota root's resource usage and limits. |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
466 |
|
23880
bbaeaf2719c4
Whitespace normalization (tabs -> spaces)
Neal Norwitz <nnorwitz@gmail.com>
parents:
23878
diff
changeset
|
467 Part of the IMAP4 QUOTA extension defined in rfc2087. |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
468 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
469 (typ, [data]) = <instance>.getquota(root) |
|
23880
bbaeaf2719c4
Whitespace normalization (tabs -> spaces)
Neal Norwitz <nnorwitz@gmail.com>
parents:
23878
diff
changeset
|
470 """ |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
471 typ, dat = self._simple_command('GETQUOTA', root) |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
472 return self._untagged_response(typ, dat, 'QUOTA') |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
473 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
474 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
475 def getquotaroot(self, mailbox): |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
476 """Get the list of quota roots for the named mailbox. |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
477 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
478 (typ, [[QUOTAROOT responses...], [QUOTA responses]]) = <instance>.getquotaroot(mailbox) |
|
23880
bbaeaf2719c4
Whitespace normalization (tabs -> spaces)
Neal Norwitz <nnorwitz@gmail.com>
parents:
23878
diff
changeset
|
479 """ |
|
33077
743abac9f9fe
Fix typo in getquotaroot parameter reported by Thierry FLORAC. Also amplify doc string for select to indicate proper way to obtain other responses.
Piers Lauder <piers@cs.su.oz.au>
parents:
32828
diff
changeset
|
480 typ, dat = self._simple_command('GETQUOTAROOT', mailbox) |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
481 typ, quota = self._untagged_response(typ, dat, 'QUOTA') |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
482 typ, quotaroot = self._untagged_response(typ, dat, 'QUOTAROOT') |
|
23880
bbaeaf2719c4
Whitespace normalization (tabs -> spaces)
Neal Norwitz <nnorwitz@gmail.com>
parents:
23878
diff
changeset
|
483 return typ, [quotaroot, quota] |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
484 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
485 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
486 def list(self, directory='""', pattern='*'): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
487 """List mailbox names in directory matching pattern. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
488 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
489 (typ, [data]) = <instance>.list(directory='""', pattern='*') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
490 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
491 'data' is list of LIST responses. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
492 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
493 name = 'LIST' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
494 typ, dat = self._simple_command(name, directory, pattern) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
495 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
496 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
497 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
498 def login(self, user, password): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
499 """Identify client using plaintext password. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
500 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
501 (typ, [data]) = <instance>.login(user, password) |
| 11562 | 502 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
503 NB: 'password' will be quoted. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
504 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
505 typ, dat = self._simple_command('LOGIN', user, self._quote(password)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
506 if typ != 'OK': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
507 raise self.error(dat[-1]) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
508 self.state = 'AUTH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
509 return typ, dat |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
510 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
511 |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
512 def login_cram_md5(self, user, password): |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
513 """ Force use of CRAM-MD5 authentication. |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
514 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
515 (typ, [data]) = <instance>.login_cram_md5(user, password) |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
516 """ |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
517 self.user, self.password = user, password |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
518 return self.authenticate('CRAM-MD5', self._CRAM_MD5_AUTH) |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
519 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
520 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
521 def _CRAM_MD5_AUTH(self, challenge): |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
522 """ Authobject to use with CRAM-MD5 authentication. """ |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
523 import hmac |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
524 return self.user + " " + hmac.HMAC(self.password, challenge).hexdigest() |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
525 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
526 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
527 def logout(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
528 """Shutdown connection to server. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
529 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
530 (typ, [data]) = <instance>.logout() |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
531 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
532 Returns server 'BYE' response. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
533 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
534 self.state = 'LOGOUT' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
535 try: typ, dat = self._simple_command('LOGOUT') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
536 except: typ, dat = 'NO', ['%s: %s' % sys.exc_info()[:2]] |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
537 self.shutdown() |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
538 if 'BYE' in self.untagged_responses: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
539 return 'BYE', self.untagged_responses['BYE'] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
540 return typ, dat |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
541 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
542 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
543 def lsub(self, directory='""', pattern='*'): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
544 """List 'subscribed' mailbox names in directory matching pattern. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
545 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
546 (typ, [data, ...]) = <instance>.lsub(directory='""', pattern='*') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
547 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
548 'data' are tuples of message part envelope and data. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
549 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
550 name = 'LSUB' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
551 typ, dat = self._simple_command(name, directory, pattern) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
552 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
553 |
|
32828
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
554 def myrights(self, mailbox): |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
555 """Show my ACLs for a mailbox (i.e. the rights that I have on mailbox). |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
556 |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
557 (typ, [data]) = <instance>.myrights(mailbox) |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
558 """ |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
559 typ,dat = self._simple_command('MYRIGHTS', mailbox) |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
560 return self._untagged_response(typ, dat, 'MYRIGHTS') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
561 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
562 def namespace(self): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
563 """ Returns IMAP namespaces ala rfc2342 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
564 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
565 (typ, [data, ...]) = <instance>.namespace() |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
566 """ |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
567 name = 'NAMESPACE' |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
568 typ, dat = self._simple_command(name) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
569 return self._untagged_response(typ, dat, name) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
570 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
571 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
572 def noop(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
573 """Send NOOP command. |
|
8453
4e59d890a4bd
Piers Lauders' latest version, with some of my own changes reapplied.
Guido van Rossum <guido@python.org>
parents:
8394
diff
changeset
|
574 |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
575 (typ, [data]) = <instance>.noop() |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
576 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
577 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
578 if self.debug >= 3: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
579 self._dump_ur(self.untagged_responses) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
580 return self._simple_command('NOOP') |
|
8453
4e59d890a4bd
Piers Lauders' latest version, with some of my own changes reapplied.
Guido van Rossum <guido@python.org>
parents:
8394
diff
changeset
|
581 |
|
4e59d890a4bd
Piers Lauders' latest version, with some of my own changes reapplied.
Guido van Rossum <guido@python.org>
parents:
8394
diff
changeset
|
582 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
583 def partial(self, message_num, message_part, start, length): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
584 """Fetch truncated part of a message. |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
585 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
586 (typ, [data, ...]) = <instance>.partial(message_num, message_part, start, length) |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
587 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
588 'data' is tuple of message part envelope and data. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
589 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
590 name = 'PARTIAL' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
591 typ, dat = self._simple_command(name, message_num, message_part, start, length) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
592 return self._untagged_response(typ, dat, 'FETCH') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
593 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
594 |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
595 def proxyauth(self, user): |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
596 """Assume authentication as "user". |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
597 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
598 Allows an authorised administrator to proxy into any user's |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
599 mailbox. |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
600 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
601 (typ, [data]) = <instance>.proxyauth(user) |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
602 """ |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
603 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
604 name = 'PROXYAUTH' |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
605 return self._simple_command('PROXYAUTH', user) |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
606 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
607 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
608 def rename(self, oldmailbox, newmailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
609 """Rename old mailbox name to new. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
610 |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
611 (typ, [data]) = <instance>.rename(oldmailbox, newmailbox) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
612 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
613 return self._simple_command('RENAME', oldmailbox, newmailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
614 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
615 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
616 def search(self, charset, *criteria): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
617 """Search mailbox for matching messages. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
618 |
|
28414
0cf4e3240380
Replace criterium with criterion. Fixes #705120.
Martin v. Löwis <martin@v.loewis.de>
parents:
28089
diff
changeset
|
619 (typ, [data]) = <instance>.search(charset, criterion, ...) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
620 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
621 'data' is space separated list of matching message numbers. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
622 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
623 name = 'SEARCH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
624 if charset: |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
625 typ, dat = self._simple_command(name, 'CHARSET', charset, *criteria) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
626 else: |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
627 typ, dat = self._simple_command(name, *criteria) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
628 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
629 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
630 |
|
35487
4681a8fa46d0
changed select() so readonly flag is treated as a boolean
Piers Lauder <piers@cs.su.oz.au>
parents:
35205
diff
changeset
|
631 def select(self, mailbox='INBOX', readonly=False): |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
632 """Select a mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
633 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
634 Flush all untagged responses. |
|
8363
52d7a9e71221
Subject: bug fixes for imaplib.py
Guido van Rossum <guido@python.org>
parents:
8213
diff
changeset
|
635 |
|
35487
4681a8fa46d0
changed select() so readonly flag is treated as a boolean
Piers Lauder <piers@cs.su.oz.au>
parents:
35205
diff
changeset
|
636 (typ, [data]) = <instance>.select(mailbox='INBOX', readonly=False) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
637 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
638 'data' is count of messages in mailbox ('EXISTS' response). |
|
33077
743abac9f9fe
Fix typo in getquotaroot parameter reported by Thierry FLORAC. Also amplify doc string for select to indicate proper way to obtain other responses.
Piers Lauder <piers@cs.su.oz.au>
parents:
32828
diff
changeset
|
639 |
|
743abac9f9fe
Fix typo in getquotaroot parameter reported by Thierry FLORAC. Also amplify doc string for select to indicate proper way to obtain other responses.
Piers Lauder <piers@cs.su.oz.au>
parents:
32828
diff
changeset
|
640 Mandated responses are ('FLAGS', 'EXISTS', 'RECENT', 'UIDVALIDITY'), so |
|
743abac9f9fe
Fix typo in getquotaroot parameter reported by Thierry FLORAC. Also amplify doc string for select to indicate proper way to obtain other responses.
Piers Lauder <piers@cs.su.oz.au>
parents:
32828
diff
changeset
|
641 other responses should be obtained via <instance>.response('FLAGS') etc. |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
642 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
643 self.untagged_responses = {} # Flush old responses. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
644 self.is_readonly = readonly |
|
35487
4681a8fa46d0
changed select() so readonly flag is treated as a boolean
Piers Lauder <piers@cs.su.oz.au>
parents:
35205
diff
changeset
|
645 if readonly: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
646 name = 'EXAMINE' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
647 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
648 name = 'SELECT' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
649 typ, dat = self._simple_command(name, mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
650 if typ != 'OK': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
651 self.state = 'AUTH' # Might have been 'SELECTED' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
652 return typ, dat |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
653 self.state = 'SELECTED' |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
654 if 'READ-ONLY' in self.untagged_responses \ |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
655 and not readonly: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
656 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
657 if self.debug >= 1: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
658 self._dump_ur(self.untagged_responses) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
659 raise self.readonly('%s is not writable' % mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
660 return typ, self.untagged_responses.get('EXISTS', [None]) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
661 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
662 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
663 def setacl(self, mailbox, who, what): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
664 """Set a mailbox acl. |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
665 |
|
31798
c76606f372d1
fix name in setacl method doc string
Piers Lauder <piers@cs.su.oz.au>
parents:
31515
diff
changeset
|
666 (typ, [data]) = <instance>.setacl(mailbox, who, what) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
667 """ |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
668 return self._simple_command('SETACL', mailbox, who, what) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
669 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
670 |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
671 def setannotation(self, *args): |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
672 """(typ, [data]) = <instance>.setannotation(mailbox[, entry, attribute]+) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
673 Set ANNOTATIONs.""" |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
674 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
675 typ, dat = self._simple_command('SETANNOTATION', *args) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
676 return self._untagged_response(typ, dat, 'ANNOTATION') |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
677 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
678 |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
679 def setquota(self, root, limits): |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
680 """Set the quota root's resource limits. |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
681 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
682 (typ, [data]) = <instance>.setquota(root, limits) |
|
23880
bbaeaf2719c4
Whitespace normalization (tabs -> spaces)
Neal Norwitz <nnorwitz@gmail.com>
parents:
23878
diff
changeset
|
683 """ |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
684 typ, dat = self._simple_command('SETQUOTA', root, limits) |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
685 return self._untagged_response(typ, dat, 'QUOTA') |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
686 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
687 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
688 def sort(self, sort_criteria, charset, *search_criteria): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
689 """IMAP4rev1 extension SORT command. |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
690 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
691 (typ, [data]) = <instance>.sort(sort_criteria, charset, search_criteria, ...) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
692 """ |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
693 name = 'SORT' |
|
18787
f999d3609f74
Whitespace normalization, plus:
Tim Peters <tim.peters@gmail.com>
parents:
18765
diff
changeset
|
694 #if not name in self.capabilities: # Let the server decide! |
|
f999d3609f74
Whitespace normalization, plus:
Tim Peters <tim.peters@gmail.com>
parents:
18765
diff
changeset
|
695 # raise self.error('unimplemented extension command: %s' % name) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
696 if (sort_criteria[0],sort_criteria[-1]) != ('(',')'): |
|
18787
f999d3609f74
Whitespace normalization, plus:
Tim Peters <tim.peters@gmail.com>
parents:
18765
diff
changeset
|
697 sort_criteria = '(%s)' % sort_criteria |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
698 typ, dat = self._simple_command(name, sort_criteria, charset, *search_criteria) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
699 return self._untagged_response(typ, dat, name) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
700 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
701 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
702 def status(self, mailbox, names): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
703 """Request named status conditions for mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
704 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
705 (typ, [data]) = <instance>.status(mailbox, names) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
706 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
707 name = 'STATUS' |
|
18787
f999d3609f74
Whitespace normalization, plus:
Tim Peters <tim.peters@gmail.com>
parents:
18765
diff
changeset
|
708 #if self.PROTOCOL_VERSION == 'IMAP4': # Let the server decide! |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
709 # raise self.error('%s unimplemented in IMAP4 (obtain IMAP4rev1 server, or re-code)' % name) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
710 typ, dat = self._simple_command(name, mailbox, names) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
711 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
712 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
713 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
714 def store(self, message_set, command, flags): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
715 """Alters flag dispositions for messages in mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
716 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
717 (typ, [data]) = <instance>.store(message_set, command, flags) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
718 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
719 if (flags[0],flags[-1]) != ('(',')'): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
720 flags = '(%s)' % flags # Avoid quoting the flags |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
721 typ, dat = self._simple_command('STORE', message_set, command, flags) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
722 return self._untagged_response(typ, dat, 'FETCH') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
723 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
724 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
725 def subscribe(self, mailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
726 """Subscribe to new mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
727 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
728 (typ, [data]) = <instance>.subscribe(mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
729 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
730 return self._simple_command('SUBSCRIBE', mailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
731 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
732 |
|
30893
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
733 def thread(self, threading_algorithm, charset, *search_criteria): |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
734 """IMAPrev1 extension THREAD command. |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
735 |
|
57924
3b86b23c58fe
Merged revisions 77041 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
57663
diff
changeset
|
736 (type, [data]) = <instance>.thread(threading_algorithm, charset, search_criteria, ...) |
|
30893
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
737 """ |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
738 name = 'THREAD' |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
739 typ, dat = self._simple_command(name, threading_algorithm, charset, *search_criteria) |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
740 return self._untagged_response(typ, dat, name) |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
741 |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
742 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
743 def uid(self, command, *args): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
744 """Execute "command arg ..." with messages identified by UID, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
745 rather than message number. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
746 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
747 (typ, [data]) = <instance>.uid(command, arg1, arg2, ...) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
748 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
749 Returns response appropriate to 'command'. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
750 """ |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
751 command = command.upper() |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
752 if not command in Commands: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
753 raise self.error("Unknown IMAP4 UID command: %s" % command) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
754 if self.state not in Commands[command]: |
|
41160
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
755 raise self.error("command %s illegal in state %s, " |
|
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
756 "only allowed in states %s" % |
|
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
757 (command, self.state, |
|
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
758 ', '.join(Commands[command]))) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
759 name = 'UID' |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
760 typ, dat = self._simple_command(name, command, *args) |
|
63442
bf5c630daaf7
Merged revisions 83370,83372-83374,83384 via svnmerge from
Georg Brandl <georg@python.org>
parents:
59834
diff
changeset
|
761 if command in ('SEARCH', 'SORT', 'THREAD'): |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
762 name = command |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
763 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
764 name = 'FETCH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
765 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
766 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
767 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
768 def unsubscribe(self, mailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
769 """Unsubscribe from old mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
770 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
771 (typ, [data]) = <instance>.unsubscribe(mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
772 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
773 return self._simple_command('UNSUBSCRIBE', mailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
774 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
775 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
776 def xatom(self, name, *args): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
777 """Allow simple extension commands |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
778 notified by server in CAPABILITY response. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
779 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
780 Assumes command is legal in current state. |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
781 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
782 (typ, [data]) = <instance>.xatom(name, arg, ...) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
783 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
784 Returns response appropriate to extension command `name'. |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
785 """ |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
786 name = name.upper() |
|
18787
f999d3609f74
Whitespace normalization, plus:
Tim Peters <tim.peters@gmail.com>
parents:
18765
diff
changeset
|
787 #if not name in self.capabilities: # Let the server decide! |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
788 # raise self.error('unknown extension command: %s' % name) |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
789 if not name in Commands: |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
790 Commands[name] = (self.state,) |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
791 return self._simple_command(name, *args) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
792 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
793 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
794 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
795 # Private methods |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
796 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
797 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
798 def _append_untagged(self, typ, dat): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
799 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
800 if dat is None: dat = '' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
801 ur = self.untagged_responses |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
802 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
803 if self.debug >= 5: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
804 self._mesg('untagged_responses[%s] %s += ["%s"]' % |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
805 (typ, len(ur.get(typ,'')), dat)) |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
806 if typ in ur: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
807 ur[typ].append(dat) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
808 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
809 ur[typ] = [dat] |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
810 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
811 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
812 def _check_bye(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
813 bye = self.untagged_responses.get('BYE') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
814 if bye: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
815 raise self.abort(bye[-1]) |
| 11562 | 816 |
| 817 | |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
818 def _command(self, name, *args): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
819 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
820 if self.state not in Commands[name]: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
821 self.literal = None |
|
41160
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
822 raise self.error("command %s illegal in state %s, " |
|
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
823 "only allowed in states %s" % |
|
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
824 (name, self.state, |
|
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
825 ', '.join(Commands[name]))) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
826 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
827 for typ in ('OK', 'NO', 'BAD'): |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
828 if typ in self.untagged_responses: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
829 del self.untagged_responses[typ] |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
830 |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
831 if 'READ-ONLY' in self.untagged_responses \ |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
832 and not self.is_readonly: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
833 raise self.readonly('mailbox status changed to READ-ONLY') |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
834 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
835 tag = self._new_tag() |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
836 data = '%s %s' % (tag, name) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
837 for arg in args: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
838 if arg is None: continue |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
839 data = '%s %s' % (data, self._checkquote(arg)) |
|
8453
4e59d890a4bd
Piers Lauders' latest version, with some of my own changes reapplied.
Guido van Rossum <guido@python.org>
parents:
8394
diff
changeset
|
840 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
841 literal = self.literal |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
842 if literal is not None: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
843 self.literal = None |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
844 if type(literal) is type(self._command): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
845 literator = literal |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
846 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
847 literator = None |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
848 data = '%s {%s}' % (data, len(literal)) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
849 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
850 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
851 if self.debug >= 4: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
852 self._mesg('> %s' % data) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
853 else: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
854 self._log('> %s' % data) |
| 11562 | 855 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
856 try: |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
857 self.send('%s%s' % (data, CRLF)) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
858 except (socket.error, OSError), val: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
859 raise self.abort('socket error: %s' % val) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
860 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
861 if literal is None: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
862 return tag |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
863 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
864 while 1: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
865 # Wait for continuation response |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
866 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
867 while self._get_response(): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
868 if self.tagged_commands[tag]: # BAD/NO? |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
869 return tag |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
870 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
871 # Send literal |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
872 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
873 if literator: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
874 literal = literator(self.continuation_response) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
875 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
876 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
877 if self.debug >= 4: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
878 self._mesg('write literal size %s' % len(literal)) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
879 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
880 try: |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
881 self.send(literal) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
882 self.send(CRLF) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
883 except (socket.error, OSError), val: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
884 raise self.abort('socket error: %s' % val) |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
885 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
886 if not literator: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
887 break |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
888 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
889 return tag |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
890 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
891 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
892 def _command_complete(self, name, tag): |
|
66132
1817b7088d8d
Merged revisions 86388 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66129
diff
changeset
|
893 # BYE is expected after LOGOUT |
|
1817b7088d8d
Merged revisions 86388 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66129
diff
changeset
|
894 if name != 'LOGOUT': |
|
1817b7088d8d
Merged revisions 86388 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66129
diff
changeset
|
895 self._check_bye() |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
896 try: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
897 typ, data = self._get_tagged_response(tag) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
898 except self.abort, val: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
899 raise self.abort('command: %s => %s' % (name, val)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
900 except self.error, val: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
901 raise self.error('command: %s => %s' % (name, val)) |
|
66132
1817b7088d8d
Merged revisions 86388 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66129
diff
changeset
|
902 if name != 'LOGOUT': |
|
1817b7088d8d
Merged revisions 86388 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
66129
diff
changeset
|
903 self._check_bye() |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
904 if typ == 'BAD': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
905 raise self.error('%s command error: %s %s' % (name, typ, data)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
906 return typ, data |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
907 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
908 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
909 def _get_response(self): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
910 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
911 # Read response and store. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
912 # |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
913 # Returns None for continuation responses, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
914 # otherwise first response line received. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
915 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
916 resp = self._get_line() |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
917 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
918 # Command completion response? |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
919 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
920 if self._match(self.tagre, resp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
921 tag = self.mo.group('tag') |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
922 if not tag in self.tagged_commands: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
923 raise self.abort('unexpected tagged response: %s' % resp) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
924 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
925 typ = self.mo.group('type') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
926 dat = self.mo.group('data') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
927 self.tagged_commands[tag] = (typ, [dat]) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
928 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
929 dat2 = None |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
930 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
931 # '*' (untagged) responses? |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
932 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
933 if not self._match(Untagged_response, resp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
934 if self._match(Untagged_status, resp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
935 dat2 = self.mo.group('data2') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
936 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
937 if self.mo is None: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
938 # Only other possibility is '+' (continuation) response... |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
939 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
940 if self._match(Continuation, resp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
941 self.continuation_response = self.mo.group('data') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
942 return None # NB: indicates continuation |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
943 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
944 raise self.abort("unexpected response: '%s'" % resp) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
945 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
946 typ = self.mo.group('type') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
947 dat = self.mo.group('data') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
948 if dat is None: dat = '' # Null untagged response |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
949 if dat2: dat = dat + ' ' + dat2 |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
950 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
951 # Is there a literal to come? |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
952 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
953 while self._match(Literal, dat): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
954 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
955 # Read literal direct from connection. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
956 |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
957 size = int(self.mo.group('size')) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
958 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
959 if self.debug >= 4: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
960 self._mesg('read literal size %s' % size) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
961 data = self.read(size) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
962 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
963 # Store response with literal as tuple |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
964 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
965 self._append_untagged(typ, (dat, data)) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
966 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
967 # Read trailer - possibly containing another literal |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
968 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
969 dat = self._get_line() |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
970 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
971 self._append_untagged(typ, dat) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
972 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
973 # Bracketed response information? |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
974 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
975 if typ in ('OK', 'NO', 'BAD') and self._match(Response_code, dat): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
976 self._append_untagged(self.mo.group('type'), self.mo.group('data')) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
977 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
978 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
979 if self.debug >= 1 and typ in ('NO', 'BAD', 'BYE'): |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
980 self._mesg('%s response: %s' % (typ, dat)) |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
981 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
982 return resp |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
983 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
984 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
985 def _get_tagged_response(self, tag): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
986 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
987 while 1: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
988 result = self.tagged_commands[tag] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
989 if result is not None: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
990 del self.tagged_commands[tag] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
991 return result |
|
11803
c2286a1c2f29
Patches by Piers Lauder.
Guido van Rossum <guido@python.org>
parents:
11562
diff
changeset
|
992 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
993 # Some have reported "unexpected response" exceptions. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
994 # Note that ignoring them here causes loops. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
995 # Instead, send me details of the unexpected response and |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
996 # I'll update the code in `_get_response()'. |
|
11803
c2286a1c2f29
Patches by Piers Lauder.
Guido van Rossum <guido@python.org>
parents:
11562
diff
changeset
|
997 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
998 try: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
999 self._get_response() |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1000 except self.abort, val: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1001 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1002 if self.debug >= 1: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1003 self.print_log() |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1004 raise |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1005 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1006 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1007 def _get_line(self): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1008 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
1009 line = self.readline() |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1010 if not line: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1011 raise self.abort('socket error: EOF') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1012 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1013 # Protocol mandates all lines terminated by CRLF |
|
57663
256e9f00d061
Merged revisions 76726-76727 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
54093
diff
changeset
|
1014 if not line.endswith('\r\n'): |
|
256e9f00d061
Merged revisions 76726-76727 via svnmerge from
R. David Murray <rdmurray@bitdance.com>
parents:
54093
diff
changeset
|
1015 raise self.abort('socket error: unterminated line') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1016 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1017 line = line[:-2] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1018 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1019 if self.debug >= 4: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1020 self._mesg('< %s' % line) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1021 else: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1022 self._log('< %s' % line) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1023 return line |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1024 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1025 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1026 def _match(self, cre, s): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1027 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1028 # Run compiled regular expression match method on 's'. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1029 # Save result, return success. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1030 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1031 self.mo = cre.match(s) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1032 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1033 if self.mo is not None and self.debug >= 5: |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
30893
diff
changeset
|
1034 self._mesg("\tmatched r'%s' => %r" % (cre.pattern, self.mo.groups())) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1035 return self.mo is not None |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1036 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1037 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1038 def _new_tag(self): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1039 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1040 tag = '%s%s' % (self.tagpre, self.tagnum) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1041 self.tagnum = self.tagnum + 1 |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1042 self.tagged_commands[tag] = None |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1043 return tag |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1044 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1045 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1046 def _checkquote(self, arg): |
| 11562 | 1047 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1048 # Must quote command args if non-alphanumeric chars present, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1049 # and not already quoted. |
| 11562 | 1050 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1051 if type(arg) is not type(''): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1052 return arg |
|
33689
a5c88f2e86a3
Fix bug in _checkquote that raised an exception on empty "arg".
Piers Lauder <piers@cs.su.oz.au>
parents:
33597
diff
changeset
|
1053 if len(arg) >= 2 and (arg[0],arg[-1]) in (('(',')'),('"','"')): |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1054 return arg |
|
33689
a5c88f2e86a3
Fix bug in _checkquote that raised an exception on empty "arg".
Piers Lauder <piers@cs.su.oz.au>
parents:
33597
diff
changeset
|
1055 if arg and self.mustquote.search(arg) is None: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1056 return arg |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1057 return self._quote(arg) |
| 11562 | 1058 |
| 1059 | |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1060 def _quote(self, arg): |
| 11562 | 1061 |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
1062 arg = arg.replace('\\', '\\\\') |
|
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
1063 arg = arg.replace('"', '\\"') |
| 11562 | 1064 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1065 return '"%s"' % arg |
| 11562 | 1066 |
| 1067 | |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1068 def _simple_command(self, name, *args): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1069 |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
1070 return self._command_complete(name, self._command(name, *args)) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1071 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1072 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1073 def _untagged_response(self, typ, dat, name): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1074 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1075 if typ == 'NO': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1076 return typ, dat |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
1077 if not name in self.untagged_responses: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1078 return typ, [None] |
|
24058
37ffce2d9c3c
Code modernization. Replace v=s[i]; del s[i] with single lookup v=s.pop(i)
Raymond Hettinger <python@rcn.com>
parents:
23971
diff
changeset
|
1079 data = self.untagged_responses.pop(name) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1080 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1081 if self.debug >= 5: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1082 self._mesg('untagged_responses[%s] => %s' % (name, data)) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1083 return typ, data |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1084 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1085 |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1086 if __debug__: |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1087 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1088 def _mesg(self, s, secs=None): |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1089 if secs is None: |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1090 secs = time.time() |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1091 tm = time.strftime('%M:%S', time.localtime(secs)) |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1092 sys.stderr.write(' %s.%02d %s\n' % (tm, (secs*100)%100, s)) |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1093 sys.stderr.flush() |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1094 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1095 def _dump_ur(self, dict): |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1096 # Dump untagged responses (in `dict'). |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1097 l = dict.items() |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1098 if not l: return |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1099 t = '\n\t\t' |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1100 l = map(lambda x:'%s: "%s"' % (x[0], x[1][0] and '" "'.join(x[1]) or ''), l) |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1101 self._mesg('untagged responses dump:%s%s' % (t, t.join(l))) |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1102 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1103 def _log(self, line): |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1104 # Keep log of last `_cmd_log_len' interactions for debugging. |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1105 self._cmd_log[self._cmd_log_idx] = (line, time.time()) |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1106 self._cmd_log_idx += 1 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1107 if self._cmd_log_idx >= self._cmd_log_len: |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1108 self._cmd_log_idx = 0 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1109 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1110 def print_log(self): |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1111 self._mesg('last %d IMAP4 interactions:' % len(self._cmd_log)) |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1112 i, n = self._cmd_log_idx, self._cmd_log_len |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1113 while n: |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1114 try: |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
1115 self._mesg(*self._cmd_log[i]) |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1116 except: |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1117 pass |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1118 i += 1 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1119 if i >= self._cmd_log_len: |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1120 i = 0 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1121 n -= 1 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1122 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1123 |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1124 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1125 try: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1126 import ssl |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1127 except ImportError: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1128 pass |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1129 else: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1130 class IMAP4_SSL(IMAP4): |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1131 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1132 """IMAP4 client class over SSL connection |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1133 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1134 Instantiate with: IMAP4_SSL([host[, port[, keyfile[, certfile]]]]) |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1135 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1136 host - host's name (default: localhost); |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1137 port - port number (default: standard IMAP4 SSL port). |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1138 keyfile - PEM formatted file that contains your private key (default: None); |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1139 certfile - PEM formatted certificate chain file (default: None); |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1140 |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1141 for more documentation see the docstring of the parent class IMAP4. |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1142 """ |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1143 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1144 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1145 def __init__(self, host = '', port = IMAP4_SSL_PORT, keyfile = None, certfile = None): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1146 self.keyfile = keyfile |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1147 self.certfile = certfile |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1148 IMAP4.__init__(self, host, port) |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1149 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1150 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1151 def open(self, host = '', port = IMAP4_SSL_PORT): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1152 """Setup connection to remote server on "host:port". |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1153 (default: localhost:standard IMAP4 SSL port). |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1154 This connection will be used by the routines: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1155 read, readline, send, shutdown. |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1156 """ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1157 self.host = host |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1158 self.port = port |
|
54093
88d965be8617
Merged revisions 72662 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
45473
diff
changeset
|
1159 self.sock = socket.create_connection((host, port)) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43162
diff
changeset
|
1160 self.sslobj = ssl.wrap_socket(self.sock, self.keyfile, self.certfile) |
|
70351
0dee36595699
Issue #1441530: In imaplib, use makefile() to wrap the SSL socket to avoid
Charles-François Natali <neologix@free.fr>
parents:
68588
diff
changeset
|
1161 self.file = self.sslobj.makefile('rb') |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1162 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1163 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1164 def read(self, size): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1165 """Read 'size' bytes from remote.""" |
|
70351
0dee36595699
Issue #1441530: In imaplib, use makefile() to wrap the SSL socket to avoid
Charles-François Natali <neologix@free.fr>
parents:
68588
diff
changeset
|
1166 return self.file.read(size) |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1167 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1168 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1169 def readline(self): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1170 """Read line from remote.""" |
|
70351
0dee36595699
Issue #1441530: In imaplib, use makefile() to wrap the SSL socket to avoid
Charles-François Natali <neologix@free.fr>
parents:
68588
diff
changeset
|
1171 return self.file.readline() |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1172 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1173 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1174 def send(self, data): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1175 """Send data to remote.""" |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1176 bytes = len(data) |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1177 while bytes > 0: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1178 sent = self.sslobj.write(data) |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1179 if sent == bytes: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1180 break # avoid copy |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1181 data = data[sent:] |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1182 bytes = bytes - sent |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1183 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1184 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1185 def shutdown(self): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1186 """Close I/O established in "open".""" |
|
70351
0dee36595699
Issue #1441530: In imaplib, use makefile() to wrap the SSL socket to avoid
Charles-François Natali <neologix@free.fr>
parents:
68588
diff
changeset
|
1187 self.file.close() |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1188 self.sock.close() |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1189 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1190 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1191 def socket(self): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1192 """Return socket instance used to connect to IMAP4 server. |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1193 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1194 socket = <instance>.socket() |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1195 """ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1196 return self.sock |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1197 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1198 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1199 def ssl(self): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1200 """Return SSLObject instance used to communicate with the IMAP4 server. |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1201 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43162
diff
changeset
|
1202 ssl = ssl.wrap_socket(<instance>.socket) |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1203 """ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1204 return self.sslobj |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1205 |
|
43093
1d57fb7efb15
Don't lie in __all__ attributes when SSL is not available: only add the SSL
Thomas Wouters <thomas@python.org>
parents:
43008
diff
changeset
|
1206 __all__.append("IMAP4_SSL") |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1207 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1208 |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1209 class IMAP4_stream(IMAP4): |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1210 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1211 """IMAP4 client class over a stream |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1212 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1213 Instantiate with: IMAP4_stream(command) |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1214 |
|
59834
9eabba6ded09
Merged revisions 77120,77151,77155,77209,77229,77256,77317,77331,77333,77359-77360,77382,77561,77570 via svnmerge from
Georg Brandl <georg@python.org>
parents:
58075
diff
changeset
|
1215 where "command" is a string that can be passed to subprocess.Popen() |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1216 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1217 for more documentation see the docstring of the parent class IMAP4. |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1218 """ |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1219 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1220 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1221 def __init__(self, command): |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1222 self.command = command |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1223 IMAP4.__init__(self) |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1224 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1225 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1226 def open(self, host = None, port = None): |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1227 """Setup a stream connection. |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1228 This connection will be used by the routines: |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1229 read, readline, send, shutdown. |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1230 """ |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1231 self.host = None # For compatibility with parent class |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1232 self.port = None |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1233 self.sock = None |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1234 self.file = None |
|
58075
747b01a05300
Merged revisions 77222 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
57924
diff
changeset
|
1235 self.process = subprocess.Popen(self.command, |
|
747b01a05300
Merged revisions 77222 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
57924
diff
changeset
|
1236 stdin=subprocess.PIPE, stdout=subprocess.PIPE, |
|
747b01a05300
Merged revisions 77222 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
57924
diff
changeset
|
1237 shell=True, close_fds=True) |
|
747b01a05300
Merged revisions 77222 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
57924
diff
changeset
|
1238 self.writefile = self.process.stdin |
|
747b01a05300
Merged revisions 77222 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
57924
diff
changeset
|
1239 self.readfile = self.process.stdout |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1240 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1241 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1242 def read(self, size): |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1243 """Read 'size' bytes from remote.""" |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1244 return self.readfile.read(size) |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1245 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1246 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1247 def readline(self): |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1248 """Read line from remote.""" |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1249 return self.readfile.readline() |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1250 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1251 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1252 def send(self, data): |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1253 """Send data to remote.""" |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1254 self.writefile.write(data) |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1255 self.writefile.flush() |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1256 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1257 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1258 def shutdown(self): |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1259 """Close I/O established in "open".""" |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1260 self.readfile.close() |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1261 self.writefile.close() |
|
58075
747b01a05300
Merged revisions 77222 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
57924
diff
changeset
|
1262 self.process.wait() |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1263 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1264 |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1265 |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1266 class _Authenticator: |
|
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1267 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1268 """Private class to provide en/decoding |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1269 for base64-based authentication conversation. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1270 """ |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1271 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1272 def __init__(self, mechinst): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1273 self.mech = mechinst # Callable object to provide/process data |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1274 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1275 def process(self, data): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1276 ret = self.mech(self.decode(data)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1277 if ret is None: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1278 return '*' # Abort conversation |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1279 return self.encode(ret) |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1280 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1281 def encode(self, inp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1282 # |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1283 # Invoke binascii.b2a_base64 iteratively with |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1284 # short even length buffers, strip the trailing |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1285 # line feed from the result and append. "Even" |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1286 # means a number that factors to both 6 and 8, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1287 # so when it gets to the end of the 8-bit input |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1288 # there's no partial 6-bit output. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1289 # |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1290 oup = '' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1291 while inp: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1292 if len(inp) > 48: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1293 t = inp[:48] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1294 inp = inp[48:] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1295 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1296 t = inp |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1297 inp = '' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1298 e = binascii.b2a_base64(t) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1299 if e: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1300 oup = oup + e[:-1] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1301 return oup |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1302 |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1303 def decode(self, inp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1304 if not inp: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1305 return '' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1306 return binascii.a2b_base64(inp) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1307 |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1308 |
|
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1309 |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1310 Mon2num = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1311 'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12} |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1312 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1313 def Internaldate2tuple(resp): |
|
67693
b880c8227c02
Merged revisions 88114 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66136
diff
changeset
|
1314 """Parse an IMAP4 INTERNALDATE string. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1315 |
|
67693
b880c8227c02
Merged revisions 88114 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66136
diff
changeset
|
1316 Return corresponding local time. The return value is a |
|
b880c8227c02
Merged revisions 88114 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66136
diff
changeset
|
1317 time.struct_time instance or None if the string has wrong format. |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1318 """ |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1319 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1320 mo = InternalDate.match(resp) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1321 if not mo: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1322 return None |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1323 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1324 mon = Mon2num[mo.group('mon')] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1325 zonen = mo.group('zonen') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1326 |
|
16732
8f034bcee856
Fix previous checkin, hopelessly broken as it was; reported by Detlef Lannert.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16728
diff
changeset
|
1327 day = int(mo.group('day')) |
|
8f034bcee856
Fix previous checkin, hopelessly broken as it was; reported by Detlef Lannert.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16728
diff
changeset
|
1328 year = int(mo.group('year')) |
|
8f034bcee856
Fix previous checkin, hopelessly broken as it was; reported by Detlef Lannert.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16728
diff
changeset
|
1329 hour = int(mo.group('hour')) |
|
8f034bcee856
Fix previous checkin, hopelessly broken as it was; reported by Detlef Lannert.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16728
diff
changeset
|
1330 min = int(mo.group('min')) |
|
8f034bcee856
Fix previous checkin, hopelessly broken as it was; reported by Detlef Lannert.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16728
diff
changeset
|
1331 sec = int(mo.group('sec')) |
|
8f034bcee856
Fix previous checkin, hopelessly broken as it was; reported by Detlef Lannert.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16728
diff
changeset
|
1332 zoneh = int(mo.group('zoneh')) |
|
8f034bcee856
Fix previous checkin, hopelessly broken as it was; reported by Detlef Lannert.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16728
diff
changeset
|
1333 zonem = int(mo.group('zonem')) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1334 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1335 # INTERNALDATE timezone must be subtracted to get UT |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1336 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1337 zone = (zoneh*60 + zonem)*60 |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1338 if zonen == '-': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1339 zone = -zone |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1340 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1341 tt = (year, mon, day, hour, min, sec, -1, -1, -1) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1342 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1343 utc = time.mktime(tt) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1344 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1345 # Following is necessary because the time module has no 'mkgmtime'. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1346 # 'mktime' assumes arg in local timezone, so adds timezone/altzone. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1347 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1348 lt = time.localtime(utc) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1349 if time.daylight and lt[-1]: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1350 zone = zone + time.altzone |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1351 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1352 zone = zone + time.timezone |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1353 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1354 return time.localtime(utc - zone) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1355 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1356 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1357 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1358 def Int2AP(num): |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1359 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1360 """Convert integer to A-P string representation.""" |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1361 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1362 val = ''; AP = 'ABCDEFGHIJKLMNOP' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1363 num = int(abs(num)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1364 while num: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1365 num, mod = divmod(num, 16) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1366 val = AP[mod] + val |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1367 return val |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1368 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1369 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1370 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1371 def ParseFlags(resp): |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1372 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1373 """Convert IMAP4 flags response to python tuple.""" |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1374 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1375 mo = Flags.match(resp) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1376 if not mo: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1377 return () |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1378 |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
1379 return tuple(mo.group('flags').split()) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1380 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1381 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1382 def Time2Internaldate(date_time): |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1383 |
|
67693
b880c8227c02
Merged revisions 88114 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66136
diff
changeset
|
1384 """Convert date_time to IMAP4 INTERNALDATE representation. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1385 |
|
67693
b880c8227c02
Merged revisions 88114 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66136
diff
changeset
|
1386 Return string in form: '"DD-Mmm-YYYY HH:MM:SS +HHMM"'. The |
|
68588
cd8d3c2d3bce
#11565: Fix several typos. Patch by Piotr Kasprzyk.
Ezio Melotti <ezio.melotti@gmail.com>
parents:
68256
diff
changeset
|
1387 date_time argument can be a number (int or float) representing |
|
67693
b880c8227c02
Merged revisions 88114 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66136
diff
changeset
|
1388 seconds since epoch (as returned by time.time()), a 9-tuple |
|
b880c8227c02
Merged revisions 88114 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66136
diff
changeset
|
1389 representing local time (as returned by time.localtime()), or a |
|
b880c8227c02
Merged revisions 88114 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66136
diff
changeset
|
1390 double-quoted string. In the last case, it is assumed to already |
|
b880c8227c02
Merged revisions 88114 via svnmerge from
Alexander Belopolsky <alexander.belopolsky@gmail.com>
parents:
66136
diff
changeset
|
1391 be in the correct format. |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1392 """ |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1393 |
|
21649
195917b7a602
Time2Internaldate(): Call isinstance() once for each of the type tests
Fred Drake <fdrake@acm.org>
parents:
21646
diff
changeset
|
1394 if isinstance(date_time, (int, float)): |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1395 tt = time.localtime(date_time) |
|
21649
195917b7a602
Time2Internaldate(): Call isinstance() once for each of the type tests
Fred Drake <fdrake@acm.org>
parents:
21646
diff
changeset
|
1396 elif isinstance(date_time, (tuple, time.struct_time)): |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1397 tt = date_time |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
1398 elif isinstance(date_time, str) and (date_time[0],date_time[-1]) == ('"','"'): |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1399 return date_time # Assume in correct format |
|
21649
195917b7a602
Time2Internaldate(): Call isinstance() once for each of the type tests
Fred Drake <fdrake@acm.org>
parents:
21646
diff
changeset
|
1400 else: |
|
195917b7a602
Time2Internaldate(): Call isinstance() once for each of the type tests
Fred Drake <fdrake@acm.org>
parents:
21646
diff
changeset
|
1401 raise ValueError("date_time not of a known type") |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1402 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1403 dt = time.strftime("%d-%b-%Y %H:%M:%S", tt) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1404 if dt[0] == '0': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1405 dt = ' ' + dt[1:] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1406 if time.daylight and tt[-1]: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1407 zone = -time.altzone |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1408 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1409 zone = -time.timezone |
|
33597
355b15e4a4da
Use floor division operator.
Raymond Hettinger <python@rcn.com>
parents:
33077
diff
changeset
|
1410 return '"' + dt + " %+03d%02d" % divmod(zone//60, 60) + '"' |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1411 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1412 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1413 |
| 11562 | 1414 if __name__ == '__main__': |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1415 |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1416 # To test: invoke either as 'python imaplib.py [IMAP4_server_hostname]' |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1417 # or 'python imaplib.py -s "rsh IMAP4_server_hostname exec /etc/rimapd"' |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1418 # to test the IMAP4_stream class |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1419 |
|
19227
84b60213159b
Remove redundant 'import sys' (PyChecker).
Guido van Rossum <guido@python.org>
parents:
19003
diff
changeset
|
1420 import getopt, getpass |
| 12073 | 1421 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1422 try: |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1423 optlist, args = getopt.getopt(sys.argv[1:], 'd:s:') |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1424 except getopt.error, val: |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1425 optlist, args = (), () |
|
8458
57dae1c7ea84
Improve the self-test code a bit: read a host from sys.argv[1] if set,
Guido van Rossum <guido@python.org>
parents:
8453
diff
changeset
|
1426 |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1427 stream_command = None |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1428 for opt,val in optlist: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1429 if opt == '-d': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1430 Debug = int(val) |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1431 elif opt == '-s': |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1432 stream_command = val |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1433 if not args: args = (stream_command,) |
| 12073 | 1434 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1435 if not args: args = ('',) |
| 12073 | 1436 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1437 host = args[0] |
|
8546
dc8daa748c40
Piers' latest version, labeled 2.11. This time he integrated my
Guido van Rossum <guido@python.org>
parents:
8520
diff
changeset
|
1438 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1439 USER = getpass.getuser() |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
1440 PASSWD = getpass.getpass("IMAP password for %s on %s: " % (USER, host or "localhost")) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1441 |
|
28899
081ef7b6be04
added code to canonicalise line endings in data sent via "append" - fix for bug report 723962
Piers Lauder <piers@cs.su.oz.au>
parents:
28414
diff
changeset
|
1442 test_mesg = 'From: %(user)s@localhost%(lf)sSubject: IMAP4 test%(lf)s%(lf)sdata...%(lf)s' % {'user':USER, 'lf':'\n'} |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1443 test_seq1 = ( |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1444 ('login', (USER, PASSWD)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1445 ('create', ('/tmp/xxx 1',)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1446 ('rename', ('/tmp/xxx 1', '/tmp/yyy')), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1447 ('CREATE', ('/tmp/yyz 2',)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1448 ('append', ('/tmp/yyz 2', None, None, test_mesg)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1449 ('list', ('/tmp', 'yy*')), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1450 ('select', ('/tmp/yyz 2',)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1451 ('search', (None, 'SUBJECT', 'test')), |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1452 ('fetch', ('1', '(FLAGS INTERNALDATE RFC822)')), |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1453 ('store', ('1', 'FLAGS', '(\Deleted)')), |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
1454 ('namespace', ()), |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1455 ('expunge', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1456 ('recent', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1457 ('close', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1458 ) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1459 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1460 test_seq2 = ( |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1461 ('select', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1462 ('response',('UIDVALIDITY',)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1463 ('uid', ('SEARCH', 'ALL')), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1464 ('response', ('EXISTS',)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1465 ('append', (None, None, None, test_mesg)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1466 ('recent', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1467 ('logout', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1468 ) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1469 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1470 def run(cmd, args): |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1471 M._mesg('%s %s' % (cmd, args)) |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
1472 typ, dat = getattr(M, cmd)(*args) |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1473 M._mesg('%s => %s %s' % (cmd, typ, dat)) |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1474 if typ == 'NO': raise dat[0] |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1475 return dat |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1476 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1477 try: |
|
26336
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1478 if stream_command: |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1479 M = IMAP4_stream(stream_command) |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1480 else: |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1481 M = IMAP4(host) |
|
10871f44e7db
added new IMAP4_stream class; added proxyauth command; added login_cram_md5 method
Piers Lauder <piers@cs.su.oz.au>
parents:
25955
diff
changeset
|
1482 if M.state == 'AUTH': |
|
26387
fcf9734e1021
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
26336
diff
changeset
|
1483 test_seq1 = test_seq1[1:] # Login not needed |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1484 M._mesg('PROTOCOL_VERSION = %s' % M.PROTOCOL_VERSION) |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
30893
diff
changeset
|
1485 M._mesg('CAPABILITIES = %r' % (M.capabilities,)) |
| 12073 | 1486 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1487 for cmd,args in test_seq1: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1488 run(cmd, args) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1489 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1490 for ml in run('list', ('/tmp/', 'yy%')): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1491 mo = re.match(r'.*"([^"]+)"$', ml) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1492 if mo: path = mo.group(1) |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
1493 else: path = ml.split()[-1] |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1494 run('delete', (path,)) |
| 12073 | 1495 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1496 for cmd,args in test_seq2: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1497 dat = run(cmd, args) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1498 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1499 if (cmd,args) != ('uid', ('SEARCH', 'ALL')): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1500 continue |
| 12073 | 1501 |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
1502 uid = dat[-1].split() |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1503 if not uid: continue |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1504 run('uid', ('FETCH', '%s' % uid[-1], |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1505 '(FLAGS INTERNALDATE RFC822.SIZE RFC822.HEADER RFC822.TEXT)')) |
| 12073 | 1506 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1507 print '\nAll tests OK.' |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1508 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1509 except: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1510 print '\nTests failed.' |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1511 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1512 if not Debug: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1513 print ''' |
| 12073 | 1514 If you would like to see debugging output, |
| 1515 try: %s -d5 | |
| 1516 ''' % sys.argv[0] | |
|
7990
de10566dec5c
New version doesn't require REV1 capability.
Guido van Rossum <guido@python.org>
parents:
7924
diff
changeset
|
1517 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1518 raise |
