mhlib
index
/usr/local/lib/python2.5/mhlib.py
Module Docs

MH interface -- purely object-oriented (well, almost)
 
Executive summary:
 
import mhlib
 
mh = mhlib.MH()         # use default mailbox directory and profile
mh = mhlib.MH(mailbox)  # override mailbox location (default from profile)
mh = mhlib.MH(mailbox, profile) # override mailbox and profile
 
mh.error(format, ...)   # print error message -- can be overridden
s = mh.getprofile(key)  # profile entry (None if not set)
path = mh.getpath()     # mailbox pathname
name = mh.getcontext()  # name of current folder
mh.setcontext(name)     # set name of current folder
 
list = mh.listfolders() # names of top-level folders
list = mh.listallfolders() # names of all folders, including subfolders
list = mh.listsubfolders(name) # direct subfolders of given folder
list = mh.listallsubfolders(name) # all subfolders of given folder
 
mh.makefolder(name)     # create new folder
mh.deletefolder(name)   # delete folder -- must have no subfolders
 
f = mh.openfolder(name) # new open folder object
 
f.error(format, ...)    # same as mh.error(format, ...)
path = f.getfullname()  # folder's full pathname
path = f.getsequencesfilename() # full pathname of folder's sequences file
path = f.getmessagefilename(n)  # full pathname of message n in folder
 
list = f.listmessages() # list of messages in folder (as numbers)
n = f.getcurrent()      # get current message
f.setcurrent(n)         # set current message
list = f.parsesequence(seq)     # parse msgs syntax into list of messages
n = f.getlast()         # get last message (0 if no messagse)
f.setlast(n)            # set last message (internal use only)
 
dict = f.getsequences() # dictionary of sequences in folder {name: list}
f.putsequences(dict)    # write sequences back to folder
 
f.createmessage(n, fp)  # add message from file f as number n
f.removemessages(list)  # remove messages in list from folder
f.refilemessages(list, tofolder) # move messages in list to other folder
f.movemessage(n, tofolder, ton)  # move one message to a given destination
f.copymessage(n, tofolder, ton)  # copy one message to a given destination
 
m = f.openmessage(n)    # new open message object (costs a file descriptor)
m is a derived class of mimetools.Message(rfc822.Message), with:
s = m.getheadertext()   # text of message's headers
s = m.getheadertext(pred) # text of message's headers, filtered by pred
s = m.getbodytext()     # text of message's body, decoded
s = m.getbodytext(0)    # text of message's body, not decoded

 
Modules
       
mimetools
multifile
os
re
shutil
sys

 
Classes
       
exceptions.Exception(exceptions.BaseException)
Error
Folder
MH
mimetools.Message(rfc822.Message)
Message

 
class Error(exceptions.Exception)
    
Method resolution order:
Error
exceptions.Exception
exceptions.BaseException
__builtin__.object

Data descriptors defined here:
__weakref__
list of weak references to the object (if defined)

Methods inherited from exceptions.Exception:
__init__(...)
x.__init__(...) initializes x; see x.__class__.__doc__ for signature

Data and other attributes inherited from exceptions.Exception:
__new__ = <built-in method __new__ of type object at 0x8125440>
T.__new__(S, ...) -> a new object with type S, a subtype of T

Methods inherited from exceptions.BaseException:
__delattr__(...)
x.__delattr__('name') <==> del x.name
__getattribute__(...)
x.__getattribute__('name') <==> x.name
__getitem__(...)
x.__getitem__(y) <==> x[y]
__getslice__(...)
x.__getslice__(i, j) <==> x[i:j]
 
Use of negative indices is not supported.
__reduce__(...)
__repr__(...)
x.__repr__() <==> repr(x)
__setattr__(...)
x.__setattr__('name', value) <==> x.name = value
__setstate__(...)
__str__(...)
x.__str__() <==> str(x)

Data descriptors inherited from exceptions.BaseException:
__dict__
args
message
exception message

 
class Folder
    Class representing a particular folder.
 
  Methods defined here:
