ó
‚•oTc           @   s©   d  d l  Z  d  d l Z d e j j _ e j d ƒ Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 Z
 d  d l
 m Z d e f d „  ƒ  YZ d e j f d „  ƒ  YZ d S(	   iÿÿÿÿNi   s   %(message)s(   t   _cperrort
   LogManagerc           B   s7  e  Z d Z d Z d Z d  Z d d d „ Z d „  Z d d e	 j
 e d „ Z d „  Z d „  Z d „  Z d	 „  Z d d
 „ Z d „  Z d „  Z e e e d d ƒZ d „  Z d „  Z d „  Z d „  Z e e e d d ƒZ d „  Z d „  Z e e e d d ƒZ d „  Z d „  Z d „  Z  e e e  d d ƒZ! RS(   s;   %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"t   cherrypyc         C   sÅ   | |  _  | |  _ | d  k rM t j d | ƒ |  _ t j d | ƒ |  _ n8 t j d | | f ƒ |  _ t j d | | f ƒ |  _ |  j j t j ƒ |  j j t j	 ƒ t
 j j d |  j ƒ d  S(   Ns   %s.errors	   %s.accesss   %s.error.%ss   %s.access.%st   graceful(   t   logger_roott   appidt   Nonet   loggingt	   getLoggert	   error_logt
   access_logt   setLevelt   DEBUGt   INFOR   t   enginet	   subscribet   reopen_files(   t   selfR   R   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   __init__   s    		c         C   sƒ   x| |  j  |  j f D]h } x_ | j D]T } t | t j ƒ r# | j ƒ  | j j ƒ  t	 | j
 | j ƒ | _ | j ƒ  q# q# Wq Wd  S(   N(   R	   R
   t   handlerst
   isinstanceR   t   FileHandlert   acquiret   streamt   closet   opent   baseFilenamet   modet   release(   R   t   logt   h(    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyR   %   s    
t    c         C   sH   | r | t  j ƒ  7} n  |  j j | d j |  j ƒ  | | f ƒ ƒ d  S(   Nt    (   R    t
   format_excR	   R   t   joint   time(   R   t   msgt   contextt   severityt	   traceback(    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   error/   s    c         O   s   |  j  | | Ž  S(   N(   R(   (   R   t   argst   kwargs(    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   __call__9   s    c   	      C   s—  t  j } | j } t  j } | j } | j } i	 | j p? | j d 6d d 6t | d d  ƒ p_ d d 6|  j	 ƒ  d 6| j
 d 6| j j d d	 ƒ d
 d 6| j d d ƒ p© d d 6| j d d ƒ d 6| j d d ƒ d 6} x‚ | j ƒ  D]t \ } } t | t ƒ r| j d ƒ } n t | t ƒ s.t | ƒ } n  t | ƒ d	 d !} | j d d ƒ | | <qã Wy! |  j j t j |  j | ƒ Wn |  d t ƒ n Xd  S(   NR   t   -t   lt   logint   ut   tt   rR    i   i    t   ss   Content-LengthR   t   bt   Referert   fs
   User-Agentt   at   utf8iÿÿÿÿt   "s   \"R'   (   R   t   requestt   remotet   responset   headerst   namet   ipt   getattrR   R#   t   request_linet   statust   splitt   gett   itemsR   t   unicodet   encodet   strt   reprt   replaceR
   R   R   R   t   access_log_formatt   True(	   R   R9   R:   R;   t
   outheaderst	   inheaderst   atomst   kt   v(    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   accessA   s2    
					
!c         C   sR   t  j  j ƒ  } t j | j d j ƒ  } d | j | | j | j | j	 | j
 f S(   Ni   s   [%02d/%s/%04d:%02d:%02d:%02d](   t   datetimet   nowt   rfc822t   _monthnamest   montht
   capitalizet   dayt   yeart   hourt   minutet   second(   R   RS   RV   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyR#   k   s    c         C   s4   x- | j  D]" } t | d d  ƒ | k r
 | Sq
 Wd  S(   Nt
   _cpbuiltin(   R   R?   R   (   R   R   t   keyR   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _get_builtin_handlerr   s    c         C   s‹   |  j  | d ƒ } | rn | s‡ | d  k r6 t j } n  t j | ƒ } | j t ƒ d | _ | j	 | ƒ q‡ n | r‡ | j
 j | ƒ n  d  S(   Nt   screen(   R_   R   t   syst   stderrR   t   StreamHandlert   setFormattert   logfmtR]   t
   addHandlerR   t   remove(   R   R   t   enableR   R   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _set_screen_handlerz   s    	c         C   s7   |  j  } | |  j d ƒ p* | |  j d ƒ } t | ƒ S(   NR`   (   R_   R	   R
   t   bool(   R   R   t   has_h(    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _get_screen‡   s    	$c         C   s<   |  j  |  j | d t j ƒ|  j  |  j | d t j ƒd  S(   NR   (   Ri   R	   Ra   Rb   R
   t   stdout(   R   t   newvalue(    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _set_screenŒ   s    t   docs/   If True, error and access will print to stderr.c         C   s6   t  j | ƒ } | j t ƒ d | _ | j | ƒ d  S(   Nt   file(   R   R   Rd   Re   R]   Rf   (   R   R   t   fnameR   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _add_builtin_file_handler•   s    	c         C   s£   |  j  | d ƒ } | r| | ri | j t j j | ƒ k ry | j ƒ  | j j | ƒ |  j | | ƒ qy qŸ |  j | | ƒ n# | rŸ | j ƒ  | j j | ƒ n  d  S(   NRq   (	   R_   R   t   ost   patht   abspathR   R   Rg   Rs   (   R   R   t   filenameR   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _set_file_handler›   s    

c         C   s&   |  j  |  j d ƒ } | r" | j Sd S(   NRq   R   (   R_   R	   R   (   R   R   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _get_error_fileª   s    c         C   s   |  j  |  j | ƒ d  S(   N(   Rx   R	   (   R   Rn   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _set_error_file¯   s    s    The filename for self.error_log.c         C   s&   |  j  |  j d ƒ } | r" | j Sd S(   NRq   R   (   R_   R
   R   (   R   R   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _get_access_file´   s    c         C   s   |  j  |  j | ƒ d  S(   N(   Rx   R
   (   R   Rn   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _set_access_file¹   s    s!   The filename for self.access_log.c         C   sm   |  j  | d ƒ } | rP | si t ƒ  } | j t ƒ d | _ | j | ƒ qi n | ri | j j | ƒ n  d  S(   Nt   wsgi(   R_   t   WSGIErrorHandlerRd   Re   R]   Rf   R   Rg   (   R   R   Rh   R   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   _set_wsgi_handlerÁ   s    		c         C   s   t  |  j |  j d ƒ ƒ S(   NR}   (   Rj   R_   R	   (   R   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt	   _get_wsgiÌ   s    c         C   s   |  j  |  j | ƒ d  S(   N(   R   R	   (   R   Rn   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt	   _set_wsgiÏ   s    s4   If True, error messages will be sent to wsgi.errors.N("   t   __name__t
   __module__R   R   R	   R
   RJ   R   R   R   R   t   FalseR(   R+   RQ   R#   R_   Ri   Rl   Ro   t   propertyR`   Rs   Rx   Ry   Rz   t
   error_fileR{   R|   t   access_fileR   R€   R   R}   (    (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyR      s>   	

		*																R~   c           B   s   e  Z d  „  Z d „  Z RS(   c         C   sA   y t  j j j d ƒ } Wn t t f k
 r2 n X| j ƒ  d  S(   Ns   wsgi.errors(   R   R9   t   wsgi_environRC   t   AttributeErrort   KeyErrort   flush(   R   R   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyR‹   Ø   s
    c         C   sã   y t  j j j d ƒ } Wn t t f k
 r2 n­ Xy• |  j | ƒ } d } d d  l } t | d ƒ sz | j	 | | ƒ nC y | j	 | | ƒ Wn+ t
 k
 r¼ | j	 | | j d ƒ ƒ n X|  j ƒ  Wn |  j | ƒ n Xd  S(   Ns   wsgi.errorss   %s
iÿÿÿÿt   UnicodeTypes   UTF-8(   R   R9   Rˆ   RC   R‰   RŠ   t   formatt   typest   hasattrt   writet   UnicodeErrorRF   R‹   t   handleError(   R   t   recordR   R$   t   fsRŽ   (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   emitá   s"    (   R‚   Rƒ   R‹   R•   (    (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyR~   Õ   s   		(   RR   R   t   Loggert   managert   emittedNoHandlerWarningt	   FormatterRe   Rt   RT   Ra   R   R    t   objectR   t   HandlerR~   (    (    (    s'   /var/www/SABnzbd/cherrypy/_cplogging.pyt   <module>   s   Å