
    =Og3                    t   	 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n# e$ r dZY nw xY wg dZe 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j        j                  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$d8d(Z%d) Z&d* Z'd+ Z(d, Z)d- Z* G d. d/e+          Z, G d0 d1e,          Z- G d2 d3e,          Z. G d4 d5e,          Z/ G d6 d7e,          Z0dS )9    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%dS )&r   NTc                     	 t           j                            t           j                            |                    | _        || _        d S N)ospathabspath
expanduser_path_factoryselfr   factorycreates        /usr/lib64/python3.11/mailbox.py__init__zMailbox.__init__%   s5    ,W__RW%7%7%=%=>>
    c                 "    	 t          d          Nz&Method must be implemented by subclassNotImplementedErrorr    messages     r#   addzMailbox.add*   s    2!"JKKKr%   c                 "    	 t          d          r'   r(   r    keys     r#   removezMailbox.remove.   s    K!"JKKKr%   c                 0    |                      |           d S r   )r0   r.   s     r#   __delitem__zMailbox.__delitem__2   s    Cr%   c                 V    	 	 |                      |           d S # t          $ r Y d S w xY wr   )r0   KeyErrorr.   s     r#   discardzMailbox.discard5   sD    5	KK 	 	 	DD	s    
((c                 "    	 t          d          r'   r(   r    r/   r+   s      r#   __setitem__zMailbox.__setitem__<   s    L!"JKKKr%   c                 T    	 	 |                      |          S # t          $ r |cY S w xY wr   )__getitem__r4   )r    r/   defaults      r#   getzMailbox.get@   sB    G	##C((( 	 	 	NNN	s    ''c                     	 | j         s|                     |          S t          j        |                     |                    5 }|                      |          cd d d            S # 1 swxY w Y   d S r   )r   get_message
contextlibclosingget_file)r    r/   files      r#   r:   zMailbox.__getitem__G   s    K} 	+##C(((#DMM#$6$677 +4}}T**+ + + + + + + + + + + + + + + + + +s   A''A+.A+c                 "    	 t          d          r'   r(   r.   s     r#   r>   zMailbox.get_messageO   s    B!"JKKKr%   c                 v    	 t          j        |                     |                                                    S r   emailmessage_from_bytes	get_bytes	as_stringr.   s     r#   
get_stringzMailbox.get_stringS   s2    	* 's(;(;<<FFHHHr%   c                 "    	 t          d          r'   r(   r.   s     r#   rH   zMailbox.get_bytesZ   s    F!"JKKKr%   c                 "    	 t          d          r'   r(   r.   s     r#   rA   zMailbox.get_file^   s    D!"JKKKr%   c                 "    	 t          d          r'   r(   r    s    r#   iterkeyszMailbox.iterkeysb   s    +!"JKKKr%   c                 F    	 t          |                                           S r   )listrO   rN   s    r#   keyszMailbox.keysf   s    $DMMOO$$$r%   c              #   v   K   	 |                                  D ] }	 | |         }n# t          $ r Y w xY w|V  !d S r   rO   r4   r    r/   values      r#   
itervalueszMailbox.itervaluesj   se      3==?? 	 	CS	   KKKK	 	   $
11c                 *    |                                  S r   )rW   rN   s    r#   __iter__zMailbox.__iter__s   s       r%   c                 F    	 t          |                                           S r   )rQ   rW   rN   s    r#   valueszMailbox.valuesv   s    :DOO%%&&&r%   c              #   z   K   	 |                                  D ]"}	 | |         }n# t          $ r Y w xY w||fV  #d S r   rT   rU   s      r#   	iteritemszMailbox.iteritemsz   sm      <==?? 	 	CS	   ,	 	rX   c                 F    	 t          |                                           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KKr%   c                 "    	 t          d          r'   r(   rN   s    r#   __len__zMailbox.__len__   s    8!"JKKKr%   c                 `    	 |                                  D ]}|                     |           d S r   )rR   r5   r.   s     r#   clearzMailbox.clear   s;    "99;; 	 	CLL	 	r%   c                 j    	 	 | |         }n# t           $ r |cY S w xY w|                     |           |S r   )r4   r5   )r    r/   r;   results       r#   popzMailbox.pop   sP    A	#YFF 	 	 	NNN	Ss    c                     	 |                                  D ]}||                     |          fc S t          d          )NzNo messages in mailbox)rO   ri   r4   r.   s     r#   popitemzMailbox.popitem   sF    D==?? 	5 	5C#''''3444r%   c                    	 t          |d          r|                                }n't          |d          r|                                }n|}d}|D ]\  }}	 || |<   # t          $ r d}Y w xY w|rt          d          d S )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$$ 	]]__FFS'"" 	YY[[FFF" 	 	LC#S		    	53444	5 	5s   AA-,A-c                 "    	 t          d          r'   r(   rN   s    r#   flushzMailbox.flush   s    4!"JKKKr%   c                 "    	 t          d          r'   r(   rN   s    r#   lockzMailbox.lock   s    !"JKKKr%   c                 "    	 t          d          r'   r(   rN   s    r#   unlockzMailbox.unlock   s    1!"JKKKr%   c                 "    	 t          d          r'   r(   rN   s    r#   closezMailbox.close   s    *!"JKKKr%   c                 h    	 |                     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   sK    	2>>'*** 	2 	2 	2 1 2 2 2	2s    1Fc                    	 t          |t          j        j                  rt	          j                    }t          j                            ||d          }|                    |           |	                    d           |
                                }|                    dt                    }|                    |           | j        r6|                    t                    s|                    t                     d S d S d S t          |t           t"          t          j        f          rt          |t          j                  r/t'          j        dt*          d           |                                }t          |t                     r|                     |          }|r|                    dd          }|                    dt                    }|                    |           | j        r6|                    t                    s|                    t                     d S d S d S t1          |d          r-t1          |d          r"t'          j        d	t*          d           |j        }d }	 |                                }|                    d          r|d d         dz   }n"|                    d          r|d d         dz   }|snW|r"|                    d          rd|dd          z   }|                    dt                    }|                    |           |}| j        r8|r8|                    t                    s |                    t                     d S d S d S d S 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 insteadT   
      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~   rm   r   readline
