Plan 9 from Bell Labs’s /usr/web/sources/contrib/stallion/root/sys/lib/python2.7/mhlib.pyc

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


�`^c@s|dZddlmZeddd�[dZdZdZd	Zdd
lZdd
lZdd
l	Z	dd
l
Z
dd
lZdd
lZddl
m
Z
dd
ddgZd
efd��YZdfd��YZe	jd�Zd�Zdfd��YZde
jfd��YZdefd��YZdfd��YZdd�Zdd�Zd�Zedkrxe�nd
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
i�(twarnpy3ksOthe mhlib module has been removed in Python 3.0; use the mailbox module insteadt
stacklevelis
~/.mh_profiles~/Mails
.mh_sequencesi�N(tbisecttMHtErrortFoldertMessagecBseZRS((t__name__t
__module__(((s/sys/lib/python2.7/mhlib.pyR[scBs�eZdZddd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d�Zd	�Zd
�Z
d�Zd�Zd
�Zd�ZRS(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.cCs�|dkrt}ntjj|�|_|dkrH|jd�}n|sWt}ntjj|�r�|ddkr�tjj	d|�}ntjj|�}tjj
|�s�td�n||_dS(sConstructor.tPathit~sMH() path not foundN(tNonet
MH_PROFILEtostpatht
expandusertprofilet
getprofiletPATHtisabstjointisdirR(tselfRR((s/sys/lib/python2.7/mhlib.pyt__init__fs		#cCsd|j|jfS(sString representation.s
MH(%r, %r)(RR(R((s/sys/lib/python2.7/mhlib.pyt__repr__rscGstjjd||�dS(sARoutine to print an error.  May be overridden by a derived class.s
MH error: %s
N(tsyststderrtwrite(Rtmsgtargs((s/sys/lib/python2.7/mhlib.pyterrorvscCst|j|�S(s*Return a profile entry, None if not found.(tpicklineR(Rtkey((s/sys/lib/python2.7/mhlib.pyRzscCs|jS(s9Return the path (the name of the collection's directory).(R(R((s/sys/lib/python2.7/mhlib.pytgetpath~scCs7ttjj|j�d�d�}|s3d}n|S(s&Return the name of the current folder.tcontextsCurrent-Foldertinbox(RR
RRR!(RR"((s/sys/lib/python2.7/mhlib.pyt
getcontext�s
		cCsItjj|j�d�}t|d�}|jd|�|j�dS(s#Set the name of the current folder.R"twsCurrent-Folder: %s
N(R
RRR!topenRtclose(RR"tfntf((s/sys/lib/python2.7/mhlib.pyt
setcontext�scCsqg}|j�}xNtj|�D]=}tjj||�}tjj|�r"|j|�q"q"W|j�|S(s*Return the names of the top-level folders.(R!R
tlistdirRRRtappendtsort(RtfoldersRtnametfullname((s/sys/lib/python2.7/mhlib.pytlistfolders�s
c	Cs�tjj|j|�}tj|�j}|dkr:gSg}tj|�}xt|D]l}tjj||�}tjj|�rVtjj||�}|j|�|d}|dkr�Pq�qVqVW|j�|S(scReturn the names of the subfolders in a given folder
        (prefixed with the given folder name).ii(	R
RRtstattst_nlinkR+RR,R-(	RR/R0tnlinkst
subfolderstsubnamestsubnametfullsubnametname_subname((s/sys/lib/python2.7/mhlib.pytlistsubfolders�s 



cCs
|jd�S(s<Return the names of all folders and subfolders, recursively.t(tlistallsubfolders(R((s/sys/lib/python2.7/mhlib.pytlistallfolders�sc
Cs$tjj|j|�}tj|�j}|dkr:gSg}tj|�}x�|D]�}|ddksVt|�r~qVntjj||�}tjj|�rVtjj||�}|j|�tjj	|�s�j
|�}	||	}n|d}|dkrPqqVqVW|j�|S(s>Return the names of subfolders in a given folder, recursively.iit,i(R
RRR2R3R+t	isnumericRR,tislinkR<R-(
RR/R0R4R5R6R7R8R9t
subsubfolders((s/sys/lib/python2.7/mhlib.pyR<�s,

	


cCs
t||�S(s0Return a new Folder object for the named folder.(R(RR/((s/sys/lib/python2.7/mhlib.pyt
openfolder�scCset|jd�}|r6t|�r6t|d�}nt}tjtjj|j	�|�|�dS(s@Create a new folder (or raise os.error if it cannot be created).sFolder-ProtectiN(
RRR?tinttFOLDER_PROTECTR
tmkdirRRR!(RR/tprotecttmode((s/sys/lib/python2.7/mhlib.pyt
makefolder�s
cCs�tjj|j�|�}xetj|�D]T}tjj||�}ytj|�Wq+tjk
r~|jd|�q+Xq+Wtj|�dS(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(R
RRR!R+tunlinkRtrmdir(RR/R0R7R8((s/sys/lib/python2.7/mhlib.pytdeletefolder�s	N(RRt__doc__RRRRRR!R$R*R1R:R=R<RBRHRK(((s/sys/lib/python2.7/mhlib.pyR_s													s
^[1-9][0-9]*$cCstj|�dk	S(N(tnumericprogtmatchR(tstr((s/sys/lib/python2.7/mhlib.pyR?�scBs�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zdd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�ZRS(s'Class representing a particular folder.cCs>||_||_tjj|j��s:td|�ndS(sConstructor.sno folder %sN(tmhR/R
RRtgetfullnameR(RRPR/((s/sys/lib/python2.7/mhlib.pyR�s		cCsd|j|jfS(sString representation.sFolder(%r, %r)(RPR/(R((s/sys/lib/python2.7/mhlib.pyR�scGs|jj|�dS(sError message handler.N(RPR(RR((s/sys/lib/python2.7/mhlib.pyRscCstjj|jj|j�S(s'Return the full pathname of the folder.(R
RRRPR/(R((s/sys/lib/python2.7/mhlib.pyRQscCstjj|j�t�S(s8Return the full pathname of the folder's sequences file.(R
RRRQtMH_SEQUENCES(R((s/sys/lib/python2.7/mhlib.pytgetsequencesfilenamescCstjj|j�t|��S(s4Return the full pathname of a message in the folder.(R
RRRQRO(Rtn((s/sys/lib/python2.7/mhlib.pytgetmessagefilenamescCs|jj|j�S(s!Return list of direct subfolders.(RPR:R/(R((s/sys/lib/python2.7/mhlib.pyR:scCs|jj|j�S(sReturn list of all subfolders.(RPR<R/(R((s/sys/lib/python2.7/mhlib.pyR<scCs�g}tj}|j}x6tj|j��D]}||�r.||�q.q.Wtt|�}|j�|r�|d|_	n	d|_	|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(
RMRNR,R
R+RQtmapRCR-tlast(RtmessagesRNR,R/((s/sys/lib/python2.7/mhlib.pytlistmessagess		
	cCs�i}|j�}yt|d�}Wntk
r9|SXx�|j�}|sSPn|jd�}t|�dkr�|jd||j�f�n|dj�}t|dj�d�j	�}|||<q=|S(s+Return the set of sequences for the folder.trt:isbad sequence in %s: %siit (
RSR&tIOErrortreadlinetsplittlenRtstriptIntSetttolist(Rt	sequencesR0R)tlinetfieldsR tvalue((s/sys/lib/python2.7/mhlib.pytgetsequences)s$
	
cCs�|j�}d}xk|j�D]]\}}tdd�}|j|�|s_t|d�}n|jd||j�f�qW|s�ytj	|�Wq�tj
k
r�q�Xn
|j�dS(s.Write the set of sequences back to the folder.R;R\R%s%s: %s
N(RSRt	iteritemsRbtfromlistR&RttostringR
RIRR'(RRdR0R)R tseqts((s/sys/lib/python2.7/mhlib.pytputsequences=s
!cCsE|j�}yt|d�SWn ttfk
r@td�nXdS(s<Return the current message.  Raise Error when there is none.tcursno cur messageN(Rhtmaxt
ValueErrortKeyErrorR(Rtseqs((s/sys/lib/python2.7/mhlib.pyt
getcurrentNs
cCs#t|j�dt|�d�dS(sSet the current message.RoiN(t
updatelineRSRO(RRT((s/sys/lib/python2.7/mhlib.pyt
setcurrentVscCsL|j�}|s%td|j�n|dkr5|S|jd�}|dkr
|| d||d}}}|d dkr�|d |d}}nt|�s�td|�nyt|�}Wn#ttfk
r�t|�}nXy|j	||�}Wn�tk
r�}	|j
�}
||
krV|	s=d|}	nt|	tj�d	�n|
|}|svtd
|�n|dkr�||S|| Sq
X|s�|dkr�d}q�n|dkr�
||�}|td||�|!St
||d�}||||!Sn|jd�}|dkr�|j	|| |�}|j	||d|�}
t
||d�}t
||
�}|||!}|s�td|�n|Sy|j	||�}WnOtk
r}	|j
�}
||
kr|	s�|}	nt|	�n|
|SX||krAt|�r1td|�qHtd|�n|gSdS(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.sno messages in %stallR[iR;is-+sbad message list %sissequence %s emptyt-tprevRWsmessage %d doesn't exists
no %s messageN(Ryslast(RYRR/tfindR?RCRqt
OverflowErrorR`t_parseindexRhRtexc_infoRRp(RRlRwtitheadtdirttailtcounttanchorRRstmsgstbegintendtjRZRT((s/sys/lib/python2.7/mhlib.pyt
parsesequenceZs|	 

	

	cCsLt|�r;yt|�SWq;ttfk
r7tjSXn|d
krQ|j�S|dkre|dS|dkry|dS|dkr�|j�}t||�}y||SWq�tk
r�t	d�q�Xn|d	kr?|j�}t||d
�}|dkrt	d�ny||d
SWq?tk
r;t	d�q?Xnt	d�dS(s7Internal: parse a message number (or cur, first, etc.).Rot.tfirstiRWi�tnextsno next messageRyisno prev messageN(scurR�(R?RCR{RqRtmaxintRtRt
IndexErrorRR(RRlRwRTR~((s/sys/lib/python2.7/mhlib.pyR|�s8


cCs
t||�S(s+Open a message -- returns a Message object.(R(RRT((s/sys/lib/python2.7/mhlib.pytopenmessage�scCsg}g}x�|D]�}|j|�}|jdt|��}ytj|�Wntjk
rhnXytj||�Wn#tjk
r�}|j|�qX|j|�qW|r�|j|�n|r
t|�dkr�j|d�q
tjd|f�ndS(s2Remove one or more messages -- may raise os.error.R>iismultiple errors:N(	RUROR
RIRtrenameR,tremovefromallsequencesR`(RtlistterrorstdeletedRTRt	commapathR((s/sys/lib/python2.7/mhlib.pytremovemessages�s(
icCs�g}i}x�D]�|j�d}|j|�}|j|�}	ytj||	�Wn�tjk
r�y!tj||	�tj|�Wq�ttjfk
r�}
|j	|
�ytj|	�Wqtjk
r�qXqq�nX|j
|�|||<qW|r@|r*|j||j��n|j
|j��n|r�t|�dkrktj|d�q�tjd|f�ndS(s_Refile one or more messages -- may raise os.error.
        'tofolder' is an open folder object.iismultiple errors:N(tgetlastRUR
R�Rtshutiltcopy2RIR]R,tsetlastt_copysequencestitemsR�tkeysR`(RR�ttofoldert
keepsequencesR�trefiledRTttonRttopathR((s/sys/lib/python2.7/mhlib.pytrefilemessages�s:


cCs�|j�}|j�}d}x�|j�D]�\}}y||}d}	Wntk
rjg}d}	nXx6|D].\}
}|
|krr|j|�d}qrqrW|	r+|r+|||<q+q+W|r�|j|�ndS(s.Helper for refilemessages() to copy sequences.iiN(RhR�RrR,Rn(Rt
fromfoldertrefileditemst
fromsequencesttosequencestchangedR/RlttoseqtnewtfromnR�((s/sys/lib/python2.7/mhlib.pyR�
s$





c	Cs#|j|�}t|�}|j�~|j|�}|jd|�}ytj||�Wntjk
rtnXytj||�Wn�tjk
rd}z'|jd�tj	||�d}Wd|s�tj
|�Wq�jk
r�q�Xtj
|�nX|j|g�dS(saMove one message over a specific destination message,
        which may or may not already exist.s,%diiN(RUR&R'R
R�RR�RR�R�RIR�(	RRTR�R�RR)R�tbackuptopathtok((s/sys/lib/python2.7/mhlib.pytmovemessage"s2


c	Cs�|j|�}t|�}|j�~|j|�}|jd|�}ytj||�Wntjk
rtnXd}z'|jd�tj	||�d}Wd|s�ytj
|�Wq�tjk
r�q�XnXdS(saCopy one message over a specific destination message,
        which may or may not already exist.s,%diiN(RUR&R'R
R�RR�RR�R�RI(	RRTR�R�RR)R�R�R�((s/sys/lib/python2.7/mhlib.pytcopymessageBs(


c	Cs�|j|�}|jd|�}ytj||�Wntjk
rLnXd}d}zOt|d�}x)|j|�}|s�Pn|j|�qn|j�d}Wd|s�ytj|�Wq�tjk
r�q�XnXdS(	s3Create a message, with text from the open file txt.s,%diiiR%iNi@(	RUR
R�RR&treadRR'RI(	RRTttxtRt
backuppathR�tBUFSIZER)tbuf((s/sys/lib/python2.7/mhlib.pyt
createmessage\s,

cCs�t|d�r'|j|kr'|`n|j�}d}xo|j�D]a\}}|dkrdqFnx@|D]8}||krk|j|�d}|s�||=q�qkqkWqFW|r�|j|�ndS(s`Remove one or more messages from all sequences (including last)
        -- but not from 'cur'!!!RWiRoiN(thasattrRWRhR�tremoveRn(RR�RdR�R/RlRT((s/sys/lib/python2.7/mhlib.pyR�vs	

cCs#t|d�s|j�n|jS(sReturn the last message number.RW(R�RYRW(R((s/sys/lib/python2.7/mhlib.pyR��s
cCs4|dkr't|d�r0|`q0n	||_dS(sSet the last message number.RWN(RR�RW(RRW((s/sys/lib/python2.7/mhlib.pyR��s(RRRLRRRRQRSRUR:R<RYRhRnRtRvR�R|R�R�R�R�R�R�R�R�R�R�(((s/sys/lib/python2.7/mhlib.pyR�s4														T			#		 				cBsGeZdd�Zd�Zdd�Zdd�Zd�Zd�ZRS(cCsV||_||_|dkr?|j|�}t|d�}ntjj||�dS(sConstructor.RZN(tfoldertnumberRRUR&t	mimetoolsRR(RR)RTtfpR((s/sys/lib/python2.7/mhlib.pyR�s		cCsdt|j�|jfS(sString representation.sMessage(%s, %s)(treprR�R�(R((s/sys/lib/python2.7/mhlib.pyR�scCs�|dkrdj|j�Sg}d}xn|jD]c}|dj�s|jd�}|dkr||| j��}qn|r2|j|�q2q2Wdj|�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).R;iR[N(RRtheaderstisspaceRztlowerR,(RtpredR�thitReR~((s/sys/lib/python2.7/mhlib.pyt
getheadertext�sicCs�|jj|j�|j�}|s2|dkr?|jj�Syddlm}Wn!tk
rvddlm}nX|�}tj	|j||�|j
�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.R;t7bitt8bittbinaryi�(tStringIO(R;R�R�R�(R�tseektstartofbodytgetencodingR�t	cStringIOR�tImportErrorR�tdecodetgetvalue(RR�tencodingR�toutput((s/sys/lib/python2.7/mhlib.pytgetbodytext�s

	cCs�|j�dkrtd�n|jd�}|s?td�n|jj|j�tj|j�}|j|�g}xO|j	�r�d|j
dt|�f}t|j
||�}|j|�qzW|j�|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.t	multipartsContent-Type is not multipart/*tboundarys"multipart/* without boundary params%s.%ri(tgetmaintypeRtgetparamR�R�R�t	multifilet	MultiFiletpushR�R�R`t
SubMessageR�R,tpop(RtbdrytmftpartsRTtpart((s/sys/lib/python2.7/mhlib.pytgetbodyparts�s

cCs*|j�dkr|j�S|j�SdS(s3Return body, either a string or a list of messages.R�N(R�R�R�(R((s/sys/lib/python2.7/mhlib.pytgetbody�s
N(	RRRRRR�R�R�R�(((s/sys/lib/python2.7/mhlib.pyR�s			R�cBs8eZd�Zd�Zdd�Zd�Zd�ZRS(cCsktj||||�|j�dkr=tj|�|_ntj|�|_tj|dd�|_dS(sConstructor.R�R�iN(RRR�R�tbodyR�tbodyencoded(RR)RTR�((s/sys/lib/python2.7/mhlib.pyR�s
cCs.|j|j|j}}}d|||fS(sString representation.sSubMessage(%s, %s, %s)(R�R�R�(RR)RTR�((s/sys/lib/python2.7/mhlib.pyR�sicCs3|s
|jSt|j�td�kr/|jSdS(NR;(R�ttypeR�(RR�((s/sys/lib/python2.7/mhlib.pyR��scCs&t|j�tg�kr"|jSdS(N(R�R�(R((s/sys/lib/python2.7/mhlib.pyR��scCs|jS(N(R�(R((s/sys/lib/python2.7/mhlib.pyR��s(RRRRR�R�R�(((s/sys/lib/python2.7/mhlib.pyR��s
	
		RbcBs�eZdZdddd�Zd�Zd�Zd�Zd�Zd�Z	d	�Z
d
�Zd�Zd�Z
d
�Zd�Zd�Zd�Zd�Zd�ZRS(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.
    R>RxcCs5g|_||_||_|r1|j|�ndS(N(tpairstseptrngt
fromstring(RtdataR�R�((s/sys/lib/python2.7/mhlib.pyRs
			cCs
g|_dS(N(R�(R((s/sys/lib/python2.7/mhlib.pytreset scCst|j|j�S(N(tcmpR�(Rtother((s/sys/lib/python2.7/mhlib.pyt__cmp__#scCs
t|j�S(N(thashR�(R((s/sys/lib/python2.7/mhlib.pyt__hash__&scCsd|j�|j|jfS(NsIntSet(%r, %r, %r)(RkR�R�(R((s/sys/lib/python2.7/mhlib.pyR)scCs�|jj�d}x�|t|j�kr�|j|d\}}|j|\}}||dkr�|t||�fg|j|d|d+q|d}qWdS(Ni(R�R-R`Rp(RR~talotahitblotbhi((s/sys/lib/python2.7/mhlib.pyt	normalize,s
-cCs|d}xo|jD]d\}}||kr7t|�}nt|�|jt|�}|rn||j|}q|}qW|S(NR;(R�R�R�R�(RRmtlothitt((s/sys/lib/python2.7/mhlib.pyRk7s
cCsAg}x4|jD])\}}t||d�}||}qW|S(Ni(R�trange(RtlR�R�tm((s/sys/lib/python2.7/mhlib.pyRc@s
cCs"x|D]}|j|�qWdS(N(R,(RR�R~((s/sys/lib/python2.7/mhlib.pyRjGs
cCst�}|j|_|S(N(RbR�(RR�((s/sys/lib/python2.7/mhlib.pytcloneKs	
cCs|jddS(Ni(R�(R((s/sys/lib/python2.7/mhlib.pytminPscCs|jddS(Ni�(R�(R((s/sys/lib/python2.7/mhlib.pyRpSscCs>x7|jD],\}}||ko-|knr
tSq
WtS(N(R�tTruetFalse(RtxR�R�((s/sys/lib/python2.7/mhlib.pytcontainsVscCsqx�t|j��D]�|j|\}}||kr�d|kra||f|j|<n|jj|||f�|dkr�d|j|ddkr�j|dd|j|dfg|j|d|d+ndS||krdSqWt|j�d}|dkrW|j|\}}|d|krW||f|j|<dSn|jj||f�dS(Nii(R�R`R�tinsertR,(RR�R~R�R�((s/sys/lib/python2.7/mhlib.pyR,[s&+,cCs4||krdS|jj||f�|j�dS(N(R�R,R�(Rtxlotxhi((s/sys/lib/python2.7/mhlib.pytaddpairtscCsg}x�|j|j�D]�}g}x9|j|j�D]%}|j�}|jt|��q8Wt|�dkr�|j|d|df�qt|�dkr�|d|dkr�|j|d|df�qtd�qW|j||_|j	�dS(Niiisbad data passed to IntSet(
R_R�R�RaR,RCR`RqR�R�(RR�R�R�R�tsubpRm((s/sys/lib/python2.7/mhlib.pyR�ys&
N(RRRLRRR�R�R�RR�RkRcRjR�R�RpR�R,RR�(((s/sys/lib/python2.7/mhlib.pyRbs"															icCs�yt|d�}Wntk
r'dSXtj|�d}tj||oPtj�}x~|j�}|soPn|j|�rY|t	|�d}x5|j�}|s�|dj
�r�Pn||}q�|j�SqYdS(NRZR[ii(R&R]Rtretescapetcompilet
IGNORECASER^RNR`R�Ra(tfileR tcasefoldR)tpattprogRettext((s/sys/lib/python2.7/mhlib.pyR�s&


cCsay)t|d�}|j�}|j�Wntk
rBg}nXtj|�d}tj||oktj�}|dkr�d}nd||f}xst	t
|��D]C}	||	}
|j|
�r�|dkr�||	=n
|||	<Pq�q�W|dk	r|j|�n|d}t|d�}x|D]}
|j
|
�q,W|j�tj||�dS(NRZs:(.*)
s%s: %s
R
R%(R&t	readlinesR'R]RRRRRR�R`RNR,RR
R�(RR RgRR)tlinesR	R
tnewlineR~Rettempfile((s/sys/lib/python2.7/mhlib.pyRu�s4

	





c	Cs�tjd�t�ad�}|d�|d�ddddd	d
g}x|D]}|d|f�qRW|d�|d
�tjd�a|d�|d�|d�tj�}tdd�j�|d<|GHtj	|�|d�x%t
|�D]}|d|f�q�d�tj�}tj|�a|d�x|d/D]t}y|d*|f�Wntk
r�}d+G|GHnXtj
d,|f�j�}tt|j��}|Gd-GHqMW|d.�dS(0Nsrm -rf $HOME/Mail/@testcSs|GHt|�GHdS(N(teval(Rm((s/sys/lib/python2.7/mhlib.pytdo�ssmh.listfolders()smh.listallfolders()s@tests@test/test1s@test/test2s@test/test1/test11s@test/test1/test12s@test/test1/test11/test111smh.makefolder(%r)smh.listsubfolders('@test')smh.listallsubfolders('@test')sf.listsubfolders()sf.listallsubfolders()sf.getsequences()s
1-10 12-20R\tfoosmh.deletefolder(%r)smh.getcontext()sf.getcurrent()R�RWRoR�RyR�sfirst:3slast:3scur:3scur:-3sprev:3snext:3s1:3s1:-3s100:3s100:-3s10000:3s10000:-3Rwsf.parsesequence(%r)sError:spick %r 2>/dev/nulls<-- picksf.listmessages()(sfirstslastscurR�sprevsnextsfirst:3slast:3scur:3scur:-3sprev:3snext:3s1:3s1:-3s100:3s100:-3s10000:3s10000:-3sall(R
tsystemRRPRBR)RhRbRcRntreversedR$RtpopenR�RVRCR_(	RttestfoldersR�RsR"RlRtstuffR�((s/sys/lib/python2.7/mhlib.pyttest�sP
		

		












t__main__(RLtwarningsRRRRRRDR
RRR�R�R�Rt__all__t	ExceptionRRRRMR?RRR�RbRRuRR(((s/sys/lib/python2.7/mhlib.pyt<module>6s<	
�	�M�"	*

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to [email protected].