__init__(self, mh, name)
Constructor.
__repr__(self)
String representation.
copymessage(self, n, tofolder, ton)
Copy one message over a specific destination message,
which may or may not already exist.
createmessage(self, n, txt)
Create a message, with text from the open file txt.
error(self, *args)
Error message handler.
getcurrent(self)
Return the current message.  Raise Error when there is none.
getfullname(self)
Return the full pathname of the folder.
getlast(self)
Return the last message number.
getmessagefilename(self, n)
Return the full pathname of a message in the folder.
getsequences(self)
Return the set of sequences for the folder.
getsequencesfilename(self)
Return the full pathname of the folder's sequences file.
listallsubfolders(self)
Return list of all subfolders.
listmessages(self)
Return the list of messages currently present in the folder.
As a side effect, set self.last to the last message (or 0).
listsubfolders(self)
Return list of direct subfolders.
movemessage(self, n, tofolder, ton)
Move one message over a specific destination message,
which may or may not already exist.
openmessage(self, n)
Open a message -- returns a Message object.
parsesequence(self, seq)
Parse an MH sequence specification into a message list.
Attempt to mimic mh-sequence(5) as close as possible.
Also attempt to mimic observed behavior regarding which
conditions cause which error messages.
putsequences(self, sequences)
Write the set of sequences back to the folder.
refilemessages(self, list, tofolder, keepsequences=0)
Refile one or more messages -- may raise os.error.
'tofolder' is an open folder object.
removefromallsequences(self, list)
Remove one or more messages from all sequences (including last)
-- but not from 'cur'!!!
removemessages(self, list)
Remove one or more messages -- may raise os.error.
setcurrent(self, n)
Set the current message.
setlast(self, last)
Set the last message number.

 
class MH
    Class representing a particular collection of folders.
Optional constructor arguments are the pathname for the directory
containing the collection, and the MH profile to use.
If either is omitted or empty a default is used; the default
directory is taken from the MH profile if it is specified there.
 
  Methods defined here:
__init__(self, path=None, profile=None)
Constructor.
__repr__(self)
String representation.
deletefolder(self, name)
Delete a folder.  This removes files in the folder but not
subdirectories.  Raise os.error if deleting the folder itself fails.
error(self, msg, *args)
Routine to print an error.  May be overridden by a derived class.
getcontext(self)
Return the name of the current folder.
getpath(self)
Return the path (the name of the collection's directory).
getprofile(self, key)
Return a profile entry, None if not found.
listallfolders(self)
Return the names of all folders and subfolders, recursively.
listallsubfolders(self, name)
Return the names of subfolders in a given folder, recursively.
listfolders(self)
Return the names of the top-level folders.
listsubfolders(self, name)
Return the names of the subfolders in a given folder
(prefixed with the given folder name).
makefolder(self, name)
Create a new folder (or raise os.error if it cannot be created).
openfolder(self, name)
Return a new Folder object for the named folder.
setcontext(self, context)
Set the name of the current folder.

 
class Message(mimetools.Message)
    
Method resolution order:
Message
mimetools.Message
rfc822.Message

Methods defined here:
__init__(self, f, n, fp=None)
Constructor.
__repr__(self)
String representation.
getbody(self)
Return body, either a string or a list of messages.
getbodyparts(self)
Only for multipart messages: return the message's body as a
list of SubMessage objects.  Each submessage object behaves
(almost) as a Message object.
getbodytext(self, decode=1)
Return the message's body text as string.  This undoes a
Content-Transfer-Encoding, but does not interpret other MIME
features (e.g. multipart messages).  To suppress decoding,
pass 0 as an argument.
getheadertext(self, pred=None)
Return the message's header text as a string.  If an
argument is specified, it is used as a filter predicate to
decide which headers to return (its argument is the header
name converted to lower case).

Methods inherited from mimetools.Message:
getencoding(self)
getmaintype(self)
getparam(self, name)
getparamnames(self)
getplist(self)
getsubtype(self)
gettype(self)
parseplist(self)
parsetype(self)

Methods inherited from rfc822.Message:
__contains__(self, name)
Determine whether a message contains the named header.
__delitem__(self, name)
Delete all occurrences of a specific header, if it is present.
__getitem__(self, name)
Get a specific header, as from a dictionary.
__iter__(self)
__len__(self)
Get the number of headers in a message.
__setitem__(self, name, value)
Set the value of a header.
 
Note: This is not a perfect inversion of __getitem__, because any
changed headers get stuck at the end of the raw-headers list rather
than where the altered header was.
__str__(self)
get = getheader(self, name, default=None)
Get the header value for a name.
 
This is the normal interface: it returns a stripped version of the
header value for a given header name, or None if it doesn't exist.
This uses the dictionary version which finds the *last* such header.
getaddr(self, name)
Get a single address from a header, as a tuple.
 
An example return value:
('Guido van Rossum', 'guido@cwi.nl')
getaddrlist(self, name)
Get a list of addresses from a header.
 
Retrieves a list of addresses from a header, where each address is a
tuple as returned by getaddr().  Scans all named headers, so it works
properly with multiple To: or Cc: headers for example.
getallmatchingheaders(self, name)
Find all header lines matching a given header name.
 
Look through the list of headers and find all lines matching a given
header name (and their continuation lines).  A list of the lines is
returned, without interpretation.  If the header does not occur, an
empty list is returned.  If the header occurs multiple times, all
occurrences are returned.  Case is not important in the header name.
getdate(self, name)
Retrieve a date field from a header.
 
Retrieves a date field from the named header, returning a tuple
compatible with time.mktime().
getdate_tz(self, name)
Retrieve a date field from a header as a 10-tuple.
 
The first 9 elements make up a tuple compatible with time.mktime(),
and the 10th is the offset of the poster's time zone from GMT/UTC.
getfirstmatchingheader(self, name)
Get the first header line matching name.
 
This is similar to getallmatchingheaders, but it returns only the
first matching header (and its continuation lines).
getheader(self, name, default=None)
Get the header value for a name.
 
This is the normal interface: it returns a stripped version of the
header value for a given header name, or None if it doesn't exist.
This uses the dictionary version which finds the *last* such header.
getheaders(self, name)
Get all values for a header.
 
This returns a list of values for headers given more than once; each
value in the result list is stripped in the same way as the result of
getheader().  If the header is not given, return an empty list.
getrawheader(self, name)
A higher-level interface to getfirstmatchingheader().
 
Return a string containing the literal text of the header but with the
keyword stripped.  All leading, trailing and embedded whitespace is
kept in the string, however.  Return None if the header does not
occur.
has_key(self, name)
Determine whether a message contains the named header.
iscomment(self, line)
Determine whether a line should be skipped entirely.
 
You may override this method in order to use Message parsing on tagged
data in RFC 2822-like formats that support embedded comments or
free-text data.
isheader(self, line)
Determine whether a given line is a legal header.
 
This method should return the header name, suitably canonicalized.
You may override this method in order to use Message parsing on tagged
data in RFC 2822-like formats with special header formats.
islast(self, line)
Determine whether a line is a legal end of RFC 2822 headers.
 
       You may override this method if your application wants to bend the
       rules, e.g. to strip trailing whitespace, or to recognize MH template
       separators ('--------').  For convenience (e.g. for code reading from
       sockets) a line consisting of 
also matches.
items(self)
Get all of a message's headers.
 
Returns a list of name, value tuples.
keys(self)
Get all of a message's header field names.
readheaders(self)
Read header lines.
 
Read header lines up to the entirely blank line that terminates them.
The (normally blank) line that ends the headers is skipped, but not
included in the returned list.  If a non-header line ends the headers,
(which is an error), an attempt is made to backspace over it; it is
never included in the returned list.
 
The variable self.status is set to the empty string if all went well,
otherwise it is an error message.  The variable self.headers is a
completely uninterpreted list of lines contained in the header (so
printing them will reproduce the header exactly as it appears in the
file).
rewindbody(self)
Rewind the file to the start of the body (if seekable).
setdefault(self, name, default='')
values(self)
Get all of a message's header field values.

 
Data
        __all__ = ['MH', 'Error', 'Folder', 'Message']