
    z%i3                       	 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 	 d dlZg dZe j"                  j%                  d      Z G d d      Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d dej6                  j8                        Z G d de      Z G d de      Z G d de      Z G d de      Z  G d d e      Z! G d! d"e      Z" G d# d$      Z# G d% d&e#      Z$d7d'Z%d( Z&d) Z'd* Z(d+ Z)d, Z* G d- d.e+      Z, G d/ d0e,      Z- G d1 d2e,      Z. G d3 d4e,      Z/ G d5 d6e,      Z0y# e$ r dZY Aw xY w)8    N)GenericAlias)MailboxMaildirmboxMHBabylMMDFMessageMaildirMessagemboxMessage	MHMessageBabylMessageMMDFMessageErrorNoSuchMailboxErrorNotEmptyErrorExternalClashErrorFormatErrorasciic                       e Zd Z	 d"dZd Zd Zd Zd Zd Zd#dZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd#dZd Zd#dZd Zd Zd Zd Zd Z d Z!d$d!Z" e#e$      Z%y)%r   Nc                     	 t         j                  j                  t         j                  j                  |            | _        || _        y N)ospathabspath
expanduser_path_factoryselfr   factorycreates       ;/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/mailbox.py__init__zMailbox.__init__%   s/    ,WW__RWW%7%7%=>
    c                     	 t        d      Nz&Method must be implemented by subclassNotImplementedErrorr    messages     r#   addzMailbox.add*   s    2!"JKKr%   c                     	 t        d      r'   r(   r    keys     r#   removezMailbox.remove.   s    K!"JKKr%   c                 &    | j                  |       y r   )r0   r.   s     r#   __delitem__zMailbox.__delitem__2   s    Cr%   c                 H    	 	 | j                  |       y # t        $ r Y y w xY wr   )r0   KeyErrorr.   s     r#   discardzMailbox.discard5   s(    5	KK 		s    	!!c                     	 t        d      r'   r(   r    r/   r+   s      r#   __setitem__zMailbox.__setitem__<   s    L!"JKKr%   c                 J    	 	 | j                  |      S # t        $ r |cY S w xY wr   )__getitem__r4   )r    r/   defaults      r#   getzMailbox.get@   s/    G	##C(( 	N	s    ""c                     	 | j                   s| j                  |      S t        j                  | j	                  |            5 }| j                  |      cd d d        S # 1 sw Y   y xY wr   )r   get_message
contextlibclosingget_file)r    r/   files      r#   r:   zMailbox.__getitem__G   sW    K}}##C((##DMM#$67 +4}}T*+ + +s   AA'c                     	 t        d      r'   r(   r.   s     r#   r>   zMailbox.get_messageO   s    B!"JKKr%   c                 h    	 t        j                  | j                  |            j                         S r   emailmessage_from_bytes	get_bytes	as_stringr.   s     r#   
get_stringzMailbox.get_stringS   s,    	* ''s(;<FFHHr%   c                     	 t        d      r'   r(   r.   s     r#   rH   zMailbox.get_bytesZ   s    F!"JKKr%   c                     	 t        d      r'   r(   r.   s     r#   rA   zMailbox.get_file^   s    D!"JKKr%   c                     	 t        d      r'   r(   r    s    r#   iterkeyszMailbox.iterkeysb   s    +!"JKKr%   c                 6    	 t        | j                               S r   )listrO   rN   s    r#   keyszMailbox.keysf   s    $DMMO$$r%   c              #   j   K   	 | j                         D ]  }	 | |   }|  y # t        $ r Y w xY wwr   rO   r4   r    r/   values      r#   
itervalueszMailbox.itervaluesj   sF     3==? 	CS	 K	  s   3$3	0303c                 "    | j                         S r   )rW   rN   s    r#   __iter__zMailbox.__iter__s   s      r%   c                 6    	 t        | j                               S r   )rQ   rW   rN   s    r#   valueszMailbox.valuesv   s    :DOO%&&r%   c              #   n   K   	 | j                         D ]  }	 | |   }||f  y # t        $ r Y w xY wwr   rT   rU   s      r#   	iteritemszMailbox.iteritemsz   sK     <==? 	CS	 ,	  s   5&	5	2525c                 6    	 t        | j                               S r   )rQ   r]   rN   s    r#   itemszMailbox.items   s    GDNN$%%r%   c                     	 t        d      r'   r(   r.   s     r#   __contains__zMailbox.__contains__   s    G!"JKKr%   c                     	 t        d      r'   r(   rN   s    r#   __len__zMailbox.__len__   s    8!"JKKr%   c                 R    	 | j                         D ]  }| j                  |        y r   )rR   r5   r.   s     r#   clearzMailbox.clear   s&    "99; 	CLL	r%   c                 X    	 	 | |   }| j                  |       |S # t         $ r |cY S w xY wr   )r4   r5   )r    r/   r;   results       r#   popzMailbox.pop   s<    A	#YF 	S  	N	s    ))c                 l    	 | j                         D ]  }|| j                  |      fc S  t        d      )NzNo messages in mailbox)rO   rh   r4   r.   s     r#   popitemzMailbox.popitem   s;    D==? 	5C#''	5 344r%   c                     	 t        |d      r|j                         }nt        |d      r|j                         }n|}d}|D ]  \  }}	 || |<    |rt        d      y # t        $ r d}Y )w xY w)Nr]   r_   FTzNo message with key(s))hasattrr]   r_   r4   )r    argsourcebad_keyr/   r+   s         r#   updatezMailbox.update   s    B3$]]_FS'"YY[FF" 	LC#S		
 344   s   	AA,+A,c                     	 t        d      r'   r(   rN   s    r#   flushzMailbox.flush   s    4!"JKKr%   c                     	 t        d      r'   r(   rN   s    r#   lockzMailbox.lock   s    !"JKKr%   c                     	 t        d      r'   r(   rN   s    r#   unlockzMailbox.unlock   s    1!"JKKr%   c                     	 t        d      r'   r(   rN   s    r#   closezMailbox.close   s    *!"JKKr%   c                 V    	 |j                  d      S # t        $ r t        d      w xY w)Nr   z?String input must be ASCII-only; use bytes or a Message instead)encodeUnicodeError
ValueErrorr*   s     r#   _string_to_byteszMailbox._string_to_bytes   s7    	2>>'** 	2 1 2 2	2s    (Fc                    	 t        |t        j                  j                        rt	        j
                         }t        j                  j                  ||d      }|j                  |       |j                  d       |j                         }|j                  dt              }|j                  |       | j                  r,|j                  t              s|j                  t               y y y t        |t         t"        t        j$                  f      rt        |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              s|j                  t               y y y t1        |d      rt1        |d      r't'        j(                  d	t*        d       |j2                  }d }	 |j5                         }|j                  d
      r	|d d dz   }n|j                  d      r|d d dz   }|snE|r|j7                  d      rd|dd  z   }|j                  dt              }|j                  |       |}| j                  r/|r,|j                  t              s|j                  t               y y y y t9        dt;        |      z        )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)
isinstancerF   r+   r
   ioBytesIO	generatorBytesGeneratorflattenseekr   replacelinesepwrite_append_newlineendswithstrbytesStringIOwarningswarnDeprecationWarninggetvaluer}   rl   r   readline
startswith	TypeErrortype)	r    r+   targetmangle_from_r   gendatalastlinelines	            r#   _dump_messagezMailbox._dump_message   sw   3gu}}445ZZ\F//00qICKK KKN;;=D<<w/DLL##DMM',BW% -C# #ubkk!:;'2;;/ *+=qB!**,'3'//8!//*kBooeW5GLL!##G,<,<W,EW% -F# Wf%w) 56H!M!..H'')==)9u,D]]5)9u,DDOOH$=$tABx/D||E73T"  ##9J9J79SW% :T# 6gFGGr%   NTr   F)&__name__
__module____qualname__r$   r,   r0   r2   r5   r8   r<   r:   r>   rJ   rH   rA   rO   rR   rW   rY   r[   r]   r_   ra   rc   re   rh   rj   rp   rr   rt   rv   rx   r}   r   r   classmethodr   __class_getitem__ r%   r#   r   r   "   s    4 
LLL+LILLL%!'&LL
55"LLLL2 O4Hl $L1r%   r   c                       e Zd Z	 dZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdZd Zd Zd Zd Zy)r   :Nc                    	 t         j                  | |||       t        j                  j	                  | j
                  d      t        j                  j	                  | j
                  d      t        j                  j	                  | j
                  d      d| _        t        j                  j                  | j
                        sm|rVt        j                  | j
                  d       | j                  j                         D ]  }t        j                  |d        nt        | j
                        i | _        ddd| _        d| _        d| _        y )	Ntmpnewcur)r   r   r     r   )r   r   g?)r   r$   r   r   joinr   _pathsexistsmkdirr[   r   _toc_toc_mtimes
_last_read_skewfactor)r    dirnamer!   r"   r   s        r#   r$   zMaildir.__init__  s    ,w877<<

E277<<

E277<<

