Kaydet (Commit) d8921379 authored tarafından Martin v. Löwis's avatar Martin v. Löwis

Patch #798297: Add IMAP THREAD command.

üst 49ee14da
...@@ -355,6 +355,28 @@ msgnums = M.search(None, '(FROM "LDJ")') ...@@ -355,6 +355,28 @@ msgnums = M.search(None, '(FROM "LDJ")')
Subscribe to new mailbox. Subscribe to new mailbox.
\end{methoddesc} \end{methoddesc}
\begin{methoddesc}{thread}{threading_algorithm, charset, search_criterion\optional{, ...}}
The \code{thread} command is a variant of \code{search} with threading semantics for
the results. Returned data contains a space
separated list of thread members.
Thread members consist of zero or more messages numbers, delimited by spaces,
indicating successive parent and child.
Thread has two arguments before the \var{search_criterion}
argument(s); a \var{threading_algorithm}, and the searching \var{charset}.
Note that unlike \code{search}, the searching \var{charset} argument is mandatory.
There is also a \code{uid thread} command which corresponds to \code{thread} the way
that \code{uid search} corresponds to \code{search}.
The \code{thread} command first searches the mailbox for messages that
match the given searching criteria using the charset argument for
the interpretation of strings in the searching criteria. It thren
returns the matching messages threaded according to the specified
threading algorithm.
This is an \samp{IMAP4rev1} extension command. \versionadded{2.4}
\end{methoddesc}
\begin{methoddesc}{uid}{command, arg\optional{, ...}} \begin{methoddesc}{uid}{command, arg\optional{, ...}}
Execute command args with messages identified by UID, rather than Execute command args with messages identified by UID, rather than
message number. Returns response appropriate to command. At least message number. Returns response appropriate to command. At least
......
...@@ -69,6 +69,7 @@ Commands = { ...@@ -69,6 +69,7 @@ Commands = {
'STATUS': ('AUTH', 'SELECTED'), 'STATUS': ('AUTH', 'SELECTED'),
'STORE': ('SELECTED',), 'STORE': ('SELECTED',),
'SUBSCRIBE': ('AUTH', 'SELECTED'), 'SUBSCRIBE': ('AUTH', 'SELECTED'),
'THREAD': ('SELECTED',),
'UID': ('SELECTED',), 'UID': ('SELECTED',),
'UNSUBSCRIBE': ('AUTH', 'SELECTED'), 'UNSUBSCRIBE': ('AUTH', 'SELECTED'),
} }
...@@ -679,6 +680,16 @@ class IMAP4: ...@@ -679,6 +680,16 @@ class IMAP4:
return self._simple_command('SUBSCRIBE', mailbox) return self._simple_command('SUBSCRIBE', mailbox)
def thread(self, threading_algorithm, charset, *search_criteria):
"""IMAPrev1 extension THREAD command.
(type, [data]) = <instance>.thread(threading_alogrithm, charset, search_criteria, ...)
"""
name = 'THREAD'
typ, dat = self._simple_command(name, threading_algorithm, charset, *search_criteria)
return self._untagged_response(typ, dat, name)
def uid(self, command, *args): def uid(self, command, *args):
"""Execute "command arg ..." with messages identified by UID, """Execute "command arg ..." with messages identified by UID,
rather than message number. rather than message number.
......
...@@ -137,6 +137,7 @@ John DeGood ...@@ -137,6 +137,7 @@ John DeGood
Vincent Delft Vincent Delft
Roger Dev Roger Dev
Toby Dickenson Toby Dickenson
Yves Dionne
Daniel Dittmar Daniel Dittmar
Walter Drwald Walter Drwald
Jaromir Dolecek Jaromir Dolecek
......
...@@ -57,6 +57,8 @@ Core and builtins ...@@ -57,6 +57,8 @@ Core and builtins
Extension modules Extension modules
----------------- -----------------
- os.getsid was added.
- The pwd module incorrectly advertised its struct type as - The pwd module incorrectly advertised its struct type as
struct_pwent; this has been renamed to struct_passwd. (The old name struct_pwent; this has been renamed to struct_passwd. (The old name
is still supported for backwards compatibility.) is still supported for backwards compatibility.)
...@@ -104,6 +106,8 @@ Extension modules ...@@ -104,6 +106,8 @@ Extension modules
Library Library
------- -------
- imaplib.IMAP4.thread was added.
- Plugged a minor hole in tempfile.mktemp() due to the use of - Plugged a minor hole in tempfile.mktemp() due to the use of
os.path.exists(), switched to using os.lstat() directly if possible. os.path.exists(), switched to using os.lstat() directly if possible.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment