£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
B
    YI~d>3                @   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y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   ,/opt/alt/python37/lib64/python3.7/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 )Nz&Method must be implemented by subclass)r    )r   keyr   r   r   remove-   s    zMailbox.removec             C   s   |  | d S )N)r$   )r   r#   r   r   r   __delitem__1   s    zMailbox.__delitem__c             C   s(   y|  | W n tk
r"   Y nX d S )N)r$   KeyError)r   r#   r   r   r   discard4   s    zMailbox.discardc             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r#   r!   r   r   r   __setitem__;   s    zMailbox.__setitem__c             C   s$   y
|  |S  tk
r   |S X d S )N)__getitem__r&   )r   r#   defaultr   r   r   get?   s    
zMailbox.getc          	   C   s6   | j s| |S t| |}|  |S Q R X d S )N)r   get_message
contextlibclosingget_file)r   r#   filer   r   r   r)   F   s    
zMailbox.__getitem__c             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r#   r   r   r   r,   N   s    zMailbox.get_messagec             C   s   t | | S )N)emailmessage_from_bytes	get_bytes	as_string)r   r#   r   r   r   
get_stringR   s    zMailbox.get_stringc             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r#   r   r   r   r3   Y   s    zMailbox.get_bytesc             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r#   r   r   r   r/   ]   s    zMailbox.get_filec             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r   r   r   iterkeysa   s    zMailbox.iterkeysc             C   s   t |  S )N)listr6   )r   r   r   r   keyse   s    zMailbox.keysc          	   c   s@   x:|   D ].}y| | }W n tk
r0   w
Y nX |V  q
W d S )N)r6   r&   )r   r#   valuer   r   r   
itervaluesi   s    zMailbox.itervaluesc             C   s   |   S )N)r:   )r   r   r   r   __iter__r   s    zMailbox.__iter__c             C   s   t |  S )N)r7   r:   )r   r   r   r   valuesu   s    zMailbox.valuesc          	   c   sD   x>|   D ]2}y| | }W n tk
r0   w
Y nX ||fV  q
W d S )N)r6   r&   )r   r#   r9   r   r   r   	iteritemsy   s    zMailbox.iteritemsc             C   s   t |  S )N)r7   r=   )r   r   r   r   items   s    zMailbox.itemsc             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r#   r   r   r   __contains__   s    zMailbox.__contains__c             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r   r   r   __len__   s    zMailbox.__len__c             C   s    x|   D ]}| | q
W d S )N)r8   r'   )r   r#   r   r   r   clear   s    zMailbox.clearc             C   s0   y| | }W n t k
r    |S X | | |S )N)r&   r'   )r   r#   r*   resultr   r   r   pop   s    
zMailbox.popc             C   s*   x$|   D ]}|| |fS W tdd S )NzNo messages in mailbox)r6   rC   r&   )r   r#   r   r   r   popitem   s    zMailbox.popitemc          	   C   sx   t |dr| }nt |dr(| }n|}d}x6|D ].\}}y|| |< W q6 tk
rb   d}Y q6X q6W |rttdd S )Nr=   r>   FTzNo message with key(s))hasattrr=   r>   r&   )r   argsourceZbad_keyr#   r!   r   r   r   update   s    



zMailbox.updatec             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r   r   r   flush   s    zMailbox.flushc             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r   r   r   lock   s    zMailbox.lockc             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r   r   r   unlock   s    zMailbox.unlockc             C   s   t dd S )Nz&Method must be implemented by subclass)r    )r   r   r   r   close   s    zMailbox.closec             C   s,   y
| d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
ValueError)r   r!   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 nt |tttjfrt |tjrtdtd | }t |tr| |}|r|dd}|dt}|| | jr|ts|t nt|drt|dr2td	td |j}d }x| }|d
r^|d d d }n|drz|d d d }|sP |r|drd|dd   }|dt}|| |}q8W | jr|r|ts|t ntdt| d S )Nr      
z8Use of StringIO input is deprecated, use BytesIO instead   s   
From s   
>From readbufferzDUse of text mode files is deprecated, use a binary mode file insteads   
   s   From s   >From    zInvalid message type: %s)
isinstancer1   r!   r   ioBytesIO	generatorBytesGeneratorflattenseekrS   replacelinesepwrite_append_newlineendswithstrbytesStringIOwarningswarnDeprecationWarninggetvaluerP   rE   rT   readline
startswith	TypeErrortype)	r   r!   targetZmangle_from_rT   gendataZlastlineliner   r   r   _dump_message   sZ    







zMailbox._dump_message)NT)N)N)N)F)#__name__
__module____qualname__r   r"   r$   r%   r'   r(   r+   r)   r,   r5   r3   r/   r6   r8   r:   r;   r<   r=   r>   r?   r@   rA   rC   rD   rH   rI   rJ   rK   rL   rP   rc   rt   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|rt| jd x*| j	 D ]}t|d qnW n
t
| ji | _ddd| _d| _d| _d S )	Ntmpnewcur)ry   rz   r{   i  r   )r{   rz   g?)r   r   r   r   joinr   _pathsexistsmkdirr<   r   _toc_toc_mtimes
_last_read_skewfactor)r   dirnamer   r   r   r   r   r   r     s    
zMaildir.__init__c          
   C   s~  |   }y| || W n* tk
