£Á°è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>
a
    XC?h3                    @   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y   dZY n0 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dDd/d0Zd1d2 ZdEd3d4Zd5d6 Zd7d8 Zd9d: Zd;d< Zd=d> Z d?Z!dFd@dAZ"e#e$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/python39/lib64/python3.9/mailbox.py__init__%   s    zMailbox.__init__c                 C   s   t dd S Nz&Method must be implemented by subclassNotImplementedErrorr   messager    r    r!   add*   s    zMailbox.addc                 C   s   t dd S r#   r$   r   keyr    r    r!   remove.   s    zMailbox.removec                 C   s   |  | d S r   )r+   r)   r    r    r!   __delitem__2   s    zMailbox.__delitem__c                 C   s&   z|  | W n ty    Y n0 d S r   )r+   KeyErrorr)   r    r    r!   discard5   s    zMailbox.discardc                 C   s   t dd S r#   r$   r   r*   r'   r    r    r!   __setitem__<   s    zMailbox.__setitem__c                 C   s(   z|  |W S  ty"   | Y S 0 d S r   )__getitem__r-   )r   r*   defaultr    r    r!   get@   s    zMailbox.getc                 C   sN   | j s| |S t| |}|  |W  d    S 1 s@0    Y  d S r   )r   get_message
contextlibclosingget_file)r   r*   filer    r    r!   r1   G   s    
zMailbox.__getitem__c                 C   s   t dd S r#   r$   r)   r    r    r!   r4   O   s    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   s   t dd S r#   r$   r)   r    r    r!   r<   Z   s    zMailbox.get_bytesc                 C   s   t dd S r#   r$   r)   r    r    r!   r7   ^   s    zMailbox.get_filec                 C   s   t dd S r#   r$   r   r    r    r!   iterkeysb   s    zMailbox.iterkeysc                 C   s   t |  S r   )listr?   r>   r    r    r!   keysf   s    zMailbox.keysc              	   c   s<   |   D ].}z| | }W n ty.   Y qY n0 |V  qd S r   r?   r-   r   r*   valuer    r    r!   
itervaluesj   s    
zMailbox.itervaluesc                 C   s   |   S r   )rE   r>   r    r    r!   __iter__s   s    zMailbox.__iter__c                 C   s   t |  S r   )r@   rE   r>   r    r    r!   valuesv   s    zMailbox.valuesc              	   c   s@   |   D ]2}z| | }W n ty.   Y qY n0 ||fV  qd S r   rB   rC   r    r    r!   	iteritemsz   s    
zMailbox.iteritemsc                 C   s   t |  S r   )r@   rH   r>   r    r    r!   items   s    zMailbox.itemsc                 C   s   t dd S r#   r$   r)   r    r    r!   __contains__   s    zMailbox.__contains__c                 C   s   t dd S r#   r$   r>   r    r    r!   __len__   s    zMailbox.__len__c                 C   s   |   D ]}| | qd S r   )rA   r.   r)   r    r    r!   clear   s    zMailbox.clearc                 C   s2   z| | }W n t y"   | Y S 0 | | |S r   )r-   r.   )r   r*   r2   resultr    r    r!   pop   s    

zMailbox.popc                 C   s*   |   D ]}|| |f  S tdd S )NzNo messages in mailbox)r?   rN   r-   r)   r    r    r!   popitem   s    zMailbox.popitemc              	   C   sr   t |dr| }nt |dr(| }n|}d}|D ],\}}z|| |< W q4 ty^   d}Y q40 q4|rntdd S )NrH   rI   FTzNo message with key(s))hasattrrH   rI   r-   )r   argsourceZbad_keyr*   r'   r    r    r!   update   s    



zMailbox.updatec                 C   s   t dd S r#   r$   r>   r    r    r!   flush   s    zMailbox.flushc                 C   s   t dd S r#   r$   r>   r    r    r!   lock   s    zMailbox.lockc                 C   s   t dd S r#   r$   r>   r    r    r!   unlock   s    zMailbox.unlockc                 C   s   t dd S r#   r$   r>   r    r    r!   close   s    zMailbox.closec                 C   s,   z| dW S  ty&   tdY n0 d S )Nr   z?String input must be ASCII-only; use bytes or a Message instead)encodeUnicodeError
ValueErrorr&   r    r    r!   _string_to_bytes   s    zMailbox._string_to_bytesFc           	      C   s  t |tjjrvt }tj||d}|| |	d |
 }|dt}|| | jrr|tsr|t 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 }| }|d
r\|d d d }n|drx|d d d }|sq|r|drd|dd   }|dt}|| |}q6| jr|r|ts|t ntdt| d S )Nr      
8Use of StringIO input is deprecated, use BytesIO instead   s   
From s   
>From readbufferDUse of text mode files is deprecated, use a binary mode file instead   
      From s   >From    Invalid message type: %s)
isinstancer:   r'   r	   ioBytesIO	generatorBytesGeneratorflattenseekr_   replacelinesepwrite_append_newlineendswithstrbytesStringIOwarningswarnDeprecationWarninggetvaluer[   rP   r`   readline
startswith	TypeErrortype)	r   r'   targetZmangle_from_r`   gendataZlastlineliner    r    r!   _dump_message   s\    






