tzh
2024-08-22 c7d0944258c7d0943aa7b2211498fd612971ce27
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
L\¬Qc@s|dZddlmZedddƒ[dZdZdZd    Zdd
lZdd
lZdd
l    Z    dd
l
Z
dd
l Z dd
l Z dd l 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__(((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR[scBs’eZdZddd„Zd„Zd„Zd„Zd„Zd„Z    d„Z
d„Z d    „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Ât d‚n||_dS(s Constructor.tPathit~sMH() path not foundN( tNonet
MH_PROFILEtostpatht
expandusertprofilet
getprofiletPATHtisabstjointisdirR(tselfRR((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt__init__fs         # cCsd|j|jfS(sString representation.s
MH(%r, %r)(RR(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyterrorvscCst|j|ƒS(s*Return a profile entry, None if not found.(tpicklineR(Rtkey((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRzscCs|jS(s9Return the path (the name of the collection's directory).(R(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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"((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt listfolders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
subfolderstsubnamestsubnamet fullsubnamet name_subname((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pytlistsubfolders›s    
 
cCs |jdƒS(s<Return the names of all folders and subfolders, recursively.t(tlistallsubfolders(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR<·s,        
 
cCs t||ƒS(s0Return a new Folder object for the named folder.(R(RR/((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt deletefolderàs    N(RRt__doc__R RRRRR!R$R*R1R:R=R<RBRHRK(((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR_s                                                    s ^[1-9][0-9]*$cCstj|ƒdk    S(N(t numericprogtmatchR (tstr((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR?ïscBsòeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z    d„Z
d    „Z d
„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 RRt getfullnameR(RRPR/((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRõs        cCsd|j|jfS(sString representation.sFolder(%r, %r)(RPR/(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRüscGs|jj|ŒdS(sError message handler.N(RPR(RR((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRscCstjj|jj|jƒS(s'Return the full pathname of the folder.(R RRRPR/(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRQscCstjj|jƒtƒS(s8Return the full pathname of the folder's sequences file.(R RRRQt MH_SEQUENCES(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pytgetsequencesfilenamescCstjj|jƒt|ƒƒS(s4Return the full pathname of a message in the folder.(R RRRQRO(Rtn((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pytgetmessagefilename scCs|jj|jƒS(s!Return list of direct subfolders.(RPR:R/(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR:scCs|jj|jƒS(sReturn list of all subfolders.(RPR<R/(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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/((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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( RSR t    iteritemsRbtfromlistR&RttostringR RIRR'(RRdR0R)R tseqts((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt
getcurrentNs
 cCs#t|jƒdt|ƒdƒdS(sSet the current message.RoiN(t
updatelineRSRO(RRT((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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|    t j ƒd    ‚n|
|} | svtd
|‚n|d kr‹| | S| | Sq X|sµ|dkrµd }qµn|d krèt ||ƒ}|td||ƒ|!St ||dƒ}||||!Sn|jd ƒ}|dkr¡|j    || |ƒ} |j    ||d|ƒ} t || dƒ}t || ƒ}|||!}|std|‚n|Sy|j    ||ƒ}WnOtk
r}    |j
ƒ}
||
kr|    sôd|}    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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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~((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR|®s8   
           cCs t||ƒS(s+Open a message -- returns a Message object.(R(RRT((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt openmessageÍscCsg}g}x¥|D]}|j|ƒ}|jdt|ƒƒ}ytj|ƒWntjk
rhnXytj||ƒWn#tjk
r¢}|j|ƒqX|j|ƒqW|rÊ|j|ƒn|r
t|ƒdkrõtj|d‚q
tjd|f‚ndS(s2Remove one or more messages -- may raise os.error.R>iismultiple errors:N(    RUROR RIRtrenameR,tremovefromallsequencesR`(RtlistterrorstdeletedRTRt    commapathR((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pytremovemessagesÑs( ic Cs„g}i}xö|D]î}|jƒd}|j|ƒ}|j|ƒ}    ytj||    ƒWnŒtjk
réy!tj||    ƒtj|ƒWqêttjfk
rå}
|j    |
ƒytj|    ƒWqtjk
rÞqXqqêXnX|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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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 fromsequencest tosequencestchangedR/RlttoseqtnewtfromnR ((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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ýytj
|ƒWqýtjk
rùqýXnXtj
|ƒ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™R R—R˜RIR(    RRTRR RR)R¡t backuptopathtok((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt movemessage"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™R R—R˜RI(    RRTRR RR)R¡R«R¬((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt copymessageBs( 
 
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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRvs         cCs#t|dƒs|jƒn|jS(sReturn the last message number.RW(RµRYRW(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR–‰s cCs4|dkr't|dƒr0|`q0n    ||_dS(sSet the last message number.RWN(R RµRW(RRW((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR™s  (RRRLRRRRQRSRUR:R<RYRhRnRtRvRˆR|RŽR•R¢RšR­R®R´RR–R™(((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRòs4                                                        T             #                         cBsGeZdd„Zd„Zdd„Zdd„Zd„Zd„ZRS(cCsV||_||_|dkr?|j|ƒ}t|dƒ}ntjj||ƒdS(s Constructor.RZN(tfoldertnumberR RUR&t    mimetoolsRR(RR)RTtfpR((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR™s          cCsdt|jƒ|jfS(sString representation.sMessage(%s, %s)(treprR·R¸(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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(R RtheaderstisspaceRztlowerR,(RtpredR¼thitReR~((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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ºtseekt startofbodyt getencodingR¯t    cStringIORÅt ImportErrorR¹tdecodetgetvalue(RRËtencodingRÅtoutput((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt getbodytext·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(t getmaintypeRtgetparamRºRÆRÇt    multifilet    MultiFiletpushR‹R¸R`t
SubMessageR·R,tpop(RtbdrytmftpartsRTtpart((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pytgetbodyÜs
N(    RRR RRRÁRÏRÝRÞ(((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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Ït bodyencoded(RR)RTRº((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRæs
cCs.|j|j|j}}}d|||fS(sString representation.sSubMessage(%s, %s, %s)(R·R¸Rº(RR)RTRº((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRðsicCs3|s |jSt|jƒtdƒkr/|jSdS(NR;(RàttypeRß(RRË((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRÏõscCs&t|jƒtgƒkr"|jSdS(N(RáRß(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRÝûscCs|jS(N(Rß(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRÞÿs(RRRRRÏRÝRÞ(((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR×äs
    
        RbcBs§eZdZdddd„Zd„Zd„Zd„Zd„Zd„Z    d    „Z
d
„Z d „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ä((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRs
            cCs g|_dS(N(Râ(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pytreset scCst|j|jƒS(N(tcmpRâ(Rtother((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt__cmp__#scCs t|jƒS(N(thashRâ(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt__hash__&scCsd|jƒ|j|jfS(NsIntSet(%r, %r, %r)(RkRãRä(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRk7s 
cCsAg}x4|jD])\}}t||dƒ}||}qW|S(Ni(Râtrange(RtlRòRótm((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRc@s
cCs"x|D]}|j|ƒqWdS(N(R,(RR‘R~((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRjGs cCstƒ}|j|_|S(N(RbRâ(RR©((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pytcloneKs     cCs|jddS(Ni(Râ(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pytminPscCs|jddS(Niÿÿÿÿ(Râ(R((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRpSscCs>x7|jD],\}}||ko-|knr
tSq
WtS(N(RâtTruetFalse(RtxRòRó((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pytcontainsVscCsqxøtt|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ó((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyR,[s& +,  cCs4||krdS|jj||fƒ|jƒdS(N(RâR,Rñ(Rtxlotxhi((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyRåys & N(RRRLR RRçRêRìRRñRkRcRjRøRùRpRýR,RRå(((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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]R tretescapetcompilet
IGNORECASER^RNR`R½Ra(tfileR tcasefoldR)tpattprogRettext((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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]RRRRR RõR`RNR,RR R( RR RgRR)tlinesR    R
tnewlineR~Rettempfile((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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üW|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((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/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_(    Rt testfoldersRôRsR"RlRtstuffR‘((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyttestÂsP         
 
         
 
 
 
 
 
 
 
 
  t__main__(RLtwarningsRR RRRRDR RRR¹RÔR—Rt__all__t    ExceptionRRRRMR?RRR×RbRRuRR(((sM/tmp/ndk-User/buildhost/install/prebuilt/darwin-x86_64/lib/python2.7/mhlib.pyt<module>6s<               ÿ¦M‰  "    *