startswith	TypeErrortype)	r    r+   targetmangle_from_r   gendatalastlinelines	            r#   _dump_messagezMailbox._dump_message   s   3gu}455 1	HZ\\F/00qIICKK   KKNNN;;==D<<w//DLL# &DMM',B,B &W%%%%%& & & & #ubk!:;; &	H'2;// - *+=qB B B!**,,'3'' 9//88 C!//*kBBooeW55GLL!!!# &G,<,<W,E,E &W%%%%%& & & & Wf%% 	Hw)) ) 56H!M M M!.H ''))==)) -9u,DD]]5)) -9u,D  0DOOH$=$= 0$tABBx/D||E733T"""  # & &9J9J79S9S &W%%%%%& & & & & & 6gFGGGr%   NTr   F)&__name__
__module____qualname__r$   r,   r0   r2   r5   r8   r<   r:   r>   rJ   rH   rA   rO   rR   rW   rZ   r\   r^   r`   rb   rd   rf   ri   rk   rq   rs   ru   rw   ry   r~   r   r   classmethodr   __class_getitem__ r%   r#   r   r   "   sE       4       
L L LL L L    L L L   + + +L L LI I IL L LL L LL L L% % %  ! ! !' ' '  & & &L L LL L L  
   5 5 55 5 5 5"L L LL L LL L LL L L2 2 2 O4H 4H 4H 4Hl $L1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dS )r   :NTc                 t   	 t                               | |||           t          j                            | j        d          t          j                            | j        d          t          j                            | j        d          d| _        t          j                            | j                  sb|rLt          j        | j        d           | j        	                                D ]}t          j        |d           nt          | j                  i | _        ddd| _        d| _        d| _        d S )	Ntmpnewcur)r   r   r     r   )r   r   g?)r   r$   r   r   joinr   _pathsexistsmkdirr\   r   _toc_toc_mtimes
_last_read_skewfactor)r    dirnamer!   r"   r   s        r#   r$   zMaildir.__init__  s   ,w8887<<
E227<<
E227<<
E22 
 w~~dj)) 	5 5U+++ K..00 * *DHT5))))* )444	#$Q//r%   c                    	 |                                  }	 |                     ||           n<# t          $ r/ |                                 t	          j        |j                    w xY wt          |           t          |t                    r>|
                                }| j        |                                z   }|| j        k    rd}nd}d}t          j                            |j                                      | j                  d         }t          j                            | j        |||z             }t          |t                    rPt	          j        |j        t          j                            |j                  |                                f           	 	 t	          j        |j        |           t	          j        |j                   n1# t,          t.          f$ r t	          j        |j        |           Y nw xY wnS# t2          $ rF}t	          j        |j                   |j        t4          j        k    rt9          d|z             d }~ww xY w|S )N r   r   z$Name clash with existing message: %s)_create_tmpr   BaseExceptionry   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$  sV   2##%%	w1111 	 	 	NNIhm$$$	 	Hg~.. 	''))FZ'"2"2"4"44F##FFw..44TZ@@Cw||DJv>>g~.. 	LHX]g&&x}55w7G7G7I7IJL L L
	)t,,, 	(-(((( #O4 / / /	(-...../  	 	 	Ihm$$$w%,&&()O+/*0 1 1 1 	 s@   . 9A'"G <H +HH HH 
IAIIc                     	 t          j        t           j                            | j        |                     |                               d S r   )r   r0   r   r   r   _lookupr.   s     r#   r0   zMaildir.removeN  s9    K
	"',,tz4<<+<+<==>>>>>r%   c                 d    	 	 |                      |           d S # t          t          f$ r Y d S w xY wr   )r0   r4   FileNotFoundErrorr.   s     r#   r5   zMaildir.discardR  sJ    5	KK+, 	 	 	DD	s    //c                    	 |                      |          }|                     |          }|                      |          }t          |t                    r|}n|}t          j                            |          }| j        |v r)| j        |                    | j                  d         z   }nd}| 	                    |           t          j        
                    | j        |          }	t          j        
                    | j        |||z             }
t          |t                    rFt	          j        |	t          j                            |	          |                                f           t	          j        |	|
           d S )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  sV   Lll3''88G$$||H--g~.. 	++  +!122:)))Z"2"8"8"D"DR"HHFFFS7<<
L997<<
FC&LAAg~.. 	GHXg&&x00'2B2B2D2DEG G G
 		(H%%%%%r%   c                    	 |                      |          }t          t          j                            | j        |          d          5 }| j        r|                     |          }nt          |          }d d d            n# 1 swxY w Y   t          j                            |          \  }}|	                    |           | j
        |v r3|                    |                    | j
                  d                    |                    t          j                            t          j                            | j        |                               |S )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  sJ   B,,s##"',,tz733T:: 	(a} (mmA&&$Q''		( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(
 w}}W--v:LLDJ//3444RW%%bgll4:w&G&GHHIII
s   
-BB
Bc                    	 t          t          j                            | j        |                     |                    d          5 }|                                                    t          d          cd d d            S # 1 swxY w Y   d S )Nr   r   )	r   r   r   r   r   r   r   r   r   r    r/   r   s      r#   rH   zMaildir.get_bytes  s    @"',,tz4<<+<+<==tDD 	46688##GU33	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   -BB	Bc                     	 t          t          j                            | j        |                     |                    d          }t          |          S )Nr   )r   r   r   r   r   r   
_ProxyFiler   s      r#   rA   zMaildir.get_file  s>    Ddj$,,s*;*;<<dCC!}}r%   c              #      K   	 |                                   | j        D ]-}	 |                     |           n# t          $ r Y %w xY w|V  .d S r   )_refreshr   r   r4   r.   s     r#   rO   zMaildir.iterkeys  sv      +9 	 	CS!!!!   IIII	 	s   8
AAc                 >    	 |                                   || j        v S r   )r   r   r.   s     r#   rb   zMaildir.__contains__  s    Gdir%   c                 T    	 |                                   t          | j                  S r   )r   lenr   rN   s    r#   rd   zMaildir.__len__  s     849~~r%   c                     	 d S r   r   rN   s    r#   rs   zMaildir.flush  s    0 	r%   c                     	 d S r   r   rN   s    r#   ru   zMaildir.lock  s
    r%   c                     	 d S r   r   rN   s    r#   rw   zMaildir.unlock  s
    1r%   c                     	 d S r   r   rN   s    r#   ry   zMaildir.close  s
    *r%   c                 @   	 g }t          j        | j                  D ]}t          |          dk    rk|d         dk    r_t           j                            t           j                            | j        |                    r|                    |dd                     |S )N   r   .)r   listdirr   r   r   isdirr   appendr    rh   entrys      r#   list_folderszMaildir.list_folders  s    ,Z
++ 	) 	)E5zzA~~%(c//w}}RW\\$*e<<== #2eABBi(((r%   c                 ~    	 t          t          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  s<    =rw||DJf==#}#% % % 	%r%   c                    	 t           j                            | j        d|z             }t	          || j                  }t           j                            |d          }t           j                            |          s?t          j        t          j        |t           j	        t           j
        z  d                     |S )Nr  r!   maildirfolder  )r   r   r   r   r   r   r   ry   r   O_CREATO_WRONLY)r    r  r   rh   maildirfolder_paths        r#   
add_folderzMaildir.add_folder  s    Lw||DJf55t}555W\\$@@w~~011 	HRW/bk1I    r%   c                    	 t           j                            | j        d|z             }t          j        t           j                            |d                    t          j        t           j                            |d                    z   D ]3}t          |          dk     s|d         dk    rt          d|z            4t          j        |          D ]f}|dk    r^|dk    rX|dk    rRt           j                            t           j                            ||                    rt          d|d	|          gt          j        |d
          D ]t\  }}}|D ]4}t          j	        t           j                            ||                     5|D ]4}t          j
        t           j                            ||                     5ut          j
        |           d S )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  s   ;w||DJf55ZT5 9 9::ZT5 9 9::; 	O 	OE5zzA~~qS#$Dv$MNNN "1Z%% 	5 	5E~~%5..Ue^^w}}RW\\$6677 6D#m%+VVUU%4 5 5 5!#u!=!=!= 	4 	4D$ 5 5	"',,tU334444 4 4dE2233334
r%   c                 b   	 t          j                     }t          j        t          j                            | j        d                    D ]b}t          j                            | j        d|          }|t          j                            |          z
  dk    rt          j        |           cd S )Nr   i@ )timer   r  r   r   r   r   r0   )r    nowr  r   s       r#   cleanzMaildir.clean  s    (ikkZTZ ? ?@@ 	  	 E7<<
E599DRW%%d+++f44	$	  	 r%   r  c           	      x   	 t          j                     }t          j                    }d|v r|                    dd          }d|v r|                    dd          }t	          |          dt	          |dz  dz            dt          j                    d	t          j        d
|	}t
          j	        
                    | j        d|          }	 t          j        |           nG# t          $ r: t          xj        dz  c_        	 t          |          cY S # t          $ r Y nw xY wY nw xY wt!          d|z            )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  sT   Kikk%''(??''W55H(??''W55H$'HHHHc#'C-.@.@.@.@")++++$+NNNHH>w||DJt44	GDMMMM  	 	 	NNaNN(....."   	 !!I!%"& ' ' 	's6   C# #D'DD'
D!D' D!!D'&D'c                    	 t          j                     | j        z
  d| j        z   k    rWd}| j        D ]I}t          j                            | j        |                   }|| j        |         k    rd}|| j        |<   J|sd S i | _        | j        D ]}| j        |         }t	          j	        |          D ]}t          j        
                    ||          }t          j                            |          rB|                    | j                  d         }t          j        
                    ||          | j        |<   t          j                     | _        d S )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  sH   / 9;;(1t/?+???G* 1 1((V)<==4+F333"G+0 (( 	& 	> 	>F;v&DD)) > >GLLu--7==## {{4:..q1"$',,vu"="=	$> )++r%   c                 b   	 	 t           j                            t           j                            | j        | j        |                             r| j        |         S n# t          $ r Y nw xY w|                                  	 | j        |         S # 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	w~~bgll4:ty~FFGG &y~%& 	 	 	D		F9S>! 	F 	F 	F4s:;;E	Fs   AA 
A+*A+B B.c                     	 t          | d          s|                                 | _        	 	 | t          | j                           S # t          $ r Y d S t
          $ r Y 4w xY w)N_onetime_keys)rm   rO   r8  nextStopIterationr4   rN   s    r#   r9  zMaildir.next4  s    >t_-- 	1!%D	D!34455    tt   s   A 
A 	A A r   )r   r   r   r   r$   r,   r0   r5   r8   r>   rH   rA   rO   rb   rd   rs   ru   rw   ry   r  r  r  r  r!  r*  r   r   r   r9  r   r%   r#   r   r     s       (E   (( ( (T? ? ?  & & &6  4 4 4
  
       
  
          % % %    &      F' ' '0"& "& "&HF F F
 
 
 
 
r%   r   c                   t    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dS )_singlefileMailboxNTc                    	 t                               | |||           	 t          | j        d          }n# t          $ r}|j        t
          j        k    r,|rt          | j        d          }nJt          | j                  |j        t
          j        t
          j	        fv rt          | j        d          }n Y d }~nd }~ww xY w|| _
        d | _        d| _        d| _        d| _        d| _        d | _        d S )Nrb+zwb+r   r   F)r   r$   r   r   r   r   ENOENTr   EACCESEROFS_filer   	_next_key_pending_pending_sync_locked_file_length)r    r   r!   r"   r   r   s         r#   r$   z_singlefileMailbox.__init__D  s    /tWf555	TZ''AA 		 		 		w%,&& 9TZ//AA,TZ888U\5;777T**		 
	" s   6 
C A7B<<Cc                     	 |                                   |                     |          | j        | j        <   | xj        dz  c_        d| _        | j        dz
  S )Nr  T)r   _append_messager   rC  rE  r*   s     r#   r,   z_singlefileMailbox.add[  sU    2$($8$8$A$A	$.!! "~!!r%   c                 P    	 |                      |           | j        |= d| _        d S r   )r   r   rD  r.   s     r#   r0   z_singlefileMailbox.removee  s+    KSIcNr%   c                 z    	 |                      |           |                     |          | j        |<   d| _        d S r   )r   rI  r   rD  r7   s      r#   r8   z_singlefileMailbox.__setitem__k  s;    LS--g66	#r%   c              #   r   K   	 |                                   | j                                        E d {V  d S r   )r   r   rR   rN   s    r#   rO   z_singlefileMailbox.iterkeysq  s@      +9>>###########r%   c                 >    	 |                                   || j        v S r   )r   r   r.   s     r#   rb   z_singlefileMailbox.__contains__v  s    Gdir%   c                 T    	 |                                   t          | j                  S r   )r   r   r   rN   s    r#   rd   z_singlefileMailbox.__len__{  s     849~~r%   c                 P    	 | j         st          | j                   d| _         d S d S r   )rF  
_lock_filerB  rN   s    r#   ru   z_singlefileMailbox.lock  s4    | 	 tz"""DLLL	  	 r%   c                 P    	 | j         rt          | j                   d| _         d S d S NF)rF  _unlock_filerB  rN   s    r#   rw   z_singlefileMailbox.unlock  s4    1< 	!$$$ DLLL	! 	!r%   c           	      :   	 | j         s$| j        rt          | j                   d| _        d S | j                            dd           | j                                        }|| j        k    rt          d| j        |fz            t          | j	                  }	 i }| 
                    |           t          | j                                                  D ]}| j        |         \  }}| j                            |           |                     |           |                                }	 | j                            t!          d|| j                                        z
                      }|sn|                    |           [||                                f||<   |                     |           |                                | _        n3#  |                                 t)          j        |j                    xY wt/          |           | j                                         t)          j        | j	                  j        }	t)          j        |j        |	           	 t)          j        |j        | j	                   nH# t8          $ r; t)          j        | j	                   t)          j        |j        | j	                   Y nw xY wt;          | j	        d          | _        || _        d| _         d| _        | j        rt?          | j        d           d S d S )	NFr   r0  z4Size of mailbox file changed (expected %i, found %i)T   r>  )dotlock) rD  rE  _sync_flushrB  r   tellrG  r   _create_temporaryr   _pre_mailbox_hooksortedr   rR   _pre_message_hookr   minr   _post_message_hookry   r   r0   r   r   r+  st_modechmodr   r-  r   rF  rP  )
r    cur_lennew_filenew_tocr/   startstop	new_startr   modes
             r#   rs   z_singlefileMailbox.flush  s   0} 	! + DJ'''%*"F 	
1*//##d'''$ &?&*&7%A&B C C C %TZ00	G""8,,,dinn..// 2 2"int
&&&&&x000$MMOO	+!Z__S15
8I8I1I.K .K L LF! NN6***+ !*8==??;''1111 (D	NNIhm$$$H
wtz""*
%%%	1IhmTZ0000 	1 	1 	1Idj!!!IhmTZ00000	1 $*e,,
	"< 	2tz5111111	2 	2s    D6G 0H%J AK
	K
c                     	 d S r   r   r    r   s     r#   rZ  z$_singlefileMailbox._pre_mailbox_hook  
    :r%   c                     	 d S r   r   ri  s     r#   r\  z$_singlefileMailbox._pre_message_hook  s
    ;r%   c                     	 d S r   r   ri  s     r#   r^  z%_singlefileMailbox._post_message_hook  rj  r%   c                    	 	 |                                   	 | j        r|                                  | j                                         d S # | j                                         w xY w# 	 | j        r|                                  | j                                         w # | j                                         w xY wxY wr   )rs   rF  rw   rB  ry   rN   s    r#   ry   z_singlefileMailbox.close  s    *	#JJLLL#< "KKMMM
  """""
  """"	#< "KKMMM
  """"
  """"s.   A, A A),C.B#	C#B>>Cc                     	 | j         |                                  |/	 | j         |         S # t          $ r t          d|z            d w xY wd S r5  )r   _generate_tocr4   r.   s     r#   r   z_singlefileMailbox._lookup  sr    59   ?Jy~% J J J83>??TIJ ?s	   - Ac                 8   	 | j                             dd           | j                                         }t          | j                  dk    r!| j        s|                     | j                    	 |                     | j                    |                     |          }| 	                    | j                    n)# t          $ r | j                             |            w xY w| j                                          | j                                         | _        |S )Nr   r0  )rB  r   rX  r   r   rD  rZ  r\  _install_messager^  r   truncaters   rG  )r    r+   beforeoffsetss       r#   rI  z"_singlefileMailbox._append_message  s   I
1""ty>>Qt}
 ""4:...	""4:...++G44G##DJ//// 	 	 	J'''	 	
 JOO--s   0A	B: :&C r   r   )r   r   r   r$   r,   r0   r8   rO   rb   rd   ru   rw   rs   rZ  r\  r^  ry   r   rI  r   r%   r#   r<  r<  A  s        ! ! ! !." " "    $ $ $
     
  
     ! ! !>2 >2 >2@      	# 	# 	#J J J J    r%   r<  c                   8    e Zd Z	 dZd Zd	dZd	dZd	dZd ZdS )
	_mboxMMDFTc                    	 |                      |          \  }}| j                            |           | j                                                            t
          d                              d          }| j                            || j                                        z
            }| 	                    |                    t
          d                    }|
                    |           |                    |dd                     |S )Nr%   r   r   r   )r   rB  r   r   r   r   decoder   rX  _message_factoryset_unixfromset_from)r    r/   rd  re  	from_linestringr   s          r#   r>   z_mboxMMDF.get_message	  s    Bll3''t
J''))11'3??FFwOO	
(9(9!9::##FNN7E$B$BCC###Yqrr]###
r%   Fc                 |    	 t          j        |                     ||                                        |          S )N)unixfromrE   )r    r/   from_s      r#   rJ   z_mboxMMDF.get_string  s;    A'NN3&&( ((1	5	(A(A	Br%   c                 <   	 |                      |          \  }}| j                            |           |s| j                                         | j                            || j                                        z
            }|                    t          d          S Nr   )r   rB  r   r   r   rX  r   r   )r    r/   r  rd  re  r}  s         r#   rH   z_mboxMMDF.get_bytes  s    All3''t
 	"J!!!
(9(9!9::~~gu---r%   c                     	 |                      |          \  }}| j                            |           |s| j                                         t	          | j        | j                                        |          S r   )r   rB  r   r   _PartialFilerX  )r    r/   r  rd  re  s        r#   rA   z_mboxMMDF.get_file"  sj    Dll3''t
 	"J!!!DJ
(9(94@@@r%   c                    	 d }t          |t                    r|                     |          }t          |t                    rM|                    d          r8|                    d          }|dk    r|d |         }||dz   d          }n|}d}nt          |t                    r-|                                                    d          }d|z   }nJt          |t          j
        j                  r+|                                }||                    d          }|:dt          j        t          j                                                              z   }| j                                        }| j                            |t&          z              |                     || j        | j                   | j                                        }||fS )Nr   r   r   r  r%   r   s   From MAILER-DAEMON )r   r   r~   r   r   find_mboxMMDFMessageget_fromr{   rF   r+   r
   get_unixfromr  asctimegmtimerB  rX  r   r   r   _mangle_from_)r    r+   r|  newlineauthorrd  re  s          r#   rq  z_mboxMMDF._install_message*  s   ?	gs## 	5++G44Ggu%% 	6'*<*<X*F*F 	6ll5))G"}}#HWH-	!'A+,,/#	!122 	6%%''..w77F 6)II!677 	6,,..I$%,,W55	.dkmm1L1L1S1S1U1UUI
!!
W,---7DJ0BCCCz  t}r%   Nr   )	r   r   r   r  r>   rJ   rH   rA   rq  r   r%   r#   rv  rv    s~        "M	 	 	B B B B
. . . .A A A A    r%   rv  c                   ,    e Zd Z	 dZdZddZd Zd ZdS )r   TNc                 Z    	 t           | _        t                              | |||           d S r   )r   ry  rv  r$   r   s       r#   r$   zmbox.__init__P  -    ) +4w77777r%   c                 <    	 |                     t                     d S r   r   r   ri  s     r#   r^  zmbox._post_message_hookU  s    :	r%   c                 F   	 g g }}d}| j                             d           	 | j                                         }| j                                         }|                    d          rzt          |          t          |          k     rB|r+|                    |t          t                    z
             n|                    |           |                    |           d}nU|sC|r+|                    |t          t                    z
             n|                    |           n|t          k    rd}nd}t          t          t          ||                              | _        t          | j                  | _        | j                                         | _        d S )NFr   Tr   )rB  r   rX  r   r   r   r  r   dict	enumeratezipr   rC  rG  )r    startsstopslast_was_emptyline_posr   s         r#   ro  zmbox._generate_tocY  s{   >B
	'z((H:&&((Dx(( 'u::F++% /XG%<====
 X...h'''!& 	'! +LLCLL!89999LL***!%!&/	'0 3vu#5#56677	TY JOO--r%   r   )r   r   r   r  r   r$   r^  ro  r   r%   r#   r   r   G  sU        !M O8 8 8 8
  . . . . .r%   r   c                   *    e Zd Z	 ddZd Zd Zd ZdS )r	   NTc                 Z    	 t           | _        t                              | |||           d S r   )r   ry  rv  r$   r   s       r#   r$   zMMDF.__init__~  r  r%   c                 B    	 |                     dt          z              d S N   r  ri  s     r#   r\  zMMDF._pre_message_hook  s#    ;	#g-.....r%   c                 R    	 |                     t          dz   t          z              d S r  r  ri  s     r#   r^  zMMDF._post_message_hook  s(    :	--788888r%   c                 0   	 g g }}| j                             d           d}	 |}| j                                         }| j                                         }|                    dt
          z             r|                    |           	 |}| j                                         }| j                                         }|dt
          z   k    r+|                    |t          t
                    z
             n|s|                    |           nn|snt          t          t          ||                              | _        t          | j                  | _        | j                             dd           | j                                         | _        d S )Nr   Tr  r0  )rB  r   r   rX  r   r   r  r   r  r  r  r   rC  rG  )r    r  r  next_posr  r   s         r#   ro  zMMDF._generate_toc  sw   >B
	H:&&((Dz((H2W<== h'''	'H:..00D#z00H2W<<<XG%<===! X...	  #	$ 3vu#5#56677	TY
1 JOO--r%   r   )r   r   r   r$   r\  r^  ro  r   r%   r#   r	   r	   {  sX        8 8 8 8
/ / /9 9 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dS )r   NTc                    	 t                               | |||           t          j                            | j                  s|rt          j        | j        d           t          j        t          j        t          j        	                    | j        d          t          j
        t          j        z  t          j        z  d                     nt          | j                  d| _        d S )Nr   .mh_sequencesi  F)r   r$   r   r   r   r   r   ry   r   r   r  O_EXCLr  r   rF  r   s       r#   r$   zMH.__init__  s    (tWf555w~~dj)) 	5 5U+++dj/!J!J!#bi!7"+!EuN N O O O O )444r%   c                    	 |                                  }t          |          dk    rd}nt          |          dz   }t          j                            | j        t          |                    }t          |          }d}	 | j	        rt          |           	 	 |                     ||           nJ# t          $ r= | j	        rt          |           t          |           d}t          j        |            w xY wt!          |t"                    r|                     ||           | j	        rt          |           n# | j	        rt          |           w w xY w|st          |           n# |st          |           w w xY w|S )Nr   r  FT)rR   r   maxr   r   r   r   r   r,  rF  rP  r   r   rS  r   r0   r   r   _dump_sequences)r    r+   rR   new_keyr   r   closeds          r#   r,   zMH.add  s   2yy{{t99>>GG$ii!mG7<<
CLL99h''	| 1$	&&w2222$   | ($QNNN!FIh''' gy11 ;((':::< $ OOO < $ OOOO$  A  As7   E+ B1 0D= 1AC88.D= &E+ =EE+ +E?c                 R   	 t           j                            | j        t	          |                    }	 t          |d          }|                                 t          j        |           d S # t          $ r-}|j	        t          j
        k    rt          d|z             d }~ww xY wNr>  r6  )r   r   r   r   r   r   ry   r0   r   r   r?  r4   )r    r/   r   r   r   s        r#   r0   z	MH.remove  s    Kw||DJC11		T5!!A GGIIIIdOOOOO  	 	 	w%,&&83>???		s   A/ /
B&9(B!!B&c                    	 t           j                            | j        t	          |                    }	 t          |d          }n:# t          $ r-}|j        t          j        k    rt          d|z             d }~ww xY w	 | j
        rt          |           	 t          j        t          j        |t           j        t           j        z                       |                     ||           t!          |t"                    r|                     ||           | j
        rt'          |           n# | j
        rt'          |           w w xY wt)          |           d S # t)          |           w xY wr  )r   r   r   r   r   r   r   r   r?  r4   rF  rP  ry   r  O_TRUNCr   r   r   r  rS  r   )r    r/   r+   r   r   r   s         r#   r8   zMH.__setitem__  sX   Lw||DJC11	T5!!AA 	 	 	w%,&&83>???		
	| 1$r{RZ'?@@AAA""7A...gy11 7((#666< $ OOO < $ OOOO$ NNNNNKNNNNs<   A 
A=(A88A=E A?D. E .EE E,c                     	 	 | j         rAt          t          j                            | j        t          |                    d          }n@t          t          j                            | j        t          |                    d          }n:# t          $ r-}|j        t          j	        k    rt          d|z             d }~ww xY w|5  | j         rt          |           	 t          |          }| j         rt          |           n# | j         rt          |           w w xY wd d d            n# 1 swxY w Y   |                                                                 D ]\  }}||v r|                    |           |S )Nr>  r   r6  )rF  r   r   r   r   r   r   r   r   r?  r4   rP  r   rS  get_sequencesr`   add_sequence)r    r/   r   r   r   r   key_lists          r#   r>   zMH.get_message  s   B		| Cdj#c((;;UCCdj#c((;;TBB 	 	 	w%,&&83>???		
  	$ 	$| 1$ll< $ OOO < $ OOOO$	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ #002288:: 	' 	'ND(h  &&&