rB   |  t|j  Y nX t| t|t	r||
 }| j|  }|| jkrd}nd}d}tj|j| jd }tj| j||| }t|t	rt|jtj|j| f yLy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 d d }~X Y nX |S )N rz   r   z$Name clash with existing message: %s)_create_tmprt   BaseExceptionrL   r   r$   name_sync_closerY   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"   !  sB    



zMaildir.addc             C   s    t t j| j| | d S )N)r   r$   r   r|   r   _lookup)r   r#   r   r   r   r$   K  s    zMaildir.removec          	   C   s,   y|  | W n ttfk
r&   Y nX d S )N)r$   r&   FileNotFoundError)r   r#   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rt|	tj|	| f t|	|
 d S )NrW   r   )r   r"   rY   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 d Q R X tj|\}}|	| | j
|kr||| j
d  |tjtj| j| |S )NrbrW   )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   r,   r  s    


zMaildir.get_messagec          	   C   s8   t tj| j| |d}| tdS Q R X d S )Nr   rQ   )	r   r   r   r|   r   r   rS   r`   ra   )r   r#   r   r   r   r   r3     s    zMaildir.get_bytesc             C   s$   t tj| j| |d}t|S )Nr   )r   r   r   r|   r   r   
_ProxyFile)r   r#   r   r   r   r   r/     s    zMaildir.get_filec          	   c   sH   |    x:| jD ]0}y| | W n tk
r8   wY nX |V  qW d S )N)_refreshr   r   r&   )r   r#   r   r   r   r6     s    zMaildir.iterkeysc             C   s   |    || jkS )N)r   r   )r   r#   r   r   r   r?     s    zMaildir.__contains__c             C   s   |    t| jS )N)r   lenr   )r   r   r   r   r@     s    zMaildir.__len__c             C   s   d S )Nr   )r   r   r   r   rI     s    zMaildir.flushc             C   s   d S )Nr   )r   r   r   r   rJ     s    zMaildir.lockc             C   s   d S )Nr   )r   r   r   r   rK     s    zMaildir.unlockc             C   s   d S )Nr   )r   r   r   r   rL     s    zMaildir.closec             C   s`   g }xVt | jD ]F}t|dkr|d dkrt jt j| j|r||dd   qW |S )N   r   .)r   listdirr   r   r   isdirr|   append)r   rB   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maildirfolderi  )r   r   r|   r   r   r   r~   rL   r   O_CREATO_WRONLY)r   r   r   rB   Zmaildirfolder_pathr   r   r   
add_folder  s    zMaildir.add_folderc             C   s,  t j| jd| }xTt t j|dt t j|d D ](}t|dk sZ|d dkr>td| q>W xPt |D ]B}|dkrv|dkrv|dkrvt jt j||rvtd||f qvW x`t j|d	d
D ]N\}}}x |D ]}t 	t j|| qW x |D ]}t 
t j|| qW qW t 
| d S )Nr   rz   r{   r   r   zFolder contains message(s): %sry   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   s\   t   }xNttj| jdD ]4}tj| jd|}|tj| dkr t| q W d S )Nry   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|}yt| W n@ tk
r   t jd7  _yt|S  tk
r   Y nX Y nX td	| d S )
N/z\057rx   z\072z%s.M%sP%sQ%s.%sr   g    .Ary   z&Name clash prevented file creation: %s)r   socketgethostnamer`   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rbd}x<| jD ]2}tj| j| }|| j| krLd}|| j|< q$W |sbd S i | _xl| jD ]b}| j| }xRt	|D ]D}tj
||}tj|rq|| jd }tj
||| j|< qW qpW t   | _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|   y,t jt j| j| j| r*| j| S W n tk
r@   Y nX |   y
| j| S  tk
rv   td| d Y nX d S )NzNo message with key: %s)r   r   r~   r|   r   r   r&   r   )r   r#   r   r   r   r   #  s    
zMaildir._lookupc             C   sV   t | ds|  | _x<y| t| j S  tk
r8   d S  tk
rL   wY qX qW d S )N_onetime_keys)rE   r6   r   nextStopIterationr&   )r   r   r   r   r   1  s    

zMaildir.next)NT)ru   rv   rw   r   r   r"   r$   r'   r(   r,   r3   r/   r6   r?   r@   rI   rJ   rK   rL   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 | ||| y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 d d }~X Y nX || _
d | _d| _d| _d| _d| _d | _d S )Nz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   r"   X  s
    z_singlefileMailbox.addc             C   s   |  | | j|= d| _d S )NT)r   r   r   )r   r#   r   r   r   r$   b  s    
