B YI~d>3ã@sNddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl Z ddl Z y ddl Z Wne k r„dZ YnXdddddddd d d d d dddddgZej d¡ZGdd„dƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„dejjƒZGdd „d eƒZGd d!„d!eƒZGd"d „d eƒZGd#d „d eƒZGd$d „d eƒZGd%d „d eƒZ Gd&d'„d'ƒZ!Gd(d)„d)e!ƒZ"d„Z d?Z!dFd@dA„Z"dS)GrNTcCs tj tj |¡¡|_||_dS)N)ÚosÚpathÚabspathÚ expanduserÚ_pathÚ_factory)ÚselfrÚfactoryÚcreate©rú,/opt/alt/python37/lib64/python3.7/mailbox.pyÚ__init__$szMailbox.__init__cCs tdƒ‚dS)Nz&Method must be implemented by subclass)ÚNotImplementedError)rÚmessagerrrÚadd)sz Mailbox.addcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rÚkeyrrrÚremove-szMailbox.removecCs| |¡dS)N)r$)rr#rrrÚ __delitem__1szMailbox.__delitem__cCs(y| |¡Wntk r"YnXdS)N)r$ÚKeyError)rr#rrrÚdiscard4szMailbox.discardcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rr#r!rrrÚ __setitem__;szMailbox.__setitem__cCs$y | |¡Stk r|SXdS)N)Ú __getitem__r&)rr#ÚdefaultrrrÚget?s z Mailbox.getc Cs6|js| |¡St | |¡¡ }| |¡SQRXdS)N)rÚ get_messageÚ contextlibÚclosingÚget_file)rr#Úfilerrrr)Fs zMailbox.__getitem__cCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rr#rrrr,NszMailbox.get_messagecCst | |¡¡ ¡S)N)ÚemailÚmessage_from_bytesÚ get_bytesÚ as_string)rr#rrrÚ get_stringRszMailbox.get_stringcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rr#rrrr3YszMailbox.get_bytescCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rr#rrrr/]szMailbox.get_filecCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚiterkeysaszMailbox.iterkeyscCs t| ¡ƒS)N)Úlistr6)rrrrÚkeysesz Mailbox.keysc cs@x:| ¡D].}y ||}Wntk r0w YnX|Vq WdS)N)r6r&)rr#ÚvaluerrrÚ itervaluesis  zMailbox.itervaluescCs| ¡S)N)r:)rrrrÚ__iter__rszMailbox.__iter__cCs t| ¡ƒS)N)r7r:)rrrrÚvaluesuszMailbox.valuesc csDx>| ¡D]2}y ||}Wntk r0w YnX||fVq WdS)N)r6r&)rr#r9rrrÚ iteritemsys  zMailbox.iteritemscCs t| ¡ƒS)N)r7r=)rrrrÚitems‚sz Mailbox.itemscCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rr#rrrÚ __contains__†szMailbox.__contains__cCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚ__len__ŠszMailbox.__len__cCs x| ¡D]}| |¡q WdS)N)r8r')rr#rrrÚclearŽsz Mailbox.clearcCs0y ||}Wntk r |SX| |¡|S)N)r&r')rr#r*ÚresultrrrÚpop“s   z Mailbox.popcCs*x$| ¡D]}|| |¡fSWtdƒ‚dS)NzNo messages in mailbox)r6rCr&)rr#rrrÚpopitemœszMailbox.popitemc Csxt|dƒr| ¡}nt|dƒr(| ¡}n|}d}x6|D].\}}y |||<Wq6tk rbd}Yq6Xq6W|rttdƒ‚dS)Nr=r>FTzNo message with key(s))Úhasattrr=r>r&)rÚargÚsourceZbad_keyr#r!rrrÚupdate£s     zMailbox.updatecCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚflush´sz Mailbox.flushcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚlock¸sz Mailbox.lockcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚunlock¼szMailbox.unlockcCs tdƒ‚dS)Nz&Method must be implemented by subclass)r )rrrrÚcloseÀsz Mailbox.closecCs,y | d¡Stk r&tdƒ‚YnXdS)Nrz?String input must be ASCII-only; use bytes or a Message instead)ÚencodeÚ UnicodeErrorÚ ValueError)rr!rrrÚ_string_to_bytesÄs zMailbox._string_to_bytesFc Csþt|tjjƒrvt ¡}tj ||d¡}| |¡|  d¡|  ¡}|  dt ¡}|  |¡|jrr| t ¡sr|  t ¡n„t|tttjfƒrt|tjƒr¬t dtd¡| ¡}t|tƒrÀ| |¡}|rÐ|  dd¡}|  dt ¡}|  |¡|jrú| t ¡sú|  t ¡nôt|dƒrêt|dƒr2t d td¡|j}d}xŒ| ¡}| d ¡r^|dd …d}n| d ¡rz|dd …d}|s‚P|r¤| d¡r¤d|dd…}|  dt ¡}|  |¡|}q8W|jrú|rú| t ¡sú|  t ¡ntdt|ƒƒ‚dS)Nró z8Use of StringIO input is deprecated, use BytesIO insteadés From s >From ÚreadÚbufferzDUse of text mode files is deprecated, use a binary mode file insteads éþÿÿÿó éÿÿÿÿsFrom s>From ézInvalid message type: %s)Ú isinstancer1r!rÚioÚBytesIOÚ generatorÚBytesGeneratorÚflattenÚseekrSÚreplaceÚlinesepÚwriteÚ_append_newlineÚendswithÚstrÚbytesÚStringIOÚwarningsÚwarnÚDeprecationWarningÚgetvaluerPrErTÚreadlineÚ startswithÚ TypeErrorÚtype) rr!ÚtargetZ mangle_from_rTÚgenÚdataZlastlineÚlinerrrÚ _dump_messageÑsZ                   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@rArCrDrHrIrJrKrLrPrcrtrrrrr!s@       c@sÖeZdZdZd5dd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zd$d%„Zd&d'„Zd(d)„Zd*d+„Zd,Zd-d.„Zd/d0„Zd1d2„Zd3d4„ZdS)6rú:NTcCs°t ||||¡tj |jd¡tj |jd¡tj |jd¡dœ|_tj |j¡sŽ|r„t |jd¡x*|j  ¡D]}t |d¡qnWn t |jƒ‚i|_ dddœ|_ d|_ d|_dS) NÚtmpÚnewÚcur)ryrzr{iÀr)r{rzgš™™™™™¹?)rrrrÚjoinrÚ_pathsÚexistsÚmkdirr<rÚ_tocÚ _toc_mtimesÚ _last_readÚ _skewfactor)rÚdirnamerrrrrrr s  zMaildir.__init__c Cs~| ¡}y| ||¡Wn*tk rB| ¡t |j¡‚YnXt|ƒt|t ƒr||  ¡}|j |  ¡}||j kr„d}nd}d}tj  |j¡ |j ¡d}tj  |j|||¡}t|t ƒrÞt |jtj  |j¡| ¡f¡yLyt |j|¡Wn(ttfk rt |j|¡YnXt |j¡WnNtk rx}z.t |j¡|jtjkrftd|ƒ‚n‚Wdd}~XYnX|S)NÚrzrz$Name clash with existing message: %s)Ú _create_tmprtÚ BaseExceptionrLrr$ÚnameÚ _sync_closerYr Ú get_subdirÚcolonÚget_inforÚbasenameÚsplitr|rÚutimeÚgetatimeÚget_dateÚlinkÚAttributeErrorÚPermissionErrorÚrenameÚOSErrorÚerrnoZEEXISTr)rr!Ztmp_fileÚsubdirÚsuffixÚuniqÚdestÚerrrr"!sB      z Maildir.addcCs t tj |j| |¡¡¡dS)N)rr$rr|rÚ_lookup)rr#rrrr$KszMaildir.removec Cs,y| |¡Wnttfk r&YnXdS)N)r$r&ÚFileNotFoundError)rr#rrrr'OszMaildir.discardc CsÊ| |¡}| |¡}| |¡}t|tƒr.|}n|}tj |¡}|j|kr`|j| |j¡d}nd}|  |¡tj  |j |¡} tj  |j |||¡} t|tƒrºt  | tj  | ¡| ¡f¡t | | ¡dS)NrWr…)rr"rYr rrr„r‹rŽr'r|rrrr‘r•) rr#r!Z old_subpathZtemp_keyZ temp_subpathZdominant_subpathr˜r™Ztmp_pathÚnew_pathrrrr(Ws"        zMaildir.__setitem__c Cs¢| |¡}ttj |j|¡dƒ }|jr4| |¡}nt|ƒ}WdQRXtj |¡\}}|  |¡|j |kr€|  | |j ¡d¡|  tj  tj |j|¡¡¡|S)NÚrbrW)rÚopenrrr|rrr rŽÚ set_subdirr‹Úset_infoÚset_dateÚgetmtime)rr#ZsubpathÚfÚmsgr˜rˆrrrr,rs    zMaildir.get_messagec Cs8ttj |j| |¡¡dƒ}| ¡ td¡SQRXdS)Nr rQ) r¡rrr|rrrSr`ra)rr#r¦rrrr3szMaildir.get_bytescCs$ttj |j| |¡¡dƒ}t|ƒS)Nr )r¡rrr|rrÚ _ProxyFile)rr#r¦rrrr/†szMaildir.get_filec csH| ¡x:|jD]0}y| |¡Wntk r8wYnX|VqWdS)N)Ú_refreshr€rr&)rr#rrrr6‹s zMaildir.iterkeyscCs| ¡||jkS)N)r©r€)rr#rrrr?•szMaildir.__contains__cCs| ¡t|jƒS)N)r©Úlenr€)rrrrr@šszMaildir.__len__cCsdS)Nr)rrrrrIŸsz Maildir.flushcCsdS)Nr)rrrrrJ¥sz Maildir.lockcCsdS)Nr)rrrrrK©szMaildir.unlockcCsdS)Nr)rrrrrL­sz Maildir.closecCs`g}xVt |j¡D]F}t|ƒdkr|ddkrtj tj |j|¡¡r| |dd…¡qW|S)NérÚ.)rÚlistdirrrªrÚisdirr|Úappend)rrBÚentryrrrÚ list_folders±s zMaildir.list_folderscCs ttj |jd|¡|jddS)Nr¬F)rr)rrrr|rr)rÚfolderrrrÚ get_folderºszMaildir.get_foldercCs\tj |jd|¡}t||jd}tj |d¡}tj |¡sXt t |tj tj Bd¡¡|S)Nr¬)rZ maildirfolderi¶) rrr|rrrr~rLr¡ÚO_CREATÚO_WRONLY)rr²rrBZmaildirfolder_pathrrrÚ add_folderÀs zMaildir.add_foldercCs,tj |jd|¡}xTt tj |d¡¡t tj |d¡¡D](}t|ƒdksZ|ddkr>td|ƒ‚q>WxPt |¡D]B}|dkrv|dkrv|dkrvtj tj ||¡¡rvtd||fƒ‚qvWx`tj|d d D]N\}}}x |D]}t  tj ||¡¡qÜWx |D]}t  tj ||¡¡qþWqÌWt  |¡dS) Nr¬rzr{r«rzFolder contains message(s): %sryz%Folder contains subdirectory '%s': %sF)Útopdown) rrr|rr­rªrr®Úwalkr$Úrmdir)rr²rr°ÚrootÚdirsÚfilesrrrÚ remove_folderÊs   zMaildir.remove_foldercCs\t ¡}xNt tj |jd¡¡D]4}tj |jd|¡}|tj |¡dkr t |¡q WdS)Nryi@ú)Útimerr­rr|rrr$)rÚnowr°rrrrÚcleanÝs z Maildir.cleanr«c CsÒt ¡}t ¡}d|kr$| dd¡}d|kr8| dd¡}dt|ƒt|ddƒt ¡tj|f}tj   |j d|¡}yt  |¡Wn@t k rÀtjd7_yt|ƒStk rºYnXYnXtd |ƒ‚dS) Nú/z\057rxz\072z%s.M%sP%sQ%s.%sr«g€„.Aryz&Name clash prevented file creation: %s)r¾ÚsocketÚ gethostnamer`ÚintrÚgetpidrÚ_countrr|rÚstatržÚ_create_carefullyÚFileExistsErrorr)rr¿Zhostnameršrrrrr†çs&    zMaildir._create_tmpcCsät ¡|jd|jkrbd}x<|jD]2}tj |j|¡}||j|krLd}||j|<q$W|sbdSi|_xl|jD]b}|j|}xRt  |¡D]D}tj  ||¡}tj  |¡rªqŠ|  |j ¡d}tj  ||¡|j|<qŠWqpWt ¡|_dS)NéFTr)r¾r‚rƒrrrr¥r}r€r­r|r®rŽr‹)rZrefreshr˜Úmtimerr°Úpršrrrr©ÿs&    zMaildir._refreshcCs|y,tj tj |j|j|¡¡r*|j|SWntk r@YnX| ¡y |j|Stk rvtd|ƒd‚YnXdS)NzNo message with key: %s)rrr~r|rr€r&r©)rr#rrrr#s zMaildir._lookupcCsVt|dƒs| ¡|_xs   @ rÐc@s>eZdZdZdd„Zddd„Zddd„Zdd d „Zd d „Zd S)Ú _mboxMMDFTcCsp| |¡\}}|j |¡|j ¡ td¡}|j ||j ¡¡}| | td¡¡}|  |dd…  d¡¡|S)NórQrXr) rrÔr_rlr`rarSrßÚ_message_factoryÚset_fromÚdecode)rr#rèréÚ from_lineÚstringr§rrrr,s z_mboxMMDF.get_messageFcCst | |¡¡j|dS)N)Úunixfrom)r1r2r3r4)rr#Úfrom_rrrr5sz_mboxMMDF.get_stringcCsJ| |¡\}}|j |¡|s(|j ¡|j ||j ¡¡}| td¡S)NrQ)rrÔr_rlrSrßr`ra)rr#rörèrérôrrrr3s   z_mboxMMDF.get_bytescCs<| |¡\}}|j |¡|s(|j ¡t|j|j ¡|ƒS)N)rrÔr_rlÚ _PartialFilerß)rr#rörèrérrrr/s   z_mboxMMDF.get_filecCs d}t|tƒr| |¡}t|tƒrf| d¡rf| d¡}|dkr\|d|…}||dd…}q°|}d}nJt|tƒrˆ| ¡ d¡}d|}n(t|t j j ƒr°|  ¡}|dk r°| d¡}|dkrÎdt  t  ¡¡ ¡}|j ¡}|j |t¡| ||j|j¡|j ¡}||fS)NsFrom rQrWr«rïrsFrom MAILER-DAEMON )rYrerPrfrmÚfindÚ_mboxMMDFMessageÚget_fromrMr1r!rÚ get_unixfromr¾ÚasctimeÚgmtimerÔrßrbrartÚ _mangle_from_)rr!róÚnewlineZauthorrèrérrrrì&s0         z_mboxMMDF._install_messageN)F)F)F) rurvrwrþr,r5r3r/rìrrrrrîs   rîc@s.eZdZdZdZd dd„Zdd„Zdd„ZdS) rTNcCst|_t ||||¡dS)N)r rðrîr)rrrrrrrrLsz mbox.__init__cCs| t¡dS)N)rbra)rr¦rrrråQszmbox._post_message_hookcCsìgg}}d}|j d¡x |j ¡}|j ¡}| d¡r|t|ƒt|ƒkrl|rb| |ttƒ¡n | |¡| |¡d}q|s¦|r˜| |ttƒ¡n | |¡Pq|tkr´d}qd}qWtt t ||ƒƒƒ|_ t|j ƒ|_ |j ¡|_ dS)NFrsFrom T)rÔr_rßrlrmrªr¯raÚdictÚ enumerateÚzipr€rÕrÙ)rÚstartsÚstopsZlast_was_emptyÚline_posrsrrrrëUs0         zmbox._generate_toc)NT)rurvrwrþrcrrårërrrrrCs  c@s.eZdZd dd„Zdd„Zdd„Zd d „ZdS) rNTcCst|_t ||||¡dS)N)r rðrîr)rrrrrrrrzsz MMDF.__init__cCs| dt¡dS)Ns)rbra)rr¦rrrrãszMMDF._pre_message_hookcCs| tdt¡dS)Ns)rbra)rr¦rrrråƒszMMDF._post_message_hookcCsægg}}|j d¡d}xŒ|}|j ¡}|j ¡}| dt¡rž| |¡xV|}|j ¡}|j ¡}|dtkrˆ| |ttƒ¡PqN|sN| |¡PqNWq|sPqWtt t ||ƒƒƒ|_ t|j ƒ|_ |j dd¡|j ¡|_ dS)NrsrÊ)rÔr_rlrßrmrar¯rªrrrr€rÕrÙ)rrrÚnext_posrrsrrrrë‡s2          zMMDF._generate_toc)NT)rurvrwrrãrårërrrrrws c@s¾eZdZd/dd„Zdd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„ZdS)0rNTcCstt ||||¡tj |j¡sj|r`t |jd¡t t tj  |jd¡tj tj Btj Bd¡¡n t |jƒ‚d|_dS)NiÀz .mh_sequencesi€F)rrrrr~rrrLr¡r|r´ÚO_EXCLrµrrØ)rrrrrrrr§s z MH.__init__cCsä| ¡}t|ƒdkrd}n t|ƒd}tj |jt|ƒ¡}t|ƒ}d}zŠ|j rVt |ƒzfy|  ||¡Wn:t k r¢|j r†t |ƒt|ƒd}t |¡‚YnXt|tƒrº| ||¡Wd|j rÌt |ƒXWd|sÞt|ƒX|S)Nrr«FT)r8rªÚmaxrrr|rrerÈrØrÛrtr‡rÜr‰r$rYr Ú_dump_sequences)rr!r8Znew_keyrŸr¦Úclosedrrrr"³s6     zMH.addc Csxtj |jt|ƒ¡}yt|dƒ}Wn>tk r`}z |jtjkrNt d|ƒ‚n‚Wdd}~XYnX|  ¡t  |¡dS)Nzrb+zNo message with key: %s) rrr|rrer¡r–r—rÑr&rLr$)rr#rr¦rœrrrr$Õs z MH.removec CsÖtj |jt|ƒ¡}yt|dƒ}Wn>tk r`}z |jtjkrNt d|ƒ‚n‚Wdd}~XYnXzd|j rrt |ƒz@t  t |tj tjB¡¡| ||¡t|tƒr°| ||¡Wd|j rÂt|ƒXWdt|ƒXdS)Nzrb+zNo message with key: %s)rrr|rrer¡r–r—rÑr&rØrÛrLrµÚO_TRUNCrtrYr r rÜr‰)rr#r!rr¦rœrrrr(ãs$   zMH.__setitem__c Csìy@|jr$ttj |jt|ƒ¡dƒ}nttj |jt|ƒ¡dƒ}Wn>tk r~}z |jtj krlt d|ƒ‚n‚Wdd}~XYnX|2|jr”t |ƒz t |ƒ}Wd|jr°t |ƒXWdQRXx*| ¡ ¡D]\}}||krÊ| |¡qÊW|S)Nzrb+r zNo message with key: %s)rØr¡rrr|rrer–r—rÑr&rÛr rÜÚ get_sequencesr>Ú add_sequence)rr#r¦rœr§rˆÚkey_listrrrr,ûs&  zMH.get_messagec CsÄy@|jr$ttj |jt|ƒ¡dƒ}nttj |jt|ƒ¡dƒ}Wn>tk r~}z |jtj krlt d|ƒ‚n‚Wdd}~XYnX|6|jr”t |ƒz|  ¡  td¡S|jr´t|ƒXWdQRXdS)Nzrb+r zNo message with key: %srQ)rØr¡rrr|rrer–r—rÑr&rÛrSr`rarÜ)rr#r¦rœrrrr3s z MH.get_bytesc Csfyttj |jt|ƒ¡dƒ}Wn>tk r\}z |jtjkrJt d|ƒ‚n‚Wdd}~XYnXt |ƒS)Nr zNo message with key: %s) r¡rrr|rrer–r—rÑr&r¨)rr#r¦rœrrrr/)s z MH.get_filecCsttdd„t |j¡DƒƒƒS)Ncss|]}| ¡rt|ƒVqdS)N)ÚisdigitrÄ)Ú.0r°rrrú 6szMH.iterkeys..)Úiterrârr­r)rrrrr64sz MH.iterkeyscCstj tj |jt|ƒ¡¡S)N)rrr~r|rre)rr#rrrr?9szMH.__contains__cCstt| ¡ƒƒS)N)rªr7r6)rrrrr@=sz MH.__len__cCs2|js.ttj |jd¡dƒ|_t|jƒd|_dS)Nz .mh_sequenceszrb+T)rØr¡rrr|rrÔrÛ)rrrrrJAs zMH.lockcCs(|jr$t|jƒt|jƒ|`d|_dS)NF)rØrÜrÔr‰)rrrrrKHs   z MH.unlockcCsdS)Nr)rrrrrIPszMH.flushcCs|jr| ¡dS)N)rØrK)rrrrrLTszMH.closecCs@g}x6t |j¡D]&}tj tj |j|¡¡r| |¡qW|S)N)rr­rrr®r|r¯)rrBr°rrrr±Ys zMH.list_folderscCsttj |j|¡|jddS)NF)rr)rrrr|rr)rr²rrrr³asz MH.get_foldercCsttj |j|¡|jdS)N)r)rrrr|rr)rr²rrrr¶fsz MH.add_foldercCs`tj |j|¡}t |¡}|dgkr:t tj |d¡¡n|gkrDntd|jƒ‚t |¡dS)Nz .mh_sequenceszFolder not empty: %s)rrr|rr­r$rr¹)rr²rÚentriesrrrr½ks  zMH.remove_folderc s i}ttj |jd¡dddä}t| ¡ƒ‰xÐ|D]È}yž| d¡\}}tƒ}xT| ¡D]H}| ¡rr|  t |ƒ¡qVdd„| d¡Dƒ\}} |  t || d ƒ¡qVW‡fd d „t |ƒDƒ||<t||ƒd krÒ||=Wq2tk røtd | ¡ƒ‚Yq2Xq2WWdQRX|S)Nz .mh_sequencesÚrÚASCII)Úencodingrxcss|]}t|ƒVqdS)N)rÄ)rÚxrrrr„sz#MH.get_sequences..ú-r«csg|]}|ˆkr|‘qSrr)rr#)Úall_keysrrú †sz$MH.get_sequences..rz"Invalid sequence specification: %s)r¡rrr|rÚsetr8rŽrr"rÄrHÚrangerârªrOrÚrstrip) rÚresultsr¦rsrˆÚcontentsr8Úspecrèrér)rrr ws&    zMH.get_sequencescCs ttj |jd¡ddd}zàt t |jtjtjB¡¡x¾|  ¡D]²\}}t |ƒdkrXqB|  |d¡d}d}xbt t |ƒƒD]R}|d|kr |sÊd }|  d ¡n*|r¼d}|  d ||f¡n|  d |¡|}q|W|rê|  t|ƒd ¡qB|  d ¡qBWWdt|ƒXdS)Nz .mh_sequenceszr+r)rrrxFr«Trz%s %sz %sÚ )r¡rrr|rrLrˆrµr r>rªrbrârrer‰)rÚ sequencesr¦rˆr8ÚprevZ completingr#rrrÚ set_sequencess.   zMH.set_sequencesc CsL| ¡}d}g}xÎ| ¡D]Â}|d|krÔ| ||df¡y4t tj |jt|ƒ¡tj |jt|dƒ¡¡WnHt t fk r¸t  tj |jt|ƒ¡tj |jt|dƒ¡¡YnXt  tj |jt|ƒ¡¡|d7}qW|d|_ t|ƒdkrúdSxB| ¡D]6\}}x*|D]"\}}||kr||| |¡<qWqW| |¡dS)Nrr«)r r6r¯rr’rr|rrer“r”r•ÚunlinkrÕrªr>Úindexr$) rr"r#Zchangesr#rˆrÚoldrzrrrÚpack¬s,      zMH.packcCs|| ¡}| ¡}x<| ¡D]0\}}||kr6| |¡q||kr|| |¡=qWx|D]}||krT|g||<qTW| |¡dS)N)r r>r¯r&r$)rr!r#Zpending_sequencesZ all_sequencesrˆrÚsequencerrrr Æs  zMH._dump_sequences)NT)rurvrwrr"r$r(r,r3r/r6r?r@rJrKrIrLr±r³r¶r½r r$r(r rrrrr¤s, "  c@sŒeZdZedddddddhƒZd$d d „Zd d „Zdd„Zdd„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zd d!„Zd"d#„ZdS)%rÚunseenÚdeletedZfiledÚansweredÚ forwardedZeditedÚresentNTcCst ||||¡i|_dS)N)rÐrÚ_labels)rrrrrrrrÛszBabyl.__init__cCs(t ||¡}t|tƒr$| ¡|j|<|S)N)rÐr"rYr Ú get_labelsr/)rr!r#rrrr"às  z Babyl.addcCs"t ||¡||jkr|j|=dS)N)rÐr$r/)rr#rrrr$çs  z Babyl.removecCs*t |||¡t|tƒr&| ¡|j|<dS)N)rÐr(rYr r0r/)rr#r!rrrr(ís zBabyl.__setitem__c Csú| |¡\}}|j |¡|j ¡t ¡}x2|j ¡}|dtksH|sJP| | td¡¡q.Wt ¡}x.|j ¡}|tks€|s‚P| | td¡¡qjW||j  ¡}|j  |¡}| td¡}t |  ¡|ƒ} |   |  ¡¡||jkrö|  |j|¡| S)Ns *** EOOH ***rQ)rrÔr_rlrZr[rarbr`rßrSr rkÚ set_visibler/Ú set_labels) rr#rèréÚoriginal_headersrsZvisible_headersÚnZbodyr§rrrr,ós.        zBabyl.get_messagec Cs´| |¡\}}|j |¡|j ¡t ¡}x2|j ¡}|dtksH|sJP| | td¡¡q.Wx|j ¡}|tksx|sbPqbW|  ¡}||j  ¡}|j  |¡}| td¡}||S)Ns *** EOOH ***rQ) rrÔr_rlrZr[rarbr`rkrßrS) rr#rèrér3rsZheadersr4rrrrrr3s$       zBabyl.get_bytescCst | |¡ dt¡¡S)NrQ)rZr[r3r`ra)rr#rrrr/%szBabyl.get_filecCs@| ¡tƒ}x|j ¡D]}| |¡qW| |j¡t|ƒS)N)rrr/r<rHÚdifference_updateÚ_special_labelsr7)rÚlabelsZ label_listrrrr0)s  zBabyl.get_labelscCs>gg}}|j d¡d}g}xÒ|}|j ¡}|j ¡}|dtkržt|ƒt|ƒkrf| |ttƒ¡| |¡dd„|j ¡dd… d¡Dƒ}| |¡q |dks²|dtkrÖt|ƒt|ƒkrî| |ttƒ¡q |s | |ttƒ¡Pq Wtt t ||ƒƒƒ|_ tt |ƒƒ|_ t|j ƒ|_ |j dd¡|j ¡|_dS) Nrs cSsg|]}| ¡r| ¡‘qSr)Ústrip)rÚlabelrrrr@sz'Babyl._generate_toc..r«ó,órÊ)rÔr_rlrßrarªr¯rŽrrrr€r/rÕrÙ)rrrrZ label_listsrrsr7rrrrë2s4        zBabyl._generate_toccCsVdt}|dt7}| ¡}dd„|Dƒ}|dd |¡t7}|d7}| |¡dS)NsBABYL OPTIONS:s Version: 5css|]}| ¡VqdS)N)rM)rr9rrrrUsz*Babyl._pre_mailbox_hook..sLabels:r:r;)rar0r|rb)rr¦Zbabylr7rrrráPs zBabyl._pre_mailbox_hookcCs| dt¡dS)Nó )rbra)rr¦rrrrãZszBabyl._pre_message_hookcCs| td¡dS)Nr;)rbra)rr¦rrrrå^szBabyl._post_message_hookcCs”|j ¡}t|tƒr¼g}g}x0| ¡D]$}||jkr@| |¡q&| |¡q&W|j d¡x |D]}|j d| ¡¡q`W|j d¡x$|D]}|j d| ¡d¡qŽW|j t ¡n|j dt ¡t|t j j ƒr*t  ¡}t j |dd¡}| |¡| d¡x4| ¡}|j | d t ¡¡|d ks6|s Pq W|j d t ¡t|tƒr¸t  ¡} t j | dd¡} |  | ¡¡xv|  ¡}|j | d t ¡¡|d ks®|s‚Pq‚Wn@| d¡x4| ¡}|j | d t ¡¡|d ksð|sÄPqÄWx,| d ¡} | s P|j |  d t ¡¡qúWnXt|ttt jfƒr&t|t jƒrbt d td ¡| ¡}t|tƒrx| |¡}| d¡d} | ddkrú|j |d| … d t ¡¡|j d t ¡|j |d| … d t ¡¡|j || d… d t ¡¡n(|j d t t ¡|j | d t ¡¡n\t |dƒrrt |dƒrRt dtd ¡|j!}| ¡} d}x”| ¡}| "d¡r†|dd…d }n| "d¡r¢|dd…d }|j | d t ¡¡|d ksÆ|s`|rìd}|j d t ¡| | ¡nPq`WxŒ| ¡}|sP| "d¡r$|dd…t }n:| "d¡rB|dd…t }n| "d ¡r^|dd…t }|j |¡qöWnt#dt$|ƒƒ‚|j ¡}||fS)Nó1s, s,,ó r:s1,,FrrQs *** EOOH ***iz8Use of StringIO input is deprecated, use BytesIO insteadrRs rÊrWrlrTzDUse of text mode files is deprecated, use a binary mode file insteadTs rUrVzInvalid message type: %s)%rÔrßrYr r0r6r¯rbrMrar1r!rrZr[r\r]r^r_rlr`Ú get_visiblerSrfrergrhrirjrkrPrørErTrdrnro)rr!rèZspecial_labelsr7r9Z orig_bufferZorig_generatorrsZ vis_bufferZ vis_generatorrTZ body_startZ original_posZ first_passrérrrrìbsÀ                         zBabyl._install_message)NT)rurvrwÚ frozensetr6rr"r$r(r,r3r/r0rërárãrårìrrrrrÕs     c@s&eZdZddd„Zdd„Zdd„ZdS) rNcCsÒt|tjjƒr4| t |¡¡t|tƒrÎ| |¡nšt|tƒrP| t  |¡¡n~t|t ƒrl| t  |¡¡nbt|t j ƒrŠ| t |¡¡nDt|dƒr¦| t |¡¡n(|dkr¾tjj |¡ntdt|ƒƒ‚dS)NrSzInvalid message type: %s)rYr1r!rÚ_become_messageÚcopyZdeepcopyÚ _explain_torfr2reZmessage_from_stringrZÚ TextIOWrapperZmessage_from_filerEZmessage_from_binary_filerrnro)rr!rrrrÑs      zMessage.__init__cCs8t|dgƒ}x&|jD]}||kr|j||j|<qWdS)NÚ_type_specific_attributes)ÚgetattrÚ__dict__)rr!Z type_specificrˆrrrrAäs  zMessage._become_messagecCst|tƒrdStdƒ‚dS)Nz Cannot convert to specified type)rYrrn)rr!rrrrCës zMessage._explain_to)N)rurvrwrrArCrrrrrÎs c@sxeZdZdddgZddd„Zdd„Zd d „Zd d „Zd d„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)r Ú_subdirÚ_infoÚ_dateNcCs&d|_d|_t ¡|_t ||¡dS)Nrzr…)rHrIr¾rJrr)rr!rrrrøs zMaildirMessage.__init__cCs|jS)N)rH)rrrrrŠÿszMaildirMessage.get_subdircCs(|dks|dkr||_n td|ƒ‚dS)Nrzr{z!subdir must be 'new' or 'cur': %s)rHrO)rr˜rrrr¢szMaildirMessage.set_subdircCs"|j d¡r|jdd…SdSdS)Nz2,rÊr…)rIrm)rrrrÚ get_flags s zMaildirMessage.get_flagscCsdd t|ƒ¡|_dS)Nz2,r…)r|rârI)rÚflagsrrrÚ set_flagsszMaildirMessage.set_flagscCs$| d t| ¡ƒt|ƒB¡¡dS)Nr…)rMr|rrK)rÚflagrrrÚadd_flagszMaildirMessage.add_flagcCs,| ¡r(| d t| ¡ƒt|ƒ¡¡dS)Nr…)rKrMr|r)rrNrrrÚ remove_flagszMaildirMessage.remove_flagcCs|jS)N)rJ)rrrrr‘szMaildirMessage.get_datecCs6yt|ƒ|_Wn"tk r0td|ƒd‚YnXdS)Nzcan't convert to float: %s)ÚfloatrJrOrn)rZdaterrrr¤"szMaildirMessage.set_datecCs|jS)N)rI)rrrrrŒ)szMaildirMessage.get_infocCs&t|tƒr||_ntdt|ƒƒ‚dS)Nzinfo must be a string: %s)rYrerIrnro)rÚinforrrr£-s zMaildirMessage.set_infocCs¤t|tƒr8| | ¡¡| | ¡¡| | ¡¡nht|tƒrÄt | ¡ƒ}d|kr`|  d¡| ¡dkrv|  d¡d|krˆ|  d¡d|krš|  d¡d|kr¬|  d¡|  d t   | ¡¡¡nÜt|tƒrt | ¡ƒ}d|krî| d ¡d|kr| d ¡d|kr | d ¡nˆt|tƒr‚t | ¡ƒ}d|krD| d ¡d|krX| d ¡d|krl| d¡d|kr | d¡nt|tƒrntdt|ƒƒ‚dS)NÚSÚRr{ÚOÚTÚDÚFÚAz MAILER-DAEMONr*ÚrepliedÚflaggedr+r,ÚPr-z$Cannot convert to specified type: %s)rYr rMrKr¢rŠr¤r‘rùrrOrñr¾rýr r r Ú add_labelrrnro)rr!rLrrrrC4sN                           zMaildirMessage._explain_to)N)rurvrwrErrŠr¢rKrMrOrPr‘r¤rŒr£rCrrrrr ós  c@sVeZdZdgZddd„Zdd„Zddd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dS)rùÚ_fromNcCsV| dd¡t|tjjƒrF| ¡}|dk rF| d¡rF| |dd…¡t ||¡dS)Nz MAILER-DAEMONTzFrom rX)rñrYr1r!rrûrmr)rr!rõrrrres  z_mboxMMDFMessage.__init__cCs|jS)N)r^)rrrrrúnsz_mboxMMDFMessage.get_fromcCs4|dk r*|dkrt ¡}|dt |¡7}||_dS)NTú )r¾rýrür^)rröZtime_rrrrñrs z_mboxMMDFMessage.set_fromcCs| dd¡| dd¡S)NÚStatusr…zX-Status)r+)rrrrrKzsz_mboxMMDFMessage.get_flagscCsÚt|ƒ}d\}}x&dD]}||kr||7}| |¡qWx&dD]}||kr>||7}| |¡q>W|d t|ƒ¡7}y| d|¡Wn tk r¢| d|¡YnXy| d|¡Wn tk rÔ| d|¡YnXdS)N)r…r…)rTrU)rWrXrYr…r`zX-Status)rr$r|râÚreplace_headerr&Z add_header)rrLZ status_flagsZ xstatus_flagsrNrrrrM~s&  z_mboxMMDFMessage.set_flagscCs$| d t| ¡ƒt|ƒB¡¡dS)Nr…)rMr|rrK)rrNrrrrO”sz_mboxMMDFMessage.add_flagcCs4d|ksd|kr0| d t| ¡ƒt|ƒ¡¡dS)Nr`zX-Statusr…)rMr|rrK)rrNrrrrP˜sz_mboxMMDFMessage.remove_flagc CsÞt|tƒrÐt| ¡ƒ}d|kr(| d¡d|kr:| d¡d|krL| d¡d|kr^| d¡d|krp| d¡|d =|d =d  | ¡ ¡d d…¡}y|  t   t   |d ¡¡¡Wnttfk rÊYnXn t|tƒrø| | ¡¡| | ¡¡nât|tƒrZt| ¡ƒ}d|kr$| d¡d|kr8| d¡d|krL| d¡|d =|d =n€t|tƒr¼t| ¡ƒ}d|kr†| d¡d|krš| d¡d|kr®| d¡|d =|d =nt|tƒrÊntdt|ƒƒ‚dS)NrUr{rXrYrTrSrWrVÚstatuszx-statusr_éûÿÿÿz%a %b %d %H:%M:%S %Yr*rZr[r+r,z$Cannot convert to specified type: %s)rYr rrKr¢rOr|rúrŽr¤ÚcalendarZtimegmr¾ZstrptimerOÚ OverflowErrorrùrMrñr r r r]rrnro)rr!rLZ maybe_daterrrrCs^                          z_mboxMMDFMessage._explain_to)N)N) rurvrwrErrúrñrKrMrOrPrCrrrrrù`s  rùc@s eZdZdS)r N)rurvrwrrrrr Ñsc@sDeZdZdgZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dS)r Ú _sequencesNcCsg|_t ||¡dS)N)rfrr)rr!rrrrÚszMHMessage.__init__cCs|jdd…S)N)rf)rrrrr ßszMHMessage.get_sequencescCst|ƒ|_dS)N)r7rf)rr"rrrr$ãszMHMessage.set_sequencescCs6t|tƒr"||jkr2|j |¡ntdt|ƒƒ‚dS)Nzsequence type must be str: %s)rYrerfr¯rnro)rr)rrrr çs  zMHMessage.add_sequencecCs*y|j |¡Wntk r$YnXdS)N)rfr$rO)rr)rrrÚremove_sequenceïszMHMessage.remove_sequencecCsJt|tƒrdt| ¡ƒ}d|kr*| d¡n| d¡| d¡d|krP| d¡d|krb| d¡nât|tƒr¾t| ¡ƒ}d|krŽ| d¡n | d ¡d|krª| d¡d|kr¼| d ¡nˆt|tƒræx|| ¡D]}| |¡qÒWn`t|t ƒr(t| ¡ƒ}d|kr|  d¡d|krF|  d ¡nt|t ƒr6nt d t |ƒƒ‚dS) Nr*r{rSr[rXrZrTÚROrUrYr,z$Cannot convert to specified type: %s)rYr rr r¢rOrùr r r r]rrnro)rr!r"r)rrrrCös@                     zMHMessage._explain_to)N) rurvrwrErr r$r rgrCrrrrr Õs c@s^eZdZddgZddd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dS)r r/Ú_visibleNcCsg|_tƒ|_t ||¡dS)N)r/rrir)rr!rrrr"szBabylMessage.__init__cCs|jdd…S)N)r/)rrrrr0(szBabylMessage.get_labelscCst|ƒ|_dS)N)r7r/)rr7rrrr2,szBabylMessage.set_labelscCs6t|tƒr"||jkr2|j |¡ntdt|ƒƒ‚dS)Nzlabel must be a string: %s)rYrer/r¯rnro)rr9rrrr]0s  zBabylMessage.add_labelcCs*y|j |¡Wntk r$YnXdS)N)r/r$rO)rr9rrrÚ remove_label8szBabylMessage.remove_labelcCs t|jƒS)N)rri)rrrrr??szBabylMessage.get_visiblecCst|ƒ|_dS)N)rri)rZvisiblerrrr1CszBabylMessage.set_visiblecCsjx6|j ¡D](}||kr,|j |||¡q |j|=q Wx,dD]$}||kr>||jkr>|||j|<q>WdS)N)ZDateZFromzReply-ToZToZCCZSubject)rir8ra)rÚheaderrrrÚupdate_visibleGs  zBabylMessage.update_visiblecCsvt|tƒr~t| ¡ƒ}d|kr*| d¡n| d¡| d¡d|ksNd|krX| d¡d|krj| d¡d |kr|| d ¡nôt|tƒrØt| ¡ƒ}d|kr¨| d ¡n | d ¡d |krÄ| d ¡d|krÖ| d¡nšt|tƒrt| ¡ƒ}d|kr| d¡d|krr| d¡nXt|t ƒrT|  |  ¡¡x<| ¡D]}|  |¡q>Wnt|t ƒrbntdt|ƒƒ‚dS)Nr*r{rSr-r.r\r,rTr+rVrhrUrWrYrZz$Cannot convert to specified type: %s)rYr rr0r¢rOrùr r r r1r?r]rrnro)rr!r7r9rrrrCRsF                      zBabylMessage._explain_to)N) rurvrwrErr0r2r]rjr?r1rlrCrrrrr s  c@s eZdZdS)r N)rurvrwrrrrr |sc@s¤eZdZd%dd„Zd&dd„Zd'dd„Zd(dd „Zd)d d „Zd d „Zdd„Z d*dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd „Zd!d"„Zed#d$„ƒZdS)+r¨NcCs$||_|dkr| ¡|_n||_dS)N)rÔrßÚ_pos)rr¦Úposrrrrƒs z_ProxyFile.__init__cCs| ||jj¡S)N)Ú_readrÔrS)rÚsizerrrrS‹sz_ProxyFile.readcCs| ||jj¡S)N)rorÔÚread1)rrprrrrqsz_ProxyFile.read1cCs| ||jj¡S)N)rorÔrl)rrprrrrl“sz_ProxyFile.readlinecCs>g}x4|D],}| |¡|dk r |t|ƒ8}|dkr Pq W|S)Nr)r¯rª)rÚsizehintrBrsrrrÚ readlines—s   z_ProxyFile.readlinesccs x| ¡}|sdS|VqWdS)N)rl)rrsrrrr;¢s z_ProxyFile.__iter__cCs|jS)N)rm)rrrrrߪsz_ProxyFile.tellrcCs4|dkr|j |j¡|j ||¡|j ¡|_dS)Nr«)rÔr_rmrß)rÚoffsetÚwhencerrrr_®sz_ProxyFile.seekcCs0t|dƒr,zt|jdƒr"|j ¡Wd|`XdS)NrÔrL)rErÔrL)rrrrrLµs   z_ProxyFile.closecCs2|dkr d}|j |j¡||ƒ}|j ¡|_|S)NrW)rÔr_rmrß)rrpÚ read_methodrBrrrro¾s  z_ProxyFile._readcCs|S)Nr)rrrrÚ __enter__Çsz_ProxyFile.__enter__cGs | ¡dS)N)rL)rÚexcrrrÚ__exit__Ësz_ProxyFile.__exit__cCs |j ¡S)N)rÔÚreadable)rrrrrzÎsz_ProxyFile.readablecCs |j ¡S)N)rÔÚwritable)rrrrr{Ñsz_ProxyFile.writablecCs |j ¡S)N)rÔÚseekable)rrrrr|Ôsz_ProxyFile.seekablecCs |j ¡S)N)rÔrI)rrrrrI×sz_ProxyFile.flushcCs&t|dƒsdSt|jdƒsdS|jjS)NrÔTr F)rErÔr )rrrrr Ús   z_ProxyFile.closed)N)N)N)N)N)r)rurvrwrrSrqrlrsr;rßr_rLrorwryrzr{r|rIÚpropertyr rrrrr¨€s"        r¨c@s8eZdZd dd„Zdd„Zddd„Zd d „Zd d „ZdS)r÷NcCst |||¡||_||_dS)N)r¨rÚ_startÚ_stop)rr¦rèrérrrræsz_PartialFile.__init__cCst |¡|jS)N)r¨rßr~)rrrrrßìsz_PartialFile.tellrcCs<|dkr|j|_d}n|dkr*|j|_d}t |||¡dS)Nrr«rÊ)r~rmrr¨r_)rrtrurrrr_ðsz_PartialFile.seekcCsB|j|j}|dkrdS|dks0|dks0||kr4|}t |||¡S)Nrrï)rrmr¨ro)rrprvZ remainingrrrroús  z_PartialFile._readcCst|dƒr|`dS)NrÔ)rErÔ)rrrrrLs z_PartialFile.close)NN)r)rurvrwrrßr_rorLrrrrr÷ãs    r÷Tc Csžd}yZtrpyt |tjtjB¡WnJtk rn}z,|jtjtjtjfkr\t d|j ƒ‚n‚Wdd}~XYnX|r^yt |j dƒ}|  ¡Wn:tk rÊ}z|jtjtjfkr¸dS‚Wdd}~XYnXy`yt  |j |j d¡d}Wn2ttfk rt  |j |j d¡d}YnXt  |j ¡Wn0tk r\t  |j ¡t d|j ƒ‚YnXWn8tr|t |tj¡|r’t  |j d¡‚YnXdS)NFzlockf: lock unavailable: %sz.lockTzdot lock unavailable: %s)ÚfcntlÚlockfZLOCK_EXZLOCK_NBr–r—ZEAGAINrÒrÓrrˆràrLrr’r“r”r•r%rÉr$ÚLOCK_UN)r¦rÝZ dotlock_donerœZpre_lockrrrrÛ sH    rÛcCs8trt |tj¡tj |jd¡r4t |jd¡dS)Nz.lock)r€rr‚rrr~rˆr$)r¦rrrrÜ4srÜc Cs8t |tjtjBtjBd¡}z t|dƒSt |¡XdS)Ni¶zrb+)rr¡r´rÚO_RDWRrL)rÚfdrrrrÈ;s rÈcCs$td|tt ¡ƒt ¡t ¡fƒS)Nz %s.%s.%s.%s)rÈrÄr¾rÂrÃrrÅ)rrrrràCsràcCs$| ¡ttdƒr t | ¡¡dS)NÚfsync)rIrErr…Úfileno)r¦rrrrÞIs rÞcCst|ƒ| ¡dS)N)rÞrL)r¦rrrr‰Osr‰c@s eZdZdS)rN)rurvrwrrrrrUsc@s eZdZdS)rN)rurvrwrrrrrXsc@s eZdZdS)rN)rurvrwrrrrr[sc@s eZdZdS)rN)rurvrwrrrrr^sc@s eZdZdS)rN)rurvrwrrrrras)T)/rr¾rdrÂr—rBrhr1Z email.messageZemail.generatorrZr-r€Ú ImportErrorÚ__all__rarMrrrÐrîrrrrr!rr rùr r r r r¨r÷rÛrÜrÈràrÞr‰Ú ExceptionrrrrrrrrrÚ sn     h8DB4-3z%mqH_c' *