o
     JAfÊ3 ã                   @   s<  	 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d dlmZ zd dlZW n eyH   dZY nw g d¢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,d-„ Z'd.d/„ Z(d0d1„ Z)d2d3„ Z*G d4d5„ d5e+ƒZ,G d6d7„ d7e,ƒZ-G d8d9„ d9e,ƒZ.G d:d;„ d;e,ƒZ/G d<d=„ d=e,ƒZ0dS )?é    N)ÚGenericAlias)Ú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dCd/d0„Zd1d2„ ZdCd3d4„Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Zd=d>„ Z d?Z!dDd@dA„Z"e#e$ƒZ%dS )Er   NTc                 C   s"   	 t j t j |¡¡| _|| _d S ©N)ÚosÚpathÚabspathÚ
expanduserÚ_pathÚ_factory©Úselfr   ÚfactoryÚcreate© r    ú/usr/lib/python3.10/mailbox.pyÚ__init__%   s   
zMailbox.__init__c                 C   ó
   	 t dƒ‚©Nz&Method must be implemented by subclass©ÚNotImplementedError©r   Úmessager    r    r!   Úadd*   ó   zMailbox.addc                 C   r#   r$   r%   ©r   Úkeyr    r    r!   Úremove.   r*   zMailbox.removec                 C   s   |   |¡ d S r   )r-   r+   r    r    r!   Ú__delitem__2   s   zMailbox.__delitem__c                 C   s(   	 z|   |¡ W d S  ty   Y d S w r   )r-   ÚKeyErrorr+   r    r    r!   Údiscard5   s   ÿzMailbox.discardc                 C   r#   r$   r%   ©r   r,   r(   r    r    r!   Ú__setitem__<   r*   zMailbox.__setitem__c                 C   s&   	 z|   |¡W S  ty   | Y S w r   )Ú__getitem__r/   )r   r,   Údefaultr    r    r!   Úget@   s   ÿzMailbox.getc                 C   sP   	 | j s	|  |¡S t |  |¡¡}|   |¡W  d   ƒ S 1 s!w   Y  d S r   )r   Úget_messageÚ
contextlibÚclosingÚget_file)r   r,   Úfiler    r    r!   r3   G   s   
$ÿzMailbox.__getitem__c                 C   r#   r$   r%   r+   r    r    r!   r6   O   r*   zMailbox.get_messagec                 C   s   	 t  |  |¡¡ ¡ S r   ©ÚemailÚmessage_from_bytesÚ	get_bytesZ	as_stringr+   r    r    r!   Ú
get_stringS   s   zMailbox.get_stringc                 C   r#   r$   r%   r+   r    r    r!   r>   Z   r*   zMailbox.get_bytesc                 C   r#   r$   r%   r+   r    r    r!   r9   ^   r*   zMailbox.get_filec                 C   r#   r$   r%   ©r   r    r    r!   Úiterkeysb   r*   zMailbox.iterkeysc                 C   ó   	 t |  ¡ ƒS r   )ÚlistrA   r@   r    r    r!   Úkeysf   ó   zMailbox.keysc              	   c   s<    	 |   ¡ D ]}z| | }W n	 ty   Y qw |V  qd S r   ©rA   r/   ©r   r,   Úvaluer    r    r!   Ú
itervaluesj   s   €ÿûzMailbox.itervaluesc                 C   s   |   ¡ S r   )rI   r@   r    r    r!   Ú__iter__s   s   zMailbox.__iter__c                 C   rB   r   )rC   rI   r@   r    r    r!   Úvaluesv   rE   zMailbox.valuesc              	   c   s@    	 |   ¡ D ]}z| | }W n	 ty   Y qw ||fV  qd S r   rF   rG   r    r    r!   Ú	iteritemsz   s   €ÿûzMailbox.iteritemsc                 C   rB   r   )rC   rL   r@   r    r    r!   Úitemsƒ   rE   zMailbox.itemsc                 C   r#   r$   r%   r+   r    r    r!   Ú__contains__‡   r*   zMailbox.__contains__c                 C   r#   r$   r%   r@   r    r    r!   Ú__len__‹   r*   zMailbox.__len__c                 C   s   	 |   ¡ D ]}|  |¡ qd S r   )rD   r0   r+   r    r    r!   Úclear   s   ÿzMailbox.clearc                 C   s4   	 z| | }W n t y   | Y S w |  |¡ |S r   )r/   r0   )r   r,   r4   Úresultr    r    r!   Úpop”   s   ÿ
zMailbox.popc                 C   s(   	 |   ¡ D ]
}||  |¡f  S tdƒ‚)NzNo messages in mailbox)rA   rR   r/   r+   r    r    r!   Úpopitem   s   zMailbox.popitemc              	   C   sr   	 t |dƒr| ¡ }nt |dƒr| ¡ }n|}d}|D ]\}}z|| |< W q ty0   d}Y qw |r7tdƒ‚d S )NrL   rM   FTzNo message with key(s))ÚhasattrrL   rM   r/   )r   ÚargÚsourceZbad_keyr,   r(   r    r    r!   Úupdate¤   s    



ÿÿzMailbox.updatec                 C   r#   r$   r%   r@   r    r    r!   Úflushµ   r*   zMailbox.flushc                 C   r#   r$   r%   r@   r    r    r!   Úlock¹   r*   zMailbox.lockc                 C   r#   r$   r%   r@   r    r    r!   Úunlock½   r*   zMailbox.unlockc                 C   r#   r$   r%   r@   r    r    r!   ÚcloseÁ   r*   zMailbox.closec                 C   s$   z|  d¡W S  ty   tdƒ‚w )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ƒr@t ¡ }tj ||d¡}| |¡ | 	d¡ | 
¡ }| dt¡}| |¡ | jr<| t¡s>| t¡ d S d S d S t |tttjfƒrŠt |tjƒrZt dtd¡ | ¡ }t |tƒrd|  |¡}|rl| dd¡}| dt¡}| |¡ | jr†| t¡sˆ| t¡ d S d S d S t|dƒr÷t|dƒržt d	td¡ |j}d }	 | ¡ }| d¡r³|d d… d }n| d¡rÀ|d d… d }|sÃn|rÒ| d¡rÒd|dd …  }| dt¡}| |¡ |}q¡| jrñ|ró| t¡sõ| t¡ d S d S d S d S tdt|ƒ ƒ‚)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 insteadTó   
éþÿÿÿó   éÿÿÿÿó   From s   >From é   úInvalid message type: %s)Ú
isinstancer<   r(   r	   ÚioÚBytesIOÚ	generatorÚBytesGeneratorÚflattenÚseekrc   ÚreplaceÚlinesepÚwriteÚ_append_newlineÚendswithÚstrÚbytesÚStringIOÚwarningsÚwarnÚDeprecationWarningÚgetvaluer_   rT   rd   ÚreadlineÚ
startswithÚ	TypeErrorÚtype)	r   r(   ÚtargetZmangle_from_rd   ÚgenÚdataZlastlineÚliner    r    r!   Ú_dump_messageÒ   sh   


þÿ


þ

ÿ


óþzMailbox._dump_message©NTr   ©F)&Ú__name__Ú
__module__Ú__qualname__r"   r)   r-   r.   r0   r2   r5   r3   r6   r?   r>   r9   rA   rD   rI   rJ   rK   rL   rM   rN   rO   rP   rR   rS   rW   rX   rY   rZ   r[   r_   rw   rˆ   Úclassmethodr   Ú__class_getitem__r    r    r    r!   r   "   sF    

		
	

6r   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¡sF|rAt | jd¡ | j 	¡ D ]}t |d¡ q7n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ÚmkdirrK   r   Ú_tocÚ_toc_mtimesÚ
_last_readÚ_skewfactor)r   Údirnamer   r   r   r    r    r!   r"     s"   ýÿ

zMaildir.__init__c              
   C   sh  	 |   ¡ }z|  ||¡ W n ty   | ¡  t |j¡ ‚ w t|ƒ t|t	ƒr<| 
¡ }| j| ¡  }|| jkr;d}nd}d}tj |j¡ | j¡d }tj | j||| ¡}t|t	ƒrmt |jtj |j¡| ¡ f¡ z'z	t |j|¡ W n ttfy‹   t |j|¡ Y W |S w t |j¡ W |S  ty³ } zt |j¡ |jtjkr®td| ƒ‚‚ d }~ww )NÚ r’   r   z$Name clash with existing message: %s)Ú_create_tmprˆ   ÚBaseExceptionr[   r   r-   ÚnameÚ_sync_closerm   r
   Ú
get_subdirÚcolonÚget_infor   ÚbasenameÚsplitr•   r   ÚutimeÚgetatimeÚget_dateÚlinkÚAttributeErrorÚPermissionErrorÚrenameÚOSErrorÚerrnoÚEEXISTr   )r   r(   Ztmp_fileÚsubdirÚsuffixÚuniqÚdestÚer    r    r!   r)   $  sT   ý

€
ÿ
õùÿ€úzMaildir.addc                 C   s"   	 t  t j | j|  |¡¡¡ d S r   )r   r-   r   r•   r   Ú_lookupr+   r    r    r!   r-   N  s    zMaildir.removec              	   C   s,   	 z|   |¡ W d S  ttfy   Y d S w r   )r-   r/   ÚFileNotFoundErrorr+   r    r    r!   r0   R  s   ÿzMaildir.discardc                 C   sÌ   	 |   |¡}|  |¡}|   |¡}t|tƒr|}n|}tj |¡}| j|v r1| j| | j¡d  }nd}|  	|¡ tj 
| j|¡}	tj 
| j||| ¡}
t|tƒr^t |	tj |	¡| ¡ f¡ t |	|
¡ d S )Nri   rž   )r·   r)   rm   r
   r   r   r   r¤   r§   r0   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!   r2   Z  s&   






ÿzMaildir.__setitem__c                 C   s¸   	 |   |¡}ttj | j|¡dƒ}| jr|  |¡}nt|ƒ}W d   ƒ n1 s)w   Y  tj |¡\}}| 	|¡ | j
|v rK| | | j
¡d ¡ | tj tj | j|¡¡¡ |S )NÚrbri   )r·   Úopenr   r   r•   r   r   r
   r§   Ú
set_subdirr¤   Úset_infoÚset_dateÚgetmtime)r   r,   ÚsubpathÚfÚmsgr²   r¡   r    r    r!   r6   u  s   
€ü

zMaildir.get_messagec                 C   sR   	 t tj | j|  |¡¡dƒ}| ¡  td¡W  d   ƒ S 1 s"w   Y  d S )Nrº   r`   )	r»   r   r   r•   r   r·   rc   rt   ru   ©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!   r9   ‰  s   zMaildir.get_filec              	   c   sD    	 |   ¡  | jD ]}z|  |¡ W n	 ty   Y q	w |V  q	d S r   )Ú_refreshr™   r·   r/   r+   r    r    r!   rA   Ž  s   €
ÿûzMaildir.iterkeysc                 C   ó   	 |   ¡  || jv S r   )rÅ   r™   r+   r    r    r!   rN   ˜  ó   
zMaildir.__contains__c                 C   ó   	 |   ¡  t| jƒS r   )rÅ   Úlenr™   r@   r    r    r!   rO     rÇ   zMaildir.__len__c                 C   ó   	 d S r   r    r@   r    r    r!   rX   ¢  s   zMaildir.flushc                 C   rÊ   r   r    r@   r    r    r!   rY   ¨  ó   zMaildir.lockc                 C   rÊ   r   r    r@   r    r    r!   rZ   ¬  rË   zMaildir.unlockc                 C   rÊ   r   r    r@   r    r    r!   r[   °  rË   zMaildir.closec                 C   s^   	 g }t  | j¡D ]#}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   rQ   Ú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 |¡s-t  t  |t j	t j
B d¡¡ |S )NrÍ   ©r   Zmaildirfolderé¶  )r   r   r•   r   r   r   r—   r[   r»   ÚO_CREATÚO_WRONLY)r   rÖ   r   rQ   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 s-|d dkr3td| ƒ‚qt  |¡D ]!}|dkrZ|dkrZ|dkrZt j t j ||¡¡rZtd||f ƒ‚q9t j|d	d
D ]#\}}}|D ]}t  	t j ||¡¡ qi|D ]}t  
t j ||¡¡ qxqbt  
|¡ 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   sZ   	 t   ¡ }t tj | jd¡¡D ]}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|v r| dd¡}d|v r| dd¡}dt|ƒt|d d ƒt ¡ tj|f }tj	 
| jd|¡}zt |¡ W n! tyb   t jd7  _zt|ƒW  Y S  ty_   Y nw Y nw td	| ƒ‚)
Nú/z\057r   z\072z%s.M%sP%sQ%s.%srÌ   g    €„.Ar‘   z&Name clash prevented file creation: %s)rä   ÚsocketÚgethostnamert   Úintr   Úgetpidr   Ú_countr   r•   r   Ústatr¸   Ú_create_carefullyÚFileExistsErrorr   )r   rå   Úhostnamer´   r   r    r    r!   rŸ   ê  s2   ÿÿûÿzMaildir._create_tmpc                 C   sÚ   	 t   ¡ | j d| j kr0d}| jD ]}tj | j| ¡}|| j| kr&d}|| j|< q|s0d S i | _| jD ]/}| j| }t 	|¡D ]"}tj 
||¡}tj |¡rRqB| | j¡d }tj 
||¡| j|< qBq6t   ¡ | _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   sv   	 zt j t j | j| j| ¡¡r| j| W S W n	 ty!   Y nw |  ¡  z| j| W S  ty:   td| ƒd ‚w ©NúNo message with key: %s)r   r   r—   r•   r   r™   r/   rÅ   r+   r    r    r!   r·   &  s   ÿÿÿzMaildir._lookupc                 C   sN   	 t | dƒs|  ¡ | _	 z| t| jƒ W S  ty   Y d S  ty&   Y qw )NÚ_onetime_keys)rT   rA   rö   ÚnextÚStopIterationr/   r@   r    r    r!   r÷   4  s   

ÿzMaildir.nextr‰   )r‹   rŒ   r   r¤   r"   r)   r-   r0   r2   r6   r>   r9   rA   rN   rO   rX   rY   rZ   r[   rÓ   r×   rÜ   rã   ræ   rì   rŸ   rÅ   r·   r÷   r    r    r    r!   r     s8    
*
	
$r   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 n7 tyH } z+|jtjkr-|r(t| jdƒ}nt| jƒ‚|jtjtj	fv r=t| jdƒ}n‚ W Y d }~nd }~ww || _
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"   D  s*   
€÷

