<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]R2                @   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 y d  d l Z Wn e k
 r d Z Yn Xd d d d d d d d	 d
 d d d g Z e  j j d  Z Gd d   d  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e j j  Z Gd d	   d	 e  Z Gd d   d e  Z Gd d
   d
 e  Z Gd d   d e  Z Gd d   d e  Z Gd  d   d e  Z  Gd! d"   d"  Z! Gd# d$   d$ e!  Z" d% d& d'  Z# d( d)   Z$ d* d+   Z% d, d-   Z& d. d/   Z' d0 d1   Z( Gd2 d3   d3 e)  Z* Gd4 d5   d5 e*  Z+ Gd6 d7   d7 e*  Z, Gd8 d9   d9 e*  Z- Gd: d;   d; e*  Z. d S)<    NMailboxMaildirmboxMHBabylMMDFMessageMaildirMessagemboxMessage	MHMessageBabylMessageMMDFMessageasciic               @   s  e  Z d  Z d d 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 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/ d0  Z d1 d2   Z d d3 d4  Z d5 d6   Z d7 d8   Z d9 d:   Z d; d<   Z d= d>   Z  d? Z! d? d@ dA  Z" d S)Br   NTc             C   s.   t  j j t  j j |   |  _ | |  _ d  S)N)ospathabspath
expanduser_path_factory)selfr   factorycreate r   ,/opt/alt/python35/lib64/python3.5/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   |  j  |  d  S)N)r   )r   r   r   r   r   __delitem__0   s    zMailbox.__delitem__c             C   s*   y |  j  |  Wn t k
 r% Yn Xd  S)N)r   KeyError)r   r   r   r   r   discard3   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 |  j  |  SWn t k
 r) | SYn Xd  S)N)__getitem__r!   )r   r   defaultr   r   r   get>   s    zMailbox.getc          	   C   sI   |  j  s |  j |  St j |  j |    } |  j  |  SWd  QRXd  S)N)r   get_message