z_singlefileMailbox.removec             C   s$   |  | | || j|< d| _d S )NT)r   r   r   r   )r   r#   r!   r   r   r   r(   h  s    
z_singlefileMailbox.__setitem__c             c   s   |    | j E d H  d S )N)r   r   r8   )r   r   r   r   r6   n  s    z_singlefileMailbox.iterkeysc             C   s   |    || jkS )N)r   r   )r   r#   r   r   r   r?   s  s    z_singlefileMailbox.__contains__c             C   s   |    t| jS )N)r   r   r   )r   r   r   r   r@   x  s    z_singlefileMailbox.__len__c             C   s   | j st| j d| _ d S )NT)r   
_lock_filer   )r   r   r   r   rJ   }  s    
z_singlefileMailbox.lockc             C   s   | j rt| j d| _ d S )NF)r   _unlock_filer   )r   r   r   r   rK     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	}yi }| 
| xt| j D ]|}| j| \}}| j| | | | }x0| jtd|| j  }|sP || qW || f||< | | q~W | | _W n"   |  t|j  Y nX t| | j  t| j	j}	t|j|	 yt|j| j	 W n2 tk
r   t| j	 t|j| j	 Y nX t| j	d| _|| _d| _ d| _| jrt| jdd d S )NFr   r   z4Size of mailbox file changed (expected %i, found %i)i   zrb+)dotlock) r   r   _sync_flushr   r_   tellr   r   _create_temporaryr   _pre_mailbox_hooksortedr   r8   _pre_message_hookrS   minrb   _post_message_hookrL   r   r$   r   r   r   st_modechmodr   r   r   r   r   )
r   Zcur_lenZnew_fileZnew_tocr#   startstopZ	new_startrT   moder   r   r   rI     s^    
	






z_singlefileMailbox.flushc             C   s   d S )Nr   )r   r   r   r   r   r     s    z$_singlefileMailbox._pre_mailbox_hookc             C   s   d S )Nr   )r   r   r   r   r   r     s    z$_singlefileMailbox._pre_message_hookc             C   s   d S )Nr   )r   r   r   r   r   r     s    z%_singlefileMailbox._post_message_hookc             C   s4   z|    W d z| jr|   W d | j  X X d S )N)rI   r   rK   r   rL   )r   r   r   r   rL     s    z_singlefileMailbox.closec             C   sL   | j d kr|   |d k	rHy
| j | S  tk
rF   td| d Y nX d S )NzNo message with key: %s)r   _generate_tocr&   )r   r#   r   r   r   r     s    

z_singlefileMailbox._lookupc             C   s   | j dd | j  }t| jdkr8| js8| | j  y&| | j  | |}| 	| j  W n" t
k
r   | j |  Y nX | j   | j  | _|S )Nr   r   )r   r_   r   r   r   r   r   r   _install_messager   r   truncaterI   r   )r   r!   ZbeforeZoffsetsr   r   r   r     s    


z"_singlefileMailbox._append_message)NT)N)ru   rv   rw   r   r"   r$   r(   r6   r?   r@   rJ   rK   rI   r   r   r   rL   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    rQ   rX   r   )r   r   r_   rl   r`   ra   rS   r   _message_factoryset_fromdecode)r   r#   r   r   	from_linestringr   r   r   r   r,     s    z_mboxMMDF.get_messageFc             C   s   t | |j|dS )N)unixfrom)r1   r2   r3   r4   )r   r#   from_r   r   r   r5     s    z_mboxMMDF.get_stringc             C   sJ   |  |\}}| j| |s(| j  | j|| j  }|tdS )NrQ   )r   r   r_   rl   rS   r   r`   ra   )r   r#   r   r   r   r   r   r   r   r3     s    
z_mboxMMDF.get_bytesc             C   s<   |  |\}}| j| |s(| j  t| j| j |S )N)r   r   r_   rl   _PartialFiler   )r   r#   r   r   r   r   r   r   r/     s
    
z_mboxMMDF.get_filec             C   s  d }t |tr| |}t |trf|drf|d}|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rdtt   }| j }| j|t  | || j| j | j }||fS )Ns   From rQ   rW   r   r   r   s   From MAILER-DAEMON )rY   re   rP   rf   rm   find_mboxMMDFMessageget_fromrM   r1   r!   r   get_unixfromr   asctimegmtimer   r   rb   ra   rt   _mangle_from_)r   r!   r   newlineZauthorr   r   r   r   r   r   &  s0    







z_mboxMMDF._install_messageN)F)F)F)	ru   rv   rw   r   r,   r5   r3   r/   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 )N)r
   r   r   r   )r   r   r   r   r   r   r   r   L  s    zmbox.__init__c             C   s   | t d S )N)rb   ra   )r   r   r   r   r   r   Q  s    zmbox._post_message_hookc             C   s   g g  }}d}| j d x| j  }| j  }|dr|t|t|k rl|rb||tt  n
|| || d}q|s|r||tt  n
|| P q|tkrd}qd}qW tt	t
||| _t| j| _| j  | _d S )NFr   s   From T)r   r_   r   rl   rm   r   r   ra   dict	enumeratezipr   r   r   )r   startsstopsZlast_was_emptyline_posrs   r   r   r   r   U  s0    






zmbox._generate_toc)NT)ru   rv   rw   r   rc   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 )N)r   r   r   r   )r   r   r   r   r   r   r   r   z  s    zMMDF.__init__c             C   s   | dt  d S )Ns   )rb   ra   )r   r   r   r   r   r     s    zMMDF._pre_message_hookc             C   s   | td t  d S )Ns   )rb   ra   )r   r   r   r   r   r     s    zMMDF._post_message_hookc             C   s   g g  }}| j d d}x|}| j  }| j  }|dt r|| xV|}| j  }| j  }|dt kr||tt  P qN|sN|| P qNW q|sP qW tt	t
||| _t| j| _| j dd | j  | _d S )Nr   s   r   )r   r_   rl   r   rm   ra   r   r   r   r  r  r   r   r   )r   r  r  next_posr  rs   r   r   r   r     s2    






