ÿØÿà JFIF    ÿÛ „  ( %!1!%)+//.383,7(-.+  -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ     ÿÄ J    ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ   ÿÄ *  !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú "SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5 ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍѶ¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e ríV ?> ......................................... ............................................................................. ÿØÿà JFIF    ÿÛ „  ( %!1!%)+//.383,7(-.+  -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ     ÿÄ J    ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ   ÿÄ *  !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú "SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5 ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍѶ¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e ríV ?> ......................................... ............................................................................. ???????????????????????????????????? ???????????????????????????????????? ÿØÿà JFIF    ÿÛ „  ( %!1!%)+//.383,7(-.+  -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ     ÿÄ J    ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ   ÿÄ *  !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú "SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5 ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍѶ¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e ríV ?> ......................................... ............................................................................. ÿØÿà JFIF    ÿÛ „  ( %!1!%)+//.383,7(-.+  -%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ     ÿÄ J    ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ   ÿÄ *  !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú "SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5 ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍѶ¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e ríV ?> ......................................... ............................................................................. ???????????????????????????????????? ???????????????????????????????????? o 0i3@s>dZddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl Zddl Z ddl Z ddl mZzddlZWn eyIdZYnwgdZejdZGdddZGdd d eZGd d d eZGd d d eZGdddeZGdddeZGdddeZGdddeZGdddejjZGdddeZGdddeZGdddeZ GdddeZ!Gd d!d!eZ"Gd"d#d#eZ#Gd$d%d%Z$Gd&d'd'e$Z%d?d)d*Z&d+d,Z'd-d.Z(d/d0Z)d1d2Z*d3d4Z+Gd5d6d6e,Z-Gd7d8d8e-Z.Gd9d:d:e-Z/Gd;d<dd>e-Z1dS)@zDRead/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.N) GenericAlias)MailboxMaildirmboxMHBabylMMDFMessageMaildirMessage mboxMessage MHMessage BabylMessage MMDFMessageErrorNoSuchMailboxError NotEmptyErrorExternalClashError FormatErrorasciic@seZdZdZdCddZddZdd Zd d Zd d ZddZ dDddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/ZdDd0d1Zd2d3ZdDd4d5Zd6d7Zd8d9Zd:d;Zdd?Z!d@Z"dEdAdBZ#e$e%Z&dS)Frz*A group of messages in a particular place.NTcCs tjtj||_||_dS)zInitialize a Mailbox instance.N)ospathabspath expanduser_path_factoryselfrfactorycreater./opt/alt/python310/lib64/python3.10/mailbox.py__init__%s zMailbox.__init__cCtd)$Add message and return assigned key.&Method must be implemented by subclassNotImplementedErrorrmessagerrr add*z Mailbox.addcCr")=Remove the keyed message; raise KeyError if it doesn't exist.r$r%rkeyrrr remove.r*zMailbox.removecCs||dSN)r.r,rrr __delitem__2szMailbox.__delitem__cCs&z||WdStyYdSwz'If the keyed message exists, remove it.N)r.KeyErrorr,rrr discard5s  zMailbox.discardcCr")>Replace the keyed message; raise KeyError if it doesn't exist.r$r%rr-r(rrr __setitem__<r*zMailbox.__setitem__cCs$z||WSty|YSw)z9Return the keyed message, or default if it doesn't exist.) __getitem__r2)rr-defaultrrr get@s   z Mailbox.getcCsN|js||St|| }||WdS1s wYdS)z=Return the keyed message; raise KeyError if it doesn't exist.N)r get_message contextlibclosingget_file)rr-filerrr r7Gs  $zMailbox.__getitem__cCr")4Return a Message representation or raise a KeyError.r$r%r,rrr r:Or*zMailbox.get_messagecCst||S)zReturn a string representation or raise a KeyError. Uses email.message.Message to create a 7bit clean string representation of the message.emailmessage_from_bytes get_bytesZ as_stringr,rrr get_stringSszMailbox.get_stringcCr")z8Return a byte string representation or raise a KeyError.r$r%r,rrr rCZr*zMailbox.get_bytescCr")6Return a file-like representation or raise a KeyError.r$r%r,rrr r=^r*zMailbox.get_filecCr")Return an iterator over keys.r$r%rrrr iterkeysbr*zMailbox.iterkeyscC t|S)zReturn a list of keys.)listrHrGrrr keysf z Mailbox.keysc cs:|D]}z||}Wn tyYqw|VqdS)z%Return an iterator over all messages.NrHr2rr-valuerrr itervaluesjs   zMailbox.itervaluescCs|Sr/)rPrGrrr __iter__sszMailbox.__iter__cCrI)z,Return a list of messages. Memory intensive.)rJrPrGrrr valuesvrLzMailbox.valuesc cs>|D]}z||}Wn tyYqw||fVqdS)z.Return an iterator over (key, message) tuples.NrMrNrrr iteritemszs    zMailbox.iteritemscCrI)z9Return a list of (key, message) tuples. Memory intensive.)rJrSrGrrr itemsrLz Mailbox.itemscCr")9Return True if the keyed message exists, False otherwise.r$r%r,rrr __contains__r*zMailbox.__contains__cCr")*Return a count of messages in the mailbox.r$r%rGrrr __len__r*zMailbox.__len__cCs|D]}||qdS)zDelete all messages.N)rKr3r,rrr clears  z Mailbox.clearcCs2z||}Wn ty|YSw|||S)z3Delete the keyed message and return it, or default.)r2r3)rr-r8resultrrr pops   z Mailbox.popcCs&|D] }|||fStd)z6Delete an arbitrary (key, message) pair and return it.zNo messages in mailbox)rHr[r2r,rrr popitems zMailbox.popitemc Cspt|dr |}n t|dr|}n|}d}|D]\}}z|||<Wqty/d}Yqw|r6tddS)z4Change the messages that correspond to certain keys.rSrTFTzNo message with key(s)N)hasattrrSrTr2)rargsourceZbad_keyr-r(rrr updates       zMailbox.updatecCr")&Write any pending changes to the disk.r$r%rGrrr flushr*z Mailbox.flushcCr")Lock the mailbox.r$r%rGrrr lockr*z Mailbox.lockcCr")#Unlock the mailbox if it is locked.r$r%rGrrr unlockr*zMailbox.unlockcCr")Flush and close the mailbox.r$r%rGrrr closer*z Mailbox.closecCs$z|dWStytdw)Nrz?String input must be ASCII-only; use bytes or a Message instead)encode UnicodeError ValueErrorr'rrr _string_to_bytess   zMailbox._string_to_bytesFc Cst|tjjr?t}tj||d}||| d| }| dt }| ||jr;|t s=| t d Sd Sd St|tttjfrt|tjrYtdtd|}t|trc||}|rk| dd}| dt }| ||jr|t s| t d Sd Sd St|drt|drtd td|j}d } |}|d r|d d d}n |dr|d dd}|sn|r|drd|dd }| dt }| ||}q|jr|r|t s| t d Sd Sd Sd Stdt|)z%Dump message contents to target file.r 8Use of StringIO input is deprecated, use BytesIO insteads From s >From readbufferDUse of text mode files is deprecated, use a binary mode file insteadNT  From s>From Invalid message type: %s) isinstancerAr(r ioBytesIO generatorBytesGeneratorflattenseekrpreplacelinesepwrite_append_newlineendswithstrbytesStringIOwarningswarnDeprecationWarninggetvaluerlr]rqreadline startswith TypeErrortype) rr(targetZ mangle_from_rqgendataZlastlinelinerrr _dump_messagesf                 zMailbox._dump_messageNTr/F)'__name__ __module__ __qualname____doc__r!r)r.r0r3r6r9r7r:rDrCr=rHrKrPrQrRrSrTrVrXrYr[r\r`rbrdrfrhrlrr classmethodr__class_getitem__rrrr r"sF        6rc@seZdZdZdZd6ddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-Zd.d/Zd0d1Zd2d3Zd4d5ZdS)7rzA qmail-style Maildir mailbox.:NTcCst||||tj|jdtj|jdtj|jdd|_tj|jsE|r@t|jd|j D]}t|dq6nt |ji|_ ddd|_ d|_ d|_d S) zInitialize a Maildir instance.tmpnewcur)rrrr)rrg?N)rr!rrjoinr_pathsexistsmkdirrRr_toc _toc_mtimes _last_read _skewfactor)rdirnamerrrrrr r!s    zMaildir.__init__c Csf|}z|||Wnty|t|jwt|t|t r;| }|j | }||j kr:d}nd}d}tj |j|j d}tj |j|||}t|t rlt|jtj |j|fz'z t|j|Wnttfyt|j|YW|Swt|jW|Sty}zt|j|jtjkrtd|d}~ww)r#rrz$Name clash with existing message: %sN) _create_tmpr BaseExceptionrhrr.name _sync_closerzr get_subdircolonget_inforbasenamesplitrrutimegetatimeget_datelinkAttributeErrorPermissionErrorrenameOSErrorerrnoZEEXISTr)rr(Ztmp_filesubdirsuffixuniqdesterrr r)$sR        z Maildir.addcCs ttj|j||dSr+N)rr.rrr_lookupr,rrr r.Ns zMaildir.removec Cs*z||WdSttfyYdSwr1)r.r2FileNotFoundErrorr,rrr r3Rs zMaildir.discardc Cs||}||}||}t|tr|}n|}tj|}|j|vr0|j||jd}nd}| |tj |j |} tj |j |||} t|tr]t | tj | |ft| | dS)r4rvrN)rr)rzr rrrrrr3rrrrrr) rr-r(Z old_subpathZtemp_keyZ temp_subpathZdominant_subpathrrZtmp_pathnew_pathrrr r6Zs$        zMaildir.__setitem__cCs||}ttj|j|d}|jr||}nt|}Wdn1s(wYtj|\}}| ||j |vrJ| ||j d| tj tj|j||S)r?rbNrv)ropenrrrrrr r set_subdirrset_infoset_dategetmtime)rr-Zsubpathfmsgrrrrr r:us    zMaildir.get_messagecCsPttj|j||d}|tdWdS1s!wYdS)2Return a bytes representation or raise a KeyError.rrmN) rrrrrrrprrrr-rrrr rCs$zMaildir.get_bytescCs$ttj|j||d}t|S)rEr)rrrrrr _ProxyFilerrrr r=szMaildir.get_filec csB||jD]}z||Wn tyYqw|VqdSrFN)_refreshrrr2r,rrr rHs  zMaildir.iterkeyscC|||jvSrU)rrr,rrr rV zMaildir.__contains__cC|t|jSrW)rlenrrGrrr rXrzMaildir.__len__cCdS)"Write any pending changes to disk.NrrGrrr rbsz Maildir.flushcCr)rcNrrGrrr rdz Maildir.lockcCr)reNrrGrrr rfrzMaildir.unlockcCrrgNrrGrrr rhrz Maildir.closecCs\g}t|jD]#}t|dkr+|ddkr+tjtj|j|r+||ddq|S)Return a list of folder names.r.N)rlistdirrrrisdirrappendrrZentryrrr list_foldersszMaildir.list_folderscCs ttj|jd||jddS)z/Return a Maildir instance for the named folder.rFrr)rrrrrrrfolderrrr get_folderszMaildir.get_foldercCs\tj|jd|}t||jd}tj|d}tj|s,tt|tj tj Bd|S)z>Create a folder and return a Maildir instance representing it.rrZ maildirfolder) rrrrrrrrhrO_CREATO_WRONLY)rrrrZZmaildirfolder_pathrrr add_folders zMaildir.add_foldercCstj|jd|}ttj|dttj|dD]}t|dks,|ddkr2td|qt|D]!}|dkrY|dkrY|dkrYtjtj||rYtd||fq8tj|d d D]#\}}}|D] }t tj||qh|D] }t tj||qwqat |d S) -Delete the named folder, which must be empty.rrrrrzFolder contains message(s): %srz%Folder contains subdirectory '%s': %sF)topdownN) rrrrrrrrwalkr.rmdir)rrrrrootdirsfilesrrr remove_folders, zMaildir.remove_foldercCsXt}ttj|jdD]}tj|jd|}|tj|dkr)t|qdS)zDelete old files in "tmp".ri@N)timerrrrrrr.)rnowrrrrr cleans z Maildir.cleanrc Cst}t}d|vr|dd}d|vr|dd}dt|t|ddttj|f}tj |j d|}zt |Wn!t yatjd7_zt|WYSty^YnwYnwtd |) z=Create a file in the tmp subdirectory and open and return it./z\057rz\072z%s.M%sP%sQ%s.%srg.Arz&Name clash prevented file creation: %s)rsocket gethostnamerintrgetpidr_countrrrstatr_create_carefullyFileExistsErrorr)rrZhostnamerrrrr rs0    zMaildir._create_tmpcCst|jd|jkr/d}|jD]}tj|j|}||j|kr%d}||j|<q|s/dSi|_|jD]/}|j|}t |D]"}tj ||}tj |rQqA| |j d}tj |||j|<qAq5t|_dS)z!Update table of contents mapping.FTNr)rrrrrrrrrrrrrr)rZrefreshrmtimerrprrrr rs(     zMaildir._refreshcCstztjtj|j|j|r|j|WSWn ty Ynw|z|j|WSty9td|dw)z=Use TOC to return subpath for given key, or raise a KeyError.No message with key: %sN)rrrrrrr2rr,rrr r&s    zMaildir._lookupcCsLt|ds ||_ z|t|jWStyYdSty%Yq w)z0Return the next message in a one-time iteration. _onetime_keysTN)r]rHr next StopIterationr2rGrrr r 4s    z Maildir.nextr)rrrrrr!r)r.r3r6r:rCr=rHrVrXrbrdrfrhrrrrrrrrrr rrrr r s8 *   $ rc@seZdZdZd$ddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd%d d!Zd"d#ZdS)&_singlefileMailboxzA single-file mailbox.NTc Cst||||zt|jd}Wn7tyG}z+|jtjkr,|r't|jd}nt|j|jtjtj fvrt|t|kr6|r1||ttn||||d}n|sR|rL||ttn||n |tkrYd}nd}qtt t |||_ t|j |_ |j|_ dS)0Generate key-to-(start, stop) table of contents.FrTrwN)rrrrrrrrdict enumerateziprrr)rstartsstopsZlast_was_emptyline_posrrrr r0Xs2         zmbox._generate_tocr) rrrrrDrr!r%r0rrrr rFs  rc@s2eZdZdZd ddZddZdd Zd d ZdS) rzAn MMDF mailbox.NTcCrF)zInitialize an MMDF mailbox.N)rr5r3r!rrrr r!}rGz MMDF.__init__cC|dtdS)r-NrHr,rrr r#zMMDF._pre_message_hookcCs|tdtdS)r/rRNrHr,rrr r%szMMDF._post_message_hookcCsgg}}|jdd} |}|j}|j}|dtrM|| |}|j}|j}|dtkrC||ttn |sK||nq'n|sPnqtt t |||_ t|j |_ |jdd|j|_ dS)rJrTrRrN)rrrrrrrrrKrLrMrrr)rrNrOnext_posrPrrrr r0s8           zMMDF._generate_tocr)rrrrr!r#r%r0rrrr rzs   rc@seZdZdZd0ddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zd$d%Zd&d'Zd(d)Zd*d+Zd,d-Zd.d/ZdS)1rzAn MH mailbox.NTcCstt||||tj|js5|r0t|jdtttj |jdtj tj Btj Bdnt |jd|_dS)zInitialize an MH instance.r .mh_sequencesiFN)rr!rrrrrrhrrrO_EXCLrrrrrrr r!s  z MH.__init__cCs|}t|dkr d}nt|d}tj|jt|}t|}d}zQ|j r+t |z7z| ||Wnt yN|j rBt |t|d}t|wt|trZ|||W|j rbt |n |j rkt |wwW|sst||S|s|t|ww)r#rrFT)rKrmaxrrrrrrrrrrrrr.rzr _dump_sequences)rr(rKZnew_keyrrclosedrrr r)sJ        zMH.addc Csltj|jt|}zt|d}Wnty*}z |jtjkr%t d|d}~ww| t |dS)r+r rN) rrrrrrrrrr2rhr.)rr-rrrrrr r.s  z MH.removec Cstj|jt|}zt|d}Wnty*}z |jtjkr%t d|d}~wwz?|j r3t |z't t|tj tjB|||t|trR|||W|j rZt|n |j rct|wwWt|dSt|w)r4r rN)rrrrrrrrrr2rrrhrO_TRUNCrrzr rXrr)rr-r(rrrrrr r6s4      zMH.__setitem__c Csz |jrttj|jt|d}n ttj|jt|d}Wnty9}z |jtj kr4t d|d}~ww|&|jrDt |z t |}W|jrQt |n |jrZt |wwWdn1sewY|D] \}}||vr}||qp|S)r?r rrN)rrrrrrrrrrr2rr r get_sequencesrT add_sequence)rr-rrrrkey_listrrr r:s:     zMH.get_messagec Csz |jrttj|jt|d}n ttj|jt|d}Wnty9}z |jtj kr4t d|d}~ww|)|jrDt |z| tdW|jrTt|WdS|jrdt|ww1shwYdS)rr rrNrm)rrrrrrrrrrr2rrprrrrr-rrrrr rCs.   z MH.get_bytesc CsXzttj|jt|d}Wt |Sty+}z |jtjkr&t d|d}~ww)rErrN) rrrrrrrrrr2rr^rrr r=,s  z MH.get_filecCsttddt|jDS)rFcss |] }|rt|VqdSr/)isdigitr).0rrrr 9szMH.iterkeys..)iterr"rrrrGrrr rH7sz MH.iterkeyscCstjtj|jt|Sr)rrrrrrr,rrr rV<szMH.__contains__cCstt|Sr)rrJrHrGrrr rX@z MH.__len__cCs6|jsttj|jdd|_t|jd|_dSdS)rcrUr TN)rrrrrrrrrGrrr rdDs   zMH.lockcCs,|jrt|jt|j|`d|_dSdSr)rrrrrGrrr rfKs    z MH.unlockcCr)raNrrGrrr rbSrzMH.flushcCs|jr |dSdSr)rrfrGrrr rhWs zMH.closecCs<g}t|jD]}tjtj|j|r||q|S)r)rrrrrrrrrrr r\s  zMH.list_folderscCsttj|j||jddS)z+Return an MH instance for the named folder.Frrrrrrrrrrr rdsz MH.get_foldercCsttj|j||jdS)z:Create a folder and return an MH instance representing it.rrdrrrr risz MH.add_foldercCs`tj|j|}t|}|dgkrttj|dn |gkr"ntd|jt|dS)rrUzFolder not empty: %sN)rrrrrr.rr)rrrentriesrrr rns  zMH.remove_folderc si}ttj|jddddp}t||D]^}zM|d\}}t}|D]$}|r7| t |q)dd|dD\}} | t || d q)fd d t |D||<t||d krf||=Wqtyvtd |wWd|S1swY|S)z=Return a name-to-key-list dictionary to define each sequence.rUrASCIIencodingrcss|]}t|VqdSr/)r)r`xrrr raz#MH.get_sequences..-rcsg|]}|vr|qSrr)r`r-Zall_keysrr sz$MH.get_sequences..rz"Invalid sequence specification: %sN)rrrrrsetrKrr_r)rr`ranger"rrkrrstrip) rZresultsrrrcontentsrKspecr(r)rrmr r[zs4    zMH.get_sequencescCsttj|jdddd}zqtt|jtjtjB| D]W\}}t |dkr+q | |dd}d}t t |D])}|d |krN|sMd }| d n|r\d}| d ||fn| d ||}q<|rr| t|dq | dq Wt|dSt|w)z:Set sequences using the given name-to-key-list dictionary.rUzr+rgrhrrNFrTrlz%s %sz %s )rrrrrrhrrrZrTrrr"rorr)r sequencesrrrKprevZ completingr-rrr set_sequencess2    zMH.set_sequencesc Cs8|}d}g}|D]`}|d|krh|||dfzttj|jt|tj|jt|dWn#t t fyZt tj|jt|tj|jt|dYnwt tj|jt||d7}q |d|_ t|dkrzdS|D]\}}|D]\}}||vr||||<qq~||dS)z?Re-name messages to eliminate numbering gaps. Invalidates keys.rrN)r[rHrrrrrrrrrrunlinkrrrTindexrw) rrurvZchangesr-rr]oldrrrr packs6      zMH.packcCst|}|}|D]\}}||vr||q ||vr$|||=q |D] }||vr2|g||<q'||dS)z;Inspect a new MHMessage and update sequences appropriately.N)r[rTrryrw)rr(r-Zpending_sequencesZ all_sequencesrr]sequencerrr rXs   zMH._dump_sequencesr)rrrrr!r)r.r6r:rCr=rHrVrXrdrfrbrhrrrrr[rwr{rXrrrr rs0  "   rc@seZdZdZehdZdddZddZd d Zd d Z d dZ ddZ ddZ ddZ ddZddZddZddZddZdS) rzAn Rmail-style Babyl mailbox.>deletedZeditedunseenansweredresentZfiled forwardedNTcCst||||i|_dS)zInitialize a Babyl mailbox.N)r r!_labelsrrrr r!s zBabyl.__init__cCs(t||}t|tr||j|<|S)r#)r r)rzr get_labelsr)rr(r-rrr r)s  z Babyl.addcCs&t||||jvr|j|=dSdSr)r r.rr,rrr r.s   z Babyl.removecCs.t|||t|tr||j|<dSdS)r4N)r r6rzr rrr5rrr r6s zBabyl.__setitem__c Cs||\}}|j||jt} |j}|dtks$|s%n ||tdqt} |j}|tks?|s@n ||tdq4||j }|dksWJ|j |}|td}t | |} | | ||jvr| |j|| S)r?T *** EOOH ***rmr)rrrrr{r|rrrrrpr r set_visibler set_labels) rr-r(r)original_headersrZvisible_headersnbodyrrrr r:s4         zBabyl.get_messagec Cs||\}}|j||jt} |j}|dtks$|s%n ||tdq |j}|tks;|s.rN,r)rrrrrrrrrKrLrMrrrr)rrNrOrTZ label_listsrPrrrrr r05s:        zBabyl._generate_toccCsVdt}|dt7}|}dd|D}|dd|t7}|d7}||dS) r+sBABYL OPTIONS:s Version: 5css|]}|VqdSr/)rirrrr raXrkz*Babyl._pre_mailbox_hook..sLabels:rrN)rrrr)rrZbabylrrrr r!Ss zBabyl._pre_mailbox_hookcCrQ)r- NrHr,rrr r#]rSzBabyl._pre_message_hookcCs|tddS)r/rNrHr,rrr r%arSzBabyl._post_message_hookcCs`|j}t|trXg}g}|D]}||jvr||q||q|jd|D] }|jd|q-|jd|D]}|jd|dqB|jt n|jdt t|t j j rt }t j|dd}|||d |}|j|d t |d ks|snq~|jd t t|trt } t j| dd} | | | }|j|d t |d ks|snqn|d |}|j|d t |d ks|snq |d } | sn |j| d t qn)t|ttt jfr{t|t jrtd td|}t|tr%||}|dd} | ddkrf|j|d| d t |jd t |j|d| d t |j|| dd t n|jd t t |j|d t nt |drt |drtdtd|j!}|} d } |}|"dr|ddd }n|"dr|ddd }|j|d t |d ks|s|rd}|jd t || nnq |}|sn4|"dr|ddt }n|"dr|ddt }n|"d r|ddt }|j|qnt#dt$||j}||fS)z0Write message contents and return (start, stop).1s, s,, rs1,,FrTrmrrrnros rrvNrrqrrrsrtrury)%rrrzr rrrrrirrAr(r r{r|r}r~rrrr get_visiblerprrrrrrrrlr>r]rqrrr)rr(r(Zspecial_labelsrrZ orig_bufferZorig_generatorrZ vis_bufferZ vis_generatorrqZ body_startZ original_posZ first_passr)rrr r1es                            zBabyl._install_messager)rrrr frozensetrr!r)r.r6r:rCr=rr0r!r#r%r1rrrr rs      rc@s*eZdZdZd ddZddZddZdS) r z0Message with mailbox-format-specific properties.NcCst|tjjr|t|t|tr||dSdSt|tr,|t |dSt|t r;|t |dSt|t j rK|t|dSt|drZ|t|dS|durgtjj|dStdt|)zInitialize a Message instance.rpNry)rzrAr(r _become_messagecopyZdeepcopy _explain_torrBrZmessage_from_stringr{ TextIOWrapperZmessage_from_filer]Zmessage_from_binary_filer!rrr'rrr r!s      zMessage.__init__cCs4t|dg}|jD]}||vr|j||j|<q dS)z0Assume the non-format-specific state of message._type_specific_attributesN)getattr__dict__)rr(Z type_specificrrrr rs  zMessage._become_messagecCst|trdStd)z:Copy format-specific state to message insofar as possible.Nz Cannot convert to specified type)rzr rr'rrr rs zMessage._explain_tor/)rrrrr!rrrrrr r s   r c@szeZdZdZgdZdddZddZdd Zd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZdS)r z)Message with Maildir-specific properties.)_subdir_info_dateNcCs&d|_d|_t|_t||dS)z%Initialize a MaildirMessage instance.rrN)rrrrr r!r'rrr r!s zMaildirMessage.__init__cC|jS)zReturn 'new' or 'cur'.)rrGrrr rzMaildirMessage.get_subdircCs&|dks|dkr ||_dStd|)zSet subdir to 'new' or 'cur'.rrz!subdir must be 'new' or 'cur': %sN)rrk)rrrrr rs  zMaildirMessage.set_subdircCs|jdr |jddSdS)*Return as a string the flags that are set.2,rNr)rrrGrrr get_flags s zMaildirMessage.get_flagscCsddt||_dS))Set the given flags and unset all others.rrN)rr"r)rflagsrrr set_flagsrzMaildirMessage.set_flagscC$|dt|t|BdSz.Set the given flag(s) without changing others.rNrrrorrflagrrr add_flag$zMaildirMessage.add_flagcCs0|r|dt|t|dSdS)7Unset the given string flag(s) without changing others.rN)rrrrorrrr remove_flags$zMaildirMessage.remove_flagcCr)zSet "From " line, formatting and appending time_ if specified.NT )rrCrBr)rr<Ztime_rrr r6us  z_mboxMMDFMessage.set_fromcCs|dd|ddS)rStatusrX-Status)r9rGrrr r}rz_mboxMMDFMessage.get_flagscCst|}d\}}dD]}||vr||7}||q dD]}||vr+||7}||q|dt|7}z|d|WntyL|d|Ynwz |d|WdStyf|d|YdSw)r)rr)rr)rrrrrrN)ror.rr"replace_headerr2Z add_header)rrZ status_flagsZ xstatus_flagsrrrr rs.    z_mboxMMDFMessage.set_flagscCrrrrrrr rrz_mboxMMDFMessage.add_flagcCs8d|vsd|vr|dt|t|dSdS)rrrrNrrrrr rs$z_mboxMMDFMessage.remove_flagc Cst|trgt|}d|vr|dd|vr|dd|vr&|dd|vr/|dd|vr8|d|d =|d =d |d d }z| t t |dWd SttfyfYd Swt|tr|||||d St|trt|}d|vr|dd|vr|dd|vr|d|d =|d =d St|trt|}d|vr|dd|vr|dd|vr|d|d =|d =d St|trd Stdt|)zACopy mbox- or MMDF-specific state to message insofar as possible.rrrrrrrrZstatuszx-statusrNz%a %b %d %H:%M:%S %Yr~rrr}rr)rzr rorrrrr@rrcalendarZtimegmrstrptimerk OverflowErrorr?rr6r r\r rr rr)rr(rZ maybe_daterrr rsd                     z_mboxMMDFMessage._explain_tor/) rrrrrr!r@r6rrrrrrrrr r?cs   r?c@eZdZdZdS)r z&Message with mbox-specific properties.Nrrrrrrrr r r c@sHeZdZdZdgZdddZddZdd Zd d Zd d Z ddZ dS)r z$Message with MH-specific properties. _sequencesNcCsg|_t||dS)z!Initialize an MHMessage instance.N)rr r!r'rrr r!szMHMessage.__init__cC|jddS)z4Return a list of sequences that include the message.N)rrGrrr r[rIzMHMessage.get_sequencescCt||_dS)z3Set the list of sequences that include the message.N)rJr)rrurrr rwrIzMHMessage.set_sequencescC8t|tr||jvr|j|dSdStdt|)z8Add sequence to list of sequences including the message.zsequence type must be str: %sN)rzrrrrrrr|rrr r\  zMHMessage.add_sequencecC(z |j|WdStyYdSw)zARemove sequence from the list of sequences including the message.N)rr.rkrrrr remove_sequence  zMHMessage.remove_sequencecCsPt|tr5t|}d|vr|dn |d|dd|vr(|dd|vr3|dd Sd St|tret|}d|vrJ|dn|d d|vrX|dd|vrc|d d Sd St|trx|D]}||qnd St|t rt|}d|vr| dd|vr| d d Sd St|t rd St d t |)z6Copy MH-specific state to message insofar as possible.r~rrrrrrROrrrrN)rzr ror[rrr?r r\r rr rr)rr(rur|rrr rsJ                  zMHMessage._explain_tor/) rrrrrr!r[rwr\rrrrrr r s  r c@sbeZdZdZddgZdddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ dS)r z'Message with Babyl-specific properties.r_visibleNcCsg|_t|_t||dS)z#Initialize a BabylMessage instance.N)rr rr!r'rrr r!%szBabylMessage.__init__cCr)z'Return a list of labels on the message.N)rrGrrr r+rIzBabylMessage.get_labelscCr)z&Set the list of labels on the message.N)rJr)rrrrr r/rIzBabylMessage.set_labelscCr)z+Add label to list of labels on the message.zlabel must be a string: %sN)rzrrrrrrrrrr r3rzBabylMessage.add_labelcCr)z4Remove label from the list of labels on the message.N)rr.rkrrrr remove_label;rzBabylMessage.remove_labelcCs t|jS)z3Return a Message representation of visible headers.r rrGrrr rBs zBabylMessage.get_visiblecCr)z2Set the Message representation of visible headers.Nr)rZvisiblerrr rFrIzBabylMessage.set_visiblecCsb|jD]}||vr|j|||q|j|=qdD]}||vr.||jvr.|||j|<qdS)z9Update and/or sensibly generate a set of visible headers.)ZDateZFromzReply-ToZToZCCZSubjectN)rrKr)rheaderrrr update_visibleJs zBabylMessage.update_visiblecCsxt|trBt|}d|vr|dn |d|dd|vs'd|vr,|dd|vr5|dd |vr@|d dSdSt|trrt|}d|vrW|d n|d d |vre|d d|vrp|ddSdSt|trt|}d|vr|dd|vr|ddSdSt|t r| | |D]}| |qdSt|t rdStdt|)z9Copy Babyl-specific state to message insofar as possible.r~rrrrrrrr}rrrrrrrN)rzr rorrrr?r r\r rrrr rr)rr(rrrrr rUsP                   zBabylMessage._explain_tor/)rrrrrr!rrrrrrrrrrrr r s  r c@r)rz&Message with MMDF-specific properties.Nrrrrr rrrc@seZdZdZd&ddZd&ddZd&ddZd&d d Zd&d d Zd dZ ddZ d'ddZ ddZ ddZ ddZddZddZddZd d!Zd"d#Zed$d%ZeeZdS)(rzA read-only wrapper of a file.NcCs&||_|dur||_dS||_dS)zInitialize a _ProxyFile.N)rr_pos)rrposrrr r!s z_ProxyFile.__init__cC|||jjSz Read bytes.)_readrrprsizerrr rprcz_ProxyFile.readcCrr)rrread1rrrr rrcz_ProxyFile.read1cCr)z Read a line.)rrrrrrr rrcz_ProxyFile.readlinecCs>g}|D]}|||dur|t|8}|dkr|Sq|S)zRead multiple lines.Nr)rr)rsizehintrZrrrr readliness  z_ProxyFile.readlinesccs |}|s dS|Vq)zIterate over lines.TN)r)rrrrr rQsz_ProxyFile.__iter__cCr)zReturn the position.)rrGrrr rrz_ProxyFile.tellrcCs4|dkr |j|j|j|||j|_dS)zChange position.rNrrrrroffsetwhencerrr rsz_ProxyFile.seekcCs@t|drzt|jdr|jW|`dSW|`dS|`wdS)zClose the file.rrhN)r]rrhrGrrr rhs   z_ProxyFile.closecCs2|durd}|j|j||}|j|_|S)z"Read size bytes using read_method.Nrvr)rr read_methodrZrrr rs  z_ProxyFile._readcCs|S)z$Context management protocol support.rrGrrr __enter__rz_ProxyFile.__enter__cGs |dSr/)rh)rexcrrr __exit__s z_ProxyFile.__exit__cC |jSr/)rreadablerGrrr r z_ProxyFile.readablecCrr/)rwritablerGrrr rrz_ProxyFile.writablecCrr/)rseekablerGrrr rrz_ProxyFile.seekablecCrr/)rrbrGrrr rbrz_ProxyFile.flushcCs&t|dsdSt|jdsdS|jjS)NrTrYF)r]rrYrGrrr rYs  z_ProxyFile.closedr/r)rrrrr!rprrrrQrrrhrrrrrrrbpropertyrYrrrrrrr rs*           rc@s<eZdZdZdddZddZddd Zd d Zd d ZdS)r=z&A read-only wrapper of part of a file.NcCst|||||_||_dS)zInitialize a _PartialFile.N)rr!_start_stop)rrr(r)rrr r!s z_PartialFile.__init__cCst||jS)z*Return the position with respect to start.)rrrrGrrr rrcz_PartialFile.tellrcCs<|dkr |j|_d}n |dkr|j|_d}t|||dS)z8Change position, possibly with respect to start or stop.rrrN)rrrrrrrrr rsz_PartialFile.seekcCsB|j|j}|dkr dS|dus|dks||kr|}t|||S)z;Read size bytes using read_method, honoring start and stop.rr4N)rrrr)rrrZ remainingrrr rs z_PartialFile._readcCst|dr |`dSdS)Nr)r]rrGrrr rhs z_PartialFile.close)NNr) rrrrr!rrrrhrrrr r=s   r=Tc Csd}ztr1z t|tjtjBWnty0}z|jtjtjtjfvr+t d|j d}~ww|rz t |j d}| Wnty^}z|jtjtjfvrYWYd}~WdSd}~wwz4zt |j |j dd}Wnttfyt |j |j dd}Yn wt |j WWdSWWdStyt |j t d|j wWdStrt|tj|rt |j d)z(Lock file f using lockf and dot locking.Fzlockf: lock unavailable: %sN.lockTzdot lock unavailable: %s)fcntllockfZLOCK_EXZLOCK_NBrrZEAGAINrrrrr rhrrrrrrxrr.LOCK_UN)rrZ dotlock_donerZpre_lockrrr rs\   rcCs<tr t|tjtj|jdrt|jddSdS)z*Unlock file f using lockf and dot locking.rN)rrrrrrrr.rrrr r9s rc Cs@t|tjtjBtjBd}z t|dWt|St|w)zCCreate a file if it doesn't exist and open for reading and writing.rr )rrrrVO_RDWRrh)rfdrrr r@s rcCs$td|ttttfS)zBCreate a temp file based on path and open for reading and writing.z %s.%s.%s.%s)rrrrrrr)rrrr r Hsr cCs(|ttdrt|dSdS)z0Ensure changes to file f are physically on disk.fsyncN)rbr]rrfilenorrrr rNs rcCst||dS)z:Close file f, ensuring all changes are physically on disk.N)rrhrrrr rTs rc@r)rz"Raised for module-specific errors.Nrrrrr rZrrc@r)rz:The specified mailbox does not exist and won't be created.Nrrrrr r]rrc@r)rz>The specified mailbox is not empty and deletion was requested.Nrrrrr r`rrc@r)rz)Another process caused an action to fail.Nrrrrr rcrrc@r)rz)A file appears to have an invalid format.Nrrrrr rfrr)T)2rrrrrrrrrAZ email.messageZemail.generatorr{r;typesrr ImportError__all__rrirrr r3rrrrr(r r r?r r r rrr=rrrr rr Exceptionrrrrrrrrr sp    j8DB4-3z%mqH_e '*