???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5dE3 ã                   @   sN  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Zd dl
Z
d dlZzd dlZW n ek
r„   dZY nX dddddddd	d
ddddddddgZe j d¡ZG dd„ dƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ dejjƒZG dd	„ d	eƒZG d d!„ d!eƒZG d"d
„ d
eƒZG d#d„ deƒZG d$d„ deƒZG d%d„ deƒZ G d&d'„ d'ƒZ!G d(d)„ d)e!ƒZ"d<d+d,„Z#d-d.„ Z$d/d0„ Z%d1d2„ Z&d3d4„ Z'd5d6„ Z(G d7d„ de)ƒZ*G d8d„ de*ƒZ+G d9d„ de*ƒZ,G d:d„ de*ƒZ-G d;d„ de*ƒZ.dS )=é    NÚMailboxÚMaildirÚmboxÚMHÚBabylÚMMDFÚMessageÚMaildirMessageÚmboxMessageÚ	MHMessageÚBabylMessageÚMMDFMessageÚErrorÚNoSuchMailboxErrorÚNotEmptyErrorÚExternalClashErrorÚFormatErrorÚasciic                   @   s  e Zd ZdBdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ ZdCdd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ ZdDd/d0„Zd1d2„ ZdEd3d4„Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Z d?Z!dFd@dA„Z"dS )Gr   NTc                 C   s    t j t j |¡¡| _|| _d S ©N)ÚosÚpathÚabspathÚ
expanduserÚ_pathÚ_factory©Úselfr   ÚfactoryÚcreate© r   ú/usr/lib64/python3.8/mailbox.pyÚ__init__$   s    zMailbox.__init__c                 C   s   t dƒ‚d S ©Nz&Method must be implemented by subclass©ÚNotImplementedError©r   Úmessager   r   r    Úadd)   s    zMailbox.addc                 C   s   t dƒ‚d S r"   r#   ©r   Úkeyr   r   r    Úremove-   s    zMailbox.removec                 C   s   |   |¡ d S r   )r*   r(   r   r   r    Ú__delitem__1   s    zMailbox.__delitem__c                 C   s(   z|   |¡ W n tk
r"   Y nX d S r   )r*   ÚKeyErrorr(   r   r   r    Údiscard4   s    zMailbox.discardc                 C   s   t dƒ‚d S r"   r#   ©r   r)   r&   r   r   r    Ú__setitem__;   s    zMailbox.__setitem__c                 C   s*   z|   |¡W S  tk
r$   | Y S X d S r   )Ú__getitem__r,   )r   r)   Údefaultr   r   r    Úget?   s    zMailbox.getc              
   C   sB   | j s|  |¡S t |  |¡¡}|   |¡W  5 Q R £ S Q R X d S r   )r   Úget_messageÚ
contextlibÚclosingÚget_file)r   r)   Úfiler   r   r    r0   F   s    
zMailbox.__getitem__c                 C   s   t dƒ‚d S r"   r#   r(   r   r   r    r3   N   s    zMailbox.get_messagec                 C   s   t  |  |¡¡ ¡ S r   ©ÚemailÚmessage_from_bytesÚ	get_bytesZ	as_stringr(   r   r   r    Ú
get_stringR   s    zMailbox.get_stringc                 C   s   t dƒ‚d S r"   r#   r(   r   r   r    r;   Y   s    zMailbox.get_bytesc                 C   s   t dƒ‚d S r"   r#   r(   r   r   r    r6   ]   s    zMailbox.get_filec                 C   s   t dƒ‚d S r"   r#   ©r   r   r   r    Úiterkeysa   s    zMailbox.iterkeysc                 C   s   t |  ¡ ƒS r   )Úlistr>   r=   r   r   r    Úkeyse   s    zMailbox.keysc              	   c   s>   |   ¡ D ]0}z| | }W n tk
r0   Y qY nX |V  qd S r   ©r>   r,   ©r   r)   Úvaluer   r   r    Ú
itervaluesi   s    
zMailbox.itervaluesc                 C   s   |   ¡ S r   )rD   r=   r   r   r    Ú__iter__r   s    zMailbox.__iter__c                 C   s   t |  ¡ ƒS r   )r?   rD   r=   r   r   r    Úvaluesu   s    zMailbox.valuesc              	   c   sB   |   ¡ D ]4}z| | }W n tk
r0   Y qY nX ||fV  qd S r   rA   rB   r   r   r    Ú	iteritemsy   s    
zMailbox.iteritemsc                 C   s   t |  ¡ ƒS r   )r?   rG   r=   r   r   r    Úitems‚   s    zMailbox.itemsc                 C   s   t dƒ‚d S r"   r#   r(   r   r   r    Ú__contains__†   s    zMailbox.__contains__c                 C   s   t dƒ‚d S r"   r#   r=   r   r   r    Ú__len__Š   s    zMailbox.__len__c                 C   s   |   ¡ D ]}|  |¡ qd S r   )r@   r-   r(   r   r   r    ÚclearŽ   s    zMailbox.clearc                 C   s4   z| | }W n t k
r$   | Y S X |  |¡ |S r   )r,   r-   )r   r)   r1   Úresultr   r   r    Úpop“   s    

zMailbox.popc                 C   s*   |   ¡ D ]}||  |¡f  S tdƒ‚d S )NzNo messages in mailbox)r>   rM   r,   r(   r   r   r    Úpopitemœ   s    zMailbox.popitemc              	   C   st   t |dƒr| ¡ }nt |dƒr(| ¡ }n|}d}|D ].\}}z|| |< W q4 tk
r`   d}Y q4X q4|rptdƒ‚d S )NrG   rH   FTzNo message with key(s))ÚhasattrrG   rH   r,   )r   ÚargÚsourceZbad_keyr)   r&   r   r   r    Úupdate£   s    



zMailbox.updatec                 C   s   t dƒ‚d S r"   r#   r=   r   r   r    Úflush´   s    zMailbox.flushc                 C   s   t dƒ‚d S r"   r#   r=   r   r   r    Úlock¸   s    zMailbox.lockc                 C   s   t dƒ‚d S r"   r#   r=   r   r   r    Úunlock¼   s    zMailbox.unlockc                 C   s   t dƒ‚d S r"   r#   r=   r   r   r    ÚcloseÀ   s    zMailbox.closec                 C   s.   z|  d¡W S  tk
r(   tdƒ‚Y nX 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    zMailbox._string_to_bytesFc           	      C   sü  t |tjjƒrvt ¡ }tj ||d¡}| |¡ | 	d¡ | 
¡ }| dt¡}| |¡ | jrr| t¡sr| t¡ n‚t |tttjfƒrt |tjƒr¬t dtd¡ | ¡ }t |tƒrÀ|  |¡}|rÐ| dd¡}| dt¡}| |¡ | jrø| t¡sø| t¡ nòt|dƒrèt|dƒr2t d	td¡ |j}d }| ¡ }| d
¡r\|d d… d }n| d¡rx|d d… d }|s‚qÂ|r¤| d¡r¤d|dd …  }| dt¡}| |¡ |}q6| jrø|rø| t¡sø| t¡ ntdt|ƒ ƒ‚d S )Nr   ó   
ú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 insteadó   
éþÿÿÿó   éÿÿÿÿó   From s   >From é   úInvalid message type: %s)Ú
isinstancer9   r&   r   ÚioÚBytesIOÚ	generatorÚBytesGeneratorÚflattenÚseekr^   ÚreplaceÚlinesepÚwriteÚ_append_newlineÚendswithÚstrÚbytesÚStringIOÚwarningsÚwarnÚDeprecationWarningÚgetvaluerZ   rO   r_   ÚreadlineÚ
startswithÚ	TypeErrorÚtype)	r   r&   ÚtargetZmangle_from_r_   ÚgenÚdataZlastlineÚliner   r   r    Ú_dump_messageÑ   s`    


 ÿ


 ÿ
zMailbox._dump_message)NT)N)N)N)F)#Ú__name__Ú
__module__Ú__qualname__r!   r'   r*   r+   r-   r/   r2   r0   r3   r<   r;   r6   r>   r@   rD   rE   rF   rG   rH   rI   rJ   rK   rM   rN   rR   rS   rT   rU   rV   rZ   rr   rƒ   r   r   r   r    r   !   s@   

		
	
c                   @   sÖ   e Zd ZdZd5dd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,Zd-d.„ Zd/d0„ Zd1d2„ Zd3d4„ ZdS )6r   ú:NTc                 C   s¬   t  | |||¡ tj | jd¡tj | jd¡tj | jd¡dœ| _tj | j¡sŠ|r€t | jd¡ | j 	¡ D ]}t |d¡ qln
t
| jƒ‚i | _dddœ| _d| _d| _d S )	NÚtmpÚnewÚcur)rˆ   r‰   rŠ   éÀ  r   )rŠ   r‰   gš™™™™™¹?)r   r!   r   r   Újoinr   Ú_pathsÚexistsÚmkdirrF   r   Ú_tocÚ_toc_mtimesÚ
_last_readÚ_skewfactor)r   Údirnamer   r   r   r   r   r    r!     s    ý
zMaildir.__init__c              
   C   s~  |   ¡ }z|  ||¡ W n* tk
rB   | ¡  t |j¡ ‚ Y nX t|ƒ t|t	ƒr|| 
¡ }| j| ¡  }|| jkr„d}nd}d}tj |j¡ | j¡d }tj | j||| ¡}t|t	ƒrÞt |jtj |j¡| ¡ f¡ zLzt |j|¡ W n( ttfk
r   t |j|¡ Y nX t |j¡ W nN tk
rx } z.t |j¡ |jtjkrftd| ƒ‚n‚ W 5 d }~X Y nX |S )NÚ r‰   r   z$Name clash with existing message: %s)Ú_create_tmprƒ   ÚBaseExceptionrV   r   r*   ÚnameÚ_sync_closerh   r	   Ú
get_subdirÚcolonÚget_infor   ÚbasenameÚsplitrŒ   r   ÚutimeÚgetatimeÚget_dateÚlinkÚAttributeErrorÚPermissionErrorÚrenameÚOSErrorÚerrnoZEEXISTr   )r   r&   Ztmp_fileÚsubdirÚsuffixÚuniqÚdestÚer   r   r    r'   !  sF    


ÿÿzMaildir.addc                 C   s    t  t j | j|  |¡¡¡ d S r   )r   r*   r   rŒ   r   Ú_lookupr(   r   r   r    r*   K  s    zMaildir.removec              	   C   s,   z|   |¡ W n ttfk
r&   Y nX d S r   )r*   r,   ÚFileNotFoundErrorr(   r   r   r    r-   O  s    zMaildir.discardc                 C   sÊ   |   |¡}|  |¡}|   |¡}t|tƒr.|}n|}tj |¡}| j|kr`| j| | j¡d  }nd}|  	|¡ tj 
| j|¡}	tj 
| j||| ¡}
t|tƒrºt |	tj |	¡| ¡ f¡ t |	|
¡ d S )Nrd   r•   )r­   r'   rh   r	   r   r   r”   r›   rž   r-   rŒ   r   rŸ   r    r¡   r¥   )r   r)   r&   Zold_subpathZtemp_keyZtemp_subpathZdominant_subpathr¨   r©   Ztmp_pathÚnew_pathr   r   r    r/   W  s$    






ÿzMaildir.__setitem__c              	   C   s¢   |   |¡}ttj | j|¡dƒ }| jr4|  |¡}nt|ƒ}W 5 Q R X tj |¡\}}| 	|¡ | j
|kr€| | | j
¡d ¡ | tj tj | j|¡¡¡ |S )NÚrbrd   )r­   Úopenr   r   rŒ   r   r   r	   rž   Ú
set_subdirr›   Úset_infoÚset_dateÚgetmtime)r   r)   ZsubpathÚfÚmsgr¨   r˜   r   r   r    r3   r  s    


zMaildir.get_messagec              
   C   sD   t tj | j|  |¡¡dƒ}| ¡  td¡W  5 Q R £ S Q R X d S )Nr°   r[   )	r±   r   r   rŒ   r   r­   r^   ro   rp   ©r   r)   r¶   r   r   r    r;     s    zMaildir.get_bytesc                 C   s$   t tj | j|  |¡¡dƒ}t|ƒS )Nr°   )r±   r   r   rŒ   r   r­   Ú
_ProxyFiler¸   r   r   r    r6   †  s    zMaildir.get_filec              	   c   sF   |   ¡  | jD ]2}z|  |¡ W n tk
r8   Y qY nX |V  qd S r   )Ú_refreshr   r­   r,   r(   r   r   r    r>   ‹  s    

zMaildir.iterkeysc                 C   s   |   ¡  || jkS r   )rº   r   r(   r   r   r    rI   •  s    zMaildir.__contains__c                 C   s   |   ¡  t| jƒS r   )rº   Úlenr   r=   r   r   r    rJ   š  s    zMaildir.__len__c                 C   s   d S r   r   r=   r   r   r    rS   Ÿ  s    zMaildir.flushc                 C   s   d S r   r   r=   r   r   r    rT   ¥  s    zMaildir.lockc                 C   s   d S r   r   r=   r   r   r    rU   ©  s    zMaildir.unlockc                 C   s   d S r   r   r=   r   r   r    rV   ­  s    zMaildir.closec                 C   s\   g }t  | j¡D ]F}t|ƒdkr|d dkrt j t j | j|¡¡r| |dd … ¡ q|S )Né   r   Ú.)r   Úlistdirr   r»   r   ÚisdirrŒ   Úappend©r   rL   Úentryr   r   r    Úlist_folders±  s    ÿzMaildir.list_foldersc                 C   s    t tj | jd| ¡| jddS )Nr½   F©r   r   )r   r   r   rŒ   r   r   ©r   Úfolderr   r   r    Ú
get_folderº  s    þzMaildir.get_folderc                 C   s\   t j | jd| ¡}t|| jd}t j |d¡}t j |¡sXt  t  |t j	t j
B d¡¡ |S )Nr½   ©r   Zmaildirfolderé¶  )r   r   rŒ   r   r   r   rŽ   rV   r±   ÚO_CREATÚO_WRONLY)r   rÆ   r   rL   Zmaildirfolder_pathr   r   r    Ú
add_folderÀ  s    ÿzMaildir.add_folderc                 C   s  t j | jd| ¡}t  t j |d¡¡t  t j |d¡¡ D ](}t|ƒdk sX|d dkr<td| ƒ‚q<t  |¡D ]B}|dkrp|dkrp|dkrpt j t j ||¡¡rptd||f ƒ‚qpt j|d	d
D ]F\}}}|D ]}t  	t j ||¡¡ qÐ|D ]}t  
t j ||¡¡ qîqÂt  
|¡ d S )Nr½   r‰   rŠ   r¼   r   zFolder contains message(s): %srˆ   z%Folder contains subdirectory '%s': %sF)Útopdown)r   r   rŒ   r   r¾   r»   r   r¿   Úwalkr*   Úrmdir)r   rÆ   r   rÂ   ÚrootÚdirsÚfilesr   r   r    Úremove_folderÊ  s&    ÿÿÿzMaildir.remove_folderc                 C   sX   t   ¡ }t tj | jd¡¡D ]4}tj | jd|¡}|tj |¡ dkrt |¡ qd S )Nrˆ   i@ú )Útimer   r¾   r   rŒ   r   r    r*   )r   ÚnowrÂ   r   r   r   r    ÚcleanÝ  s
    zMaildir.cleanr¼   c                 C   sØ   t   ¡ }t ¡ }d|kr$| dd¡}d|kr8| dd¡}dt|ƒt|d d ƒt ¡ tj|f }tj	 
| jd|¡}zt |¡ W nF tk
rÆ   t jd7  _zt|ƒW  Y S  tk
rÀ   Y nX Y nX td	| ƒ‚d S )
Nú/z\057r‡   z\072z%s.M%sP%sQ%s.%sr¼   g    €„.Arˆ   z&Name clash prevented file creation: %s)rÔ   ÚsocketÚgethostnamero   Úintr   Úgetpidr   Ú_countr   rŒ   r   Ústatr®   Ú_create_carefullyÚFileExistsErrorr   )r   rÕ   Zhostnamerª   r   r   r   r    r–   ç  s,     ÿÿzMaildir._create_tmpc                 C   sØ   t   ¡ | j d| j kr^d}| jD ]2}tj | j| ¡}|| j| krJd}|| j|< q"|s^d S i | _| jD ]^}| j| }t 	|¡D ]D}tj 
||¡}tj |¡r¢q‚| | j¡d }tj 
||¡| j|< q‚qjt   ¡ | _d S )Né   FTr   )rÔ   r’   r“   r‘   r   r   rµ   r   r   r¾   rŒ   r¿   rž   r›   )r   Zrefreshr¨   Úmtimer   rÂ   Úprª   r   r   r    rº   ÿ  s&    


zMaildir._refreshc                 C   s€   z.t j t j | j| j| ¡¡r,| j| W S W n tk
rB   Y nX |  ¡  z| j| W S  tk
rz   td| ƒd ‚Y nX d S ©NúNo message with key: %s)r   r   rŽ   rŒ   r   r   r,   rº   r(   r   r   r    r­   #  s    zMaildir._lookupc                 C   sX   t | dƒs|  ¡ | _z| t| jƒ W S  tk
r:   Y d S  tk
rP   Y qY qX qd S )NÚ_onetime_keys)rO   r>   rå   ÚnextÚStopIterationr,   r=   r   r   r    ræ   1  s    

zMaildir.next)NT)r„   r…   r†   r›   r!   r'   r*   r-   r/   r3   r;   r6   r>   rI   rJ   rS   rT   rU   rV   rÃ   rÇ   rÌ   rÓ   rÖ   rÜ   r–   rº   r­   ræ   r   r   r   r    r     s4   
*
	
$c                   @   s   e Zd Zd#dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd$dd „Zd!d"„ ZdS )%Ú_singlefileMailboxNTc              
   C   s¾   t  | |||¡ zt| jdƒ}W nn tk
rŽ } zP|jtjkr\|rPt| jdƒ}q~t| jƒ‚n"|jtjtj	fkr|t| jdƒ}n‚ W 5 d }~X Y nX || _
d | _d| _d| _d| _d| _d | _d S )Núrb+zwb+r°   r   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< |  jd7  _d| _| jd S )Nr¼   T)r­   Ú_append_messager   rî   rð   r%   r   r   r    r'   X  s
    z_singlefileMailbox.addc                 C   s   |   |¡ | j|= d| _d S ©NT)r­   r   rï   r(   r   r   r    r*   b  s    
z_singlefileMailbox.removec                 C   s$   |   |¡ |  |¡| j|< d| _d S rô   )r­   ró   r   rï   r.   r   r   r    r/   h  s    
z_singlefileMailbox.__setitem__c                 c   s   |   ¡  | j ¡ E d H  d S r   )r­   r   r@   r=   r   r   r    r>   n  s    z_singlefileMailbox.iterkeysc                 C   s   |   ¡  || jkS r   )r­   r   r(   r   r   r    rI   s  s    z_singlefileMailbox.__contains__c                 C   s   |   ¡  t| jƒS r   )r­   r»   r   r=   r   r   r    rJ   x  s    z_singlefileMailbox.__len__c                 C   s   | j st| jƒ d| _ d S rô   )rñ   Ú
_lock_filerí   r=   r   r   r    rT   }  s    
z_singlefileMailbox.lockc                 C   s   | j rt| jƒ d| _ d S ©NF)rñ   Ú_unlock_filerí   r=   r   r   r    rU   ƒ  s    
z_singlefileMailbox.unlockc           
      C   sÖ  | j s | jrt| jƒ d| _d S | j dd¡ | j ¡ }|| jkrTtd| j|f ƒ‚t| j	ƒ}z¤i }|  
|¡ t| j ¡ ƒD ]x}| j| \}}| j |¡ |  |¡ | ¡ }| j td|| j ¡  ƒ¡}|sÎqÚ| |¡ q¬|| ¡ f||< |  |¡ q|| ¡ | _W n"   | ¡  t |j¡ ‚ Y nX t|ƒ | j ¡  t | j	¡j}	t |j|	¡ zt |j| j	¡ W n2 tk
rš   t | j	¡ t |j| j	¡ Y nX t| j	dƒ| _|| _d| _ d| _| jrÒt| jdd d S )NFr   rà   z4Size of mailbox file changed (expected %i, found %i)é   ré   )Údotlock) rï   rð   Ú_sync_flushrí   rn   Útellrò   r   Ú_create_temporaryr   Ú_pre_mailbox_hookÚsortedr   r@   Ú_pre_message_hookr^   Úminrq   Ú_post_message_hookrV   r   r*   r˜   r™   rÝ   Úst_modeÚchmodr¥   rß   r±   rñ   rõ   )
r   Zcur_lenZnew_fileZnew_tocr)   ÚstartÚstopZ	new_startr_   Úmoder   r   r    rS   ‰  s`    
	

þ



ÿ
z_singlefileMailbox.flushc                 C   s   d S r   r   ©r   r¶   r   r   r    rý   É  s    z$_singlefileMailbox._pre_mailbox_hookc                 C   s   d S r   r   r  r   r   r    rÿ   Í  s    z$_singlefileMailbox._pre_message_hookc                 C   s   d S r   r   r  r   r   r    r  Ñ  s    z%_singlefileMailbox._post_message_hookc                 C   s4   z|  ¡  W 5 z| jr|  ¡  W 5 | j  ¡  X X d S r   )rí   rV   rñ   rU   rS   r=   r   r   r    rV   Õ  s    z_singlefileMailbox.closec                 C   sN   | j d kr|  ¡  |d k	rJz| j | W S  tk
rH   td| ƒd ‚Y nX d S rã   )r   Ú_generate_tocr,   r(   r   r   r    r­   à  s    
z_singlefileMailbox._lookupc                 C   sœ   | j  dd¡ | j  ¡ }t| jƒdkr8| js8|  | j ¡ z&|  | j ¡ |  |¡}|  	| j ¡ W n" t
k
r€   | j  |¡ ‚ Y nX | j  ¡  | j  ¡ | _|S )Nr   rà   )rí   rn   rû   r»   r   rï   rý   rÿ   Ú_install_messager  r—   ÚtruncaterS   rò   )r   r&   ZbeforeZoffsetsr   r   r    ró   ê  s    


z"_singlefileMailbox._append_message)NT)N)r„   r…   r†   r!   r'   r*   r/   r>   rI   rJ   rT   rU   rS   rý   rÿ   r  rV   r­   ró   r   r   r   r    rè   >  s    

@

rè   c                   @   s>   e Zd ZdZdd„ Zddd„Zddd„Zdd	d
„Zdd„ ZdS )Ú	_mboxMMDFTc                 C   sp   |   |¡\}}| j |¡ | j ¡  td¡}| j || j ¡  ¡}|  | td¡¡}| 	|dd …  
d¡¡ |S )Nó    r[   rf   r   )r­   rí   rn   r{   ro   rp   r^   rû   Ú_message_factoryÚset_fromÚdecode)r   r)   r  r  Ú	from_lineÚstringr·   r   r   r    r3     s    z_mboxMMDF.get_messageFc                 C   s   t  |  ||¡¡j|dS )N)Úunixfromr8   )r   r)   Úfrom_r   r   r    r<     s
    
ÿÿz_mboxMMDF.get_stringc                 C   sJ   |   |¡\}}| j |¡ |s(| j ¡  | j || j ¡  ¡}| td¡S ©Nr[   )r­   rí   rn   r{   r^   rû   ro   rp   )r   r)   r  r  r  r  r   r   r    r;     s    
z_mboxMMDF.get_bytesc                 C   s<   |   |¡\}}| j |¡ |s(| j ¡  t| j| j ¡ |ƒS r   )r­   rí   rn   r{   Ú_PartialFilerû   )r   r)   r  r  r  r   r   r    r6     s
    
