
Ecc           @   s  d  d l  m 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 m	 Z	 m
 Z
 m Z d  d l Z d  d l m Z d  d l m Z e d  Z d Z e Z d Z d  d	 l m Z d  d
 l m Z d  d l m Z d  d l m Z d  d l m Z m Z y e e  f Wn e! k
 r9d Z d Z  n Xd Z" e j# d  Z$ d   Z% d d d d g Z& d   Z' d f  d     YZ( d e( f d     YZ) d f  d     YZ* d f  d     YZ+ d  e) f d!     YZ, d S("   i(   t   nested_scopesN(   t	   parseaddrt   parsedate_tzt	   mktime_tzt
   formatdate(   t   StringIO(   t	   lowercasei   s   0.09 (Mailman edition)id   (   t   mm_cfg(   t   Errors(   t   ArchiverMailbox(   t   syslog(   t   _t   C_i   i    t    s   (<.*>)c         C   s>   |  s
 d S|  d d k r: |  d d k r: |  d d !}  n  |  S(   s:   Remove quotes or parenthesization from a Message-ID stringt    i    s   "<([is   ">)]i   (    (   t   s(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   strip_separators)   s
     t   vant   vont   dert   dec         C   s   d |  k r |  S|  j    } t |  d } | d k r< |  S|  j   |  k s` |  j   |  k r x | d k r | | d j   t k r | d } qc WnO xL | d k r | | d d t k s | | d j   t k r | d } q Wt j | d | | d ! d t j | |   }  |  S(   s+   Canonicalize a name into Last, First formatt   ,i   i    is   , (   t   splitt   lent   uppert   lowert   smallNamePartsR   t   SPACEt   join(   t   authort   Lt   i(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt	   fixAuthor3   s    $)'3t   DatabaseInterfacec           B   s   e  Z d    Z d   Z d   Z d   Z d d d d  Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z d   Z RS(   c         C   s   d  S(   N(    (   t   self(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   __init__L   R   c         C   s   d  S(   N(    (   R"   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   closeM   R   c         C   s   d  S(   N(    (   R"   t   archivet   msgid(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt
   getArticleN   R   c         C   s   d  S(   N(    (   R"   R%   R&   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt
   hasArticleO   R   c         C   s   d  S(   N(    (   R"   R%   t   articlet   subjectR   t   date(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt
   addArticleP   s    c         C   s   d  S(   N(    (   R"   R%   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt	   firstdateR   R   c         C   s   d  S(   N(    (   R"   R%   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   lastdateS   R   c         C   s   d  S(   N(    (   R"   R%   t   index(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   firstT   R   c         C   s   d  S(   N(    (   R"   R%   R/   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   nextU   R   c         C   s   d  S(   N(    (   R"   R%   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   numArticlesV   R   c         C   s   d  S(   N(    (   R"   R%   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt
   newArchiveW   R   c         C   s   d  S(   N(    (   R"   R%   t   keyR&   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   setThreadKeyX   R   c         C   s   d  S(   N(    (   R"   R*   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   getOldestArticleY   R   N(   t   __name__t
   __module__R#   R$   R'   R(   t   NoneR,   R-   R.   R0   R1   R2   R3   R5   R6   (    (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR!   K   s   											t   Databasec           B   s2   e  Z d  Z d   Z d d d d  Z d   Z RS(   s   Define the basic sorting logic for a database

    Assumes that the database internally uses dateIndex, authorIndex,
    etc.
    c         C   s1   i  |  _  i  |  _ i  |  _ i  |  _ i  |  _ d  S(   N(   t	   dateIndext   authorIndext   subjectIndext   articleIndext   changed(   R"   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR#   e   s
    				c         C   sX  | p | j  | j | j f } | p* | j | j | j f } | pH | j | j f } | j |  j | <| j |  j | <| j |  j | <|  j |  d  |  j	 | | j f <| j
 }	 |	 d  k	 r|  j j |	  r|  j | |	  }
 |
 j | j d t | j  d } n | j d t | j  d } | | _ | | j f } |  j | | | j  d  S(   Nt   .t   -(   R   R+   R&   R*   R;   R<   R=   t   store_articleR9   R?   t   parentIDR>   t   has_keyR'   t	   threadKeyt   strt   sequenceR5   (   R"   R%   R)   R*   R   R+   t	   authorkeyt
   subjectkeyt   datekeyRC   t   parentt   myThreadKeyR4   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR,   n   s$    	(	c         C   sP   | j  } | j } g  | _  | ` t j |  |  j | j <| | _  | | _ d S(   s0   Store article without message body to save spaceN(   t   bodyt	   html_bodyt   picklet   dumpsR>   R&   (   R"   R)   t   tempt   temp2(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyRB      s    				N(   R7   R8   t   __doc__R#   R9   R,   RB   (    (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR:   [   s
   		t   Articlec           B   sA   e  Z e j   Z d d  g  d  Z d   Z d   Z d   Z RS(   i    c         C   s  | d  k r d  S| |  _ d  |  _ d  |  _ t | d  } | d k r\ t |  j  |  _ n	 | |  _ | j d  r t | d  |  _ n t	 d  |  _ |  j d k r t	 d  |  _ n  |  j
 |  t | j d d   \ |  _ |  _ | d } |  j r#| d  k	 r#t |  \ } |  _ n  t |  j  |  _ t |  j  |  _ |  j d k re|  j |  _ n  | d |  _ | d |  _ | d	 |  _ | d
 } | d  k rd |  _ n? t j |  } | d  k rd |  _ n t | j d   |  _ | d }	 |	 d  k rg  |  _ n t t |	 j    |  _ i  |  _ x1 | D]) }
 | j |
  r7| |
 |  j |
 <q7q7Wt | j d t  p| j   j d d  d  } | j   |  _ d  S(   Ns
   Message-IdR   t   Subjects
   No subjectt   Froms   Reply-Tos   in-reply-tot
   referencess
   message-ids   In-Reply-Toi   t
   Referencest   decodes   

(    R9   RG   RC   RE   R   RF   R&   RD   R*   R   t	   _set_dateR   t   getR   t   emailt   _in_reply_tot   _referencest   _message_idt   in_reply_tot	   msgid_patt   searcht   groupRW   t   mapR   t   headersR   t   get_payloadt   Truet	   as_stringt	   readlinesRM   (   R"   t   messageRG   t   keepHeaderst   idt   et   ignoreauthort   i_r_tt   matchRW   R   R   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR#      sX    				 $

 
	c         C   s#  d   } | | j  d   } | d  k rB | | j  d   } n  | d  k r t j d t j  } | | j d | j  d d    } n  | d  k r | t j d d | j   p d   } n  | d  k r |  j d } n  | |  _ d	 | |  _ | j  d  p| j  d  pt	 |  |  _
 d  S(
   Nc         S   su   |  s
 d  St |   } y= t |  } | d k  sJ | t j   t j k rN d  S| SWn t t t f k
 rp d  SXd  S(   Ni    (	   R9   R   R   t   timeR   t!   ARCHIVER_ALLOWABLE_SANE_DATE_SKEWt	   TypeErrort
   ValueErrort   OverflowError(   t   datestrR+   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt	   floatdate   s    R+   s   x-list-received-dates   ^.*;\s*R   t   receiveds   From \s*\S+\s+i   s   %011i(   R[   R9   t   ret   compilet   DOTALLt   subt   get_unixfromt   _last_article_timeR+   R   Rv   (   R"   Rj   Rw   R+   t   rec_re(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyRZ      s"    	'	c         C   s   d t  |  j  d S(   Ns   <Article ID = t   >(   t   reprR&   (   R"   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   __repr__  s    c         C   s   d  S(   N(    (   R"   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   finished_update_article  s    N(	   R7   R8   Rq   R~   R9   R#   RZ   R   R   (    (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyRT      s
   D	 	t   Tc           B   sU  e  Z d  Z d Z d Z d% d d% d  Z d   Z d   Z d   Z	 g  d  Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d% 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& RS(&   i  i  s   .htmli   c         C   s  | d  k r t j   |  _ n t j j |  } | |  _ | |  _ y t j |  j  Wn t j k
 r } | \ } } | d k r t j |  q |  j	 t
 d  |  j  t j d  } z t j |  j |  j  Wd  t j |  Xn Xy | s t  n  t t j j |  j d  d  } |  j	 t
 d   t j |  }	 | j   x* |	 j   D] \ }
 } t |  |
 |  qVWWn; t t f k
 rg  |  _ g  |  _ d |  _ d |  _ n X| |  j k r| |  _ n  d  S(   Ni   s   Creating archive directory i    s   pipermail.pckt   rs   Reloading pickled archive state(   R9   t   ost   getcwdt   basedirt   patht
   expandusert   databaset   statt   errorRj   R   t   umaskt   mkdirt   DIRMODEt   IOErrort   openR   RO   t   loadR$   t   itemst   setattrt   EOFErrort   archivest   _dirty_archivesRG   t
   update_TOC(   R"   R   t   reloadR   t   errdatat   errnot   errmsgt   omaskt   ft   dR4   t   value(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR#     s@    			!
			c         C   s   |  j    d |  _ |  j   |  j t d  t j j |  j d   |  j	 j
   |  `	 t j d  } z% t t j j |  j d  d  } Wd t j |  Xt j |  j   |  | j
   d S(   sB   Close an archive, save its state, and update any changed archives.i    s   Pickling archive state into s   pipermail.pcki   t   wN(   t   update_dirty_archivesR   t	   write_TOCRj   R   R   R   R   R   R   R$   R   R   RO   t   dumpt   getstate(   R"   R   R   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR$   O  s    
	
%c         C   s   |  j  S(   N(   t   __dict__(   R"   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR   b  s    c         C   s   |  j  j |  } |  j  j |  } t j t j t j     } | |  _ | |  _ | |  _ |  j  j |  |  _ | |  _	 t
 |  _ d  S(   N(   R   R-   R.   Rq   t   asctimet	   localtimet   archivedateR2   t   sizeR%   t   __version__t   version(   R"   R%   R-   R.   t   now(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   __set_parameterso  s    				c         C   sL  d  } | j r | j } n-| j r t |  j j | j  } | sF d  S|  j j |  j | d  } xE | d D]9 } |  j j |  j |  } | j	 | j	 k rm | } qm qm W| j
 } n y~ |  j j | j  \ } }	 | G|	 GH|  j j   | j d  \ }
 } | j G|
 G| GH|
 | j k r3|	 | k r3|	 } n  Wn t k
 rGn X| S(   Ni    i   s    (   R9   R`   RW   t   filterR>   RD   R   R'   R%   R+   R&   R=   t   set_locationR*   R1   R   t   KeyError(   R"   R)   t   childrenRC   t   refst   maxdatet   reft   aR4   t   tempidR*   R+   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   __findParent  s2    			c         C   s#  |  j  j |  j d  |  j  j |  j d  } x | d  k	 ry |  j  j |  j |  } Wn t k
 rl n X| j d  k s |  j  j |  j | j  r nC |  j  j |  j | j  } | j	 | j
 d t | j  d | _	 |  j  j |  j | j	 | j f |  |  j  j |  j d  } q1 Wd  S(   Nt   threadR+   R@   RA   (   R   t
   clearIndexR%   R0   R9   R'   R   RC   R(   RE   R+   RF   RG   R5   R&   R1   (   R"   R&   R)   RK   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   updateThreadedIndex  s$    (c         C   sy   | |  _  |  j t d   t j j |  j |  } |  j |  x! d D] } |  j | | |  qH W|  j	 | |  d  S(   Ns.   Updating index files for archive [%(archive)s]t   DateRU   t   Author(   R   RU   R   (
   R%   Rj   R   R   R   R   R   t   _T__set_parameterst   _update_simple_indext   _update_thread_index(   R"   R%   t   arcdirt   hdr(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   update_archive  s    	c         C   s   |  j  d |  | |  _ | j   } |  j | |  |  j   d } |  j j | |  } xl | d  k	 r y |  j j |  j	 |  } Wn t
 k
 r n X| d } |  j |  |  j j | |  } q^ W|  j   |  j   d  S(   Ns     i    i   (   Rj   t   typeR   t   _open_index_file_as_stdoutt   write_index_headerR   R0   R9   R'   R%   R   t   write_index_entryR1   t   write_index_footert   _restore_stdout(   R"   R   R%   R   t   countR&   R)   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s"    	


c         C   s  |  j  t d   |  j | d  d |  _ |  j   d  g d } d } |  j j |  j d  } xZ | d  k	 r | d k  r |  j j	 |  j |  | | <| d } |  j j
 |  j d  } qd Wx| d d  k	 rt| d } d  } | d  k	 r | j } n  | d  k	 r|  j | | j d  d  |  j j j | | j f  r| d } | d }	 |  j | | | |	  |	 d  k	 rd  |  j j | |	 j f <n  | d  k	 r| | j f }
 |  j j j |
  s|  j | | | d	 | d  q|  j j |
 =qqn  | d	 r| d	 j   n  | d } | d  k r:| j |  n | j |  j j	 |  j |   |  j j
 |  j d  } q W|  j   |  j   d  S(
   Ns     ThreadR   t   Threadi   i   i   RA   i   i    (   Rj   R   R   R   R   R9   R   R0   R%   R'   R1   RE   t   write_threadindex_entryR   R?   RD   R&   t   update_articleR   t   appendR   R   (   R"   R%   R   R   R   R&   R)   t   artkeyt   a1t   a3R4   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     sL    	




!


c         C   sn   t  j j | | |  j  } t  j d  } z t | d  |  _ Wd  t  j |  Xt j |  _	 |  j t _ d  S(   Ni   R   (
   R   R   R   t	   INDEX_EXTR   R   t   _T__ft   syst   stdoutt
   _T__stdout(   R"   R   t
   index_nameR   R   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s)   |  j  t _ |  j j   |  ` |  `  d  S(   N(   R   R   R   R   R$   (   R"   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR   !  s    c         C   s.   x |  j  D] } |  j |  q
 Wg  |  _  d  S(   N(   R   R   (   R"   R   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR   (  s    c         C   s   t  | |  S(   N(   RT   (   R"   t   msgRG   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   _makeArticle1  s    c   
      C   s  t  | |  j  } | d  k r' d } n  d } | rC | j t  n  xT | | k  r y | j   } Wn t j k
 r{ qF n X| d  k r d  S| d 7} qF W| r | j t  n  x y | j	   } | j   } Wn: t j k
 r q n$ t
 k
 rt d d |    n X| d  k rPn  | d k r.q n  | j d d  } |  j t d   |  j | |  j  }	 |  j d 7_ |  j |	  | d  k	 r| | k rPn  | d 7} q Wd  S(	   Ni    i   R   s*   uncaught archiver exception at filepos: %sR   s
   message-ids   n/as   #%(counter)05d %(msgid)s(   R	   t   maillistR9   t   skippingRg   R1   R   t   DiscardMessaget   Falset   tellt	   ExceptionR
   R[   Rj   R   R   RG   t   add_article(
   R"   t   inputt   startt   endt   mboxt   countert   mt   posR&   R   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   processUnixMailbox4  sL    		c         C   s   |  j  j |  d |  _ |  j j |  y t j |  Wnt t j k
 r } | \ } } | d k r t j d  } z t j	 | |  j
  Wd  t j |  Xq t j |  n X|  j | |  d  S(   Ni   i   i    (   R   R   R   R   R3   R   R   R   R   R   R   t   open_new_archive(   R"   R%   t
   archivedirR   R   R   R   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   new_archive]  s    	c         C   s6  |  j  |  } | s d  St |  t d  k r= | g } n  |  j |  | _ } |  j |  } x| D]} | |  _ t j j |  j	 |  } | |  j
 k r |  j | |  n  |  j | | t j j | |   | j j d  r t | j d  } n t | j  } | j j d  r3| j d j   } n | j j   } |  j | |  | _ }	 |	 r|  j j | |	  }
 |
 j | j d t | j  d | _ n! | j d t | j  d | _ | j | j f } |  j j | | | j  |  j j | | d | d | | |  j k ri |  j j |  qi qi Wd  S(   NR   R   t   strippedR@   RA   R*   (    t   get_archivesR   t   get_filenamet   filenamet   format_articleR%   R   R   R   R   R   R   t   write_articlet   decodedRD   R    R   R   R*   t   get_parent_infoRC   R   R'   RE   R+   RF   RG   R&   R5   R,   R   R   (   R"   R)   R   R   RQ   t   archR   R   R*   RC   RK   R4   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR   p  s>    	
+!c   	      C   sI  d  } | j r6 |  j j | | j  r6 | j } q6 n  | r | j r |  j | j  } | r |  j j | | d  } xB | d D]6 } |  j j | |  } | j | j k r | } q q W| j } q n  | s | j	 j
 d  r | j	 d j   } n | j j   } |  j j | |  } n  | rE|  j j | |  rEd  } n  | S(   Ni    i   R   (   R9   R`   R   R(   RW   t   _remove_external_referencesR'   R+   R&   R   RD   R   R*   R6   (	   R"   R%   R)   RC   R   R   R   R   R*   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s*    		c         C   s   t  j d  } z t | d  } Wd  t  j |  Xt j | } t _ |  j |  t j j | j  |  j |  | t _ | j	   d  S(   Ni   R   (
   R   R   R   R   R   t   write_article_headert
   writelinesRM   t   write_article_footerR$   (   R"   R/   R)   R   R   R   t   temp_stdout(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    	c         C   sC   g  } x6 | D]. } |  j  j |  j |  r | j |  q q W| S(   N(   R   R(   R%   R   (   R"   R   t   keepR   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s
    c         C   s   d  S(   N(    (   R"   R)   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d S(   s   Return a list of indexes where the article should be filed.
        A string can be returned if the list only contains one entry,
        and the empty list is legal.N(    (   R"   R)   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   R)   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   R)   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   R)   t   depth(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   R)   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   R)   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   R)   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   write_article_entry  s    c         C   s   d  S(   N(    (   R"   R   R)   t   prevR1   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   R%   t   dir(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     s    c         C   s   d  S(   N(    (   R"   R   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyRj     s    N('   R7   R8   R   t   FILEMODER   R9   R#   R$   R   R   t   _T__findParentR   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   Rj   (    (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR     sH   5			 	#			2	
				)		-			
													t   BSDDBdatabasec           B   s   e  Z e j Z d    Z d   Z d   Z d   Z d d 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 RS(   c         C   s=   g  |  _  i  |  _ d  |  _ t j j |  |  _ i  |  _ d  S(   N(	   t   _BSDDBdatabase__cachekeyst   _BSDDBdatabase__cachedictR9   t"   _BSDDBdatabase__currentOpenArchiveR   R   R   R   R?   (   R"   R   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR#     s
    			c         C   sb   |  j  |  d } y7 |  j j   \ } } t j t j t |    } Wn t k
 r] n X| S(   NR9   (   t   _BSDDBdatabase__openIndicesR;   R0   Rq   R   R   t   floatR   (   R"   R%   R+   R&   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR-     s    "c         C   sb   |  j  |  d } y7 |  j j   \ } } t j t j t |    } Wn t k
 r] n X| S(   NR9   (   R  R;   t   lastRq   R   R   R  R   (   R"   R%   R+   R&   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR.     s    "c         C   s   |  j  |  t |  j  S(   N(   R  R   R;   (   R"   R%   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR2     s    c         C   s*   |  j  |  |  j | | | | |  d  S(   N(   R  t    _BSDDBdatabase__super_addArticle(   R"   R%   R)   R*   R   R+   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR,     s    c         C   s   |  j  | k r d  Sd d  l } |  j   t j j |  j d  } t j d  } z, y t j | d  Wn t	 k
 rz n XWd  t j |  XxQ d D]I } t j j | | d
 |  } | j
 | d  } t |  | d |  q W| |  _  d  S(   NiR   i    i  R+   R   R*   R)   R   RA   t   ct   Index(   R+   R   R*   R)   R   (   R  t   bsddbt   _BSDDBdatabase__closeIndicesR   R   R   R   R   R   t   OSErrort   btopenR   (   R"   R%   R  R   R   R   R   t   t(    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   __openIndices  s"    
c         C   s   |  j  d  k	 r n  x d D] } | d } t |  |  r t |  |  } | d k r t |  d  sn i  |  _ n  t |  |  j |  j  <n  | j   t |  |  q q Wd  |  _  d  S(	   NR+   R   R*   R   R)   R  t   archive_length(   R+   R   R*   R   R)   (   R  R9   t   hasattrt   getattrR  R   R$   t   delattr(   R"   R   t   attrR/   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   __closeIndices4  s    

c         C   s   |  j    d  S(   N(   R  (   R"   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR$   C  s    c         C   s   |  j  |  |  j j |  S(   N(   R  R>   RD   (   R"   R%   R&   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR(   E  s    c         C   s   |  j  |  | |  j | <d  S(   N(   R  t   threadIndex(   R"   R%   R4   R&   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR5   H  s    c         C   s   |  j  |  |  j j |  rJ |  j j |  |  j j |  |  j | St |  j  t k r |  j d |  j d } |  _ |  j | =n  |  j | } t	 j
 |  } |  j j |  | |  j | <| S(   Ni    i   (   R  R  RD   R  t   removeR   R   t	   CACHESIZER>   RO   t   loads(   R"   R%   R&   t   delkeyR   R)   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR'   K  s    
c         C   sS   |  j  |  t |  | d  } y | j   \ } } | SWn t k
 rN d  SXd  S(   NR  (   R  R  R0   R   R9   (   R"   R%   R/   R4   R&   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR0   [  s    c         C   sS   |  j  |  t |  | d  } y | j   \ } } Wn t k
 rJ d  SX| Sd  S(   NR  (   R  R  R1   R   R9   (   R"   R%   R/   R4   R&   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR1   c  s    c         C   s   |  j  |  | j   } yR |  j j |  \ } } |  j j   | j d  \ } } | | k rf d  S| SWn t k
 r d  SXd  S(   Ns    (   R  R   R=   R   R1   R   R9   R   (   R"   R%   R*   R4   R   t   subject2R+   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR6   m  s    c         C   s   d  S(   N(    (   R"   R%   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR3   z  s    c         C   s   |  j  |  t |  | d  } d } y |  j j   \ } } Wn t k
 rX d } n XxG | s |  j | =y |  j j   \ } } Wq\ t k
 r d } q\ Xq\ Wd  S(   NR  i    i   (   R  R  R  R0   R   R1   (   R"   R%   R/   t   finishedR4   R&   (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR   }  s    
	
N(   R7   R8   R:   R,   R	  R#   R-   R.   R2   R9   R  R  R$   R(   R5   R'   R0   R1   R6   R3   R   (    (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyR    s$   			
	
									
		(-   t
   __future__R    t   mailboxR   Ry   R   Rq   t   email.UtilsR   R   R   R   t   cPickleRO   t	   cStringIOR   t   stringR   R   t   VERSIONR  t   MailmanR   R   t   Mailman.MailboxR	   t   Mailman.Logging.SyslogR
   t   Mailman.i18nR   R   Rg   R   t	   NameErrorR   Rz   Ra   R   R   R    R!   R:   RT   R   R  (    (    (    s9   /export/web/mailman/mailman/Mailman/Archiver/pipermail.pyt   <module>   sD   "

		Ko 