sB   BB 
C(B>>CD. D/D.DD..D25D2c                    	 	 | j         rAt          t          j                            | j        t          |                    d          }n@t          t          j                            | j        t          |                    d          }n:# t          $ r-}|j        t          j	        k    rt          d|z             d }~ww xY w|5  | j         rt          |           	 |                                                    t          d          | j         rt          |           cd d d            S # | j         rt          |           w w xY w# 1 swxY w Y   d S )Nr>  r   r6  r   )rF  r   r   r   r   r   r   r   r   r?  r4   rP  r   r   r   rS  r    r/   r   r   s       r#   rH   zMH.get_bytes  s   @		| Cdj#c((;;UCCdj#c((;;TBB 	 	 	w%,&&83>???		
  	$ 	$| 1$vvxx''77< $ OOO	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ < $ OOOO$	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$sB   BB 
C(B>>CE ,D/E/EEEEc                    	 	 t          t          j                            | j        t          |                    d          }n:# t          $ r-}|j        t          j        k    rt          d|z             d }~ww xY wt          |          S )Nr   r6  )r   r   r   r   r   r   r   r   r?  r4   r   r  s       r#   rA   zMH.get_file-  s    D	RW\\$*c#hh77>>AA 	 	 	w%,&&83>???		
 !}}s   A A 