z_mboxMMDF.get_filec                 C   s  d }t |tƒr|  |¡}t |tƒrf| d¡rf| d¡}|dkr\|d |… }||d d … }q°|}d}nJt |tƒrˆ| ¡  d¡}d| }n(t |t	j
jƒr°| ¡ }|d k	r°| d¡}|d krÎdt t ¡ ¡ ¡  }| j ¡ }| j |t ¡ |  || j| j¡ | j ¡ }||fS )Nre   r[   rd   r¼   r  r   s   From MAILER-DAEMON )rh   rt   rZ   ru   r|   ÚfindÚ_mboxMMDFMessageÚget_fromrW   r9   r&   r   Úget_unixfromrÔ   ÚasctimeÚgmtimerí   rû   rq   rp   rƒ   Ú_mangle_from_)r   r&   r  ÚnewlineZauthorr  r  r   r   r    r	  &  s0    







z_mboxMMDF._install_messageN)F)F)F)	r„   r…   r†   r  r3   r<   r;   r6   r	  r   r   r   r    r    s   


	
r  c                   @   s.   e Zd ZdZdZd	dd„Zdd„ Zdd„ ZdS )
r   TNc                 C   s   t | _t | |||¡ d S r   )r
   r  r  r!   r   r   r   r    r!   L  s    zmbox.__init__c                 C   s   |  t¡ d S r   ©rq   rp   r  r   r   r    r  Q  s    zmbox._post_message_hookc                 C   sè   g g  }}d}| j  d¡ | j  ¡ }| j  ¡ }| d¡rzt|ƒt|ƒk rj|r`| |ttƒ ¡ n
| |¡ | |¡ d}q|s¤|r–| |ttƒ ¡ q¸| |¡ q¸q|tkr²d}qd}qtt	t
||ƒƒƒ| _t| jƒ| _| j  ¡ | _d S )NFr   re   T)rí   rn   rû   r{   r|   r»   rÀ   rp   ÚdictÚ	enumerateÚzipr   rî   rò   )r   ÚstartsÚstopsZlast_was_emptyÚline_posr‚   r   r   r    r  U  s.    






zmbox._generate_toc)NT)r„   r…   r†   r  rr   r!   r  r  r   r   r   r    r   C  s
   
c                   @   s.   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ ZdS )r   NTc                 C   s   t | _t | |||¡ d S r   )r   r  r  r!   r   r   r   r    r!   z  s    zMMDF.__init__c                 C   s   |  dt ¡ d S ©Nó   r  r  r   r   r    rÿ     s    zMMDF._pre_message_hookc                 C   s   |  td t ¡ d S r%  r  r  r   r   r    r  ƒ  s    zMMDF._post_message_hookc                 C   sÞ   g g  }}| j  d¡ d}|}| j  ¡ }| j  ¡ }| dt ¡r˜| |¡ |}| j  ¡ }| j  ¡ }|dt kr„| |ttƒ ¡ qžqJ|sJ| |¡ qžqJq|sq qtt	t
||ƒƒƒ| _t| jƒ| _| j  dd¡ | j  ¡ | _d S )Nr   r&  rà   )rí   rn   r{   rû   r|   rp   rÀ   r»   r  r   r!  r   rî   rò   )r   r"  r#  Únext_posr$  r‚   r   r   r    r  ‡  s.    






zMMDF._generate_toc)NT)r„   r…   r†   r!   rÿ   r  r  r   r   r   r    r   w  s   
c                   @   s¾   e Zd Zd/dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ ZdS )0r   NTc                 C   st   t  | |||¡ tj | j¡sj|r`t | jd¡ t t tj 	| jd¡tj
tjB tjB d¡¡ n
t| jƒ‚d| _d S )Nr‹   ú.mh_sequencesi€  F)r   r!   r   r   rŽ   r   r   rV   r±   rŒ   rÊ   ÚO_EXCLrË   r   rñ   r   r   r   r    r!   §  s     ÿ
zMH.__init__c                 C   sä   |   ¡ }t|ƒdkrd}nt|ƒd }tj | jt|ƒ¡}t|ƒ}d}zŠ| j
rVt|ƒ zfz|  ||¡ W n: tk
r¢   | j
r†t|ƒ t	|ƒ d}t |¡ ‚ Y nX t|tƒrº|  ||¡ W 5 | j
rÌt|ƒ X W 5 |sÞt	|ƒ X |S )Nr   r¼   FT)r@   r»   Úmaxr   r   rŒ   r   rt   rÞ   r™   rñ   rõ   r÷   rƒ   r—   r*   rh   r   Ú_dump_sequences)r   r&   r@   Znew_keyr¯   r¶   Úclosedr   r   r    r'   ³  s6    


zMH.addc              
   C   sx   t j | jt|ƒ¡}zt|dƒ}W n> tk
r` } z |jtjkrNt	d| ƒ‚n‚ W 5 d }~X Y nX | 
¡  t  |¡ d S ©Nré   rä   )r   r   rŒ   r   rt   r±   r¦   r§   rê   r,   rV   r*   )r   r)   r   r¶   r¬   r   r   r    r*   Õ  s    z	MH.removec              
   C   sÖ   t j | jt|ƒ¡}zt|dƒ}W n> tk
r` } z |jtjkrNt	d| ƒ‚n‚ W 5 d }~X Y nX zd| jrrt|ƒ z@t  t  |t jt jB ¡¡ |  ||¡ t|tƒr°|  ||¡ W 5 | jrÂt|ƒ X W 5 t
|ƒ X d S r-  )r   r   rŒ   r   rt   r±   r¦   r§   rê   r,   r™   rñ   rõ   r÷   rV   rË   ÚO_TRUNCrƒ   rh   r   r+  )r   r)   r&   r   r¶   r¬   r   r   r    r/   ã  s$    
zMH.__setitem__c              
   C   sè   z@| j r$ttj | jt|ƒ¡dƒ}nttj | jt|ƒ¡dƒ}W n> tk
r~ } z |jtj	krlt
d| ƒ‚n‚ W 5 d }~X Y nX |2 | j r”t|ƒ zt|ƒ}W 5 | j r°t|ƒ X W 5 Q R X |  ¡  ¡ D ]\}}||krÈ| |¡ qÈ|S )Nré   r°   rä   )rñ   r±   r   r   rŒ   r   rt   r¦   r§   rê   r,   rõ   r÷   r   Úget_sequencesrH   Úadd_sequence)r   r)   r¶   r¬   r·   r˜   Úkey_listr   r   r    r3   û  s&    zMH.get_messagec              
   C   sÔ   z@| j r$ttj | jt|ƒ¡dƒ}nttj | jt|ƒ¡dƒ}W n> tk
r~ } z |jtj	krlt
d| ƒ‚n‚ W 5 d }~X Y nX |F | j r”t|ƒ z | ¡  td¡W ¢W  5 Q R £ S | j rÄt|ƒ X W 5 Q R X d S )Nré   r°   rä   r[   )rñ   r±   r   r   rŒ   r   rt   r¦   r§   rê   r,   rõ   r÷   r^   ro   rp   ©r   r)   r¶   r¬   r   r   r    r;     s     zMH.get_bytesc              
   C   sf   zt tj | jt|ƒ¡dƒ}W n> tk