zMailbox._dump_message)NT)N)N)N)F)&__name__
__module____qualname__r"   r(   r+   r,   r.   r0   r3   r1   r4   r=   r<   r7   r?   rA   rE   rF   rG   rH   rI   rJ   rK   rL   rN   rO   rS   rT   rU   rV   rW   r[   rs   r   classmethodr   __class_getitem__r    r    r    r!   r   "   sB   

		
	

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s|rt| jd | j	 D ]}t|d qln
t
| ji | _ddd| _d| _d| _d S )	Ntmpnewcur)r   r   r     r   )r   r   g?)r   r"   r   r   joinr   _pathsexistsmkdirrG   r   _toc_toc_mtimes
_last_read_skewfactor)r   dirnamer   r   r   r    r    r!   r"     s    
zMaildir.__init__c              
   C   s|  |   }z| || W n( ty@   |  t|j  Y n0 t| t|t	rz|
 }| j|  }|| jkrd}nd}d}tj|j| jd }tj| j||| }t|t	rt|jtj|j| f zJzt|j| W n& ttfy   t|j| Y n0 t|j W nP tyv } z6t|j |jtjkr`td| n W Y d }~n
d }~0 0 |S )N r   r   z$Name clash with existing message: %s)_create_tmpr   BaseExceptionrW   r   r+   name_sync_closeri   r
   
get_subdircolonget_infor   basenamesplitr   r   utimegetatimeget_datelinkAttributeErrorPermissionErrorrenameOSErrorerrnoZEEXISTr   )r   r'   Ztmp_filesubdirsuffixuniqdester    r    r!   r(   $  sF    


zMaildir.addc                 C   s    t t j| j| | d S r   )r   r+   r   r   r   _lookupr)   r    r    r!   r+   N  s    zMaildir.removec              	   C   s*   z|  | W n ttfy$   Y n0 d S r   )r+   r-   FileNotFoundErrorr)   r    r    r!   r.   R  s    zMaildir.discardc                 C   s   |  |}| |}|  |}t|tr.|}n|}tj|}| j|v r`| j|| jd  }nd}| 	| tj
| j|}	tj
| j||| }
t|trt|	tj|	| f t|	|
 d S )Nre   r   )r   r(   ri   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!   r0   Z  s$    






zMaildir.__setitem__c                 C   s   |  |}ttj| j|d*}| jr4| |}nt|}W d    n1 sP0    Y  tj|\}}|	| | j
|v r||| j
d  |tjtj| j| |S )Nrbre   )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!   r4   u  s    
&

zMaildir.get_messagec                 C   sP   t tj| j| |d }| tdW  d    S 1 sB0    Y  d S )Nr   r\   )	r   r   r   r   r   r   r_   rp   rq   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!   r7     s    zMaildir.get_filec              	   c   sD   |    | jD ]0}z| | W n ty6   Y qY n0 |V  qd S r   )_refreshr   r   r-   r)   r    r    r!   r?     s    

zMaildir.iterkeysc                 C   s   |    || jv S r   )r   r   r)   r    r    r!   rJ     s    zMaildir.__contains__c                 C   s   |    t| jS r   )r   lenr   r>   r    r    r!   rK     s    zMaildir.__len__c                 C   s   d S r   r    r>   r    r    r!   rT     s    zMaildir.flushc                 C   s   d S r   r    r>   r    r    r!   rU     s    zMaildir.lockc                 C   s   d S r   r    r>   r    r    r!   rV     s    zMaildir.unlockc                 C   s   d S r   r    r>   r    r    r!   rW     s    zMaildir.closec                 C   s\   g }t | jD ]F}t|dkr|d dkrt jt j| j|r||dd   q|S )N   r   .)r   listdirr   r   r   isdirr   appendr   rM   entryr    r    r!   list_folders  s    zMaildir.list_foldersc                 C   s    t tj| jd| | jddS )Nr   Fr   r   )r   r   r   r   r   r   r   folderr    r    r!   
get_folder  s    zMaildir.get_folderc                 C   s\   t j| jd| }t|| jd}t j|d}t j|sXt t |t j	t j
B d |S )Nr   r   Zmaildirfolder  )r   r   r   r   r   r   r   rW   r   O_CREATO_WRONLY)r   r   r   rM   Zmaildirfolder_pathr    r    r!   
add_folder  s    zMaildir.add_folderc                 C   s  t j| jd| }t t j|dt t j|d D ](}t|dk sX|d dkr<td| q<t |D ]B}|dkrp|dkrp|dkrpt jt j||rptd||f qpt j|d	d
D ]F\}}}|D ]}t 	t j|| q|D ]}t 
t j|| qqt 
| d S )Nr   r   r   r   r   zFolder contains message(s): %sr   z%Folder contains subdirectory '%s': %sF)topdown)r   r   r   r   r   r   r   r   walkr+   rmdir)r   r   r   r   rootdirsfilesr    r    r!   remove_folder  s&    zMaildir.remove_folderc                 C   sX   t   }ttj| jdD ]4}tj| jd|}|tj| dkrt| qd S )Nr   i@ )timer   r   r   r   r   r   r+   )r   nowr   r   r    r    r!   clean  s
    zMaildir.cleanr   c                 C   s   t   }t }d|v r$|dd}d|v r8|dd}dt|t|d d t tj|f }tj	
| jd|}zt| W nB ty   t jd7  _zt|W  Y S  ty   Y n0 Y n0 td	| d S )
N/z\057r   z\072z%s.M%sP%sQ%s.%sr   g    .Ar   z&Name clash prevented file creation: %s)r   socketgethostnamerp   intr   getpidr   _countr   r   r   statr   _create_carefullyFileExistsErrorr   )r   r   Zhostnamer   r   r    r    r!   r     s*    zMaildir._create_tmpc                 C   s   t   | j d| j kr^d}| jD ]2}tj| j| }|| j| krJd}|| j|< q"|s^d S i | _| jD ]^}| j| }t	|D ]D}tj
||}tj|rq|| jd }tj
||| j|< qqjt   | _d S )N   FTr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   Zrefreshr   mtimer   r   pr   r    r    r!   r     s&    