z_singlefileMailbox.__init__c                 C   s:   	 |   ¡  |  |¡| j| j< |  jd7  _d| _| jd S )NrÌ   T)r·   Ú_append_messager™   rÿ   r  r'   r    r    r!   r)   [  s   
z_singlefileMailbox.addc                 C   s   	 |   |¡ | j|= d| _d S r‰   )r·   r™   r   r+   r    r    r!   r-   e  s   

z_singlefileMailbox.removec                 C   s&   	 |   |¡ |  |¡| j|< d| _d S r‰   )r·   r  r™   r   r1   r    r    r!   r2   k  s   

z_singlefileMailbox.__setitem__c                 c   s     	 |   ¡  | j ¡ E d H  d S r   )r·   r™   rD   r@   r    r    r!   rA   q  s   €z_singlefileMailbox.iterkeysc                 C   rÆ   r   )r·   r™   r+   r    r    r!   rN   v  rÇ   z_singlefileMailbox.__contains__c                 C   rÈ   r   )r·   rÉ   r™   r@   r    r    r!   rO   {  rÇ   z_singlefileMailbox.__len__c                 C   s    	 | j st| jƒ d| _ d S d S r‰   )r  Ú
_lock_filerþ   r@   r    r    r!   rY   €  ó
   

þz_singlefileMailbox.lockc                 C   s    	 | j rt| jƒ d| _ d S d S ©NF)r  Ú_unlock_filerþ   r@   r    r    r!   rZ   †  r  z_singlefileMailbox.unlockc           
      C   sÒ  	 | j s| jrt| jƒ d| _d S | j dd¡ | j ¡ }|| jkr+td| j|f ƒ‚t| j	ƒ}zSi }|  
|¡ t| j ¡ ƒD ]=}| j| \}}| j |¡ |  |¡ | ¡ }	 | j td|| j ¡  ƒ¡}|sin| |¡ qX|| ¡ f||< |  |¡ q?| ¡ | _W n   | ¡  t |j¡ ‚ t|ƒ | j ¡  t | j	¡j}	t |j|	¡ z
t |j| j	¡ W n tyÊ   t | j	¡ t |j| j	¡ Y nw t| j	dƒ| _|| _d| _ d| _| jrçt| jdd d S d S )	NFr   rñ   z4Size of mailbox file changed (expected %i, found %i)Té   rú   )Údotlock) r   r  Ú_sync_flushrþ   rs   Útellr  r   Ú_create_temporaryr   Ú_pre_mailbox_hookÚsortedr™   rD   Ú_pre_message_hookrc   Úminrv   Ú_post_message_hookr[   r   r-   r¡   r¢   rí   Úst_modeÚchmodr®   rï   r»   r  r  )
r   Zcur_lenZnew_fileZnew_tocr,   ÚstartÚstopZ	new_startrd   Úmoder    r    r!   rX   Œ  sj   
	

þ



ÿ
û
þÿz_singlefileMailbox.flushc                 C   rÊ   r   r    ©r   rÁ   r    r    r!   r  Ì  rË   z$_singlefileMailbox._pre_mailbox_hookc                 C   rÊ   r   r    r  r    r    r!   r  Ð  rË   z$_singlefileMailbox._pre_message_hookc                 C   rÊ   r   r    r  r    r    r!   r  Ô  rË   z%_singlefileMailbox._post_message_hookc                 C   s‚   	 z#|   ¡  W z| jr|  ¡  W | j ¡  d S W | j ¡  d S | j ¡  w z| jr4|  ¡  W | j ¡  w W | j ¡  w | j ¡  w r   )rX   r  rZ   rþ   r[   r@   r    r    r!   r[   Ø  s   

ýü
ýz_singlefileMailbox.closec                 C   sJ   	 | j d u r
|  ¡  |d ur#z| j | W S  ty"   td| ƒd ‚w 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r| js|  | j ¡ z|  | j ¡ |  |¡}|  	| j ¡ W n t
y>   | j  |¡ ‚ w | j  ¡  | j  ¡ | _|S )Nr   rñ   )rþ   rs   r  rÉ   r™   r   r  r  Ú_install_messager  r    ÚtruncaterX   r  )r   r(   ÚbeforeZoffsetsr    r    r!   r  í  s    

þ
z"_singlefileMailbox._append_messager‰   r   )r‹   rŒ   r   r"   r)   r-   r2   rA   rN   rO   rY   rZ   rX   r  r  r  r[   r·   r  r    r    r    r!   rù   A  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   sr   	 |   |¡\}}| j |¡ | j ¡  td¡}| j || j ¡  ¡}|  | td¡¡}| 	|dd …  
d¡¡ |S )Nó    r`   rk   r   )r·   rþ   rs   r€   rt   ru   rc   r  Ú_message_factoryÚset_fromÚdecode)r   r,   r  r  Ú	from_lineÚstringrÂ   r    r    r!   r6   	  s   z_mboxMMDF.get_messageFc                 C   s   	 t  |  ||¡¡j|dS )N)Úunixfromr;   )r   r,   Úfrom_r    r    r!   r?     s   
ÿÿz_mboxMMDF.get_stringc                 C   sL   	 |   |¡\}}| j |¡ |s| j ¡  | j || j ¡  ¡}| td¡S ©Nr`   )r·   rþ   rs   r€   rc   r  rt   ru   )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þ   rs   r€   Ú_PartialFiler  )r   r,   r%  r  r  r    r    r!   r9   !  s   
z_mboxMMDF.get_filec                 C   s  	 d }t |tƒr|  |¡}t |tƒr4| d¡r4| d¡}|dkr/|d |… }||d d … }n*|}d}n%t |tƒrE| ¡  d¡}d| }nt |t	j
jƒrY| ¡ }|d urY| d¡}|d u rhdt t ¡ ¡ ¡  }| j ¡ }| j |t ¡ |  || j| j¡ | j ¡ }||fS )Nrj   r`   ri   rÌ   r  r   s   From MAILER-DAEMON )rm   ry   r_   rz   r   ÚfindÚ_mboxMMDFMessageÚget_fromr\   r<   r(   r	   Úget_unixfromrä   ÚasctimeÚgmtimerþ   r  rv   ru   rˆ   Ú_mangle_from_)r   r(   r"  ÚnewlineZauthorr  r  r    r    r!   r  )  s2   







z_mboxMMDF._install_messageNrŠ   )	r‹   rŒ   r   r.  r6   r?   r>   r9   r  r    r    r    r!   r    s    



	r  c                   @   s0   e Zd Z	 dZdZd	dd„Zdd„ Zdd„ ZdS )
r   TNc                 C   ó   	 t | _t | |||¡ d S r   )r   r  r  r"   r   r    r    r!   r"   O  ó   zmbox.__init__c                 C   s   	 |  t¡ d S r   ©rv   ru   r  r    r    r!   r  T  ó   zmbox._post_message_hookc                 C   sê   	 g g }}d}| j  d¡ 	 | j  ¡ }| j  ¡ }| d¡r?t|ƒt|ƒk r7|r2| |ttƒ ¡ n| |¡ | |¡ d}n|sS|rM| |ttƒ ¡ n| |¡ n
|tkrZd}nd}qtt	t
||ƒƒƒ| _t| jƒ| _| j  ¡ | _d S )NFr   Trj   )rþ   rs   r  r€   r   rÉ   rÐ   ru   ÚdictÚ	enumerateÚzipr™   rÿ   r  )r   ÚstartsÚstopsZlast_was_emptyÚline_posr‡   r    r    r!   r  X  s4   






ézmbox._generate_tocr‰   )r‹   rŒ   r   r.  rw   r"   r  r  r    r    r    r!   r   F  s    
r   c                   @   s0   e Zd Z	 ddd„Zdd„ Zdd„ Zd	d
„ ZdS )r   NTc                 C   r0  r   )r   r  r  r"   r   r    r    r!   r"   }  r1  zMMDF.__init__c                 C   ó   	 |  dt ¡ d S ©Nó   r2  r  r    r    r!   r  ‚  ó   zMMDF._pre_message_hookc                 C   s   	 |  td t ¡ d S r;  r2  r  r    r    r!   r  †  s   zMMDF._post_message_hookc                 C   sâ   	 g g }}| j  d¡ d}	 |}| j  ¡ }| j  ¡ }| dt ¡rN| |¡ 	 |}| j  ¡ }| j  ¡ }|dt krD| |ttƒ ¡ n	|sL| |¡ nq(n|sQnqtt	t
||ƒƒƒ| _t| jƒ| _| j  dd¡ | j  ¡ | _d S )Nr   Tr<  rñ   )rþ   rs   r€   r  r   ru   rÐ   rÉ   r4  r5  r6  r™   rÿ   r  )r   r7  r8  Únext_posr9  r‡   r    r    r!   r  Š  s:   






÷€
ïzMMDF._generate_tocr‰   )r‹   rŒ   r   r"   r  r  r  r    r    r    r!   r   z  s    
r   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   sv   	 t  | |||¡ tj | j¡s6|r1t | 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˜   r[   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}zQ| j	r,t
|ƒ z7z|  ||¡ W n tyO   | j	rCt|ƒ t|ƒ d}t |¡ ‚ w t|tƒr[|  ||¡ W | j	rct|ƒ n	| j	rlt|ƒ w w W |stt|ƒ |S |s}t|ƒ w w )Nr   rÌ   FT)rD   rÉ   Úmaxr   r   r•   r   ry   rî   r  r  rˆ   r    r  r¢   r-   rm   r   Ú_dump_sequences)r   r(   rD   Znew_keyr¹   rÁ   Úclosedr    r    r!   r)   ¶  sL   
ù
€€ÿ
ÿ€þ
ÿzMH.addc              
   C   sn   	 t j | jt|ƒ¡}zt|dƒ}W n ty+ } z|jtjkr&t	d| ƒ‚‚ d }~ww | 
¡  t  |¡ d S ©Nrú   rõ   )r   r   r•   r   ry   r»   r¯   r°   rû   r/   r[   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y+ } z|jtjkr&t	d| ƒ‚‚ d }~ww z?| j
r4t|ƒ z't  t  |t jt jB ¡¡ |  ||¡ t|tƒrS|  ||¡ W | j
r[t|ƒ n	| j
rdt|ƒ w w W t|ƒ d S t|ƒ w rD  )r   r   r•   r   ry   r»   r¯   r°   rû   r/   r  r  r[   rÛ   ÚO_TRUNCrˆ   rm   r   rB  r  r¢   )r   r,   r(   r   rÁ   r¶   r    r    r!   r2   æ  s6   €ü
€€ÿ
ÿ€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y: } z|jtj	kr5t
d| ƒ‚‚ d }~ww |& | j rEt|ƒ zt|ƒ}W | j rRt|ƒ n	| j r[t|ƒ w w W d   ƒ n1 sfw   Y  |  ¡  ¡ D ]\}}||v r~| |¡ qq|S )Nrú   rº   rõ   )r  r»   r   r   r•   r   ry   r¯   r°   rû   r/   r  r   r  Úget_sequencesrM   Úadd_sequence)r   r,   rÁ   r¶   rÂ   r¡   Úkey_listr    r    r!   r6   þ  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y: } z|jtj	kr5t
d| ƒ‚‚ d }~ww |) | j rEt|ƒ z| ¡  td¡W | j rUt|ƒ W  d   ƒ S | j ret|ƒ w w 1 siw   Y  d S )Nrú   rº   rõ   r`   )r  r»   r   r   r•   r   ry   r¯   r°   rû   r/   r  rc   rt   ru   r  ©r   r,   rÁ   r¶   r    r    r!   r>     s0   €€üù
ÿúzMH.get_bytesc              
   C   sZ   	 zt tj | jt|ƒ¡dƒ}W t
|ƒS  ty, } z|jtjkr't	d| ƒ‚‚ d }~ww )Nrº   rõ   )r»   r   r   r•   r   ry   r¯   r°   rû   r/   rÄ   rI  r    r    r!   r9   ,  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>9  s   € ÿzMH.iterkeys.<locals>.<genexpr>)Úiterr  r   rÎ   r   r@   r    r    r!   rA   7  s   zMH.iterkeysc                 C   s   	 t j t j | jt|ƒ¡¡S r   )r   r   r—   r•   r   ry   r+   r    r    r!   rN   <  s   zMH.__contains__c                 C   s   	 t t|  ¡ ƒƒS r   )rÉ   rC   rA   r@   r    r    r!   rO   @  ó   z
MH.__len__c                 C   s8   	 | j sttj | jd¡dƒ| _t| jƒ d| _ d S d S )Nr?  rú   T)r  r»   r   r   r•   r   rþ   r  r@   r    r    r!   rY   D  s   

ýzMH.lockc                 C   s.   	 | j rt| jƒ t| jƒ | `d| _ d S d S r  )r  r  rþ   r¢   r@   r    r    r!   rZ   K  s   


üz	MH.unlockc                 C   rÊ   r   r    r@   r    r    r!   rX   S  rË   zMH.flushc                 C   s   	 | j r
|  ¡  d S d S r   )r  rZ   r@   r    r    r!   r[   W  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Ó   \  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×   d  s   ÿzMH.get_folderc                 C   s   	 t tj | j|¡| jdS )NrØ   rO  rÕ   r    r    r!   rÜ   i  s   ÿzMH.add_folderc                 C   sb   	 t j | j|¡}t  |¡}|dgkrt  t j |d¡¡ n|g kr#n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ã   n  s   

zMH.remove_folderc           
   
      s  	 i }t tj | jd¡dddp}t|  ¡ ƒ‰ |D ]^}zM| d¡\}}tƒ }| ¡ D ]$}| ¡ r8| 	t
|ƒ¡ q*dd„ | d¡D ƒ\}}	| t||	d	 ƒ¡ q*‡ fd
d„t|ƒD ƒ||< t|| ƒdkrg||= W q tyw   td| ¡  ƒ‚w W d   ƒ |S 1 sƒw   Y  |S )Nr?  ÚrÚASCII©Úencodingr   c                 s   s    | ]}t |ƒV  qd S r   )rê   )rK  Úxr    r    r!   rL  ‡  ó   € z#MH.get_sequences.<locals>.<genexpr>ú-rÌ   c                    s   g | ]}|ˆ v r|‘qS r    r    )rK  r,   ©Zall_keysr    r!   Ú
<listcomp>‰  s    ÿz$MH.get_sequences.<locals>.<listcomp>r   z"Invalid sequence specification: %s)r»   r   r   r•   r   ÚsetrD   r§   rJ  r)   rê   rW   Úranger  rÉ   r^   r   Úrstrip)
r   ÚresultsrÁ   r‡   r¡   ÚcontentsrD   Úspecr  r  r    rX  r!   rF  z  s6   €ÿÿò
þízMH.get_sequencesc                 C   s
  	 t tj | jd¡ddd}zqt t  |jtjtjB ¡¡ | 	¡ D ]W\}}t
|ƒdkr,q!| |d ¡ d }d}tt|ƒƒD ])}|d |krO|sNd	}| d
¡ n|r]d}| d||f ¡ n| d| ¡ |}q=|rs| t|ƒd ¡ q!| d¡ q!W t|ƒ d S t|ƒ w )Nr?  zr+rR  rS  r   r   FrÌ   TrW  z%s %sz %sÚ
)r»   r   r   r•   r   r[   r¡   rÛ   rE  rM   rÉ   rv   r  rZ  ry   r¢   )r   Ú	sequencesrÁ   r¡   rD   ÚprevZ
completingr,   r    r    r!   Úset_sequences’  s4   
€ìzMH.set_sequencesc           	      C   s:  	 |   ¡ }d}g }|  ¡ D ]`}|d |kri| ||d f¡ zt tj | jt|ƒ¡tj | jt|d ƒ¡¡ W n# t	t
fy[   t tj | jt|ƒ¡tj | jt|d ƒ¡¡ Y nw t tj | jt|ƒ¡¡ |d7 }q|d | _t|ƒdkr{d S | ¡ D ]\}}|D ]\}}||v r”||| |¡< q…q|  |¡ d S )Nr   rÌ   )rF  rA   rÐ   r   r«   r   r•   r   ry   r¬   r­   r®   Úunlinkrÿ   rÉ   rM   Úindexrc  )	r   ra  rb  Zchangesr,   r¡   rH  Úoldr’   r    r    r!   Úpack¯  s8   ÿÿÿ

€þzMH.packc                 C   sv   	 |  ¡ }|   ¡ }| ¡ D ]\}}||v r| |¡ q||v r%|| |¡= q|D ]}||vr3|g||< q(|  |¡ d S r   )rF  rM   rÐ   re  rc  )r   r(   r,   Zpending_sequencesZall_sequencesr¡   rH  Úsequencer    r    r!   rB  É  s   €
€zMH._dump_sequencesr‰   )r‹   rŒ   r   r"   r)   r-   r2   r6   r>   r9   rA   rN   rO   rY   rZ   rX   r[   rÓ   r×   rÜ   rã   rF  rc  rg  rB  r    r    r    r!   r   §  s0    
"r   c                   @   s„   e Zd Z	 eh 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S )r   >   ZeditedÚansweredZfiledÚ	forwardedÚresentÚdeletedÚunseenNTc                 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)   rm   r   Ú
get_labelsrn  )r   r(   r,   r    r    r!   r)   ã  s
   
z	Babyl.addc                 C   s(   	 t  | |¡ || jv r| j|= d S d S r   )rù   r-   rn  r+   r    r    r!   r-   ê  s
   
ÿzBabyl.removec                 C   s0   	 t  | ||¡ t|tƒr| ¡ | j|< d S d S r   )rù   r2   rm   r   ro  rn  r1   r    r    r!   r2   ð  s
   
ÿzBabyl.__setitem__c           
      C   sø   	 |   |¡\}}| j |¡ | j ¡  t ¡ }	 | j ¡ }|dt ks%|s&n
| | td¡¡ qt ¡ }	 | j ¡ }|tks@|sAn
| | td¡¡ q5|| j 	¡  }| j 
|¡}| td¡}t| ¡ | ƒ}	|	 | ¡ ¡ || jv rz|	 | j| ¡ |	S ©NTó   *** EOOH ***r`   )r·   rþ   rs   r€   rn   ro   ru   rv   rt   r  rc   r   r   Úset_visiblern  Ú
set_labels)
r   r,   r  r  Úoriginal_headersr‡   Zvisible_headersÚnÚbodyrÂ   r    r    r!   r6   ö  s4   

ü
ü
zBabyl.get_messagec           	      C   s²   	 |   |¡\}}| j |¡ | j ¡  t ¡ }	 | j ¡ }|dt ks%|s&n
| | td¡¡ q	 | j ¡ }|tks<|s=nq1| 	¡ }|| j 
¡  }| j |¡}| td¡}|| S rp  )r·   rþ   rs   r€   rn   ro   ru   rv   rt   r   r  rc   )	r   r,   r  r  rt  r‡   Zheadersru  r†   r    r    r!   r>     s*   

ü
ýzBabyl.get_bytesc                 C   s   	 t  |  |¡ dt¡¡S r&  )rn   ro   r>   rt   ru   r+   r    r    r!   r9   (  ó   zBabyl.get_filec                 C   s>   	 |   ¡  tƒ }| j ¡ D ]}| |¡ q| | j¡ t|ƒS r   )r·   rZ  rn  rK   rW   Údifference_updateÚ_special_labelsrC   )r   ÚlabelsZ
label_listr    r    r!   ro  ,  s   zBabyl.get_labelsc                 C   s>  	 g g }}| j  d¡ d}g }	 |}| j  ¡ }| j  ¡ }|dt krPt|ƒt|ƒk r4| |ttƒ ¡ | |¡ dd„ | j  ¡ dd …  d¡D ƒ}| |¡ n(|dksZ|dt krlt|ƒt|ƒk rk| |ttƒ ¡ n|sx| |ttƒ ¡ nqtt	t
||ƒƒƒ| _tt	|ƒƒ| _t| jƒ| _| j  dd	¡ | j  ¡ | _d S )
Nr   Ts   c                 S   s   g | ]
}|  ¡ r|  ¡ ‘qS r    )Ústrip©rK  Úlabelr    r    r!   rY  C  s    þz'Babyl._generate_toc.<locals>.<listcomp>rÌ   ó   ,ó   rñ   )rþ   rs   r€   r  ru   rÉ   rÐ   r§   r4  r5  r6  r™   rn  rÿ   r  )r   r7  r8  r>  Zlabel_listsr9  r‡   rz  r    r    r!   r  5  s<   



ÿ€ïzBabyl._generate_tocc                 C   sX   	 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   )r\   r|  r    r    r!   rL  X  rV  z*Babyl._pre_mailbox_hook.<locals>.<genexpr>s   Labels:r~  r  )ru   ro  r•   rv   )r   rÁ   Zbabylrz  r    r    r!   r  S  s   zBabyl._pre_mailbox_hookc                 C   r:  )Nó   r2  r  r    r    r!   r  ]  r=  zBabyl._pre_message_hookc                 C   s   	 |  td ¡ d S )Nr  r2  r  r    r    r!   r  a  r=  zBabyl._post_message_hookc                 C   sb  	 | j  ¡ }t|tƒrYg }g }| ¡ D ]}|| jv r | |¡ q| |¡ q| j  d¡ |D ]}| j  d| ¡  ¡ q.| j  d¡ |D ]}| j  d| ¡  d ¡ qC| j  t	¡ n| j  dt	 ¡ t|t
jjƒrÿt ¡ }t
j |dd¡}| |¡ | d¡ 	 | ¡ }| j  | d
t	¡¡ |d
ks“|s”nq| j  dt	 ¡ t|tƒrÍt ¡ }	t
j |	dd¡}
|
 | ¡ ¡ 	 |	 ¡ }| j  | d
t	¡¡ |d
ksÊ|sËnq¶n| d¡ 	 | ¡ }| j  | d
t	¡¡ |d
ksç|sènqÓ	 | d¡}|sòn| j  | d
t	¡¡ qên)t|tttjfƒr|t|tjƒrt dtd¡ | ¡ }t|tƒr&|  |¡}| d¡d }|d dkrg| j  |d |…  d
t	¡¡ | j  dt	 ¡ | j  |d |…  d
t	¡¡ | j  ||d …  d
t	¡¡ nÁ| j  dt	 t	 ¡ | j  | d
t	¡¡ n¬t |dƒr t |dƒr’t dtd¡ |j!}| ¡ }d	}	 | ¡ }| "d¡r¬|d d… d
 }n| "d¡rº|d d… d
 }| j  | d
t	¡¡ |d
ksÌ|sà|rßd}| j  dt	 ¡ | |¡ nnq™	 | ¡ }|sën4| "d¡rú|d d… t	 }n| "d¡r	|d d… t	 }n| "d
¡r|d d… t	 }| j  |¡ qãnt#dt$|ƒ ƒ‚| j  ¡ }||fS )Nó   1s   , s   ,,ó    r~  s   1,,Fr   Tr`   rq  r	  ra   rb   s   

