;ò
îŒü?c           @   sF  d  Z  d Z d Z d Z d Z d k Z d k Z d k Z d k Z d k	 Z	 d k
 Z
 d k l Z d d d	 d
 g Z d e f d „  ƒ  YZ d f  d „  ƒ  YZ e i d ƒ Z d „  Z d	 f  d „  ƒ  YZ d
 e i f d „  ƒ  YZ d e f d „  ƒ  YZ d f  d „  ƒ  YZ d d „ Z d d „ Z d „  Z e d j o e ƒ  n d S(   sŸ	  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
s   ~/.mh_profiles   ~/Mails   .mh_sequencesiÀ  N(   s   bisects   MHs   Errors   Folders   Messagec           B   s   t  Z RS(   N(   s   __name__s
   __module__(    (    (    s"   /mit/python/lib/python2.3/mhlib.pys   ErrorW   s   c           B   s’   t  Z d  Z e e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z RS(   s<  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.c         C   sÜ   | t j o
 t } n t i i | ƒ |  _  | t j o |  i d ƒ } n | o
 t } n t i i	 | ƒ o | d d j o t i i
 d | ƒ } n t i i | ƒ } t i i | ƒ o t d ‚ n | |  _ d S(   s   Constructor.s   Pathi    s   ~s   MH() path not foundN(   s   profiles   Nones
   MH_PROFILEs   oss   paths
   expandusers   selfs
   getprofiles   PATHs   isabss   joins   isdirs   Error(   s   selfs   paths   profile(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __init__b   s      
  
% c         C   s   d |  i |  i f Sd S(   s   String representation.s
   MH(%s, %s)N(   s   selfs   paths   profile(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __repr__n   s     c         G   s   t  i i d | | ƒ d S(   sA   Routine to print an error.  May be overridden by a derived class.s   MH error: %s
N(   s   syss   stderrs   writes   msgs   args(   s   selfs   msgs   args(    (    s"   /mit/python/lib/python2.3/mhlib.pys   errorr   s     c         C   s   t  |  i | ƒ Sd S(   s*   Return a profile entry, None if not found.N(   s   picklines   selfs   profiles   key(   s   selfs   key(    (    s"   /mit/python/lib/python2.3/mhlib.pys
   getprofilev   s     c         C   s   |  i Sd S(   s9   Return the path (the name of the collection's directory).N(   s   selfs   path(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getpathz   s     c         C   s>   t  t i i |  i ƒ  d ƒ d ƒ } | o
 d } n | Sd S(   s&   Return the name of the current folder.s   contexts   Current-Folders   inboxN(   s   picklines   oss   paths   joins   selfs   getpaths   context(   s   selfs   context(    (    s"   /mit/python/lib/python2.3/mhlib.pys
   getcontext~   s     	 
c         C   sI   t  i i |  i ƒ  d ƒ } t | d ƒ } | i d | ƒ | i
 ƒ  d S(   s#   Set the name of the current folder.s   contexts   ws   Current-Folder: %s
N(   s   oss   paths   joins   selfs   getpaths   fns   opens   fs   writes   contexts   close(   s   selfs   contexts   fs   fn(    (    s"   /mit/python/lib/python2.3/mhlib.pys
   setcontext…   s
     c         C   sw   g  } |  i ƒ  } xP t i | ƒ D]? } t i i | | ƒ } t i i	 | ƒ o | i
 | ƒ q" q" W| i ƒ  | Sd S(   s*   Return the names of the top-level folders.N(   s   folderss   selfs   getpaths   paths   oss   listdirs   names   joins   fullnames   isdirs   appends   sort(   s   selfs   folderss   names   paths   fullname(    (    s"   /mit/python/lib/python2.3/mhlib.pys   listfoldersŒ   s      
c   	      C   sá   t  i i |  i | ƒ } t  i | ƒ i } | d j o g  Sn g  } t  i
 | ƒ } xx | D]p } t  i i | | ƒ } t  i i | ƒ oB t  i i | | ƒ } | i | ƒ | d } | d j o PqË q[ q[ W| i ƒ  | Sd S(   sc   Return the names of the subfolders in a given folder
        (prefixed with the given folder name).i   i   N(   s   oss   paths   joins   selfs   names   fullnames   stats   st_nlinks   nlinkss
   subfolderss   listdirs   subnamess   subnames   fullsubnames   isdirs   name_subnames   appends   sort(	   s   selfs   names   subnamess   fullsubnames
   subfolderss   subnames   nlinkss   fullnames   name_subname(    (    s"   /mit/python/lib/python2.3/mhlib.pys   listsubfolders—   s$      

c         C   s   |  i d ƒ Sd S(   s<   Return the names of all folders and subfolders, recursively.s    N(   s   selfs   listallsubfolders(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   listallfolders¯   s     c   
      C   s7  t  i i |  i | ƒ } t  i | ƒ i } | d j o g  Sn g  } t  i
 | ƒ } xÎ | D]Æ } | d d j p
 t | ƒ o q[ n t  i i | | ƒ } t  i i | ƒ os t  i i | | ƒ } | i | ƒ t  i i | ƒ o |  i | ƒ }	 | |	 } n | d } | d j o Pq!q[ q[ W| i ƒ  | Sd S(   s>   Return the names of subfolders in a given folder, recursively.i   i    s   ,i   N(   s   oss   paths   joins   selfs   names   fullnames   stats   st_nlinks   nlinkss
   subfolderss   listdirs   subnamess   subnames	   isnumerics   fullsubnames   isdirs   name_subnames   appends   islinks   listallsubfolderss   subsubfolderss   sort(
   s   selfs   names   subnamess   fullsubnames
   subfolderss   subnames   nlinkss   fullnames   name_subnames   subsubfolders(    (    s"   /mit/python/lib/python2.3/mhlib.pys   listallsubfolders³   s.       

c         C   s   t  |  | ƒ Sd S(   s0   Return a new Folder object for the named folder.N(   s   Folders   selfs   name(   s   selfs   name(    (    s"   /mit/python/lib/python2.3/mhlib.pys
   openfolderÏ   s     c         C   sh   t  |  i d ƒ } | o
 t | ƒ o t | d ƒ } n t } t i	 t i
 i |  i ƒ  | ƒ | ƒ d S(   s@   Create a new folder (or raise os.error if it cannot be created).s   Folder-Protecti   N(   s   picklines   selfs   profiles   protects	   isnumerics   ints   modes   FOLDER_PROTECTs   oss   mkdirs   paths   joins   getpaths   name(   s   selfs   names   protects   mode(    (    s"   /mit/python/lib/python2.3/mhlib.pys
   makefolderÓ   s     c         C   s–   t  i i |  i ƒ  | ƒ } xg t  i | ƒ D]V } t  i i | | ƒ } y t  i
 | ƒ Wq+ t  i j
 o |  i d | ƒ q+ Xq+ Wt  i | ƒ d S(   s‡   Delete a folder.  This removes files in the folder but not
        subdirectories.  Raise os.error if deleting the folder itself fails.s   %s not deleted, continuing...N(   s   oss   paths   joins   selfs   getpaths   names   fullnames   listdirs   subnames   fullsubnames   unlinks   errors   rmdir(   s   selfs   names   fullsubnames   subnames   fullname(    (    s"   /mit/python/lib/python2.3/mhlib.pys   deletefolderÜ   s      (   s   __name__s
   __module__s   __doc__s   Nones   __init__s   __repr__s   errors
   getprofiles   getpaths
   getcontexts
   setcontexts   listfolderss   listsubfolderss   listallfolderss   listallsubfolderss
   openfolders
   makefolders   deletefolder(    (    (    s"   /mit/python/lib/python2.3/mhlib.pys   MH[   s    													s   ^[1-9][0-9]*$c         C   s   t  i |  ƒ t j	 Sd  S(   N(   s   numericprogs   matchs   strs   None(   s   str(    (    s"   /mit/python/lib/python2.3/mhlib.pys	   isnumericë   s    c           B   sò   t  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s'   Class representing a particular folder.c         C   sA   | |  _  | |  _ t i i |  i ƒ  ƒ o t d | ‚ n d S(   s   Constructor.s   no folder %sN(   s   mhs   selfs   names   oss   paths   isdirs   getfullnames   Error(   s   selfs   mhs   name(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __init__ñ   s
     		c         C   s   d |  i |  i f Sd S(   s   String representation.s   Folder(%s, %s)N(   s   selfs   mhs   name(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __repr__ø   s     c         G   s   |  i i | Œ  d S(   s   Error message handler.N(   s   selfs   mhs   errors   args(   s   selfs   args(    (    s"   /mit/python/lib/python2.3/mhlib.pys   errorü   s     c         C   s    t  i i |  i i |  i ƒ Sd S(   s'   Return the full pathname of the folder.N(   s   oss   paths   joins   selfs   mhs   name(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getfullname   s     c         C   s   t  i i |  i ƒ  t ƒ Sd S(   s8   Return the full pathname of the folder's sequences file.N(   s   oss   paths   joins   selfs   getfullnames   MH_SEQUENCES(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getsequencesfilename  s     c         C   s#   t  i i |  i ƒ  t | ƒ ƒ Sd S(   s4   Return the full pathname of a message in the folder.N(   s   oss   paths   joins   selfs   getfullnames   strs   n(   s   selfs   n(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getmessagefilename  s     c         C   s   |  i i |  i ƒ Sd S(   s!   Return list of direct subfolders.N(   s   selfs   mhs   listsubfolderss   name(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   listsubfolders  s     c         C   s   |  i i |  i ƒ Sd S(   s   Return list of all subfolders.N(   s   selfs   mhs   listallsubfolderss   name(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   listallsubfolders  s     c         C   s•   g  } t i } | i } x8 t i |  i ƒ  ƒ D]! } | | ƒ o | | ƒ q. q. Wt	 t
 | ƒ } | i ƒ  | o | d |  _ n
 d |  _ | Sd S(   s€   Return the list of messages currently present in the folder.
        As a side effect, set self.last to the last message (or 0).iÿÿÿÿi    N(   s   messagess   numericprogs   matchs   appends   oss   listdirs   selfs   getfullnames   names   maps   ints   sorts   last(   s   selfs   names   messagess   matchs   append(    (    s"   /mit/python/lib/python2.3/mhlib.pys   listmessages  s     		 
	c         C   së   h  } |  i ƒ  } y t | d ƒ } Wn t j
 o | Sn Xx¡ n o™ | i ƒ  } | o Pn | i	 d ƒ } t | ƒ d j o! |  i d | | i ƒ  f ƒ n | d i ƒ  } t | d i ƒ  d ƒ i ƒ  } | | | <qI W| Sd S(	   s+   Return the set of sequences for the folder.s   ri   s   :i   s   bad sequence in %s: %si    s    N(   s	   sequencess   selfs   getsequencesfilenames   fullnames   opens   fs   IOErrors   readlines   lines   splits   fieldss   lens   errors   strips   keys   IntSets   tolists   value(   s   selfs   fs   fieldss   values   keys	   sequencess   fullnames   line(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getsequences%  s&     	  !c         C   sÇ   |  i ƒ  } t } xn | i ƒ  D]` \ } } t	 d d ƒ } | i | ƒ | o t | d ƒ } n | i d | | i ƒ  f ƒ q W| o. y t i | ƒ WqÃ t i j
 o qÃ Xn | i ƒ  d S(   s.   Write the set of sequences back to the folder.s    s    s   ws   %s: %s
N(   s   selfs   getsequencesfilenames   fullnames   Nones   fs	   sequencess	   iteritemss   keys   seqs   IntSets   ss   fromlists   opens   writes   tostrings   oss   unlinks   errors   close(   s   selfs	   sequencess   seqs   fs   ss   keys   fullname(    (    s"   /mit/python/lib/python2.3/mhlib.pys   putsequences9  s        !	c         C   sG   |  i ƒ  } y t | d ƒ SWn" t t f j
 o t d ‚ n Xd S(   s<   Return the current message.  Raise Error when there is none.s   curs   no cur messageN(   s   selfs   getsequencess   seqss   maxs
   ValueErrors   KeyErrors   Error(   s   selfs   seqs(    (    s"   /mit/python/lib/python2.3/mhlib.pys
   getcurrentJ  s     c         C   s#   t  |  i ƒ  d t | ƒ d ƒ d S(   s   Set the current message.s   curi    N(   s
   updatelines   selfs   getsequencesfilenames   strs   n(   s   selfs   n(    (    s"   /mit/python/lib/python2.3/mhlib.pys
   setcurrentR  s     c         C   s  |  i ƒ  } | o t d |  i ‚ n | d j o | Sn | i d ƒ } | d j oî| |  d | | d f \ } } } | d  d j o | d  | d f \ } } n t | ƒ o t d | ‚ n y t | ƒ } Wn% t t f j
 o t | ƒ } n Xy |  i | | ƒ } Wn¤ t j
 o˜ }
 |  i ƒ  }	 | |	 j o0 |
 o d | }
 n t |
 t i ƒ  d	 ‚ n |	 | } | o t d
 | ‚ n | d j o | | SqC| |  SqGX| o! | d d f j o
 d } qén | d j o+ t | | ƒ } | t d | | ƒ | !SqGt | | d ƒ } | | | | !Sn | i d ƒ } | d j o€ |  i | |  | ƒ } |  i | | d | ƒ } t | | d ƒ } t | | ƒ } | | | !} | o t d | ‚ n | Sn y |  i | | ƒ } WnZ t j
 oN }
 |  i ƒ  }	 | |	 j o# |
 o d | }
 n t |
 ‚ n |	 | SnE X| | j o/ t | ƒ o t d | ‚ q™t d | ‚ n | g Sd S(   sä   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.s   no messages in %ss   alls   :i    s    i   s   -+s   bad message list %si   s   sequence %s emptys   -s   prevs   lasts   message %d doesn't exists   no %s messageN(    s   selfs   listmessagess   alls   Errors   names   seqs   finds   is   heads   dirs   tails	   isnumerics   ints   counts
   ValueErrors   OverflowErrors   lens   _parseindexs   anchors   msgs   getsequencess   seqss   syss   exc_infos   msgss   bisects   maxs   begins   ends   js   rs   n(   s   selfs   seqs   alls   begins   ns   ends   msgss   tails   heads   seqss   msgs   counts   is   js   rs   anchors   dir(    (    s"   /mit/python/lib/python2.3/mhlib.pys   parsesequenceV  s~     $
c         C   sr  t  | ƒ o5 y t | ƒ SWqB t t f j
 o t i SqB Xn | d d f j o |  i ƒ  Sn | d j o | d Sn | d j o | d Sn | d j oJ |  i ƒ  } t | | ƒ } y | | SWqì t j
 o t d ‚ qì Xn | d	 j ol |  i ƒ  } t | | d
 ƒ } | d j o t d ‚ n y | | d
 SWqet j
 o t d ‚ qeXn t t ‚ d S(   s7   Internal: parse a message number (or cur, first, etc.).s   curs   .s   firsti    s   lastiÿÿÿÿs   nexts   no next messages   previ   s   no prev messageN(   s	   isnumerics   seqs   ints   OverflowErrors
   ValueErrors   syss   maxints   selfs
   getcurrents   alls   ns   bisects   is
   IndexErrors   Errors   None(   s   selfs   seqs   alls   is   n(    (    s"   /mit/python/lib/python2.3/mhlib.pys   _parseindexª  s:     c         C   s   t  |  | ƒ Sd S(   s+   Open a message -- returns a Message object.N(   s   Messages   selfs   n(   s   selfs   n(    (    s"   /mit/python/lib/python2.3/mhlib.pys   openmessageÉ  s     c         C   s  g  } g  } x© | D]¡ } |  i | ƒ } |  i d t | ƒ ƒ } y t	 i
 | ƒ Wn t	 i j
 o n Xy t	 i | | ƒ Wn% t	 i j
 o } | i | ƒ q X| i | ƒ q W| o |  i | ƒ n | o= t | ƒ d j o t	 i | d ‚ qt	 i d | f ‚ n d S(   s2   Remove one or more messages -- may raise os.error.s   ,i   i    s   multiple errors:N(   s   errorss   deleteds   lists   ns   selfs   getmessagefilenames   paths   strs	   commapaths   oss   unlinks   errors   renames   msgs   appends   removefromallsequencess   len(   s   selfs   lists   errorss	   commapaths   deleteds   ns   msgs   path(    (    s"   /mit/python/lib/python2.3/mhlib.pys   removemessagesÍ  s,      i    c         C   s’  g  } h  }
 xü | D]ô } | i ƒ  d } |  i | ƒ }	 | i | ƒ } y t i |	 | ƒ Wn’ t i j
 oƒ y! t i |	 | ƒ t i |	 ƒ Wqð t t i f j
 oC } | i | ƒ y t i | ƒ Wq t i j
 o q Xq qð Xn X| i | ƒ | |
 | <q W|
 o8 | o | i |  |
 i ƒ  ƒ n |  i |
 i ƒ  ƒ n | o= t | ƒ d j o t i | d ‚ qŽt i d | f ‚ n d S(   s_   Refile one or more messages -- may raise os.error.
        'tofolder' is an open folder object.i   i    s   multiple errors:N(   s   errorss   refileds   lists   ns   tofolders   getlasts   tons   selfs   getmessagefilenames   paths   topaths   oss   renames   errors   shutils   copy2s   unlinks   IOErrors   msgs   appends   setlasts   keepsequencess   _copysequencess   itemss   removefromallsequencess   keyss   len(   s   selfs   lists   tofolders   keepsequencess   topaths   errorss   ns   tons   msgs   paths   refiled(    (    s"   /mit/python/lib/python2.3/mhlib.pys   refilemessagesæ  s>      c         C   sä   | i ƒ  } |  i ƒ  }
 d } x§ | i ƒ  D]™ \ } } y |
 | }	 d } Wn t j
 o g  }	 d } n Xx8 | D]0 \ } } | | j o |	 i | ƒ d } qt qt W| o |	 o |	 |
 | <q+ q+ W| o |  i |
 ƒ n d S(   s.   Helper for refilemessages() to copy sequences.i    i   N(   s
   fromfolders   getsequencess   fromsequencess   selfs   tosequencess   changeds   itemss   names   seqs   toseqs   news   KeyErrors   refileditemss   fromns   tons   appends   putsequences(   s   selfs
   fromfolders   refileditemss   fromns   seqs   changeds   fromsequencess   tons   news   toseqs   tosequencess   name(    (    s"   /mit/python/lib/python2.3/mhlib.pys   _copysequences	  s*      

 c   	      C   s,  |  i | ƒ } t | ƒ } | i ƒ  ~ | i | ƒ } | i d | ƒ } y t i | | ƒ Wn t i j
 o n Xy t i | | ƒ WnŠ t i j
 o{ d } z' | i t ƒ t i | | ƒ d } Wd | o. y t i | ƒ Wqt i j
 o qXn Xt i | ƒ n X|  i | g ƒ d S(   sa   Move one message over a specific destination message,
        which may or may not already exist.s   ,%di    i   N(   s   selfs   getmessagefilenames   ns   paths   opens   fs   closes   tofolders   tons   topaths   backuptopaths   oss   renames   errors   oks   setlasts   Nones   shutils   copy2s   unlinks   removefromallsequences(	   s   selfs   ns   tofolders   tons   topaths   oks   fs   backuptopaths   path(    (    s"   /mit/python/lib/python2.3/mhlib.pys   movemessage  s6     

 
c   	      C   sâ   |  i | ƒ } t | ƒ } | i ƒ  ~ | i | ƒ } | i d | ƒ } y t i | | ƒ Wn t i j
 o n Xd } z' | i t ƒ t i | | ƒ d } Wd | o. y t i | ƒ WqÝ t i j
 o qÝ Xn Xd S(   sa   Copy one message over a specific destination message,
        which may or may not already exist.s   ,%di    i   N(   s   selfs   getmessagefilenames   ns   paths   opens   fs   closes   tofolders   tons   topaths   backuptopaths   oss   renames   errors   oks   setlasts   Nones   shutils   copy2s   unlink(	   s   selfs   ns   tofolders   tons   topaths   oks   fs   backuptopaths   path(    (    s"   /mit/python/lib/python2.3/mhlib.pys   copymessage>  s,     

 c   	      C   sø   |  i | ƒ } |  i d | ƒ } y t i | | ƒ Wn t i j
 o n Xd } d d } z[ t
 | d ƒ } x5 n o- | i | ƒ } | o Pn | i | ƒ q{ W| i ƒ  d } Wd | o. y t i | ƒ Wqó t i j
 o qó Xn Xd S(   s3   Create a message, with text from the open file txt.s   ,%di    i   i   s   wi   N(   s   selfs   getmessagefilenames   ns   paths
   backuppaths   oss   renames   errors   oks   BUFSIZEs   opens   fs   txts   reads   bufs   writes   closes   unlink(	   s   selfs   ns   txts   BUFSIZEs   oks   fs   bufs
   backuppaths   path(    (    s"   /mit/python/lib/python2.3/mhlib.pys   createmessageX  s2     
 

 c         C   sÑ   t  |  d ƒ o |  i | j o
 |  ` n |  i ƒ  } d } xv | i ƒ  D]h \ } } | d j o qI n xE | D]= } | | j o* | i | ƒ d } | o | | =q­ qp qp WqI W| o |  i | ƒ n d S(   s`   Remove one or more messages from all sequences (including last)
        -- but not from 'cur'!!!s   lasti    s   curi   N(   s   hasattrs   selfs   lasts   lists   getsequencess	   sequencess   changeds   itemss   names   seqs   ns   removes   putsequences(   s   selfs   lists   names   seqs   changeds   ns	   sequences(    (    s"   /mit/python/lib/python2.3/mhlib.pys   removefromallsequencesr  s$      
  c         C   s*   t  |  d ƒ o |  i ƒ  n |  i Sd S(   s   Return the last message number.s   lastN(   s   hasattrs   selfs   listmessagess   last(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getlast…  s     c         C   s8   | t j o t |  d ƒ o
 |  `  q4 n
 | |  _  d S(   s   Set the last message number.s   lastN(   s   lasts   Nones   hasattrs   self(   s   selfs   last(    (    s"   /mit/python/lib/python2.3/mhlib.pys   setlast‹  s
     (   s   __name__s
   __module__s   __doc__s   __init__s   __repr__s   errors   getfullnames   getsequencesfilenames   getmessagefilenames   listsubfolderss   listallsubfolderss   listmessagess   getsequencess   putsequencess
   getcurrents
   setcurrents   parsesequences   _parseindexs   openmessages   removemessagess   refilemessagess   _copysequencess   movemessages   copymessages   createmessages   removefromallsequencess   getlasts   setlast(    (    (    s"   /mit/python/lib/python2.3/mhlib.pys   Folderî   s4    														T			#		 				c           B   sG   t  Z e d „ Z d „  Z e d „ Z d d „ Z d „  Z d „  Z RS(   Nc         C   sX   | |  _ | |  _ | t j o" | i | ƒ } t	 | d ƒ } n t
 i i |  | ƒ d S(   s   Constructor.s   rN(   s   fs   selfs   folders   ns   numbers   fps   Nones   getmessagefilenames   paths   opens	   mimetoolss   Messages   __init__(   s   selfs   fs   ns   fps   path(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __init__•  s     		c         C   s   d t  |  i ƒ |  i f Sd S(   s   String representation.s   Message(%s, %s)N(   s   reprs   selfs   folders   number(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __repr__ž  s     c         C   s¶   | t j o d i |  i ƒ Sn g  } d } xu |  i D]j } | d i ƒ  o: | i d ƒ } | d j o | | |  i
 ƒ  ƒ } q‰ n | o | i | ƒ q7 q7 Wd i | ƒ Sd S(   sá   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).s    i    s   :N(   s   preds   Nones   joins   selfs   headerss   hits   lines   isspaces   finds   is   lowers   append(   s   selfs   preds   hits   is   headerss   line(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getheadertext¢  s     
  i   c         C   s‹   |  i i |  i ƒ |  i ƒ  } | p | d d d d f j o |  i i ƒ  Sn d k l } | ƒ  } t
 i |  i | | ƒ | i ƒ  Sd S(   sß   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.s    s   7bits   8bits   binary(   s   StringION(   s   selfs   fps   seeks   startofbodys   getencodings   encodings   decodes   reads   StringIOs   outputs	   mimetoolss   getvalue(   s   selfs   decodes   StringIOs   encodings   output(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getbodytext³  s     !	c         C   sç   |  i ƒ  d j o t d ‚ n |  i d ƒ } | o t d ‚ n |  i i |  i ƒ t i	 |  i ƒ } | i | ƒ g  } xV | i ƒ  oH t |  i ƒ d d t | ƒ } t |  i | | ƒ } | i | ƒ q W| i ƒ  | Sd S(   s¥   Only for multipart messages: return the message's body as a
        list of SubMessage objects.  Each submessage object behaves
        (almost) as a Message object.s	   multiparts   Content-Type is not multipart/*s   boundarys"   multipart/* without boundary params   .i   N(   s   selfs   getmaintypes   Errors   getparams   bdrys   fps   seeks   startofbodys	   multifiles	   MultiFiles   mfs   pushs   partss   nexts   strs   numbers   lens   ns
   SubMessages   folders   parts   appends   pop(   s   selfs   bdrys   mfs   ns   partss   part(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getbodypartsÁ  s"      "
c         C   s/   |  i ƒ  d j o |  i ƒ  Sn |  i ƒ  Sd S(   s3   Return body, either a string or a list of messages.s	   multipartN(   s   selfs   getmaintypes   getbodypartss   getbodytext(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getbodyÕ  s     (	   s   __name__s
   __module__s   Nones   __init__s   __repr__s   getheadertexts   getbodytexts   getbodypartss   getbody(    (    (    s"   /mit/python/lib/python2.3/mhlib.pys   Message“  s   			s
   SubMessagec           B   s8   t  Z d „  Z d „  Z d d „ Z d „  Z d „  Z RS(   Nc         C   sm   t  i |  | | | ƒ |  i ƒ  d j o t  i |  ƒ |  _ n t  i	 |  ƒ |  _ t  i	 |  d d ƒ|  _
 d S(   s   Constructor.s	   multiparts   decodei    N(   s   Messages   __init__s   selfs   fs   ns   fps   getmaintypes   getbodypartss   bodys   getbodytexts   bodyencoded(   s   selfs   fs   ns   fp(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __init__ß  s     c         C   s6   |  i |  i |  i f \ } } } d | | | f Sd S(   s   String representation.s   SubMessage(%s, %s, %s)N(   s   selfs   folders   numbers   fps   fs   n(   s   selfs   fps   ns   f(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __repr__é  s     !i   c         C   s>   | o |  i Sn t |  i ƒ t d ƒ j o |  i Sn d  S(   Ns    (   s   decodes   selfs   bodyencodeds   types   body(   s   selfs   decode(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getbodytextî  s    c         C   s+   t  |  i ƒ t  g  ƒ j o |  i Sn d  S(   N(   s   types   selfs   body(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getbodypartsô  s    c         C   s   |  i Sd  S(   N(   s   selfs   body(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   getbodyø  s    (   s   __name__s
   __module__s   __init__s   __repr__s   getbodytexts   getbodypartss   getbody(    (    (    s"   /mit/python/lib/python2.3/mhlib.pys
   SubMessageÝ  s
   	
		s   IntSetc           B   s§   t  Z d  Z e d d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 „  Z
 d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s÷  Class implementing sets of integers.

    This is an efficient representation for sets consisting of several
    continuous ranges, e.g. 1-100,200-400,402-1000 is represented
    internally as a list of three pairs: [(1,100), (200,400),
    (402,1000)].  The internal representation is always kept normalized.

    The constructor has up to three arguments:
    - the string used to initialize the set (default ''),
    - the separator between ranges (default ',')
    - the separator between begin and end of a range (default '-')
    The separators must be strings (not regexprs) and should be different.

    The tostring() function yields a string that can be passed to another
    IntSet constructor; __repr__() is a valid IntSet constructor itself.
    s   ,s   -c         C   s7   g  |  _ | |  _ | |  _ | o |  i | ƒ n d  S(   N(   s   selfs   pairss   seps   rngs   datas
   fromstring(   s   selfs   datas   seps   rng(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __init__  s
    			 c         C   s   g  |  _ d  S(   N(   s   selfs   pairs(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   reset  s    c         C   s   t  |  i | i ƒ Sd  S(   N(   s   cmps   selfs   pairss   other(   s   selfs   other(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __cmp__  s    c         C   s   t  |  i ƒ Sd  S(   N(   s   hashs   selfs   pairs(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __hash__  s    c         C   s$   d |  i ƒ  |  i |  i f Sd  S(   Ns   IntSet(%s, %s, %s)(   s   selfs   tostrings   seps   rng(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   __repr__"  s    c         C   s¨   |  i i ƒ  d } xŽ | t |  i ƒ j  ow |  i | d \ } } |  i | \ } } | | d j o. | t	 | | ƒ f g |  i | d | d +q | d } q Wd  S(   Ni   (
   s   selfs   pairss   sorts   is   lens   alos   ahis   blos   bhis   max(   s   selfs   bhis   alos   is   ahis   blo(    (    s"   /mit/python/lib/python2.3/mhlib.pys	   normalize&  s     .c         C   su   d } xd |  i D]Y \ } } | | j o | } n | |  i | } | o | |  i | } q | } q W| Sd  S(   Ns    (   s   ss   selfs   pairss   los   his   ts   rngs   sep(   s   selfs   los   his   ss   t(    (    s"   /mit/python/lib/python2.3/mhlib.pys   tostring1  s    
   
c         C   sE   g  } x4 |  i D]) \ } } t | | d ƒ } | | } q W| Sd  S(   Ni   (   s   ls   selfs   pairss   los   his   ranges   m(   s   selfs   los   ms   ls   hi(    (    s"   /mit/python/lib/python2.3/mhlib.pys   tolist:  s    
 c         C   s"   x | D] } |  i | ƒ q Wd  S(   N(   s   lists   is   selfs   append(   s   selfs   lists   i(    (    s"   /mit/python/lib/python2.3/mhlib.pys   fromlistA  s     c         C   s   t  ƒ  } |  i | _ | Sd  S(   N(   s   IntSets   news   selfs   pairs(   s   selfs   new(    (    s"   /mit/python/lib/python2.3/mhlib.pys   cloneE  s    	c         C   s   |  i d d Sd  S(   Ni    (   s   selfs   pairs(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   minJ  s    c         C   s   |  i d d Sd  S(   Niÿÿÿÿ(   s   selfs   pairs(   s   self(    (    s"   /mit/python/lib/python2.3/mhlib.pys   maxM  s    c         C   sH   x= |  i D]2 \ } } | | j o
 | j n o t Sq
 q
 Wt Sd  S(   N(   s   selfs   pairss   los   his   xs   Trues   False(   s   selfs   xs   los   hi(    (    s"   /mit/python/lib/python2.3/mhlib.pys   containsP  s
    
  c         C   s‡  xt  t |  i ƒ ƒ D]ð } |  i | \ } } | | j  oµ | d | j o | | f |  i | <n |  i i | | | f ƒ | d j o | d |  i | d d j o? |  i | d d |  i | d f g |  i | d | d +n d  Sn | | j o d  Sq q Wt |  i ƒ d } | d j oC |  i | \ } } | d | j o | | f |  i | <d  Sqmn |  i i	 | | f ƒ d  S(   Ni   i    (
   s   ranges   lens   selfs   pairss   is   los   his   xs   inserts   append(   s   selfs   xs   is   los   hi(    (    s"   /mit/python/lib/python2.3/mhlib.pys   appendU  s&     -?c         C   s9   | | j o d  Sn |  i i | | f ƒ |  i ƒ  d  S(   N(   s   xlos   xhis   selfs   pairss   appends	   normalize(   s   selfs   xlos   xhi(    (    s"   /mit/python/lib/python2.3/mhlib.pys   addpairn  s     c         C   s  g  } xÞ | i |  i ƒ D]Ê } g  } x9 | i |  i ƒ D]% } | i	 ƒ  } | i t | ƒ ƒ q8 Wt | ƒ d j o | i | d | d f ƒ q t | ƒ d j o | d | d j o | i | d | d f ƒ q t d ‚ q W|  i | |  _ |  i ƒ  d  S(   Ni   i    i   s   bad data passed to IntSet(   s   news   datas   splits   selfs   seps   parts   lists   rngs   subps   strips   ss   appends   ints   lens
   ValueErrors   pairss	   normalize(   s   selfs   datas   subps   lists   ss   parts   new(    (    s"   /mit/python/lib/python2.3/mhlib.pys
   fromstrings  s      ((   s   __name__s
   __module__s   __doc__s   Nones   __init__s   resets   __cmp__s   __hash__s   __repr__s	   normalizes   tostrings   tolists   fromlists   clones   mins   maxs   containss   appends   addpairs
   fromstring(    (    (    s"   /mit/python/lib/python2.3/mhlib.pys   IntSetü  s"    															i   c         C   s  y t  |  d ƒ } Wn t j
 o t Sn Xt i | ƒ d } t i	 | | o t i ƒ } x› n o“ | i ƒ  } | o Pn | i | ƒ of | t | ƒ d } xA n o9 | i ƒ  } | p | d i ƒ  o Pn | | } q­ W| i ƒ  Sq_ qf Wt Sd  S(   Ns   rs   :i   i    (   s   opens   files   fs   IOErrors   Nones   res   escapes   keys   pats   compiles   casefolds
   IGNORECASEs   progs   readlines   lines   matchs   lens   texts   isspaces   strip(   s   files   keys   casefolds   pats   fs   texts   progs   line(    (    s"   /mit/python/lib/python2.3/mhlib.pys   pickline†  s*    	   c         C   sl  y) t  |  d ƒ } | i ƒ  } | i ƒ  Wn t j
 o g  } n Xt i | ƒ d } t i | | o t i ƒ }
 | t j o
 t } n d | | f } xy t t | ƒ ƒ D]G } | | } |
 i | ƒ o' | t j o | | =n | | | <Pq® q® W| t j	 o | i | ƒ n |  d }	 t  |	 d ƒ } x | D] } | i | ƒ q7W| i ƒ  t i |	 |  ƒ d  S(   Ns   rs   :(.*)
s   %s: %s
s   ~s   w(   s   opens   files   fs	   readliness   liness   closes   IOErrors   res   escapes   keys   pats   compiles   casefolds
   IGNORECASEs   progs   values   Nones   newlines   ranges   lens   is   lines   matchs   appends   tempfiles   writes   oss   rename(   s   files   keys   values   casefolds   pats   fs   is   newlines   liness   tempfiles   progs   line(    (    s"   /mit/python/lib/python2.3/mhlib.pys
   updatelineš  s8    
 

	
 
c    	      C   s
  t  i d ƒ t ƒ  a d „  }  |  d ƒ |  d ƒ d d d d d	 d
 g } x | D] } |  d | ƒ qR W|  d ƒ |  d ƒ t i d ƒ a |  d ƒ |  d ƒ |  d ƒ t i	 ƒ  } t d d ƒ i ƒ  | d <| GHt i | ƒ |  d ƒ | i ƒ  x | D] } |  d | ƒ qþ W|  d ƒ t i ƒ  } t i | ƒ a |  d ƒ x³ d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) g D]r } y |  d* | ƒ Wn t j
 o } d+ G| GHn Xt  i d, | ƒ i ƒ  } t t | i ƒ  ƒ } | Gd- GHq†W|  d. ƒ d  S(/   Ns   rm -rf $HOME/Mail/@testc         C   s   |  GHt |  ƒ GHd  S(   N(   s   ss   eval(   s   s(    (    s"   /mit/python/lib/python2.3/mhlib.pys   doÀ  s    s   mh.listfolders()s   mh.listallfolders()s   @tests   @test/test1s   @test/test2s   @test/test1/test11s   @test/test1/test12s   @test/test1/test11/test111s   mh.makefolder(%s)s   mh.listsubfolders('@test')s   mh.listallsubfolders('@test')s   f.listsubfolders()s   f.listallsubfolders()s   f.getsequences()s
   1-10 12-20s    s   foos   mh.deletefolder(%s)s   mh.getcontext()s   f.getcurrent()s   firsts   lasts   curs   .s   prevs   nexts   first:3s   last:3s   cur:3s   cur:-3s   prev:3s   next:3s   1:3s   1:-3s   100:3s   100:-3s   10000:3s   10000:-3s   alls   f.parsesequence(%s)s   Error:s   pick %s 2>/dev/nulls   <-- picks   f.listmessages()(   s   oss   systems   MHs   mhs   dos   testfolderss   ts
   openfolders   fs   getsequencess   seqss   IntSets   tolists   putsequencess   reverses
   getcontexts   contexts   seqs   Errors   msgs   popens   reads   stuffs   maps   ints   splits   list(	   s   dos   seqs   testfolderss   lists   msgs   stuffs   ts   contexts   seqs(    (    s"   /mit/python/lib/python2.3/mhlib.pys   test¼  sN     		

  






  

@ s   __main__(   s   __doc__s
   MH_PROFILEs   PATHs   MH_SEQUENCESs   FOLDER_PROTECTs   oss   syss   res	   mimetoolss	   multifiles   shutils   bisects   __all__s	   Exceptions   Errors   MHs   compiles   numericprogs	   isnumerics   Folders   Messages
   SubMessages   IntSets   picklines
   updatelines   tests   __name__(   s	   mimetoolss   IntSets   PATHs   Folders   shutils   __all__s   res	   isnumerics   picklines   FOLDER_PROTECTs   syss   tests
   MH_PROFILEs   numericprogs   Errors   MH_SEQUENCESs
   updatelines   bisects   MHs	   multifiles
   SubMessages   Messages   os(    (    s"   /mit/python/lib/python2.3/mhlib.pys   ?6   s4   							ÿ ¦JŠ"	+