E2
 ww~~djj)U+ KK..0 *DHHT5)* )44	#$Q/r%   c                    	 | j                         }	 | j                  ||       t        |       t        |t              r?|j                         }| j                  |j                         z   }|| j                  k(  rd}nd}d}t        j                  j                  |j                        j                  | j                        d   }t        j                  j!                  | j"                  |||z         }t        |t              rWt	        j$                  |j                  t        j                  j'                  |j                        |j)                         f       	 	 t	        j*                  |j                  |       t	        j
                  |j                         |S # t        $ r1 |j                          t	        j
                  |j                          w xY w# t,        t.        f$ r$ t	        j0                  |j                  |       Y |S w xY w# t2        $ rP}t	        j
                  |j                         |j4                  t4        j6                  k(  rt9        d|z         d }~ww xY w)N r   r   z$Name clash with existing message: %s)_create_tmpr   BaseExceptionrx   r   r0   name_sync_closer   r   
get_subdircolonget_infor   basenamesplitr   r   utimegetatimeget_datelinkAttributeErrorPermissionErrorrenameOSErrorerrnoEEXISTr   )r    r+   tmp_filesubdirsuffixuniqdestes           r#   r,   zMaildir.add$  s   2##%	w1
 	Hg~.'')FZZ'"2"2"44F#FFww.44TZZ@Cww||DJJv>g~.HHX]]gg&&x}}5w7G7G7IJL
	)t, 		(--( G  	NNIIhmm$	0 #O4 /		(--. /  	IIhmm$ww%,,&()O+/*0 1 1 	sB   F   G ?H  :G/HH HH 	I,AI''I,c                     	 t        j                  t         j                  j                  | j                  | j                  |                   y r   )r   r0   r   r   r   _lookupr.   s     r#   r0   zMaildir.removeN  s-    K
		"'',,tzz4<<+<=>r%   c                 T    	 	 | j                  |       y # t        t        f$ r Y y w xY wr   )r0   r4   FileNotFoundErrorr.   s     r#   r5   zMaildir.discardR  s.    5	KK+, 		s    ''c                    	 | j                  |      }| j                  |      }| j                  |      }t        |t              r|}n|}t        j
                  j                  |      }| j                  |v r,| j                  |j                  | j                        d   z   }nd}| j                  |       t        j
                  j                  | j                  |      }	t        j
                  j                  | j                  |||z         }
t        |t              rCt	        j                  |	t        j
                  j                  |	      |j                         f       t	        j                  |	|
       y )Nr   r   )r   r,   r   r   r   r   r   r   r   r5   r   r   r   r   r   r   )r    r/   r+   old_subpathtemp_keytemp_subpathdominant_subpathr   r   tmp_pathnew_paths              r#   r8   zMaildir.__setitem__Z  s   Lll3'88G$||H-g~.+  +!12::))ZZ"2"8"8"DR"HHFFS77<<

L977<<

FC&LAg~.HHXgg&&x0'2B2B2DEG
 			(H%r%   c                    	 | j                  |      }t        t        j                  j	                  | j
                  |      d      5 }| j                  r| j                  |      }nt        |      }d d d        t        j                  j                  |      \  }}j                  |       | j                  |v r-|j                  |j                  | j                        d          |j                  t        j                  j                  t        j                  j	                  | j
                  |                   |S # 1 sw Y   xY w)Nrbr   )r   openr   r   r   r   r   r   r   
set_subdirr   set_infoset_dategetmtime)r    r/   subpathfmsgr   r   s          r#   r>   zMaildir.get_messageu  s    B,,s#"'',,tzz73T: 	(a}}mmA&$Q'		(
 ww}}W-v::LLDJJ/34RWW%%bggll4::w&GHI
	( 	(s   *D??Ec                     	 t        t        j                  j                  | j                  | j                  |            d      5 }|j                         j                  t        d      cd d d        S # 1 sw Y   y xY w)Nr   r   )	r   r   r   r   r   r   r   r   r   r    r/   r   s      r#   rH   zMaildir.get_bytes  sX    @"'',,tzz4<<+<=tD 	4668##GU3	4 	4 	4s   $A33A<c                     	 t        t        j                  j                  | j                  | j                  |            d      }t        |      S )Nr   )r   r   r   r   r   r   
_ProxyFiler   s      r#   rA   zMaildir.get_file  s7    Ddjj$,,s*;<dC!}r%   c              #      K   	 | j                          | j                  D ]  }	 | j                  |       |  y # t        $ r Y 'w xY wwr   )_refreshr   r   r4   r.   s     r#   rO   zMaildir.iterkeys  sP     +99 	CS! I	  s%   !A<A	AAAAc                 @    	 | j                          || j                  v S r   )r   r   r.   s     r#   ra   zMaildir.__contains__  s    Gdiir%   c                 N    	 | j                          t        | j                        S r   )r   lenr   rN   s    r#   rc   zMaildir.__len__  s    8499~r%   c                      	 y r   r   rN   s    r#   rr   zMaildir.flush  s
    0 	r%   c                      	 y r   r   rN   s    r#   rt   zMaildir.lock  s    r%   c                      	 y r   r   rN   s    r#   rv   zMaildir.unlock  s    1r%   c                      	 y r   r   rN   s    r#   rx   zMaildir.close  s    *r%   c                 <   	 g }t        j                  | j                        D ]v  }t        |      dkD  s|d   dk(  st         j                  j                  t         j                  j                  | j                  |            sc|j                  |dd         x |S )N   r   .)r   listdirr   r   r   isdirr   appendr    rg   entrys      r#   list_folderszMaildir.list_folders  sw    ,ZZ

+ 	)E5zA~%(c/ww}}RWW\\$**e<=eABi(	) r%   c                     	 t        t        j                  j                  | j                  d|z         | j
                  d      S )Nr  Fr!   r"   )r   r   r   r   r   r   r    folders     r#   
get_folderzMaildir.get_folder  s5    =rww||DJJf=#}}#% 	%r%   c                    	 t         j                  j                  | j                  d|z         }t	        || j
                        }t         j                  j                  |d      }t         j                  j                  |      sIt        j                  t        j                  |t         j                  t         j                  z  d             |S )Nr  r!   maildirfolder  )r   r   r   r   r   r   r   rx   r   O_CREATO_WRONLY)r    r  r   rg   maildirfolder_paths        r#   
add_folderzMaildir.add_folder  s    Lww||DJJf5t}}5WW\\$@ww~~01HHRWW/bkk1I r%   c                    	 t         j                  j                  | j                  d|z         }t        j                  t         j                  j                  |d            t        j                  t         j                  j                  |d            z   D ]&  }t        |      dk  s	|d   dk7  st        d|z         t        j                  |      D ]b  }|dk7  s	|dk7  s|dk7  st         j                  j                  t         j                  j                  ||            sSt        d|d	|       t        j                  |d
      D ]z  \  }}}|D ]5  }t        j                  t         j                  j                  ||             7 |D ]5  }t        j                  t         j                  j                  ||             7 | t        j                  |       y )Nr  r   r   r   r   zFolder contains message(s): %sr   zFolder contains subdirectory 'z': F)topdown)r   r   r   r   r  r   r   r  walkr0   rmdir)r    r  r   r  rootdirsfiless          r#   remove_folderzMaildir.remove_folder  sw   ;ww||DJJf5ZZT5 9:ZZT5 9:; 	OE5zA~qS#$Dv$MNN	O ZZ% 	5E~%5.Ue^ww}}RWW\\$67#%+U%4 5 5	5
 "$u!= 	4D$ 5		"'',,tU345 4dE234	4
 	r%   c                 ~   	 t        j                          }t        j                  t        j                  j	                  | j
                  d            D ]h  }t        j                  j	                  | j
                  d|      }|t        j                  j                  |      z
  dkD  sTt        j                  |       j y )Nr   i@ )timer   r  r   r   r   r   r0   )r    nowr  r   s       r#   cleanzMaildir.clean  s|    (iikZZTZZ ?@ 	 E77<<

E59DRWW%%d++f4		$	 r%   r   c           	      d   	 t        j                          }t        j                         }d|v r|j                  dd      }d|v r|j                  dd      }t	        |      dt	        |dz  dz        dt        j                         d	t        j                  d
|	}t
        j                  j                  | j                  d|      }	 t        j                  |       t!        d|z        # t        $ r9 t        xj                  dz  c_        	 t        |      cY S # t        $ r Y nw xY wY Ow xY w)N/z\057r   z\072z.Mr   g    .APQr  r   z&Name clash prevented file creation: %s)r  socketgethostnamer   intr   getpidr   _countr   r   r   statr   _create_carefullyFileExistsErrorr   )r    r  hostnamer   r   s        r#   r   zMaildir._create_tmp  s   Kiik%%'(?''W5H(?''W5H$'Hc#'C-.@"))+$+NNH>ww||DJJt4	GGDM !!I!%"& ' 	' ! 	NNaN(.." 	s6   