rñ   ri   r€   rd   re   rf   rg   rh   rl   )%rþ   r  rm   r   ro  ry  rÐ   rv   r\   ru   r<   r(   r	   rn   ro   rp   rq   rr   rs   r€   rt   Úget_visiblerc   rz   ry   r{   r|   r}   r~   r   r_   r(  rT   rd   rx   r‚   rƒ   )r   r(   r  Zspecial_labelsrz  r}  Zorig_bufferZorig_generatorr‡   Z
vis_bufferZvis_generatorrd   Z
body_startZoriginal_posZ
first_passr  r    r    r!   r  e  sØ   




ü
ü
ü
üÿ
ÿòõ

zBabyl._install_messager‰   )r‹   rŒ   r   Ú	frozensetry  r"   r)   r-   r2   r6   r>   r9   ro  r  r  r  r  r  r    r    r    r!   r   Ø  s     
	
r   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ƒr|  t |¡¡ t |tƒr| | ¡ d S d S t |tƒr-|  t 	|¡¡ d S t |t
ƒr<|  t |¡¡ d S t |tjƒrL|  t |¡¡ d S t|dƒr[|  t |¡¡ d S |d u rhtjj | ¡ d S tdt|ƒ ƒ‚)Nrc   rl   )rm   r<   r(   r	   Ú_become_messageÚcopyÚdeepcopyÚ_explain_torz   r=   ry   Zmessage_from_stringrn   ÚTextIOWrapperZmessage_from_filerT   Zmessage_from_binary_filer"   r‚   rƒ   r'   r    r    r!   r"   Ô  s"   
ÿ


zMessage.__init__c                 C   s6   	 t |dg ƒ}|jD ]}||vr|j| | j|< q
d S )NÚ_type_specific_attributes)ÚgetattrÚ__dict__)r   r(   Ztype_specificr¡   r    r    r!   r…  ç  s   
€þzMessage._become_messagec                 C   s   	 t |tƒrd S tdƒ‚)Nz Cannot convert to specified type)rm   r	   r‚   r'   r    r    r!   rˆ  î  s   
zMessage._explain_tor   )r‹   rŒ   r   r"   r…  rˆ  r    r    r    r!   r	   Ñ  s
    
r	   c                   @   sx   e Zd Z	 g 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S )r
   )Ú_subdirÚ_infoÚ_dateNc                 C   s(   	 d| _ d| _t ¡ | _t | |¡ d S )Nr’   rž   )r  rŽ  rä   r  r	   r"   r'   r    r    r!   r"   û  s
   
zMaildirMessage.__init__c                 C   ó   	 | j S r   )r  r@   r    r    r!   r£     ó   zMaildirMessage.get_subdirc                 C   s(   	 |dks	|dkr|| _ d S td| ƒ‚)Nr’   r“   z!subdir must be 'new' or 'cur': %s)r  r^   )r   r²   r    r    r!   r¼     s   
zMaildirMessage.set_subdirc                 C   s    	 | j  d¡r| j dd … S dS )Nú2,rñ   rž   )rŽ  r   r@   r    r    r!   Ú	get_flags  s   zMaildirMessage.get_flagsc                 C   s   	 dd  t|ƒ¡ | _d S )Nr’  rž   )r•   r  rŽ  )r   Úflagsr    r    r!   Ú	set_flags  rw  zMaildirMessage.set_flagsc                 C   ó&   	 |   d t|  ¡ ƒt|ƒB ¡¡ d S ©Nrž   ©r•  r•   rZ  r“  ©r   Úflagr    r    r!   Úadd_flag  ó   $zMaildirMessage.add_flagc                 C   s2   	 |   ¡ r|  d t|   ¡ ƒt|ƒ ¡¡ d S d S r—  )r“  r•  r•   rZ  r™  r    r    r!   Úremove_flag  s   $ÿzMaildirMessage.remove_flagc                 C   r  r   )r  r@   r    r    r!   rª   !  r‘  zMaildirMessage.get_datec                 C   s0   	 zt |ƒ| _W d S  ty   td| ƒd ‚w )Nzcan't convert to float: %s)Úfloatr  r^   r‚   )r   Údater    r    r!   r¾   %  s   ÿzMaildirMessage.set_datec                 C   r  r   )rŽ  r@   r    r    r!   r¥   ,  r‘  zMaildirMessage.get_infoc                 C   s&   	 t |tƒr|| _d S tdt|ƒ ƒ‚)Nzinfo must be a string: %s)rm   ry   rŽ  r‚   rƒ   )r   Úinfor    r    r!   r½   0  s   

zMaildirMessage.set_infoc                 C   s   	 t |tƒr| |  ¡ ¡ | |  ¡ ¡ | |  ¡ ¡ d S t |tƒrdt	|  ¡ ƒ}d|v r1| 
d¡ |  ¡ dkr<| 
d¡ d|v rE| 
d¡ d|v rN| 
d¡ d|v rW| 
d¡ | d	t |  ¡ ¡¡ d S t |tƒrŽt	|  ¡ ƒ}d|vrx| d
¡ d|v r| d¡ d|v rŒ| d¡ d S d S t |tƒrÁt	|  ¡ ƒ}d|vr¢| d
¡ d|v r«| d¡ d|v r´| d¡ d|v r¿| d¡ d S d S t |tƒrÈd S tdt|ƒ ƒ‚)NÚSÚRr“   ÚOÚTÚDÚFÚAúMAILER-DAEMONrm  ÚrepliedÚflaggedrl  ri  ÚPrj  ú$Cannot convert to specified type: %s)rm   r
   r•  r“  r¼   r£   r¾   rª   r)  rZ  r›  r   rä   r-  r   rG  r   Ú	add_labelr	   r‚   rƒ   )r   r(   r”  r    r    r!   rˆ  7  sV   









ÿ



ÿ
ÿzMaildirMessage._explain_tor   )r‹   rŒ   r   rŠ  r"   r£   r¼   r“  r•  r›  r  rª   r¾   r¥   r½   rˆ  r    r    r    r!   r
   ö  s    