contextlibclosingget_file)r   r   filer   r   r   r$   E   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'   M   s    zMailbox.get_messagec             C   s   t  j |  j |   j   S)N)emailmessage_from_bytes	get_bytes	as_string)r   r   r   r   r   
get_stringQ   s    zMailbox.get_stringc             C   s   t  d   d  S)Nz&Method must be implemented by subclass)r   )r   r   r   r   r   r.   X   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   iterkeys`   s    zMailbox.iterkeysc             C   s   t  |  j    S)N)listr1   )r   r   r   r   keysd   s    zMailbox.keysc             c   sF   x? |  j    D]1 } y |  | } Wn t k
 r8 w Yn X| Vq Wd  S)N)r1   r!   )r   r   valuer   r   r   
itervaluesh   s    zMailbox.itervaluesc             C   s
   |  j    S)N)r5   )r   r   r   r   __iter__q   s    zMailbox.__iter__c             C   s   t  |  j    S)N)r2   r5   )r   r   r   r   valuest   s    zMailbox.valuesc             c   sL   xE |  j    D]7 } y |  | } Wn t k
 r8 w Yn X| | f Vq Wd  S)N)r1   r!   )r   r   r4   r   r   r   	iteritemsx   s    zMailbox.iteritemsc             C   s   t  |  j    S)N)r2   r8   )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! |  j    D] } |  j |  q Wd  S)N)r3   r"   )r   r   r   r   r   clear   s    zMailbox.clearc             C   s8   y |  | } Wn t  k
 r& | SYn X|  j |  | S)N)r!   r"   )r   r   r%   resultr   r   r   pop   s    	zMailbox.popc             C   s7   x0 |  j    D] } | |  j |  f SWt d   d  S)NzNo messages in mailbox)r1   r>   r!   )r   r   r   r   r   popitem   s    zMailbox.popitemc             C   s   t  | d  r | j   } n$ t  | d  r< | j   } n | } d } x= | D]5 \ } } y | |  | <WqO t k
 r d } YqO XqO W| r t d   d  S)Nr8   r9   FTzNo message with key(s))hasattrr8   r9   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   s6   y | j  d  SWn t k
 r1 t d   Yn Xd  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  r t j   } t j j | | d  } | j |  | j	 d  | j
   } | j d t  } | j |  |  j r| j t  r| j t  n t  | t t t j f  rqt  | t j  r t j d t d  | j   } t  | t  r|  j |  } | r)| j d d  } | j d t  } | j |  |  j r| j t  r| j t  n6t | d  rt | d  rt j d	 t d  | j } d  } x | j   } | j d
  r| d  d  d } n# | j d  r	| d  d  d } | sP| r9| j d  r9d | d d   } | j d t  } | j |  | } qW|  j r| r| j t  r| j t  n t d t |    d  S)Nr   s   
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      s   From s   >From    zInvalid message type: %s)
isinstancer,   r   r   ioBytesIO	generatorBytesGeneratorflattenseekrM   replacelinesepwrite_append_newlineendswithstrbytesStringIOwarningswarnDeprecationWarninggetvaluerK   r@   rN   readline
startswith	TypeErrortype)	r   r   targetZmangle_from_rN   gendataZlastlineliner   r   r   _dump_message   sZ    	
	
	
zMailbox._dump_message)#__name__
__module____qualname__r   r   r   r    r"   r#   r&   r$   r'   r0   r.   r*   r1   r3   r5   r6   r7   r8   r9   r:   r;   r<   r>   r?   rC   rD   rE   rF   rG   rK   r^   ro   r   r   r   r   r       s@   			c               @   sB  e  Z d  Z d Z d 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, Z d- d.   Z d/ d0   Z d1 d2   Z d3 d4   Z d S)5r   :NTc             C   s  t  j |  | | |  d t j j |  j d  d t j j |  j d  d t j j |  j d  i |  _ t j j |  j  s | r t j |  j d  x9 |  j j	   D] } t j | d  q Wn t
 |  j   i  |  _ d d d d i |  _ d |  _ d |  _ d  S)Ntmpnewcuri  r   g?)r   r   r   r   joinr   _pathsexistsmkdirr7   NoSuchMailboxError_toc_toc_mtimes
_last_read_skewfactor)r   dirnamer   r   r   r   r   r   r     s    !		zMaildir.__init__c             C   s  |  j    } y |  j | |  Wn/ t k
 rQ | j   t j | j    Yn Xt |  t | t	  r | j
   } |  j | j   } | |  j k r d } n d } d } t j j | j  j |  j  d } t j j |  j | | |  } t | t	  r/t j | j t j j | j  | j   f  yL t t d  rgt j | j |  t j | j  n t j | j |  Wn] t k
 r} z= t j | j  | j t j k rt d |   n   WYd  d  } ~ Xn X| S)N ru   r   linkz$Name clash with existing message: %s)_create_tmpro   BaseExceptionrG   r   r   name_sync_closerT   r	   
get_subdircolonget_infor   basenamesplitrw   r   utimegetatimeget_dater@   r   renameOSErrorerrnoEEXISTExternalClashError)r   r   Ztmp_filesubdirsuffixuniqdester   r   r   r      s@    

	%"zMaildir.addc             C   s,   t  j t  j j |  j |  j |    d  S)N)r   r   r   rw   r   _lookup)r   r   r   r   r   r   I  s    zMaildir.removec             C   s0   y |  j  |  Wn t t f k
 r+ Yn Xd  S)N)r   r!   FileNotFoundError)r   r   r   r   r   r"   M  s    zMaildir.discardc             C   s!  |  j  |  } |  j |  } |  j  |  } t | t  rE | } n | } t j j |  } |  j | k r |  j | j |  j  d } n d } |  j	 |  t j j
 |  j |  }	 t j j
 |  j | | |  }
 t | t  rt j |	 t j j |	  | j   f  t j |	 |
  d  S)NrP   r   rS   )r   r   rT   r	   r   r   r   r   r   r"   rw   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#   U  s"    	 	zMaildir.__setitem__c             C   s   |  j  |  } t t j j |  j |  d  . } |  j rN |  j |  } n t |  } Wd  QRXt j j |  \ } } | j	 |  |  j
 | k r | j | j |  j
  d  | j t j j t j j |  j |    | S)NrbrP   rS   )r   openr   r   rw   r   r   r	   r   
set_subdirr   set_infoset_dategetmtime)r   r   subpathfmsgr   r   r   r   r   r'   p  s    $	+zMaildir.get_messagec          
   C   sN   t  t j j |  j |  j |   d   } | j   j t d  SWd  QRXd  S)Nr   s   
)	r   r   r   rw   r   r   rM   r[   r\   )r   r   r   r   r   r   r.     s    -zMaildir.get_bytesc             C   s4   t  t j j |  j |  j |   d  } t |  S)Nr   )r   r   r   rw   r   r   
_ProxyFile)r   r   r   r   r   r   r*     s    *zMaildir.get_filec             c   sP   |  j    x? |  j D]4 } y |  j |  Wn t k
 rB w Yn X| Vq Wd  S)N)_refreshr|   r   r!   )r   r   r   r   r   r1     s    
zMaildir.iterkeysc             C   s   |  j    | |  j k S)N)r   r|   )r   r   r   r   r   r:     s    
zMaildir.__contains__c             C   s   |  j    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   rD     s    zMaildir.flushc             C   s   d  S)Nr   )r   r   r   r   rE     s    zMaildir.lockc             C   s   d  S)Nr   )r   r   r   r   rF     s    zMaildir.unlockc             C   s   d  S)Nr   )r   r   r   r   rG     s    zMaildir.closec             C   s   g  } xw t  j |  j  D]c } t |  d k r | d d k r t  j j t  j j |  j |   r | j | d d    q W| S)NrP   r   .)r   listdirr   r   r   isdirrw   append)r   r=   entryr   r   r   list_folders  s    "$zMaildir.list_foldersc             C   s/   t  t j j |  j d |  d |  j d d S)Nr   r   r   F)r   r   r   rw   r   r   )r   folderr   r   r   
get_folder  s    	zMaildir.get_folderc             C   s   t  j j |  j d |  } t | d |  j } t  j j | d  } t  j j |  s~ t  j t  j | t  j	 t  j
 Bd   | S)Nr   r   Zmaildirfolderi  )r   r   rw   r   r   r   ry   rG   r   O_CREATO_WRONLY)r   r   r   r=   Zmaildirfolder_pathr   r   r   
add_folder  s    
zMaildir.add_folderc             C   s  t  j j |  j d |  } xt t  j t  j j | d   t  j t  j j | d   D]8 } t |  d k  s | d d k rW t d |   qW Wxr t  j |  D]a } | d k r | d k r | d k r t  j j t  j j | |   r t d | | f   q Wx t  j | d	 d
 D]i \ } } } x* | D]" } t  j	 t  j j | |   q4Wx* | D]" } t  j
 t  j j | |   qaWqWt  j
 |  d  S)Nr   ru   rv   rP   r   zFolder contains message(s): %srt   z%Folder contains subdirectory '%s': %stopdownF)r   r   rw   r   r   r   NotEmptyErrorr   walkr   rmdir)r   r   r   r   rootdirsfilesr   r   r   remove_folder  s     #"$!% $zMaildir.remove_folderc             C   s   t  j    } xm t j t j j |  j d   D]J } t j j |  j d |  } | t j j |  d k r. t j |  q. Wd  S)Nrt   i@ )timer   r   r   rw   r   r   r   )r   nowr   r   r   r   r   clean  s
    (zMaildir.cleanrP   c             C   s  t  j    } t j   } d | k r6 | j d d  } d | k rT | j d d  } d t |  t | d d  t j   t j | f } t j	 j
 |  j d |  } y t j |  WnD t k
 r t j d 7_ y t |  SWn t k
 r Yn XYn Xt d	 |   d  S)
N/z\057rs   z\072z%s.M%sP%sQ%s.%srP   g    .Art   z&Name clash prevented file creation: %s)r   socketgethostnamer[   intr   getpidr   _countr   rw   r   statr   _create_carefullyFileExistsErrorr   )r   r   hostnamer   r   r   r   r   r     s&    &
zMaildir._create_tmpc             C   s6  t  j    |  j d |  j k r d } xP |  j D]E } t j j |  j |  } | |  j | k rh d } | |  j | <q0 W| s d  Si  |  _ x |  j D] } |  j | } xs t j	 |  D]b } t j j
 | |  } t j j |  r q | j |  j  d } t j j
 | |  |  j | <q Wq Wt  j    |  _ d  S)NrO   FTr   )r   r~   r   r}   r   r   r   rx   r|   r   rw   r   r   r   )r   Zrefreshr   mtimer   r   pr   r   r   r   r     s&     	$zMaildir._refreshc             C   s   y: t  j j t  j j |  j |  j |   r9 |  j | SWn t k
 rN Yn X|  j   y |  j | SWn" t k
 r t d |   Yn Xd  S)NzNo message with key: %s)r   r   ry   rw   r   r|   r!   r   )r   r   r   r   r   r   !  s    +
zMaildir._lookupc             C   sk   t  |  d  s |  j   |  _ xF y |  t |  j  SWq! t k
 rN d  SYq! t k
 rb w! Yq! Xq! Wd  S)N_onetime_keys)r@   r1   r   nextStopIterationr!   )r   r   r   r   r   /  s    zMaildir.next)rp   rq   rr   r   r   r   r   r"   r#   r'   r.   r*   r1   r:   r;   rD   rE   rF   rG   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 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  j |  | | |  y t |  j d  } Wn t k
 r } zw | j t j k r | rn t |  j d  } q t |  j   n3 | j t j t j	 f k r t |  j d  } n   WYd  d  } ~ Xn 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   ?  s$    						z_singlefileMailbox.__init__c             C   sF   |  j    |  j |  |  j |  j <|  j d 7_ d |  _ |  j d S)NrP   T)r   _append_messager|   r   r   )r   r   r   r   r   r   V  s
    
	z_singlefileMailbox.addc             C   s$   |  j  |  |  j | =d |  _ d  S)NT)r   r|   r   )r   r   r   r   r   r   `  s    