C- -"D/
DD/	D)&D/(D))D/.D/c                    	 t        j                          | j                  z
  d| j                  z   kD  red}| j                  D ]Q  }t        j
                  j                  | j                  |         }|| j                  |   kD  rd}|| j                  |<   S |sy i | _        | j                  D ]  }| j                  |   }t	        j                  |      D ]  }t        j
                  j                  ||      }t        j
                  j                  |      rC|j                  | j                        d   }t        j
                  j                  ||      | j                  |<     t        j                          | _        y )N   FTr   )r  r   r   r   r   r   r   r   r   r  r   r  r   r   )r    refreshr   mtimer   r  pr   s           r#   r   zMaildir._refresh  s;   / 99;(1t/?/?+??G** 1((V)<=4++F33"G+0  (	1
 	&& 	>F;;v&DD) >GGLLu-77==#{{4::.q1"$'',,vu"=		$>	> ))+r%   c                 d   	 	 t         j                  j                  t         j                  j                  | j                  | j
                  |               r| j
                  |   S 	 | j                          	 | j
                  |   S # t        $ r Y +w xY w# t        $ r t        d|z        d w xY wNNo message with key: %s)r   r   r   r   r   r   r4   r   r.   s     r#   r   zMaildir._lookup&  s    K	ww~~bggll4::tyy~FGyy~% H 		F99S>!	  		
  	F4s:;E	Fs   A"B 8B 	BBB/c                     	 t        | d      s| j                         | _        	 	 | t        | j                           S # t        $ r Y y t
        $ r Y /w xY w)N_onetime_keys)rl   rO   r7  nextStopIterationr4   rN   s    r#   r8  zMaildir.next4  sX    >t_-!%DD!3!3455   s   = 	AAAr   )r   r   r   r   r$   r,   r0   r5   r8   r>   rH   rA   rO   ra   rc   rr   rt   rv   rx   r  r  r  r  r   r)  r   r   r   r8  r   r%   r#   r   r     s    (E((T?&64

 

%&  F'0"&HF
r%   r   c                   r    e Zd Z	 ddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd ZddZd Zy)_singlefileMailboxNc                    	 t         j                  | |||       	 t        | j                  d      }|| _
        d | _        d| _        d| _        d| _        d| _        d | _        y # t        $ r}|j
                  t
        j                  k(  r.|rt        | j                  d      }nYt        | j                        |j
                  t
        j                  t
        j                  fv rt        | j                  d      }n Y d }~d }~ww xY w)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   s         r#   r$   z_singlefileMailbox.__init__D  s    /tWf5	TZZ'A 
	" !  		ww%,,&TZZ/A,TZZ88U\\5;;77T*		s   A# #	D,BD  Dc                     	 | j                          | j                  |      | j                  | j                  <   | xj                  dz  c_        d| _        | j                  dz
  S )Nr   T)r   _append_messager   rB  rD  r*   s     r#   r,   z_singlefileMailbox.add[  sR    2$($8$8$A		$..!! "~~!!r%   c                 P    	 | j                  |       | j                  |= d| _        y r   )r   r   rC  r.   s     r#   r0   z_singlefileMailbox.removee  s#    KSIIcNr%   c                 r    	 | j                  |       | j                  |      | j                  |<   d| _        y r   )r   rH  r   rC  r7   s      r#   r8   z_singlefileMailbox.__setitem__k  s0    LS--g6		#r%   c              #   v   K   	 | j                          | j                  j                         E d {    y 7 wr   )r   r   rR   rN   s    r#   rO   z_singlefileMailbox.iterkeysq  s&     +99>>###s   /979c                 @    	 | j                          || j                  v S r   )r   r   r.   s     r#   ra   z_singlefileMailbox.__contains__v  s    Gdiir%   c                 N    	 | j                          t        | j                        S r   )r   r   r   rN   s    r#   rc   z_singlefileMailbox.__len__{  s    8499~r%   c                 X    	 | j                   st        | j                         d| _         y y r   )rE  
_lock_filerA  rN   s    r#   rt   z_singlefileMailbox.lock  s$    ||tzz"DL r%   c                 X    	 | j                   rt        | j                         d| _         y y NF)rE  _unlock_filerA  rN   s    r#   rv   z_singlefileMailbox.unlock  s$    1<<$ DL r%   c           	         	 | j                   s)| j                  rt        | j                         d| _        y | j                  j	                  dd       | j                  j                         }|| j                  k7  rt        d| j                  |fz        t        | j                        }	 i }| j                  |       t        | j                  j                               D ]  }| j                  |   \  }}| j                  j	                  |       | j                  |       |j                         }	 | j                  j                  t!        d|| j                  j                         z
              }|sn|j#                  |       U||j                         f||<   | j%                  |        |j                         | _        t/        |       | j                  j'                          t)        j0                  | j                        j2                  }	t)        j4                  |j,                  |	       	 t)        j6                  |j,                  | j                         t;        | j                  d      | _        || _        d| _         d| _        | j<                  rt?        | j                  d       y y #  |j'                          t)        j*                  |j,                          xY w# t8        $ rL t)        j*                  | j                         t)        j6                  |j,                  | j                         Y w xY w)NFr   r/  z4Size of mailbox file changed (expected %i, found %i)   r=  )dotlock) rC  rD  _sync_flushrA  r   tellrF  r   _create_temporaryr   _pre_mailbox_hooksortedr   rR   _pre_message_hookr   minr   _post_message_hookrx   r   r0   r   r   r*  st_modechmodr   r,  r   rE  rO  )
r    cur_lennew_filenew_tocr/   startstop	new_startr   modes
             r#   rr   z_singlefileMailbox.flush  s   0}}!! DJJ'%*" 	

1**//#d'''$ &?&*&7&7%A&B C C %TZZ0	G""8,diinn./ 2"iint

&&&x0$MMO	!ZZ__S15

8I1I.K LF!NN6*  !*8==?;''12 !)D
 	H

wwtzz"**
%	1IIhmmTZZ0 $**e,
	"<<tzz51 '	NNIIhmm$  	1IIdjj!IIhmmTZZ0	1s    ,DJ4 5*K) 42K&)AL>=L>c                      	 y r   r   r    r   s     r#   rY  z$_singlefileMailbox._pre_mailbox_hook      :r%   c                      	 y r   r   rh  s     r#   r[  z$_singlefileMailbox._pre_message_hook  s    ;r%   c                      	 y r   r   rh  s     r#   r]  z%_singlefileMailbox._post_message_hook  ri  r%   c                    	 	 | j                          	 | j                  r| j                          | j                  j	                          y # | j                  j	                          w xY w# 	 | j                  r| j                          | j                  j	                          w # | j                  j	                          w xY wxY wr   )rr   rE  rv   rA  rx   rN   s    r#   rx   z_singlefileMailbox.close  s    *	#JJL#<<KKM

  "

  "	#<<KKM

  "

  "s.   A* A A'*C,B#C#B??Cc                     	 | j                   | j                          |	 | j                   |   S y # t        $ r t        d|z        d w xY wr4  )r   _generate_tocr4   r.   s     r#   r   z_singlefileMailbox._lookup  s_    599 ?Jyy~%   J83>?TIJs	   1 A
c                 F   	 | j                   j                  dd       | j                   j                         }t        | j                        dk(  r'| j
                  s| j                  | j                          	 | j                  | j                          | j                  |      }| j                  | j                          | j                   j                          | j                   j                         | _        |S # t        $ r | j                   j                  |        w xY w)Nr   r/  )rA  r   rW  r   r   rC  rY  r[  _install_messager]  r   truncaterr   rF  )r    r+   beforeoffsetss       r#   rH  z"_singlefileMailbox._append_message  s    I

1"tyy>Qt}}
 ""4::.	""4::.++G4G##DJJ/ 	

 JJOO-  	JJ'	s   8AC: :&D r   r   )r   r   r   r$   r,   r0   r8   rO   ra   rc   rt   rv   rr   rY  r[  r]  rx   r   rH  r   r%   r#   r;  r;  A  sW     !."$
 

 !>2@	#Jr%   r;  c                   6    e Zd Z	 dZd ZddZddZddZd Zy)		_mboxMMDFTc                    	 | j                  |      \  }}| j                  j                  |       | j                  j                         j	                  t
        d      }| j                  j                  || j                  j                         z
        }| j                  |j	                  t
        d            }|j                  |dd  j                  d             |S )Nr%   r   r   r   )r   rA  r   r   r   r   r   rW  _message_factoryset_fromdecode)r    r/   rc  rd  	from_linestringr   s          r#   r>   z_mboxMMDF.get_message	  s    Bll3't

JJ'')11'3?	

(9!9:##FNN7E$BCYqr]))'23
r%   c                 n    	 t        j                  | j                  ||            j                  |      S )N)unixfromrE   )r    r/   from_s      r#   rJ   z_mboxMMDF.get_string  s3    A''NN3&((1	5	(A	Br%   c                 2   	 | j                  |      \  }}| j                  j                  |       |s| j                  j                          | j                  j	                  || j                  j                         z
        }|j                  t        d      S Nr   )r   rA  r   r   r   rW  r   r   )r    r/   r~  rc  rd  r{  s         r#   rH   z_mboxMMDF.get_bytes  sm    All3't

JJ!

(9!9:~~gu--r%   c                     	 | j                  |      \  }}| j                  j                  |       |s| j                  j                          t	        | j                  | j                  j                         |      S r   )r   rA  r   r   _PartialFilerW  )r    r/   r~  rc  rd  s        r#   rA   z_mboxMMDF.get_file!  sX    Dll3't

JJ!DJJ

(94@@r%   c                 L   	 d }t        |t              r| j                  |      }t        |t              r:|j	                  d      r)|j                  d      }|dk7  r|d | }||dz   d  }n|}d}n|t        |t              r%|j                         j                  d      }d|z   }nGt        |t        j                  j                        r#|j                         }||j                  d      }|8dt        j                  t        j                               j                         z   }| j                   j#                         }| j                   j%                  |t&        z          | j)                  || j                   | j*                         | j                   j#                         }||fS )Nr   r   r   r   r%   r   s   From MAILER-DAEMON )r   r   r}   r   r   find_mboxMMDFMessageget_fromrz   rF   r+   r
   get_unixfromr  asctimegmtimerA  rW  r   r   r   _mangle_from_)r    r+   rz  newlineauthorrc  rd  s          r#   rp  z_mboxMMDF._install_message)  sa   ?	gs#++G4Ggu%'*<*<X*Fll5)G"}#HW-	!'A+,/#	!12%%'..w7F 6)I!6!67,,.I$%,,W5	.dkkm1L1S1S1UUI

