³ò
®µGc           @   s  d  Z  d d d d d d d d d	 d
 d d d g Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k Td d k	 Z
 d d k l Z l Z d d% d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d	 e f d „  ƒ  YZ d
 e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d  „  ƒ  YZ e i d! j  o  d" „  d# „ Z e i d$ ƒ n d S(&   s-   Base classes used elsewhere in the package.

t   ConfigurableBaset   ForkingBaset   ConfInstancet
   ConfStringt   ConfBoolt   ConfIntt   ConfTupleOfStringst   ConfTupleOfTupleOfStringst   ConfPasswordt   ConfDirectoryt   ConfFilet   ConfMaildirPatht   ConfMboxPathiÿÿÿÿN(   t   *(   t	   eval_boolt   expand_user_varst   ConfItemc           B   s2   e  Z e Z d e d  „ Z d „  Z d d „ Z RS(   c         C   s:   t  i i ƒ  |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   getmailcoret   loggingt   Loggert   logt   namet   dtypet   defaultt   required(   t   selfR   R   R   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyt   __init__'   s
    			c         C   s(   | d j o |  i  Sn t | ƒ ‚ d  S(   NR   (   R   t   KeyError(   R   t   key(    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyt   __getitem__.   s    c         C   sZ  | d  j o | i |  i d  ƒ } n | d  j o, |  i o t d |  i ƒ ‚ n |  i Sn t | ƒ |  i j	 oá | |  i j oÑ |  i o$ |  i	 i
 d |  i |  i f ƒ n$ |  i	 i
 d |  i | |  i f ƒ y9 |  i t j o t | ƒ } n |  i t | ƒ ƒ } WqVt t t f j
 o+ } t d |  i | |  i | f ƒ ‚ qVXn | S(   Ns,   %s: missing required configuration parameters   converting %s to type %s
s   converting %s (%s) to type %s
s9   %s: configuration value (%s) not of required type %s (%s)(   t   Nonet   getR   R   t   getmailConfigurationErrorR   t   typeR   t   securevalueR   t   debugt   boolR   t   evalt
   ValueErrort   SyntaxErrort	   TypeError(   R   t   configurationt   valt   o(    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyt   validate6   s,    
&
%N(	   t   __name__t
   __module__t   FalseR"   R   t   TrueR   R   R,   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   %   s   	c           B   s   e  Z d e d  „ Z RS(   c         C   s&   t  i |  | t i d | d | ƒd  S(   NR   R   (   R   R   t   typest   InstanceType(   R   R   R   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   X   s    N(   R-   R.   R   R0   R   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   W   s   c           B   s   e  Z d e d  „ Z RS(   c         C   s#   t  i |  | t d | d | ƒd  S(   NR   R   (   R   R   t   str(   R   R   R   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   ]   s    N(   R-   R.   R   R0   R   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   \   s   c           B   s   e  Z d e d  „ Z RS(   c         C   s#   t  i |  | t d | d | ƒd  S(   NR   R   (   R   R   R$   (   R   R   R   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   a   s    N(   R-   R.   R   R0   R   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   `   s   c           B   s   e  Z d e d  „ Z RS(   c         C   s#   t  i |  | t d | d | ƒd  S(   NR   R   (   R   R   t   int(   R   R   R   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   e   s    N(   R-   R.   R   R0   R   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   d   s   c           B   s    e  Z d e d  „ Z d „  Z RS(   c         C   s    t  i |  | d | d | ƒd  S(   NR   R   (   R   R   (   R   R   R   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   i   s    c         C   s×   t  i |  | ƒ } y] | d  j p | d j o
 d } n t | ƒ } t | ƒ t j o t d ƒ ‚ n | } Wn4 t t f j
 o" } t d |  i	 | f ƒ ‚ n Xg  } | D] } | t
 | ƒ q± ~ } t | ƒ S(   Nt    s   ()s   not a tuples   %s: incorrect format (%s)(   R   R,   R   R%   R!   t   tupleR&   R'   R    R   R3   (   R   R)   R*   t   tupR+   t   _[1]t   itemt   result(    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR,   l   s    

'N(   R-   R.   R   R0   R   R,   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   h   s   c           B   s    e  Z d e d  „ Z d „  Z RS(   c         C   s    t  i |  | d | d | ƒd  S(   NR   R   (   R   R   (   R   R   R   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   }   s    c      	   C   sG  t  i |  | ƒ } y] | d  j p | d j o
 d } n t | ƒ } t | ƒ t j o t d ƒ ‚ n | } Wn4 t t f j
 o" } t d |  i	 | f ƒ ‚ n Xxš | D]’ } t | ƒ t j o t d | ƒ ‚ n t
 | ƒ d j o t d | ƒ ‚ n x; | D]3 } t | ƒ t j o t d | | f ƒ ‚ qqWq­ W| S(	   NR5   s   ()s   not a tuples   %s: incorrect format (%s)s    contained value "%s" not a tuplei   s!   contained value "%s" not length 2s-   contained value "%s" has non-string part "%s"(   R   R,   R   R%   R!   R6   R&   R'   R    R   t   lenR3   (   R   R)   R*   R7   R+   t   part(    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR,   €   s.    

  N(   R-   R.   R   R0   R   R,   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   |   s   c           B   s   e  Z e Z RS(    (   R-   R.   R0   R"   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   ™   s   c           B   s    e  Z d e d  „ Z d „  Z RS(   c         C   s    t  i |  | d | d | ƒd  S(   NR   R   (   R   R   (   R   R   R   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR      s    c         C   sg   t  i |  | ƒ } | d  j o d  Sn t | ƒ } t i i | ƒ p t d |  i | f ƒ ‚ n | S(   Ns+   %s: specified directory "%s" does not exist(	   R   R,   R   R   t   ost   patht   isdirR    R   (   R   R)   R*   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR,       s    N(   R-   R.   R   R0   R   R,   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR	   œ   s   c           B   s    e  Z d e d  „ Z d „  Z RS(   c         C   s    t  i |  | d | d | ƒd  S(   NR   R   (   R   R   (   R   R   R   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   ­   s    c         C   sg   t  i |  | ƒ } | d  j o d  Sn t | ƒ } t i i | ƒ p t d |  i | f ƒ ‚ n | S(   Ns&   %s: specified file "%s" does not exist(	   R   R,   R   R   R=   R>   t   isfileR    R   (   R   R)   R*   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR,   °   s    N(   R-   R.   R   R0   R   R,   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR
   ¬   s   c           B   s   e  Z d  „  Z RS(   c         C   s¨   t  i |  | ƒ } | d  j o d  Sn | i d ƒ p t d |  i ƒ ‚ n xS d D]K } t i i | | ƒ } t i i	 | ƒ p t d |  i | f ƒ ‚ qU qU W| S(   Nt   /s   %s: maildir must end with "/"t   curt   newt   tmps,   %s: maildir subdirectory "%s" does not exist(   RB   s   newRD   (
   R	   R,   R   t   endswithR    R   R=   R>   t   joinR?   (   R   R)   R*   t   subdirt
   subdirpath(    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR,   ½   s     (   R-   R.   R,   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   ¼   s   c           B   s    e  Z d e d  „ Z d „  Z RS(   c         C   s    t  i |  | d | d | ƒd  S(   NR   R   (   R   R   (   R   R   R   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   Ð   s    c         C   s  t  i |  | ƒ } | d  j o d  Sn t | ƒ } t i i | ƒ p t d |  i | f ƒ ‚ n t i	 | t i
 ƒ } t i | ƒ } t i | d ƒ } | i d d ƒ | i ƒ  } | o% | d  d j o t d | ƒ ‚ n y  t i | | i | i f ƒ Wn t j
 o	 } n X| S(   Ns+   %s: specified mbox file "%s" does not exists   r+bi    i   s   From s   %s: not an mboxrd file(   R   R,   R   R   R=   R>   R@   R    R   t   opent   O_RDWRt   fstatt   fdopent   seekt   readlinet   utimet   st_atimet   st_mtimet   OSError(   R   R)   R*   t   fdt
   status_oldt   ft
   first_lineR+   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR,   Ó   s*     N(   R-   R.   R   R0   R   R,   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   Ï   s   c           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sb  Base class for user-configurable classes.

    Sub-classes must provide the following data attributes and methods:

      _confitems - a tuple of dictionaries representing the parameters the class
                   takes.  Each dictionary should contain the following key,
                   value pairs:
                     - name - parameter name
                     - type - a type function to compare the parameter value
                       against (i.e. str, int, bool)
                     - default - optional default value.  If not preseent, the
                       parameter is required.
    c         K   sÃ   t  i i ƒ  |  _ |  i i ƒ  h  |  _ x | i ƒ  D]s \ } } | i ƒ  d j o$ |  i i d | t | ƒ f ƒ n$ |  i i d | | t | ƒ f ƒ | |  i | <q5 Wt	 |  _
 |  i ƒ  d  S(   Nt   passwords   setting %s to * (%s)
s   setting %s to "%s" (%s)
(   R   R   R   R   t   tracet   conft   itemst   lowerR!   R/   t   _ConfigurableBase__confcheckedt	   checkconf(   R   t   argsR   t   value(    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR     s    	 $	c      
   C   s  |  i  i ƒ  |  i o d  Sn xD |  i D]9 } |  i  i d | i ƒ | i |  i ƒ |  i | i <q) Wt i |  i i	 ƒ  ƒ i
 t i g  } |  i D] } | | d q’ ~ ƒ ƒ } xD t t | ƒ d t i ƒD]' } |  i  i d | |  i | f ƒ qÎ Wt |  _ |  i  i d ƒ d  S(   Ns   checking %s
R   R   s5   Warning: ignoring unknown parameter "%s" (value: %s)
s   done
(   R   RX   R\   t
   _confitemsR   R,   RY   t   setst   ImmutableSett   keyst
   differencet   sortedt   listR3   R[   t   warningR0   (   R   R9   R8   t   unknown_paramst   param(    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR]     s    

  4 	c         C   s°   |  i  i ƒ  d } |  i i ƒ  } | i ƒ  x} | D]u } | i ƒ  d j o q3 n | o | d 7} n | i ƒ  d j o | d | 7} q3 | d | |  i | f 7} q3 W| S(   NR5   t   configparsers   , RW   s   %s="*"s   %s="%s"(   R   RX   RY   Rc   t   sortR[   (   R   t
   confstringt   namesR   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyt   _confstring$  s    
 (   R-   R.   t   __doc__R   R]   Rn   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR    ö   s   		c           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sÒ   Base class for classes which fork children and wait for them to exit.

    Sub-classes must provide the following data attributes and methods:

        log - an object of type getmailcore.logging.Logger()

    c         C   s©   |  i  i d | ƒ y t i ƒ  \ } } Wn- t j
 o! } |  i  i d | ƒ d  Sn Xt i t i |  i ƒ | |  _	 | |  _
 |  i  i d | | f ƒ t |  _ d  S(   Ns   handler called for signal %ss$   handler called, but no children (%s)s&   handler reaped child %s with status %s(   R   RX   R=   t   waitRR   Rg   t   signalt   SIGCHLDt   _ForkingBase__orig_handlert   _ForkingBase__child_pidt   _ForkingBase__child_statusR0   t   _ForkingBase__child_exited(   R   t   sigt
   stackframet   pidt   rR+   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyt   _child_handler=  s    			c         C   sJ   |  i  i d ƒ t |  _ d  |  _ d  |  _ t i t i |  i	 ƒ |  _
 d  S(   NR5   (   R   RX   R/   Rv   R   Rt   Ru   Rq   Rr   R{   Rs   (   R   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyt   _prepare_childK  s
    			c         C   s  x0 |  i  p% |  i i d | ƒ t i d ƒ q W|  i | j o t d |  i | f ƒ ‚ n t i |  i	 ƒ o) t d |  i t i
 |  i	 ƒ f ƒ ‚ n t i |  i	 ƒ o) t d |  i t i |  i	 ƒ f ƒ ‚ n t i |  i	 ƒ p t d |  i ƒ ‚ n t i |  i	 ƒ } | S(   Ns   waiting for child %dg      ð?s   got child pid %d, not %ds!   child pid %d stopped by signal %ds    child pid %d killed by signal %ds   child pid %d failed to exit(   Rv   R   RX   t   timet   sleepRt   t   getmailOperationErrorR=   t
   WIFSTOPPEDRu   t   WSTOPSIGt   WIFSIGNALEDt   WTERMSIGt	   WIFEXITEDt   WEXITSTATUS(   R   t   childpidt   exitcode(    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyt   _wait_for_childR  s$     
##(   R-   R.   Ro   R{   R|   Rˆ   (    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyR   5  s   		i  c         C   s   |  S(    (    (   t   x(    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyt   <lambda>n  s    c         C   s\   g  } |  D] } | | | ƒ | f q ~ } | i  ƒ  g  } | D] \ } } | | qB ~ S(   N(   Rk   (   t   lR   R8   R9   t   lstt   _[2]t   unusedR*   (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pyRe   n  s    -
Re   (    (    Ro   t   __all__t   sysR=   R}   Rq   R1   Ra   t   getmailcore.exceptionst   getmailcore.loggingR   t   getmailcore.utilitiesR   R   R   R   R   R   R   R   R   R   R	   R
   R   R   t   objectR    R   t
   hexversionRe   t   append(    (    (    s.   /usr/share/getmail4/getmailcore/baseclasses.pys   <module>   sN   	
2'?8