zMMDF._generate_toc)NT)ru   rv   rw   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 )Ni  z.mh_sequencesi  F)r   r   r   r   r~   r   r   rL   r   r|   r   O_EXCLr   r   r   )r   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
| zfy| || W n: tk
r   | j	rt| t| d}t|  Y nX t|tr| || W d | j	rt| X W d |st| X |S )Nr   r   FT)r8   r   maxr   r   r|   r   re   r   r   r   rt   r   r   r   r$   rY   r   _dump_sequences)r   r!   r8   Znew_keyr   r   closedr   r   r   r"     s6    


zMH.addc          
   C   sx   t j| jt|}yt|d}W n> tk
r` } z |jtjkrNt	d| n W d d }~X Y nX |
  t | d S )Nzrb+zNo message with key: %s)r   r   r|   r   re   r   r   r   r   r&   rL   r$   )r   r#   r   r   r   r   r   r   r$     s    z	MH.removec          
   C   s   t j| jt|}yt|d}W n> tk
r` } z |jtjkrNt	d| n W d d }~X Y nX zd| j
rrt| z@t t |t jt jB  | || t|tr| || W d | j
rt| X W d t| X d S )Nzrb+zNo message with key: %s)r   r   r|   r   re   r   r   r   r   r&   r   r   rL   r   O_TRUNCrt   rY   r   r	  r   r   )r   r#   r!   r   r   r   r   r   r   r(     s$    
zMH.__setitem__c          
   C   s   y@| 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 d d }~X Y nX |2 | j rt| zt|}W d | j rt| X W d Q R X x*|   D ]\}}||kr|| qW |S )Nzrb+r   zNo message with key: %s)r   r   r   r   r|   r   re   r   r   r   r&   r   r   r   get_sequencesr>   add_sequence)r   r#   r   r   r   r   key_listr   r   r   r,     s&    zMH.get_messagec          
   C   s   y@| 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 d d }~X Y nX |6 | j rt| z| tdS | j rt| X W d Q R X d S )Nzrb+r   zNo message with key: %srQ   )r   r   r   r   r|   r   re   r   r   r   r&   r   rS   r`   ra   r   )r   r#   r   r   r   r   r   r3     s    zMH.get_bytesc          
   C   sf   yt tj| jt|d}W n> tk
r\ } z |jtjkrJt	d| n W d d }~X Y nX t
|S )Nr   zNo message with key: %s)r   r   r   r|   r   re   r   r   r   r&   r   )r   r#   r   r   r   r   r   r/   )  s    zMH.get_filec             C   s   t tdd t| jD S )Nc             s   s   | ]}|  rt|V  qd S )N)isdigitr   ).0r   r   r   r   	<genexpr>6  s    zMH.iterkeys.<locals>.<genexpr>)iterr   r   r   r   )r   r   r   r   r6   4  s    zMH.iterkeysc             C   s   t jt j| jt|S )N)r   r   r~   r|   r   re   )r   r#   r   r   r   r?   9  s    zMH.__contains__c             C   s   t t|  S )N)r   r7   r6   )r   r   r   r   r@   =  s    z
MH.__len__c             C   s2   | j s.ttj| jdd| _t| j d| _ d S )Nz.mh_sequenceszrb+T)r   r   r   r   r|   r   r   r   )r   r   r   r   rJ   A  s    
zMH.lockc             C   s(   | j r$t| j t| j | `d| _ d S )NF)r   r   r   r   )r   r   r   r   rK   H  s
    

z	MH.unlockc             C   s   d S )Nr   )r   r   r   r   rI   P  s    zMH.flushc             C   s   | j r|   d S )N)r   rK   )r   r   r   r   rL   T  s    zMH.closec             C   s@   g }x6t | jD ]&}t jt j| j|r|| qW |S )N)r   r   r   r   r   r|   r   )r   rB   r   r   r   r   r   Y  s
    zMH.list_foldersc             C   s   t tj| j|| jddS )NF)r   r   )r   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 )N)r   )r   r   r   r|   r   r   )r   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 )Nz.mh_sequencesz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|   x|D ]}y|d\}}t }xT| D ]H}| rr|	t
| qVdd |dD \}}	|t||	d	  qVW  fd
dt|D ||< t|| dkr||= W q2 tk
r   td|  Y q2X q2W W d Q R X |S )Nz.mh_sequencesrASCII)encodingrx   c             s   s   | ]}t |V  qd S )N)r   )r  xr   r   r   r    s    z#MH.get_sequences.<locals>.<genexpr>-r   c                s   g | ]}| kr|qS r   r   )r  r#   )all_keysr   r   
<listcomp>  s    z$MH.get_sequences.<locals>.<listcomp>r   z"Invalid sequence specification: %s)r   r   r   r|   r   setr8   r   r  r"   r   rH   ranger   r   rO   r   rstrip)
r   resultsr   rs   r   contentsr8   specr   r   r   )r  r   r  w  s&    

 zMH.get_sequencesc             C   s
  t tj| jdddd}ztt |jtjtjB  x|	 D ]\}}t