r\ } z |jtjkrJt	d| ƒ‚n‚ W 5 d }~X Y nX t
|ƒS )Nr°   rä   )r±   r   r   rŒ   r   rt   r¦   r§   rê   r,   r¹   r2  r   r   r    r6   )  s    zMH.get_filec                 C   s   t tdd„ t | j¡D ƒƒƒS )Nc                 s   s   | ]}|  ¡ rt|ƒV  qd S r   )ÚisdigitrÚ   )Ú.0rÂ   r   r   r    Ú	<genexpr>6  s    ÿzMH.iterkeys.<locals>.<genexpr>)Úiterrþ   r   r¾   r   r=   r   r   r    r>   4  s    zMH.iterkeysc                 C   s   t j t j | jt|ƒ¡¡S r   )r   r   rŽ   rŒ   r   rt   r(   r   r   r    rI   9  s    zMH.__contains__c                 C   s   t t|  ¡ ƒƒS r   )r»   r?   r>   r=   r   r   r    rJ   =  s    z
MH.__len__c                 C   s2   | j s.ttj | jd¡dƒ| _t| jƒ d| _ d S )Nr(  ré   T)rñ   r±   r   r   rŒ   r   rí   rõ   r=   r   r   r    rT   A  s    
zMH.lockc                 C   s(   | j r$t| jƒ t| jƒ | `d| _ d S rö   )rñ   r÷   rí   r™   r=   r   r   r    rU   H  s
    

z	MH.unlockc                 C   s   d S r   r   r=   r   r   r    rS   P  s    zMH.flushc                 C   s   | j r|  ¡  d S r   )rñ   rU   r=   r   r   r    rV   T  s    zMH.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
    zMH.list_foldersc                 C   s   t tj | j|¡| jddS )NFrÄ   ©r   r   r   rŒ   r   r   rÅ   r   r   r    rÇ   a  s     ÿzMH.get_folderc                 C   s   t tj | j|¡| jdS )NrÈ   r7  rÅ   r   r   r    rÌ   f  s    ÿzMH.add_folderc                 C   s`   t j | j|¡}t  |¡}|dgkr:t  t j |d¡¡ n|g krDntd| j ƒ‚t  |¡ d S )Nr(  zFolder not empty: %s)r   r   rŒ   r   r¾   r*   r   rÏ   )r   rÆ   r   Úentriesr   r   r    rÓ   k  s    

zMH.remove_folderc           
   
      s  i }t tj | jd¡dddÜ}t|  ¡ ƒ‰ |D ]Ä}zš| d¡\}}tƒ }| ¡ D ]H}| ¡ rn| 	t
|ƒ¡ qRdd„ | d¡D ƒ\}}	| t||	d	 ƒ¡ qR‡ fd
d„t|ƒD ƒ||< t|| ƒdkrÌ||= W q0 tk
rò   td| ¡  ƒ‚Y q0X q0W 5 Q R X |S )Nr(  ÚrÚASCII©Úencodingr‡   c                 s   s   | ]}t |ƒV  qd S r   )rÚ   )r4  Úxr   r   r    r5  „  s     z#MH.get_sequences.<locals>.<genexpr>ú-r¼   c                    s   g | ]}|ˆ kr|‘qS r   r   )r4  r)   ©Zall_keysr   r    Ú
<listcomp>†  s    ÿz$MH.get_sequences.<locals>.<listcomp>r   z"Invalid sequence specification: %s)r±   r   r   rŒ   r   Úsetr@   rž   r3  r'   rÚ   rR   Úrangerþ   r»   rY   r   Úrstrip)
r   Zresultsr¶   r‚   r˜   Úcontentsr@   Úspecr  r  r   r?  r    r/  w  s(    
ÿzMH.get_sequencesc                 C   s  t tj | jd¡ddd}zØt t  |jtjtj	B ¡¡ | 
¡ D ]®\}}t|ƒdkrVq@| |d ¡ d }d}tt|ƒƒD ]R}|d |krœ|sÆd	}| d
¡ n*|r¸d}| d||f ¡ n| d| ¡ |}qx|rä| t|ƒd ¡ q@| d¡ q@W 5 t|ƒ X d S )Nr(  zr+r:  r;  r   r‡   Fr¼   Tr>  z%s %sz %sÚ
)r±   r   r   rŒ   r   r™   rV   r˜   rË   r.  rH   r»   rq   rþ   rA  rt   )r   Ú	sequencesr¶   r˜   r@   ÚprevZ
completingr)   r   r   r    Úset_sequences  s.    zMH.set_sequencesc           	      C   s>  |   ¡ }d}g }|  ¡ D ]Â}|d |krÒ| ||d f¡ z4t tj | jt|ƒ¡tj | jt|d ƒ¡¡ W nH t	t
fk
r¶   t tj | jt|ƒ¡tj | jt|d ƒ¡¡ Y nX t tj | jt|ƒ¡¡ |d7 }q|d | _t|ƒdkröd S | ¡ D ]0\}}|D ]"\}}||kr
||| |¡< q
qþ|  |¡ d S )Nr   r¼   )r/  r>   rÀ   r   r¢   r   rŒ   r   rt   r£   r¤   r¥   Úunlinkrî   r»   rH   ÚindexrI  )	r   rG  rH  Zchangesr)   r˜   r1  Úoldr‰   r   r   r    Úpack¬  s0    ÿÿ



zMH.packc                 C   st   |  ¡ }|   ¡ }| ¡ D ]0\}}||kr4| |¡ q||kr|| |¡= q|D ]}||krN|g||< qN|  |¡ d S r   )r/  rH   rÀ   rK  rI  )r   r&   r)   Zpending_sequencesZall_sequencesr˜   r1  Úsequencer   r   r    r+  Æ  s    zMH._dump_sequences)NT)r„   r…   r†   r!   r'   r*   r/   r3   r;   r6   r>   rI   rJ   rT   rU   rS   rV   rÃ   rÇ   rÌ   rÓ   r/  rI  rM  r+  r   r   r   r    r   ¤  s,   
"c                   @   sŒ   e Zd ZedddddddhƒZd$d
d„Zdd„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ ZdS )%r   ÚunseenÚdeletedZfiledÚansweredÚ	forwardedZeditedÚresentNTc                 C   s   t  | |||¡ i | _d S r   )rè   r!   Ú_labelsr   r   r   r    r!   Û  s    zBabyl.__init__c                 C   s(   t  | |¡}t|tƒr$| ¡ | j|< |S r   )rè   r'   rh   r   Ú
get_labelsrT  )r   r&   r)   r   r   r    r'   à  s    
z	Babyl.addc                 C   s"   t  | |¡ || jkr| j|= d S r   )rè   r*   rT  r(   r   r   r    r*   ç  s    
zBabyl.removec                 C   s*   t  | ||¡ t|tƒr&| ¡ | j|< d S r   )rè   r/   rh   r   rU  rT  r.   r   r   r    r/   í  s    
zBabyl.__setitem__c           
      C   sò   |   |¡\}}| j |¡ | j ¡  t ¡ }| j ¡ }|dt ks\|sHq\| | td¡¡ q,t ¡ }| j ¡ }|tks|s|q| | td¡¡ qd|| j 	¡  }| j 
|¡}| td¡}t| ¡ | ƒ}	|	 | ¡ ¡ || jkrî|	 | j| ¡ |	S ©Nó   *** EOOH ***r[   )r­   rí   rn   r{   ri   rj   rp   rq   ro   rû   r^   r   rz   Úset_visiblerT  Ú
set_labels)
r   r)   r  r  Úoriginal_headersr‚   Zvisible_headersÚnZbodyr·   r   r   r    r3   ó  s*    



zBabyl.get_messagec           	      C   s¬   |   |¡\}}| j |¡ | j ¡  t ¡ }| j ¡ }|dt ks\|sHq\| | td¡¡ q,| j ¡ }|tksv|s\qvq\| 	¡ }|| j 
¡  }| j |¡}| td¡}|| S rV  )r­   rí   rn   r{   ri   rj   rp   rq   ro   rz   rû   r^   )	r   r)   r  r  rZ  r‚   Zheadersr[  r   r   r   r    r;     s     


zBabyl.get_bytesc                 C   s   t  |  |¡ dt¡¡S r  )ri   rj   r;   ro   rp   r(   r   r   r    r6   %  s    zBabyl.get_filec                 C   s<   |   ¡  tƒ }| j ¡ D ]}| |¡ q| | j¡ t|ƒS r   )r­   rA  rT  rF   rR   Údifference_updateÚ_special_labelsr?   )r   ÚlabelsZ
label_listr   r   r    rU  )  s    zBabyl.get_labelsc                 C   s:  g g  }}| j  d¡ d}g }|}| j  ¡ }| j  ¡ }|dt krœt|ƒt|ƒk rd| |ttƒ ¡ | |¡ dd„ | j  ¡ dd …  d¡D ƒ}| |¡ q|dks°|dt krÔt|ƒt|ƒk rì| |ttƒ ¡ q|s| |ttƒ ¡ qîqtt	t
||ƒƒƒ| _tt	|ƒƒ| _t| jƒ| _| j  dd¡ | j  ¡ | _d S )	Nr   s   c                 S   s   g | ]}|  ¡ r|  ¡ ‘qS r   )Ústrip©r4  Úlabelr   r   r    r@  @  s    þz'Babyl._generate_toc.<locals>.<listcomp>r¼   ó   ,ó   rà   )rí   rn   r{   rû   rp   r»   rÀ   rž   r  r   r!  r   rT  rî   rò   )r   r"  r#  r'  Zlabel_listsr$  r‚   r^  r   r   r    r  2  s4    



