����JFIF���������
1#@!#!123s
D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
proc
/
self
/
root
/
proc
/
self
/
root
/
opt
/
alt
/
python38
/
lib64
/
python3.8
/
__pycache__
/
Filename :
mailbox.cpython-38.pyc
back
Copy
U ����i�fE3���������������������@���sR��d�Z�ddlZddlZddlZddlZddlZddlZddlZddlZddl Zddl ZddlZddlZzddl Z W�n�ek r����dZ Y�nX�ddddddd d ddd ddddddgZej�d�ZG�dd��d�ZG�dd��de�ZG�dd��de�ZG�dd��de�ZG�dd��de�ZG�dd��de�ZG�dd��de�ZG�dd��de�ZG�dd ��d ejj�ZG�d d ��d e�ZG�d!d"��d"e�ZG�d#d��de�ZG�d$d��de�ZG�d%d ��d e�Z G�d&d��de�Z!G�d'd(��d(�Z"G�d)d*��d*e"�Z#d=d,d-�Z$d.d/��Z%d0d1��Z&d2d3��Z'd4d5��Z(d6d7��Z)G�d8d��de*�Z+G�d9d��de+�Z,G�d:d��de+�Z-G�d;d��de+�Z.G�d<d��de+�Z/dS�)>zDRead/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�������������������@���s��e�Zd�ZdZdCdd�Zdd��Zdd ��Zd d��Zdd ��Zdd��Z dDdd�Z dd��Zdd��Zdd��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;��Zd<d=��Z d>d?��Z!d@Z"dGdAdB�Z#dS�)Hr���z*A group of messages in a particular place.NTc�����������������C���s ���t�j�t�j�|��|�_||�_dS�)zInitialize a Mailbox instance.N)�os�path�abspath� expanduser�_path�_factory��selfr����factory�create��r����,/opt/alt/python38/lib64/python3.8/mailbox.py�__init__$���s����zMailbox.__init__c�����������������C���s���t�d��dS�)�$Add message and return assigned key.�&Method must be implemented by subclassN��NotImplementedError�r����messager���r���r����add)���s����zMailbox.addc�����������������C���s���t�d��dS�)�=Remove the keyed message; raise KeyError if it doesn't exist.r"���Nr#����r����keyr���r���r����remove-���s����zMailbox.removec�����������������C���s���|���|��d�S��N)r+���r)���r���r���r����__delitem__1���s����zMailbox.__delitem__c�����������������C���s(���z|���|��W�n�tk r"���Y�nX�dS��z'If the keyed message exists, remove it.N)r+����KeyErrorr)���r���r���r����discard4���s����zMailbox.discardc�����������������C���s���t�d��dS�)�>Replace the keyed message; raise KeyError if it doesn't exist.r"���Nr#����r���r*���r&���r���r���r����__setitem__;���s����zMailbox.__setitem__c�����������������C���s*���z|���|�W�S��tk r$���|�Y�S�X�dS�)z9Return the keyed message, or default if it doesn't exist.N)�__getitem__r/���)r���r*����defaultr���r���r����get?���s����zMailbox.getc�������������� ���C���sB���|�j�s|��|�S�t�|��|���}|���|�W��5�Q�R���S�Q�R�X�dS�)z=Return the keyed message; raise KeyError if it doesn't exist.N)r����get_message� contextlib�closing�get_file)r���r*����filer���r���r���r4���F���s���� zMailbox.__getitem__c�����������������C���s���t�d��dS�)�4Return a Message representation or raise a KeyError.r"���Nr#���r)���r���r���r���r7���N���s����zMailbox.get_messagec�����������������C���s���t��|��|�����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_bytesZ as_stringr)���r���r���r���� get_stringR���s����zMailbox.get_stringc�����������������C���s���t�d��dS�)z8Return a byte string representation or raise a KeyError.r"���Nr#���r)���r���r���r���r@���Y���s����zMailbox.get_bytesc�����������������C���s���t�d��dS�)�6Return a file-like representation or raise a KeyError.r"���Nr#���r)���r���r���r���r:���]���s����zMailbox.get_filec�����������������C���s���t�d��dS�)�Return an iterator over keys.r"���Nr#����r���r���r���r����iterkeysa���s����zMailbox.iterkeysc�����������������C���s���t�|�����S�)zReturn a list of keys.)�listrE���rD���r���r���r����keyse���s����zMailbox.keysc�������������� ���c���s>���|�����D�]0}z|�|�}W�n�tk r0���Y�qY�nX�|V��qdS�)z%Return an iterator over all messages.N�rE���r/����r���r*����valuer���r���r���� itervaluesi���s���� zMailbox.itervaluesc�����������������C���s���|�����S�r,���)rK���rD���r���r���r����__iter__r���s����zMailbox.__iter__c�����������������C���s���t�|�����S�)z,Return a list of messages. Memory intensive.)rF���rK���rD���r���r���r����valuesu���s����zMailbox.valuesc�������������� ���c���sB���|�����D�]4}z|�|�}W�n�tk r0���Y�qY�nX�||fV��qdS�)z.Return an iterator over (key, message) tuples.NrH���rI���r���r���r���� iteritemsy���s���� zMailbox.iteritemsc�����������������C���s���t�|�����S�)z9Return a list of (key, message) tuples. Memory intensive.)rF���rN���rD���r���r���r����items����s����z Mailbox.itemsc�����������������C���s���t�d��dS�)�9Return True if the keyed message exists, False otherwise.r"���Nr#���r)���r���r���r����__contains__����s����zMailbox.__contains__c�����������������C���s���t�d��dS�)�*Return a count of messages in the mailbox.r"���Nr#���rD���r���r���r����__len__����s����zMailbox.__len__c�����������������C���s���|�����D�]}|��|��qdS�)zDelete all messages.N)rG���r0���r)���r���r���r����clear����s����z Mailbox.clearc�����������������C���s4���z|�|�}W�n�t�k r$���|�Y�S�X�|��|��|S�)z3Delete the keyed message and return it, or default.)r/���r0���)r���r*���r5����resultr���r���r����pop����s���� zMailbox.popc�����������������C���s*���|�����D�]}||��|�f��S�td��dS�)z6Delete an arbitrary (key, message) pair and return it.zNo messages in mailboxN)rE���rV���r/���r)���r���r���r����popitem����s����zMailbox.popitemc�������������� ���C���st���t�|d�r|���}nt�|d�r(|���}n|}d}|D�].\}}z||�|<�W�q4�tk r`���d}Y�q4X�q4|rptd��dS�)z4Change the messages that correspond to certain keys.rN���rO���FTzNo message with key(s)N)�hasattrrN���rO���r/���)r����arg�sourceZbad_keyr*���r&���r���r���r����update����s���� zMailbox.updatec�����������������C���s���t�d��dS�)�&Write any pending changes to the disk.r"���Nr#���rD���r���r���r����flush����s����z Mailbox.flushc�����������������C���s���t�d��dS�)�Lock the mailbox.r"���Nr#���rD���r���r���r����lock����s����zMailbox.lockc�����������������C���s���t�d��dS�)�#Unlock the mailbox if it is locked.r"���Nr#���rD���r���r���r����unlock����s����zMailbox.unlockc�����������������C���s���t�d��dS�)�Flush and close the mailbox.r"���Nr#���rD���r���r���r����close����s����z Mailbox.closec�����������������C���s.���z|��d�W�S��tk r(���td��Y�nX�d�S�)Nr���z?String input must be ASCII-only; use bytes or a Message instead)�encode�UnicodeError� ValueErrorr%���r���r���r����_string_to_bytes����s����zMailbox._string_to_bytesFc����������� ������C���s���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�}|� |��|�j�r�|�t��s�|� t��n�t|d��r�t|d��r2t�d td��|j}d }|���}|�d��r\|d d��d�}n|�d ��rx|d d��d�}|�s��q�|�r�|�d��r�d|dd ���}|�dt�}|� |��|}�q6|�j�r�|�r�|�t��s�|� t��ntdt|����d S�)z%Dump message contents to target file.r������� �8Use of StringIO input is deprecated, use BytesIO instead����s��� From s��� >From �read�buffer�DUse of text mode files is deprecated, use a binary mode file insteadN���� ������� �������From s���>From �����Invalid message type: %s)� isinstancer>���r&���r����io�BytesIO� generator�BytesGenerator�flatten�seekrk����replace�linesep�write�_append_newline�endswith�str�bytes�StringIO�warnings�warn�DeprecationWarning�getvaluerg���rX���rl����readline� startswith� TypeError�type) r���r&����targetZmangle_from_rl����gen�dataZlastline�liner���r���r���� _dump_message����s`���� �� �� zMailbox._dump_message)NT)N)N)N)F)$�__name__� __module__�__qualname__�__doc__r ���r'���r+���r-���r0���r3���r6���r4���r7���rA���r@���r:���rE���rG���rK���rL���rM���rN���rO���rQ���rS���rT���rV���rW���r[���r]���r_���ra���rc���rg���r���r����r���r���r���r���r���!���sB��� c�������������������@���s����e�Zd�ZdZdZd6dd�Zdd��Zd d ��Zdd��Zd d��Z dd��Z dd��Zdd��Zdd��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�)7r���zA qmail-style Maildir mailbox.�:NTc�����������������C���s����t��|�|||��tj�|�jd�tj�|�jd�tj�|�jd�d�|�_tj�|�j�s�|r�t�|�jd��|�j� ��D�]}t�|d��qln t |�j��i�|�_ddd�|�_d|�_ d|�_d S�) zInitialize a Maildir instance.�tmp�new�cur)r����r����r�������r���)r����r����g�������?N)r���r ���r���r����joinr����_paths�exists�mkdirrM���r����_toc�_toc_mtimes� _last_read�_skewfactor)r����dirnamer���r���r���r���r���r���r ��� ��s����� zMaildir.__init__c�������������� ���C���s~��|�����}z|��||��W�n*�tk rB���|����t�|j����Y�nX�t|��t|t �r||� ��}|�j|����}||�jkr�d}nd}d}tj �|j��|�j�d�}tj �|�j|||��}t|t �r�t�|jtj �|j�|���f��zLzt�|j|��W�n(�ttfk �r���t�|j|��Y�nX�t�|j��W�nN�tk �rx�}�z.t�|j��|jtjk�rftd|���n��W�5�d}~X�Y�nX�|S�)r!�����r����r���z$Name clash with existing message: %sN)�_create_tmpr����� BaseExceptionrc���r���r+����name�_sync_closeru���r ���� get_subdir�colon�get_infor����basename�splitr����r����utime�getatime�get_date�link�AttributeError�PermissionError�rename�OSError�errnoZEEXISTr���)r���r&���Ztmp_file�subdir�suffix�uniq�dest�er���r���r���r'���!��sF���� ��zMaildir.addc�����������������C���s ���t��t�j�|�j|��|����dS��r(���N)r���r+���r���r����r����_lookupr)���r���r���r���r+���K��s����zMaildir.removec�������������� ���C���s,���z|���|��W�n�ttfk r&���Y�nX�dS�r.���)r+���r/����FileNotFoundErrorr)���r���r���r���r0���O��s����zMaildir.discardc�����������������C���s����|���|�}|��|�}|���|�}t|t�r.|}n|}tj�|�}|�j|kr`|�j|�|�j�d��}nd}|�� |��tj� |�j|�} tj� |�j|||��} t|t�r�t�| tj� | �|���f��t�| | ��dS�)r1���rq���r����N)r����r'���ru���r ���r���r���r����r����r����r0���r����r���r����r����r����r����)r���r*���r&���Zold_subpathZtemp_keyZtemp_subpathZdominant_subpathr����r����Ztmp_path�new_pathr���r���r���r3���W��s$���� �zMaildir.__setitem__c�������������� ���C���s����|���|�}ttj�|�j|�d�� }|�jr4|��|�}nt|�}W�5�Q�R�X�tj�|�\}}|� |��|�j |kr�|�|�|�j �d���|�tj� tj�|�j|����|S�)r<����rbrq���)r�����openr���r���r����r���r���r ���r����� set_subdirr�����set_info�set_date�getmtime)r���r*���Zsubpath�f�msgr����r����r���r���r���r7���r��s���� zMaildir.get_messagec�������������� ���C���sD���t�tj�|�j|��|��d��}|����td�W��5�Q�R���S�Q�R�X�dS�)�2Return a bytes representation or raise a KeyError.r����rh���N) r����r���r���r����r���r����rk���r|���r}����r���r*���r����r���r���r���r@������s����zMaildir.get_bytesc�����������������C���s$���t�tj�|�j|��|��d�}t|�S�)rB���r����)r����r���r���r����r���r����� _ProxyFiler����r���r���r���r:������s����zMaildir.get_filec�������������� ���c���sF���|������|�jD�]2}z|��|��W�n�tk r8���Y�qY�nX�|V��qdS��rC���N)�_refreshr����r����r/���r)���r���r���r���rE������s���� zMaildir.iterkeysc�����������������C���s���|������||�jkS��rP���)r����r����r)���r���r���r���rQ������s����zMaildir.__contains__c�����������������C���s���|������t|�j�S��rR���)r�����lenr����rD���r���r���r���rS������s����zMaildir.__len__c�����������������C���s���dS�)�"Write any pending changes to disk.Nr���rD���r���r���r���r]������s����z Maildir.flushc�����������������C���s���dS�)r^���Nr���rD���r���r���r���r_������s����zMaildir.lockc�����������������C���s���dS�)r`���Nr���rD���r���r���r���ra������s����zMaildir.unlockc�����������������C���s���dS��rb���Nr���rD���r���r���r���rc������s����z Maildir.closec�����������������C���s\���g�}t��|�j�D�]F}t|�dkr|d�dkrt�j�t�j�|�j|��r|�|dd����q|S�)�Return a list of folder names.����r����.N)r����listdirr���r����r����isdirr�����append�r���rU����entryr���r���r����list_folders���s�����zMaildir.list_foldersc�����������������C���s ���t�tj�|�jd|��|�jdd�S�)z/Return a Maildir instance for the named folder.r����F�r���r���)r���r���r���r����r���r����r����folderr���r���r���� get_folder���s�����zMaildir.get_folderc�����������������C���s\���t�j�|�jd|��}t||�jd�}t�j�|d�}t�j�|�sXt��t��|t�j t�j B�d���|S�)z>Create a folder and return a Maildir instance representing it.r�����r���Z maildirfolder���)r���r���r����r���r���r���r����rc���r�����O_CREAT�O_WRONLY)r���r����r���rU���Zmaildirfolder_pathr���r���r���� add_folder���s�����zMaildir.add_folderc�����������������C���s��t�j�|�jd|��}t��t�j�|d��t��t�j�|d���D�](}t|�dk�sX|d�dkr<td|���q<t��|�D�]B}|dkrp|dkrp|dkrpt�j�t�j�||��rptd||f���qpt�j|d d �D�]F\}}}|D�]}t�� t�j�||���q�|D�]}t�� t�j�||���q�q�t�� |��dS�)�-Delete the named folder, which must be empty.r����r����r����r����r���zFolder contains message(s): %sr����z%Folder contains subdirectory '%s': %sF)�topdownN)r���r���r����r���r����r����r���r�����walkr+����rmdir)r���r����r���r�����root�dirs�filesr���r���r���� remove_folder���s&�������zMaildir.remove_folderc�����������������C���sX���t�����}t�tj�|�jd��D�]4}tj�|�jd|�}|tj�|��dkrt�|��qdS�)zDelete old files in "tmp".r����i@��N)�timer���r����r���r����r���r����r+���)r����nowr����r���r���r���r����clean���s ����z Maildir.cleanr����c�����������������C���s����t�����}t���}d|kr$|�dd�}d|kr8|�dd�}dt|�t|d�d��t���tj|f�}tj � |�jd|�}zt�|��W�nF�t k r����t�jd7��_zt|�W��Y�S��tk r����Y�nX�Y�nX�td |���d S�)z=Create a file in the tmp subdirectory and open and return it.�/z\057r����z\072z%s.M%sP%sQ%s.%sr����g������.Ar����z&Name clash prevented file creation: %sN)r�����socket�gethostnamer|����intr����getpidr����_countr���r����r����statr�����_create_carefully�FileExistsErrorr���)r���r����Zhostnamer����r���r���r���r���r�������s,�������zMaildir._create_tmpc�����������������C���s����t�����|�j�d|�j�kr^d}|�jD�]2}tj�|�j|��}||�j|�krJd}||�j|<�q"|s^dS�i�|�_|�jD�]^}|�j|�}t� |�D�]D}tj� ||�}tj�|�r�q�|�|�j �d�}tj� ||�|�j|<�q�qjt�����|�_dS�)z!Update table of contents mapping.����FTNr���)r����r����r����r����r���r���r����r����r����r����r����r����r����r����)r���Zrefreshr�����mtimer���r�����pr����r���r���r���r�������s&���� zMaildir._refreshc�����������������C���s����z.t�j�t�j�|�j|�j|���r,|�j|�W�S�W�n�tk rB���Y�nX�|�����z|�j|�W�S��tk rz���td|��d�Y�nX�dS�)z=Use TOC to return subpath for given key, or raise a KeyError.�No message with key: %sN)r���r���r����r����r���r����r/���r����r)���r���r���r���r����#��s����zMaildir._lookupc�����������������C���sX���t�|�d�s|����|�_z|�t|�j��W�S��tk r:���Y�dS��tk rP���Y�qY�qX�qdS�)z0Return the next message in a one-time iteration.� _onetime_keysN)rX���rE���r�����next� StopIterationr/���rD���r���r���r���r����1��s���� zMaildir.next)NT)r����r����r����r����r����r ���r'���r+���r0���r3���r7���r@���r:���rE���rQ���rS���r]���r_���ra���rc���r����r����r����r����r����r����r����r����r����r����r���r���r���r���r�����s6��� * $c�������������������@���s����e�Zd�ZdZd$dd�Zdd��Zdd ��Zd d��Zdd ��Zdd��Z dd��Z dd��Zdd��Zdd��Z dd��Zdd��Zdd��Zdd��Zd%d d!�Zd"d#��ZdS�)&�_singlefileMailboxzA single-file mailbox.NTc�������������� ���C���s����t��|�|||��zt|�jd�}W�nn�tk r��}�zP|jtjkr\|rPt|�jd�}q~t|�j��n"|jtjtj fkr|t|�jd�}n��W�5�d}~X�Y�nX�||�_ d|�_d|�_d|�_ d|�_d|�_d|�_dS�)z!Initialize a single-file mailbox.�rb+zwb+r����Nr���F)r���r ���r����r���r����r�����ENOENTr����EACCES�EROFS�_filer����� _next_key�_pending� _pending_sync�_locked�_file_length)r���r���r���r���r����r����r���r���r���r ���A��s$����z_singlefileMailbox.__init__c�����������������C���s8���|������|��|�|�j|�j<�|��jd7��_d|�_|�jd�S�)r!���r����T)r�����_append_messager����r��r��r%���r���r���r���r'���X��s ����z_singlefileMailbox.addc�����������������C���s���|���|��|�j|=�d|�_dS�)r(���TN)r����r����r��r)���r���r���r���r+���b��s���� z_singlefileMailbox.removec�����������������C���s$���|���|��|��|�|�j|<�d|�_dS�)r1���TN)r����r ��r����r��r2���r���r���r���r3���h��s���� z_singlefileMailbox.__setitem__c�����������������c���s���|������|�j���E�dH��dS�r����)r����r����rG���rD���r���r���r���rE���n��s����z_singlefileMailbox.iterkeysc�����������������C���s���|������||�jkS�r����)r����r����r)���r���r���r���rQ���s��s����z_singlefileMailbox.__contains__c�����������������C���s���|������t|�j�S�r����)r����r����r����rD���r���r���r���rS���x��s����z_singlefileMailbox.__len__c�����������������C���s���|�j�st|�j��d|�_�dS�)r^���TN)r��� _lock_filer��rD���r���r���r���r_���}��s���� z_singlefileMailbox.lockc�����������������C���s���|�j�rt|�j��d|�_�dS��r`���FN)r���_unlock_filer��rD���r���r���r���ra������s���� z_singlefileMailbox.unlockc����������� ������C���s���|�j�s |�jrt|�j��d|�_dS�|�jdk s.t�|�j�dd��|�j���}||�jkrbt d|�j|f���t |�j�}z�i�}|��|��t |�j����D�]x}|�j|�\}}|�j�|��|��|��|���}|�j�td||�j������}|s�q�|�|��q�||���f||<�|��|��q�|���|�_W�n"���|����t�|j����Y�nX�t|��|�j����t�|�j�j} t�|j| ��zt�|j|�j��W�n2�tk �r����t�|�j��t�|j|�j��Y�nX�t|�jd�|�_||�_d|�_�d|�_|�j�r�t |�jdd��dS�) r����FNr���r����z4Size of mailbox file changed (expected %i, found %i)����r����)�dotlock)!r��r���_sync_flushr��r�����AssertionErrorr{����tellr��r����_create_temporaryr����_pre_mailbox_hook�sortedrG����_pre_message_hookrk����minr~����_post_message_hookrc���r���r+���r����r����r�����st_mode�chmodr����r����r����r��r ��) r���Zcur_lenZnew_fileZnew_tocr*����start�stopZ new_startrl����moder���r���r���r]������sb���� � � z_singlefileMailbox.flushc�����������������C���s���dS�)�,Called before writing the mailbox to file f.Nr����r���r����r���r���r���r�����s����z$_singlefileMailbox._pre_mailbox_hookc�����������������C���s���dS�)�-Called before writing each message to file f.Nr���r��r���r���r���r�����s����z$_singlefileMailbox._pre_message_hookc�����������������C���s���dS���,Called after writing each message to file f.Nr���r��r���r���r���r�����s����z%_singlefileMailbox._post_message_hookc�����������������C���s4���z|�����W�5�z|�jr|�����W�5�|�j�����X�X�dS�r����)r��rc���r��ra���r]���rD���r���r���r���rc������s����z_singlefileMailbox.closec�����������������C���sN���|�j�dkr|�����|dk rJz|�j�|�W�S��tk rH���td|��d�Y�nX�dS�)z'Return (start, stop) or raise KeyError.Nr����)r����� _generate_tocr/���r)���r���r���r���r�������s���� z_singlefileMailbox._lookupc�����������������C���s����|�j��dd��|�j����}t|�j�dkr8|�js8|��|�j���z&|��|�j���|��|�}|�� |�j���W�n"�t k r����|�j��|����Y�nX�|�j�����|�j����|�_ |S�)z;Append message to mailbox and return (start, stop) offsets.r���r����)r��r{���r��r����r����r��r��r���_install_messager��r�����truncater]���r��)r���r&���ZbeforeZoffsetsr���r���r���r �����s���� z"_singlefileMailbox._append_message)NT)N)r����r����r����r����r ���r'���r+���r3���rE���rQ���rS���r_���ra���r]���r��r��r��rc���r����r ��r���r���r���r���r����>��s"��� @ r����c�������������������@���sB���e�Zd�ZdZdZdd��Zddd�Zddd �Zdd d�Zdd ��Z dS�)� _mboxMMDFzAn mbox or MMDF mailbox.Tc�����������������C���sp���|���|�\}}|�j�|��|�j����td�}|�j�||�j�����}|��|�td��}|� |dd��� d���|S�)r<��������rh���rs���Nr���)r����r��r{���r����r|���r}���rk���r���_message_factory�set_from�decode)r���r*���r��r��� from_line�stringr����r���r���r���r7�����s����z_mboxMMDF.get_messageFc�����������������C���s���t��|��||��j|d�S�)�3Return a string representation or raise a KeyError.)�unixfromr=���)r���r*����from_r���r���r���rA�����s ���� ��z_mboxMMDF.get_stringc�����������������C���sJ���|���|�\}}|�j�|��|s(|�j����|�j�||�j�����}|�td�S�)r,��rh���)r����r��r{���r����rk���r��r|���r}���)r���r*���r.��r��r��r+��r���r���r���r@�����s���� z_mboxMMDF.get_bytesc�����������������C���s<���|���|�\}}|�j�|��|s(|�j����t|�j|�j���|�S�)rB���)r����r��r{���r�����_PartialFiler��)r���r*���r.��r��r��r���r���r���r:�����s ���� z_mboxMMDF.get_filec�����������������C���s��d}t�|t�r|��|�}t�|t�rf|�d�rf|�d�}|dkr\|d|��}||d�d��}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�) z1Format a message and blindly write to self._file.Nrr���rh���rq���r����r&��r���s���From MAILER-DAEMON )ru���r����rg���r����r�����find�_mboxMMDFMessage�get_fromrd���r>���r&���r����get_unixfromr�����asctime�gmtimer��r��r~���r}���r����� _mangle_from_)r���r&���r*���newlineZauthorr��r��r���r���r���r#��&��s0���� z_mboxMMDF._install_messageN)F)F)F) r����r����r����r����r6��r7���rA���r@���r:���r#��r���r���r���r���r%����s��� r%��c�������������������@���s2���e�Zd�ZdZdZdZd dd�Zdd��Zdd ��ZdS�)r���zA classic mbox mailbox.TNc�����������������C���s���t�|�_t�|�|||��dS�)zInitialize an mbox mailbox.N)r ���r'��r%��r ���r���r���r���r���r ���L��s����z mbox.__init__c�����������������C���s���|��t��dS�r ���r~���r}���r��r���r���r���r��Q��s����zmbox._post_message_hookc�����������������C���s����g�g��}}d}|�j��d��|�j����}|�j����}|�d�rzt|�t|�k�rj|r`|�|tt����n |�|��|�|��d}q|s�|r�|�|tt����q�|�|��q�q|tkr�d}qd}qtt t ||���|�_t|�j�|�_|�j����|�_ dS�)�0Generate key-to-(start, stop) table of contents.Fr���rr���TN)r��r{���r��r����r����r����r����r}����dict� enumerate�zipr����r��r��)r����starts�stopsZlast_was_empty�line_posr����r���r���r���r"��U��s.���� zmbox._generate_toc)NT) r����r����r����r����r6��r���r ���r��r"��r���r���r���r���r���C��s��� c�������������������@���s2���e�Zd�ZdZddd�Zdd��Zdd ��Zd d��ZdS�) r���zAn MMDF mailbox.NTc�����������������C���s���t�|�_t�|�|||��dS�)zInitialize an MMDF mailbox.N)r ���r'��r%��r ���r���r���r���r���r ���z��s����z MMDF.__init__c�����������������C���s���|��dt���dS�)r������Nr8��r��r���r���r���r����s����zMMDF._pre_message_hookc�����������������C���s���|��td�t���dS�)r!��r@��Nr8��r��r���r���r���r�����s����zMMDF._post_message_hookc�����������������C���s����g�g��}}|�j��d��d}|}|�j����}|�j����}|�dt��r�|�|��|}|�j����}|�j����}|dt�kr�|�|tt����q�qJ|sJ|�|��q�qJq|sq�qtt t ||���|�_t|�j�|�_|�j��dd��|�j����|�_ dS�)r9��r���r@��r����N)r��r{���r����r��r����r}���r����r����r:��r;��r<��r����r��r��)r���r=��r>���next_posr?��r����r���r���r���r"�����s.���� zMMDF._generate_toc)NT)r����r����r����r����r ���r��r��r"��r���r���r���r���r���w��s ��� c�������������������@���s����e�Zd�ZdZd0dd�Zdd��Zdd ��Zd d��Zdd ��Zdd��Z dd��Z dd��Zdd��Zdd��Z dd��Zdd��Zdd��Zdd��Zd d!��Zd"d#��Zd$d%��Zd&d'��Zd(d)��Zd*d+��Zd,d-��Zd.d/��ZdS�)1r���zAn MH mailbox.NTc�����������������C���st���t��|�|||��tj�|�j�sj|r`t�|�jd��t�t�tj� |�jd�tj tjB�tjB�d���n t |�j��d|�_dS�)zInitialize an MH instance.r����� .mh_sequencesi���FN)r���r ���r���r���r����r���r����rc���r����r����r�����O_EXCLr����r���r��r���r���r���r���r ������s������ zMH.__init__c�����������������C���s����|�����}t|�dkrd}nt|�d�}tj�|�jt|��}t|�}d}z�|�j rVt|��zfz|�� ||��W�n:�tk r����|�j r�t|��t |��d}t�|����Y�nX�t|t�r�|��||��W�5�|�j r�t|��X�W�5�|s�t |��X�|S�)r!���r���r����FT)rG���r�����maxr���r���r����r���r����r����r����r��r ��r��r����r����r+���ru���r����_dump_sequences)r���r&���rG���Znew_keyr����r�����closedr���r���r���r'������s6���� zMH.addc�������������� ���C���sx���t�j�|�jt|��}zt|d�}W�n>�tk r`�}�z |jtjkrNt d|���n��W�5�d}~X�Y�nX�|� ���t��|��dS�)r(���r����r����N)r���r���r����r���r����r����r����r����r���r/���rc���r+���)r���r*���r���r����r����r���r���r���r+������s����z MH.removec�������������� ���C���s����t�j�|�jt|��}zt|d�}W�n>�tk r`�}�z |jtjkrNt d|���n��W�5�d}~X�Y�nX�zd|�jrrt|��z@t��t��|t�jt�jB����|��||��t|t�r�|��||��W�5�|�jr�t |��X�W�5�t |��X�dS�)r1���r����r����N)r���r���r����r���r����r����r����r����r���r/���r����r��r ��r��rc���r�����O_TRUNCr����ru���r���rE��)r���r*���r&���r���r����r����r���r���r���r3������s$���� zMH.__setitem__c�������������� ���C���s����z@|�j�r$ttj�|�jt|��d�}nttj�|�jt|��d�}W�n>�tk r~�}�z |jtj krlt d|���n��W�5�d}~X�Y�nX�|�2�|�j�r�t|��zt |�}W�5�|�j�r�t|��X�W�5�Q�R�X�|�������D�]\}}||kr�|�|��q�|S�)r<���r����r����r����N)r��r����r���r���r����r���r����r����r����r���r/���r ��r��r���� get_sequencesrO����add_sequence)r���r*���r����r����r����r�����key_listr���r���r���r7������s&����zMH.get_messagec�������������� ���C���s����z@|�j�r$ttj�|�jt|��d�}nttj�|�jt|��d�}W�n>�tk r~�}�z |jtj krlt d|���n��W�5�d}~X�Y�nX�|�F�|�j�r�t|��z |� ���td�W��W��5�Q�R���S�|�j�r�t|��X�W�5�Q�R�X�dS�)r����r����r����r����Nrh���)r��r����r���r���r����r���r����r����r����r���r/���r ��r��rk���r|���r}����r���r*���r����r����r���r���r���r@�����s���� zMH.get_bytesc�������������� ���C���sf���zt�tj�|�jt|��d�}W�n>�tk r\�}�z |jtjkrJt d|���n��W�5�d}~X�Y�nX�t |�S�)rB���r����r����N)r����r���r���r����r���r����r����r����r���r/���r����rK��r���r���r���r:���)��s����zMH.get_filec�����������������C���s���t�tdd��t�|�j�D����S�)rC���c�����������������s���s���|�]}|����rt|�V��qd�S�r,���)�isdigitr����)�.0r����r���r���r���� <genexpr>6��s�����zMH.iterkeys.<locals>.<genexpr>)�iterr��r���r����r���rD���r���r���r���rE���4��s����zMH.iterkeysc�����������������C���s���t�j�t�j�|�jt|���S�r����)r���r���r����r����r���r����r)���r���r���r���rQ���9��s����zMH.__contains__c�����������������C���s���t�t|������S�r����)r����rF���rE���rD���r���r���r���rS���=��s����z MH.__len__c�����������������C���s2���|�j�s.ttj�|�jd�d�|�_t|�j��d|�_�dS�)r^���rB��r����TN)r��r����r���r���r����r���r��r ��rD���r���r���r���r_���A��s���� zMH.lockc�����������������C���s(���|�j�r$t|�j��t|�j��|�`d|�_�dS�r��)r��r��r��r����rD���r���r���r���ra���H��s ���� z MH.unlockc�����������������C���s���dS�)r\���Nr���rD���r���r���r���r]���P��s����zMH.flushc�����������������C���s���|�j�r|�����dS�r����)r��ra���rD���r���r���r���rc���T��s����zMH.closec�����������������C���s<���g�}t��|�j�D�]&}t�j�t�j�|�j|��r|�|��q|S�)r����)r���r����r���r���r����r����r����r����r���r���r���r����Y��s ����zMH.list_foldersc�����������������C���s���t�tj�|�j|�|�jdd�S�)z+Return an MH instance for the named folder.Fr�����r���r���r���r����r���r���r����r���r���r���r����a��s������z MH.get_folderc�����������������C���s���t�tj�|�j|�|�jd�S�)z:Create a folder and return an MH instance representing it.r����rP��r����r���r���r���r����f��s�����z MH.add_folderc�����������������C���s`���t�j�|�j|�}t��|�}|dgkr:t��t�j�|d���n|g�krDntd|�j���t��|��dS�)r����rB��zFolder not empty: %sN)r���r���r����r���r����r+���r���r����)r���r����r����entriesr���r���r���r����k��s���� zMH.remove_folderc����������� ��� ������s��i�}t�tj�|�jd�ddd���}t|�������|D�]�}z�|�d�\}}t��}|���D�]H}|���rn|� t |���qRdd��|�d�D��\}} |�t|| d ����qR��fd d�t |�D��||<�t||��dkr�||=�W�q0�tk r����td |������Y�q0X�q0W�5�Q�R�X�|S�)z=Return a name-to-key-list dictionary to define each sequence.rB���r�ASCII��encodingr����c�����������������s���s���|�]}t�|�V��qd�S�r,���)r����)rM���xr���r���r���rN�����s�����z#MH.get_sequences.<locals>.<genexpr>�-r����c��������������������s���g�|�]}|��kr|�qS�r���r���)rM��r*����Zall_keysr���r���� <listcomp>���s�����z$MH.get_sequences.<locals>.<listcomp>r���z"Invalid sequence specification: %s)r����r���r���r����r����setrG���r����rL��r'���r����r[����ranger��r����rf���r����rstrip) r���Zresultsr����r����r�����contentsrG����specr��r��r���rX��r���rH��w��s(���� �zMH.get_sequencesc�����������������C���s��t�tj�|�jd�ddd�}z�t�t��|jtjtj B����|� ��D�]�\}}t|�dkrVq@|�|d���d}d}t t|��D�]R}|d �|kr�|s�d }|�d��n*|r�d}|�d||f���n|�d |���|}qx|r�|�t|�d���q@|�d��q@W�5�t|��X�dS�)z:Set sequences using the given name-to-key-list dictionary.rB��zr+rS��rT��r���r����NFr����TrW��z%s %sz %s� )r����r���r���r����r���r����rc���r����r����rG��rO���r����r~���r��rZ��r����)r���� sequencesr����r����rG����prevZ completingr*���r���r���r���� set_sequences���s.����zMH.set_sequencesc����������� ��� ���C���s>��|�����}d}g�}|����D�]�}|d�|kr�|�||d�f��z4t�tj�|�jt|��tj�|�jt|d�����W�nH�t t fk r����t�tj�|�jt|��tj�|�jt|d�����Y�nX�t�tj�|�jt|����|d7�}q|d�|�_ t|�dkr�dS�|���D�]0\}}|D�]"\}}||k�r |||�|�<��q q�|��|��dS�)z?Re-name messages to eliminate numbering gaps. Invalidates keys.r���r����N)rH��rE���r����r���r����r���r����r���r����r����r����r�����unlinkr��r����rO����indexrb��) r���r`��ra��Zchangesr*���r����rJ���oldr����r���r���r����pack���s0������ zMH.packc�����������������C���st���|����}|�����}|���D�]0\}}||kr4|�|��q||kr||�|�=�q|D�]}||krN|g||<�qN|��|��dS�)z;Inspect a new MHMessage and update sequences appropriately.N)rH��rO���r����rd��rb��)r���r&���r*���Zpending_sequencesZ all_sequencesr����rJ���sequencer���r���r���rE�����s����zMH._dump_sequences)NT)r����r����r����r����r ���r'���r+���r3���r7���r@���r:���rE���rQ���rS���r_���ra���r]���rc���r����r����r����r����rH��rb��rf��rE��r���r���r���r���r������s.��� "c�������������������@���s����e�Zd�ZdZedddddddh�Zd%dd�Zd d��Zdd��Zdd��Z dd��Z dd��Zdd��Zdd��Z dd��Zdd��Zdd ��Zd!d"��Zd#d$��Zd S�)&r���zAn Rmail-style Babyl mailbox.�unseen�deletedZfiled�answered� forwardedZedited�resentNTc�����������������C���s���t��|�|||��i�|�_dS�)zInitialize a Babyl mailbox.N)r����r ����_labelsr���r���r���r���r ������s����zBabyl.__init__c�����������������C���s(���t��|�|�}t|t�r$|���|�j|<�|S�)r!���)r����r'���ru���r���� get_labelsrm��)r���r&���r*���r���r���r���r'������s���� z Babyl.addc�����������������C���s"���t��|�|��||�jkr|�j|=�dS�r����)r����r+���rm��r)���r���r���r���r+������s���� zBabyl.removec�����������������C���s*���t��|�||��t|t�r&|���|�j|<�dS�)r1���N)r����r3���ru���r���rn��rm��r2���r���r���r���r3������s���� zBabyl.__setitem__c����������� ������C���s����|���|�\}}|�j�|��|�j����t���}|�j���}|dt�ks\|sHq\|�|�td���q,t���}|�j���}|tks�|s|q�|�|�td���qd||�j� ���}|dks�t �|�j�|�}|�td�}t|� ��|��} | �|� ����||�jkr�| �|�j|���| S�)r<�������*** EOOH ***rh���r���)r����r��r{���r����rv���rw���r}���r~���r|���r��r��rk���r���r�����set_visiblerm��� set_labels) r���r*���r��r���original_headersr����Zvisible_headers�nZbodyr����r���r���r���r7������s,���� zBabyl.get_messagec����������� ������C���s����|���|�\}}|�j�|��|�j����t���}|�j���}|dt�ks\|sHq\|�|�td���q,|�j���}|tksv|s\qvq\|� ��}||�j� ���}|dks�t�|�j�|�}|�td�}||�S�)r,��ro��rh���r���) r����r��r{���r����rv���rw���r}���r~���r|���r����r��r��rk���) r���r*���r��r��rr��r����Zheadersrs��r����r���r���r���r@�����s"���� zBabyl.get_bytesc�����������������C���s���t��|��|��dt��S�)rB���rh���)rv���rw���r@���r|���r}���r)���r���r���r���r:���%��s����zBabyl.get_filec�����������������C���s<���|������t��}|�j���D�]}|�|��q|�|�j��t|�S�)z4Return a list of user-defined labels in the mailbox.)r����rZ��rm��rM���r[����difference_update�_special_labelsrF���)r����labelsZ label_listr���r���r���rn��)��s����zBabyl.get_labelsc�����������������C���s:��g�g��}}|�j��d��d}g�}|}|�j����}|�j����}|dt�kr�t|�t|�k�rd|�|tt����|�|��dd��|�j����dd���d�D��}|�|��q|dks�|dt�kr�t|�t|�k�r�|�|tt����q|s|�|tt����q�qtt t ||���|�_tt |��|�_t|�j�|�_ |�j��dd ��|�j����|�_dS�) r9��r���s���c�����������������S���s���g�|�]}|����r|�����qS�r���)�strip�rM���labelr���r���r���rY��@��s�����z'Babyl._generate_toc.<locals>.<listcomp>r����N����,����r����)r��r{���r����r��r}���r����r����r����r:��r;��r<��r����rm��r��r��)r���r=��r>��rA��Zlabel_listsr?��r����rv��r���r���r���r"��2��s4���� �zBabyl._generate_tocc�����������������C���sV���dt��}|dt��7�}|����}dd��|D��}|dd�|��t��7�}|d7�}|�|��dS�) r��s���BABYL OPTIONS:s ���Version: 5c�����������������s���s���|�]}|����V��qd�S�r,���)rd���rx��r���r���r���rN��U��s�����z*Babyl._pre_mailbox_hook.<locals>.<genexpr>s���Labels:rz��r{��N)r}���rn��r����r~���)r���r����Zbabylrv��r���r���r���r��P��s����zBabyl._pre_mailbox_hookc�����������������C���s���|��dt���dS�)r������Nr8��r��r���r���r���r��Z��s����zBabyl._pre_message_hookc�����������������C���s���|��td���dS�)r!��r{��Nr8��r��r���r���r���r��^��s����zBabyl._post_message_hookc�����������������C���sx��|�j����}t|t�r�g�}g�}|���D�]$}||�jkr>|�|��q$|�|��q$|�j��d��|D�]}|�j��d|������qZ|�j��d��|D�]}|�j��d|����d���q�|�j��t ��n|�j��dt ���t|t jj��rt ���}t j�|dd�}|�|��|�d��|���}|�j��|�d t ���|d k�s,|s��q,q�|�j��d t ���t|t��r�t ���} t j�| dd�} | �|�����| ���}|�j��|�d t ���|d k�s�|�sn�q�qnn>|�d��|���}|�j��|�d t ���|d k�s�|�s��q�q�|�d�}|�s��qf|�j��|�d t ����q�nTt|ttt jf��rt|t j��rJt�dtd ��|���}t|t��r`|��|�}|�d�d�}|d�dk�r�|�j��|d|���d t ���|�j��d t ���|�j��|d|���d t ���|�j��||d���d t ���n(|�j��d t �t ���|�j��|�d t ����nXt |d��rVt |d��r:t�dtd ��|j!}|���} d}|���}|�"d��rl|dd��d �}n|�"d��r�|dd��d �}|�j��|�d t ���|d k�s�|�sF|�r�d}|�j��d t ���|�| ��n�qڐqF|���}|�s�qf|�"d��r |dd��t �}n:|�"d��r(|dd��t �}n|�"d ��rD|dd��t �}|�j��|���q�nt#dt$|����|�j����}||fS�)z0Write message contents and return (start, stop).����1s���, s���,,���� rz��s���1,,Fr���rh���ro��r ��ri���rj���s��� r����rq���Nr����rl���rm���Trn���ro���rp���rt���)%r��r��ru���r���rn��ru��r����r~���rd���r}���r>���r&���r���rv���rw���rx���ry���rz���r{���r����r|����get_visiblerk���r����r����r����r����r����r����r����rg���r0��rX���rl���r����r����r����)r���r&���r��Zspecial_labelsrv��ry��Zorig_bufferZorig_generatorr����Z vis_bufferZ vis_generatorrl���Z body_startZoriginal_posZ first_passr��r���r���r���r#��b��s����� �� �� zBabyl._install_message)NT)r����r����r����r����� frozensetru��r ���r'���r+���r3���r7���r@���r:���rn��r"��r��r��r��r#��r���r���r���r���r������s&��� ��� c�������������������@���s*���e�Zd�ZdZd dd�Zdd��Zdd��ZdS�) r���z0Message with mailbox-format-specific properties.Nc�����������������C���s����t�|tjj�r4|��t�|���t�|t�r�|�|���n�t�|t�rP|��t� |���n~t�|t �rl|��t�|���nbt�|tj �r�|��t�|���nDt|d�r�|��t�|���n(|dkr�tjj�|���ntdt|����dS�)zInitialize a Message instance.rk���Nrt���)ru���r>���r&���r����_become_message�copyZdeepcopy�_explain_tor����r?���r����Zmessage_from_stringrv���� TextIOWrapperZmessage_from_filerX���Zmessage_from_binary_filer ���r����r����r%���r���r���r���r ������s���� zMessage.__init__c�����������������C���s4���t�|dg��}|jD�]}||kr|j|�|�j|<�qdS�)z0Assume the non-format-specific state of message.�_type_specific_attributesN)�getattr�__dict__)r���r&���Z type_specificr����r���r���r���r������s���� zMessage._become_messagec�����������������C���s���t�|t�rdS�td��dS�)z:Copy format-specific state to message insofar as possible.Nz Cannot convert to specified type)ru���r���r����r%���r���r���r���r������s���� zMessage._explain_to)N)r����r����r����r����r ���r���r���r���r���r���r���r������s��� c�������������������@���s|���e�Zd�ZdZdddgZddd�Zdd ��Zd d��Zdd ��Zdd��Z dd��Z dd��Zdd��Zdd��Z dd��Zdd��Zdd��ZdS�)r ���z)Message with Maildir-specific properties.�_subdir�_info�_dateNc�����������������C���s&���d|�_�d|�_t���|�_t�|�|��dS�)z%Initialize a MaildirMessage instance.r����r����N)r���r���r����r���r���r ���r%���r���r���r���r ������s���� zMaildirMessage.__init__c�����������������C���s���|�j�S�)zReturn 'new' or 'cur'.)r���rD���r���r���r���r�������s����zMaildirMessage.get_subdirc�����������������C���s(���|dks|dkr||�_�ntd|���dS�)zSet subdir to 'new' or 'cur'.r����r����z!subdir must be 'new' or 'cur': %sN)r���rf���)r���r����r���r���r���r������s����zMaildirMessage.set_subdirc�����������������C���s"���|�j��d�r|�j�dd��S�dS�dS�)�*Return as a string the flags that are set.�2,r����Nr����)r���r����rD���r���r���r���� get_flags ��s����zMaildirMessage.get_flagsc�����������������C���s���dd��t|���|�_dS�)�)Set the given flags and unset all others.r���r����N)r����r��r���)r����flagsr���r���r���� set_flags��s����zMaildirMessage.set_flagsc�����������������C���s$���|���d�t|�����t|�B����dS��z.Set the given flag(s) without changing others.r����N�r���r����rZ��r����r����flagr���r���r����add_flag��s����zMaildirMessage.add_flagc�����������������C���s,���|�����r(|��d�t|������t|�����dS�)�7Unset the given string flag(s) without changing others.r����N)r���r���r����rZ��r���r���r���r����remove_flag��s����zMaildirMessage.remove_flagc�����������������C���s���|�j�S�)z<Return delivery date of message, in seconds since the epoch.)r���rD���r���r���r���r������s����zMaildirMessage.get_datec�����������������C���s6���zt�|�|�_W�n"�tk r0���td|��d�Y�nX�dS�)z9Set delivery date of message, in seconds since the epoch.zcan't convert to float: %sN)�floatr���rf���r����)r����dater���r���r���r����"��s����zMaildirMessage.set_datec�����������������C���s���|�j�S�)z%Get the message's "info" as a string.)r���rD���r���r���r���r����)��s����zMaildirMessage.get_infoc�����������������C���s&���t�|t�r||�_ntdt|����dS�)z Set the message's "info" string.zinfo must be a string: %sN)ru���r����r���r����r����)r����infor���r���r���r����-��s���� zMaildirMessage.set_infoc�����������������C���s���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|k�r|�d��d|k�r�|�d��n�t�|t��r�t |�����}d|k�rD|�d ��d|k�rX|�d ��d|k�rl|�d��d|k�r�|�d��nt�|t��r�ntdt|����dS�)z;Copy Maildir-specific state to message insofar as possible.�S�Rr�����O�T�D�F�A� MAILER-DAEMONrh���replied�flaggedri��rj���Prk���$Cannot convert to specified type: %sN)ru���r ���r���r���r����r����r����r����r1��rZ��r���r(��r����r5��r���rI��r���� add_labelr���r����r����)r���r&���r���r���r���r���r���4��sP���� �zMaildirMessage._explain_to)N)r����r����r����r����r���r ���r����r����r���r���r���r���r����r����r����r����r���r���r���r���r���r ������s��� c�������������������@���sZ���e�Zd�ZdZdgZddd�Zdd��Zddd �Zd d��Zdd ��Z dd��Z dd��Zdd��ZdS�)r1��z/Message with mbox- or MMDF-specific properties.�_fromNc�����������������C���sV���|���dd��t|tjj�rF|���}|dk rF|�d�rF|���|dd����t�|�|��dS�)z'Initialize an mboxMMDFMessage instance.r���TNzFrom rs���)r(��ru���r>���r&���r���r3��r����r ���)r���r&���r-��r���r���r���r ���e��s����z_mboxMMDFMessage.__init__c�����������������C���s���|�j�S�)z Return contents of "From " line.)r���rD���r���r���r���r2��n��s����z_mboxMMDFMessage.get_fromc�����������������C���s4���|dk r*|dkrt����}|dt��|��7�}||�_dS�)z>Set "From " line, formatting and appending time_ if specified.NT� )r����r5��r4��r���)r���r.��Ztime_r���r���r���r(��r��s ����z_mboxMMDFMessage.set_fromc�����������������C���s���|���dd�|���dd��S�)r����Statusr�����X-Status)r6���rD���r���r���r���r���z��s����z_mboxMMDFMessage.get_flagsc�����������������C���s����t�|�}d\}}dD�]}||kr||7�}|�|��qdD�]}||kr8||7�}|�|��q8|d�t|��7�}z|��d|��W�n �tk r����|��d|��Y�nX�z|��d|��W�n �tk r����|��d|��Y�nX�dS�)r���)r����r����)r���r���)r���r���r���r����r���r���N)rZ��r+���r����r���replace_headerr/���Z add_header)r���r���Zstatus_flagsZ xstatus_flagsr���r���r���r���r���~��s&����z_mboxMMDFMessage.set_flagsc�����������������C���s$���|���d�t|�����t|�B����dS�r���r���r���r���r���r���r������s����z_mboxMMDFMessage.add_flagc�����������������C���s4���d|�ksd|�kr0|���d�t|�����t|�����dS�)r���r���r���r����Nr���r���r���r���r���r������s����z_mboxMMDFMessage.remove_flagc�������������� ���C���s���t�|t�r�t|�����}d|kr(|�d��d|kr:|�d��d|krL|�d��d|kr^|�d��d|krp|�d��|d =�|d =�d�|�������dd ���}z|� t �t� |d����W�n�ttfk r����Y�nX��n t�|t�r�|�|������|�|������n�t�|t��rZt|�����}d|k�r$|�d��d|k�r8|�d��d|k�rL|�d��|d =�|d =�n�t�|t��r�t|�����}d|k�r�|�d��d|k�r�|�d��d|k�r�|�d��|d =�|d =�nt�|t��r�ntdt|����d S�)zACopy mbox- or MMDF-specific state to message insofar as possible.r���r����r���r���r���r���r���r���Zstatuszx-statusr������Nz%a %b %d %H:%M:%S %Yrh��r���r���ri��rj��r���)ru���r ���rZ��r���r����r���r����r2��r����r�����calendarZtimegmr�����strptimerf���� OverflowErrorr1��r���r(��r���rI��r���r���r���r����r����)r���r&���r���Z maybe_dater���r���r���r������sb���� � �z_mboxMMDFMessage._explain_to)N)N) r����r����r����r����r���r ���r2��r(��r���r���r���r���r���r���r���r���r���r1��`��s��� r1��c�������������������@���s���e�Zd�ZdZdS�)r ���z&Message with mbox-specific properties.N�r����r����r����r����r���r���r���r���r ������s���c�������������������@���sH���e�Zd�ZdZdgZddd�Zdd��Zdd ��Zd d��Zdd ��Z dd��Z dS�)r���z$Message with MH-specific properties.� _sequencesNc�����������������C���s���g�|�_�t�|�|��dS�)z!Initialize an MHMessage instance.N)r���r���r ���r%���r���r���r���r ������s����zMHMessage.__init__c�����������������C���s���|�j�dd��S�)z4Return a list of sequences that include the message.N)r���rD���r���r���r���rH�����s����zMHMessage.get_sequencesc�����������������C���s���t�|�|�_dS�)z3Set the list of sequences that include the message.N)rF���r���)r���r`��r���r���r���rb�����s����zMHMessage.set_sequencesc�����������������C���s6���t�|t�r"||�jkr2|�j�|��ntdt|����dS�)z8Add sequence to list of sequences including the message.zsequence type must be str: %sN)ru���r����r���r����r����r�����r���rg��r���r���r���rI�����s���� zMHMessage.add_sequencec�����������������C���s*���z|�j��|��W�n�tk r$���Y�nX�dS�)zARemove sequence from the list of sequences including the message.N)r���r+���rf���r���r���r���r����remove_sequence���s����zMHMessage.remove_sequencec�����������������C���sF��t�|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�|����D�]}|�|��q�n`t�|t ��r$t|�����}d|k�r|� d��d|k�rB|� d��nt�|t��r2ntdt |����d S�)z6Copy MH-specific state to message insofar as possible.rh��r����r���r���r���r���r����ROr���r���rj��r���N)ru���r ���rZ��rH��r����r���r1��r���rI��r���r���r���r����r����)r���r&���r`��rg��r���r���r���r������sB���� �zMHMessage._explain_to)N)r����r����r����r����r���r ���rH��rb��rI��r���r���r���r���r���r���r������s��� c�������������������@���sb���e�Zd�ZdZddgZddd�Zdd��Zd d ��Zdd��Zd d��Z dd��Z dd��Zdd��Zdd��Z dS�)r���z'Message with Babyl-specific properties.rm���_visibleNc�����������������C���s���g�|�_�t��|�_t�|�|��dS�)z#Initialize a BabylMessage instance.N)rm��r���r���r ���r%���r���r���r���r ���"��s����zBabylMessage.__init__c�����������������C���s���|�j�dd��S�)z'Return a list of labels on the message.N)rm��rD���r���r���r���rn��(��s����zBabylMessage.get_labelsc�����������������C���s���t�|�|�_dS�)z&Set the list of labels on the message.N)rF���rm��)r���rv��r���r���r���rq��,��s����zBabylMessage.set_labelsc�����������������C���s6���t�|t�r"||�jkr2|�j�|��ntdt|����dS�)z+Add label to list of labels on the message.zlabel must be a string: %sN)ru���r����rm��r����r����r�����r���ry��r���r���r���r���0��s���� zBabylMessage.add_labelc�����������������C���s*���z|�j��|��W�n�tk r$���Y�nX�dS�)z4Remove label from the list of labels on the message.N)rm��r+���rf���r���r���r���r����remove_label8��s����zBabylMessage.remove_labelc�����������������C���s ���t�|�j�S�)z3Return a Message representation of visible headers.�r���r���rD���r���r���r���r��?��s����zBabylMessage.get_visiblec�����������������C���s���t�|�|�_dS�)z2Set the Message representation of visible headers.Nr���)r���Zvisibler���r���r���rp��C��s����zBabylMessage.set_visiblec�����������������C���sb���|�j����D�](}||�kr*|�j��||�|���q |�j�|=�q dD�]$}||�kr8||�j�kr8|�|�|�j�|<�q8dS�)z9Update and/or sensibly generate a set of visible headers.)ZDateZFromzReply-ToZToZCCZSubjectN)r���rG���r���)r����headerr���r���r����update_visibleG��s���� zBabylMessage.update_visiblec�����������������C���sr��t�|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|k�r|�d��d|k�rn|�d��nTt�|t ��rP|� |������|����D�]}|�|���q<nt�|t ��r^ntdt|����dS�)z9Copy Babyl-specific state to message insofar as possible.rh��r����r���rk��rl��r���rj��r���ri��r���r���r���r���r���r���r���N)ru���r ���rZ��rn��r����r���r1��r���rI��r���rp��r��r���r���r����r����)r���r&���rv��ry��r���r���r���r���R��sH���� �zBabylMessage._explain_to)N)r����r����r����r����r���r ���rn��rq��r���r���r��rp��r���r���r���r���r���r���r�����s��� c�������������������@���s���e�Zd�ZdZdS�)r ���z&Message with MMDF-specific properties.Nr���r���r���r���r���r ���|��s���c�������������������@���s����e�Zd�ZdZd&dd�Zd'dd�Zd(dd�Zd)d d �Zd*dd�Zd d��Z dd��Z d+dd�Zdd��Zdd��Z dd��Zdd��Zdd��Zdd��Zd d!��Zd"d#��Zed$d%���ZdS�),r����zA read-only wrapper of a file.Nc�����������������C���s$���||�_�|dkr|���|�_n||�_dS�)zInitialize a _ProxyFile.N)r��r���_pos)r���r�����posr���r���r���r ������s����z_ProxyFile.__init__c�����������������C���s���|���||�jj�S��zRead bytes.)�_readr��rk����r����sizer���r���r���rk������s����z_ProxyFile.readc�����������������C���s���|���||�jj�S�r���)r���r���read1r���r���r���r���r������s����z_ProxyFile.read1c�����������������C���s���|���||�jj�S�)zRead a line.)r���r��r����r���r���r���r���r�������s����z_ProxyFile.readlinec�����������������C���s<���g�}|�D�].}|��|��|dk r|t|�8�}|dkr�q8q|S�)zRead multiple lines.Nr���)r����r����)r����sizehintrU���r����r���r���r���� readlines���s���� z_ProxyFile.readlinesc�����������������c���s���|�����}|sdS�|V��q�dS�)zIterate over lines.N)r����)r���r����r���r���r���rL������s����z_ProxyFile.__iter__c�����������������C���s���|�j�S�)zReturn the position.)r���rD���r���r���r���r�����s����z_ProxyFile.tellr���c�����������������C���s4���|dkr|�j��|�j��|�j��||��|�j����|�_dS�)zChange position.r����N�r��r{���r���r���r����offset�whencer���r���r���r{������s����z_ProxyFile.seekc�����������������C���s0���t�|�d�r,zt�|�jd�r"|�j����W�5�|�`X�dS�)zClose the file.r��rc���N)rX���r��rc���rD���r���r���r���rc������s ���� z_ProxyFile.closec�����������������C���s2���|dkrd}|�j��|�j��||�}|�j����|�_|S�)z"Read size bytes using read_method.Nrq���r���)r���r����read_methodrU���r���r���r���r������s����z_ProxyFile._readc�����������������C���s���|�S�)z$Context management protocol support.r���rD���r���r���r���� __enter__���s����z_ProxyFile.__enter__c�����������������G���s���|������d�S�r,���)rc���)r����excr���r���r����__exit__���s����z_ProxyFile.__exit__c�����������������C���s ���|�j����S�r,���)r���readablerD���r���r���r���r������s����z_ProxyFile.readablec�����������������C���s ���|�j����S�r,���)r���writablerD���r���r���r���r������s����z_ProxyFile.writablec�����������������C���s ���|�j����S�r,���)r���seekablerD���r���r���r���r������s����z_ProxyFile.seekablec�����������������C���s ���|�j����S�r,���)r��r]���rD���r���r���r���r]������s����z_ProxyFile.flushc�����������������C���s&���t�|�d�sdS�t�|�jd�sdS�|�jjS�)Nr��TrF��F)rX���r��rF��rD���r���r���r���rF�����s ���� z_ProxyFile.closed)N)N)N)N)N)r���)r����r����r����r����r ���rk���r���r����r���rL���r��r{���rc���r���r���r���r���r���r���r]����propertyrF��r���r���r���r���r�������s&��� r����c�������������������@���s<���e�Zd�ZdZddd�Zdd��Zddd �Zd d��Zdd ��ZdS�)r/��z&A read-only wrapper of part of a file.Nc�����������������C���s���t��|�||��||�_||�_dS�)zInitialize a _PartialFile.N)r����r ����_start�_stop)r���r����r��r��r���r���r���r ������s����z_PartialFile.__init__c�����������������C���s���t��|��|�j�S�)z*Return the position with respect to start.)r����r��r���rD���r���r���r���r�����s����z_PartialFile.tellr���c�����������������C���s<���|dkr|�j�|�_d}n|dkr*|�j|�_d}t�|�||��dS�)z8Change position, possibly with respect to start or stop.r���r����r����N)r���r���r���r����r{���r���r���r���r���r{������s����z_PartialFile.seekc�����������������C���sB���|�j�|�j�}|dkrdS�|dks0|dk�s0||kr4|}t�|�||�S�)z;Read size bytes using read_method, honoring start and stop.r���r&��N)r���r���r����r���)r���r���r���Z remainingr���r���r���r������s����z_PartialFile._readc�����������������C���s���t�|�d�r|�`d�S�)Nr��)rX���r��rD���r���r���r���rc�����s���� z_PartialFile.close)NN)r���) r����r����r����r����r ���r��r{���r���rc���r���r���r���r���r/�����s��� r/��Tc�������������� ���C���s���d}�zbt�rpzt��|�t�jt�jB���W�nJ�tk rn�}�z,|jtjtjtjfkr\t d|�j ���n��W�5�d}~X�Y�nX�|�rfzt|�j d��}|����W�nB�tk r��}�z$|jtjtjfkr�W�Y��W�dS���W�5�d}~X�Y�nX�z`zt �|j |�j d���d}W�n2�ttfk �r$���t �|j |�j d���d}Y�nX�t �|j ��W�n0�tk �rd���t �|j ��t d|�j ���Y�nX�W�n8���t��r�t��|�t�j��|�r�t �|�j d�����Y�nX�dS�)z(Lock file f using lockf and dot locking.Fzlockf: lock unavailable: %sN�.lockTzdot lock unavailable: %s)�fcntl�lockfZLOCK_EXZLOCK_NBr����r����ZEAGAINr��r��r���r����r��rc���r���r����r����r����r����rc��r����r+����LOCK_UN)r����r��Zdotlock_doner����Zpre_lockr���r���r���r �� ��sL����� �r ��c�����������������C���s8���t�rt��|�t�j��tj�|�jd��r4t�|�jd���dS�)z*Unlock file f using lockf and dot locking.r���N)r���r���r���r���r���r����r����r+����r����r���r���r���r��4��s����r��c�������������� ���C���s<���t��|�t�jt�jB�t�jB�d�}zt|�d�W��S�t��|��X�dS�)zCCreate a file if it doesn't exist and open for reading and writing.r����r����N)r���r����r����rC���O_RDWRrc���)r����fdr���r���r���r����;��s����r����c�����������������C���s$���t�d|�tt����t���t���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����r���r����)r���r���r���r���r��C��s�����r��c�����������������C���s$���|������ttd�r t�|������dS�)z0Ensure changes to file f are physically on disk.�fsyncN)r]���rX���r���r����filenor���r���r���r���r��I��s���� r��c�����������������C���s���t�|���|�����dS�)z:Close file f, ensuring all changes are physically on disk.N)r��rc���r���r���r���r���r����O��s����r����c�������������������@���s���e�Zd�ZdZdS�)r���z"Raised for module-specific errors.Nr���r���r���r���r���r���U��s���c�������������������@���s���e�Zd�ZdZdS�)r���z:The specified mailbox does not exist and won't be created.Nr���r���r���r���r���r���X��s���c�������������������@���s���e�Zd�ZdZdS�)r���z>The specified mailbox is not empty and deletion was requested.Nr���r���r���r���r���r���[��s���c�������������������@���s���e�Zd�ZdZdS�)r���z)Another process caused an action to fail.Nr���r���r���r���r���r���^��s���c�������������������@���s���e�Zd�ZdZdS�)r���z)A file appears to have an invalid format.Nr���r���r���r���r���r���a��s���)T)0r����r���r����r���r����r����r���r����r>���Z email.messageZemail.generatorrv���r8���r����ImportError�__all__r}���rd���r���r���r����r%��r���r���r���r���r&���r���r ���r1��r ���r���r���r ���r����r/��r ��r��r����r��r��r����� Exceptionr���r���r���r���r���r���r���r���r����<module>���s���� ����������h��8�DB4-��3�z%mqH_c' *