z_singlefileMailbox.removec             C   s0   |  j  |  |  j |  |  j | <d |  _ d  S)NT)r   r   r|   r   )r   r   r   r   r   r   r#   f  s    z_singlefileMailbox.__setitem__c             c   s    |  j    |  j j   Ed  Hd  S)N)r   r|   r3   )r   r   r   r   r1   l  s    
z_singlefileMailbox.iterkeysc             C   s   |  j    | |  j k S)N)r   r|   )r   r   r   r   r   r:   q  s    
z_singlefileMailbox.__contains__c             C   s   |  j    t |  j  S)N)r   r   r|   )r   r   r   r   r;   v  s    
z_singlefileMailbox.__len__c             C   s#   |  j  s t |  j  d |  _  d  S)NT)r   
_lock_filer   )r   r   r   r   rE   {  s    	z_singlefileMailbox.lockc             C   s#   |  j  r t |  j  d |  _  d  S)NF)r   _unlock_filer   )r   r   r   r   rF     s    	z_singlefileMailbox.unlockc       
      C   sy  |  j  s, |  j r( t |  j  d |  _ d  S|  j j d d  |  j j   } | |  j k rv t d |  j | f   t |  j	  } y i  } |  j
 |  x t |  j j    D] } |  j | \ } } |  j j |  |  j |  | j   } x@ |  j j t d | |  j j     } | s%P| j |  q W| | j   f | | <|  j |  q W| j   |  _ Wn% | j   t j | j    Yn Xt |  |  j j   t j |  j	  j }	 t j | j |	  y t j | j |  j	  Wn8 t k
 r(t j |  j	  t j | j |  j	  Yn Xt |  j	 d  |  _ | |  _ d |  _  d |  _ |  j rut |  j d d d  S)NFr   rO   z4Size of mailbox file changed (expected %i, found %i)i   zrb+dotlock) r   r   _sync_flushr   rZ   tellr   r   _create_temporaryr   _pre_mailbox_hooksortedr|   r3   _pre_message_hookrM   minr]   _post_message_hookrG   r   r   r   r   r   st_modechmodr   r   r   r   r   )
r   cur_lenZnew_fileZnew_tocr   startstopZ	new_startrN   moder   r   r   rD     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   s>   z |  j    Wd  z |  j r' |  j   Wd  |  j j   XXd  S)N)rD   r   rF   r   rG   )r   r   r   r   rG     s    	z_singlefileMailbox.closec             C   s]   |  j  d  k r |  j   | d  k	 rY y |  j  | SWn" t k
 rX t d |   Yn Xd  S)NzNo message with key: %s)r|   _generate_tocr!   )r   r   r   r   r   r     s    
z_singlefileMailbox._lookupc             C   s   |  j  j d d  |  j  j   } t |  j  d k rQ |  j rQ |  j |  j   y3 |  j |  j   |  j |  } |  j	 |  j   Wn% t
 k
 r |  j  j |    Yn X|  j  j   |  j  j   |  _ | S)Nr   rO   )r   rZ   r   r   r|   r   r   r   _install_messager   r   truncaterD   r   )r   r   ZbeforeZoffsetsr   r   r   r     s    z"_singlefileMailbox._append_message)rp   rq   rr   r   r   r   r#   r1   r:   r;   rE   rF   rD   r   r   r   rG   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   s   |  j  |  \ } } |  j j |  |  j j   j t d  } |  j j | |  j j    } |  j | j t d   } | j	 | d d   j
 d   | S)N    s   
rQ   r   )r   r   rZ   rg   r[   r\   rM   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 |  j |   j d |  S)Nunixfrom)r,   r-   r.   r/   )r   r   from_r   r   r   r0     s    z_mboxMMDF.get_stringc             C   sg   |  j  |  \ } } |  j j |  | s8 |  j j   |  j j | |  j j    } | j t d  S)Ns   
)r   r   rZ   rg   rM   r   r[   r\   )r   r   r   r   r   r   r   r   r   r.     s    z_mboxMMDF.get_bytesc             C   sT   |  j  |  \ } } |  j j |  | s8 |  j j   t |  j |  j j   |  S)N)r   r   rZ   rg   _PartialFiler   )r   r   r   r   r   r   r   r   r*     s
    z_mboxMMDF.get_filec             C   s  d  } t  | t  r$ |  j |  } t  | t  r | j d  r | j d  } | d k r | d  |  } | | d d   } q | } d } nm t  | t  r | j   j d  } d | } n< t  | t	 j
 j  r | j   } | d  k	 r | j d  } | d  k r+d t j t j    j   } |  j j   } |  j j | t  |  j | |  j |  j  |  j j   } | | f S)Ns   From s   