|dkrXqB||d  d }d}xbtt|D ]R}|d |kr|sd	}|d
 n*|rd}|d||f  n|d|  |}q|W |r|t|d  qB|d qBW W d t| X d S )Nz.mh_sequenceszr+r  )r  r   rx   Fr   Tr  z%s %sz %s
)r   r   r   r|   r   rL   r   r   r  r>   r   rb   r   r  re   r   )r   	sequencesr   r   r8   prevZ
completingr#   r   r   r   set_sequences  s.    zMH.set_sequencesc       	      C   sL  |   }d}g }x|  D ]}|d |kr|||d f y4t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W |d | _t|dkrd S xB| D ]6\}}x*|D ]"\}}||kr||||< qW qW | | d S )Nr   r   )r  r6   r   r   r   r   r|   r   re   r   r   r   unlinkr   r   r>   indexr$  )	r   r"  r#  Zchangesr#   r   r  oldrz   r   r   r   pack  s,     

zMH.packc             C   s|   |  }|   }x<| D ]0\}}||kr6|| q||kr|||= qW x|D ]}||krT|g||< qTW | | d S )N)r  r>   r   r&  r$  )r   r!   r#   Zpending_sequencesZall_sequencesr   r  sequencer   r   r   r	    s    
zMH._dump_sequences)NT)ru   rv   rw   r   r"   r$   r(   r,   r3   r/   r6   r?   r@   rJ   rK   rI   rL   r   r   r   r   r  r$  r(  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 )N)r   r   _labels)r   r   r   r   r   r   r   r     s    zBabyl.__init__c             C   s(   t | |}t|tr$| | j|< |S )N)r   r"   rY   r   
get_labelsr/  )r   r!   r#   r   r   r   r"     s    
z	Babyl.addc             C   s"   t | | || jkr| j|= d S )N)r   r$   r/  )r   r#   r   r   r   r$     s    
zBabyl.removec             C   s*   t | || t|tr&| | j|< d S )N)r   r(   rY   r   r0  r/  )r   r#   r!   r   r   r   r(     s    
zBabyl.__setitem__c       
      C   s   |  |\}}| j| | j  t }x2| j }|dt ksH|sJP ||td q.W t }x.| j }|tks|sP ||td qjW || j	  }| j
|}|td}t| | }	|	|  || jkr|	| j|  |	S )Ns   *** EOOH ***rQ   )r   r   r_   rl   rZ   r[   ra   rb   r`   r   rS   r   rk   set_visibler/  
set_labels)
r   r#   r   r   original_headersrs   Zvisible_headersnZbodyr   r   r   r   r,     s.    



zBabyl.get_messagec       	      C   s   |  |\}}| j| | j  t }x2| j }|dt ksH|sJP ||td q.W x| j }|tksx|sbP qbW |	 }|| j
  }| j|}|td}|| S )Ns   *** EOOH ***rQ   )r   r   r_   rl   rZ   r[   ra   rb   r`   rk   r   rS   )	r   r#   r   r   r3  rs   Zheadersr4  rr   r   r   r   r3     s$    


zBabyl.get_bytesc             C   s   t | |dtS )NrQ   )rZ   r[   r3   r`   ra   )r   r#   r   r   r   r/   %  s    zBabyl.get_filec             C   s@   |    t }x| j D ]}|| qW || j t|S )N)r   r  r/  r<   rH   difference_update_special_labelsr7   )r   labelsZ
label_listr   r   r   r0  )  s    zBabyl.get_labelsc             C   s>  g g  }}| j d d}g }x|}| j  }| j  }|dt krt|t|k rf||tt  || dd | j  dd  dD }|| q |dks|dt krt|t|k r||tt  q |s ||tt  P q W tt	t
||| _tt	|| _t| j| _| j dd | j  | _d S )	Nr   s   c             S   s   g | ]}|  r|  qS r   )strip)r  labelr   r   r   r  @  s    z'Babyl._generate_toc.<locals>.<listcomp>r      ,   r   )r   r_   rl   r   ra   r   r   r   r   r  r  r   r/  r   r   )r   r  r  r  Zlabel_listsr  rs   r7  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 )N)rM   )r  r9  r   r   r   r  U  s    z*Babyl._pre_mailbox_hook.<locals>.<genexpr>s   Labels:r:  r;  )ra   r0  r|   rb   )r   r   Zbabylr7  r   r   r   r   P  s    zBabyl._pre_mailbox_hookc             C   s   | dt  d S )N   )rb   ra   )r   r   r   r   r   r   Z  s    zBabyl._pre_message_hookc             C   s   | td  d S )Nr;  )rb   ra   )r   r   r   r   r   r   ^  s    zBabyl._post_message_hookc             C   s  | j  }t|trg }g }x0| D ]$}|| jkr@|| q&|| q&W | j d x |D ]}| j d|   q`W | j d x$|D ]}| j d|  d  qW | j t	 n| j dt	  t|t
jjr*t }t
j|dd}|| |d x4| }| j |d	t	 |d	ks6|s
P q
W | j d
t	  t|trt }	t
j|	dd}
|
|  xv|	 }| j |d	t	 |d	ks|sP qW n@|d x4| }| j |d	t	 |d	ks|sP qW x,|d}|sP | j |d	t	 qW nXt|tttjfr&t|tjrbtdtd | }t|trx| |}|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	 n\t |drrt |drRtdtd |j!}| }d}x| }|"dr|d d d	 }n|"dr|d d d	 }| j |d	t	 |d	ks|s`|rd}| j d
t	  || nP q`W x| }|sP |"dr$|d d t	 }n:|"drB|d d t	 }n|"d	r^|d d t	 }| j | qW nt#dt$| | j  }||fS )N   1s   , s   ,,    r:  s   1,,Fr   rQ   s   *** EOOH ***i   z8Use of StringIO input is deprecated, use BytesIO insteadrR   s   