zMaildir._refreshc                 C   s|   z.t jt j| j| j| r,| j| W S W n ty@   Y n0 |   z| j| W S  tyv   td| d Y n0 d S NNo message with key: %s)r   r   r   r   r   r   r-   r   r)   r    r    r!   r   &  s    zMaildir._lookupc                 C   sT   t | ds|  | _z| t| j W S  ty8   Y d S  tyL   Y qY q0 qd S )N_onetime_keys)rP   r?   r   nextStopIterationr-   r>   r    r    r!   r   4  s    

zMaildir.next)NT)r   r   r   r   r"   r(   r+   r.   r0   r4   r<   r7   r?   rJ   rK   rT   rU   rV   rW   r   r   r   r   r   r   r   r   r   r   r    r    r    r!   r     s4   
*
	
$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 np ty } zX|jtjkrZ|rNt| jd}q|t| jn"|jtjtj	fv rzt| jd}n W Y d }~n
d }~0 0 || _
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   s8   |    | || 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 NT)r   r   r   r)   r    r    r!   r+   e  s    
z_singlefileMailbox.removec                 C   s$   |  | | || j|< d| _d S r   )r   r   r   r   r/   r    r    r!   r0   k  s    
z_singlefileMailbox.__setitem__c                 c   s   |    | j E d H  d S r   )r   r   rA   r>   r    r    r!   r?   q  s    z_singlefileMailbox.iterkeysc                 C   s   |    || jv S r   )r   r   r)   r    r    r!   rJ   v  s    z_singlefileMailbox.__contains__c                 C   s   |    t| jS r   )r   r   r   r>   r    r    r!   rK   {  s    z_singlefileMailbox.__len__c                 C   s   | j st| j d| _ d S r   )r   
_lock_filer   r>   r    r    r!   rU     s    
z_singlefileMailbox.lockc                 C   s   | j rt| j d| _ d S NF)r   _unlock_filer   r>   r    r    r!   rV     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	}zi }| 
| t| j D ]x}| j| \}}| j| | | | }| jtd|| j  }|sq|| q|| f||< | | q|| | _W n"   |  t|j  Y n0 t| | j  t| j	j}	t|j|	 zt|j| j	 W n0 ty   t| j	 t|j| j	 Y n0 t| j	d| _|| _d| _ d| _| jrt| jdd d S )NFr   r   z4Size of mailbox file changed (expected %i, found %i)   r   )dotlock) r   r   _sync_flushr   ro   tellr   r   _create_temporaryr   _pre_mailbox_hooksortedr   rA   _pre_message_hookr_   minrr   _post_message_hookrW   r   r+   r   r   r   st_modechmodr   r   r   r   r   )
r   Zcur_lenZnew_fileZnew_tocr*   startstopZ	new_startr`   moder    r    r!   rT     s`    
	






z_singlefileMailbox.flushc                 C   s   d S r   r    r   r   r    r    r!   r     s    z$_singlefileMailbox._pre_mailbox_hookc                 C   s   d S r   r    r
  r    r    r!   r    s    z$_singlefileMailbox._pre_message_hookc                 C   s   d S r   r    r
  r    r    r!   r    s    z%_singlefileMailbox._post_message_hookc                 C   sh   z6|    W z| jr|   W | j  qd| j  0 n,z| jrH|   W | j  n| j  0 0 d S r   )rT   r   rV   r   rW   r>   r    r    r!   rW     s    


z_singlefileMailbox.closec                 C   sL   | j d u r|   |d urHz| j | W S  tyF   td| d Y n0 d S r   )r   _generate_tocr-   r)   r    r    r!   r     s    
z_singlefileMailbox._lookupc                 C   s   | j dd | j  }t| jdkr8| js8| | j  z&| | j  | |}| 	| j  W n  t
y~   | j |  Y n0 | j   | j  | _|S )Nr   r   )r   ro   r   r   r   r   r   r  _install_messager  r   truncaterT   r   )r   r'   ZbeforeZoffsetsr    r    r!   r     s    


z"_singlefileMailbox._append_message)NT)N)r   r   r   r"   r(   r+   r0   r?   rJ   rK   rU   rV   rT   r   r  r  rW   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   sp   |  |\}}| j| | j td}| j|| j  }| |td}|	|dd  
d |S )N    r\   rg   r   )r   r   ro   r|   rp   rq   r_   r   _message_factoryset_fromdecode)r   r*   r  r  	from_linestringr   r    r    r!   r4   	  s    z_mboxMMDF.get_messageFc                 C   s   t | ||j|dS )N)unixfromr9   )r   r*   from_r    r    r!   r=     s
    
z_mboxMMDF.get_stringc                 C   sJ   |  |\}}| j| |s(| j  | j|| j  }|tdS Nr\   )r   r   ro   r|   r_   r   rp   rq   )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   ro   r|   _PartialFiler   )r   r*   r  r  r  r    r    r!   r7   !  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 ur|d}|d u rdtt   }| j }| j|t  | || j| j | j }||fS )Nrf   r\   re   r   r  r   s   From MAILER-DAEMON )ri   ru   r[   rv   r}   find_mboxMMDFMessageget_fromrX   r:   r'   r	   get_unixfromr   asctimegmtimer   r   rr   rq   r   _mangle_from_)r   r'   r  newlineZauthorr  r  r    r    r!   r  )  s0    







