
_W                 @   s   d  Z  d d l Z d d l Z e j d  Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d d  Z
 d d   Z d S)z
IRC Parser - parse.py
    Nz=^(?:(\S+)[:,])?(?:(.+?)/)?s/(.+?)/([^/]+)/?(?:([gixs]{0,4}))?c             C   sr   |  j  d  r. d d d |  j   d
 i } n@ |  j d d  } d | d d | d d d	  d | d i } | S)z Parse an IRC protocol message PINGmethodarg       hostr   N)
startswithsplit)msginfoZsplitmsg r   /opt/Infobot/utils/parse.pyparse
   s    !r   c             C   s   yh t  | t   t    } | d k	 rg | |  _ t |  j  t k rc t |  j  |  _ t |  } | SWn t t f k
 r y t	 | t    Wnb y t	 | t    WnC y t	 | t   t    Wn t	 | t   t    Yn XYn XYn XYn Xd S)z Evaluate python code. N)
evalglobalslocalsZleotypetuplelist	NameErrorSyntaxErrorexec)selfnickchanr   outputr   r   r   evaluate   s&    	r   c             C   s:   d } x- t  | |  D] \ } } t |  | |  q Wd  S)Ntargetqual
to_replacereplacementflags)ztargetzqualz
to_replacezreplacementzflags)zipsetattr)	sedobjectgroupsZgroup_typeskvr   r   r   populate0   s    r*   c             C   s   d } d } | s6 t  |  d |  t  |  d |  d  Sxk | D]c } | d k r\ | t j O} | d k ru | t j O} | d k r | t j O} | d k r= d } q= Wt  |  d |  t  |  d |  d  S)	Nr   r   r#   countixsg)r%   re
IGNORECASEXS)r&   r#   r,   r+   itemr   r   r   	set_flags5   s"    
r5   c             C   sX   xQ |  j  j   D]@ \ } } | j d  s< | j d  r t d | | f  q Wd  S)N_z%s: %s)__dict__itemsr
   endswithprint)r&   r(   r)   r   r   r   debugK   s     r;   c             C   s   | |  j  j k r d Sx |  j  j | D] } | j |  j  j | k sI q' | j } yk | r t j | |  r t j | |  r t j |  r | Sn& t j | |  r t j |  r | SWq' t k
 r Yq' Xq' Wd S)N )	stateZmessageschannelZchannelsr   r0   search	SED_REGEXBaseException)botZsedregexr   r   r    messager   r   r   r   get_messageP   s    	4"	rD   c             C   s  t  d t   i   } t j |  s( d St j |  j   } t | |  t | | j  |  j rm t |  | j	 r | j	 } | j
   } | j r t |  | j | | d | j | _ n t |  | j | |  | _ | j s d Sy t j | j | j | j | j | j  } d | k rV| j d d  d d d	  } |  j | d | | f  S|  j | d | | f  SWn t k
 rt j   Yn Xd S)
z Perform the sedding Z	SedObjectNr    r   r   z* %s %sz<%s> %sr	   )r   r   r@   matchr'   r*   r5   r#   r;   r   lowerr    rD   r!   r   r0   subr"   r+   r   rA   	tracebackZ	print_exc)rB   r   r   r   r.   r'   Znew_msgr   r   r   sedb   s0    	
			'	 * rJ   )__doc__rI   r0   compiler@   r   r   r*   r5   r;   rD   rJ   r   r   r   r   <module>   s   