A;(A66A;c                 ~    	 t          t          d t          j        | j                  D                                 S )Nc              3   \   K   | ]'}|                                 t          |          V  (d S r   )isdigitr(  ).0r  s     r#   	<genexpr>zMH.iterkeys.<locals>.<genexpr>:  sH       : :%).:3u:: : : : : : :r%   )iterr[  r   r  r   rN   s    r#   rO   zMH.iterkeys8  sJ    +F : :2:dj3I3I : : : : : ; ; 	;r%   c                     	 t           j                            t           j                            | j        t          |                              S r   )r   r   r   r   r   r   r.   s     r#   rb   zMH.__contains__=  s1    Gw~~bgll4:s3xx@@AAAr%   c                 `    	 t          t          |                                                     S r   )r   rQ   rO   rN   s    r#   rd   z
MH.__len__A  s#    84(()))r%   c                     	 | j         sUt          t          j                            | j        d          d          | _        t          | j                   d| _         d S d S )Nr  r>  T)rF  r   r   r   r   r   rB  rP  rN   s    r#   ru   zMH.lockE  sW    | 	 bgll4:GGOODJtz"""DLLL	  	 r%   c                 |    	 | j         r3t          | j                   t          | j                   | `d| _         d S d S rR  )rF  rS  rB  r   rN   s    r#   rw   z	MH.unlockL  sI    1< 	!$$$
###
 DLLL		! 	!r%   c                     	 d S r   r   rN   s    r#   rs   zMH.flushT  s
    4r%   c                 B    	 | j         r|                                  d S d S r   )rF  rw   rN   s    r#   ry   zMH.closeX  s*    *< 	KKMMMMM	 	r%   c                     	 g }t          j        | j                  D ]Y}t           j                            t           j                            | j        |                    r|                    |           Z|S r   )r   r  r   r   r  r   r  r  s      r#   r  zMH.list_folders]  se    ,Z
++ 	% 	%Ew}}RW\\$*e<<== %e$$$r%   c                 x    	 t          t          j                            | j        |          | j        d          S )NFr
  r   r   r   r   r   r   r  s     r#   r  zMH.get_foldere  s7    9"',,tz622-7 7 7 	7r%   c                 v    	 t          t          j                            | j        |          | j                  S )Nr  r  r  s     r#   r  zMH.add_folderj  s5    H"',,tz622-) ) ) 	)r%   c                 R   	 t           j                            | j        |          }t          j        |          }|dgk    r3t          j        t           j                            |d                     n|g k    rnt          d| j        z            t          j        |           d S )Nr  zFolder not empty: %s)r   r   r   r   r  r0   r   r  )r    r  r   entriess       r#   r  zMH.remove_foldero  s    ;w||DJ//*T""'''Ibgll499::::]] 6 CDDD
r%   c           
      J  
 	 i }t          t          j                            | j        d          dd          5 }t          |                                           
