:mod:`mhlib` --- Access to MH mailboxes
=======================================

.. module:: mhlib
   :synopsis: Manipulate MH mailboxes from Python.
.. sectionauthor:: Skip Montanaro <skip@pobox.com>

The :mod:`mhlib` module provides a Python interface to MH folders and their
contents.

The module contains three basic classes, :class:`MH`, which represents a
particular collection of folders, :class:`Folder`, which represents a single
folder, and :class:`Message`, which represents a single message.


.. class:: MH([path[, profile]])

   :class:`MH` represents a collection of MH folders.


.. class:: Folder(mh, name)

   The :class:`Folder` class represents a single folder and its messages.


.. class:: Message(folder, number[, name])

   :class:`Message` objects represent individual messages in a folder.  The Message
   class is derived from :class:`mimetools.Message`.


.. _mh-objects:

MH Objects
----------

:class:`MH` instances have the following methods:


.. method:: MH.error(format[, ...])

   Print an error message -- can be overridden.


.. method:: MH.getprofile(key)

   Return a profile entry (``None`` if not set).


.. method:: MH.getpath()

   Return the mailbox pathname.


.. method:: MH.getcontext()

   Return the current folder name.


.. method:: MH.setcontext(name)

   Set the current folder name.


.. method:: MH.listfolders()

   Return a list of top-level folders.


.. method:: MH.listallfolders()

   Return a list of all folders.


.. method:: MH.listsubfolders(name)

   Return a list of direct subfolders of the given folder.


.. method:: MH.listallsubfolders(name)

   Return a list of all subfolders of the given folder.


.. method:: MH.makefolder(name)

   Create a new folder.


.. method:: MH.deletefolder(name)

   Delete a folder -- must have no subfolders.


.. method:: MH.openfolder(name)

   Return a new open folder object.


.. _mh-folder-objects:

Folder Objects
--------------

:class:`Folder` instances represent open folders and have the following methods:


.. method:: Folder.error(format[, ...])

   Print an error message -- can be overridden.


.. method:: Folder.getfullname()

   Return the folder's full pathname.


.. method:: Folder.getsequencesfilename()

   Return the full pathname of the folder's sequences file.


.. method:: Folder.getmessagefilename(n)

   Return the full pathname of message *n* of the folder.


.. method:: Folder.listmessages()

   Return a list of messages in the folder (as numbers).


.. method:: Folder.getcurrent()

   Return the current message number.


.. method:: Folder.setcurrent(n)

   Set the current message number to *n*.


.. method:: Folder.parsesequence(seq)

   Parse msgs syntax into list of messages.


.. method:: Folder.getlast()

   Get last message, or ``0`` if no messages are in the folder.


.. method:: Folder.setlast(n)

   Set last message (internal use only).


.. method:: Folder.getsequences()

   Return dictionary of sequences in folder.  The sequence names are used  as keys,
   and the values are the lists of message numbers in the sequences.


.. method:: Folder.putsequences(dict)

   Return dictionary of sequences in folder name: list.


.. method:: Folder.removemessages(list)

   Remove messages in list from folder.


.. method:: Folder.refilemessages(list, tofolder)

   Move messages in list to other folder.


.. method:: Folder.movemessage(n, tofolder, ton)

   Move one message to a given destination in another folder.


.. method:: Folder.copymessage(n, tofolder, ton)

   Copy one message to a given destination in another folder.


.. _mh-message-objects:

Message Objects
---------------

The :class:`Message` class adds one method to those of
:class:`mimetools.Message`:


.. method:: Message.openmessage(n)

   Return a new open message object (costs a file descriptor).

