diff options
author | Piers Lauder <piers@cs.su.oz.au> | 2002-06-17 07:07:20 (GMT) |
---|---|---|
committer | Piers Lauder <piers@cs.su.oz.au> | 2002-06-17 07:07:20 (GMT) |
commit | 3fca291a52cae513b8f76851186f96ba5fe863d2 (patch) | |
tree | 325970f3f414231b5cafbdf09898072f31e19431 | |
parent | f0a70f6d0a0e17f74298e03e92a9e2b968e88c2a (diff) | |
download | cpython-3fca291a52cae513b8f76851186f96ba5fe863d2.zip cpython-3fca291a52cae513b8f76851186f96ba5fe863d2.tar.gz cpython-3fca291a52cae513b8f76851186f96ba5fe863d2.tar.bz2 |
Add IMAP4 QUOTA extension methods
-rw-r--r-- | Doc/lib/libimaplib.tex | 22 | ||||
-rw-r--r-- | Lib/imaplib.py | 39 |
2 files changed, 58 insertions, 3 deletions
diff --git a/Doc/lib/libimaplib.tex b/Doc/lib/libimaplib.tex index 38323cf..b710ce7 100644 --- a/Doc/lib/libimaplib.tex +++ b/Doc/lib/libimaplib.tex @@ -174,6 +174,16 @@ An \class{IMAP4} instance has the following methods: The method is non-standard, but is supported by the \samp{Cyrus} server. \end{methoddesc} +\begin{methoddesc}{getquota}{root} + Get the \samp{quota} \var{root}'s resource usage and limits. + This method is part of the IMAP4 QUOTA extension defined in rfc2087. +\end{methoddesc} + +\begin{methoddesc}{getquotaroot}{mailbox} + Get the list of \samp{quota} \samp{roots} for the named \var{mailbox}. + This method is part of the IMAP4 QUOTA extension defined in rfc2087. +\end{methoddesc} + \begin{methoddesc}{list}{\optional{directory\optional{, pattern}}} List mailbox names in \var{directory} matching \var{pattern}. \var{directory} defaults to the top-level mail @@ -204,7 +214,7 @@ An \class{IMAP4} instance has the following methods: \begin{methoddesc}{open}{host, port} Opens socket to \var{port} at \var{host}. The connection objects established by this method - will be used in the \code{read}, \code{readline}, and \code{shutdown} methods. + will be used in the \code{read}, \code{readline}, \code{send}, and \code{shutdown} methods. You may override this method. \end{methoddesc} @@ -263,11 +273,21 @@ msgnums = M.search(None, '(FROM "LDJ")') to the mailbox are not allowed. \end{methoddesc} +\begin{methoddesc}{send}{data} + Sends \code{data} to the remote server. + You may override this method. +\end{methoddesc} + \begin{methoddesc}{setacl}{mailbox, who, what} Set an \samp{ACL} for \var{mailbox}. The method is non-standard, but is supported by the \samp{Cyrus} server. \end{methoddesc} +\begin{methoddesc}{setquota}{root, limits} + Set the \samp{quota} \var{root}'s resource \var{limits}. + This method is part of the IMAP4 QUOTA extension defined in rfc2087. +\end{methoddesc} + \begin{methoddesc}{shutdown}{} Close connection established in \code{open}. You may override this method. diff --git a/Lib/imaplib.py b/Lib/imaplib.py index 455ba9c..9b4557c 100644 --- a/Lib/imaplib.py +++ b/Lib/imaplib.py @@ -16,8 +16,9 @@ Public functions: Internaldate2tuple # String method conversion by ESR, February 2001. # GET/SETACL contributed by Anthony Baxter <anthony@interlink.com.au> April 2001. # IMAP4_SSL contributed by Tino Lange <Tino.Lange@isg.de> March 2002. +# GET/SETQUOTA contributed by Andreas Zeidler <az@kreativkombinat.de> June 2002. -__version__ = "2.51" +__version__ = "2.52" import binascii, re, socket, time, random, sys @@ -48,6 +49,8 @@ Commands = { 'EXPUNGE': ('SELECTED',), 'FETCH': ('SELECTED',), 'GETACL': ('AUTH', 'SELECTED'), + 'GETQUOTA': ('AUTH', 'SELECTED'), + 'GETQUOTAROOT': ('AUTH', 'SELECTED'), 'LIST': ('AUTH', 'SELECTED'), 'LOGIN': ('NONAUTH',), 'LOGOUT': ('NONAUTH', 'AUTH', 'SELECTED', 'LOGOUT'), @@ -59,6 +62,7 @@ Commands = { 'SEARCH': ('SELECTED',), 'SELECT': ('AUTH', 'SELECTED'), 'SETACL': ('AUTH', 'SELECTED'), + 'SETQUOTA': ('AUTH', 'SELECTED'), 'SORT': ('SELECTED',), 'STATUS': ('AUTH', 'SELECTED'), 'STORE': ('SELECTED',), @@ -416,6 +420,28 @@ class IMAP4: return self._untagged_response(typ, dat, 'ACL') + def getquota(self, root): + """Get the quota root's resource usage and limits. + + Part of the IMAP4 QUOTA extension defined in rfc2087. + + (typ, [data]) = <instance>.getquota(root) + """ + typ, dat = self._simple_command('GETQUOTA', root) + return self._untagged_response(typ, dat, 'QUOTA') + + + def getquotaroot(self, mailbox): + """Get the list of quota roots for the named mailbox. + + (typ, [[QUOTAROOT responses...], [QUOTA responses]]) = <instance>.getquotaroot(mailbox) + """ + typ, dat = self._simple_command('GETQUOTA', root) + typ, quota = self._untagged_response(typ, dat, 'QUOTA') + typ, quotaroot = self._untagged_response(typ, dat, 'QUOTAROOT') + return typ, [quotaroot, quota] + + def list(self, directory='""', pattern='*'): """List mailbox names in directory matching pattern. @@ -566,6 +592,15 @@ class IMAP4: return self._simple_command('SETACL', mailbox, who, what) + def setquota(self, root, limits): + """Set the quota root's resource limits. + + (typ, [data]) = <instance>.setquota(root, limits) + """ + typ, dat = self._simple_command('SETQUOTA', root, limits) + return self._untagged_response(typ, dat, 'QUOTA') + + def sort(self, sort_criteria, charset, *search_criteria): """IMAP4rev1 extension SORT command. @@ -1186,7 +1221,7 @@ def Time2Internaldate(date_time): tt = time.localtime(date_time) elif isinstance(date_time, (tuple, time.struct_time)): tt = date_time - elif isinstance(date_time, str): + elif isinstance(date_time, str) and (date_time[0],date_time[-1]) == ('"','"'): return date_time # Assume in correct format else: raise ValueError("date_time not of a known type") |