r
   c                   @   sX   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   sX   	 |   dd¡ t|tjjƒr$| ¡ }|d ur$| d¡r$|   |dd … ¡ t | |¡ d S )Nr¨  TzFrom rk   )r   rm   r<   r(   r	   r+  r   r"   )r   r(   r$  r    r    r!   r"   h  s   z_mboxMMDFMessage.__init__c                 C   r  r   )r®  r@   r    r    r!   r*  q  r‘  z_mboxMMDFMessage.get_fromc                 C   s6   	 |d ur|du rt  ¡ }|dt  |¡ 7 }|| _d S )NTú )rä   r-  r,  r®  )r   r%  Ztime_r    r    r!   r   u  s   
z_mboxMMDFMessage.set_fromc                 C   s   	 |   dd¡|   dd¡ S )NÚStatusrž   úX-Status)r5   r@   r    r    r!   r“  }  rw  z_mboxMMDFMessage.get_flagsc                 C   sÐ   	 t |ƒ}d\}}dD ]}||v r||7 }| |¡ qdD ]}||v r,||7 }| |¡ q|d t|ƒ¡7 }z|  d|¡ W n tyM   |  d|¡ Y nw z	|  d|¡ W d S  tyg   |  d|¡ Y d S w )N)rž   rž   )r¢  r£  )r¥  r¦  r§  rž   r°  r±  )rZ  r-   r•   r  Úreplace_headerr/   Z
add_header)r   r”  Zstatus_flagsZxstatus_flagsrš  r    r    r!   r•    s0   
€
€ÿÿz_mboxMMDFMessage.set_flagsc                 C   r–  r—  r˜  r™  r    r    r!   r›  —  rœ  z_mboxMMDFMessage.add_flagc                 C   s:   	 d| v s	d| v r|   d t|  ¡ ƒt|ƒ ¡¡ d S d S )Nr°  r±  rž   r˜  r™  r    r    r!   r  ›  s   $ÿz_mboxMMDFMessage.remove_flagc              	   C   sÐ  	 t |tƒrht|  ¡ ƒ}d|v r| d¡ d|v r| d¡ d|v r'| d¡ d|v r0| d¡ d|v r9| d¡ |d	= |d
= d |  ¡  ¡ dd … ¡}z| 	t
 t |d¡¡¡ W d S  ttfyg   Y d S w t |tƒr}| |  ¡ ¡ | |  ¡ ¡ d S t |tƒr«t|  ¡ ƒ}d|vr‘| d¡ d|v rš| d¡ d|v r£| d¡ |d	= |d
= d S t |tƒrÙt|  ¡ ƒ}d|vr¿| d¡ d|v rÈ| d¡ d|v rÑ| d¡ |d	= |d
= d S t |tƒràd S tdt|ƒ ƒ‚)Nr£  r“   r¦  r§  r¢  r¡  r¥  r¤  Ústatuszx-statusr¯  éûÿÿÿz%a %b %d %H:%M:%S %Yrm  r©  rª  rl  ri  r¬  )rm   r
   rZ  r“  r¼   r›  r•   r*  r§   r¾   ÚcalendarZtimegmrä   Ústrptimer^   ÚOverflowErrorr)  r•  r   r   rG  r   r­  r	   r‚   rƒ   )r   r(   r”  Z
maybe_dater    r    r!   rˆ     sf   





ÿÿ











ÿz_mboxMMDFMessage._explain_tor   )r‹   rŒ   r   rŠ  r"   r*  r   r“  r•  r›  r  rˆ  r    r    r    r!   r)  c  s    
	
r)  c                   @   ó   e Zd ZdS )r   N©r‹   rŒ   r   r    r    r    r!   r   Ô  ó    r   c                   @   sF   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   ó   	 | j d d … S r   )r»  r@   r    r    r!   rF  â  r3  zMHMessage.get_sequencesc                 C   ó   	 t |ƒ| _d S r   )rC   r»  )r   ra  r    r    r!   rc  æ  r3  zMHMessage.set_sequencesc                 C   ó:   	 t |tƒr|| jvr| j |¡ d S d S tdt|ƒ ƒ‚)Nzsequence type must be str: %s)rm   ry   r»  rÐ   r‚   rƒ   ©r   rh  r    r    r!   rG  ê  ó   

ÿzMHMessage.add_sequencec                 C   ó*   	 z	| j  |¡ W d S  ty   Y d S w r   )r»  r-   r^   r¿  r    r    r!   Úremove_sequenceò  ó   ÿzMHMessage.remove_sequencec                 C   sR  	 t |tƒr6t|  ¡ ƒ}d|v r| d¡ n
| d¡ | d¡ d|v r)| d¡ d|v r4| d¡ d S d S t |tƒrft|  ¡ ƒ}d|vrK| d¡ n| d	¡ d|v rY| d¡ d|v rd| d
¡ d S d S t |tƒry|  ¡ D ]}| |¡ qod S t |t	ƒršt|  ¡ ƒ}d|v r| 
d¡ d|v r˜| 
d¡ d S d S t |tƒr¡d S tdt|ƒ ƒ‚)Nrm  r“   r¡  rª  r¦  r©  r¢  ÚROr£  r§  ri  r¬  )rm   r
   rZ  rF  r¼   r›  r)  r   rG  r   r­  r	   r‚   rƒ   )r   r(   ra  rh  r    r    r!   rˆ  ù  sL   



ÿ


ÿ
ÿ

ÿ
ÿzMHMessage._explain_tor   )
r‹   rŒ   r   rŠ  r"   rF  rc  rG  rÂ  rˆ  r    r    r    r!   r   Ø  s    
r   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   rn  Ú_visibleNc                 C   s    	 g | _ tƒ | _t | |¡ d S r   )rn  r	   rÅ  r"   r'   r    r    r!   r"   %  s   zBabylMessage.__init__c                 C   r¼  r   )rn  r@   r    r    r!   ro  +  r3  zBabylMessage.get_labelsc                 C   r½  r   )rC   rn  )r   rz  r    r    r!   rs  /  r3  zBabylMessage.set_labelsc                 C   r¾  )Nzlabel must be a string: %s)rm   ry   rn  rÐ   r‚   rƒ   ©r   r}  r    r    r!   r­  3  rÀ  zBabylMessage.add_labelc                 C   rÁ  r   )rn  r-   r^   rÆ  r    r    r!   Úremove_label;  rÃ  zBabylMessage.remove_labelc                 C   s   	 t | jƒS r   ©r	   rÅ  r@   r    r    r!   rƒ  B  s   
zBabylMessage.get_visiblec                 C   r½  r   rÈ  )r   Zvisibler    r    r!   rr  F  r3  zBabylMessage.set_visiblec                 C   sd   	 | j  ¡ D ]}|| v r| j  || | ¡ q| j |= qdD ]}|| v r/|| j vr/| | | j |< qd S )N)ZDateZFromzReply-ToZToZCCZSubject)rÅ  rD   r²  )r   Úheaderr    r    r!   Úupdate_visibleJ  s   
€þzBabylMessage.update_visiblec                 C   sz  	 t |tƒrCt|  ¡ ƒ}d|v r| d¡ n
| d¡ | d¡ d|v s(d|v r-| d¡ d|v r6| d¡ d	|v rA| d
¡ d S d S t |tƒrst|  ¡ ƒ}d|vrX| d¡ n| d¡ d	|v rf| d¡ d|v rq| d¡ d S d S t |tƒr”t|  ¡ ƒ}d|v r‡| d¡ d|v r’| d¡ d S d S t |t	ƒr®| 
|  ¡ ¡ |  ¡ D ]}| |¡ q¤d S t |tƒrµd S tdt|ƒ ƒ‚)Nrm  r“   r¡  rj  rk  r«  ri  r¢  rl  r¤  rÄ  r£  r¥  r§  r©  r¬  )rm   r
   rZ  ro  r¼   r›  r)  r   rG  r   rr  rƒ  r­  r	   r‚   rƒ   )r   r(   rz  r}  r    r    r!   rˆ  U  sR   




