Ñò
?]Mc           @   s  d  Z  d d k Z d d k Z d d k Z d d k Z d d k Z d d k l Z d d k l Z d d k	 l
 Z
 d Z d Z d Z d	 Z d
 Z d Z e e e e e e f Z y e e f Wn e j
 o d Z d Z n Xg  Z d d d „  ƒ  YZ d „  Z d S(   s1   Track pending actions which require confirmation.iÿÿÿÿN(   t   mm_cfg(   t   UserDesc(   t   sha_newt   St   Ut   Ct   Ht   Et   Pi   i    t   Pendingc           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z e d „ Z e i	 d „ Z
 RS(   c         C   s"   t  i i |  i ƒ  d ƒ |  _ d  S(   Ns   pending.pck(   t   ost   patht   joint   fullpatht   _Pending__pendfile(   t   self(    (    s#   /usr/lib/mailman/Mailman/Pending.pyt   InitTempVars7   s    c   
      O   sü   | t  j p t d | ‚ | i d t i ƒ } |  i ƒ  p t ‚ |  i ƒ  } xg t o_ t i ƒ  } t	 i	 ƒ  | d t i
 ƒ  d } t t | ƒ ƒ i ƒ  } | i | ƒ p PqS qS W| f | | | <| i d h  ƒ }	 | | |	 | <|  i | ƒ | S(   sM   Create a new entry in the pending database, returning cookie for it.
        s   op: %st   lifetimeg      ð?t	   evictions(   t   _ALLKEYSt   AssertionErrort   getR    t   PENDING_REQUEST_LIFEt   Lockedt   _Pending__loadt   Truet   timet   randomt   clockR   t   reprt	   hexdigestt   has_keyt
   setdefaultt   _Pending__save(
   R   t   opt   contentt   kwsR   t   dbt   nowt   xt   cookieR   (    (    s#   /usr/lib/mailman/Mailman/Pending.pyt   pend_new:   s      "
c         C   sp   y t  |  i ƒ } Wn7 t j
 o+ } | i t i j o ‚  n h h  d 6SXz t i | ƒ SWd  | i ƒ  Xd  S(   NR   (   t   openR   t   IOErrort   errnot   ENOENTt   cPicklet   loadt   close(   R   t   fpt   e(    (    s#   /usr/lib/mailman/Mailman/Pending.pyt   __loadZ   s     c   
      C   sT  | d } t  i  ƒ  } xW | i ƒ  D]I \ } } | d j o q# n | | } | | j o | | =| | =q# q# Wx/ | i ƒ  D]! } | i | ƒ p | | =q} q} Wt i | d <d |  i t i ƒ  | f } t i	 d ƒ } ze t
 | d ƒ }	 z1 t i | |	 ƒ |	 i ƒ  t i |	 i ƒ  ƒ Wd  |	 i ƒ  Xt i | |  i ƒ Wd  t i	 | ƒ Xd  S(   NR   t   versions   %s.tmp.%d.%di   t   w(   s	   evictionss   version(   R   t   itemst   keysR   R    t   PENDING_FILE_SCHEMA_VERSIONR   R
   t   getpidt   umaskR*   R.   t   dumpt   flusht   fsynct   filenoR0   t   rename(
   R   R%   R   R&   R(   t   datat	   timestampt   tmpfilet   omaskR1   (    (    s#   /usr/lib/mailman/Mailman/Pending.pyt   __savee   s4    
 
 
c         C   s|   |  i  ƒ  } | p | i | ƒ S|  i ƒ  p t ‚ | i | t ƒ } | t j o d S| | =| d | =|  i | ƒ | S(   s    Return data for cookie, or None if not found.

        If optional expunge is True (the default), the record is also removed
        from the database.
        R   N(   R   R   R   R   t   _missingt   NoneR!   (   R   R(   t   expungeR%   R#   (    (    s#   /usr/lib/mailman/Mailman/Pending.pyt   pend_confirmƒ   s    c         C   sS   |  i  ƒ  p t ‚ |  i ƒ  } | | | <t i ƒ  | | d | <|  i | ƒ d  S(   NR   (   R   R   R   R   R!   (   R   R(   R@   R   R%   (    (    s#   /usr/lib/mailman/Mailman/Pending.pyt   pend_repend™   s
    
(   t   __name__t
   __module__R   R)   R   R!   R   RH   R    R   RI   (    (    (    s#   /usr/lib/mailman/Mailman/Pending.pyR	   6   s   		 		c         C   s¾   h  } |  i  d ƒ o |  d =n | i d h  ƒ } x„ |  i ƒ  D]v \ } } t | ƒ } t i d | d d d d | d d	 | d
 d t i ƒ } t | f | | <| d t i | | <q@ W| S(   Nt   lastculltimeR   t   addressi    t   fullnamet    t   passwordi   t   digesti   t   langiÿÿÿÿ(	   R   R    R6   t   strR   R    t   DEFAULT_SERVER_LANGUAGEt   SUBSCRIPTIONR   (   t   olddbR%   R   R(   R@   t   ud(    (    s#   /usr/lib/mailman/Mailman/Pending.pyt   _update¢   s     	

(    (   t   __doc__R
   R   R,   R   R.   t   MailmanR    R   t   Mailman.UtilsR   RU   t   UNSUBSCRIPTIONt   CHANGE_OF_ADDRESSt   HELD_MESSAGEt	   RE_ENABLEt   PROBE_BOUNCER   R   t   Falset	   NameErrorRE   R	   RX   (    (    (    s#   /usr/lib/mailman/Mailman/Pending.pyt   <module>   s2   l