|D ]+}	 |                    d          \  }}t                      }|                                D ]}|                                r#|	                    t          |                     9d |                    d          D             \  }}	|                    t          ||	dz                        
fd	t          |          D             ||<   t          ||                   d
k    r||= # t          $ r% t!          d|                                z            w xY w	 d d d            n# 1 swxY w Y   |S )Nr  rASCIIencodingr   c              3   4   K   | ]}t          |          V  d S r   )r(  )r  xs     r#   r  z#MH.get_sequences.<locals>.<genexpr>  s(      *K*Ka3q66*K*K*K*K*K*Kr%   -r  c                     g | ]}|v |	S r   r   )r  r/   all_keyss     r#   
<listcomp>z$MH.get_sequences.<locals>.<listcomp>  s)     %= %= %=S,/8OO &),;OOr%   r   z"Invalid sequence specification: %s)r   r   r   r   r   setrR   r   r  r,   r(  rq   ranger[  r   r}   r   rstrip)r    resultsr   r   r   contentsrR   specrd  re  r  s             @r#   r  zMH.get_sequences{  s   K"',,tz?;;S7SSS 	5WX499;;''H 5 55%)ZZ__ND(55D ( 0 0 @ @<<>> @ HHSYY////*K*K4::c??*K*K*KKE4 KKeTAX(>(>????%= %= %= %=F4LL %= %= %=GDM74=))Q..#DM! 5 5 5%&J&*kkmm'4 5 5 555	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5& s*   'F"C6EF/FFFFc                 F   	 t          t          j                            | j        d          dd          }	 t          j        t          j         |j        t          j        t          j        z                       |	                                D ]\  }}t          |          dk    r|                    |dz              d }d}t          t          |                    D ]^}|dz
  |k    r|sd	}|                    d
           n7|rd}|                    |d|           n|                    d|z             |}_|r&|                    t          |          dz              |                    d           	 t          |           d S # t          |           w xY w)Nr  zr+r  r  r   r   Fr  Tr   z %s
)r   r   r   r   r   ry   r   r  r  r`   r   r   r[  r  r   r   )r    	sequencesr   r   rR   prev
completingr/   s           r#   set_sequenceszMH.set_sequences  s   Hdj/::D7SSS	HRWQVR[2:%=>>???'oo// " "
dt99>>s
###"
!#d)),, 
 
CQw$) ))-JGGCLLL# -%*
444 56666,,,DD "GGCII,----GGDMMMM)", NNNNNKNNNNs   EF F c                 :   	 |                                  }d}g }|                                 D ]y}|dz
  |k    rg|                    ||dz   f           	 t          j        t          j                            | j        t          |                    t          j                            | j        t          |dz                                  t          j	        t          j                            | j        t          |                               n# t          t          f$ r{ t          j        t          j                            | j        t          |                    t          j                            | j        t          |dz                                  Y nw xY w|dz  }{|dz   | _        t          |          dk    rd S |                                D ])\  }}|D ]!\  }}||v r|||                    |          <   "*|                     |           d S )Nr   r  )r  rO   r  r   r   r   r   r   r   unlinkr   r   r   rC  r   r`   indexr  )	r    r  r  changesr/   r   r  oldr   s	            r#   packzMH.pack  s   M&&((	==?? 	 	CQw$TAX///BGBGLLSXX>>GLLS]]CCE E E Ibgll4:s3xx@@AAAA	 '8 G G GIbgll4:s3xx@@ gll4:s4!8}}EEG G G G GG
 AIDDw<<1F'oo// 	8 	8ND(# 8 8S(??47HX^^C0018 	9%%%%%s   A8DB	FFc                 <   	 |                                 }|                                  }|                                D ]9\  }}||v r|                    |           ||v r||                    |          = :|D ]}||vr|g||<   |                     |           d S 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3**,,+1133 	2 	2ND(((($$$$X^^C001) 	0 	0H},,+.%h'=)))))r%   r   )r   r   r   r$   r,   r0   r8   r>   rH   rA   rO   rb   rd   ru   rw   rs   ry   r  r  r  r  r  r  r  r  r   r%   r#   r   r     sj       
 
 
 
     D    0  2$ $ $*	 	 	; ; ;
B B B* * *     ! ! !    
  7 7 7
) ) )

 
 
  0  :& & &4* * * * *r%   r   c                   z    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dS )r   >   filededitedresentunseendeletedanswered	forwardedNTc                 P    	 t                               | |||           i | _        d S r   )r<  r$   _labelsr   s       r#   r$   zBabyl.__init__  s*    )##D$@@@r%   c                     	 t                               | |          }t          |t                    r|                                | j        |<   |S r   )r<  r,   r   r   
get_labelsr  )r    r+   r/   s      r#   r,   z	Babyl.add  sI    2 $$T733g|,, 	5 ' 2 2 4 4DL
r%   c                 d    	 t                               | |           || j        v r
| j        |= d S d S r   )r<  r0   r  r.   s     r#   r0   zBabyl.remove  s@    K!!$,,,$,S!!! r%   c                     	 t                               | ||           t          |t                    r|                                | j        |<   d S d S r   )r<  r8   r   r   r  r  r7   s      r#   r8   zBabyl.__setitem__  sW    L&&tS':::g|,, 	5 ' 2 2 4 4DL	5 	5r%   c                    	 |                      |          \  }}| j                            |           | j                                         t	          j                    }	 | j                                        }|dt          z   k    s|sn/|                    |                    t          d                     Yt	          j                    }	 | j                                        }|t          k    s|sn/|                    |                    t          d                     V|| j        	                                z
  }| j        
                    |          }|                    t          d          }t          |                                |z             }	|	                    |                                           || j        v r |	                    | j        |                    |	S NT   *** EOOH ***r   )r   rB  r   r   r   r   r   r   r   rX  r   r   r   set_visibler  
set_labels)
r    r/   rd  re  original_headersr   visible_headersnbodyr   s
             r#   r>   zBabyl.get_message  s   Bll3''t

:<<	A:&&((D0000""4<<#?#?@@@		A
 *,,	@:&&((Dwd!!$,,w">">???		@ 4:??$$$zq!!||GU+++4466=>>0022333$,NN4<,---
r%   c                    	 |                      |          \  }}| j                            |           | j                                         t	          j                    }	 | j                                        }|dt          z   k    s|sn/|                    |                    t          d                     Y	 | j                                        }|t          k    s|sn(|	                                }|| j        
                                z
  }| j                            |          }|                    t          d          }||z   S r  )r   rB  r   r   r   r   r   r   r   r   rX  r   )	r    r/   rd  re  r  r   headersr  r   s	            r#   rH   zBabyl.get_bytes  s-   All3''t