z_mboxMMDF._install_messageN)F)F)F)	r   r   r   r  r4   r=   r<   r7   r  r    r    r    r!   r    s   


	
r  c                   @   s.   e Zd ZdZdZd	ddZdd Zdd ZdS )
r   TNc                 C   s   t | _t| ||| d S r   )r   r  r  r"   r   r    r    r!   r"   O  s    zmbox.__init__c                 C   s   | t d S r   rr   rq   r
  r    r    r!   r  T  s    zmbox._post_message_hookc                 C   s   g g  }}d}| j d | j  }| j  }|drzt|t|k rj|r`||tt  n
|| || d}q|s|r||tt  q|| qq|tkrd}qd}qtt	t
||| _t| j| _| j  | _d S )NFr   rf   T)r   ro   r   r|   r}   r   r   rq   dict	enumeratezipr   r   r   )r   startsstopsZlast_was_emptyline_posr   r    r    r!   r  X  s.    






zmbox._generate_toc)NT)r   r   r   r  rs   r"   r  r  r    r    r    r!   r   F  s
   
r   c                   @   s.   e Zd ZdddZdd Zdd Zd	d
 ZdS )r   NTc                 C   s   t | _t| ||| d S r   )r   r  r  r"   r   r    r    r!   r"   }  s    zMMDF.__init__c                 C   s   | dt  d S N   r!  r
  r    r    r!   r    s    zMMDF._pre_message_hookc                 C   s   | td t  d S r(  r!  r
  r    r    r!   r    s    zMMDF._post_message_hookc                 C   s   g g  }}| j d d}|}| j  }| j  }|dt r|| |}| j  }| j  }|dt kr||tt  qqJ|sJ|| qqJq|sqqtt	t
||| _t| j| _| j dd | j  | _d S )Nr   r)  r   )r   ro   r|   r   r}   rq   r   r   r"  r#  r$  r   r   r   )r   r%  r&  next_posr'  r   r    r    r!   r    s.    






zMMDF._generate_toc)NT)r   r   r   r"   r  r  r  r    r    r    r!   r   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   st   t | ||| tj| jsj|r`t| jd tttj	| jdtj
tjB tjB d n
t| jd| _d S )Nr   .mh_sequencesi  F)r   r"   r   r   r   r   r   rW   r   r   r   O_EXCLr   r   r   r   r    r    r!   r"     s    
zMH.__init__c                 C   s   |   }t|dkrd}nt|d }tj| jt|}t|}d}z| j	rVt
| zrz| || W n8 ty   | j	rt| t| d}t|  Y n0 t|tr| || W | j	rt| n| j	rt| 0 W |st| n|st| 0 |S )Nr   r   FT)rA   r   maxr   r   r   r   ru   r   r   r   r   r   r   r   r+   ri   r   _dump_sequences)r   r'   rA   Znew_keyr   r   closedr    r    r!   r(     s>    




zMH.addc              
   C   sz   t j| jt|}zt|d}W n@ tyb } z(|jtjkrLt	d| n W Y d }~nd }~0 0 |
  t | d S Nr   r   )r   r   r   r   ru   r   r   r   r   r-   rW   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yb } z(|jtjkrLt	d| n W Y d }~n
d }~0 0 zz| j
rtt| zNt t |t jt jB  | || t|tr| || W | j
rt| n| j
rt| 0 W t| n
t| 0 d S r0  )r   r   r   r   ru   r   r   r   r   r-   r   r   rW   r   O_TRUNCr   ri   r   r.  r   r   )r   r*   r'   r   r   r   r    r    r!   r0     s(    

zMH.__setitem__c              
   C   s  z@| j r$ttj| jt|d}nttj| jt|d}W n@ ty } z(|jtj	krjt
d| n W Y d }~n
d }~0 0 |J | j rt| zt|}W | j rt| n| j rt| 0 W d    n1 s0    Y  |   D ]\}}||v r|| q|S )Nr   r   r   )r   r   r   r   r   r   ru   r   r   r   r-   r   r   r   get_sequencesrI   add_sequence)r   r*   r   r   r   r   key_listr    r    r!   r4     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rjt
d| n W Y d }~n
d }~0 0 |` | j rt| z0| tdW | j rt| W  d    S n| j rt| 0 W d    n1 s0    Y  d S )Nr   r   r   r\   )r   r   r   r   r   r   ru   r   r   r   r-   r   r_   rp   rq   r   r   r*   r   r   r    r    r!   r<     s(     zMH.get_bytesc              
   C   sh   zt tj| jt|d}W n@ ty^ } z(|jtjkrHt	d| n W Y d }~n
d }~0 0 t
|S )Nr   r   )r   r   r   r   r   ru   r   r   r   r-   r   r5  r    r    r!   r7   ,  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!   r?   7  s    zMH.iterkeysc                 C   s   t jt j| jt|S r   )r   r   r   r   r   ru   r)   r    r    r!   rJ   <  s    zMH.__contains__c                 C   s   t t|  S r   )r   r@   r?   r>   r    r    r!   rK   @  s    z
MH.__len__c                 C   s2   | j s.ttj| jdd| _t| j d| _ d S )Nr+  r   T)r   r   r   r   r   r   r   r   r>   r    r    r!   rU   D  s    
zMH.lockc                 C   s(   | j r$t| j t| j | `d| _ d S r   )r   r   r   r   r>   r    r    r!   rV   K  s
    