ÿzBabyl._generate_tocc                 C   sV   dt  }|dt  7 }|  ¡ }dd„ |D ƒ}|dd |¡ t  7 }|d7 }| |¡ d S )Ns   BABYL OPTIONS:s
   Version: 5c                 s   s   | ]}|  ¡ V  qd S r   )rW   r`  r   r   r    r5  U  s     z*Babyl._pre_mailbox_hook.<locals>.<genexpr>s   Labels:rb  rc  )rp   rU  rŒ   rq   )r   r¶   Zbabylr^  r   r   r    rý   P  s    zBabyl._pre_mailbox_hookc                 C   s   |  dt ¡ d S )Nó   r  r  r   r   r    rÿ   Z  s    zBabyl._pre_message_hookc                 C   s   |  td ¡ d S )Nrc  r  r  r   r   r    r  ^  s    zBabyl._post_message_hookc                 C   sx  | j  ¡ }t|tƒr°g }g }| ¡ D ]$}|| jkr>| |¡ q$| |¡ q$| j  d¡ |D ]}| j  d| ¡  ¡ qZ| j  d¡ |D ]}| j  d| ¡  d ¡ q„| j  t	¡ n| j  dt	 ¡ t|t
jjƒrt ¡ }t
j |dd¡}| |¡ | d¡ | ¡ }| j  | d	t	¡¡ |d	ks,|süq,qü| j  d
t	 ¡ t|tƒr¤t ¡ }	t
j |	dd¡}
|
 | ¡ ¡ |	 ¡ }| 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|tttjfƒrt|tjƒrJt dtd¡ | ¡ }t|tƒr`|  |¡}| d¡d }|d dk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 dtd¡ |j!}| ¡ }d}| ¡ }| "d¡rl|d d… d	 }n| "d¡rˆ|d d… d	 }| j  | d	t	¡¡ |d	ks¬|sF|rÚd}| j  d
t	 ¡ | |¡ nqÚqF| ¡ }|sìqf| "d¡r
|d d… t	 }n:| "d¡r(|d d… t	 }n| "d	¡rD|d d… t	 }| j  |¡ qÚnt#dt$|ƒ ƒ‚| j  ¡ }||fS )Nó   1s   , s   ,,ó    rb  s   1,,Fr   r[   rW  rø   r\   r]   s   

rà   rd   r{   r_   r`   Tra   rb   rc   rg   )%rí   rû   rh   r   rU  r]  rÀ   rq   rW   rp   r9   r&   r   ri   rj   rk   rl   rm   rn   r{   ro   Úget_visibler^   ru   rt   rv   rw   rx   ry   rz   rZ   r  rO   r_   rs   r}   r~   )r   r&   r  Zspecial_labelsr^  ra  Zorig_bufferZorig_generatorr‚   Z
vis_bufferZvis_generatorr_   Z
body_startZoriginal_posZ
first_passr  r   r   r    r	  b  s¼    







 ÿ
 ÿ
zBabyl._install_message)NT)r„   r…   r†   Ú	frozensetr]  r!   r'   r*   r/   r3   r;   r6   rU  r  rý   rÿ   r  r	  r   r   r   r    r   Õ  s$   
  ÿ
	
c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	r   Nc                 C   sÒ   t |tjjƒr4|  t |¡¡ t |tƒrÎ| | ¡ nšt |tƒrP|  t 	|¡¡ n~t |t
ƒrl|  t |¡¡ nbt |tjƒrŠ|  t |¡¡ nDt|dƒr¦|  t |¡¡ n(|d kr¾tjj | ¡ ntdt|ƒ ƒ‚d S )Nr^   rg   )rh   r9   r&   r   Ú_become_messageÚcopyZdeepcopyÚ_explain_toru   r:   rt   Zmessage_from_stringri   ÚTextIOWrapperZmessage_from_filerO   Zmessage_from_binary_filer!   r}   r~   r%   r   r   r    r!   Ñ  s    



zMessage.__init__c                 C   s4   t |dg ƒ}|jD ]}||kr|j| | j|< qd S )NÚ_type_specific_attributes)ÚgetattrÚ__dict__)r   r&   Ztype_specificr˜   r   r   r    ri  ä  s    
zMessage._become_messagec                 C   s   t |tƒrd S tdƒ‚d S )Nz Cannot convert to specified type)rh   r   r}   r%   r   r   r    rk  ë  s    
zMessage._explain_to)N)r„   r…   r†   r!   ri  rk  r   r   r   r    r   Î  s   
c                   @   sx   e Zd ZdddgZddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )r	   Ú_subdirÚ_infoÚ_dateNc                 C   s&   d| _ d| _t ¡ | _t | |¡ d S )Nr‰   r•   )rp  rq  rÔ   rr  r   r!   r%   r   r   r    r!   ø  s    
zMaildirMessage.__init__c                 C   s   | j S r   )rp  r=   r   r   r    rš   ÿ  s    zMaildirMessage.get_subdirc                 C   s(   |dks|dkr|| _ ntd| ƒ‚d S )Nr‰   rŠ   z!subdir must be 'new' or 'cur': %s)rp  rY   )r   r¨   r   r   r    r²     s    zMaildirMessage.set_subdirc                 C   s"   | j  d¡r| j dd … S dS d S )Nú2,rà   r•   )rq  r|   r=   r   r   r    Ú	get_flags
  s    zMaildirMessage.get_flagsc                 C   s   dd  t|ƒ¡ | _d S )Nrs  r•   )rŒ   rþ   rq  )r   Úflagsr   r   r    Ú	set_flags  s    zMaildirMessage.set_flagsc                 C   s$   |   d t|  ¡ ƒt|ƒB ¡¡ d S ©Nr•   ©rv  rŒ   rA  rt  ©r   Úflagr   r   r    Úadd_flag  s    zMaildirMessage.add_flagc                 C   s,   |   ¡ r(|  d t|   ¡ ƒt|ƒ ¡¡ d S rw  )rt  rv  rŒ   rA  ry  r   r   r    Úremove_flag  s    zMaildirMessage.remove_flagc                 C   s   | j S r   )rr  r=   r   r   r    r¡     s    zMaildirMessage.get_datec                 C   s6   zt |ƒ| _W n" tk
r0   td| ƒd ‚Y nX d S )Nzcan't convert to float: %s)Úfloatrr  rY   r}   )r   Údater   r   r    r´   "  s    zMaildirMessage.set_datec                 C   s   | j S r   )rq  r=   r   r   r    rœ   )  s    zMaildirMessage.get_infoc                 C   s&   t |tƒr|| _ntdt|ƒ ƒ‚d S )Nzinfo must be a string: %s)rh   rt   rq  r}   r~   )r   Úinfor   r   r    r³   -  s    
zMaildirMessage.set_infoc                 C   s¤  t |tƒr8| |  ¡ ¡ | |  ¡ ¡ | |  ¡ ¡ nht |tƒrÄt	|  ¡ ƒ}d|kr`| 
d¡ |  ¡ dkrv| 
d¡ d|krˆ| 
d¡ d|krš| 
d¡ d|kr¬| 
d¡ | d	t |  ¡ ¡¡ nÜt |tƒrt	|  ¡ ƒ}d|krî| 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¡ nt |tƒrntdt|ƒ ƒ‚d S )NÚSÚRrŠ   ÚOÚTÚDÚFÚAúMAILER-DAEMONrO  ÚrepliedÚflaggedrP  rQ  ÚPrR  ú$Cannot convert to specified type: %s)rh   r	   rv  rt  r²   rš   r´   r¡   r  rA  r{  r  rÔ   r  r   r0  r   Ú	add_labelr   r}   r~   )r   r&   ru  r   r   r    rk  4  sP    

