:<<	A:&&((D0000""4<<#?#?@@@		A
	:&&((Dwd	 #++--4:??$$$zq!!||GU++~r%   c                     	 t          j        |                     |                              dt                              S r  )r   r   rH   r   r   r.   s     r#   rA   zBabyl.get_file)  s1    Dz$..--55eWEEFFFr%   c                     	 |                                   t                      }| j                                        D ]}|                    |           |                    | j                   t          |          S r   )r   r  r  r\   rq   difference_update_special_labelsrQ   )r    labels
label_lists      r#   r  zBabyl.get_labels-  sp    B,--// 	& 	&JMM*%%%%  !5666F||r%   c                    	 g g }}| j                             d           d}g }	 |}| j                                         }| j                                         }|dt          z   k    rt          |          t          |          k     r*|                    |t          t                    z
             |                    |           d | j                                         dd                              d          D             }|                    |           n|dk    s|dt          z   k    rKt          |          t          |          k     r*|                    |t          t                    z
             n-|s+|                    |t          t                    z
             nt          t          t          ||                              | _        t          t          |                    | _        t          | j                  | _        | j                             dd           | j                                         | _        d S )	Nr   Ts   c                 ^    g | ]*}|                                 |                                 +S r   )stripr  labels     r#   r  z'Babyl._generate_toc.<locals>.<listcomp>D  s<     : : :E+0;;==:%++-- : : :r%   r     ,   r0  )rB  r   r   rX  r   r   r  r   r  r  r  r   r  rC  rG  )r    r  r  r  label_listsr  r   r	  s           r#   ro  zBabyl._generate_toc6  s   >B
	H:&&((Dz((H{W,,,u::F++LLCLL!8999h''': :+/:+>+>+@+@+D+J+J4+P+P: : : ""6****DGg,=$=$=u::F++LLCLL!8999 XG4555#	$ 3vu#5#56677	Ik2233TY
1 JOO--r%   c                     	 dt           z   }|dt           z   z  }|                                 }d |D             }|dd                    |          z   t           z   z  }|dz  }|                    |           d S )Ns   BABYL OPTIONS:s
   Version: 5c              3   >   K   | ]}|                                 V  d S r   )r{   r  s     r#   r  z*Babyl._pre_mailbox_hook.<locals>.<genexpr>Y  s*      55U%,,..555555r%   s   Labels:r  r  )r   r  r   r   )r    r   babylr	  s       r#   rZ  zBabyl._pre_mailbox_hookT  s}    :!G+((""55f555dii///'99	r%   c                 B    	 |                     dt          z              d S )N   r  ri  s     r#   r\  zBabyl._pre_message_hook^  s"    ;	'!"""""r%   c                 B    	 |                     t          dz              d S )Nr  r  ri  s     r#   r^  zBabyl._post_message_hookb  s"    :	'!"""""r%   c                    	 | j                                         }t          |t                    rg }g }|                                D ]6}|| j        v r|                    |           !|                    |           7| j                             d           |D ]1}| j                             d|                                z              2| j                             d           |D ]4}| j                             d|                                z   dz              5| j                             t                     n"| j                             dt          z              t          |t          j        j                  rKt          j                    }t          j                            |dd          }|                    |           |                    d           	 |                                }| j                             |                    d
t                               |d
k    s|snQ| j                             dt          z              t          |t                    rt          j                    }	t          j                            |	dd          }
|
                    |                                           	 |	                                }| j                             |                    d
t                               |d
k    s|snQng|                    d           	 |                                }| j                             |                    d
t                               |d
k    s|snQ	 |                    d          }|sn4| j                             |                    d
t                               Lnt          |t.          t0          t          j        f          rt          |t          j                  r/t5          j        dt8          d           |                                }t          |t0                    r|                     |          }|                    d          dz   }|dz
  dk    r| j                             |d |                             d
t                               | j                             dt          z              | j                             |d |                             d
t                               | j                             ||d                              d
t                               nU| j                             dt          z   t          z              | j                             |                    d
t                               ntA          |d          rtA          |d          r"t5          j        dt8          d           |j!        }|                                }d	}	 |                                }|"                    d          r|d d         d
z   }n"|"                    d          r|d d         d
z   }| j                             |                    d
t                               |d
k    s|s=|r:d}| j                             dt          z              |                    |           nn	 |                                }|sn|"                    d          r|d d         t          z   }nO|"                    d          r|d d         t          z   }n'|"                    d
          r|d d         t          z   }| j                             |           ntG          dtI          |          z            | j                                         }||fS )N   1s   , s   ,,    r  s   1,,Fr   Tr   r  rU  r   r   s   

r0  r   r   r   r   r   r   r   r   )%rB  rX  r   r   r  r  r  r   r{   r   rF   r+   r
   r   r   r   r   r   r   r   r   get_visibler   r   r   r   r   r   r   r   r~   r  rm   r   r   r   r   )r    r+   rd  special_labelsr	  r  orig_bufferorig_generatorr   
vis_buffervis_generatorr   
body_startoriginal_pos
first_passre  s                   r#   rq  zBabyl._install_messagef  sN   >
!!g|,, 	/NF ++-- ) )D000"))%0000MM%((((JT"""' 9 9
  !78888JU### ? ?
  !6!=>>>>JW%%%%JVg-...gu}455 S	H*,,K"_;;KPQRRN""7+++Q"++--
  eW!=!=>>>5===	
 J_w6777'<00 Z\\
 % > >z5RS T T%%g&9&9&;&;<<<%..00DJ$$T\\%%A%ABBBu}}D}	   ###&//11DJ$$T\\%%A%ABBBu}}D}	
A$))$// 
  w!?!?@@@	A %bk!:;; 3	H'2;// - *+=qB B B!**,,'3'' 9//88 g..2JA~##
  *!5!=!=eW!M!MNNN
  7!:;;;
  *!5!=!=eW!M!MNNN
  !5!=!=eW!M!MNNNN
  7!:W!DEEE
  !@!@AAAAWj)) #	Hw)) ) 56H!M M M!."<<>>LJ''))==)) -9u,DD]]5)) -9u,D
  eW!=!=>>>5===! %*

((7)BCCC\2222''')) ==)) /9w.DD]]5)) /9w.DD]]5)) /9w.D
  &&&'  6gFGGGz  t}r%   r   )r   r   r   	frozensetr  r$   r,   r0   r8   r>   rH   rA   r  ro  rZ  r\  r^  rq  r   r%   r#   r   r     s       'i !B !B !B C CO   
  " " "5 5 5  8  ,G G G  . . .<  # # ## # #i i i i ir%   r   c                   $    e Zd Z	 ddZd Zd ZdS )r
   Nc                 j   	 t          |t          j        j                  rU|                     t          j        |                     t          |t                    r|                    |            d S d S t          |t                    r)|                     t          j	        |                     d S t          |t                    r)|                     t          j        |                     d S t          |t          j                  r)|                     t          j        |                     d S t          |d          r)|                     t          j        |                     d S |&t          j        j                            |            d S t%          dt'          |          z            )Nr   r   )r   rF   r+   r
   _become_messagecopydeepcopy_explain_tor   rG   r   message_from_stringr   TextIOWrappermessage_from_filerm   message_from_binary_filer$   r   r   r*   s     r#   r$   zMessage.__init__  s   ,gu}455 	H  w!7!7888'7++ *##D)))))* *'' 	H  !9'!B!BCCCCC%% 		H  !:7!C!CDDDDD!122 	H  !8!A!ABBBBBWf%% 	H  !?!H!HIIIII_M!**4000006gFGGGr%   c                 p    	 t          |dg           }|j        D ]}||vr|j        |         | j        |<   d S )N_type_specific_attributes)getattr__dict__)r    r+   type_specificr   s       r#   r(  zMessage._become_message  sS    >)DbII$ 	= 	=D=((&-&6t&<d#	= 	=r%   c                 P    	 t          |t                    rd S t          d          )Nz Cannot convert to specified type)r   r
   r   r*   s     r#   r+  zMessage._explain_to  s,    Hgw'' 	@F>???r%   r   )r   r   r   r$   r(  r+  r   r%   r#   r
   r
     sR        :H H H H&= = =@ @ @ @ @r%   r
   c                   b    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dS )r   )_subdir_info_dateNc                     	 d| _         d| _        t          j                    | _        t                              | |           d S )Nr   r   )r7  r8  r  r9  r
   r$   r*   s     r#   r$   zMaildirMessage.__init__  s<    3
Y[[
w'''''r%   c                     	 | j         S r   )r7  rN   s    r#   r   zMaildirMessage.get_subdir  s    $|r%   c                 R    	 |dk    s|dk    r	|| _         d S t          d|z            )Nr   r   z!subdir must be 'new' or 'cur': %s)r7  r}   )r    r   s     r#   r   zMaildirMessage.set_subdir  s5    +U??foo!DLLL@6IJJJr%   c                 Z    	 | j                             d          r| j         dd          S dS )N2,r0  r   )r8  r   rN   s    r#   	get_flagszMaildirMessage.get_flags  s2    8:  && 	:abb>!2r%   c                 \    	 dd                     t          |                    z   | _        d S )Nr>  r   )r   r[  r8  )r    flagss     r#   	set_flagszMaildirMessage.set_flags  s'    7BGGF5MM222


r%   c                     	 |                      d                    t          |                                           t          |          z                       d S Nr   rB  r   r  r?  r    flags     r#   add_flagzMaildirMessage.add_flag  F    <rwws4>>#3#344s4yy@AABBBBBr%   c                     	 |                                  rY|                     d                    t          |                                            t          |          z
                       d S d S rD  )r?  rB  r   r  rF  s     r#   remove_flagzMaildirMessage.remove_flag  se    E>> 	GNN2773t~~'7'7#8#83t99#DEEFFFFF	G 	Gr%   c                     	 | j         S r   )r9  rN   s    r#   r   zMaildirMessage.get_date"  s    Jzr%   c                 t    	 	 t          |          | _        d S # t          $ r t          d|z            d w xY w)Nzcan't convert to float: %s)floatr9  r}   r   )r    dates     r#   r   zMaildirMessage.set_date&  sQ    G	KtDJJJ 	K 	K 	K84?@@dJ	Ks    7c                     	 | j         S r   )r8  rN   s    r#   r   zMaildirMessage.get_info-  s    3zr%   c                 ~    	 t          |t                    r	|| _        d S t          dt	          |          z            )Nzinfo must be a string: %s)r   r   r8  r   r   )r    infos     r#   r   zMaildirMessage.set_info1  s=    .dC   	FDJJJ7$t**DEEEr%   c                    	 t          |t                    rw|                    |                                            |                    |                                            |                    |                                            d S t          |t                    rt          |                                           }d|v r|
                    d           |                                 dk    r|
                    d           d|v r|
                    d           d|v r|
                    d           d|v r|
                    d           |                    d	t          j        |                                                      d S t          |t                    rpt          |                                           }d|vr|                    d
           d|v r|                    d           d|v r|                    d           d S d S t          |t                     rt          |                                           }d|vr|                    d
           d|v r|                    d           d|v r|                    d           d|v r|                    d           d S d S t          |t$                    rd S t'          dt)          |          z            )NSRr   OTDFAMAILER-DAEMONr  repliedflaggedr  r  r$  r  $Cannot convert to specified type: %s)r   r   rB  r?  r   r   r   r   r  r  rH  r{  r  r  r   r  r   	add_labelr
   r   r   )r    r+   rA  s      r#   r+  zMaildirMessage._explain_to8  s   Ig~.. '	+dnn..///t00111T]]__-----!122 #	+(())Ee||  %%%  E))  %%%e||  %%%e||  %%%e||  %%%_dk$--//.J.JKKKKK++ 	+(())E%$$X...e||$$Y///e||$$Y///// |.. 	+(())E%!!(+++e||!!),,,e||!!*---e||!!+..... |)) 	+DB MM* + + +r%   r   )r   r   r   r1  r$   r   r   r?  rB  rH  rK  r   r   r   r   r+  r   r%   r#   r   r     s        3 = = =( ( ( (  K K K  3 3 3C C CG G G
  K K K  F F F)+ )+ )+ )+ )+r%   r   c                   J    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dS )r  _fromNc                 8   	 |                      dd           t          |t          j        j                  rH|                                }|2|                    d          r|                      |dd                     t                              | |           d S )Nr[  TzFrom r   )r{  r   rF   r+   r
   r  r   r$   )r    r+   r  s      r#   r$   z_mboxMMDFMessage.__init__i  s    5ot,,,gu}455 	,++--H#(;(;G(D(D#hqrrl+++w'''''r%   c                     	 | j         S r   )ra  rN   s    r#   r  z_mboxMMDFMessage.get_fromr  s    .zr%   c                 |    	 |1|du rt          j                    }|dt          j        |          z   z  }|| _        d S )NTr  )r  r  r  ra  )r    r  time_s      r#   r{  z_mboxMMDFMessage.set_fromv  sC    L}}S4<....E


r%   c                 ^    	 |                      dd          |                      dd          z   S )NStatusr   X-Status)r<   rN   s    r#   r?  z_mboxMMDFMessage.get_flags~  s,    8xx"%%R(@(@@@r%   c                    	 t          |          }d\  }}dD ] }||v r||z  }|                    |           !dD ] }||v r||z  }|                    |           !|d                    t          |                    z  }	 |                     d|           n&# t
          $ r |                     d|           Y nw xY w	 |                     d|           d S # t
          $ r |                     d|           Y d S w xY w)N)r   r   )rU  rV  )rX  rY  rZ  r   rg  rh  )r  r0   r   r[  replace_headerr4   
add_header)r    rA  status_flagsxstatus_flagsrG  s        r#   rB  z_mboxMMDFMessage.set_flags  sL   7E

