ó
;ü½cc           @   s  d  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 m Z d d l	 m
 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 k
 rÛ 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 j	 d „ Z
 RS(   c         C   s"   t  j j |  j ƒ  d ƒ |  _ d  S(   Ns   pending.pck(   t   ost   patht   joint   fullpatht   _Pending__pendfile(   t   self(    (    s.   /export/web/mailman/mailman/Mailman/Pending.pyt   InitTempVars7   s    c   
      O   s÷   | t  k s t d | ƒ ‚ | j d t j ƒ } |  j ƒ  sC t ‚ |  j ƒ  } xc t r´ t j ƒ  } t	 j	 ƒ  | d t j
 ƒ  d } t t | ƒ ƒ j ƒ  } | j | ƒ sR PqR qR W| f | | | <| j d i  ƒ }	 | | |	 | <|  j | ƒ | 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.   /export/web/mailman/mailman/Mailman/Pending.pyt   pend_new:   s    	"c         C   sl   y t  |  j ƒ } Wn3 t k
 rH } | j t j k r= ‚  n  i i  d 6SXz t j | ƒ SWd  | j ƒ  Xd  S(   NR   (   t   openR   t   IOErrort   errnot   ENOENTt   cPicklet   loadt   close(   R   t   fpt   e(    (    s.   /export/web/mailman/mailman/Mailman/Pending.pyt   __loadZ   s     c   
      C   sN  | d } t  j  ƒ  } xS | j ƒ  D]E \ } } | d k rA q# n  | | } | | k r# | | =| | =q# q# Wx- | j ƒ  D] } | j | ƒ sy | | =qy qy Wt j | d <d |  j t j ƒ  | f } t j	 d ƒ } ze t
 | d ƒ }	 z1 t j | |	 ƒ |	 j ƒ  t j |	 j ƒ  ƒ Wd  |	 j ƒ  Xt j | |  j ƒ Wd  t j	 | ƒ Xd  S(   NR   t   versions   %s.tmp.%d.%di   t   w(   R   R4   (   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.   /export/web/mailman/mailman/Mailman/Pending.pyt   __savee   s0    


c         C   sv   |  j  ƒ  } | s | j | ƒ S|  j ƒ  s1 t ‚ | j | t ƒ } | t k rS d S| | =| d | =|  j | ƒ | 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.   /export/web/mailman/mailman/Mailman/Pending.pyt   pend_confirmƒ   s    c         C   sQ   |  j  ƒ  s t ‚ |  j ƒ  } | | | <t j ƒ  | | d | <|  j | ƒ d  S(   NR   (   R   R   R   R   R!   (   R   R(   R@   R   R%   (    (    s.   /export/web/mailman/mailman/Mailman/Pending.pyt   pend_repend™   s
    
(   t   __name__t
   __module__R   R)   R   R!   R   RH   R    R   RI   (    (    (    s.   /export/web/mailman/mailman/Mailman/Pending.pyR	   6   s   		 		c         C   s¼   i  } |  j  d ƒ r |  d =n  | j d i  ƒ } x„ |  j ƒ  D]v \ } } t | ƒ } t j d | d d d d | d d	 | d
 d t j ƒ } t | f | | <| d t j | | <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.   /export/web/mailman/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.   /export/web/mailman/mailman/Mailman/Pending.pyt   <module>   s2   
l