!

W,-7DJJ0B0BCzz t}r%   Nr   )	r   r   r   r  r>   rJ   rH   rA   rp  r   r%   r#   ru  ru    s%    "MB
.Ar%   ru  c                   *    e Zd Z	 dZdZddZd Zd Zy)r   TNc                 L    	 t         | _        t        j                  | |||       y r   )r   rw  ru  r$   r   s       r#   r$   zmbox.__init__O  !    ) +4w7r%   c                 0    	 |j                  t               y r   r   r   rh  s     r#   r]  zmbox._post_message_hookT  s    :	r%   c                    	 g g }}d}| j                   j                  d       	 | j                   j                         }| j                   j                         }|j	                  d      r`t        |      t        |      k  r5|r"|j                  |t        t              z
         n|j                  |       |j                  |       d}nF|s6|r"|j                  |t        t              z
         n|j                  |       n|t        k(  rd}nd}t        t        t        ||                  | _        t        | j                        | _        | j                   j                         | _        y )NFr   Tr   )rA  r   rW  r   r   r   r  r   dict	enumeratezipr   rB  rF  )r    startsstopslast_was_emptyline_posr   s         r#   rn  zmbox._generate_tocX  s   >B

zz(H::&&(Dx(u:F+%XG%<=
 X.h'!&!LLCL!89LL*!%!&/ 0 3vu#567	TYY JJOO-r%   r   )r   r   r   r  r   r$   r]  rn  r   r%   r#   r   r   F  s     !M O8
.r%   r   c                   (    e Zd Z	 ddZd Zd Zd Zy)r	   Nc                 L    	 t         | _        t        j                  | |||       y r   )r   rw  ru  r$   r   s       r#   r$   zMMDF.__init__}  r  r%   c                 6    	 |j                  dt        z          y N   r  rh  s     r#   r[  zMMDF._pre_message_hook  s    ;	#g-.r%   c                 D    	 |j                  t        dz   t        z          y r  r  rh  s     r#   r]  zMMDF._post_message_hook  s    :	--78r%   c                    	 g g }}| j                   j                  d       d}	 |}| j                   j                         }| j                   j                         }|j	                  dt
        z         r|j                  |       	 |}| j                   j                         }| j                   j                         }|dt
        z   k(  r"|j                  |t        t
              z
         n|s|j                  |       ny|snt        t        t        ||                  | _        t        | j                        | _        | j                   j                  dd       | j                   j                         | _        y )Nr   r  r/  )rA  r   r   rW  r   r   r  r   r  r  r  r   rB  rF  )r    r  r  next_posr  r   s         r#   rn  zMMDF._generate_toc  s-   >B

H::&&(Dzz(H2W<=h''H::..0D#zz0H2W<<XG%<=!X.  # $ 3vu#567	TYY

1 JJOO-r%   r   )r   r   r   r$   r[  r]  rn  r   r%   r#   r	   r	   z  s    8
/9.r%   r	   c                       e Zd Z	 ddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)r   Nc                    	 t         j                  | |||       t        j                  j	                  | j
                        s|rt        j                  | j
                  d       t        j                  t        j                  t        j                  j                  | j
                  d      t        j                  t        j                  z  t        j                  z  d             d| _        y t        | j
                        d| _        y )Nr   .mh_sequencesi  F)r   r$   r   r   r   r   r   rx   r   r   r  O_EXCLr  r   rE  r   s       r#   r$   zMH.__init__  s    (tWf5ww~~djj)U+djj/!J!#bii!7"++!EuN O  )44r%   c                    	 | j                         }t        |      dk(  rd}nt        |      dz   }t        j                  j                  | j                  t        |            }t        |      }d}	 | j                  rt        |       	 	 | j                  ||       t!        |t"              r| j%                  ||       | j                  rt        |       	 |st        |       |S # t        $ r; | j                  rt        |       t        |       d}t        j                  |        w xY w# | j                  rt        |       w w xY w# |st        |       w w xY w)Nr   r   FT)rR   r   maxr   r   r   r   r   r+  rE  rO  r   r   rR  r   r0   r   r   _dump_sequences)r    r+   rR   new_keyr   r   closeds          r#   r,   zMH.add  s    2yy{t9>G$i!mG77<<

CL9h'	||1$	&&w2 gy1((':<< OA! % ||$QN!FIIh' << O   A s7   2E
 C& "D- ?E
 &AD**D- -EE
 
Ec                 J   	 t         j                  j                  | j                  t	        |            }	 t        |d      }|j                          t        j                  |       y # t        $ r1}|j                  t        j                  k(  rt        d|z         d }~ww xY wNr=  r5  )r   r   r   r   r   r   rx   r0   r   r   r>  r4   )r    r/   r   r   r   s        r#   r0   z	MH.remove  s~    Kww||DJJC1		T5!A GGIIIdO  	ww%,,&83>??		s   A( (	B"1,BB"c                    	 t         j                  j                  | j                  t	        |            }	 t        |d      }	 | j                  rt        |       	 t        j                  t        j
                  |t         j                  t         j                  z               | j                  ||       t!        |t"              r| j%                  ||       | j                  rt'        |       	 t)        |       y # t        $ r1}|j                  t        j                  k(  rt        d|z         d }~ww xY w# | j                  rt'        |       w w xY w# t)        |       w xY wr  )r   r   r   r   r   r   r   r   r>  r4   rE  rO  rx   r  O_TRUNCr   r   r   r  rR  r   )r    r/   r+   r   r   r   s         r#   r8   zMH.__setitem__  s   Lww||DJJC1	T5!A	||1$r{{RZZ'?@A""7A.gy1((#6<< ON#  	ww%,,&83>??		 << O   Ns<   C; E A<D8 E ;	D5,D00D58EE E"c                    	 	 | j                   r>t        t        j                  j	                  | j
                  t        |            d      }n=t        t        j                  j	                  | j
                  t        |            d      }|5  | j                   rt        |       	 t        |      }| j                   rt        |       	 d d d        | j                         j                         D ]  \  }}||v sj!                  |        S # t        $ r1}|j                  t        j                  k(  rt        d|z         d }~ww xY w# | j                   rt        |       w w xY w# 1 sw Y   xY w)Nr=  r   r5  )rE  r   r   r   r   r   r   r   r   r>  r4   rO  r   rR  get_sequencesr_   add_sequence)r    r/   r   r   r   r   key_lists          r#   r>   zMH.get_message  s*   B		||djj#c(;UCdjj#c(;TB  	$||1$l<< O	$ #00288: 	'ND(h  &	' 
!  	ww%,,&83>??		 << O  	$ 	$s<   BD E(%E0E(	E,EEE%%E((E1c                    	 	 | j                   r>t        t        j                  j	                  | j
                  t        |            d      }n=t        t        j                  j	                  | j
                  t        |            d      }|5  | j                   rt        |       	 |j                         j                  t        d      | j                   rt        |       cd d d        S # t        $ r1}|j                  t        j                  k(  rt        d|z         d }~ww xY w# | j                   rt        |       w w xY w# 1 sw Y   y xY w)Nr=  r   r5  r   )rE  r   r   r   r   r   r   r   r   r>  r4   rO  r   r   r   rR  r    r/   r   r   s       r#   rH   zMH.get_bytes  s    @		||djj#c(;UCdjj#c(;TB  	$||1$vvx''7<< O	$ 	$  	ww%,,&83>??		 << O  	$ 	$s<   BC) E%#D&E)	D#2,DD#&E  EEc                    	 	 t        t        j                  j                  | j                  t        |            d      }t        |      S # t        $ r1}|j                  t        j                  k(  rt        d|z         d }~ww xY w)Nr   r5  )r   r   r   r   r   r   r   r   r>  r4   r   r  s       r#   rA   zMH.get_file,  so    D	RWW\\$**c#h7>A !}  	ww%,,&83>??		s   =A 	B,B  Bc                 t    	 t        t        d t        j                  | j                        D                    S )Nc              3   R   K   | ]  }|j                         rt        |       ! y wr   )isdigitr'  ).0r  s     r#   	<genexpr>zMH.iterkeys.<locals>.<genexpr>9  s$      :%). u: :s   %')iterrZ  r   r  r   rN   s    r#   rO   zMH.iterkeys7  s2    +F :2::djj3I : : ; 	;r%   c                     	 t         j                  j                  t         j                  j                  | j                  t        |                  S r   )r   r   r   r   r   r   r.   s     r#   ra   zMH.__contains__<  s/    Gww~~bggll4::s3x@AAr%   c                 H    	 t        t        | j                                     S r   )r   rQ   rO   rN   s    r#   rc   z
MH.__len__@  s    84())r%   c                     	 | j                   sVt        t        j                  j	                  | j
                  d      d      | _        t        | j                         d| _         y y )Nr  r=  T)rE  r   r   r   r   r   rA  rO  rN   s    r#   rt   zMH.lockD  sE    ||bggll4::GODJtzz"DL r%   c                     	 | j                   r4t        | j                         t        | j                         | `d| _         y y rQ  )rE  rR  rA  r   rN   s    r#   rv   z	MH.unlockK  s5    1<<$