z	MH.unlockc                 C   s   d S r   r    r>   r    r    r!   rT   S  s    zMH.flushc                 C   s   | j r|   d S r   )r   rV   r>   r    r    r!   rW   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   r:  r   r    r    r!   r   i  s    zMH.add_folderc                 C   s`   t j| j|}t |}|dgkr:t t j|d n|g krDntd| j t | d S )Nr+  zFolder not empty: %s)r   r   r   r   r   r+   r   r   )r   r   r   entriesr    r    r!   r   n  s    

zMH.remove_folderc           
   
      s  i }t tj| jdddd}t|   |D ]}z|d\}}t }| D ]H}| rn|	t
| qRdd |dD \}}	|t||	d	  qR fd
dt|D ||< t|| dkr||= W q0 ty   td|  Y q00 q0W d    n1 s
0    Y  |S )Nr+  rASCIIencodingr   c                 s   s   | ]}t |V  qd S r   )r   )r7  xr    r    r!   r8    r  z#MH.get_sequences.<locals>.<genexpr>-r   c                    s   g | ]}| v r|qS r    r    )r7  r*   Zall_keysr    r!   
<listcomp>  s   z$MH.get_sequences.<locals>.<listcomp>r   z"Invalid sequence specification: %s)r   r   r   r   r   setrA   r   r6  r(   r   rS   ranger  r   rZ   r   rstrip)
r   Zresultsr   r   r   contentsrA   specr  r  r    rB  r!   r2  z  s(    
.zMH.get_sequencesc                 C   s
  t tj| jdddd}ztt |jtjtjB  |	 D ]\}}t
|dkrVq@||d  d }d}tt|D ]R}|d |kr|sd	}|d
 n*|rd}|d||f  n|d|  |}qx|r|t|d  q@|d q@W t| n
t| 0 d S )Nr+  zr+r=  r>  r   r   Fr   TrA  z%s %sz %s
)r   r   r   r   r   rW   r   r   r1  rI   r   rr   r  rD  ru   r   )r   	sequencesr   r   rA   prevZ
completingr*   r    r    r!   set_sequences  s.    zMH.set_sequencesc           	      C   s<  |   }d}g }|  D ]}|d |kr|||d f z4ttj| jt|tj| jt|d  W nF t	t
fy   ttj| jt|tj| jt|d  Y n0 ttj| jt| |d7 }q|d | _t|dkrd S | D ]0\}}|D ]"\}}||v r||||< qq| | d S )Nr   r   )r2  r?   r   r   r   r   r   r   ru   r   r   r   unlinkr   r   rI   indexrL  )	r   rJ  rK  Zchangesr*   r   r4  oldr   r    r    r!   pack  s0    



zMH.packc                 C   st   |  }|   }| D ]0\}}||v r4|| q||v r|||= q|D ]}||vrN|g||< qN| | d S r   )r2  rI   r   rN  rL  )r   r'   r*   Zpending_sequencesZall_sequencesr   r4  sequencer    r    r!   r.    s    zMH._dump_sequences)NT)r   r   r   r"   r(   r+   r0   r4   r<   r7   r?   rJ   rK   rU   rV   rT   rW   r   r   r   r   r2  rL  rP  r.  r    r    r    r!   r     s,   
"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   >   resentZfileddeleted	forwardedZeditedanswered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(   ri   r   
get_labelsrW  )r   r'   r*   r    r    r!   r(     s    
z	Babyl.addc                 C   s"   t | | || jv r| j|= d S r   )r   r+   rW  r)   r    r    r!   r+     s    
zBabyl.removec                 C   s*   t | || t|tr&| | j|< d S r   )r   r0   ri   r   rX  rW  r/   r    r    r!   r0     s    
zBabyl.__setitem__c           
      C   s   |  |\}}| j| | j  t }| j }|dt ks\|sHq\||td q,t }| j }|tks|s|q||td qd|| j	  }| j
|}|td}t| | }	|	|  || jv r|	| j|  |	S N   *** EOOH ***r\   )r   r   ro   r|   rj   rk   rq   rr   rp   r   r_   r   r{   set_visiblerW  
set_labels)
r   r*   r  r  original_headersr   Zvisible_headersnbodyr   r    r    r!   r4     s*    



zBabyl.get_messagec           	      C   s   |  |\}}| j| | j  t }| j }|dt ks\|sHq\||td q,| j }|tksv|s\qvq\|	 }|| j
  }| j|}|td}|| S rY  )r   r   ro   r|   rj   rk   rq   rr   rp   r{   r   r_   )	r   r*   r  r  r]  r   Zheadersr^  r   r    r    r!   r<     s     


zBabyl.get_bytesc                 C   s   t | |dtS r  )rj   rk   r<   rp   rq   r)   r    r    r!   r7   (  s    zBabyl.get_filec                 C   s<   |    t }| j D ]}|| q|| j t|S r   )r   rD  rW  rG   rS   difference_update_special_labelsr@   )r   labelsZ
label_listr    r    r!   rX  ,  s    zBabyl.get_labelsc                 C   s:  g g  }}| j d d}g }|}| j  }| j  }|dt krt|t|k rd||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  qqtt	t
||| _tt	|| _t| j| _| j dd | j  | _d S )	Nr   s   c                 S   s   g | ]}|  r|  qS r    )stripr7  labelr    r    r!   rC  C  s   z'Babyl._generate_toc.<locals>.<listcomp>r      ,   r   )r   ro   r|   r   rq   r   r   r   r"  r#  r$  r   rW  r   r   )r   r%  r&  r*  Zlabel_listsr'  r   rb  r    r    r!   r  5  s4    



zBabyl._generate_tocc                 C   sV   dt  }|dt  7 }|  }dd |D }|dd| t  7 }|d7 }|| d S )Ns   BABYL OPTIONS:s
   Version: 5c                 s   s   | ]}|  V  qd S r   )rX   rd  r    r    r!   r8  X  r  z*Babyl._pre_mailbox_hook.<locals>.<genexpr>s   Labels:rf  rg  )rq   rX  r   rr   )r   r   Zbabylrb  r    r    r!   r   S  s    zBabyl._pre_mailbox_hookc                 C   s   | dt  d S )N   r!  r
  r    r    r!   r  ]  s    zBabyl._pre_message_hookc                 C   s   | td  d S )Nrg  r!  r
  r    r    r!   r  a  s    zBabyl._post_message_hookc                 C   sx  | j  }t|trg }g }| D ]$}|| jv r>|| q$|| q$| j d |D ]}| j d|   qZ| j d |D ]}| j d|  d  q| j t	 n| j dt	  t|t
jjrt }t
j|dd}|| |d | }| j |d	t	 |d	ks,|sq,q| j d
t	  t|trt }	t
j|	dd}
|
|  |	 }| j |d	t	 |d	ks|snqqnn>|d | }| j |d	t	 |d	ks|sqq|d}|sqf| j |d	t	 qnTt|tttjfrt|tjrJtdtd | }t|tr`| |}|dd }|d dkr| j |d | d	t	 | j d
t	  | j |d | d	t	 | j ||d  d	t	 n(| j d
t	 t	  | j |d	t	 nXt |drVt |dr:tdtd |j!}| }d}| }|"drl|d d d	 }n|"dr|d d d	 }| j |d	t	 |d	ks|sF|rd}| j d
t	  || nqڐqF| }|sqf|"dr
|d d t	 }n:|"dr(|d d t	 }n|"d	rD|d d t	 }| j | qnt#dt$| | j  }||fS )N   1s   , s   ,,    rf  s   1,,Fr   r\   rZ  r   r]   r^   s   

