3 \ 3@sNddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl Z ddl Z y ddl Z Wne k rdZ YnXdddddddd d d d d dddddgZejjdZGdddZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddejjZGdd d eZGd d!d!eZGd"d d eZGd#d d eZGd$d d eZGd%d d eZ Gd&d'd'Z!Gd(d)d)e!Z"dZ d?Z!dFd@dAZ"dS)GrNTcCs tjjtjj||_||_dS)N)ospathabspath expanduser_path_factory)selfrfactorycreater/usr/lib64/python3.6/mailbox.py__init__$szMailbox.__init__cCs tddS)Nz&Method must be implemented by subclass)NotImplementedError)rmessagerrradd)sz Mailbox.addcCs tddS)Nz&Method must be implemented by subclass)r )rkeyrrrremove-szMailbox.removecCs|j|dS)N)r$)rr#rrr __delitem__1szMailbox.__delitem__c Cs(y|j|Wntk r"YnXdS)N)r$KeyError)rr#rrrdiscard4szMailbox.discardcCs tddS)Nz&Method must be implemented by subclass)r )rr#r!rrr __setitem__;szMailbox.__setitem__c Cs$y |j|Stk r|SXdS)N) __getitem__r&)rr#defaultrrrget?s z Mailbox.getc Cs6|js|j|Stj|j| }|j|SQRXdS)N)r get_message contextlibclosingget_file)rr#filerrrr)Fs zMailbox.__getitem__cCs tddS)Nz&Method must be implemented by subclass)r )rr#rrrr,NszMailbox.get_messagecCstj|j|jS)N)emailmessage_from_bytes get_bytes as_string)rr#rrr get_stringRszMailbox.get_stringcCs tddS)Nz&Method must be implemented by subclass)r )rr#rrrr3YszMailbox.get_bytescCs tddS)Nz&Method must be implemented by subclass)r )rr#rrrr/]szMailbox.get_filecCs tddS)Nz&Method must be implemented by subclass)r )rrrriterkeysaszMailbox.iterkeyscCs t|jS)N)listr6)rrrrkeysesz Mailbox.keysc cs@x:|jD].}y ||}Wntk r0w YnX|Vq WdS)N)r6r&)rr#valuerrr itervaluesis  zMailbox.itervaluescCs|jS)N)r:)rrrr__iter__rszMailbox.__iter__cCs t|jS)N)r7r:)rrrrvaluesuszMailbox.valuesc csDx>|jD]2}y ||}Wntk r0w YnX||fVq WdS)N)r6r&)rr#r9rrr iteritemsys  zMailbox.iteritemscCs t|jS)N)r7r=)rrrritemssz Mailbox.itemscCs tddS)Nz&Method must be implemented by subclass)r )rr#rrr __contains__szMailbox.__contains__cCs tddS)Nz&Method must be implemented by subclass)r )rrrr__len__szMailbox.__len__cCs x|jD]}|j|q WdS)N)r8r')rr#rrrclearsz Mailbox.clearc Cs0y ||}Wntk r |SX|j||S)N)r&r')rr#r*resultrrrpops   z Mailbox.popcCs*x$|jD]}||j|fSWtddS)NzNo messages in mailbox)r6rCr&)rr#rrrpopitemszMailbox.popitemc Csxt|dr|j}nt|dr(|j}n|}d}x6|D].\}}y |||<Wq6tk rbd}Yq6Xq6W|rttddS)Nr=r>FTzNo message with key(s))hasattrr=r>r&)rargsourceZbad_keyr#r!rrrupdates     zMailbox.updatecCs tddS)Nz&Method must be implemented by subclass)r )rrrrflushsz Mailbox.flushcCs tddS)Nz&Method must be implemented by subclass)r )rrrrlocksz Mailbox.lockcCs tddS)Nz&Method must be implemented by subclass)r )rrrrunlockszMailbox.unlockcCs tddS)Nz&Method must be implemented by subclass)r )rrrrclosesz Mailbox.closec Cs,y |jdStk r&tdYnXdS)Nrz?String input must be ASCII-only; use bytes or a Message instead)encode UnicodeError ValueError)rr!rrr_string_to_bytess zMailbox._string_to_bytesFc Cst|tjjrxtj}tjj||d}|j||j d|j }|j dt }|j ||jrt|jt  rt|j t nt|tttjfrt|tjrtjdtd|j}t|tr|j|}|r|j dd}|j dt }|j ||jo|jt  r|j t nt|drt|dr4tjd td|j}d}x|j}|jd r`|ddd}n|jd r||ddd}|sP|r|jdrd|dd}|j dt }|j ||}q:W|jr|r|jt  r|j t ntdt|dS)Nr z8Use of StringIO input is deprecated, use BytesIO insteads From s >From readbufferzDUse of text mode files is deprecated, use a binary mode file insteads  sFrom s>From zInvalid message type: %s) isinstancer1r!rioBytesIO generatorBytesGeneratorflattenseekrSreplacelinesepwrite_append_newlineendswithstrbytesStringIOwarningswarnDeprecationWarninggetvaluerPrErTreadline startswith TypeErrortype) rr!targetZ mangle_from_rTgendataZlastlinelinerrr _dump_messagesZ                   zMailbox._dump_message)NT)N)N)N)F)#__name__ __module__ __qualname__rr"r$r%r'r(r+r)r,r5r3r/r6r8r:r;r<r=r>r?r@rArCrDrHrIrJrKrLrPrervrrrrr!s@       c@seZdZdZd5ddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,Zd-d.Zd/d0Zd1d2Zd3d4ZdS)6r:NTcCstj||||tjj|jdtjj|jdtjj|jdd|_tjj|js|rtj|jdx*|jj D]}tj|dqnWn t |ji|_ ddd|_ d|_ d|_dS) Ntmpnewcur)r{r|r}ir)r}r|g?)rrrrjoinr_pathsexistsmkdirr<r_toc _toc_mtimes _last_read _skewfactor)rdirnamerrrrrrr s  zMaildir.__init__cCs~|j}y|j||Wn*tk rB|jtj|jYnXt|t|t r||j }|j |j }||j krd}nd}d}tj j|jj|j d}tj j|j|||}t|t rtj|jtj j|j|jfyLytj|j|Wn(ttfk rtj|j|YnXtj|jWnNtk rx}z0tj|j|jtjkrftd|nWYdd}~XnX|S)Nr|rz$Name clash with existing message: %s) _create_tmprv BaseExceptionrLrr$name _sync_closer[r get_subdircolonget_inforbasenamesplitr~rutimegetatimeget_datelinkAttributeErrorPermissionErrorrenameOSErrorerrnoZEEXISTr)rr!Ztmp_filesubdirsuffixuniqdesterrrr"!sB      z Maildir.addcCs tjtjj|j|j|dS)N)rr$rr~r_lookup)rr#rrrr$KszMaildir.removec Cs,y|j|Wnttfk r&YnXdS)N)r$r&FileNotFoundError)rr#rrrr'OszMaildir.discardc Cs|j|}|j|}|j|}t|tr.|}n|}tjj|}|j|kr`|j|j|jd}nd}|j |tjj |j |} tjj |j |||} t|trtj | tjj | |jftj| | dS)NrWrrZ)rr"r[r rrrrrr'r~rrrrr) rr#r!Z old_subpathZtemp_keyZ temp_subpathZdominant_subpathrrZtmp_pathnew_pathrrrr(Ws"        zMaildir.__setitem__c Cs|j|}ttjj|j|d }|jr4|j|}nt|}WdQRXtjj|\}}|j ||j |kr|j |j|j d|j tjj tjj|j||S)NrbrWrZ)ropenrrr~rrr r set_subdirrset_infoset_dategetmtime)rr#Zsubpathfmsgrrrrrr,rs    zMaildir.get_messagec Cs8ttjj|j|j|d}|jjtdSQRXdS)NrrQ) rrrr~rrrSrbrc)rr#rrrrr3szMaildir.get_bytescCs$ttjj|j|j|d}t|S)Nr)rrrr~rr _ProxyFile)rr#rrrrr/szMaildir.get_filec csH|jx:|jD]0}y|j|Wntk r8wYnX|VqWdS)N)_refreshrrr&)rr#rrrr6s zMaildir.iterkeyscCs|j||jkS)N)rr)rr#rrrr?szMaildir.__contains__cCs|jt|jS)N)rlenr)rrrrr@szMaildir.__len__cCsdS)Nr)rrrrrIsz Maildir.flushcCsdS)Nr)rrrrrJsz Maildir.lockcCsdS)Nr)rrrrrKszMaildir.unlockcCsdS)Nr)rrrrrLsz Maildir.closecCs`g}xVtj|jD]F}t|dkr|ddkrtjjtjj|j|r|j|ddqW|S)NrWr.)rlistdirrrrisdirr~append)rrBentryrrr list_folderss zMaildir.list_folderscCs ttjj|jd||jddS)NrF)rr)rrrr~rr)rfolderrrr get_folderszMaildir.get_foldercCs\tjj|jd|}t||jd}tjj|d}tjj|sXtjtj|tj tj Bd|S)Nr)rZ maildirfolderi) rrr~rrrrrLrO_CREATO_WRONLY)rrrrBZmaildirfolder_pathrrr add_folders zMaildir.add_foldercCs,tjj|jd|}xTtjtjj|dtjtjj|dD](}t|dksZ|ddkr>td|q>WxPtj|D]B}|dkrv|dkrv|dkrvtjjtjj||rvtd||fqvWx`tj|d d D]N\}}}x |D]}tj tjj||qWx |D]}tj tjj||qWqWtj |dS) Nrr|r}rWrzFolder contains message(s): %sr{z%Folder contains subdirectory '%s': %sF)topdown) rrr~rrrrrwalkr$rmdir)rrrrrootdirsfilesrrr remove_folders   zMaildir.remove_foldercCs\tj}xNtjtjj|jdD]4}tjj|jd|}|tjj|dkr tj|q WdS)Nr{i@)timerrrr~rrr$)rnowrrrrrcleans z Maildir.cleanrWcCstj}tj}d|kr$|jdd}d|kr8|jdd}dt|t|ddtjtj|f}tj j |j d|}ytj |Wn@t k rtjd7_yt|Stk rYnXYnXtd |dS) N/z\057rzz\072z%s.M%sP%sQ%s.%srWg.Ar{z&Name clash prevented file creation: %s)rsocket gethostnamerbintrgetpidr_countrr~rstatr_create_carefullyFileExistsErrorr)rrZhostnamerrrrrrs&    zMaildir._create_tmpcCstj|jd|jkrbd}x<|jD]2}tjj|j|}||j|krLd}||j|<q$W|sbdSi|_xl|jD]b}|j|}xRtj |D]D}tjj ||}tjj |rq|j |j d}tjj |||j|<qWqpWtj|_dS)NrUFTr)rrrrrrrrrrr~rrr)rZrefreshrmtimerrprrrrrs&    zMaildir._refreshcCszy,tjjtjj|j|j|r*|j|SWntk r@YnX|jy |j|Stk rttd|YnXdS)NzNo message with key: %s)rrrr~rrr&r)rr#rrrr#s zMaildir._lookupc CsVt|ds|j|_xs   @ rc@s>eZdZdZddZdddZdddZdd d Zd d Zd S) _mboxMMDFTcCsp|j|\}}|jj||jjjtd}|jj||jj}|j|jtd}|j |ddj d|S)NrQrXr) rrrarnrbrcrSr_message_factoryset_fromdecode)rr#rr from_linestringrrrrr,s z_mboxMMDF.get_messageFcCstj|j|j|dS)N)unixfrom)r1r2r3r4)rr#from_rrrr5sz_mboxMMDF.get_stringcCsJ|j|\}}|jj||s(|jj|jj||jj}|jtdS)NrQ)rrrarnrSrrbrc)rr#rrrrrrrr3s   z_mboxMMDF.get_bytescCs<|j|\}}|jj||s(|jjt|j|jj|S)N)rrrarn _PartialFiler)rr#rrrrrrr/s   z_mboxMMDF.get_filecCs d}t|tr|j|}t|trf|jdrf|jd}|dkr\|d|}||dd}q|}d}nJt|tr|jjd}d|}n(t|t j j r|j }|dk r|jd}|dkrdt jt jj}|jj}|jj|t|j||j|j|jj}||fS)NsFrom rQrWrrsFrom MAILER-DAEMON rZ)r[rgrPrhrofind_mboxMMDFMessageget_fromrMr1r!r get_unixfromrasctimegmtimerrrdrcrv _mangle_from_)rr!rnewlineZauthorrrrrrr&s0         z_mboxMMDF._install_messageN)F)F)F) rwrxryrr,r5r3r/rrrrrrs   rc@s.eZdZdZdZd ddZddZddZdS) rTNcCst|_tj||||dS)N)r rrr)rrrrrrrrLsz mbox.__init__cCs|jtdS)N)rdrc)rrrrrrQszmbox._post_message_hookcCsgg}}d}|jjdx|jj}|jj}|jdr|t|t|krl|rb|j|ttn |j||j|d}q|s|r|j|ttn |j|Pq|tkrd}qd}qWtt t |||_ t|j |_ |jj|_ dS)NFrsFrom T)rrarrnrorrrcdict enumerateziprrr)rstartsstopsZlast_was_emptyline_posrurrrrUs0         zmbox._generate_toc)NT)rwrxryrrerrrrrrrrCs  c@s.eZdZd ddZddZddZd d ZdS) rNTcCst|_tj||||dS)N)r rrr)rrrrrrrrzsz MMDF.__init__cCs|jdtdS)Ns)rdrc)rrrrrrszMMDF._pre_message_hookcCs|jtdtdS)Ns)rdrc)rrrrrrszMMDF._post_message_hookcCsgg}}|jjdd}x|}|jj}|jj}|jdtr|j|xV|}|jj}|jj}|dtkr|j|ttPqN|sN|j|PqNWq|sPqWtt t |||_ t|j |_ |jjdd|jj|_ dS)NrsrU)rrarnrrorcrrrrrrrr)rrrnext_posrrurrrrs2          zMMDF._generate_toc)NT)rwrxryrrrrrrrrrws c@seZdZd/ddZddZddZd d Zd d Zd dZddZ ddZ ddZ ddZ ddZ ddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.ZdS)0rNTcCsttj||||tjj|jsj|r`tj|jdtjtjtjj |jdtj tj Btj Bdn t |jd|_dS)Niz .mh_sequencesiF)rrrrrrrrLrr~rO_EXCLrrr)rrrrrrrrs z MH.__init__cCs|j}t|dkrd}n t|d}tjj|jt|}t|}d}z|j rVt |zfy|j ||Wn:t k r|j rt |t|d}tj|YnXt|tr|j||Wd|j rt |XWd|st|X|S)NrrWFT)r8rmaxrrr~rrgrrrrvrrrr$r[r _dump_sequences)rr!r8Znew_keyrrclosedrrrr"s6     zMH.addcCsxtjj|jt|}yt|d}Wn>tk r`}z"|jtjkrNt d|nWYdd}~XnX|j tj |dS)Nzrb+zNo message with key: %s) rrr~rrgrrrrr&rLr$)rr#rrrrrrr$s z MH.removecCstjj|jt|}yt|d}Wn>tk r`}z"|jtjkrNt d|nWYdd}~XnXzd|j rrt |z@tj tj|tj tjB|j||t|tr|j||Wd|j rt|XWdt|XdS)Nzrb+zNo message with key: %s)rrr~rrgrrrrr&rrrLrO_TRUNCrvr[r r rr)rr#r!rrrrrrr(s$   zMH.__setitem__c Csy@|jr$ttjj|jt|d}nttjj|jt|d}Wn>tk r~}z"|jtj krlt d|nWYdd}~XnX|2|jrt |z t |}Wd|jrt |XWdQRXx*|jjD]\}}||kr|j|qW|S)Nzrb+rzNo message with key: %s)rrrrr~rrgrrrr&rr r get_sequencesr> add_sequence)rr#rrrrkey_listrrrr,s&  zMH.get_messagec Csy@|jr$ttjj|jt|d}nttjj|jt|d}Wn>tk r~}z"|jtj krlt d|nWYdd}~XnX|6|jrt |z|j j tdS|jrt|XWdQRXdS)Nzrb+rzNo message with key: %srQ)rrrrr~rrgrrrr&rrSrbrcr)rr#rrrrrr3s z MH.get_bytescCsfyttjj|jt|d}Wn>tk r\}z"|jtjkrJt d|nWYdd}~XnXt |S)NrzNo message with key: %s) rrrr~rrgrrrr&r)rr#rrrrrr/)s z MH.get_filecCsttddtj|jDS)Ncss|]}|jrt|VqdS)N)isdigitr).0rrrr 6szMH.iterkeys..)iterrrrr)rrrrr64sz MH.iterkeyscCstjjtjj|jt|S)N)rrrr~rrg)rr#rrrr?9szMH.__contains__cCstt|jS)N)rr7r6)rrrrr@=sz MH.__len__cCs2|js.ttjj|jdd|_t|jd|_dS)Nz .mh_sequenceszrb+T)rrrrr~rrr)rrrrrJAs zMH.lockcCs(|jr$t|jt|j|`d|_dS)NF)rrrr)rrrrrKHs   z MH.unlockcCsdS)Nr)rrrrrIPszMH.flushcCs|jr|jdS)N)rrK)rrrrrLTszMH.closecCs@g}x6tj|jD]&}tjjtjj|j|r|j|qW|S)N)rrrrrr~r)rrBrrrrrYs zMH.list_folderscCsttjj|j||jddS)NF)rr)rrrr~rr)rrrrrrasz MH.get_foldercCsttjj|j||jdS)N)r)rrrr~rr)rrrrrrfsz MH.add_foldercCs`tjj|j|}tj|}|dgkr:tjtjj|dn|gkrDntd|jtj|dS)Nz .mh_sequenceszFolder not empty: %s)rrr~rrr$rr)rrrZentriesrrrrks  zMH.remove_folderc s i}ttjj|jdddd}t|jx|D]}y|jd\}}t}xT|jD]H}|jrr|j t |qVdd|jdD\}} |j t || d qVWfd d t |D||<t||d kr||=Wq2tk rtd |jYq2Xq2WWdQRX|S)Nz .mh_sequencesrASCII)encodingrzcss|]}t|VqdS)N)r)rxrrrrsz#MH.get_sequences..-rWcsg|]}|kr|qSrr)rr#)all_keysrr sz$MH.get_sequences..rz"Invalid sequence specification: %s)rrrr~rsetr8rrr"rrHrangerrrOrrstrip) rZresultsrrurcontentsr8specrrr)rrr ws&    zMH.get_sequencesc Cs ttjj|jdddd}ztjtj|jtjtjBx|j D]\}}t |dkrXqB|j |dd}d}xbt t |D]R}|d|kr|sd }|j d n*|rd}|j d ||fn|j d ||}q|W|r|j t|d qB|j d qBWWdt|XdS)Nz .mh_sequenceszr+r)rrrzFrWTrz%s %sz %s )rrrr~rrLrrr r>rrdrrrgr)r sequencesrrr8prevZ completingr#rrr set_sequencess.   zMH.set_sequencesc CsL|j}d}g}x|jD]}|d|kr|j||dfy4tjtjj|jt|tjj|jt|dWnHt t fk rtj tjj|jt|tjj|jt|dYnXtj tjj|jt||d7}qW|d|_ t|dkrdSxB|jD]6\}}x*|D]"\}}||kr|||j|<qWqW|j|dS)NrrW)r r6rrrrr~rrgrrrunlinkrrr>indexr") rr r!Zchangesr#rroldr|rrrpacks,      zMH.packcCs||j}|j}x<|jD]0\}}||kr6|j|q||kr||j|=qWx|D]}||krT|g||<qTW|j|dS)N)r r>rr$r")rr!r#Zpending_sequencesZ all_sequencesrrsequencerrrr s  zMH._dump_sequences)NT)rwrxryrr"r$r(r,r3r/r6r?r@rJrKrIrLrrrrr r"r&r rrrrrs, "  c@seZdZedddddddhZd$d d Zd d ZddZddZddZ ddZ ddZ ddZ ddZ ddZddZd d!Zd"d#ZdS)%runseendeletedZfiledanswered forwardedZeditedresentNTcCstj||||i|_dS)N)rr_labels)rrrrrrrrszBabyl.__init__cCs(tj||}t|tr$|j|j|<|S)N)rr"r[r get_labelsr-)rr!r#rrrr"s  z Babyl.addcCs"tj||||jkr|j|=dS)N)rr$r-)rr#rrrr$s  z Babyl.removecCs*tj|||t|tr&|j|j|<dS)N)rr(r[r r.r-)rr#r!rrrr(s zBabyl.__setitem__c Cs|j|\}}|jj||jjtj}x4|jj}|dtksJ| rLP|j|jtdq.Wtj}x0|jj}|tks| rP|j|jtdqlW||jj }|jj |}|jtd}t |j |} | j |j ||jkr| j|j|| S)Ns *** EOOH ***rQ)rrrarnr\r]rcrdrbrrSr rm set_visibler- set_labels) rr#rroriginal_headersruZvisible_headersnZbodyrrrrr,s.       zBabyl.get_messagec Cs|j|\}}|jj||jjtj}x4|jj}|dtksJ| rLP|j|jtdq.Wx|jj}|tks|| rdPqdW|j }||jj }|jj |}|jtd}||S)Ns *** EOOH ***rQ) rrrarnr\r]rcrdrbrmrrS) rr#rrr1ruZheadersr2rtrrrr3s$      zBabyl.get_bytescCstj|j|jdtS)NrQ)r\r]r3rbrc)rr#rrrr/%szBabyl.get_filecCs@|jt}x|jjD]}|j|qW|j|jt|S)N)rrr-r<rHdifference_update_special_labelsr7)rlabelsZ label_listrrrr.)s  zBabyl.get_labelscCs>gg}}|jjdd}g}x|}|jj}|jj}|dtkrt|t|krf|j|tt|j|dd|jjddjdD}|j|q |dks|dtkrt|t|kr|j|ttq |s |j|ttPq Wtt t |||_ tt ||_ t|j |_ |jjdd|jj|_dS) Nrs cSsg|]}|jr|jqSr)strip)rlabelrrrr@sz'Babyl._generate_toc..rW,rU)rrarnrrcrrrrrrrr-rr)rrrrZ label_listsrrur5rrrr2s4        zBabyl._generate_toccCsVdt}|dt7}|j}dd|D}|ddj|t7}|d7}|j|dS)NsBABYL OPTIONS:s Version: 5css|]}|jVqdS)N)rM)rr7rrrrUsz*Babyl._pre_mailbox_hook..sLabels:r8r9)rcr.r~rd)rrZbabylr5rrrrPs zBabyl._pre_mailbox_hookcCs|jdtdS)N )rdrc)rrrrrrZszBabyl._pre_message_hookcCs|jtddS)Nr9)rdrc)rrrrrr^szBabyl._post_message_hookcCs|jj}t|trg}g}x0|jD]$}||jkr@|j|q&|j|q&W|jjdx |D]}|jjd|jq`W|jjdx$|D]}|jjd|jdqW|jjt n|jjdt t|t j j r0t j}t jj|dd}|j||jdx6|j}|jj|jd t |d ks8| r Pq W|jjd t t|trt j} t jj| dd} | j|jxz| j}|jj|jd t |d ks| rPqWnB|jdx6|j}|jj|jd t |d ks| rPqWx,|jd } | sP|jj| jd t qWnZt|ttt jfr,t|t jrhtjd td |j}t|tr~|j|}|jdd} | ddkr|jj|d| jd t |jjd t |jj|d| jd t |jj|| djd t n(|jjd t t |jj|jd t n^t |drzt |drXtjdtd |j!}|j} d}x|j}|j"dr|ddd }n|j"dr|ddd }|jj|jd t |d ks| rf|rd}|jjd t |j| nPqfWx|j}|sP|j"dr,|ddt }n:|j"drJ|ddt }n|j"d rf|ddt }|jj|qWnt#dt$||jj}||fS)N1s, s,, r8s1,,FrrQs *** EOOH ***iz8Use of StringIO input is deprecated, use BytesIO insteadrRs rUrWrnrTzDUse of text mode files is deprecated, use a binary mode file insteadTs rVzInvalid message type: %srZrYrZrYrZrZ)%rrr[r r.r4rrdrMrcr1r!rr\r]r^r_r`rarnrb get_visiblerSrhrgrirjrkrlrmrPrrErTrfrprq)rr!rZspecial_labelsr5r7Z orig_bufferZorig_generatorruZ vis_bufferZ vis_generatorrTZ body_startZ original_posZ first_passrrrrrbs                         zBabyl._install_message)NT)rwrxry frozensetr4rr"r$r(r,r3r/r.rrrrrrrrrrs     c@s&eZdZdddZddZddZdS) rNcCst|tjjr4|jtj|t|tr|j|nt|trP|jtj |n~t|t rl|jtj |nbt|t j r|jtj|nDt|dr|jtj|n(|dkrtjjj|ntdt|dS)NrSzInvalid message type: %s)r[r1r!r_become_messagecopydeepcopy _explain_torhr2rgZmessage_from_stringr\ TextIOWrapperZmessage_from_filerEZmessage_from_binary_filerrprq)rr!rrrrs      zMessage.__init__cCs8t|dg}x&|jD]}||kr|j||j|<qWdS)N_type_specific_attributes)getattr__dict__)rr!Z type_specificrrrrr?s  zMessage._become_messagecCst|trdStddS)Nz Cannot convert to specified type)r[rrp)rr!rrrrBs zMessage._explain_to)N)rwrxryrr?rBrrrrrs c@sxeZdZdddgZdddZddZd d Zd d Zd dZddZ ddZ ddZ ddZ ddZ ddZddZdS)r _subdir_info_dateNcCs&d|_d|_tj|_tj||dS)Nr|r)rGrHrrIrr)rr!rrrrs zMaildirMessage.__init__cCs|jS)N)rG)rrrrrszMaildirMessage.get_subdircCs(|dks|dkr||_n td|dS)Nr|r}z!subdir must be 'new' or 'cur': %s)rGrO)rrrrrrszMaildirMessage.set_subdircCs"|jjdr|jddSdSdS)Nz2,rUr)rHro)rrrr get_flags s zMaildirMessage.get_flagscCsddjt||_dS)Nz2,r)r~rrH)rflagsrrr set_flagsszMaildirMessage.set_flagscCs$|jdjt|jt|BdS)Nr)rLr~rrJ)rflagrrradd_flagszMaildirMessage.add_flagcCs,|jr(|jdjt|jt|dS)Nr)rJrLr~r)rrMrrr remove_flagszMaildirMessage.remove_flagcCs|jS)N)rI)rrrrrszMaildirMessage.get_datec Cs4yt||_Wn tk r.td|YnXdS)Nzcan't convert to float: %s)floatrIrOrp)rZdaterrrr"szMaildirMessage.set_datecCs|jS)N)rH)rrrrr)szMaildirMessage.get_infocCs&t|tr||_ntdt|dS)Nzinfo must be a string: %s)r[rgrHrprq)rinforrrr-s zMaildirMessage.set_infocCst|tr8|j|j|j|j|j|jnht|trt |j}d|kr`|j d|jdkrv|j dd|kr|j dd|kr|j dd|kr|j d|j d t j |jnt|trt |j}d|kr|jd d|kr|jd d|kr|jd nt|trt |j}d|krD|jd d|krX|jd d|krl|jdd|kr|jdnt|trntdt|dS)NSRr}OTDFAz MAILER-DAEMONr(repliedflaggedr)r*Pr+z$Cannot convert to specified type: %s)r[r rLrJrrrrrrrNrrrr r r add_labelrrprq)rr!rKrrrrB4sN                           zMaildirMessage._explain_to)N)rwrxryrDrrrrJrLrNrOrrrrrBrrrrr s  c@sVeZdZdgZdddZddZdddZd d Zd d Zd dZ ddZ ddZ dS)r_fromNcCsV|jddt|tjjrF|j}|dk rF|jdrF|j|ddtj||dS)Nz MAILER-DAEMONTzFrom rX)rr[r1r!rrror)rr!rrrrres  z_mboxMMDFMessage.__init__cCs|jS)N)r])rrrrrnsz_mboxMMDFMessage.get_fromcCs4|dk r*|dkrtj}|dtj|7}||_dS)NT )rrrr])rrZtime_rrrrrs z_mboxMMDFMessage.set_fromcCs|jdd|jddS)NStatusrzX-Status)r+)rrrrrJzsz_mboxMMDFMessage.get_flagscCst|}d \}}x&d D]}||kr||7}|j|qWx&d D]}||kr>||7}|j|q>W|djt|7}y|jd|Wn tk r|jd|YnXy|jd|Wn tk r|jd|YnXdS) NrrSrTrVrWrXr_zX-Status)rr)rSrT)rVrWrX)rr$r~rreplace_headerr&Z add_header)rrKZ status_flagsZ xstatus_flagsrMrrrrL~s&  z_mboxMMDFMessage.set_flagscCs$|jdjt|jt|BdS)Nr)rLr~rrJ)rrMrrrrNsz_mboxMMDFMessage.add_flagcCs4d|ksd|kr0|jdjt|jt|dS)Nr_zX-Statusr)rLr~rrJ)rrMrrrrOsz_mboxMMDFMessage.remove_flagc Cst|trt|j}d|kr(|jdd|kr:|jdd|krL|jdd|kr^|jdd|krp|jd|d =|d =d j|jjdd}y|j t j t j |d Wnttfk rYnXn t|tr|j|j|j|jnt|trZt|j}d|kr$|jdd|kr8|jdd|krL|jd|d =|d =nt|trt|j}d|kr|jdd|kr|jdd|kr|jd|d =|d =nt|trntdt|dS)NrTr}rWrXrSrRrVrUZstatuszx-statusr^rXz%a %b %d %H:%M:%S %Yr(rYrZr)r*z$Cannot convert to specified type: %s)r[r rrJrrNr~rrrcalendarZtimegmrZstrptimerO OverflowErrorrrLrr r r r\rrprq)rr!rKZ maybe_daterrrrBs^                          z_mboxMMDFMessage._explain_to)N)N) rwrxryrDrrrrJrLrNrOrBrrrrr`s  rc@s eZdZdS)r N)rwrxryrrrrr sc@sDeZdZdgZdddZddZddZd d Zd d Zd dZ dS)r _sequencesNcCsg|_tj||dS)N)rdrr)rr!rrrrszMHMessage.__init__cCs|jddS)N)rd)rrrrr szMHMessage.get_sequencescCst||_dS)N)r7rd)rr rrrr"szMHMessage.set_sequencescCs6t|tr"||jkr2|jj|ntdt|dS)Nzsequence type must be str: %s)r[rgrdrrprq)rr'rrrr s  zMHMessage.add_sequencec Cs*y|jj|Wntk r$YnXdS)N)rdr$rO)rr'rrrremove_sequenceszMHMessage.remove_sequencecCsJt|trdt|j}d|kr*|jdn|jd|jdd|krP|jdd|krb|jdnt|trt|j}d|kr|jdn |jd d|kr|jdd|kr|jd nt|trx||jD]}|j|qWn`t|t r(t|j}d|kr|j dd|krF|j d nt|t r6nt d t |dS) Nr(r}rRrZrWrYrSROrTrXr*z$Cannot convert to specified type: %s)r[r rr rrNrr r r r\rrprq)rr!r r'rrrrBs@                     zMHMessage._explain_to)N) rwrxryrDrr r"r rerBrrrrr s c@s^eZdZddgZdddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ dS)r r-_visibleNcCsg|_t|_tj||dS)N)r-rrgr)rr!rrrr"szBabylMessage.__init__cCs|jddS)N)r-)rrrrr.(szBabylMessage.get_labelscCst||_dS)N)r7r-)rr5rrrr0,szBabylMessage.set_labelscCs6t|tr"||jkr2|jj|ntdt|dS)Nzlabel must be a string: %s)r[rgr-rrprq)rr7rrrr\0s  zBabylMessage.add_labelc Cs*y|jj|Wntk r$YnXdS)N)r-r$rO)rr7rrr remove_label8szBabylMessage.remove_labelcCs t|jS)N)rrg)rrrrr=?szBabylMessage.get_visiblecCst||_dS)N)rrg)rZvisiblerrrr/CszBabylMessage.set_visiblecCsjx6|jjD](}||kr,|jj|||q |j|=q Wx,dD]$}||kr>||jkr>|||j|<q>WdS)NDateFromReply-ToToCCSubject)rirjrkrlrmrn)rgr8r`)rheaderrrrupdate_visibleGs  zBabylMessage.update_visiblecCsvt|tr~t|j}d|kr*|jdn|jd|jdd|ksNd|krX|jdd|krj|jdd |kr||jd nt|trt|j}d|kr|jd n |jd d |kr|jd d|kr|jdnt|trt|j}d|kr|jdd|krr|jdnXt|t rT|j |j x<|jD]}|j |q>Wnt|t rbntdt|dS)Nr(r}rRr+r,r[r*rSr)rUrfrTrVrXrYz$Cannot convert to specified type: %s)r[r rr.rrNrr r r r/r=r\rrprq)rr!r5r7rrrrBRsF                      zBabylMessage._explain_to)N) rwrxryrDrr.r0r\rhr=r/rprBrrrrr s  c@s eZdZdS)r N)rwrxryrrrrr |sc@seZdZd%ddZd&ddZd'ddZd(dd Zd)d d Zd d ZddZ d*ddZ ddZ ddZ ddZ ddZddZddZdd Zd!d"Zed#d$ZdS)+rNcCs$||_|dkr|j|_n||_dS)N)rr_pos)rrposrrrrs z_ProxyFile.__init__cCs|j||jjS)N)_readrrS)rsizerrrrSsz_ProxyFile.readcCs|j||jjS)N)rsrread1)rrtrrrrusz_ProxyFile.read1cCs|j||jjS)N)rsrrn)rrtrrrrnsz_ProxyFile.readlinecCs>g}x4|D],}|j||dk r |t|8}|dkr Pq W|S)Nr)rr)rsizehintrBrurrr readliness   z_ProxyFile.readlinesccs x|j}|sdS|VqWdS)N)rn)rrurrrr;s z_ProxyFile.__iter__cCs|jS)N)rq)rrrrrsz_ProxyFile.tellrcCs4|dkr|jj|j|jj|||jj|_dS)NrW)rrarqr)roffsetwhencerrrrasz_ProxyFile.seekc Cs0t|dr,zt|jdr"|jjWd|`XdS)NrrL)rErrL)rrrrrLs   z_ProxyFile.closecCs2|dkr d}|jj|j||}|jj|_|S)NrWrZ)rrarqr)rrt read_methodrBrrrrss  z_ProxyFile._readcCs|S)Nr)rrrr __enter__sz_ProxyFile.__enter__cGs |jdS)N)rL)rexcrrr__exit__sz_ProxyFile.__exit__cCs |jjS)N)rreadable)rrrrr~sz_ProxyFile.readablecCs |jjS)N)rwritable)rrrrrsz_ProxyFile.writablecCs |jjS)N)rseekable)rrrrrsz_ProxyFile.seekablecCs |jjS)N)rrI)rrrrrIsz_ProxyFile.flushcCs&t|dsdSt|jdsdS|jjS)NrTr F)rErr )rrrrr s   z_ProxyFile.closed)N)N)N)N)N)r)rwrxryrrSrurnrwr;rrarLrsr{r}r~rrrIpropertyr rrrrrs"        rc@s8eZdZd ddZddZdddZd d Zd d ZdS)rNcCstj|||||_||_dS)N)rr_start_stop)rrrrrrrrsz_PartialFile.__init__cCstj||jS)N)rrr)rrrrrsz_PartialFile.tellrcCs<|dkr|j|_d}n|dkr*|j|_d}tj|||dS)NrrWrU)rrqrrra)rrxryrrrrasz_PartialFile.seekcCsB|j|j}|dkrdS|dks0|dks0||kr4|}tj|||S)Nrr)rrqrrs)rrtrzZ remainingrrrrss  z_PartialFile._readcCst|dr|`dS)Nr)rEr)rrrrrLs z_PartialFile.close)NN)r)rwrxryrrrarsrLrrrrrs    rTc4Csd}yZtrpytj|tjtjBWnJtk rn}z.|jtjtjtjfkr\t d|j nWYdd}~XnX|r^yt |j d}|j Wn:tk r}z|jtjtjfkrdSWYdd}~XnXy`yt j|j |j dd}Wn2ttfk rt j|j |j dd}YnXt j|j Wn0tk r\t j|j t d|j YnXWn8tr|tj|tj|rt j|j dYnXdS)NFzlockf: lock unavailable: %sz.lockTzdot lock unavailable: %s)fcntllockfZLOCK_EXZLOCK_NBrrZEAGAINrrrrrrLrrrrrr#rr$LOCK_UN)rrZ dotlock_donerZpre_lockrrrr sH    rcCs8trtj|tjtjj|jdr4tj|jddS)Nz.lock)rrrrrrrr$)rrrrr4src Cs8tj|tjtjBtjBd}z t|dStj|XdS)Nizrb+)rrrrO_RDWRrL)rfdrrrr;s rcCs$td|ttjtjtjfS)Nz %s.%s.%s.%s)rrrrrrr)rrrrrCsrcCs$|jttdr tj|jdS)Nfsync)rIrErrfileno)rrrrrIs rcCst||jdS)N)rrL)rrrrrOsrc@s eZdZdS)rN)rwrxryrrrrrUsc@s eZdZdS)rN)rwrxryrrrrrXsc@s eZdZdS)rN)rwrxryrrrrr[sc@s eZdZdS)rN)rwrxryrrrrr^sc@s eZdZdS)rN)rwrxryrrrrras)T)/rrrbrrr@rjr1Z email.messageZemail.generatorr\r-r ImportError__all__rcrMrrrrrrrrr!rr rr r r r rrrrrrrr Exceptionrrrrrrrrr sn     h8DB4-3z%mqH_c' *