#
 DL	 r%   c                      	 y r   r   rN   s    r#   rr   zMH.flushS  s    4r%   c                 @    	 | j                   r| j                          y y r   )rE  rv   rN   s    r#   rx   zMH.closeW  s    *<<KKM r%   c                    	 g }t        j                  | j                        D ][  }t         j                  j	                  t         j                  j                  | j                  |            sK|j                  |       ] |S r   )r   r  r   r   r  r   r  r  s      r#   r  zMH.list_folders\  s\    ,ZZ

+ 	%Eww}}RWW\\$**e<=e$	% r%   c                     	 t        t        j                  j                  | j                  |      | j
                  d      S )NFr	  r   r   r   r   r   r   r
  s     r#   r  zMH.get_folderd  s0    9"'',,tzz62--7 	7r%   c                     	 t        t        j                  j                  | j                  |      | j
                        S )Nr  r  r
  s     r#   r  zMH.add_folderi  s.    H"'',,tzz62--) 	)r%   c                 ^   	 t         j                  j                  | j                  |      }t        j                  |      }|dgk(  r4t        j
                  t         j                  j                  |d             n|g k(  rnt        d| j                  z        t        j                  |       y )Nr  zFolder not empty: %s)r   r   r   r   r  r0   r   r  )r    r  r   entriess       r#   r  zMH.remove_foldern  s{    ;ww||DJJ/**T"''IIbggll49:] 6 CDD
r%   c           
         	 i }t        t        j                  j                  | j                  d      dd      5 }t        | j                               }|D ]  }	 |j                  d      \  }}t               }|j                         D ]f  }|j                         r|j                  t        |             .d |j                  d      D        \  }	}
|j                  t        |	|
dz                h t        |      D cg c]  }||v r|
 c}||<   t        ||         d	k(  r||=  	 d d d        |S c c}w # t        $ r t!        d
|j#                         z        w xY w# 1 sw Y   |S xY w)Nr  rASCIIencodingr   c              3   2   K   | ]  }t        |        y wr   )r'  )r  xs     r#   r  z#MH.get_sequences.<locals>.<genexpr>  s     *Ka3q6*Ks   -r   r   z"Invalid sequence specification: %s)r   r   r   r   r   setrR   r   r  r,   r'  rp   rangerZ  r   r|   r   rstrip)r    resultsr   all_keysr   r   contentsrR   specrc  rd  r/   s               r#   r  zMH.get_sequencesz  sY   K"'',,tzz?;S7S 	5WX499;'H 55%)ZZ_ND(5D ( 0 @<<> HHSY/*K4::c?*KKE4 KKeTAX(>?@ 5;4L %=S,/8O &) %=GDM74=)Q.#DM5	5& %= " 5%&J&*kkm'4 5 55!	5& s6   E B$D7>D2D7%E 2D77&EE  E*c                     	 t        t        j                  j                  | j                  d      dd      }	 t        j
                  t        j                   |j                  t        j                  t        j                  z               |j                         D ]  \  }}t        |      dk(  r|j                  |dz          d }d}t        t        |            D ]Q  }|dz
  |k(  r|sCd	}|j                  d
       n/|rd}|j                  |d|       n|j                  d|z         |}S |r|j                  t        |      dz          |j                  d        	 t        |       y # t        |       w xY w)Nr  zr+r  r  r   r   Fr   Tr   z %s
)r   r   r   r   r   rx   r   r  r  r_   r   r   rZ  r  r   r   )r    	sequencesr   r   rR   prev
completingr/   s           r#   set_sequenceszMH.set_sequences  s/   Hdjj/:D7S	HHRWWQVVR[[2::%=>?'oo/ "
dt9>s
#"
!#d), 
CQw$))-JGGCL#%*
4 56,D
 GGCI,-GGDM)", NKNs   D*E0 0E=c                    	 | j                         }d}g }| j                         D ]  }|dz
  |k7  r|j                  ||dz   f       	 t        j                  t        j
                  j                  | j                  t        |            t        j
                  j                  | j                  t        |dz                      t        j                  t        j
                  j                  | j                  t        |                   |dz  } |dz   | _        t        |      dk(  ry |j                         D ](  \  }}|D ]  \  }}||v s|||j!                  |      <     * | j#                  |       y # t        t        f$ r~ t        j                  t        j
                  j                  | j                  t        |            t        j
                  j                  | j                  t        |dz                      Y w xY w)Nr   r   )r  rO   r  r   r   r   r   r   r   unlinkr   r   r   rB  r   r_   indexr  )	r    r  r  changesr/   r   r  oldr   s	            r#   packzMH.pack  s   M&&(	==? 	CQw$TAX/BGGBGGLLSX>GGLLS]CE IIbggll4::s3x@AAID	 w<1'oo/ 	8ND(# 8S(?47HX^^C018	8 	9% '8 GIIbggll4::s3x@ ggll4::s4!8}EGGs   A;E66B
HHc                    	 |j                         }| j                         }|j                         D ]2  \  }}||v r|j                  |       ||v s!||j                  |      = 4 |D ]  }||vs|g||<    | j	                  |       y r   )r  r_   r  r  r  )r    r+   r/   pending_sequencesall_sequencesr   r  sequences           r#   r  zMH._dump_sequences  s    I#113**,+113 	2ND((($X^^C01		2
 * 	0H},+.%h'	0 	=)r%   r   )r   r   r   r$   r,   r0   r8   r>   rH   rA   rO   ra   rc   rt   rv   rr   rx   r  r  r  r  r  r  r  r  r   r%   r#   r   r     su    
 D02$*	;
B* !
7
)

0:&4*r%   r   c                   r    e Zd Z	  eh d      ZddZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)r   >   filededitedresentunseendeletedanswered	forwardedNc                 D    	 t         j                  | |||       i | _        y r   )r;  r$   _labelsr   s       r#   r$   zBabyl.__init__  s     )##D$@r%   c                     	 t         j                  | |      }t        |t              r|j	                         | j
                  |<   |S r   )r;  r,   r   r   
get_labelsr  )r    r+   r/   s      r#   r,   z	Babyl.add  s=    2 $$T73g|, ' 2 2 4DLL
r%   c                 j    	 t         j                  | |       || j                  v r| j                  |= y y r   )r;  r0   r  r.   s     r#   r0   zBabyl.remove  s2    K!!$,$,,S! r%   c                     	 t         j                  | ||       t        |t              r|j	                         | j
                  |<   y y r   )r;  r8   r   r   r  r  r7   s      r#   r8   zBabyl.__setitem__  s=    L&&tS':g|, ' 2 2 4DLL -r%   c                    	 | j                  |      \  }}| j                  j                  |       | j                  j                          t	        j
                         }	 | j                  j                         }|dt        z   k(  s|sn&|j                  |j                  t        d             Ot	        j
                         }	 | j                  j                         }|t        k(  s|sn&|j                  |j                  t        d             L|| j                  j                         z
  }| j                  j                  |      }|j                  t        d      }t        |j                         |z         }	|	j                  |j                                || j                  v r|	j                  | j                  |          |	S N   *** EOOH ***r   )r   rA  r   r   r   r   r   r   r   rW  r   r   r   set_visibler  
set_labels)
r    r/   rc  rd  original_headersr   visible_headersnbodyr   s
             r#   r>   zBabyl.get_message  sa   Bll3't



::<::&&(D00""4<<#?@	 
 **,::&&(Dwd!!$,,w">?	  4::??$$zzq!||GU++446=>0023$,,NN4<<,-
r%   c                 t   	 | j                  |      \  }}| j                  j                  |       | j                  j                          t	        j
                         }	 | j                  j                         }|dt        z   k(  s|sn&|j                  |j                  t        d             O	 | j                  j                         }|t        k(  s|sn'|j                         }|| j                  j                         z
  }| j                  j                  |      }|j                  t        d      }||z   S r  )r   rA  r   r   r   r   r   r   r   r   rW  r   )	r    r/   rc  rd  r  r   headersr  r   s	            r#   rH   zBabyl.get_bytes  s   All3't



::<::&&(D00""4<<#?@	 
 ::&&(Dwd  #++-4::??$$zzq!||GU+~r%   c                 t    	 t        j                  | j                  |      j                  dt                    S r  )r   r   rH   r   r   r.   s     r#   rA   zBabyl.get_file(  s*    Dzz$..-55eWEFFr%   c                     	 | j                          t               }| j                  j                         D ]  }|j	                  |        |j                  | j                         t        |      S r   )r   r  r  r[   rp   difference_update_special_labelsrQ   )r    labels
label_lists      r#   r  zBabyl.get_labels,  s[    B,,--/ 	&JMM*%	&  !5!56F|r%   c                 B   	 g g }}| j                   j                  d       d}g }	 |}| j                   j                         }| j                   j                         }|dt        z   k(  rt        |      t        |      k  r!|j                  |t        t              z
         |j                  |       | j                   j                         dd  j                  d      D cg c]"  }|j                         r|j                         $ }}|j                  |       nn|dk(  s|dt        z   k(  r9t        |      t        |      k  rF|j                  |t        t              z
         n$|s"|j                  |t        t              z
         ndt        t        t        ||                  | _        t        t        |            | _        t        | j                        | _        | j                   j                  dd       | j                   j                         | _        y c c}w )Nr   s   r      ,   r/  )rA  r   r   rW  r   r   r  r   stripr  r  r  r   r  rB  rF  )	r    r  r  r  label_listsr  r   labelr  s	            r#   rn  zBabyl._generate_toc5  s   >B