r   re   r|   r`   ra   Trb   rc   rd   rh   )%r   r   ri   r   rX  ra  r   rr   rX   rq   r:   r'   r	   rj   rk   rl   rm   rn   ro   r|   rp   get_visibler_   rv   ru   rw   rx   ry   rz   r{   r[   r  rP   r`   rt   r~   r   )r   r'   r  Zspecial_labelsrb  re  Zorig_bufferZorig_generatorr   Z
vis_bufferZvis_generatorr`   Z
body_startZoriginal_posZ
first_passr  r    r    r!   r  e  s    









zBabyl._install_message)NT)r   r   r   	frozensetra  r"   r(   r+   r0   r4   r<   r7   rX  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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 u rtjj|  ntdt| d S )Nr_   rh   )ri   r:   r'   r	   _become_messagecopyZdeepcopy_explain_torv   r;   ru   Zmessage_from_stringrj   TextIOWrapperZmessage_from_filerP   Zmessage_from_binary_filer"   r~   r   r&   r    r    r!   r"     s    



zMessage.__init__c                 C   s4   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!   rm    s    
zMessage._become_messagec                 C   s   t |trd S tdd S )Nz Cannot convert to specified type)ri   r	   r~   r&   r    r    r!   ro    s    
zMessage._explain_to)N)r   r   r   r"   rm  ro  r    r    r    r!   r	     s   
r	   c                   @   sv   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   )rt  ru  r   rv  r	   r"   r&   r    r    r!   r"     s    
zMaildirMessage.__init__c                 C   s   | j S r   )rt  r>   r    r    r!   r     s    zMaildirMessage.get_subdirc                 C   s(   |dks|dkr|| _ ntd| d S )Nr   r   z!subdir must be 'new' or 'cur': %s)rt  rZ   )r   r   r    r    r!   r     s    zMaildirMessage.set_subdirc                 C   s"   | j dr| j dd  S dS d S )N2,r   r   )ru  r}   r>   r    r    r!   	get_flags  s    zMaildirMessage.get_flagsc                 C   s   dd t| | _d S )Nrw  r   )r   r  ru  )r   flagsr    r    r!   	set_flags  s    zMaildirMessage.set_flagsc                 C   s$   |  dt|  t|B  d S Nr   rz  r   rD  rx  r   flagr    r    r!   add_flag  s    zMaildirMessage.add_flagc                 C   s,   |   r(| dt|   t|  d S r{  )rx  rz  r   rD  r}  r    r    r!   remove_flag  s    zMaildirMessage.remove_flagc                 C   s   | j S r   )rv  r>   r    r    r!   r   !  s    zMaildirMessage.get_datec                 C   s4   zt || _W n  ty.   td| d Y n0 d S )Nzcan't convert to float: %s)floatrv  rZ   r~   )r   dater    r    r!   r   %  s    zMaildirMessage.set_datec                 C   s   | j S r   )ru  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)ri   ru   ru  r~   r   )r   infor    r    r!   r   0  s    
zMaildirMessage.set_infoc                 C   s  t |tr8||   ||   ||   nht |trt	|  }d|v r`|
d |  dkrv|
d d|v r|
d d|v r|
d d|v r|
d |d	t|   nt |trt	|  }d|vr|d
 d|v r|d d|v r|d nt |trt	|  }d|vrD|d
 d|v rX|d d|v rl|d d|v r|d nt |trntdt| d S )NSRr   OTDFAMAILER-DAEMONrV  repliedflaggedrS  rU  PrT  $Cannot convert to specified type: %s)ri   r
   rz  rx  r   r   r   r   r  rD  r  r  r   r  r   r3  r   	add_labelr	   r~   r   )r   r'   ry  r    r    r!   ro  7  sP    

















zMaildirMessage._explain_to)N)r   r   r   rq  r"   r   r   rx  rz  r  r  r   r   r   r   ro  r    r    r    r!   r
     s   
r
   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 urF|drF|  |dd   t| | d S )Nr  TzFrom rg   )r  ri   r:   r'   r	   r  r}   r"   )r   r'   r  r    r    r!   r"   h  s    z_mboxMMDFMessage.__init__c                 C   s   | j S r   )r  r>   r    r    r!   r  q  s    z_mboxMMDFMessage.get_fromc                 C   s4   |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)r3   r>   r    r    r!   rx  }  s    z_mboxMMDFMessage.get_flagsc                 C   s   t |}d\}}dD ]}||v r||7 }|| qdD ]}||v r8||7 }|| q8|dt|7 }z| d| W n ty   | d| Y n0 z| d| W n ty   | d| Y n0 d S )N)r   r   )r  r  )r  r  r  r   r  r  )rD  r+   r   r  replace_headerr-   Z