rP   r   r   s   From MAILER-DAEMON rS   )rT   r`   rK   ra   rh   find_mboxMMDFMessageget_fromrH   r,   r   r   get_unixfromr   asctimegmtimer   r   r]   r\   ro   _mangle_from_)r   r   r   newlineZauthorr   r   r   r   r   r   $  s0    	z_mboxMMDF._install_messageN)	rp   rq   rr   r   r'   r0   r.   r*   r   r   r   r   r   r     s   
	r   c               @   sF   e  Z d  Z d Z d Z d d d d  Z d d   Z d d   Z d S)	r   TNc             C   s#   t  |  _ t j |  | | |  d  S)N)r
   r   r   r   )r   r   r   r   r   r   r   r   J  s    	zmbox.__init__c             C   s   | j  t  d  S)N)r]   r\   )r   r   r   r   r   r   O  s    zmbox._post_message_hookc             C   sJ  g  g  } } d } |  j  j d  x |  j  j   } |  j  j   } | j d  r t |  t |  k  r | r | j | t t   n | j |  | j |  d } q& | s | r | j | t t   n | j |  Pq& | t k r d } q& d } q& Wt t	 t
 | |    |  _ t |  j  |  _ |  j  j   |  _ d  S)NFr   s   From T)r   rZ   r   rg   rh   r   r   r\   dict	enumeratezipr|   r   r   )r   startsstopsZlast_was_emptyline_posrn   r   r   r   r   S  s0    		
zmbox._generate_toc)rp   rq   rr   r   r^   r   r   r   r   r   r   r   r   A  s
   c               @   sF   e  Z d  Z d d d d  Z d d   Z d d   Z d	 d
   Z d S)r   NTc             C   s#   t  |  _ t j |  | | |  d  S)N)r   r   r   r   )r   r   r   r   r   r   r   r   x  s    	zMMDF.__init__c             C   s   | j  d t  d  S)Ns   )r]   r\   )r   r   r   r   r   r   }  s    zMMDF._pre_message_hookc             C   s   | j  t d t  d  S)Ns   )r]   r\   )r   r   r   r   r   r     s    zMMDF._post_message_hookc             C   s;  g  g  } } |  j  j d  d } x | } |  j  j   } |  j  j   } | j d t  r | j |  xq | } |  j  j   } |  j  j   } | d t k r | j | t t   Pqm | sm | j |  Pqm Wq& | s& Pq& Wt t	 t
 | |    |  _ t |  j  |  _ |  j  j d d  |  j  j   |  _ d  S)Nr   s   rO   )r   rZ   rg   r   rh   r\   r   r   r   r   r   r|   r   r   )r   r  r  next_posr  rn   r   r   r   r     s2    zMMDF._generate_toc)rp   rq   rr   r   r   r   r   r   r   r   r   r   u  s   c               @   s  e  Z d  Z d 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)/r   NTc             C   s   t  j |  | | |  t j j |  j  s | r t j |  j d  t j t j t j j	 |  j d  t j
 t j Bt j Bd   n t |  j   d |  _ d  S)Ni  z.mh_sequencesi  F)r   r   r   r   ry   r   rz   rG   r   rw   r   O_EXCLr   r{   r   )r   r   r   r   r   r   r   r     s    !!zMH.__init__c             C   s,  |  j    } t |  d k r' d } n t |  d } t j j |  j t |   } t |  } d } z |  j	 r} t
 |  z y |  j | |  WnE t k
 r |  j	 r t |  t |  d } t j |    Yn Xt | t  r |  j | |  Wd  |  j	 rt |  XWd  | s't |  X| S)Nr   rP   FT)r3   r   maxr   r   rw   r   r`   r   r   r   ro   r   r   r   r   rT   r   _dump_sequences)r   r   r3   Znew_keyr   r   closedr   r   r   r     s6    		
	

	zMH.addc             C   s   t  j j |  j t |   } y t | d  } WnM t k
 r } z- | j t j k rk t	 d |   n   WYd  d  } ~ Xn X| j
   t  j |  d  S)Nzrb+zNo message with key: %s)r   r   rw   r   r`   r   r   r   r   r!   rG   r   )r   r   r   r   r   r   r   r   r     s    
z	MH.removec             C   s  t  j j |  j t |   } y t | d  } WnM t k
 r } z- | j t j k rk t	 d |   n   WYd  d  } ~ Xn Xz |  j
 r t |  zV t  j t  j | t  j t  j B  |  j | |  t | t  r |  j | |  Wd  |  j
 rt |  XWd  t |  Xd  S)Nzrb+zNo message with key: %s)r   r   rw   r   r`   r   r   r   r   r!   r   r   rG   r   O_TRUNCro   rT   r   r  r   r   )r   r   r   r   r   r   r   r   r   r#     s$    	
#	zMH.__setitem__c              C   s6  y^ |  j  r6 t t j j |  j t |   d  } n' t t j j |  j t |   d  } WnM t k
 r } z- | j t j	 k r t
 d |   n   WYd  d  } ~ Xn X| ? |  j  r t |  z t |  } Wd  |  j  r t |  XWd  QRXx9 |  j   j   D]% \ } } | | k r	| j |  q	W| S)Nzrb+r   zNo message with key: %s)r   r   r   r   rw   r   r`   r   r   r   r!   r   r   r   get_sequencesr9   add_sequence)r   r   r   r   r   r   key_listr   r   r   r'     s&    	*+	
	zMH.get_messagec              C   s  y^ |  j  r6 t t j j |  j t |   d  } n' t t j j |  j t |   d  } WnM t k
 r } z- | j t j	 k r t
 d |   n   WYd  d  } ~ Xn X| I |  j  r t |  z | j   j t d  SWd  |  j  r t |  XWd  QRXd  S)Nzrb+r   zNo message with key: %ss   
)r   r   r   r   rw   r   r`   r   r   r   r!   r   rM   r[   r\   r   )r   r   r   r   r   r   r   r.     s    	*+	
	zMH.get_bytesc             C   s   y+ t  t j j |  j t |   d  } WnM t k
 rz } z- | j t j k re t	 d |   n   WYd  d  } ~ Xn Xt
 |  S)Nr   zNo message with key: %s)r   r   r   rw   r   r`   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 |  j  D   S)Nc             s   s'   |  ] } | j    r t |  Vq d  S)N)isdigitr   ).0r   r   r   r   	<genexpr>4  s    zMH.iterkeys.<locals>.<genexpr>)iterr   r   r   r   )r   r   r   r   r1   2  s    zMH.iterkeysc             C   s(   t  j j t  j j |  j t |    S)N)r   r   ry   rw   r   r`   )r   r   r   r   r   r:   7  s    zMH.__contains__c             C   s   t  t |  j     S)N)r   r2   r1   )r   r   r   r   r;   ;  s    z
MH.__len__c             C   sG   |  j  sC t t j j |  j d  d  |  _ t |  j  d |  _  d  S)Nz.mh_sequenceszrb+T)r   r   r   r   rw   r   r   r   )r   r   r   r   rE   ?  s    	$zMH.lockc             C   s6   |  j  r2 t |  j  t |  j  |  ` d |  _  d  S)NF)r   r   r   r   )r   r   r   r   rF   F  s
    	z	MH.unlockc             C   s   d  S)Nr   )r   r   r   r   rD   N  s    zMH.flushc             C   s   |  j  r |  j   d  S)N)r   rF   )r   r   r   r   rG   R  s    	zMH.closec             C   sX   g  } xK t  j |  j  D]7 } t  j j t  j j |  j |   r | j |  q W| S)N)r   r   r   r   r   rw   r   )r   r=   r   r   r   r   r   W  s
    $zMH.list_foldersc             C   s+   t  t j j |  j |  d |  j d d S)Nr   r   F)r   r   r   rw   r   r   )r   r   r   r   r   r   _  s    zMH.get_folderc             C   s%   t  t j j |  j |  d |  j S)Nr   )r   r   r   rw   r   r   )r   r   r   r   r   r   d  s    zMH.add_folderc             C   s   t  j j |  j |  } t  j |  } | d g k rU t  j t  j j | d   n" | g  k rd n t d |  j   t  j |  d  S)Nz.mh_sequenceszFolder not empty: %s)r   r   rw   r   r   r   r   r   )r   r   r   entriesr   r   r   r   i  s    zMH.remove_folderc       
         s`  i  } t  t j j |  j d  d d d ,} t |  j      x| D]} y | j d  \ } } t   } xr | j   D]d } | j   r | j	 t
 |   q} d d   | j d  D \ } }	 | j t | |	 d	   q} W  f d
 d   t |  D | | <t | |  d k r%| | =WqI t k
 rPt d | j     YqI XqI WWd  QRX| S)Nz.mh_sequencesrencodingASCIIrs   c             s   s   |  ] } t  |  Vq d  S)N)r   )r  xr   r   r   r    s    z#MH.get_sequences.<locals>.<genexpr>-rP   c                s"   g  |  ] } |   k r |  q Sr   r   )r  r   )all_keysr   r   