H::&&(Dzz(H{W,,u:F+LLCL!89h'+/::+>+>+@+D+J+J4+P:E+0;;=  ++- : : ""6*DGg,=$=u:F+LLCL!89XG45# $ 3vu#567	Ik23TYY

1 JJOO-:s   'Hc                     	 dt         z   }|dt         z   z  }| j                         }d |D        }|ddj                  |      z   t         z   z  }|dz  }|j                  |       y )Ns   BABYL OPTIONS:s
   Version: 5c              3   <   K   | ]  }|j                           y wr   )rz   )r  r  s     r#   r  z*Babyl._pre_mailbox_hook.<locals>.<genexpr>X  s     5U%,,.5s   s   Labels:r  r	  )r   r  r   r   )r    r   babylr  s       r#   rY  zBabyl._pre_mailbox_hookS  sf    :!G+(("5f5dii//'99	r%   c                 6    	 |j                  dt        z          y )N   r  rh  s     r#   r[  zBabyl._pre_message_hook]  s    ;	'!"r%   c                 6    	 |j                  t        dz          y )Nr	  r  rh  s     r#   r]  zBabyl._post_message_hooka  s    :	'!"r%   c                    	 | j                   j                         }t        |t              r	g }g }|j	                         D ]3  }|| j
                  v r|j                  |       #|j                  |       5 | j                   j                  d       |D ].  }| j                   j                  d|j                         z          0 | j                   j                  d       |D ]1  }| j                   j                  d|j                         z   dz          3 | j                   j                  t               n"| j                   j                  dt        z          t        |t        j                  j                        rt        j                         }t        j                  j!                  |dd      }|j#                  |       |j%                  d       	 |j'                         }| j                   j                  |j)                  d
t                     |d
k(  s|snH| j                   j                  dt        z          t        |t              rt        j                         }	t        j                  j!                  |	dd      }
|
j#                  |j+                                	 |	j'                         }| j                   j                  |j)                  d
t                     |d
k(  s|sn[H|j%                  d       	 |j'                         }| j                   j                  |j)                  d
t                     |d
k(  s|snH	 |j-                  d      }|sn| j                   j                  |j)                  d
t                     Et        |t.        t0        t        j2                  f      rt        |t        j2                        r+t5        j6                  dt8        d       |j;                         }t        |t0              r| j=                  |      }|j?                  d      dz   }|dz
  dk7  r| j                   j                  |d | j)                  d
t                     | j                   j                  dt        z          | j                   j                  |d | j)                  d
t                     | j                   j                  ||d  j)                  d
t                     n | j                   j                  dt        z   t        z          | j                   j                  |j)                  d
t                     ntA        |d      rtA        |d      r't5        j6                  dt8        d       |jB                  }|j                         }d	}	 |j'                         }|jE                  d      r	|d d d
z   }n|jE                  d      r|d d d
z   }| j                   j                  |j)                  d
t                     |d
k(  s|s9|r6d}| j                   j                  dt        z          |j%                  |       nn	 |j'                         }|sn|jE                  d      r|d d t        z   }n;|jE                  d      r|d d t        z   }n|jE                  d
      r|d d t        z   }| j                   j                  |       tG        dtI        |      z        | j                   j                         }||fS )N   1s   , s   ,,    r  s   1,,Fr   Tr   r  rT  r   r   s   

r/  r   r   r   r   r   r   r   r   )%rA  rW  r   r   r  r  r  r   rz   r   rF   r+   r
   r   r   r   r   r   r   r   r   get_visibler   r   r   r   r   r   r   r   r}   r  rl   r   r   r   r   )r    r+   rc  special_labelsr  r  orig_bufferorig_generatorr   
vis_buffervis_generatorr   
body_startoriginal_pos
first_passrd  s                   r#   rp  zBabyl._install_messagee  s   >

!g|,NF ++- )D000"))%0MM%(	)
 JJT"' 9

  !789JJU# ?

  !6!=>?JJW%JJVg-.gu}}445**,K"__;;KPQRN""7+Q"++-

  eW!=>5=	 
 JJ_w67'<0ZZ\
 % > >z5RS T%%g&9&9&;<%..0DJJ$$T\\%%ABu}D	    #&//1DJJ$$T\\%%ABu}D	 
 $))$/

  w!?@	 
 %bkk!:;'2;;/ *+=qB!**,'3'//8 g.2JA~#

  *!5!=!=eW!MN

  7!:;

  *!5!=!=eW!MN

  !5!=!=eW!MN

  7!:W!DE

  !@AWj)w) 56H!M!.."<<>LJ'')==)9u,D]]5)9u,D

  eW!=>5=!%*


((7)BC\2  '')==)9w.D]]5)9w.D]]5)9w.D

  &  6gFGGzz t}r%   r   )r   r   r   	frozensetr  r$   r,   r0   r8   r>   rH   rA   r  rn  rY  r[  r]  rp  r   r%   r#   r   r     sY    ' !B CO
"58,G.<##ir%   r   c                   "    e Zd Z	 ddZd Zd Zy)r
   Nc                    	 t        |t        j                  j                        rG| j	                  t        j                  |             t        |t              r|j                  |        y y t        |t              r%| j	                  t        j                  |             y t        |t              r%| j	                  t        j                  |             y t        |t        j                        r%| j	                  t        j                  |             y t        |d      r%| j	                  t        j                   |             y |*t        j                  j                  j#                  |        y t%        dt'        |      z        )Nr   r   )r   rF   r+   r
   _become_messagecopydeepcopy_explain_tor   rG   r   message_from_stringr   TextIOWrappermessage_from_filerl   message_from_binary_filer$   r   r   r*   s     r#   r$   zMessage.__init__  s   ,gu}}445  w!78'7+##D) ,'  !9!9'!BC%  !:!:7!CD!1!12  !8!8!ABWf%  !?!?!HI_MM!!**406gFGGr%   c                     	 t        |dg       }|j                  D ]#  }||vs|j                  |   | j                  |<   % y )N_type_specific_attributes)getattr__dict__)r    r+   type_specificr   s       r#   r"  zMessage._become_message  sJ    >)DbI$$ 	=D=(&-&6&6t&<d#	=r%   c                 <    	 t        |t              ry t        d      )Nz Cannot convert to specified type)r   r
   r   r*   s     r#   r%  zMessage._explain_to  s    Hgw'>??r%   r   )r   r   r   r$   r"  r%  r   r%   r#   r
   r
     s    :H&=@r%   r
   c                   `    e Zd Z	 g dZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zy)r   )_subdir_info_dateNc                     	 d| _         d| _        t        j                         | _        t        j                  | |       y )Nr   r   )r1  r2  r  r3  r
   r$   r*   s     r#   r$   zMaildirMessage.__init__  s0    3
YY[
w'r%   c                     	 | j                   S r   )r1  rN   s    r#   r   zMaildirMessage.get_subdir  s    $||r%   c                 D    	 |dk(  s|dk(  r|| _         y t        d|z        )Nr   r   z!subdir must be 'new' or 'cur': %s)r1  r|   )r    r   s     r#   r   zMaildirMessage.set_subdir  s*    +U?fo!DL@6IJJr%   c                 Z    	 | j                   j                  d      r| j                   dd  S y)N2,r/  r   )r2  r   rN   s    r#   	get_flagszMaildirMessage.get_flags  s*    8::  &::ab>!r%   c                 J    	 ddj                  t        |            z   | _        y )Nr8  r   )r   rZ  r2  )r    flagss     r#   	set_flagszMaildirMessage.set_flags  s    7BGGF5M22
r%   c                     	 | j                  dj                  t        | j                               t        |      z               y Nr   r<  r   r  r9  r    flags     r#   add_flagzMaildirMessage.add_flag  /    <rwws4>>#34s4y@ABr%   c                     	 | j                         rD| j                  dj                  t        | j                               t        |      z
               y y r>  )r9  r<  r   r  r@  s     r#   remove_flagzMaildirMessage.remove_flag  s>    E>>NN2773t~~'7#83t9#DEF r%   c                     	 | j                   S r   )r3  rN   s    r#   r   zMaildirMessage.get_date!  s    Jzzr%   c                 `    	 	 t        |      | _        y # t        $ r t        d|z        d w xY w)Nzcan't convert to float: %s)floatr3  r|   r   )r    dates     r#   r   zMaildirMessage.set_date%  s:    G	KtDJ 	K84?@dJ	Ks    -c                     	 | j                   S r   )r2  rN   s    r#   r   zMaildirMessage.get_info,  s    3zzr%   c                 b    	 t        |t              r|| _        y t        dt	        |      z        )Nzinfo must be a string: %s)r   r   r2  r   r   )r    infos     r#   r   zMaildirMessage.set_info0  s+    .dC DJ7$t*DEEr%   c                    	 t        |t              r^|j                  | j                                |j	                  | j                                |j                  | j                                y t        |t              rt        | j                               }d|v r|j                  d       | j                         dk(  r|j                  d       d|v r|j                  d       d|v r|j                  d       d|v r|j                  d       |j                  d	t        j                  | j                                      y t        |t              rZt        | j                               }d|vr|j                  d
       d|v r|j                  d       d|v r|j                  d       y y t        |t               rot        | j                               }d|vr|j#                  d
       d|v r|j#                  d       d|v r|j#                  d       d|v r|j#                  d       y y t        |t$              ry t'        dt)        |      z        )NSRr   OTDFAMAILER-DAEMONr  repliedflaggedr  r  r#  r  $Cannot convert to specified type: %s)r   r   r<  r9  r   r   r   r   r  r  rB  rx  r  r  r   r  r   	add_labelr
   r   r   )r    r+   r;  s      r#   r%  zMaildirMessage._explain_to7  s   Ig~.dnn./t01T]]_-!12()Ee|  % E)  %e|  %e|  %e|  %_dkk$--/.JK+()E%$$X.e|$$Y/e|$$Y/ .()E%!!(+e|!!),e|!!*-e|!!+. )B M* + +r%   r   )r   r   r   r+  r$   r   r   r9  r<  rB  rE  r   r   r   r   r%  r   r%   r#   r   r     sL    3 =(K3CG