ÿ


ÿ

ÿ
ÿ
ÿzBabylMessage._explain_tor   )r‹   rŒ   r   rŠ  r"   ro  rs  r­  rÇ  rƒ  rr  rÊ  rˆ  r    r    r    r!   r      s    
r   c                   @   r¸  )r   Nr¹  r    r    r    r!   r     rº  r   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eeƒZdS )'rÄ   Nc                 C   s(   	 || _ |d u r| ¡ | _d S || _d S r   )rþ   r  Ú_pos)r   rÁ   Úposr    r    r!   r"   †  s
   
z_ProxyFile.__init__c                 C   ó   	 |   || jj¡S r   )Ú_readrþ   rc   ©r   Úsizer    r    r!   rc   Ž  rN  z_ProxyFile.readc                 C   rÍ  r   )rÎ  rþ   Úread1rÏ  r    r    r!   rÑ  ’  rN  z_ProxyFile.read1c                 C   rÍ  r   )rÎ  rþ   r€   rÏ  r    r    r!   r€   –  rN  z_ProxyFile.readlinec                 C   s@   	 g }| D ]}|  |¡ |d ur|t|ƒ8 }|dkr |S q|S )Nr   )rÐ   rÉ   )r   ÚsizehintrQ   r‡   r    r    r!   Ú	readlinesš  s   
€ z_ProxyFile.readlinesc                 c   s    	 	 |   ¡ }|sd S |V  qr   )r€   )r   r‡   r    r    r!   rJ   ¥  s   €üz_ProxyFile.__iter__c                 C   r  r   )rË  r@   r    r    r!   r  ­  r‘  z_ProxyFile.tellr   c                 C   s6   	 |dkr| j  | j¡ | j  ||¡ | j  ¡ | _d S )NrÌ   ©rþ   rs   rË  r  ©r   ÚoffsetÚwhencer    r    r!   rs   ±  s
   z_ProxyFile.seekc                 C   sB   	 t | dƒrzt | jdƒr| j ¡  W | `d S W | `d S | `w d S )Nrþ   r[   )rT   rþ   r[   r@   r    r    r!   r[   ¸  s   
ýûz_ProxyFile.closec                 C   s4   	 |d u rd}| j  | j¡ ||ƒ}| j  ¡ | _|S )Nri   rÔ  )r   rÐ  Úread_methodrQ   r    r    r!   rÎ  Á  s   z_ProxyFile._readc                 C   s   	 | S r   r    r@   r    r    r!   Ú	__enter__Ê  rË   z_ProxyFile.__enter__c                 G   s   |   ¡  d S r   )r[   )r   Úexcr    r    r!   Ú__exit__Î  s   z_ProxyFile.__exit__c                 C   ó
   | j  ¡ S r   )rþ   Úreadabler@   r    r    r!   rÝ  Ñ  ó   
z_ProxyFile.readablec                 C   rÜ  r   )rþ   Úwritabler@   r    r    r!   rß  Ô  rÞ  z_ProxyFile.writablec                 C   rÜ  r   )rþ   Úseekabler@   r    r    r!   rà  ×  rÞ  z_ProxyFile.seekablec                 C   rÜ  r   )rþ   rX   r@   r    r    r!   rX   Ú  rÞ  z_ProxyFile.flushc                 C   s&   t | dƒsdS t | jdƒsdS | jjS )Nrþ   TrC  F)rT   rþ   rC  r@   r    r    r!   rC  Ý  s
   
z_ProxyFile.closedr   ©r   )r‹   rŒ   r   r"   rc   rÑ  r€   rÓ  rJ   r  rs   r[   rÎ  rÙ  rÛ  rÝ  rß  rà  rX   ÚpropertyrC  rŽ   r   r   r    r    r    r!   rÄ   ƒ  s*    





		
rÄ   c                   @   s:   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  ñ  rN  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Ä   rs   rÕ  r    r    r!   rs   õ  s   z_PartialFile.seekc                 C   sD   	 | j | j }|dkrdS |d u s|dk s||kr|}t | ||¡S )Nr   r  )rä  rË  rÄ   rÎ  )r   rÐ  rØ  Ú	remainingr    r    r!   rÎ  ÿ  s   z_PartialFile._readc                 C   s   t | dƒr	| `d S d S )Nrþ   )rT   rþ   r@   r    r    r!   r[     s   
ÿz_PartialFile.close)NNrá  )r‹   rŒ   r   r"   r  rs   rÎ  r[   r    r    r    r!   r'  è  s    


	r'  Tc              
   C   s†  	 d}z¨t r2zt  | t jt jB ¡ W n ty1 } z|jtjtjtjfv r,t	d| j
 ƒ‚‚ d }~ww |r©zt| j
d ƒ}| ¡  W n ty_ } z|jtjtjfv rZW Y d }~W d S ‚ d }~ww z4zt |j
| j
d ¡ d}W n ttfy†   t |j
| j
d ¡ d}Y nw t |j
¡ W W d S W W d S  ty¨   t |j
¡ t	d| j
 ƒ‚w W d S    t r¸t  | t j¡ |rÂt | j
d ¡ ‚ )NFzlockf: lock unavailable: %sú.lockTzdot lock unavailable: %s)ÚfcntlÚlockfÚLOCK_EXÚLOCK_NBr¯   r°   ÚEAGAINrü   rý   r   r¡   r  r[   r   r«   r¬   r­   r®   rd  rï   r-   ÚLOCK_UN)rÁ   r
  Zdotlock_doner¶   Zpre_lockr    r    r!   r    s^   ÿ€û€üþþÿþîr  c                 C   s>   	 t r
t  | t j¡ tj | jd ¡rt | jd ¡ d S d S )Nræ  )rç  rè  rì  r   r   r—   r¡   r-   ©rÁ   r    r    r!   r  9  s   ÿr  c              	   C   sB   	 t  | t jt jB t jB d¡}zt| dƒW t  |¡ S t  |¡ w )NrÙ   rú   )r   r»   rÚ   r@  ÚO_RDWRr[   )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  H  s
   þr  c                 C   s*   	 |   ¡  ttdƒrt |  ¡ ¡ d S d S )NÚfsync)rX   rT   r   rð  Úfilenorí  r    r    r!   r  N  s
   
ÿr  c                 C   s   	 t | ƒ |  ¡  d S r   )r  r[   rí  r    r    r!   r¢   T  s   r¢   c                   @   r¸  )r   Nr¹  r    r    r    r!   r   Z  rº  r   c                   @   r¸  )r   Nr¹  r    r    r    r!   r   ]  rº  r   c                   @   r¸  )r   Nr¹  r    r    r    r!   r   `  rº  r   c                   @   r¸  )r   Nr¹  r    r    r    r!   r   c  rº  r   c                   @   r¸  )r   Nr¹  r    r    r    r!   r   f  rº  r   )T)1r   rä   rµ  rè   r°   r†  r|   r<   Zemail.messageZemail.generatorrn   r7   Útypesr   rç  ÚImportErrorÚ__all__ru   r\   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>   sp    ÿ j  8 DB4-  3 z%mqH_e
'*