<listcomp>  s   	 z$MH.get_sequences.<locals>.<listcomp>r   z"Invalid sequence specification: %s)r   r   r   rw   r   setr3   r   r  r   r   rC   ranger   r   rJ   FormatErrorrstrip)
r   resultsr   rn   r   contentsr3   specr   r   r   )r  r   r
  u  s&    *	"# zMH.get_sequencesc             C   se  t  t j j |  j d  d d d } z,t j t j  | j t j t j B  x | j	   D] \ } } t
 |  d k r~ q] | j | d  d  } d } x t t |   D]o } | d | k r | sd	 } | j d
  n7 | rd } | j d | | f  n | j d |  | } q W| rA| j t |  d  q] | j d  q] WWd  t |  Xd  S)Nz.mh_sequenceszr+r  r  r   rs   FrP   Tr  z%s %sz %s
)r   r   r   rw   r   rG   r   r   r	  r9   r   r]   r   r  r`   r   )r   	sequencesr   r   r3   prevZ
completingr   r   r   r   set_sequences  s.    '&
zMH.set_sequencesc       	      C   s  |  j    } d } g  } x|  j   D] } | d | k r| j | | d f  t t d  r t j t j j |  j t	 |   t j j |  j t	 | d    t j
 t j j |  j t	 |    nD t j t j j |  j t	 |   t j j |  j t	 | d    | d 7} q% W| d |  _ t |  d k rBd  SxP | j   D]B \ } } x3 | D]+ \ } } | | k rb| | | j |  <qbWqOW|  j |  d  S)Nr   rP   r   )r
  r1   r   r@   r   r   r   rw   r   r`   unlinkr   r   r   r9   indexr#  )	r   r!  r"  Zchangesr   r   r  oldru   r   r   r   pack  s*    !#(!#zMH.packc             C   s   | j    } |  j    } xR | j   D]D \ } } | | k rM | j |  q% | | k r% | | j |  =q% Wx' | D] } | | k rt | g | | <qt W|  j |  d  S)N)r
  r9   r   r%  r#  )r   r   r   Zpending_sequencesZall_sequencesr   r  sequencer   r   r   r    s    zMH._dump_sequences)rp   rq   rr   r   r   r   r#   r'   r.   r*   r1   r:   r;   rE   rF   rD   rG   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
 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  j |  | | |  i  |  _ d  S)N)r   r   _labels)r   r   r   r   r   r   r   r     s    zBabyl.__init__c             C   s8   t  j |  |  } t | t  r4 | j   |  j | <| S)N)r   r   rT   r   
get_labelsr.  )r   r   r   r   r   r   r     s    z	Babyl.addc             C   s-   t  j |  |  | |  j k r) |  j | =d  S)N)r   r   r.  )r   r   r   r   r   r     s    zBabyl.removec             C   s9   t  j |  | |  t | t  r5 | j   |  j | <d  S)N)r   r#   rT   r   r/  r.  )r   r   r   r   r   r   r#     s    zBabyl.__setitem__c       
      C   s[  |  j  |  \ } } |  j j |  |  j j   t j   } xD |  j j   } | d t k sg | rh P| j | j t d   qA Wt j   } x@ |  j j   } | t k s | r P| j | j t d   q W| |  j j	   } |  j j
 |  } | j t d  } t | j   |  }	 |	 j | j    | |  j k rW|	 j |  j |  |	 S)Ns   *** EOOH ***s   
)r   r   rZ   rg   rU   rV   r\   r]   r[   r   rM   r   rf   set_visibler.  
set_labels)
r   r   r   r   original_headersrn   Zvisible_headersnZbodyr   r   r   r   r'     s.    zBabyl.get_messagec       	      C   s   |  j  |  \ } } |  j j |  |  j j   t j   } xD |  j j   } | d t k sg | rh P| j | j t d   qA Wx' |  j j   } | t k s | r Pq W| j	   } | |  j j
   } |  j j |  } | j t d  } | | S)Ns   *** EOOH ***s   
)r   r   rZ   rg   rU   rV   r\   r]   r[   rf   r   rM   )	r   r   r   r   r2  rn   Zheadersr3  rm   r   r   r   r.     s$    zBabyl.get_bytesc             C   s"   t  j |  j |  j d t   S)Ns   
)rU   rV   r.   r[   r\   )r   r   r   r   r   r*   "  s    zBabyl.get_filec             C   sT   |  j    t   } x$ |  j j   D] } | j |  q# W| j |  j  t |  S)N)r   r  r.  r7   rC   difference_update_special_labelsr2   )r   labelsZ
label_listr   r   r   r/  &  s    
	zBabyl.get_labelsc             C   s  g  g  } } |  j  j d  d } g  } x| } |  j  j   } |  j  j   } | d t k r t |  t |  k  r | j | t t   | j |  d d   |  j  j   d d   j d  D } | j |  q, | d k s | d t k r)t |  t |  k  rG| j | t t   q, | s, | j | t t   Pq, Wt t	 t
 | |    |  _ t t	 |   |  _ t |  j  |  _ |  j  j d d  |  j  j   |  _ d  S)	Nr   s   c             S   s(   g  |  ] } | j    r | j     q Sr   )strip)r  labelr   r   r   r  =  s   	 z'Babyl._generate_toc.<locals>.<listcomp>rP      ,s   rO   )r   rZ   rg   r   r\   r   r   r   r   r   r   r|   r.  r   r   )r   r  r  r  Zlabel_listsr  rn   r6  r   r   r   r   /  s4    	&zBabyl._generate_tocc             C   sm   d t  } | d t  7} |  j   } d d   | D } | d d j |  t  7} | d 7} | j |  d  S)Ns   BABYL OPTIONS:s
   Version: 5c             s   s   |  ] } | j    Vq d  S)N)rH   )r  r8  r   r   r   r  R  s    z*Babyl._pre_mailbox_hook.<locals>.<genexpr>s   Labels:r9  s   )r\   r/  rw   r]   )r   r   Zbabylr6  r   r   r   r   M  s    