add_header)r   ry  Zstatus_flagsZxstatus_flagsr~  r    r    r!   rz    s&    z_mboxMMDFMessage.set_flagsc                 C   s$   |  dt|  t|B  d S r{  r|  r}  r    r    r!   r    s    z_mboxMMDFMessage.add_flagc                 C   s4   d| v sd| v r0|  dt|  t|  d S )Nr  r  r   r|  r}  r    r    r!   r    s    z_mboxMMDFMessage.remove_flagc              	   C   s  t |trt|  }d|v r(|d d|v r:|d d|v rL|d d|v r^|d d|v rp|d |d	= |d
= d|   dd  }z|	t
t|d W n ttfy   Y n0 n
t |tr||   ||   nt |trXt|  }d|vr"|d d|v r6|d d|v rJ|d |d	= |d
= nt |trt|  }d|vr|d d|v r|d d|v r|d |d	= |d
= nt |trntdt| d S )Nr  r   r  r  r  r  r  r  Zstatuszx-statusr  z%a %b %d %H:%M:%S %YrV  r  r  rS  rU  r  )ri   r
   rD  rx  r   r  r   r  r   r   calendarZtimegmr   strptimerZ   OverflowErrorr  rz  r  r   r3  r   r  r	   r~   r   )r   r'   ry  Z
maybe_dater    r    r!   ro    sb    



















z_mboxMMDFMessage._explain_to)N)N)r   r   r   rq  r"   r  r  rx  rz  r  r  ro  r    r    r    r!   r  c  s   
	
r  c                   @   s   e Zd ZdS )r   Nr   r   r   r    r    r    r!   r     s   r   c                   @   sD   e Zd ZdgZdddZdd Zdd Zd	d
 Zdd Zdd Z	dS )r   
_sequencesNc                 C   s   g | _ t| | d S r   )r  r	   r"   r&   r    r    r!   r"     s    zMHMessage.__init__c                 C   s   | j d d  S r   )r  r>   r    r    r!   r2    s    zMHMessage.get_sequencesc                 C   s   t || _d S r   )r@   r  )r   rJ  r    r    r!   rL    s    zMHMessage.set_sequencesc                 C   s6   t |tr"|| jvr2| j| ntdt| d S )Nzsequence type must be str: %s)ri   ru   r  r   r~   r   r   rQ  r    r    r!   r3    s    