&,#m 	# 	#Du}}$T"""# 	# 	#Du}}%T"""///	4,7777 	4 	4 	4OOHl33333	4	7
M::::: 	7 	7 	7OOJ666666	7s$   B  B<;B< C  C<;C<c                     	 |                      d                    t          |                                           t          |          z                       d S rD  rE  rF  s     r#   rH  z_mboxMMDFMessage.add_flag  rI  r%   c                     	 d| v sd| v rY|                      d                    t          |                                           t          |          z
                       d S d S )Nrg  rh  r   rE  rF  s     r#   rK  z_mboxMMDFMessage.remove_flag  sc    EtzT11NN2773t~~'7'7#8#83t99#DEEFFFFF  21r%   c                    	 t          |t                    r:t          |                                           }d|v r|                    d           d|v r|                    d           d|v r|                    d           d|v r|                    d           d|v r|                    d           |d	= |d
= d                    |                                                                 dd                    }	 |	                    t          j        t          j        |d                               d S # t          t          f$ r Y d S w xY wt          |t                     rP|                    |                                            |                    |                                            d S t          |t&                    rtt          |                                           }d|vr|                    d           d|v r|                    d           d|v r|                    d           |d	= |d
= d S t          |t*                    rtt          |                                           }d|vr|                    d           d|v r|                    d           d|v r|                    d           |d	= |d
= d S t          |t.                    rd S t1          dt3          |          z            )NrV  r   rY  rZ  rU  rT  rX  rW  statuszx-statusr  z%a %b %d %H:%M:%S %Yr  r\  r]  r  r  r^  )r   r   r  r?  r   rH  r   r  r   r   calendartimegmr  strptimer}   OverflowErrorr  rB  r{  r   r  r   r_  r
   r   r   )r    r+   rA  
maybe_dates       r#   r+  z_mboxMMDFMessage._explain_to  s2   Og~.. /	+(())Ee||""5)))e||  %%%e||  %%%e||  %%%e||  %%%!
#$--//"7"7"9"9"##">??J  z6L2N 2N "O "O P P P P P.   !122 	+dnn..///T]]__-----++ 	+(())E%$$X...e||$$Y///e||$$Y///!
###.. 	+(())E%!!(+++e||!!),,,e||!!*---!
###)) 	+DB MM* + + +s   >:D: :EEr   )r   r   r   r1  r$   r  r{  r?  rB  rH  rK  r+  r   r%   r#   r  r  d  s        9!(	( ( ( (     A A A7 7 7,C C CG G G
1+ 1+ 1+ 1+ 1+r%   r  c                       e Zd ZdS )r   Nr   r   r   r   r%   r#   r   r             00r%   r   c                   <    e Zd Z	 dgZd	dZd Zd Zd Zd Zd Z	dS )
r   
_sequencesNc                 L    	 g | _         t                              | |           d S r   )r|  r
   r$   r*   s     r#   r$   zMHMessage.__init__  s(    /w'''''r%   c                 "    	 | j         d d          S r   )r|  rN   s    r#   r  zMHMessage.get_sequences  s    Bqqq!!r%   c                 0    	 t          |          | _        d S r   )rQ   r|  )r    r  s     r#   r  zMHMessage.set_sequences  s    Ay//r%   c                     	 t          |t                    r'|| j        vr| j                            |           d S d S t	          dt          |          z            )Nzsequence type must be str: %s)r   r   r|  r  r   r   r    r  s     r#   r  zMHMessage.add_sequence  se    Fh$$ 	Nt..&&x00000 /. ;d8nnLMMMr%   c                 `    	 	 | j                             |           d S # t          $ r Y d S w xY wr   )r|  r0   r}   r  s     r#   remove_sequencezMHMessage.remove_sequence  sH    O	O""8,,,,, 	 	 	DD	    
--c                 d   	 t          |t                    rt          |                                           }d|v r|                    d           n*|                    d           |                    d           d|v r|                    d           d|v r|                    d           d S d S t          |t                    rt          |                                           }d|vr|                    d           n|                    d	           d|v r|                    d           d|v r|                    d
           d S d S t          |t                    r.|                                 D ]}|                    |           d S t          |t                    rWt          |                                           }d|v r|
                    d           d|v r|
                    d           d S d S t          |t                    rd S t          dt          |          z            )Nr  r   rT  r]  rY  r\  rU  ROrV  rZ  r  r^  )r   r   r  r  r   rH  r  r   r  r   r_  r
   r   r   )r    r+   r  r  s       r#   r+  zMHMessage._explain_to  ss   Dg~.. "	+D..0011I9$$""5))))""5)))  %%%I%%  %%%I%%  %%%%% &%!122 	+D..0011Iy((  &&&&  %%%I%%  %%%I%%  %%%%% &%++ 	+ ..00 / /$$X..../ /.. 
	+D..0011I9$$!!(+++I%%!!*----- &%)) 	+DB MM* + + +r%   r   )
r   r   r   r1  r$   r  r  r  r  r+  r   r%   r#   r   r     s        .!-( ( ( (
" " "* * *N N N  $+ $+ $+ $+ $+r%   r   c                   P    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dS )r   r  _visibleNc                 r    	 g | _         t                      | _        t                              | |           d S r   )r  r
   r  r$   r*   s     r#   r$   zBabylMessage.__init__&  s3    1		w'''''r%   c                 "    	 | j         d d          S r   )r  rN   s    r#   r  zBabylMessage.get_labels,  s    5|AAAr%   c                 0    	 t          |          | _        d S r   )rQ   r  )r    r	  s     r#   r  zBabylMessage.set_labels0  s    4F||r%   c                     	 t          |t                    r'|| j        vr| j                            |           d S d S t	          dt          |          z            )Nzlabel must be a string: %s)r   r   r  r  r   r   r    r  s     r#   r_  zBabylMessage.add_label4  se    9eS!! 	HDL((##E***** )( 84;;FGGGr%   c                 `    	 	 | j                             |           d S # t          $ r Y d S w xY wr   )r  r0   r}   r  s     r#   remove_labelzBabylMessage.remove_label<  sH    B	L&&&&& 	 	 	DD	r  c                 ,    	 t          | j                  S r   r
   r  rN   s    r#   r  zBabylMessage.get_visibleC  s    At}%%%r%   c                 0    	 t          |          | _        d S r   r  )r    visibles     r#   r  zBabylMessage.set_visibleG  s    @((r%   c                     	 | j                                         D ]0}|| v r"| j                             || |                    (| j         |= 1dD ]}|| v r|| j         vr| |         | j         |<    d S )N)DateFromzReply-ToToCCSubject)r  rR   rj  )r    headers     r#   update_visiblezBabylMessage.update_visibleK  s    Gm((** 	* 	*F~~,,VT&\BBBBM&))I 	5 	5F~~&"="=(,Vf%	5 	5r%   c                    	 t          |t                    rt          |                                           }d|v r|                    d           n*|                    d           |                    d           d|v sd|v r|                    d           d|v r|                    d           d	|v r|                    d
           d S d S t          |t                    rt          |                                           }d|vr|                    d           n|                    d           d	|v r|                    d           d|v r|                    d           d S d S t          |t                    rWt          |                                           }d|v r|                    d           d|v r|                    d           d S d S t          |t                    rU|
                    |                                            |                                 D ]}|                    |           d S t          |t                    rd S t          dt          |          z            )Nr  r   rT  r  r  r$  r  rU  r  rW  r  rV  rX  rZ  r\  r^  )r   r   r  r  r   rH  r  r   r  r   r  r  r_  r
   r   r   )r    r+   r	  r  s       r#   r+  zBabylMessage._explain_toV  s   Gg~.. %	+**++F6!!""5))))""5)))  %%%f$$F(:(:  %%%V##  %%%F""  %%%%% #"!122 	+**++Fv%%  &&&&  %%%F""  %%%V##  %%%%% $#++ 	+**++F6!!$$X...V##$$Y///// $#.. 	+ 0 0 2 2333** ) )!!%(((() ))) 	+DB MM* + + +r%   r   )r   r   r   r1  r$   r  r  r_  r  r  r  r  r+  r   r%   r#   r   r   !  s        1!*J 7( ( ( (  $ $ $H H H  & & &) ) )	5 	5 	5'+ '+ '+ '+ '+r%   r   c                       e Zd ZdS )r   Nry  r   r%   r#   r   r     rz  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dS )r   Nc                 ^    	 || _         ||                                | _        d S || _        d S r   )rB  rX  _pos)r    r   poss      r#   r$   z_ProxyFile.__init__  s/    &