r   rW   rl   rT   zDUse of text mode files is deprecated, use a binary mode file insteadTs   
rU   rV   zInvalid message type: %s)%r   r   rY   r   r0  r6  r   rb   rM   ra   r1   r!   r   rZ   r[   r\   r]   r^   r_   rl   r`   get_visiblerS   rf   re   rg   rh   ri   rj   rk   rP   r   rE   rT   rd   rn   ro   )r   r!   r   Zspecial_labelsr7  r9  Zorig_bufferZorig_generatorrs   Z
vis_bufferZvis_generatorrT   Z
body_startZoriginal_posZ
first_passr   r   r   r   r   b  s    











zBabyl._install_message)NT)ru   rv   rw   	frozensetr6  r   r"   r$   r(   r,   r3   r/   r0  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||  nt |trP| t	| n~t |t
rl| t| nbt |tjr| t| nDt|dr| t| n(|d krtjj|  ntdt| d S )NrS   zInvalid message type: %s)rY   r1   r!   r   _become_messagecopyZdeepcopy_explain_torf   r2   re   Zmessage_from_stringrZ   TextIOWrapperZmessage_from_filerE   Zmessage_from_binary_filer   rn   ro   )r   r!   r   r   r   r     s    



zMessage.__init__c             C   s8   t |dg }x&|jD ]}||kr|j| | j|< qW d S )N_type_specific_attributes)getattr__dict__)r   r!   Ztype_specificr   r   r   r   rA    s    zMessage._become_messagec             C   s   t |trd S tdd S )Nz Cannot convert to specified type)rY   r   rn   )r   r!   r   r   r   rC    s    
zMessage._explain_to)N)ru   rv   rw   r   rA  rC  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 )Nrz   r   )rH  rI  r   rJ  r   r   )r   r!   r   r   r   r     s    
zMaildirMessage.__init__c             C   s   | j S )N)rH  )r   r   r   r   r     s    zMaildirMessage.get_subdirc             C   s(   |dks|dkr|| _ ntd| d S )Nrz   r{   z!subdir must be 'new' or 'cur': %s)rH  rO   )r   r   r   r   r   r     s    zMaildirMessage.set_subdirc             C   s"   | j dr| j dd  S dS d S )Nz2,r   r   )rI  rm   )r   r   r   r   	get_flags
  s    zMaildirMessage.get_flagsc             C   s   dd t| | _d S )Nz2,r   )r|   r   rI  )r   flagsr   r   r   	set_flags  s    zMaildirMessage.set_flagsc             C   s$   |  dt|  t|B  d S )Nr   )rM  r|   r  rK  )r   flagr   r   r   add_flag  s    zMaildirMessage.add_flagc             C   s,   |   r(| dt|   t|  d S )Nr   )rK  rM  r|   r  )r   rN  r   r   r   remove_flag  s    zMaildirMessage.remove_flagc             C   s   | j S )N)rJ  )r   r   r   r   r     s    zMaildirMessage.get_datec             C   s6   yt || _W n" tk
r0   td| d Y nX d S )Nzcan't convert to float: %s)floatrJ  rO   rn   )r   Zdater   r   r   r   "  s    zMaildirMessage.set_datec             C   s   | j S )N)rI  )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)rY   re   rI  rn   ro   )r   infor   r   r   r   -  s    
zMaildirMessage.set_infoc             C   s  t |tr8||   ||   ||   nht |trt	|  }d|kr`|
d |  dkrv|
d d|kr|
d d|kr|
d d|kr|
d |d	t|   nt |trt	|  }d|kr|d
 d|kr|d d|kr|d nt |trt	|  }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AzMAILER-DAEMONr*  repliedflaggedr+  r,  Pr-  z$Cannot convert to specified type: %s)rY   r	   rM  rK  r   r   r   r   r   r  rO  r   r   r   r   r  r   	add_labelr   rn   ro   )r   r!   rL  r   r   r   rC  4  sN    

