zBabyl._pre_mailbox_hookc             C   s   | j  d t  d  S)Ns   )r]   r\   )r   r   r   r   r   r   W  s    zBabyl._pre_message_hookc             C   s   | j  t d  d  S)Ns   )r]   r\   )r   r   r   r   r   r   [  s    zBabyl._post_message_hookc             C   s  |  j  j   } t | t  r g  } g  } x@ | j   D]2 } | |  j k r\ | j |  q7 | j |  q7 W|  j  j d  x( | D]  } |  j  j d | j    q W|  j  j d  x, | D]$ } |  j  j d | j   d  q W|  j  j t	  n |  j  j d t	  t | t
 j j  rt j   } t
 j j | d d  } | j |  | j d  x@ | j   } |  j  j | j d	 t	   | d	 k s| rdPqdW|  j  j d
 t	  t | t  rDt j   }	 t
 j j |	 d d  }
 |
 j | j    x |	 j   } |  j  j | j d	 t	   | d	 k s<| rPqWnP | j d  x@ | j   } |  j  j | j d	 t	   | d	 k s| rTPqTWx@| j d  } | sP|  j  j | j d	 t	   qWnt | t t t j f  rt | t j  rt j d t d  | j   } t | t  r:|  j |  } | j d  d } | d d k r|  j  j | d  |  j d	 t	   |  j  j d
 t	  |  j  j | d  |  j d	 t	   |  j  j | | d   j d	 t	   q|  j  j d
 t	 t	  |  j  j | j d	 t	   nt  | d  rt  | d  rWt j d t d  | j! } | j   } d } x | j   } | j" d  r| d  d  d	 } n# | j" d  r| d  d  d	 } |  j  j | j d	 t	   | d	 k s| rl| r d } |  j  j d
 t	  | j |  qlPqlWx | j   } | s;P| j" d  ra| d  d  t	 } nI | j" d  r| d  d  t	 } n# | j" d	  r| d  d  t	 } |  j  j |  q(Wn t# d t$ |    |  j  j   } | | f S)N   1s   , s   ,,    r9  s   1,,Fr   s   
s   *** EOOH ***i   z8Use of StringIO input is deprecated, use BytesIO insteadrL   s   

rO   rP   rg   rN   zDUse of text mode files is deprecated, use a binary mode file insteadTs   
s   zInvalid message type: %srS   rR   rS   rR   rS   rS   )%r   r   rT   r   r/  r5  r   r]   rH   r\   r,   r   r   rU   rV   rW   rX   rY   rZ   rg   r[   get_visiblerM   ra   r`   rb   rc   rd   re   rf   rK   r   r@   rN   r_   ri   rj   )r   r   r   Zspecial_labelsr6  r8  Zorig_bufferZorig_generatorrn   Z
vis_bufferZvis_generatorrN   Z
body_startZoriginal_posZ
first_passr   r   r   r   r   _  s    "#	
&&)	
	zBabyl._install_message)rp   rq   rr   	frozensetr5  r   r   r   r#   r'   r.   r*   r/  r   r   r   r   r   r   r   r   r   r     s   	
c               @   s7   e  Z d  Z d d d  Z d d   Z d d   Z d S)r   Nc             C   s)  t  | t j j  rJ |  j t j |   t  | t  r%| j |   n t  | t  rr |  j t j	 |   n t  | t
  r |  j t j |   n t  | t j  r |  j t j |   n` t | d  r |  j t j |   n8 | d  k rt j j j |   n t d t |    d  S)NrM   zInvalid message type: %s)rT   r,   r   r   _become_messagecopydeepcopy_explain_tora   r-   r`   Zmessage_from_stringrU   TextIOWrapperZmessage_from_filer@   Zmessage_from_binary_filer   ri   rj   )r   r   r   r   r   r     s    zMessage.__init__c             C   sJ   t  | d g   } x1 | j D]& } | | k r | j | |  j | <q Wd  S)N_type_specific_attributes)getattr__dict__)r   r   Ztype_specificr   r   r   r   r>    s    zMessage._become_messagec             C   s#   t  | t  r d  St d   d  S)Nz Cannot convert to specified type)rT   r   ri   )r   r   r   r   r   rA    s    zMessage._explain_to)rp   rq   rr   r   r>  rA  r   r   r   r   r     s   c               @   s   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   s5   d |  _  d |  _ t j   |  _ t j |  |  d  S)Nru   r   )rF  rG  r   rH  r   r   )r   r   r   r   r   r     s    		zMaildirMessage.__init__c             C   s   |  j  S)N)rF  )r   r   r   r   r     s    zMaildirMessage.get_subdirc             C   s8   | d k s | d k r$ | |  _  n t d |   d  S)Nru   rv   z!subdir must be 'new' or 'cur': %s)rF  rJ   )r   r   r   r   r   r      s    zMaildirMessage.set_subdirc             C   s+   |  j  j d  r# |  j  d d   Sd Sd  S)Nz2,rO   r   )rG  rh   )r   r   r   r   	get_flags  s    zMaildirMessage.get_flagsc             C   s    d d j  t |   |  _ d  S)Nz2,r   )rw   r   rG  )r   flagsr   r   r   	set_flags  s    zMaildirMessage.set_flagsc             C   s0   |  j  d j t |  j    t |  B  d  S)Nr   )rK  rw   r  rI  )r   flagr   r   r   add_flag  s    zMaildirMessage.add_flagc             C   s<   |  j    r8 |  j d j t |  j     t |    d  S)Nr   )rI  rK  rw   r  )r   rL  r   r   r   remove_flag  s    zMaildirMessage.remove_flagc             C   s   |  j  S)N)rH  )r   r   r   r   r     s    zMaildirMessage.get_datec             C   s<   y t  |  |  _ Wn" t k
 r7 t d |   Yn Xd  S)Nzcan't convert to float: %s)floatrH  rJ   ri   )r   Zdater   r   r   r     s    zMaildirMessage.set_datec             C   s   |  j  S)N)rG  )r   r   r   r   r   &  s    zMaildirMessage.get_infoc             C   s5   t  | t  r | |  _ n t d t |    d  S)Nzinfo must be a string: %s)rT   r`   rG  ri   rj   )r   infor   r   r   r   *  s    zMaildirMessage.set_infoc             C   s4  t  | t  rK | j |  j    | j |  j    | j |  j    nt  | t  rt	 |  j    } d | k r | j
 d  |  j   d k r | j
 d  d | k r | j
 d  d | k r | j
 d  d | k r | j
 d  | j d	 t j |  j     nt  | t  rt	 |  j    } d | k rK| j d
  d | k rd| j d  d | k r0| j d  n t  | t  rt	 |  j    } d | k r| j d
  d | k r| j d  d | k r| j d  d | k r0| j d  n( t  | t  rn t d t |    d  S)NSRrv   OTDFAzMAILER-DAEMONr)  repliedflaggedr*  r+  Pr,  z$Cannot convert to specified type: %s)rT   r	   rK  rI  r   r   r   r   r   r  rM  r   r   r   r   r  r   	add_labelr   ri   rj   )r   r   rJ  r   r   r   rA  1  sN    "zMaildirMessage._explain_to)rp   rq   rr   rC  r   r   r   rI  rK  rM  rN  r   r   r   r   rA  r   r   r   r   r	     s   c               @   s   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   sw   |  j  d d  t | t j j  rc | j   } | d  k	 rc | j d  rc |  j  | d d    t j |  |  d  S)NzMAILER-DAEMONTzFrom rQ   )r   rT   r,   r   r   r   rh   r   )r   r   r   r   r   r   r   b  s    z_mboxMMDFMessage.__init__c             C   s   |  j  S)N)r\  )r   r   r   r   r   k  s    z_mboxMMDFMessage.get_fromc             C   sH   | d  k	 r; | d k r$ t  j   } | d t  j |  7} | |  _ d  S)NT )r   r   r   r\  )r   r   Ztime_r   r   r   r   o  s
    z_mboxMMDFMessage.set_fromc             C   s    |  j  d d  |  j  d d  S)NStatusr   zX-Status)r&   )r   r   r   r   rI  w  s    z_mboxMMDFMessage.get_flagsc             C   s  t  |  } d	 \ } } x1 d
 D]) } | | k r | | 7} | j |  q Wx1 d D]) } | | k rS | | 7} | j |  qS W| d j t |   7} y |  j d |  Wn" t k
 r |  j d |  Yn Xy |  j d |  Wn" t k
 r