ÿzMaildirMessage._explain_to)N)r„   r…   r†   rm  r!   rš   r²   rt  rv  r{  r|  r¡   r´   rœ   r³   rk  r   r   r   r    r	   ó  s   

c                   @   sV   e Zd ZdgZddd„Zdd„ Zddd„Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )r  Ú_fromNc                 C   sV   |   dd¡ t|tjjƒrF| ¡ }|d k	rF| d¡rF|   |dd … ¡ t | |¡ d S )Nr‡  TzFrom rf   )r  rh   r9   r&   r   r  r|   r!   )r   r&   r  r   r   r    r!   e  s    z_mboxMMDFMessage.__init__c                 C   s   | j S r   )r  r=   r   r   r    r  n  s    z_mboxMMDFMessage.get_fromc                 C   s4   |d k	r*|dkrt  ¡ }|dt  |¡ 7 }|| _d S )NTú )rÔ   r  r  r  )r   r  Ztime_r   r   r    r  r  s
    z_mboxMMDFMessage.set_fromc                 C   s   |   dd¡|   dd¡ S )NÚStatusr•   úX-Status)r2   r=   r   r   r    rt  z  s    z_mboxMMDFMessage.get_flagsc                 C   sÒ   t |ƒ}d\}}dD ]}||kr||7 }| |¡ qdD ]}||kr8||7 }| |¡ q8|d t|ƒ¡7 }z|  d|¡ W n  tk
rš   |  d|¡ Y nX z|  d|¡ W n  tk
rÌ   |  d|¡ Y nX d S )N)r•   r•   )r  r‚  )r„  r…  r†  r•   r  r  )rA  r*   rŒ   rþ   Úreplace_headerr,   Z
add_header)r   ru  Zstatus_flagsZxstatus_flagsrz  r   r   r    rv  ~  s&    z_mboxMMDFMessage.set_flagsc                 C   s$   |   d t|  ¡ ƒt|ƒB ¡¡ d S rw  rx  ry  r   r   r    r{  ”  s    z_mboxMMDFMessage.add_flagc                 C   s4   d| ksd| kr0|   d t|  ¡ ƒt|ƒ ¡¡ d S )Nr  r  r•   rx  ry  r   r   r    r|  ˜  s    z_mboxMMDFMessage.remove_flagc              	   C   sÞ  t |tƒrÐt|  ¡ ƒ}d|kr(| d¡ d|kr:| d¡ d|krL| d¡ d|kr^| d¡ d|krp| d¡ |d	= |d
= d |  ¡  ¡ dd … ¡}z| 	t
 t |d¡¡¡ W n ttfk
rÊ   Y nX 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
= nt |tƒrÊntdt|ƒ ƒ‚d S )Nr‚  rŠ   r…  r†  r  r€  r„  rƒ  Zstatuszx-statusrŽ  éûÿÿÿz%a %b %d %H:%M:%S %YrO  rˆ  r‰  rP  rQ  r‹  )rh   r	   rA  rt  r²   r{  rŒ   r  rž   r´   ÚcalendarZtimegmrÔ   ÚstrptimerY   ÚOverflowErrorr  rv  r  r   r0  r   rŒ  r   r}   r~   )r   r&   ru  Z
maybe_dater   r   r    rk    sb    





ÿ













ÿz_mboxMMDFMessage._explain_to)N)N)r„   r…   r†   rm  r!   r  r  rt  rv  r{  r|  rk  r   r   r   r    r  `  s   
	
r  c                   @   s   e Zd ZdS )r
   N©r„   r…   r†   r   r   r   r    r
   Ñ  s   c                   @   sD   e Zd ZdgZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )r   Ú
_sequencesNc                 C   s   g | _ t | |¡ d S r   )r—  r   r!   r%   r   r   r    r!   Ú  s    zMHMessage.__init__c                 C   s   | j d d … S r   )r—  r=   r   r   r    r/  ß  s    zMHMessage.get_sequencesc                 C   s   t |ƒ| _d S r   )r?   r—  )r   rG  r   r   r    rI  ã  s    zMHMessage.set_sequencesc                 C   s6   t |tƒr"|| jkr2| j |¡ ntdt|ƒ ƒ‚d S )Nzsequence type must be str: %s)rh   rt   r—  rÀ   r}   r~   ©r   rN  r   r   r    r0  ç  s    

zMHMessage.add_sequencec                 C   s*   z| j  |¡ W n tk
r$   Y nX d S r   )r—  r*   rY   r˜  r   r   r    Úremove_sequenceï  s    zMHMessage.remove_sequencec                 C   sF  t |tƒrdt|  ¡ ƒ}d|kr*| d¡ n| d¡ | d¡ d|krP| d¡ d|krb| d¡ nÞt |tƒr¾t|  ¡ ƒ}d|krŽ| d¡ n
| d	¡ d|krª| d¡ d|kr¼| d
¡ n„t |tƒrâ|  ¡ D ]}| |¡ qÐn`t |t	ƒr$t|  ¡ ƒ}d|kr| 
d¡ d|krB| 
d¡ nt |tƒr2ntdt|ƒ ƒ‚d S )NrO  rŠ   r€  r‰  r…  rˆ  r  ÚROr‚  r†  rQ  r‹  )rh   r	   rA  r/  r²   r{  r  r   r0  r   rŒ  r   r}   r~   )r   r&   rG  rN  r   r   r    rk  ö  sB    










ÿzMHMessage._explain_to)N)
r„   r…   r†   rm  r!   r/  rI  r0  r™  rk  r   r   r   r    r   Õ  s   
c                   @   s^   e Zd ZddgZddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )r   rT  Ú_visibleNc                 C   s   g | _ tƒ | _t | |¡ d S r   )rT  r   r›  r!   r%   r   r   r    r!   "  s    zBabylMessage.__init__c                 C   s   | j d d … S r   )rT  r=   r   r   r    rU  (  s    zBabylMessage.get_labelsc                 C   s   t |ƒ| _d S r   )r?   rT  )r   r^  r   r   r    rY  ,  s    zBabylMessage.set_labelsc                 C   s6   t |tƒr"|| jkr2| j |¡ ntdt|ƒ ƒ‚d S )Nzlabel must be a string: %s)rh   rt   rT  rÀ   r}   r~   ©r   ra  r   r   r    rŒ  0  s    

zBabylMessage.add_labelc                 C   s*   z| j  |¡ W n tk
r$   Y nX d S r   )rT  r*   rY   rœ  r   r   r    Úremove_label8  s    zBabylMessage.remove_labelc                 C   s
   t | jƒS r   ©r   r›  r=   r   r   r    rg  ?  s    zBabylMessage.get_visiblec                 C   s   t |ƒ| _d S r   rž  )r   Zvisibler   r   r    rX  C  s    zBabylMessage.set_visiblec                 C   sb   | j  ¡ D ](}|| kr*| j  || | ¡ q
| j |= q
dD ]$}|| kr8|| j kr8| | | j |< q8d S )N)ZDateZFromzReply-ToZToZCCZSubject)r›  r@   r‘  )r   Úheaderr   r   r    Úupdate_visibleG  s    
zBabylMessage.update_visiblec                 C   sr  t |tƒr~t|  ¡ ƒ}d|kr*| d¡ n| d¡ | d¡ d|ksNd|krX| d¡ d|krj| d¡ d	|kr|| d
¡ nðt |tƒrØt|  ¡ ƒ}d|kr¨| d¡ n
| d¡ d	|krÄ| d¡ d|krÖ| d¡ n–t |tƒrt|  ¡ ƒ}d|kr| d¡ d|krn| d¡ nTt |t	ƒrP| 
|  ¡ ¡ |  ¡ D ]}| |¡ q<nt |tƒr^ntdt|ƒ ƒ‚d S )NrO  rŠ   r€  rR  rS  rŠ  rQ  r  rP  rƒ  rš  r‚  r„  r†  rˆ  r‹  )rh   r	   rA  rU  r²   r{  r  r   r0  r   rX  rg  rŒ  r   r}   r~   )r   r&   r^  ra  r   r   r    rk  R  sH    