zMaildirMessage._explain_to)N)ru   rv   rw   rE  r   r   r   rK  rM  rO  rP  r   r   r   r   rC  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 )NzMAILER-DAEMONTzFrom rX   )r   rY   r1   r!   r   r   rm   r   )r   r!   r   r   r   r   r   e  s    z_mboxMMDFMessage.__init__c             C   s   | j S )N)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   zX-Status)r+   )r   r   r   r   rK  z  s    z_mboxMMDFMessage.get_flagsc             C   s   t |}d\}}x&dD ]}||kr||7 }|| qW x&dD ]}||kr>||7 }|| q>W |dt|7 }y| d| W n  tk
r   | d| Y nX y| d| W n  tk
r   | d| Y nX d S )N)r   r   )rT  rU  )rW  rX  rY  r   r`  zX-Status)r  r$   r|   r   replace_headerr&   Z
add_header)r   rL  Zstatus_flagsZxstatus_flagsrN  r   r   r   rM  ~  s&    

z_mboxMMDFMessage.set_flagsc             C   s$   |  dt|  t|B  d S )Nr   )rM  r|   r  rK  )r   rN  r   r   r   rO    s    z_mboxMMDFMessage.add_flagc             C   s4   d| ksd| kr0|  dt|  t|  d S )Nr`  zX-Statusr   )rM  r|   r  rK  )r   rN  r   r   r   rP    s    z_mboxMMDFMessage.remove_flagc          	   C   s  t |trt|  }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  }y|	t
t|d W n ttfk
r   Y nX n
t |tr||   ||   nt |trZt|  }d|kr$|d d|kr8|d d|krL|d |d	= |d
= nt |trt|  }d|kr|d d|kr|d d|kr|d |d	= |d
= nt |trntdt| d S )NrU  r{   rX  rY  rT  rS  rW  rV  statuszx-statusr_  z%a %b %d %H:%M:%S %Yr*  rZ  r[  r+  r,  z$Cannot convert to specified type: %s)rY   r	   r  rK  r   rO  r|   r   r   r   calendarZtimegmr   ZstrptimerO   OverflowErrorr   rM  r   r   r  r   r]  r   rn   ro   )r   r!   rL  Z
maybe_dater   r   r   rC    s^    



















z_mboxMMDFMessage._explain_to)N)N)ru   rv   rw   rE  r   r   r   rK  rM  rO  rP  rC  r   r   r   r   r   `  s   
	
r   c               @   s   e Zd ZdS )r
   N)ru   rv   rw   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 )N)rf  r   r   )r   r!   r   r   r   r     s    zMHMessage.__init__c             C   s   | j d d  S )N)rf  )r   r   r   r   r    s    zMHMessage.get_sequencesc             C   s   t || _d S )N)r7   rf  )r   r"  r   r   r   r$    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)rY   re   rf  r   rn   ro   )r   r)  r   r   r   r    s    

zMHMessage.add_sequencec             C   s*   y| j | W n tk
r$   Y nX d S )N)rf  r$   rO   )r   r)  r   r   r   remove_sequence  s    zMHMessage.remove_sequencec             C   sJ  t |trdt|  }d|kr*|d n|d |d d|krP|d d|krb|d nt |trt|  }d|kr|d n
|d	 d|kr|d d|kr|d
 nt |trx||  D ]}|| qW n`t |t	r(t|  }d|kr|
d d|krF|
d nt |tr6ntdt| d S )Nr*  r{   rS  r[  rX  rZ  rT  ROrU  rY  r,  z$Cannot convert to specified type: %s)rY   r	   r  r  r   rO  r   r   r  r   r]  r   rn   ro   )r   r!   r"  r)  r   r   r   rC    s@    










zMHMessage._explain_to)N)
ru   rv   rw   rE  r   r  r$  r  rg  rC  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   r/  _visibleNc             C   s   g | _ t | _t| | d S )N)r/  r   ri  r   )r   r!   r   r   r   r   "  s    zBabylMessage.__init__c             C   s   | j d d  S )N)r/  )r   r   r   r   r0  (  s    zBabylMessage.get_labelsc             C   s   t || _d S )N)r7   r/  )r   r7  r   r   r   r2  ,  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)rY   re   r/  r   rn   ro   )r   r9  r   r   r   r]  0  s    

zBabylMessage.add_labelc             C   s*   y| j | W n tk
r$   Y nX d S )N)r/  r$   rO   )r   r9  r   r   r   remove_label8  s    zBabylMessage.remove_labelc             C   s
   t | jS )N)r   ri  )r   r   r   r   r?  ?  s    zBabylMessage.get_visiblec             C   s   t || _d S )N)r   ri  )r   Zvisibler   r   r   r1  C  s    zBabylMessage.set_visiblec             C   sj   x6| j  D ](}|| kr,| j || |  q| j |= qW x,dD ]$}|| kr>|| j kr>| | | j |< q>W d S )N)ZDateZFromzReply-ToZToZCCZSubject)ri  r8   ra  )r   headerr   r   r   update_visibleG  s    
zBabylMessage.update_visiblec             C   sv  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
 nt |trt|  }d|kr|d n
|d d	|kr|d d|kr|d nt |trt|  }d|kr|d d|krr|d nXt |t	rT|
|   x<|  D ]}|| q>W nt |trbntdt| d S )Nr*  r{   rS  r-  r.  r\  r,  rT  r+  rV  rh  rU  rW  rY  rZ  z$Cannot convert to specified type: %s)rY   r	   r  r0  r   rO  r   r   r  r   r1  r?  r]  r   rn   ro   )r   r!   r7  r9  r   r   r   rC  R  sF    