zMHMessage.add_sequencec                 C   s(   z| j | W n ty"   Y n0 d S r   )r  r+   rZ   r  r    r    r!   remove_sequence  s    zMHMessage.remove_sequencec                 C   sF  t |trdt|  }d|v r*|d n|d |d d|v rP|d d|v rb|d nt |trt|  }d|vr|d n
|d	 d|v r|d d|v r|d
 nt |tr|  D ]}|| qn`t |t	r$t|  }d|v r|
d d|v rB|
d nt |tr2ntdt| d S )NrV  r   r  r  r  r  r  ROr  r  rU  r  )ri   r
   rD  r2  r   r  r  r   r3  r   r  r	   r~   r   )r   r'   rJ  rQ  r    r    r!   ro    sB    










zMHMessage._explain_to)N)
r   r   r   rq  r"   r2  rL  r3  r  ro  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   rW  _visibleNc                 C   s   g | _ t | _t| | d S r   )rW  r	   r  r"   r&   r    r    r!   r"   %  s    zBabylMessage.__init__c                 C   s   | j d d  S r   )rW  r>   r    r    r!   rX  +  s    zBabylMessage.get_labelsc                 C   s   t || _d S r   )r@   rW  )r   rb  r    r    r!   r\  /  s    zBabylMessage.set_labelsc                 C   s6   t |tr"|| jvr2| j| ntdt| d S )Nzlabel must be a string: %s)ri   ru   rW  r   r~   r   r   re  r    r    r!   r  3  s    

zBabylMessage.add_labelc                 C   s(   z| j | W n ty"   Y n0 d S r   )rW  r+   rZ   r  r    r    r!   remove_label;  s    zBabylMessage.remove_labelc                 C   s
   t | jS r   r	   r  r>   r    r    r!   rk  B  s    zBabylMessage.get_visiblec                 C   s   t || _d S r   r  )r   Zvisibler    r    r!   r[  F  s    zBabylMessage.set_visiblec                 C   sb   | j  D ](}|| v r*| j || |  q
| j |= q
dD ]$}|| v r8|| j vr8| | | j |< q8d S )N)ZDateZFromzReply-ToZToZCCZSubject)r  rA   r  )r   headerr    r    r!   update_visibleJ  s    
zBabylMessage.update_visiblec                 C   sr  t |tr~t|  }d|v r*|d n|d |d d|v sNd|v rX|d d|v rj|d d	|v r||d
 nt |trt|  }d|vr|d n
|d d	|v r|d d|v r|d nt |trt|  }d|v r|d d|v rn|d nTt |t	rP|
|   |  D ]}|| q<nt |tr^ntdt| d S )NrV  r   r  rT  rR  r  rU  r  rS  r  r  r  r  r  r  r  )ri   r
   rD  rX  r   r  r  r   r3  r   r[  rk  r  r	   r~   r   )r   r'   rb  re  r    r    r!   ro  U  sH    










zBabylMessage._explain_to)N)r   r   r   rq  r"   rX  r\  r  r  rk  r[  r  ro  r    r    r    r!   r      s   
r   c                   @   s   e Zd ZdS )r   Nr  r    r    r    r!   r     s   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| | _n|| _d S r   )r   r   _pos)r   r   posr    r    r!   r"     s    z_ProxyFile.__init__c                 C   s   |  || jjS r   )_readr   r_   r   sizer    r    r!   r_     s    z_ProxyFile.readc                 C   s   |  || jjS r   )r  r   read1r  r    r    r!   r    s    z_ProxyFile.read1c                 C   s   |  || jjS r   )r  r   r|   r  r    r    r!   r|     s    z_ProxyFile.readlinec                 C   s<   g }| D ].}| | |d ur|t|8 }|dkr q8q|S )Nr   )r   r   )r   sizehintrM   r   r    r    r!   	readlines  s    
z_ProxyFile.readlinesc                 c   s   |   }|sd S |V  q d S r   )r|   )r   r   r    r    r!   rF     s    z_ProxyFile.__iter__c                 C   s   | j S r   )r  r>   r    r    r!   r     s    z_ProxyFile.tellr   c                 C   s4   |dkr| j | j | j || | j  | _d S )Nr   r   ro   r  r   r   offsetwhencer    r    r!   ro     s    z_ProxyFile.seekc                 C   s4   t | dr0zt | jdr"| j  W | `n| `0 d S )Nr   rW   )rP   r   rW   r>   r    r    r!   rW     s
    
z_ProxyFile.closec                 C   s2   |d u rd}| j | j ||}| j  | _|S )Nre   r  )r   r  read_methodrM   r    r    r!   r    s    z_ProxyFile._readc                 C   s   | S r   r    r>   r    r    r!   	__enter__  s    z_ProxyFile.__enter__c                 G   s   |    d S r   )rW   )r   excr    r    r!   __exit__  s    z_ProxyFile.__exit__c                 C   s
   | j  S r   )r   readabler>   r    r    r!   r    s    z_ProxyFile.readablec                 C   s
   | j  S r   )r   writabler>   r    r    r!   r    s    z_ProxyFile.writablec                 C   s
   | j  S r   )r   seekabler>   r    r    r!   r    s    z_ProxyFile.seekablec                 C   s
   | j  S r   )r   rT   r>   r    r    r!   rT     s    z_ProxyFile.flushc                 C   s&   t | dsdS t | jdsdS | jjS )Nr   Tr/  F)rP   r   r/  r>   r    r    r!   r/    s
    
z_ProxyFile.closed)N)N)N)N)N)r   )r   r   r   r"   r_   r  r|   r  rF   r   ro   rW   r  r  r  r  r  r  rT   propertyr/  r   r   r   r    r    r    r!   r     s&   





		
r   c                   @   s8   e Zd ZdddZdd ZdddZd	d
 Zdd ZdS )r  Nc                 C   s   t | || || _|| _d S r   )r   r"   _start_stop)r   r   r  r  r    r    r!   r"     s    z_PartialFile.__init__c                 C   s   t | | j S r   )r   r   r  r>   r    r    r!   r     s    z_PartialFile.tellr   c                 C   s<   |dkr| j | _d}n|dkr*| j| _d}t| || d S )Nr   r   r   )r  r  r  r   ro   r  r    r    r!   ro     s    z_PartialFile.seekc                 C   sB   | j | j }|dkrdS |d u s0|dk s0||kr4|}t| ||S )Nr   r  )r  r  r   r  )r   r  r  Z	remainingr    r    r!   r    s    z_PartialFile._readc                 C   s   t | dr| `d S )Nr   )rP   r   r>   r    r    r!   rW     s    
z_PartialFile.close)NN)r   )r   r   r   r"   r   ro   r  rW   r    r    r    r!   r    s
   


	r  Tc              
   C   s  d}zft rrzt | t jt jB  W nL typ } z4|jtjtjtjfv rZt	d| j
 n W Y d }~n
d }~0 0 |rjzt| j
d }|  W nH ty } z0|jtjtjfv rW Y d }~W d S  W Y d }~n
d }~0 0 z^zt|j
| j
d  d}W n0 ttfy*   t|j
| j
d  d}Y n0 t|j
 W n. tyh   t|j
 t	d| j
 Y n0 W n8   t rt | t j |rt| j
d   Y n0 d S )NFzlockf: lock unavailable: %s.lockTzdot lock unavailable: %s)fcntllockfZLOCK_EXZLOCK_NBr   r   ZEAGAINr   r   r   r   r   rW   r   r   r   r   r   rM  r   r+   LOCK_UN)r   r   Zdotlock_doner   Zpre_lockr    r    r!   r     sL    
r   c                 C   s8   t rt | t j tj| jd r4t| jd  d S )Nr  )r  r  r  r   r   r   r   r+   r   r    r    r!   r   9  s    r   c              	   C   sD   t | t jt jB t jB d}zt| dW t | S t | 0 d S )Nr   r   )r   r   r   r,  O_RDWRrW   )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 )Nfsync)rT   rP   r   r  filenor  r    r    r!   r   N  s    
r   c                 C   s   t |  |   d S r   )r   rW   r  r    r    r!   r   T  s    r   c                   @   s   e Zd ZdS )r   Nr  r    r    r    r!   r   Z  s   r   c                   @   s   e Zd ZdS )r   Nr  r    r    r    r!   r   ]  s   r   c                   @   s   e Zd ZdS )r   Nr  r    r    r    r!   r   `  s   r   c                   @   s   e Zd ZdS )r   Nr  r    r    r    r!   r   c  s   r   c                   @   s   e Zd ZdS )r   Nr  r    r    r    r!   r   f  s   r   )T)1r   r   r  r   r   rn  rx   r:   Zemail.messageZemail.generatorrj   r5   typesr   r  ImportError__all__rq   rX   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>	   sj   
 j  8 DB4-  3 z%mqH_e'
*