ó
ě$Sc           @   sö   d  Z  d Z 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 Z d d l	 Z	 d d l
 Z
 d d l m Z m Z d d l m Z d   Z d e f d	     YZ d
 e j f d     YZ d   Z d e j f d     YZ d S(   s   Yaroslav Halchenkos%   Copyright (c) 2013 Yaroslav Halchenkot   GPLi˙˙˙˙N(   t   basenamet   dirname(   t   StringIOc         C   sa   t  |   } | j d  r( | d  } n  | t d d g  k r] t  t |    d | } n  | S(   sa   Custom function to include directory name if filename is too common

	Also strip .py at the end
	s   .pyiý˙˙˙t   baset   __init__t   .(   R   t   endswitht   setR   (   t   sR   (    (    s&   /usr/share/fail2ban/testcases/utils.pyt	   mbasename#   s    t	   TraceBackc           B   s#   e  Z d  Z e d  Z d   Z RS(   s7   Customized traceback to be included in debug messages
	c         C   s   d |  _  | |  _ d S(   s   Initialize TrackBack metric

		Parameters
		----------
		compress : bool
		  if True then prefix common with previous invocation gets
		  replaced with ...
		t    N(   t   _TraceBack__prevt   _TraceBack__compress(   t   selft   compress(    (    s&   /usr/share/fail2ban/testcases/utils.pyR   3   s    		c         C   s˛  t  j d d  d  } g  | D]3 } t | d  t | d  t | d  g ^ q } g  | D]= } | d d k p | d j d  s] | d | d	 g ^ q] } | d g } xV | d D]J } | d | d
 d k rő | d
 d c d | d 7<q¸ | j |  q¸ Wd j g  | D]$ } d t | d  | d f ^ q } |  j rŽ| } t	 j
 j |  j | f  }	 t j d d |	  }
 |
 d k r˘d | t |
  } n  | |  _ n  | S(   Nt   limitid   iţ˙˙˙i    i   t   unittests   logging.__init__s	   /unittesti   i˙˙˙˙s   ,%st   >s   %s:%ss   >[^>]*$R   s   ...(   s   unittests   logging.__init__(   t	   tracebackt   extract_stackR
   R   t   strR   t   appendt   joinR   t   ost   patht   commonprefixR   t   ret   subt   len(   R   t   ftbt   xt   entriest   et   entries_outt   entryt   sftbt	   prev_nextt   common_prefixt   common_prefix2(    (    s&   /usr/share/fail2ban/testcases/utils.pyt   __call__?   s(    @-	1	(   t   __name__t
   __module__t   __doc__t   FalseR   R)   (    (    (    s&   /usr/share/fail2ban/testcases/utils.pyR   /   s   t   FormatterWithTraceBackc           B   s    e  Z d  Z d   Z d   Z RS(   s}   Custom formatter which expands %(tb) and %(tbc) with tracebacks

	TODO: might need locking in case of compressed tracebacks
	c         O   s>   t  j j |  d | | | d | k } t d |  |  _ d  S(   Nt   fmts   %(tbc)sR   (   t   loggingt	   FormatterR   R   t   _tb(   R   R/   t   argst   kwargsR   (    (    s&   /usr/share/fail2ban/testcases/utils.pyR   `   s    c         C   s)   |  j    | _ | _ t j j |  |  S(   N(   R2   t   tbct   tbR0   R1   t   format(   R   t   record(    (    s&   /usr/share/fail2ban/testcases/utils.pyR7   e   s    (   R*   R+   R,   R   R7   (    (    (    s&   /usr/share/fail2ban/testcases/utils.pyR.   [   s   	c           C   s   d  S(   N(    (    (    (    s&   /usr/share/fail2ban/testcases/utils.pyt
   mtimesleepi   s    t   LogCaptureTestCasec           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   se   t  j d  } | j |  _ | j |  _ t   |  _ t  j |  j  g | _ | j	 t
 t  d   d  S(   Nt   fail2bant   DEBUG(   R0   t	   getLoggert   levelt
   _old_levelt   handlerst   _old_handlersR   t   _logt   StreamHandlert   setLevelt   getattr(   R   t   logSys(    (    s&   /usr/share/fail2ban/testcases/utils.pyt   setUpp   s    c         C   s+   t  j d  } |  j | _ |  j | _ d S(   s   Call after every test case.R;   N(   R0   R=   RA   R@   R?   R>   (   R   RF   (    (    s&   /usr/share/fail2ban/testcases/utils.pyt   tearDown~   s    c         C   s   | |  j  j   k S(   N(   RB   t   getvalue(   R   R	   (    (    s&   /usr/share/fail2ban/testcases/utils.pyt
   _is_logged   s    (   R*   R+   RG   RH   RJ   (    (    (    s&   /usr/share/fail2ban/testcases/utils.pyR:   n   s   		(   t
   __author__t   __copyright__t   __license__R   R0   R   R   t   tempfilet   syst   timeR   t   os.pathR   R   R   R
   t   objectR   R1   R.   R9   t   TestCaseR:   (    (    (    s&   /usr/share/fail2ban/testcases/utils.pyt   <module>   s   `	,	