ó
Iü½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 d l m Z d Z d Z d	 Z d
 Z d „  Z d d „ Z d e j j f d „  ƒ  YZ d S(   s/   Extract topics from the original mail message.
iÿÿÿÿN(   t   decode_header(   t   Utils(   t   syslog(   t   change_headert   |s   
t    s   
	c            s…  ˆ  j  s d  S‡  f d †  } g  } | j | | j d d  ƒ ƒ ƒ | j | | j d d  ƒ ƒ ƒ ˆ  j d k rr n> ˆ  j d k  r— | j t | ƒ ƒ n | j t | ˆ  j ƒ ƒ t d  | ƒ } i  } xu ˆ  j D]j \ } } } }	 t	 j
 | j ƒ  ƒ } t j | t j ƒ }
 x+ | D]# } |
 j | ƒ rd | | <PqqWqÏ W| r| j ƒ  | d <t d t j
 | j ƒ  ƒ ˆ  | | d t ƒn  d  S(	   Nc            s&   |  s
 |  St  j |  t  j ˆ  j ƒ ƒ S(   N(   R   t   onelinet
   GetCharSett   preferred_language(   t   h(   t   mlist(    s6   /export/web/mailman/mailman/Mailman/Handlers/Tagger.pyt   _decode,   s    t   subjectt   keywordsi    i   t	   topichitss   X-Topicst   delete(   t   topics_enabledt   appendt   gett   Nonet   topics_bodylines_limitt   extendt   scanbodyt   filtert   topicst   ORt   joint
   splitlinest   ret   compilet
   IGNORECASEt   searcht   keysR   t   NLTABt   False(   R
   t   msgt   msgdataR   t
   matchlinest   hitst   namet   patternt   desct	   emptyflagt   cret   line(    (   R
   s6   /export/web/mailman/mailman/Mailman/Handlers/Tagger.pyt   process'   s0    	
c         C   sZ  d  } |  j ƒ  d k r! |  } nT |  j ƒ  ru |  j ƒ  d k ru x3 |  j ƒ  D] } | j ƒ  d k rL PqL qL Wd  } n  | s g  Sg  } d } t t j j |  d t ƒƒ } xm | d  k sÄ | | k  ry | j	 d ƒ } Wn t
 k
 rë Pn X| j ƒ  sþ q¬ n  | d 7} | j | ƒ q¬ Wt ƒ  } | j t j | ƒ ƒ }  |  j d g  ƒ |  j d g  ƒ S(   Ns
   text/plains   multipart/alternativei    t   decodei   R   R   (   R   t   get_content_typet   is_multipartt   get_payloadt   listt   emailt	   Iteratorst   body_line_iteratort   Truet   popt
   IndexErrort   stripR   t   _ForgivingParsert   parsestrt   EMPTYSTRINGR   t   get_all(   R#   t   numlinest   foundt   linest   linenot   readerR,   t   p(    (    s6   /export/web/mailman/mailman/Mailman/Handlers/Tagger.pyR   P   s4    		
	R:   c           B   s   e  Z d  „  Z RS(   c         C   s.  d } g  } d } xù | j  ƒ  } | s+ Pn  | j ƒ  d } | sE Pn  | d 7} | j d ƒ r | d k r} | j | ƒ q q Pn  | d d k r® | s› Pn  | j | ƒ q n  | j d ƒ } | d k  rÍ Pn  | ré t j | ƒ | | <n  | |  } | | d j ƒ  g } q W| r*t j | ƒ | | <n  d  S(   NR   i    i   s   From s    	t   :(	   t   readlineR   t
   startswitht   set_unixfromR   t   findR!   R   t   lstrip(   t   selft	   containert   fpt
   lastheadert	   lastvalueRA   R,   t   i(    (    s6   /export/web/mailman/mailman/Mailman/Handlers/Tagger.pyt   _parseheaders}   s<    

(   t   __name__t
   __module__RP   (    (    (    s6   /export/web/mailman/mailman/Mailman/Handlers/Tagger.pyR:   w   s   (   t   __doc__R   R3   t   email.Errorst   email.Iteratorst   email.Parsert   email.HeaderR    t   MailmanR   t   Mailman.Logging.SyslogR   t   Mailman.Handlers.CookHeadersR   R   t   CRNLR<   R!   R-   R   R   t   Parsert   HeaderParserR:   (    (    (    s6   /export/web/mailman/mailman/Mailman/Handlers/Tagger.pyt   <module>   s    	)'