zBabylMessage._explain_to)N)ru   rv   rw   rE  r   r0  r2  r]  rj  r?  r1  rl  rC  r   r   r   r   r     s   
c               @   s   e Zd ZdS )r   N)ru   rv   rw   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 )N)r   r   _pos)r   r   posr   r   r   r     s    z_ProxyFile.__init__c             C   s   |  || jjS )N)_readr   rS   )r   sizer   r   r   rS     s    z_ProxyFile.readc             C   s   |  || jjS )N)ro  r   read1)r   rp  r   r   r   rq    s    z_ProxyFile.read1c             C   s   |  || jjS )N)ro  r   rl   )r   rp  r   r   r   rl     s    z_ProxyFile.readlinec             C   s>   g }x4| D ],}| | |d k	r
|t|8 }|dkr
P q
W |S )Nr   )r   r   )r   sizehintrB   rs   r   r   r   	readlines  s    

z_ProxyFile.readlinesc             c   s    x|   }|sd S |V  qW d S )N)rl   )r   rs   r   r   r   r;     s
    z_ProxyFile.__iter__c             C   s   | j S )N)rm  )r   r   r   r   r     s    z_ProxyFile.tellr   c             C   s4   |dkr| j | j | j || | j  | _d S )Nr   )r   r_   rm  r   )r   offsetwhencer   r   r   r_     s    z_ProxyFile.seekc             C   s0   t | dr,zt | jdr"| j  W d | `X d S )Nr   rL   )rE   r   rL   )r   r   r   r   rL     s
    
z_ProxyFile.closec             C   s2   |d krd}| j | j ||}| j  | _|S )NrW   )r   r_   rm  r   )r   rp  read_methodrB   r   r   r   ro    s    z_ProxyFile._readc             C   s   | S )Nr   )r   r   r   r   	__enter__  s    z_ProxyFile.__enter__c             G   s   |    d S )N)rL   )r   excr   r   r   __exit__  s    z_ProxyFile.__exit__c             C   s
   | j  S )N)r   readable)r   r   r   r   rz    s    z_ProxyFile.readablec             C   s
   | j  S )N)r   writable)r   r   r   r   r{    s    z_ProxyFile.writablec             C   s
   | j  S )N)r   seekable)r   r   r   r   r|    s    z_ProxyFile.seekablec             C   s
   | j  S )N)r   rI   )r   r   r   r   rI     s    z_ProxyFile.flushc             C   s&   t | dsdS t | jdsdS | jjS )Nr   Tr
  F)rE   r   r
  )r   r   r   r   r
    s
    
z_ProxyFile.closed)N)N)N)N)N)r   )ru   rv   rw   r   rS   rq  rl   rs  r;   r   r_   rL   ro  rw  ry  rz  r{  r|  rI   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 )N)r   r   _start_stop)r   r   r   r   r   r   r   r     s    z_PartialFile.__init__c             C   s   t | | j S )N)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~  rm  r  r   r_   )r   rt  ru  r   r   r   r_     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  rm  r   ro  )r   rp  rv  Z	remainingr   r   r   ro    s    z_PartialFile._readc             C   s   t | dr| `d S )Nr   )rE   r   )r   r   r   r   rL     s    
z_PartialFile.close)NN)r   )ru   rv   rw   r   r   r_   ro  rL   r   r   r   r   r     s
   


	r   Tc          
   C   s  d}yZt rpy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 d d }~X Y nX |r^yt| j
d }|  W n: tk
r } z|jtjtjfkrd S  W d d }~X Y nX y`y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
r\   t|j
 t	d| j
 Y nX W n8   t r|t | t j |rt| j
d   Y nX d S )NFzlockf: lock unavailable: %sz.lockTzdot lock unavailable: %s)fcntllockfZLOCK_EXZLOCK_NBr   r   ZEAGAINr   r   r   r   r   rL   r   r   r   r   r   r%  r   r$   LOCK_UN)r   r   Zdotlock_doner   Zpre_lockr   r   r   r   
  sH    
r   c             C   s8   t rt | t j tj| jd r4t| jd  d S )Nz.lock)r  r  r  r   r   r~   r   r$   )r   r   r   r   r   4  s    r   c          	   C   s8   t | t jt jB t jB d}z
t| dS t | X d S )Ni  zrb+)r   r   r   r  O_RDWRrL   )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)rI   rE   r   r  fileno)r   r   r   r   r   I  s    
r   c             C   s   t |  |   d S )N)r   rL   )r   r   r   r   r   O  s    r   c               @   s   e Zd ZdS )r   N)ru   rv   rw   r   r   r   r   r   U  s   c               @   s   e Zd ZdS )r   N)ru   rv   rw   r   r   r   r   r   X  s   c               @   s   e Zd ZdS )r   N)ru   rv   rw   r   r   r   r   r   [  s   c               @   s   e Zd ZdS )r   N)ru   rv   rw   r   r   r   r   r   ^  s   c               @   s   e Zd ZdS )r   N)ru   rv   rw   r   r   r   r   r   a  s   )T)/r   r   rd  r   r   rB  rh   r1   Zemail.messageZemail.generatorrZ   r-   r  ImportError__all__ra   rM   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>	   sn   

 h  8 DB4-  3 z%mqH_c'
*