ÿzBabylMessage._explain_to)N)r„   r…   r†   rm  r!   rU  rY  rŒ  r  rg  rX  r   rk  r   r   r   r    r     s   
c                   @   s   e Zd ZdS )r   Nr–  r   r   r   r    r   |  s   c                   @   s¤   e Zd Zd%dd„Zd&dd„Zd'dd„Zd(dd	„Zd)d
d„Zdd„ Zdd„ Z	d*dd„Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zed#d$„ ƒZdS )+r¹   Nc                 C   s$   || _ |d kr| ¡ | _n|| _d S r   )rí   rû   Ú_pos)r   r¶   Úposr   r   r    r!   ƒ  s    z_ProxyFile.__init__c                 C   s   |   || jj¡S r   )Ú_readrí   r^   ©r   Úsizer   r   r    r^   ‹  s    z_ProxyFile.readc                 C   s   |   || jj¡S r   )r£  rí   Úread1r¤  r   r   r    r¦    s    z_ProxyFile.read1c                 C   s   |   || jj¡S r   )r£  rí   r{   r¤  r   r   r    r{   “  s    z_ProxyFile.readlinec                 C   s<   g }| D ].}|  |¡ |d k	r|t|ƒ8 }|dkr q8q|S )Nr   )rÀ   r»   )r   ÚsizehintrL   r‚   r   r   r    Ú	readlines—  s    
z_ProxyFile.readlinesc                 c   s   |   ¡ }|sd S |V  q d S r   )r{   )r   r‚   r   r   r    rE   ¢  s    z_ProxyFile.__iter__c                 C   s   | j S r   )r¡  r=   r   r   r    rû   ª  s    z_ProxyFile.tellr   c                 C   s4   |dkr| j  | j¡ | j  ||¡ | j  ¡ | _d S )Nr¼   ©rí   rn   r¡  rû   ©r   ÚoffsetÚwhencer   r   r    rn   ®  s    z_ProxyFile.seekc                 C   s0   t | dƒr,zt | jdƒr"| j ¡  W 5 | `X d S )Nrí   rV   )rO   rí   rV   r=   r   r   r    rV   µ  s
    
z_ProxyFile.closec                 C   s2   |d krd}| j  | j¡ ||ƒ}| j  ¡ | _|S )Nrd   r©  )r   r¥  Úread_methodrL   r   r   r    r£  ¾  s    z_ProxyFile._readc                 C   s   | S r   r   r=   r   r   r    Ú	__enter__Ç  s    z_ProxyFile.__enter__c                 G   s   |   ¡  d S r   )rV   )r   Úexcr   r   r    Ú__exit__Ë  s    z_ProxyFile.__exit__c                 C   s
   | j  ¡ S r   )rí   Úreadabler=   r   r   r    r±  Î  s    z_ProxyFile.readablec                 C   s
   | j  ¡ S r   )rí   Úwritabler=   r   r   r    r²  Ñ  s    z_ProxyFile.writablec                 C   s
   | j  ¡ S r   )rí   Úseekabler=   r   r   r    r³  Ô  s    z_ProxyFile.seekablec                 C   s
   | j  ¡ S r   )rí   rS   r=   r   r   r    rS   ×  s    z_ProxyFile.flushc                 C   s&   t | dƒsdS t | jdƒsdS | jjS )Nrí   Tr,  F)rO   rí   r,  r=   r   r   r    r,  Ú  s
    
z_ProxyFile.closed)N)N)N)N)N)r   )r„   r…   r†   r!   r^   r¦  r{   r¨  rE   rû   rn   rV   r£  r®  r°  r±  r²  r³  rS   Úpropertyr,  r   r   r   r    r¹   €  s$   





		r¹   c                   @   s8   e Zd Zddd„Zdd„ Zddd„Zd	d
„ Zdd„ ZdS )r  Nc                 C   s   t  | ||¡ || _|| _d S r   )r¹   r!   Ú_startÚ_stop)r   r¶   r  r  r   r   r    r!   æ  s    z_PartialFile.__init__c                 C   s   t  | ¡| j S r   )r¹   rû   rµ  r=   r   r   r    rû   ì  s    z_PartialFile.tellr   c                 C   s<   |dkr| j | _d}n|dkr*| j| _d}t | ||¡ d S )Nr   r¼   rà   )rµ  r¡  r¶  r¹   rn   rª  r   r   r    rn   ð  s    z_PartialFile.seekc                 C   sB   | j | j }|dkrdS |d ks0|dk s0||kr4|}t | ||¡S )Nr   r  )r¶  r¡  r¹   r£  )r   r¥  r­  Z	remainingr   r   r    r£  ú  s    z_PartialFile._readc                 C   s   t | dƒr| `d S )Nrí   )rO   rí   r=   r   r   r    rV     s    
z_PartialFile.close)NN)r   )r„   r…   r†   r!   rû   rn   r£  rV   r   r   r   r    r  ã  s
   


	r  Tc              
   C   s¦  d}zbt rpzt  | t jt jB ¡ W nJ tk
rn } z,|jtjtjtjfkr\t	d| j
 ƒ‚n‚ W 5 d }~X Y nX |rfzt| j
d ƒ}| ¡  W nB tk
rÒ } z$|jtjtjfkrÀW Y ¢W d S ‚ W 5 d }~X Y nX z`zt |j
| j
d ¡ d}W n2 ttfk
r$   t |j
| j
d ¡ d}Y nX t |j
¡ W n0 tk
rd   t |j
¡ t	d| j
 ƒ‚Y nX W n8   t r„t  | t j¡ |ršt | j
d ¡ ‚ Y nX d S )NFzlockf: lock unavailable: %sú.lockTzdot lock unavailable: %s)ÚfcntlÚlockfZLOCK_EXZLOCK_NBr¦   r§   ZEAGAINrë   rì   r   r˜   rü   rV   r   r¢   r£   r¤   r¥   rJ  rß   r*   ÚLOCK_UN)r¶   rù   Zdotlock_doner¬   Zpre_lockr   r   r    rõ   
  sL    ÿ
ÿrõ   c                 C   s8   t rt  | t j¡ tj | jd ¡r4t | jd ¡ d S )Nr·  )r¸  r¹  rº  r   r   rŽ   r˜   r*   ©r¶   r   r   r    r÷   4  s    r÷   c              	   C   s<   t  | t jt jB t jB d¡}zt| dƒW ¢S t  |¡ X d S )NrÉ   ré   )r   r±   rÊ   r)  ÚO_RDWRrV   )r   Úfdr   r   r    rÞ   ;  s    rÞ   c                 C   s$   t d| tt ¡ ƒt ¡ t ¡ f ƒS )Nz%s.%s.%s.%s)rÞ   rÚ   rÔ   rØ   rÙ   r   rÛ   )r   r   r   r    rü   C  s    þrü   c                 C   s$   |   ¡  ttdƒr t |  ¡ ¡ d S )NÚfsync)rS   rO   r   r¾  Úfilenor»  r   r   r    rú   I  s    
rú   c                 C   s   t | ƒ |  ¡  d S r   )rú   rV   r»  r   r   r    r™   O  s    r™   c                   @   s   e Zd ZdS )r   Nr–  r   r   r   r    r   U  s   c                   @   s   e Zd ZdS )r   Nr–  r   r   r   r    r   X  s   c                   @   s   e Zd ZdS )r   Nr–  r   r   r   r    r   [  s   c                   @   s   e Zd ZdS )r   Nr–  r   r   r   r    r   ^  s   c                   @   s   e Zd ZdS )r   Nr–  r   r   r   r    r   a  s   )T)/r   rÔ   r“  rØ   r§   rj  rw   r9   Zemail.messageZemail.generatorri   r4   r¸  ÚImportErrorÚ__all__rp   rW   r   r   rè   r  r   r   r   r   r&   r   r	   r  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 DB4-  3 z%mqH_c'
*