KF)+r%   r   c                   H    e Zd Z	 dgZddZd ZddZd Zd Zd Z	d	 Z
d
 Zy)r  _fromNc                    	 | j                  dd       t        |t        j                  j                        r7|j                         }|%|j                  d      r| j                  |dd         t        j                  | |       y )NrU  TzFrom r   )rx  r   rF   r+   r
   r  r   r$   )r    r+   r}  s      r#   r$   z_mboxMMDFMessage.__init__h  sj    5ot,gu}}445++-H#(;(;G(Dhqrl+w'r%   c                     	 | j                   S r   )r[  rN   s    r#   r  z_mboxMMDFMessage.get_fromq  s    .zzr%   c                 ~    	 |3|du rt        j                         }|dt        j                  |      z   z  }|| _        y )NTr  )r  r  r  r[  )r    r~  time_s      r#   rx  z_mboxMMDFMessage.set_fromu  s<    L}S4<<...E
r%   c                 N    	 | j                  dd      | j                  dd      z   S )NStatusr   X-Status)r<   rN   s    r#   r9  z_mboxMMDFMessage.get_flags}  s&    8xx"%R(@@@r%   c                    	 t        |      }d\  }}dD ]  }||v s||z  }|j                  |        dD ]  }||v s||z  }|j                  |        |dj                  t        |            z  }	 | j	                  d|       	 | j	                  d|       y # t
        $ r | j                  d|       Y 1w xY w# t
        $ r | j                  d|       Y y w xY w)N)r   r   )rO  rP  )rR  rS  rT  r   ra  rb  )r  r0   r   rZ  replace_headerr4   
add_header)r    r;  status_flagsxstatus_flagsrA  s        r#   r<  z_mboxMMDFMessage.set_flags  s    7E
&,#m 	#Du}$T"	# $ 	#Du}%T"	# 	//	4,7	7
M:  	4OOHl3	4  	7OOJ6	7s$   4B B; B87B8;CCc                     	 | j                  dj                  t        | j                               t        |      z               y r>  r?  r@  s     r#   rB  z_mboxMMDFMessage.add_flag  rC  r%   c                     	 d| v sd| v rD| j                  dj                  t        | j                               t        |      z
               y y )Nra  rb  r   r?  r@  s     r#   rE  z_mboxMMDFMessage.remove_flag  sC    EtzT1NN2773t~~'7#83t9#DEF  2r%   c                    	 t        |t              rt        | j                               }d|v r|j	                  d       d|v r|j                  d       d|v r|j                  d       d|v r|j                  d       d|v r|j                  d       |d	= |d
= dj                  | j                         j                         dd        }	 |j                  t        j                  t        j                  |d                   y t        |t               r?|j#                  | j                                |j%                  | j                                y t        |t&              r_t        | j                               }d|vr|j)                  d       d|v r|j)                  d       d|v r|j)                  d       |d	= |d
= y t        |t*              r_t        | j                               }d|vr|j-                  d       d|v r|j-                  d       d|v r|j-                  d       |d	= |d
= y t        |t.              ry t1        dt3        |      z        # t        t        f$ r Y y w xY w)NrP  r   rS  rT  rO  rN  rR  rQ  statuszx-statusr  z%a %b %d %H:%M:%S %Yr  rV  rW  r  r  rX  )r   r   r  r9  r   rB  r   r  r   r   calendartimegmr  strptimer|   OverflowErrorr  r<  rx  r   r  r   rY  r
   r   r   )r    r+   r;  
maybe_dates       r#   r%  z_mboxMMDFMessage._explain_to  s<   Og~.()Ee|""5)e|  %e|  %e|  %e|  %!
#$--/"7"7"9"#">?J  z6L2N "O P !12dnn./T]]_-+()E%$$X.e|$$Y/e|$$Y/!
#.()E%!!(+e|!!),e|!!*-!
#)B M* + +9 . s   8I I+*I+r   )r   r   r   r+  r$   r  rx  r9  r<  rB  rE  r%  r   r%   r#   r  r  c  s8    9!(	(A7,CG
1+r%   r  c                       e Zd Zy)r   Nr   r   r   r   r%   r#   r   r         0r%   r   c                   :    e Zd Z	 dgZd	dZd Zd Zd Zd Zd Z	y)
r   
_sequencesNc                 @    	 g | _         t        j                  | |       y r   )rv  r
   r$   r*   s     r#   r$   zMHMessage.__init__  s    /w'r%   c                 "    	 | j                   d d  S r   )rv  rN   s    r#   r  zMHMessage.get_sequences  s    Bq!!r%   c                 &    	 t        |      | _        y r   )rQ   rv  )r    r  s     r#   r  zMHMessage.set_sequences  s    Ay/r%   c                     	 t        |t              r+|| j                  vr| j                  j                  |       y y t	        dt        |      z        )Nzsequence type must be str: %s)r   r   rv  r  r   r   r    r  s     r#   r  zMHMessage.add_sequence  sI    Fh$t.&&x0 / ;d8nLMMr%   c                 \    	 	 | j                   j                  |       y # t        $ r Y y w xY wr   )rv  r0   r|   r{  s     r#   remove_sequencezMHMessage.remove_sequence  s.    O	OO""8, 		    	++c                 ~   	 t        |t              r}t        | j                               }d|v r|j	                  d       n"|j	                  d       |j                  d       d|v r|j                  d       d|v r|j                  d       y y t        |t              rlt        | j                               }d|vr|j                  d       n|j                  d	       d|v r|j                  d       d|v r|j                  d
       y y t        |t              r'| j                         D ]  }|j                  |        y t        |t              rEt        | j                               }d|v r|j                  d       d|v r|j                  d       y y t        |t              ry t        dt        |      z        )Nr  r   rN  rW  rS  rV  rO  ROrP  rT  r  rX  )r   r   r  r  r   rB  r  r   r  r   rY  r
   r   r   )r    r+   r  r  s       r#   r%  zMHMessage._explain_to  s   Dg~.D..01I9$""5)""5)  %I%  %I%  % &!12D..01Iy(  &  %I%  %I%  % &+ ..0 /$$X./.D..01I9$!!(+I%!!*- &)B M* + +r%   r   )
r   r   r   r+  r$   r  r  r  r}  r%  r   r%   r#   r   r     s,    .!-(
"*N$+r%   r   c                   N    e Zd Z	 ddgZddZd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zy)r   r  _visibleNc                 ^    	 g | _         t               | _        t        j                  | |       y r   )r  r
   r  r$   r*   s     r#   r$   zBabylMessage.__init__%  s%    1	w'r%   c                 "    	 | j                   d d  S r   )r  rN   s    r#   r  zBabylMessage.get_labels+  s    5||Ar%   c                 &    	 t        |      | _        y r   )rQ   r  )r    r  s     r#   r  zBabylMessage.set_labels/  s    4F|r%   c                     	 t        |t              r+|| j                  vr| j                  j                  |       y y t	        dt        |      z        )Nzlabel must be a string: %s)r   r   r  r  r   r   r    r  s     r#   rY  zBabylMessage.add_label3  sI    9eS!DLL(##E* ) 84;FGGr%   c                 \    	 	 | j                   j                  |       y # t        $ r Y y w xY wr   )r  r0   r|   r  s     r#   remove_labelzBabylMessage.remove_label;  s.    B	LL& 		r~  c                 .    	 t        | j                        S r   r
   r  rN   s    r#   r  zBabylMessage.get_visibleB  s    At}}%%r%   c                 &    	 t        |      | _        y r   r  )r    visibles     r#   r  zBabylMessage.set_visibleF  s    @(r%   c                     	 | j                   j                         D ]3  }|| v r | j                   j                  || |          '| j                   |= 5 dD ](  }|| v s|| j                   vs| |   | j                   |<   * y )N)DateFromzReply-ToToCCSubject)r  rR   rd  )r    headers     r#   update_visiblezBabylMessage.update_visibleJ  s    Gmm((* 	*F~,,VT&\BMM&)		*
 J 	5F~&"=(,Vf%	5r%   c                    	 t        |t              rt        | j                               }d|v r|j	                  d       n"|j	                  d       |j                  d       d|v sd|v r|j                  d       d|v r|j                  d       d	|v r|j                  d
       y y t        |t              rlt        | j                               }d|vr|j                  d       n|j                  d       d	|v r|j                  d       d|v r|j                  d       y y t        |t              rEt        | j                               }d|v r|j                  d       d|v r|j                  d       y y t        |t              rF|j                  | j                                | j                         D ]  }|j                  |        y t        |t              ry t        dt        |      z        )Nr  r   rN  r  r  r#  r  rO  r  rQ  r  rP  rR  rT  rV  rX  )r   r   r  r  r   rB  r  r   r  r   r  r  rY  r
   r   r   )r    r+   r  r  s       r#   r%  zBabylMessage._explain_toU  s   Gg~.*+F6!""5)""5)  %f$F(:  %V#  %F"  % #!12*+Fv%  &  %F"  %V#  % $+*+F6!$$X.V#$$Y/ $. 0 0 23* )!!%())B M* + +r%   r   )r   r   r   r+  r$   r  r  rY  r  r  r  r  r%  r   r%   r#   r   r      s>    1!*J 7($H&)	5'+r%   r   c                       e Zd Zy)r   Nrs  r   r%   r#   r   r     rt  r%   r   c                       e Zd Z	 ddZddZddZddZddZd Zd Z	dd	Z