|  j d |  Yn Xd  S)Nr   rR  rS  rU  rV  rW  r^  zX-Status)r   r   )rR  rS  )rU  rV  rW  )r  r   rw   r   replace_headerr!   Z
add_header)r   rJ  Zstatus_flagsZxstatus_flagsrL  r   r   r   rK  {  s&    

z_mboxMMDFMessage.set_flagsc             C   s0   |  j  d j t |  j    t |  B  d  S)Nr   )rK  rw   r  rI  )r   rL  r   r   r   rM    s    z_mboxMMDFMessage.add_flagc             C   sH   d |  k s d |  k rD |  j  d j t |  j    t |    d  S)Nr^  zX-Statusr   )rK  rw   r  rI  )r   rL  r   r   r   rN    s    z_mboxMMDFMessage.remove_flagc             C   ss  t  | t  rt |  j    } d | k r: | j d  d | k rS | j d  d | k rl | j d  d | k r | j d  d | k r | j d  | d	 =| d
 =d j |  j   j   d d    } y& | j	 t
 j t j | d    Wqot t f k
 rYqoXnZt  | t  rM| j |  j    | j |  j    n"t  | t  rt |  j    } d | k r| j d  d | k r| j d  d | k r| j d  | d	 =| d
 =n t  | t  rGt |  j    } d | k r| j d  d | k r| j d  d | k r6| j d  | d	 =| d
 =n( t  | t  rYn t d t |    d  S)NrS  rv   rV  rW  rR  rQ  rU  rT  statuszx-statusr]  rQ   z%a %b %d %H:%M:%S %Yr)  rX  rY  r*  r+  z$Cannot convert to specified type: %s)rT   r	   r  rI  r   rM  rw   r   r   r   calendarZtimegmr   strptimerJ   OverflowErrorr   rK  r   r   r  r   r[  r   ri   rj   )r   r   rJ  Z
maybe_dater   r   r   rA    s^    %

z_mboxMMDFMessage._explain_to)rp   rq   rr   rC  r   r   r   rI  rK  rM  rN  rA  r   r   r   r   r   ]  s   		r   c               @   s   e  Z d  Z d S)r
   N)rp   rq   rr   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 j |  |  d  S)N)re  r   r   )r   r   r   r   r   r     s    	zMHMessage.__init__c             C   s   |  j  d  d   S)N)re  )r   r   r   r   r
    s    zMHMessage.get_sequencesc             C   s   t  |  |  _ d  S)N)r2   re  )r   r!  r   r   r   r#    s    zMHMessage.set_sequencesc             C   sK   t  | t  r1 | |  j k rG |  j j |  n t d t |    d  S)Nzsequence type must be str: %s)rT   r`   re  r   ri   rj   )r   r(  r   r   r   r    s    zMHMessage.add_sequencec             C   s-   y |  j  j |  Wn t k
 r( Yn Xd  S)N)re  r   rJ   )r   r(  r   r   r   remove_sequence  s    zMHMessage.remove_sequencec             C   s  t  | t  r t |  j    } d | k r= | j d  n | j d  | j d  d | k rp | j d  d | k r| j d  n3t  | t  rt |  j    } d | k r | j d  n | j d	  d | k r | j d  d | k r| j d
  n t  | t  rAx |  j   D] } | j |  q'Wn~ t  | t	  rt |  j    } d | k r{| j
 d  d | k r| j
 d  n( t  | t  rn t d t |    d  S)Nr)  rv   rQ  rY  rV  rX  rR  ROrS  rW  r+  z$Cannot convert to specified type: %s)rT   r	   r  r
  r   rM  r   r   r  r   r[  r   ri   rj   )r   r   r!  r(  r   r   r   rA    s@    zMHMessage._explain_to)
