Mercurial > cpython-lru_cache-weakref
annotate Lib/imaplib.py @ 54294:dba767bc3155 legacy-trunk
remove mention of old ctypes version
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Sat, 23 May 2009 20:59:09 +0000 |
| parents | 88d965be8617 |
| children | 256e9f00d061 |
| 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 |
|
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
|
25 import binascii, os, random, re, socket, 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() |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
251 self.sock.close() |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
252 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
253 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
254 def socket(self): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
255 """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
|
256 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
257 socket = <instance>.socket() |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
258 """ |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
259 return self.sock |
|
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 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
262 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
263 # Utility methods |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
264 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
265 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
266 def recent(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
267 """Return most recent 'RECENT' responses if any exist, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
268 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
|
269 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
270 (typ, [data]) = <instance>.recent() |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
271 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
272 'data' is None if no new messages, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
273 else list of RECENT responses, most recent last. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
274 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
275 name = 'RECENT' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
276 typ, dat = self._untagged_response('OK', [None], name) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
277 if dat[-1]: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
278 return typ, dat |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
279 typ, dat = self.noop() # Prod server for response |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
280 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
281 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
282 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
283 def response(self, code): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
284 """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
|
285 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
286 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
|
287 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
288 (code, [data]) = <instance>.response(code) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
289 """ |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
290 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
|
291 |
|
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
292 |
|
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
293 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
294 # IMAP4 commands |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
295 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
296 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
297 def append(self, mailbox, flags, date_time, message): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
298 """Append message to named mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
299 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
300 (typ, [data]) = <instance>.append(mailbox, flags, date_time, message) |
| 11562 | 301 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
302 All args except `message' can be None. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
303 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
304 name = 'APPEND' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
305 if not mailbox: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
306 mailbox = 'INBOX' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
307 if flags: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
308 if (flags[0],flags[-1]) != ('(',')'): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
309 flags = '(%s)' % flags |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
310 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
311 flags = None |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
312 if date_time: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
313 date_time = Time2Internaldate(date_time) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
314 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
315 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
|
316 self.literal = MapCRLF.sub(CRLF, message) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
317 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
|
318 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
319 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
320 def authenticate(self, mechanism, authobject): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
321 """Authenticate command - requires response processing. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
322 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
323 'mechanism' specifies which authentication mechanism is to |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
324 be used - it must appear in <instance>.capabilities in the |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
325 form AUTH=<mechanism>. |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
326 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
327 '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
|
328 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
329 data = authobject(response) |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
330 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
331 It will be called to process server continuation responses. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
332 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
|
333 It should return None if the client abort response '*' should |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
334 be sent instead. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
335 """ |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
336 mech = mechanism.upper() |
|
29660
9a4bcfddbfa1
Comment out cap, it was unused.
Neal Norwitz <nnorwitz@gmail.com>
parents:
28900
diff
changeset
|
337 # 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
|
338 #cap = 'AUTH=%s' % mech |
|
26387
fcf9734e1021
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
26336
diff
changeset
|
339 #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
|
340 # raise self.error("Server doesn't allow %s authentication." % mech) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
341 self.literal = _Authenticator(authobject).process |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
342 typ, dat = self._simple_command('AUTHENTICATE', mech) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
343 if typ != 'OK': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
344 raise self.error(dat[-1]) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
345 self.state = 'AUTH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
346 return typ, dat |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
347 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
348 |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
349 def capability(self): |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
350 """(typ, [data]) = <instance>.capability() |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
351 Fetch capabilities list from server.""" |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
352 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
353 name = 'CAPABILITY' |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
354 typ, dat = self._simple_command(name) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
355 return self._untagged_response(typ, dat, name) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
356 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
357 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
358 def check(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
359 """Checkpoint mailbox on server. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
360 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
361 (typ, [data]) = <instance>.check() |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
362 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
363 return self._simple_command('CHECK') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
364 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
365 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
366 def close(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
367 """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
|
368 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
369 Deleted messages are removed from writable mailbox. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
370 This is the recommended command before 'LOGOUT'. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
371 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
372 (typ, [data]) = <instance>.close() |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
373 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
374 try: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
375 typ, dat = self._simple_command('CLOSE') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
376 finally: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
377 self.state = 'AUTH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
378 return typ, dat |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
379 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
380 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
381 def copy(self, message_set, new_mailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
382 """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
|
383 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
384 (typ, [data]) = <instance>.copy(message_set, new_mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
385 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
386 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
|
387 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
388 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
389 def create(self, mailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
390 """Create new mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
391 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
392 (typ, [data]) = <instance>.create(mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
393 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
394 return self._simple_command('CREATE', mailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
395 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
396 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
397 def delete(self, mailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
398 """Delete old mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
399 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
400 (typ, [data]) = <instance>.delete(mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
401 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
402 return self._simple_command('DELETE', mailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
403 |
|
32828
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
404 def deleteacl(self, mailbox, who): |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
405 """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
|
406 |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
407 (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
|
408 """ |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
409 return self._simple_command('DELETEACL', mailbox, who) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
410 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
411 def expunge(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
412 """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
|
413 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
414 Generates 'EXPUNGE' response for each deleted message. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
415 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
416 (typ, [data]) = <instance>.expunge() |
|
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 'data' is list of 'EXPUNGE'd message numbers in order received. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
419 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
420 name = 'EXPUNGE' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
421 typ, dat = self._simple_command(name) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
422 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
423 |
|
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 def fetch(self, message_set, message_parts): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
426 """Fetch (parts of) messages. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
427 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
428 (typ, [data, ...]) = <instance>.fetch(message_set, message_parts) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
429 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
430 'message_parts' should be a string of selected parts |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
431 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
|
432 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
433 'data' are tuples of message part envelope and data. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
434 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
435 name = 'FETCH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
436 typ, dat = self._simple_command(name, message_set, message_parts) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
437 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
438 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
439 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
440 def getacl(self, mailbox): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
441 """Get the ACLs for a mailbox. |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
442 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
443 (typ, [data]) = <instance>.getacl(mailbox) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
444 """ |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
445 typ, dat = self._simple_command('GETACL', mailbox) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
446 return self._untagged_response(typ, dat, 'ACL') |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
447 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
448 |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
449 def getannotation(self, mailbox, entry, attribute): |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
450 """(typ, [data]) = <instance>.getannotation(mailbox, entry, attribute) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
451 Retrieve ANNOTATIONs.""" |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
452 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
453 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
|
454 return self._untagged_response(typ, dat, 'ANNOTATION') |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
455 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
456 |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
457 def getquota(self, root): |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
458 """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
|
459 |
|
23880
bbaeaf2719c4
Whitespace normalization (tabs -> spaces)
Neal Norwitz <nnorwitz@gmail.com>
parents:
23878
diff
changeset
|
460 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
|
461 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
462 (typ, [data]) = <instance>.getquota(root) |
|
23880
bbaeaf2719c4
Whitespace normalization (tabs -> spaces)
Neal Norwitz <nnorwitz@gmail.com>
parents:
23878
diff
changeset
|
463 """ |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
464 typ, dat = self._simple_command('GETQUOTA', root) |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
465 return self._untagged_response(typ, dat, 'QUOTA') |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
466 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
467 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
468 def getquotaroot(self, mailbox): |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
469 """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
|
470 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
471 (typ, [[QUOTAROOT responses...], [QUOTA responses]]) = <instance>.getquotaroot(mailbox) |
|
23880
bbaeaf2719c4
Whitespace normalization (tabs -> spaces)
Neal Norwitz <nnorwitz@gmail.com>
parents:
23878
diff
changeset
|
472 """ |
|
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
|
473 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
|
474 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
|
475 typ, quotaroot = self._untagged_response(typ, dat, 'QUOTAROOT') |
|
23880
bbaeaf2719c4
Whitespace normalization (tabs -> spaces)
Neal Norwitz <nnorwitz@gmail.com>
parents:
23878
diff
changeset
|
476 return typ, [quotaroot, quota] |
|
23878
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 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
479 def list(self, directory='""', pattern='*'): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
480 """List mailbox names in directory matching pattern. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
481 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
482 (typ, [data]) = <instance>.list(directory='""', pattern='*') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
483 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
484 'data' is list of LIST responses. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
485 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
486 name = 'LIST' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
487 typ, dat = self._simple_command(name, directory, pattern) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
488 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
489 |
|
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 def login(self, user, password): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
492 """Identify client using plaintext password. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
493 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
494 (typ, [data]) = <instance>.login(user, password) |
| 11562 | 495 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
496 NB: 'password' will be quoted. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
497 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
498 typ, dat = self._simple_command('LOGIN', user, self._quote(password)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
499 if typ != 'OK': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
500 raise self.error(dat[-1]) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
501 self.state = 'AUTH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
502 return typ, dat |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
503 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
504 |
|
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
|
505 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
|
506 """ 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
|
507 |
|
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
|
508 (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
|
509 """ |
|
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
|
510 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
|
511 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
|
512 |
|
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 |
|
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 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
|
515 """ 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
|
516 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
|
517 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
|
518 |
|
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 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
520 def logout(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
521 """Shutdown connection to server. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
522 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
523 (typ, [data]) = <instance>.logout() |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
524 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
525 Returns server 'BYE' response. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
526 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
527 self.state = 'LOGOUT' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
528 try: typ, dat = self._simple_command('LOGOUT') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
529 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
|
530 self.shutdown() |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
531 if 'BYE' in self.untagged_responses: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
532 return 'BYE', self.untagged_responses['BYE'] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
533 return typ, dat |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
534 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
535 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
536 def lsub(self, directory='""', pattern='*'): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
537 """List 'subscribed' mailbox names in directory matching pattern. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
538 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
539 (typ, [data, ...]) = <instance>.lsub(directory='""', pattern='*') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
540 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
541 'data' are tuples of message part envelope and data. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
542 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
543 name = 'LSUB' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
544 typ, dat = self._simple_command(name, directory, pattern) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
545 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
546 |
|
32828
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
547 def myrights(self, mailbox): |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
548 """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
|
549 |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
550 (typ, [data]) = <instance>.myrights(mailbox) |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
551 """ |
|
07a57d89b1e0
Patch #998149: imaplib deleteacl and myrights.
Martin v. Löwis <martin@v.loewis.de>
parents:
32179
diff
changeset
|
552 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
|
553 return self._untagged_response(typ, dat, 'MYRIGHTS') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
554 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
555 def namespace(self): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
556 """ Returns IMAP namespaces ala rfc2342 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
557 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
558 (typ, [data, ...]) = <instance>.namespace() |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
559 """ |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
560 name = 'NAMESPACE' |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
561 typ, dat = self._simple_command(name) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
562 return self._untagged_response(typ, dat, name) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
563 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
564 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
565 def noop(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
566 """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
|
567 |
|
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
|
568 (typ, [data]) = <instance>.noop() |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
569 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
570 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
571 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
|
572 self._dump_ur(self.untagged_responses) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
573 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
|
574 |
|
4e59d890a4bd
Piers Lauders' latest version, with some of my own changes reapplied.
Guido van Rossum <guido@python.org>
parents:
8394
diff
changeset
|
575 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
576 def partial(self, message_num, message_part, start, length): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
577 """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
|
578 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
579 (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
|
580 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
581 'data' is tuple of message part envelope and data. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
582 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
583 name = 'PARTIAL' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
584 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
|
585 return self._untagged_response(typ, dat, 'FETCH') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
586 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
587 |
|
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
|
588 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
|
589 """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
|
590 |
|
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
|
591 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
|
592 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
|
593 |
|
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
|
594 (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
|
595 """ |
|
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 |
|
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 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
|
598 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
|
599 |
|
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 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
601 def rename(self, oldmailbox, newmailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
602 """Rename old mailbox name to new. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
603 |
|
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
|
604 (typ, [data]) = <instance>.rename(oldmailbox, newmailbox) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
605 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
606 return self._simple_command('RENAME', oldmailbox, newmailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
607 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
608 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
609 def search(self, charset, *criteria): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
610 """Search mailbox for matching messages. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
611 |
|
28414
0cf4e3240380
Replace criterium with criterion. Fixes #705120.
Martin v. Löwis <martin@v.loewis.de>
parents:
28089
diff
changeset
|
612 (typ, [data]) = <instance>.search(charset, criterion, ...) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
613 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
614 'data' is space separated list of matching message numbers. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
615 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
616 name = 'SEARCH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
617 if charset: |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
618 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
|
619 else: |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
620 typ, dat = self._simple_command(name, *criteria) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
621 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
622 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
623 |
|
35487
4681a8fa46d0
changed select() so readonly flag is treated as a boolean
Piers Lauder <piers@cs.su.oz.au>
parents:
35205
diff
changeset
|
624 def select(self, mailbox='INBOX', readonly=False): |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
625 """Select a mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
626 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
627 Flush all untagged responses. |
|
8363
52d7a9e71221
Subject: bug fixes for imaplib.py
Guido van Rossum <guido@python.org>
parents:
8213
diff
changeset
|
628 |
|
35487
4681a8fa46d0
changed select() so readonly flag is treated as a boolean
Piers Lauder <piers@cs.su.oz.au>
parents:
35205
diff
changeset
|
629 (typ, [data]) = <instance>.select(mailbox='INBOX', readonly=False) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
630 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
631 '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
|
632 |
|
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
|
633 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
|
634 other responses should be obtained via <instance>.response('FLAGS') etc. |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
635 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
636 self.untagged_responses = {} # Flush old responses. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
637 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
|
638 if readonly: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
639 name = 'EXAMINE' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
640 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
641 name = 'SELECT' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
642 typ, dat = self._simple_command(name, mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
643 if typ != 'OK': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
644 self.state = 'AUTH' # Might have been 'SELECTED' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
645 return typ, dat |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
646 self.state = 'SELECTED' |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
647 if 'READ-ONLY' in self.untagged_responses \ |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
648 and not readonly: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
649 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
650 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
|
651 self._dump_ur(self.untagged_responses) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
652 raise self.readonly('%s is not writable' % mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
653 return typ, self.untagged_responses.get('EXISTS', [None]) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
654 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
655 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
656 def setacl(self, mailbox, who, what): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
657 """Set a mailbox acl. |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
658 |
|
31798
c76606f372d1
fix name in setacl method doc string
Piers Lauder <piers@cs.su.oz.au>
parents:
31515
diff
changeset
|
659 (typ, [data]) = <instance>.setacl(mailbox, who, what) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
660 """ |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
661 return self._simple_command('SETACL', mailbox, who, what) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
662 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
663 |
|
34986
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
664 def setannotation(self, *args): |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
665 """(typ, [data]) = <instance>.setannotation(mailbox[, entry, attribute]+) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
666 Set ANNOTATIONs.""" |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
667 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
668 typ, dat = self._simple_command('SETANNOTATION', *args) |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
669 return self._untagged_response(typ, dat, 'ANNOTATION') |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
670 |
|
9854472b921b
added GET/SETANNOTATION methods
Piers Lauder <piers@cs.su.oz.au>
parents:
34645
diff
changeset
|
671 |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
672 def setquota(self, root, limits): |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
673 """Set the quota root's resource limits. |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
674 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
675 (typ, [data]) = <instance>.setquota(root, limits) |
|
23880
bbaeaf2719c4
Whitespace normalization (tabs -> spaces)
Neal Norwitz <nnorwitz@gmail.com>
parents:
23878
diff
changeset
|
676 """ |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
677 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
|
678 return self._untagged_response(typ, dat, 'QUOTA') |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
679 |
|
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
680 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
681 def sort(self, sort_criteria, charset, *search_criteria): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
682 """IMAP4rev1 extension SORT command. |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
683 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
684 (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
|
685 """ |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
686 name = 'SORT' |
|
18787
f999d3609f74
Whitespace normalization, plus:
Tim Peters <tim.peters@gmail.com>
parents:
18765
diff
changeset
|
687 #if not name in self.capabilities: # Let the server decide! |
|
f999d3609f74
Whitespace normalization, plus:
Tim Peters <tim.peters@gmail.com>
parents:
18765
diff
changeset
|
688 # 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
|
689 if (sort_criteria[0],sort_criteria[-1]) != ('(',')'): |
|
18787
f999d3609f74
Whitespace normalization, plus:
Tim Peters <tim.peters@gmail.com>
parents:
18765
diff
changeset
|
690 sort_criteria = '(%s)' % sort_criteria |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
691 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
|
692 return self._untagged_response(typ, dat, name) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
693 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
694 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
695 def status(self, mailbox, names): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
696 """Request named status conditions for mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
697 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
698 (typ, [data]) = <instance>.status(mailbox, names) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
699 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
700 name = 'STATUS' |
|
18787
f999d3609f74
Whitespace normalization, plus:
Tim Peters <tim.peters@gmail.com>
parents:
18765
diff
changeset
|
701 #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
|
702 # 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
|
703 typ, dat = self._simple_command(name, mailbox, names) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
704 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
705 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
706 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
707 def store(self, message_set, command, flags): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
708 """Alters flag dispositions for messages in mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
709 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
710 (typ, [data]) = <instance>.store(message_set, command, flags) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
711 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
712 if (flags[0],flags[-1]) != ('(',')'): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
713 flags = '(%s)' % flags # Avoid quoting the flags |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
714 typ, dat = self._simple_command('STORE', message_set, command, flags) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
715 return self._untagged_response(typ, dat, 'FETCH') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
716 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
717 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
718 def subscribe(self, mailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
719 """Subscribe to new mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
720 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
721 (typ, [data]) = <instance>.subscribe(mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
722 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
723 return self._simple_command('SUBSCRIBE', mailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
724 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
725 |
|
30893
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
726 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
|
727 """IMAPrev1 extension THREAD command. |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
728 |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
729 (type, [data]) = <instance>.thread(threading_alogrithm, charset, search_criteria, ...) |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
730 """ |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
731 name = 'THREAD' |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
732 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
|
733 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
|
734 |
|
1e6863ddd84b
Patch #798297: Add IMAP THREAD command.
Martin v. Löwis <martin@v.loewis.de>
parents:
29660
diff
changeset
|
735 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
736 def uid(self, command, *args): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
737 """Execute "command arg ..." with messages identified by UID, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
738 rather than message number. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
739 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
740 (typ, [data]) = <instance>.uid(command, arg1, arg2, ...) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
741 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
742 Returns response appropriate to 'command'. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
743 """ |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
744 command = command.upper() |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
745 if not command in Commands: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
746 raise self.error("Unknown IMAP4 UID command: %s" % command) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
747 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
|
748 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
|
749 "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
|
750 (command, self.state, |
|
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
751 ', '.join(Commands[command]))) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
752 name = 'UID' |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
753 typ, dat = self._simple_command(name, command, *args) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
754 if command in ('SEARCH', 'SORT'): |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
755 name = command |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
756 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
757 name = 'FETCH' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
758 return self._untagged_response(typ, dat, name) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
759 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
760 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
761 def unsubscribe(self, mailbox): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
762 """Unsubscribe from old mailbox. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
763 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
764 (typ, [data]) = <instance>.unsubscribe(mailbox) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
765 """ |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
766 return self._simple_command('UNSUBSCRIBE', mailbox) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
767 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
768 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
769 def xatom(self, name, *args): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
770 """Allow simple extension commands |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
771 notified by server in CAPABILITY response. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
772 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
773 Assumes command is legal in current state. |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
774 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
775 (typ, [data]) = <instance>.xatom(name, arg, ...) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
776 |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
777 Returns response appropriate to extension command `name'. |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
778 """ |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
779 name = name.upper() |
|
18787
f999d3609f74
Whitespace normalization, plus:
Tim Peters <tim.peters@gmail.com>
parents:
18765
diff
changeset
|
780 #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
|
781 # 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
|
782 if not name in Commands: |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
783 Commands[name] = (self.state,) |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
784 return self._simple_command(name, *args) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
785 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
786 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
787 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
788 # Private methods |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
789 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
790 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
791 def _append_untagged(self, typ, dat): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
792 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
793 if dat is None: dat = '' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
794 ur = self.untagged_responses |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
795 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
796 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
|
797 self._mesg('untagged_responses[%s] %s += ["%s"]' % |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
798 (typ, len(ur.get(typ,'')), dat)) |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
799 if typ in ur: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
800 ur[typ].append(dat) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
801 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
802 ur[typ] = [dat] |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
803 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
804 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
805 def _check_bye(self): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
806 bye = self.untagged_responses.get('BYE') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
807 if bye: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
808 raise self.abort(bye[-1]) |
| 11562 | 809 |
| 810 | |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
811 def _command(self, name, *args): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
812 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
813 if self.state not in Commands[name]: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
814 self.literal = None |
|
41160
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
815 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
|
816 "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
|
817 (name, self.state, |
|
0c122fe827d7
Patch #1605192: list allowed states in error messages for imaplib.
Georg Brandl <georg@python.org>
parents:
35488
diff
changeset
|
818 ', '.join(Commands[name]))) |
|
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 for typ in ('OK', 'NO', 'BAD'): |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
821 if typ in self.untagged_responses: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
822 del self.untagged_responses[typ] |
|
9152
a307656c7788
New version from Piers Lauder, who writes:
Guido van Rossum <guido@python.org>
parents:
8546
diff
changeset
|
823 |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
824 if 'READ-ONLY' in self.untagged_responses \ |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
825 and not self.is_readonly: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
826 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
|
827 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
828 tag = self._new_tag() |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
829 data = '%s %s' % (tag, name) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
830 for arg in args: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
831 if arg is None: continue |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
832 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
|
833 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
834 literal = self.literal |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
835 if literal is not None: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
836 self.literal = None |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
837 if type(literal) is type(self._command): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
838 literator = literal |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
839 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
840 literator = None |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
841 data = '%s {%s}' % (data, len(literal)) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
842 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
843 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
844 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
|
845 self._mesg('> %s' % data) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
846 else: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
847 self._log('> %s' % data) |
| 11562 | 848 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
849 try: |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
850 self.send('%s%s' % (data, CRLF)) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
851 except (socket.error, OSError), val: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
852 raise self.abort('socket error: %s' % val) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
853 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
854 if literal is None: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
855 return tag |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
856 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
857 while 1: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
858 # Wait for continuation response |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
859 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
860 while self._get_response(): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
861 if self.tagged_commands[tag]: # BAD/NO? |
|
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 # Send literal |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
865 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
866 if literator: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
867 literal = literator(self.continuation_response) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
868 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
869 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
870 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
|
871 self._mesg('write literal size %s' % len(literal)) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
872 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
873 try: |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
874 self.send(literal) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
875 self.send(CRLF) |
|
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
876 except (socket.error, OSError), val: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
877 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
|
878 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
879 if not literator: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
880 break |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
881 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
882 return tag |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
883 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
884 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
885 def _command_complete(self, name, tag): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
886 self._check_bye() |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
887 try: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
888 typ, data = self._get_tagged_response(tag) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
889 except self.abort, val: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
890 raise self.abort('command: %s => %s' % (name, val)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
891 except self.error, val: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
892 raise self.error('command: %s => %s' % (name, val)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
893 self._check_bye() |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
894 if typ == 'BAD': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
895 raise self.error('%s command error: %s %s' % (name, typ, data)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
896 return typ, data |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
897 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
898 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
899 def _get_response(self): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
900 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
901 # Read response and store. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
902 # |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
903 # Returns None for continuation responses, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
904 # otherwise first response line received. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
905 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
906 resp = self._get_line() |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
907 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
908 # Command completion response? |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
909 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
910 if self._match(self.tagre, resp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
911 tag = self.mo.group('tag') |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
912 if not tag in self.tagged_commands: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
913 raise self.abort('unexpected tagged response: %s' % resp) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
914 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
915 typ = self.mo.group('type') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
916 dat = self.mo.group('data') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
917 self.tagged_commands[tag] = (typ, [dat]) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
918 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
919 dat2 = None |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
920 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
921 # '*' (untagged) responses? |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
922 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
923 if not self._match(Untagged_response, resp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
924 if self._match(Untagged_status, resp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
925 dat2 = self.mo.group('data2') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
926 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
927 if self.mo is None: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
928 # Only other possibility is '+' (continuation) response... |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
929 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
930 if self._match(Continuation, resp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
931 self.continuation_response = self.mo.group('data') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
932 return None # NB: indicates continuation |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
933 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
934 raise self.abort("unexpected response: '%s'" % resp) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
935 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
936 typ = self.mo.group('type') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
937 dat = self.mo.group('data') |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
938 if dat is None: dat = '' # Null untagged response |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
939 if dat2: dat = dat + ' ' + dat2 |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
940 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
941 # Is there a literal to come? |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
942 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
943 while self._match(Literal, dat): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
944 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
945 # Read literal direct from connection. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
946 |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
947 size = int(self.mo.group('size')) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
948 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
949 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
|
950 self._mesg('read literal size %s' % size) |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
951 data = self.read(size) |
|
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 # Store response with literal as tuple |
|
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 self._append_untagged(typ, (dat, data)) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
956 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
957 # Read trailer - possibly containing another literal |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
958 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
959 dat = self._get_line() |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
960 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
961 self._append_untagged(typ, dat) |
|
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 # Bracketed response information? |
|
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 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
|
966 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
|
967 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
968 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
969 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
|
970 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
|
971 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
972 return resp |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
973 |
|
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 def _get_tagged_response(self, tag): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
976 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
977 while 1: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
978 result = self.tagged_commands[tag] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
979 if result is not None: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
980 del self.tagged_commands[tag] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
981 return result |
|
11803
c2286a1c2f29
Patches by Piers Lauder.
Guido van Rossum <guido@python.org>
parents:
11562
diff
changeset
|
982 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
983 # Some have reported "unexpected response" exceptions. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
984 # Note that ignoring them here causes loops. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
985 # Instead, send me details of the unexpected response and |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
986 # I'll update the code in `_get_response()'. |
|
11803
c2286a1c2f29
Patches by Piers Lauder.
Guido van Rossum <guido@python.org>
parents:
11562
diff
changeset
|
987 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
988 try: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
989 self._get_response() |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
990 except self.abort, val: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
991 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
992 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
|
993 self.print_log() |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
994 raise |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
995 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
996 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
997 def _get_line(self): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
998 |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
999 line = self.readline() |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1000 if not line: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1001 raise self.abort('socket error: EOF') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1002 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1003 # Protocol mandates all lines terminated by CRLF |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1004 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1005 line = line[:-2] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1006 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1007 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
|
1008 self._mesg('< %s' % line) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1009 else: |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1010 self._log('< %s' % line) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1011 return line |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1012 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1013 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1014 def _match(self, cre, s): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1015 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1016 # Run compiled regular expression match method on 's'. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1017 # Save result, return success. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1018 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1019 self.mo = cre.match(s) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1020 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1021 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
|
1022 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
|
1023 return self.mo is not None |
|
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 _new_tag(self): |
|
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 tag = '%s%s' % (self.tagpre, self.tagnum) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1029 self.tagnum = self.tagnum + 1 |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1030 self.tagged_commands[tag] = None |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1031 return tag |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1032 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1033 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1034 def _checkquote(self, arg): |
| 11562 | 1035 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1036 # Must quote command args if non-alphanumeric chars present, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1037 # and not already quoted. |
| 11562 | 1038 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1039 if type(arg) is not type(''): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1040 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
|
1041 if len(arg) >= 2 and (arg[0],arg[-1]) in (('(',')'),('"','"')): |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1042 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
|
1043 if arg and self.mustquote.search(arg) is None: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1044 return arg |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1045 return self._quote(arg) |
| 11562 | 1046 |
| 1047 | |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1048 def _quote(self, arg): |
| 11562 | 1049 |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
1050 arg = arg.replace('\\', '\\\\') |
|
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
1051 arg = arg.replace('"', '\\"') |
| 11562 | 1052 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1053 return '"%s"' % arg |
| 11562 | 1054 |
| 1055 | |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1056 def _simple_command(self, name, *args): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1057 |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
1058 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
|
1059 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1060 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1061 def _untagged_response(self, typ, dat, name): |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1062 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1063 if typ == 'NO': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1064 return typ, dat |
|
23620
a1de0bab5475
SF 563203. Replaced 'has_key()' with 'in'.
Raymond Hettinger <python@rcn.com>
parents:
23613
diff
changeset
|
1065 if not name in self.untagged_responses: |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1066 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
|
1067 data = self.untagged_responses.pop(name) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1068 if __debug__: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1069 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
|
1070 self._mesg('untagged_responses[%s] => %s' % (name, data)) |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1071 return typ, data |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1072 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1073 |
|
21988
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1074 if __debug__: |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1075 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1076 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
|
1077 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
|
1078 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
|
1079 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
|
1080 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
|
1081 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
|
1082 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1083 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
|
1084 # 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
|
1085 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
|
1086 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
|
1087 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
|
1088 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
|
1089 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
|
1090 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1091 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
|
1092 # 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
|
1093 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
|
1094 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
|
1095 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
|
1096 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
|
1097 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1098 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
|
1099 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
|
1100 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
|
1101 while n: |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1102 try: |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
1103 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
|
1104 except: |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1105 pass |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1106 i += 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 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
|
1108 i = 0 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1109 n -= 1 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1110 |
|
f92e868eb440
moved command logging routines into IMAP4 class: thread safe/faster
Piers Lauder <piers@cs.su.oz.au>
parents:
21963
diff
changeset
|
1111 |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1112 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1113 try: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1114 import ssl |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1115 except ImportError: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1116 pass |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1117 else: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1118 class IMAP4_SSL(IMAP4): |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1119 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1120 """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
|
1121 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1122 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
|
1123 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1124 host - host's name (default: localhost); |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1125 port - port number (default: standard IMAP4 SSL port). |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1126 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
|
1127 certfile - PEM formatted certificate chain file (default: None); |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1128 |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1129 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
|
1130 """ |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1131 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1132 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1133 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
|
1134 self.keyfile = keyfile |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1135 self.certfile = certfile |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1136 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
|
1137 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1138 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1139 def open(self, host = '', port = IMAP4_SSL_PORT): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1140 """Setup connection to remote server on "host:port". |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1141 (default: localhost:standard IMAP4 SSL port). |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1142 This connection will be used by the routines: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1143 read, readline, send, shutdown. |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1144 """ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1145 self.host = host |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1146 self.port = port |
|
54093
88d965be8617
Merged revisions 72662 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
45473
diff
changeset
|
1147 self.sock = socket.create_connection((host, port)) |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43162
diff
changeset
|
1148 self.sslobj = ssl.wrap_socket(self.sock, self.keyfile, self.certfile) |
|
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 read(self, size): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1152 """Read 'size' bytes from remote.""" |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1153 # sslobj.read() sometimes returns < size bytes |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1154 chunks = [] |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1155 read = 0 |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1156 while read < size: |
|
45473
eec4c1e9e9cc
#1389051: IMAP module tries to read entire message in one chunk. Patch by Fredrik Lundh.
Andrew M. Kuchling <amk@amk.ca>
parents:
43325
diff
changeset
|
1157 data = self.sslobj.read(min(size-read, 16384)) |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1158 read += len(data) |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1159 chunks.append(data) |
|
23961
7d8c6b889b54
Fix IMAP4_SSL read and send methods to take account of short data
Piers Lauder <piers@cs.su.oz.au>
parents:
23880
diff
changeset
|
1160 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1161 return ''.join(chunks) |
|
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 readline(self): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1165 """Read line from remote.""" |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1166 line = [] |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1167 while 1: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1168 char = self.sslobj.read(1) |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1169 line.append(char) |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1170 if char == "\n": return ''.join(line) |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1171 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1172 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1173 def send(self, data): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1174 """Send data to remote.""" |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1175 bytes = len(data) |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1176 while bytes > 0: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1177 sent = self.sslobj.write(data) |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1178 if sent == bytes: |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1179 break # avoid copy |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1180 data = data[sent:] |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1181 bytes = bytes - sent |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1182 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1183 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1184 def shutdown(self): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1185 """Close I/O established in "open".""" |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1186 self.sock.close() |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1187 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1188 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1189 def socket(self): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1190 """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
|
1191 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1192 socket = <instance>.socket() |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1193 """ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1194 return self.sock |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1195 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1196 |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1197 def ssl(self): |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1198 """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
|
1199 |
|
43325
193020bf52dc
More work on SSL support.
Bill Janssen <janssen@parc.com>
parents:
43162
diff
changeset
|
1200 ssl = ssl.wrap_socket(<instance>.socket) |
|
43008
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1201 """ |
|
4771639fc049
This contains a number of things:
Bill Janssen <janssen@parc.com>
parents:
41160
diff
changeset
|
1202 return self.sslobj |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1203 |
|
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
|
1204 __all__.append("IMAP4_SSL") |
|
22173
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1205 |
|
c5c9e36c3909
add SSL class submitted by Tino Lange
Piers Lauder <piers@cs.su.oz.au>
parents:
21988
diff
changeset
|
1206 |
|
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
|
1207 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
|
1208 |
|
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 """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
|
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 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
|
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 where "command" is a string that can be passed to os.popen2() |
|
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 |
|
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
|
1215 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
|
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 |
|
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 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
|
1220 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
|
1221 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
|
1222 |
|
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 |
|
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 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
|
1225 """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
|
1226 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
|
1227 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
|
1228 """ |
|
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 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
|
1230 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
|
1231 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
|
1232 self.file = 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.writefile, self.readfile = os.popen2(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
|
1234 |
|
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
|
1235 |
|
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
|
1236 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
|
1237 """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
|
1238 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
|
1239 |
|
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 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
|
1242 """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
|
1243 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
|
1244 |
|
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 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
|
1247 """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
|
1248 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
|
1249 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
|
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 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
|
1253 """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
|
1254 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
|
1255 self.writefile.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
|
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 |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1259 class _Authenticator: |
|
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1260 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1261 """Private class to provide en/decoding |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1262 for base64-based authentication conversation. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1263 """ |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1264 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1265 def __init__(self, mechinst): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1266 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
|
1267 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1268 def process(self, data): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1269 ret = self.mech(self.decode(data)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1270 if ret is None: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1271 return '*' # Abort conversation |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1272 return self.encode(ret) |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1273 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1274 def encode(self, inp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1275 # |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1276 # Invoke binascii.b2a_base64 iteratively with |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1277 # short even length buffers, strip the trailing |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1278 # line feed from the result and append. "Even" |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1279 # means a number that factors to both 6 and 8, |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1280 # 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
|
1281 # there's no partial 6-bit output. |
|
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 oup = '' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1284 while inp: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1285 if len(inp) > 48: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1286 t = inp[:48] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1287 inp = inp[48:] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1288 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1289 t = inp |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1290 inp = '' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1291 e = binascii.b2a_base64(t) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1292 if e: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1293 oup = oup + e[:-1] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1294 return oup |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1295 |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1296 def decode(self, inp): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1297 if not inp: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1298 return '' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1299 return binascii.a2b_base64(inp) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1300 |
|
8520
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1301 |
|
b94015c0c837
Piers' latest version -- authentication added by Donn Cave.
Guido van Rossum <guido@python.org>
parents:
8458
diff
changeset
|
1302 |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1303 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
|
1304 '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
|
1305 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1306 def Internaldate2tuple(resp): |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1307 """Convert IMAP4 INTERNALDATE to UT. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1308 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1309 Returns Python time module tuple. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1310 """ |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1311 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1312 mo = InternalDate.match(resp) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1313 if not mo: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1314 return None |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1315 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1316 mon = Mon2num[mo.group('mon')] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1317 zonen = mo.group('zonen') |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1318 |
|
16732
8f034bcee856
Fix previous checkin, hopelessly broken as it was; reported by Detlef Lannert.
Jeremy Hylton <jeremy@alum.mit.edu>
parents:
16728
diff
changeset
|
1319 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
|
1320 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
|
1321 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
|
1322 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
|
1323 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
|
1324 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
|
1325 zonem = int(mo.group('zonem')) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1326 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1327 # INTERNALDATE timezone must be subtracted to get UT |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1328 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1329 zone = (zoneh*60 + zonem)*60 |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1330 if zonen == '-': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1331 zone = -zone |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1332 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1333 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
|
1334 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1335 utc = time.mktime(tt) |
|
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 # Following is necessary because the time module has no 'mkgmtime'. |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1338 # '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
|
1339 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1340 lt = time.localtime(utc) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1341 if time.daylight and lt[-1]: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1342 zone = zone + time.altzone |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1343 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1344 zone = zone + time.timezone |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1345 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1346 return time.localtime(utc - zone) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1347 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1348 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1349 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1350 def Int2AP(num): |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1351 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1352 """Convert integer to A-P string representation.""" |
|
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 val = ''; AP = 'ABCDEFGHIJKLMNOP' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1355 num = int(abs(num)) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1356 while num: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1357 num, mod = divmod(num, 16) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1358 val = AP[mod] + val |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1359 return val |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1360 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1361 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1362 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1363 def ParseFlags(resp): |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1364 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1365 """Convert IMAP4 flags response to python tuple.""" |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1366 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1367 mo = Flags.match(resp) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1368 if not mo: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1369 return () |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1370 |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
1371 return tuple(mo.group('flags').split()) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1372 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1373 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1374 def Time2Internaldate(date_time): |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1375 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1376 """Convert 'date_time' to IMAP4 INTERNALDATE representation. |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1377 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1378 Return string in form: '"DD-Mmm-YYYY HH:MM:SS +HHMM"' |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1379 """ |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1380 |
|
21649
195917b7a602
Time2Internaldate(): Call isinstance() once for each of the type tests
Fred Drake <fdrake@acm.org>
parents:
21646
diff
changeset
|
1381 if isinstance(date_time, (int, float)): |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1382 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
|
1383 elif isinstance(date_time, (tuple, time.struct_time)): |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1384 tt = date_time |
|
23878
4f6d31dacd5e
Add IMAP4 QUOTA extension methods
Piers Lauder <piers@cs.su.oz.au>
parents:
23694
diff
changeset
|
1385 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
|
1386 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
|
1387 else: |
|
195917b7a602
Time2Internaldate(): Call isinstance() once for each of the type tests
Fred Drake <fdrake@acm.org>
parents:
21646
diff
changeset
|
1388 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
|
1389 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1390 dt = time.strftime("%d-%b-%Y %H:%M:%S", tt) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1391 if dt[0] == '0': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1392 dt = ' ' + dt[1:] |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1393 if time.daylight and tt[-1]: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1394 zone = -time.altzone |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1395 else: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1396 zone = -time.timezone |
|
33597
355b15e4a4da
Use floor division operator.
Raymond Hettinger <python@rcn.com>
parents:
33077
diff
changeset
|
1397 return '"' + dt + " %+03d%02d" % divmod(zone//60, 60) + '"' |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1398 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1399 |
|
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1400 |
| 11562 | 1401 if __name__ == '__main__': |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1402 |
|
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
|
1403 # 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
|
1404 # 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
|
1405 # 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
|
1406 |
|
19227
84b60213159b
Remove redundant 'import sys' (PyChecker).
Guido van Rossum <guido@python.org>
parents:
19003
diff
changeset
|
1407 import getopt, getpass |
| 12073 | 1408 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1409 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
|
1410 optlist, args = getopt.getopt(sys.argv[1:], 'd:s:') |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1411 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
|
1412 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
|
1413 |
|
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
|
1414 stream_command = None |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1415 for opt,val in optlist: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1416 if opt == '-d': |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1417 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
|
1418 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
|
1419 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
|
1420 if not args: args = (stream_command,) |
| 12073 | 1421 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1422 if not args: args = ('',) |
| 12073 | 1423 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1424 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
|
1425 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1426 USER = getpass.getuser() |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
1427 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
|
1428 |
|
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
|
1429 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
|
1430 test_seq1 = ( |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1431 ('login', (USER, PASSWD)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1432 ('create', ('/tmp/xxx 1',)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1433 ('rename', ('/tmp/xxx 1', '/tmp/yyy')), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1434 ('CREATE', ('/tmp/yyz 2',)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1435 ('append', ('/tmp/yyz 2', None, None, test_mesg)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1436 ('list', ('/tmp', 'yy*')), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1437 ('select', ('/tmp/yyz 2',)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1438 ('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
|
1439 ('fetch', ('1', '(FLAGS INTERNALDATE RFC822)')), |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1440 ('store', ('1', 'FLAGS', '(\Deleted)')), |
|
18765
cbd22c9027b2
apply patch item #416253
Piers Lauder <piers@cs.su.oz.au>
parents:
18764
diff
changeset
|
1441 ('namespace', ()), |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1442 ('expunge', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1443 ('recent', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1444 ('close', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1445 ) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1446 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1447 test_seq2 = ( |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1448 ('select', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1449 ('response',('UIDVALIDITY',)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1450 ('uid', ('SEARCH', 'ALL')), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1451 ('response', ('EXISTS',)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1452 ('append', (None, None, None, test_mesg)), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1453 ('recent', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1454 ('logout', ()), |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1455 ) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1456 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1457 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
|
1458 M._mesg('%s %s' % (cmd, args)) |
|
28089
14f65d661084
Get rid of many apply() calls.
Guido van Rossum <guido@python.org>
parents:
27228
diff
changeset
|
1459 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
|
1460 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
|
1461 if typ == 'NO': raise dat[0] |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1462 return dat |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1463 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1464 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
|
1465 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
|
1466 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
|
1467 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
|
1468 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
|
1469 if M.state == 'AUTH': |
|
26387
fcf9734e1021
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
26336
diff
changeset
|
1470 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
|
1471 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
|
1472 M._mesg('CAPABILITIES = %r' % (M.capabilities,)) |
| 12073 | 1473 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1474 for cmd,args in test_seq1: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1475 run(cmd, args) |
|
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 for ml in run('list', ('/tmp/', 'yy%')): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1478 mo = re.match(r'.*"([^"]+)"$', ml) |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1479 if mo: path = mo.group(1) |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
1480 else: path = ml.split()[-1] |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1481 run('delete', (path,)) |
| 12073 | 1482 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1483 for cmd,args in test_seq2: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1484 dat = run(cmd, args) |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1485 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1486 if (cmd,args) != ('uid', ('SEARCH', 'ALL')): |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1487 continue |
| 12073 | 1488 |
|
16484
bf97818dd9e1
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16194
diff
changeset
|
1489 uid = dat[-1].split() |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1490 if not uid: continue |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1491 run('uid', ('FETCH', '%s' % uid[-1], |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1492 '(FLAGS INTERNALDATE RFC822.SIZE RFC822.HEADER RFC822.TEXT)')) |
| 12073 | 1493 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1494 print '\nAll tests OK.' |
|
7918
5fab59eb4fa5
Piers Lauder's IMAP module.
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1495 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1496 except: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1497 print '\nTests failed.' |
|
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 not Debug: |
|
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1500 print ''' |
| 12073 | 1501 If you would like to see debugging output, |
| 1502 try: %s -d5 | |
| 1503 ''' % sys.argv[0] | |
|
7990
de10566dec5c
New version doesn't require REV1 capability.
Guido van Rossum <guido@python.org>
parents:
7924
diff
changeset
|
1504 |
|
15868
3060cbfa01be
Whitespace normalization.
Tim Peters <tim.peters@gmail.com>
parents:
12751
diff
changeset
|
1505 raise |