;DIIIDIIIr%   c                 D    	 |                      || j        j                  S r   )_readrB  r   r    sizes     r#   r   z_ProxyFile.read  s    zz$
000r%   c                 D    	 |                      || j        j                  S r   )r  rB  read1r  s     r#   r  z_ProxyFile.read1  s    zz$
 0111r%   c                 D    	 |                      || j        j                  S r   )r  rB  r   r  s     r#   r   z_ProxyFile.readline  s    zz$
 3444r%   c                 x    	 g }| D ]3}|                     |           ||t          |          z  }|dk    r n4|S )Nr   )r  r   )r    sizehintrh   r   s       r#   	readlinesz_ProxyFile.readlines  sU    " 	 	DMM$#CII%q==Er%   c              #   D   K   	 	 |                                  }|sd S |V  r   )r   )r    r   s     r#   rZ   z_ProxyFile.__iter__  s6      !	==??D JJJ		r%   c                     	 | j         S r   )r  rN   s    r#   rX  z_ProxyFile.tell  s    "yr%   r   c                     	 |dk    r| j                             | j                   | j                             ||           | j                                         | _        d S )Nr  rB  r   r  rX  r    offsetwhences      r#   r   z_ProxyFile.seek  sQ    Q;;JOODI&&&
'''JOO%%			r%   c                     	 t          | d          r:	 t          | j        d          r| j                                         | `d S # | `w xY wd S )NrB  ry   )rm   rB  ry   rN   s    r#   ry   z_ProxyFile.close  sd    4!! 	4:w// 'J$$&&&JJJDJ	 	s   .A A	c                     	 |d}| j                             | j                    ||          }| j                                         | _        |S )Nr   r  )r    r  read_methodrh   s       r#   r  z_ProxyFile._read  sL    0<D
	"""T""JOO%%	r%   c                     	 | S r   r   rN   s    r#   	__enter__z_ProxyFile.__enter__  s
    2r%   c                 .    |                                   d S r   )ry   )r    excs     r#   __exit__z_ProxyFile.__exit__  s    

r%   c                 4    | j                                         S r   )rB  readablerN   s    r#   r  z_ProxyFile.readable      z""$$$r%   c                 4    | j                                         S r   )rB  writablerN   s    r#   r  z_ProxyFile.writable  r  r%   c                 4    | j                                         S r   )rB  seekablerN   s    r#   r  z_ProxyFile.seekable  r  r%   c                 4    | j                                         S r   )rB  rs   rN   s    r#   rs   z_ProxyFile.flush  s    z!!!r%   c                 l    t          | d          sdS t          | j        d          sdS | j        j        S )NrB  Tr  F)rm   rB  r  rN   s    r#   r  z_ProxyFile.closed  s=    tW%% 	4tz8,, 	5z  r%   r   r   )r   r   r   r$   r   r  r   r  rZ   rX  r   ry   r  r  r  r  r  r  rs   propertyr  r   r   r   r   r%   r#   r   r     sN       (   1 1 1 12 2 2 25 5 5 5	 	 	 	    & & & &        % % %% % %% % %" " " ! ! X! $L11r%   r   c                   2    e Zd Z	 ddZd Zd	dZd Zd ZdS )
r  Nc                 \    	 t                               | ||           || _        || _        d S r   )r   r$   _start_stop)r    r   rd  re  s       r#   r$   z_PartialFile.__init__  s/    (D!U+++


r%   c                 H    	 t                               |           | j        z
  S r   )r   rX  r  rN   s    r#   rX  z_PartialFile.tell  s    8t$$t{22r%   r   c                     	 |dk    r| j         | _        d}n|dk    r| j        | _        d}t                              | ||           d S )Nr   r  r0  )r  r  r  r   r   r  s      r#   r   z_PartialFile.seek  sQ    FQ;;DIFFq[[
DIFff-----r%   c                     	 | j         | j        z
  }|dk    rdS ||dk     s||k    r|}t                              | ||          S )Nr   r%   )r  r  r   r  )r    r  r  	remainings       r#   r  z_PartialFile._read   sU    IJ*	>>3<4!88ti'7'7DdK888r%   c                 .    t          | d          r| `d S d S )NrB  )rm   rB  rN   s    r#   ry   z_PartialFile.close	  s)     4!! 	


	 	r%   )NNr  )r   r   r   r$   rX  r   r  ry   r   r%   r#   r  r    sl        0   3 3 3. . . .9 9 9    r%   r  Tc                    	 d}	 t           r	 t          j        | t           j        t           j        z             nT# t          $ rG}|j        t
          j        t
          j        t
          j        fv rt          d| j
        z             d }~ww xY w|r"	 t          | j
        dz             }|                                 n8# t          $ r+}|j        t
          j        t
          j        fv rY d }~d S  d }~ww xY w	 	 t          j        |j
        | j
        dz              d}t          j        |j
                   n;# t           t"          f$ r' t          j        |j
        | j
        dz              d}Y nw xY wd S d S # t&          $ r1 t          j        |j
                   t          d| j
        z            w xY wd S #  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@  rA  r   r   rY  ry   r   r   r  r   r   r   r-  r0   LOCK_UN)r   rV  dotlock_doner   pre_locks        r#   rP  rP    sG   2L% 	Au}u}<====   7u|U\5;GGG,-J-.V.4 5 5 5   	1,QVg-=>>       7u|U[999FFFFF	
1-GHM16G+;<<<#'L
 Ihm,,,,	 '8 ( ( (IhmQVg-=>>>#'LLL( -, !L # 1 1 1	(-(((()C)**0 1 1 11%	1 	1, 	*K5=))) 	(Iafw&'''s   F5 ,: F5 
BABBF5 +B> =F5 >
C3C.'F5 -C..C33F5 8$D6 E5 65E.+E5 -E..E5 5;F00F5 5AG<c                     	 t           rt          j        | t           j                   t          j                            | j        dz             rt          j        | j        dz              d S d S )Nr  )r  r  r  r   r   r   r   r0   r   s    r#   rS  rS  :  se    4 &Au}%%%	w~~afw&'' $
	!&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_RDWRry   )r   fds     r#   r,  r,  A  s[    M	rzBI-	95	A	ABD%  
s   A! !A7c           
          	 t          | dt          t          j                              dt          j                    dt          j                              S )Nr  )r,  r(  r  r&  r'  r   r)  )r   s    r#   rY  rY  I  sU    LdddC	4D4D4D4D.4.@.B.B.B.B.0ikkk; < < <r%   c                     	 |                                   t          t          d          r(t          j        |                                            d S d S )Nfsync)rs   rm   r   r  filenor  s    r#   rW  rW  O  sL    :GGIIIr7 
 r%   c                 N    	 t          |            |                                  d S r   )rW  ry   r  s    r#   r   r   U  s!    DNNNGGIIIIIr%   c                       e Zd ZdS )r   Nry  r   r%   r#   r   r   [  s        ,,r%   r   c                       e Zd ZdS )r   Nry  r   r%   r#   r   r   ^  s        DDr%   r   c                       e Zd ZdS )r   Nry  r   r%   r#   r   r   a  s        HHr%   r   c                       e Zd ZdS )r   Nry  r   r%   r#   r   r   d          33r%   r   c                       e Zd ZdS )r   Nry  r   r%   r#   r   r   g  r  r%   r   )T)1r   r  rs  r&  r   r)  r   rF   email.messageemail.generatorr   r?   typesr   r  ImportError__all__r   r{   r   r   r<  rv  r   r	   r   r   r+   r
   r   r  r   r   r   r   r   r  rP  rS  r,  rY  rW  r   	Exceptionr   r   r   r   r   r   r%   r#   <module>r     sz   J 
			                				          LLLL   EEEA A A
 *

G
$
$f2 f2 f2 f2 f2 f2 f2 f2Rs s s s sg s s sl	       F@ @ @ @ @" @ @ @F1. 1. 1. 1. 1.9 1. 1. 1.h*. *. *. *. *.9 *. *. *.Zn* n* n* n* n* n* n* n*b	v v v v v v v vr"@ "@ "@ "@ "@em# "@ "@ "@Jj+ j+ j+ j+ j+W j+ j+ j+Zn+ n+ n+ n+ n+w n+ n+ n+b1 1 1 1 1" 1 1 1E+ E+ E+ E+ E+ E+ E+ E+P\+ \+ \+ \+ \+7 \+ \+ \+~1 1 1 1 1" 1 1 1b2 b2 b2 b2 b2 b2 b2 b2J$ $ $ $ $: $ $ $N( ( ( (T$ $ $  < < <    - - - - -I - - -E E E E E E E EI I I I IE I I I4 4 4 4 4 4 4 44 4 4 4 4% 4 4 4 4 4s   > AA