d
 Zd Zd Zd Zd Zd Zd Zd Zed        Z ee      Zy)r   Nc                 R    	 || _         ||j                         | _        y || _        y r   )rA  rW  _pos)r    r   poss      r#   r$   z_ProxyFile.__init__  s%    &
;DIDIr%   c                 P    	 | j                  || j                  j                        S r   )_readrA  r   r    sizes     r#   r   z_ProxyFile.read  s    zz$

00r%   c                 P    	 | j                  || j                  j                        S r   )r  rA  read1r  s     r#   r  z_ProxyFile.read1  s     zz$

 0 011r%   c                 P    	 | j                  || j                  j                        S r   )r  rA  r   r  s     r#   r   z_ProxyFile.readline  s     zz$

 3 344r%   c                 n    	 g }| D ],  }|j                  |       ||t        |      z  }|dk  s+ |S  |S )Nr   )r  r   )r    sizehintrg   r   s       r#   	readlinesz_ProxyFile.readlines  sO    " 	DMM$#CI%q=	 r%   c              #   b   K   	 | j                         x}r| | j                         x}ry y wr   )r   )r    r   s     r#   rY   z_ProxyFile.__iter__  s2     !mmo%d%J mmo%d%s   *//c                     	 | j                   S r   )r  rN   s    r#   rW  z_ProxyFile.tell  s    "yyr%   c                     	 |dk(  r%| j                   j                  | j                         | j                   j                  ||       | j                   j                         | _        y )Nr   rA  r   r  rW  r    offsetwhences      r#   r   z_ProxyFile.seek  sD    Q;JJOODII&

'JJOO%	r%   c                     	 t        | d      r4	 t        | j                  d      r| j                  j                          | `y y # | `w xY w)NrA  rx   )rl   rA  rx   rN   s    r#   rx   z_ProxyFile.close  sE    4!4::w/JJ$$&J "
 Js   0A Ac                     	 |d}| j                   j                  | j                          ||      }| j                   j                         | _        |S )Nr   r  )r    r  read_methodrg   s       r#   r  z_ProxyFile._read  sD    0<D

		"T"JJOO%	r%   c                     	 | S r   r   rN   s    r#   	__enter__z_ProxyFile.__enter__  s
    2r%   c                 $    | j                          y r   )rx   )r    excs     r#   __exit__z_ProxyFile.__exit__  s    

r%   c                 6    | j                   j                         S r   )rA  readablerN   s    r#   r  z_ProxyFile.readable      zz""$$r%   c                 6    | j                   j                         S r   )rA  writablerN   s    r#   r  z_ProxyFile.writable  r  r%   c                 6    | j                   j                         S r   )rA  seekablerN   s    r#   r  z_ProxyFile.seekable  r  r%   c                 6    | j                   j                         S r   )rA  rr   rN   s    r#   rr   z_ProxyFile.flush  s    zz!!r%   c                 v    t        | d      syt        | j                  d      sy| j                  j                  S )NrA  Tr  F)rl   rA  r  rN   s    r#   r  z_ProxyFile.closed  s0    tW%tzz8,zz   r%   r   r   )r   r   r   r$   r   r  r   r  rY   rW  r   rx   r  r  r  r  r  r  rr   propertyr  r   r   r   r   r%   r#   r   r     sv    (125	
&%%%" ! ! $L1r%   r   c                   0    e Zd Z	 ddZd ZddZd Zd Zy)	r  Nc                 P    	 t         j                  | ||       || _        || _        y r   )r   r$   _start_stop)r    r   rc  rd  s       r#   r$   z_PartialFile.__init__  s%    (D!U+
r%   c                 H    	 t         j                  |       | j                  z
  S r   )r   rW  r  rN   s    r#   rW  z_PartialFile.tell  s    8t$t{{22r%   c                     	 |dk(  r| j                   | _        d}n|dk(  r| j                  | _        d}t        j	                  | ||       y )Nr   r   r/  )r  r  r  r   r   r  s      r#   r   z_PartialFile.seek  sC    FQ;DIFq[

DIFff-r%   c                     	 | j                   | j                  z
  }|dk  ry|
|dk  s||kD  r|}t        j                  | ||      S )Nr   r%   )r  r  r   r  )r    r  r  	remainings       r#   r  z_PartialFile._read  sM    IJJ*	><4!8ti'7DdK88r%   c                 "    t        | d      r| `y y )NrA  )rl   rA  rN   s    r#   rx   z_PartialFile.close  s     4!
 "r%   )NNr  )r   r   r   r$   rW  r   r  rx   r   r%   r#   r  r    s    03.9r%   r  c                    	 d}	 t         r6	 t        j                  | t         j                  t         j                  z         |r{	 t        | j                  dz         }|j                          	 	 t        j                  |j                  | j                  dz          d}t        j                  |j                         y y y # t        $ rY}|j
                  t
        j                  t
        j                  t
        j                  fv rt        d| j                  z         d }~ww xY w# t        $ r7}|j
                  t
        j                  t
        j                  fv rY d }~y  d }~ww xY w# t         t"        f$ r2 t        j$                  |j                  | j                  dz          d}Y w xY w# t&        $ r8 t        j(                  |j                         t        d| j                  z        w xY w#  t         r$t        j                  | t         j*                         |r"t        j(                  | j                  dz           xY w)NFzlockf: lock unavailable: %s.lockTzdot lock unavailable: %s)fcntllockfLOCK_EXLOCK_NBr   r   EAGAINr?  r@  r   r   rX  rx   r   r   r  r   r   r   r,  r0   LOCK_UN)r   rU  dotlock_doner   pre_locks        r#   rO  rO    s   2L%Au}}u}}<= ,QVVg-=> 1-GGHMM166G+;<#'L
 IIhmm, !   77u||U\\5;;GG,-J-.VV.4 5 5   77u||U[[99	 '8 (IIhmmQVVg-=>#'L(
 # 1		(--(()C)**0 1 11KK5==)IIaffw&'s   G/ 5B? G/ (D$ ./E' F+ ?	D!ADD!!G/ $	E$-,EG/ EE$$G/ '>F(%F+ 'F((F+ +AG,,G/ /AI c                     	 t         r$t        j                  | t         j                         t        j                  j                  | j                  dz         r#t        j                  | j                  dz          y y )Nr  )r  r  r  r   r   r   r   r0   r   s    r#   rR  rR  6  sM    4Au}}%	ww~~affw&'
		!&&7"# (r%   c                 
   	 t        j                  | t         j                  t         j                  z  t         j                  z  d      }	 t        | d      t        j
                  |       S # t        j
                  |       w xY w)Nr  r=  )r   r   r  r  O_RDWRrx   )r   fds     r#   r+  r+  =  sS    M	rzzBII-		95	ABD% 
s   
A+ +Bc           
          	 t        | dt        t        j                               dt        j                         dt        j                               S )Nr  )r+  r'  r  r%  r&  r   r(  )r   s    r#   rX  rX  E  s;    LdC		4D.4.@.@.B.0iik; < <r%   c                     	 | j                          t        t        d      r$t        j                  | j	                                y y )Nfsync)rr   rl   r   r  filenor  s    r#   rV  rV  K  s/    :GGIr7
 r%   c                 <    	 t        |        | j                          y r   )rV  rx   r  s    r#   r   r   Q  s    DNGGIr%   c                       e Zd Zy)r   Nrs  r   r%   r#   r   r   W  s    ,r%   r   c                       e Zd Zy)r   Nrs  r   r%   r#   r   r   Z  s    Dr%   r   c                       e Zd Zy)r   Nrs  r   r%   r#   r   r   ]  s    Hr%   r   c                       e Zd Zy)r   Nrs  r   r%   r#   r   r   `      3r%   r   c                       e Zd Zy)r   Nrs  r   r%   r#   r   r   c  r  r%   r   )T)1r   r  rm  r%  r   r#  r   rF   email.messageemail.generatorr   r?   typesr   r  ImportError__all__r   rz   r   r   r;  ru  r   r	   r   r   r+   r
   r   r  r   r   r   r   r   r  rO  rR  r+  rX  rV  r   	Exceptionr   r   r   r   r   r   r%   r#   <module>r     s   J 
          	  A
 **

G
$f2 f2Rsg sl	 F?" ?D1.9 1.h*.9 *.Zn* n*b	v vr"@emm## "@Jj+W j+Zn+w n+b1" 1E+ E+P\+7 \+~1" 1_2 _2D$: $N(T$<-I -E EIE I4 44% 4WB  Es   E4 4E?>E?