rp   rq   rr   rC  r   r
  r#  r  rf  rA  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 j |  |  d  S)N)r.  r   rh  r   )r   r   r   r   r   r     s    	zBabylMessage.__init__c             C   s   |  j  d  d   S)N)r.  )r   r   r   r   r/  %  s    zBabylMessage.get_labelsc             C   s   t  |  |  _ d  S)N)r2   r.  )r   r6  r   r   r   r1  )  s    zBabylMessage.set_labelsc             C   sK   t  | t  r1 | |  j k rG |  j j |  n t d t |    d  S)Nzlabel must be a string: %s)rT   r`   r.  r   ri   rj   )r   r8  r   r   r   r[  -  s    zBabylMessage.add_labelc             C   s-   y |  j  j |  Wn t k
 r( Yn Xd  S)N)r.  r   rJ   )r   r8  r   r   r   remove_label5  s    zBabylMessage.remove_labelc             C   s   t  |  j  S)N)r   rh  )r   r   r   r   r<  <  s    zBabylMessage.get_visiblec             C   s   t  |  |  _ d  S)N)r   rh  )r   Zvisibler   r   r   r0  @  s    zBabylMessage.set_visiblec             C   s   xG |  j  j   D]6 } | |  k r< |  j  j | |  |  q |  j  | =q Wx: d D]2 } | |  k rQ | |  j  k rQ |  | |  j  | <qQ Wd  S)NDateFromReply-ToToCCSubject)rj  rk  rl  rm  rn  ro  )rh  r3   r_  )r   headerr   r   r   update_visibleD  s    zBabylMessage.update_visiblec             C   s  t  | t  r t |  j    } d | k r= | j d  n | j d  | j d  d | k so d | k r| | j d  d | k r | j d  d	 | k r| j d
  nFt  | t  r0t |  j    } d | k r | j d  n | j d  d	 | k r| j d  d | k r| j d  n t  | t  rt |  j    } d | k rj| j d  d | k r| j d  nq t  | t	  r| j
 |  j    xL |  j   D] } | j |  qWn( t  | t  rn t d t |    d  S)Nr)  rv   rQ  r,  r-  rZ  r+  rR  r*  rT  rg  rS  rU  rW  rX  z$Cannot convert to specified type: %s)rT   r	   r  r/  r   rM  r   r   r  r   r0  r<  r[  r   ri   rj   )r   r   r6  r8  r   r   r   rA  O  sF    zBabylMessage._explain_to)rp   rq   rr   rC  r   r/  r1  r[  ri  r<  r0  rq  rA  r   r   r   r   r     s   c               @   s   e  Z d  Z d S)r   N)rp   rq   rr   r   r   r   r   r   y  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   s4   | |  _  | d  k r' | j   |  _ n	 | |  _ d  S)N)r   r   _pos)r   r   posr   r   r   r     s    	z_ProxyFile.__init__c             C   s   |  j  | |  j j  S)N)_readr   rM   )r   sizer   r   r   rM     s    z_ProxyFile.readc             C   s   |  j  | |  j j  S)N)rt  r   read1)r   ru  r   r   r   rv    s    z_ProxyFile.read1c             C   s   |  j  | |  j j  S)N)rt  r   rg   )r   ru  r   r   r   rg     s    z_ProxyFile.readlinec             C   sQ   g  } xD |  D]< } | j  |  | d  k	 r | t |  8} | d k r Pq W| S)Nr   )r   r   )r   sizehintr=   rn   r   r   r   	readlines  s    z_ProxyFile.readlinesc             c   s&   x |  j    } | s d  S| Vq Wd  S)N)rg   )r   rn   r   r   r   r6     s
    z_ProxyFile.__iter__c             C   s   |  j  S)N)rr  )r   r   r   r   r     s    z_ProxyFile.tellr   c             C   sH   | d k r |  j  j |  j  |  j  j | |  |  j  j   |  _ d  S)NrP   )r   rZ   rr  r   )r   offsetwhencer   r   r   rZ     s    z_ProxyFile.seekc          
   C   s@   t  |  d  r< z# t  |  j d  r1 |  j j   Wd  |  ` Xd  S)Nr   rG   )r@   r   rG   )r   r   r   r   rG     s
    z_ProxyFile.closec             C   sG   | d  k r d } |  j  j |  j  | |  } |  j  j   |  _ | S)NrP   rS   )r   rZ   rr  r   )r   ru  read_methodr=   r   r   r   rt    s    z_ProxyFile._readc             C   s   |  S)Nr   )r   r   r   r   	__enter__  s    z_ProxyFile.__enter__c             G   s   |  j    d  S)N)rG   )r   excr   r   r   __exit__  s    z_ProxyFile.__exit__c             C   s   |  j  j   S)N)r   readable)r   r   r   r   r    s    z_ProxyFile.readablec             C   s   |  j  j   S)N)r   writable)r   r   r   r   r    s    z_ProxyFile.writablec             C   s   |  j  j   S)N)r   seekable)r   r   r   r   r    s    z_ProxyFile.seekablec             C   s   |  j  j   S)N)r   rD   )r   r   r   r   rD     s    z_ProxyFile.flushc             C   s3   t  |  d  s d St  |  j d  s) d S|  j j S)Nr   Tr  F)r@   r   r  )r   r   r   r   r    s
    z_ProxyFile.closed)rp   rq   rr   r   rM   rv  rg   rx  r6   r   rZ   rG   rt  r|  r~  r  r  r  rD   propertyr  r   r   r   r   r   }  s"   		r   c               @   sU   e  Z d  Z d d d d  Z d d   Z d d d  Z d	 d
   Z d d   Z d S)r   Nc             C   s)   t  j |  | |  | |  _ | |  _ d  S)N)r   r   _start_stop)r   r   r   r   r   r   r   r     s    	z_PartialFile.__init__c             C   s   t  j |   |  j S)N)r   r   r  )r   r   r   r   r     s    z_PartialFile.tellr   c             C   sV   | d k r! |  j  |  _ d } n | d k r? |  j |  _ d } t j |  | |  d  S)Nr   rP   rO   )r  rr  r  r   rZ   )r   ry  rz  r   r   r   rZ     s    	z_PartialFile.seekc             C   s]   |  j  |  j } | d k r  d S| d  k sD | d k  sD | | k rJ | } t j |  | |  S)Nr   r   )r  rr  r   rt  )r   ru  r{  	remainingr   r   r   rt    s    $z_PartialFile._readc             C   s   t  |  d  r |  ` d  S)Nr   )r@   r   )r   r   r   r   rG      s    z_PartialFile.close)rp   rq   rr   r   r   rZ   rt  rG   r   r   r   r   r     s
   
	r   Tc          -   C   s  d } yt  r y t  j |  t  j t  j B Wn_ t k
 r } z? | j t j t j t j f k ry t	 d |  j
   n   WYd  d  } ~ Xn X| ry! t |  j
 d  } | j   WnG t k
 r } z' | j t j t j f k r d  S  WYd  d  } ~ Xn Xyf t t d  rEt j | j
 |  j
 d  d } t j | j
  n  t j | j
 |  j
 d  d } Wn5 t k
 rt j | j
  t	 d |  j
   Yn XWn> t  rt  j |  t  j  | rt j |  j
 d    Yn Xd  S)NFzlockf: lock unavailable: %sz.lockr   Tzdot lock unavailable: %s)fcntllockfZLOCK_EXZLOCK_NBr   r   EAGAINr   r   r   r   r   rG   r@   r   r   r$  r   r   r   LOCK_UN)r   r   Zdotlock_doner   Zpre_lockr   r   r   r     sF    !
r   c             C   sJ   t  r t  j |  t  j  t j j |  j d  rF t j |  j d  d  S)Nz.lock)r  r  r  r   r   ry   r   r   )r   r   r   r   r   0  s    r   c             C   sL   t  j |  t  j t  j Bt  j Bd  } z t |  d  SWd  t  j |  Xd  S)Ni  zrb+)r   r   r   r  O_RDWRrG   )r   fdr   r   r   r   7  s    &r   c             C   s2   t  d |  t t j    t j   t j   f  S)Nz%s.%s.%s.%s)r   r   r   r   r   r   r   )r   r   r   r   r   ?  s    	r   c             C   s0   |  j    t t d  r, t j |  j    d  S)Nfsync)rD   r@   r   r  fileno)r   r   r   r   r   E  s    
r   c             C   s   t  |   |  j   d  S)N)r   rG   )r   r   r   r   r   K  s    
r   c               @   s   e  Z d  Z d S)ErrorN)rp   rq   rr   r   r   r   r   r  Q  s   r  c               @   s   e  Z d  Z d S)r{   N)rp   rq   rr   r   r   r   r   r{   T  s   r{   c               @   s   e  Z d  Z d S)r   N)rp   rq   rr   r   r   r   r   r   W  s   r   c               @   s   e  Z d  Z d S)r   N)rp   rq   rr   r   r   r   r   r   Z  s   r   c               @   s   e  Z d  Z d S)r  N)rp   rq   rr   r   r   r   r   r  ]  s   r  )/r   r   rb  r   r   r?  rc   r,   Zemail.messageZemail.generatorrU   r(   r  ImportError__all__r\   rH   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>	   sb    6B4- 1%mqH_c')