
    as              	       X   d Z ddlZddlZ G d de      Z G d de      Z G d d      Zd	 Z e       Zd
 Z	d Z
d Z G d de      Z G d de      Zd Zd Z G d d      Z	 ddlZdj%                         D ]  Zdez   Z	  eee eee              y# e$ r Y $w xY w# e$ r Y yw xY w)a  
basic logging functionality based on a producer/consumer scheme.

XXX implement this API: (maybe put it into slogger.py?)

        log = Logger(
                    info=py.log.STDOUT,
                    debug=py.log.STDOUT,
                    command=None)
        log.info("hello", "world")
        log.command("hello", "world")

        log = Logger(info=Logger(something=...),
                     debug=py.log.STDOUT,
                     command=None)
    Nc                   $    e Zd Zd Zd Zd Zd Zy)Messagec                      || _         || _        y N)keywordsargs)selfr   r   s      -/usr/lib/python3/dist-packages/py/_log/log.py__init__zMessage.__init__   s     	    c                 T    dj                  t        t        | j                              S )N )joinmapstrr   r	   s    r
   contentzMessage.content   s    xxC+,,r   c                 >    ddj                  | j                        z  S )Nz[%s] :)r   r   r   s    r
   prefixzMessage.prefix   s    #((4==122r   c                 D    | j                         | j                         z   S r   )r   r   r   s    r
   __str__zMessage.__str__    s    {{}t||~--r   N)__name__
__module____qualname__r   r   r   r    r   r
   r   r      s    -3.r   r   c                   2    e Zd ZdZeZi ZddZd Zd Zd Z	y)Producerz (deprecated) Log producer API which sends messages to be logged
        to a 'consumer' object, which then prints them to stdout,
        stderr, files, etc. Used extensively by PyPy-1.1.
    Nc                 z    t        |d      rt        |j                               }|| _        |t        }|| _        y )Nsplit)hasattrtupler    	_keywordsdefault_keywordmapper_keywordmapper)r	   r   keywordmapperkws       r
   r   zProducer.__init__-   s7    8W%X^^-.H! 1M+r   c                 >    ddj                  | j                        z  S )Nz<py.log.Producer %s>r   )r   r#   r   s    r
   __repr__zProducer.__repr__5   s    %(@@@r   c                 |    d|v rt        |      | j                  | j                  |fz         }t        | ||       |S )N_)AttributeError	__class__r#   setattr)r	   nameproducers      r
   __getattr__zProducer.__getattr__8   s>    $; &&>>$..D7":;dH%r   c                     | j                   j                  | j                        }|# || j                  | j                  |             yy)z0 write a message to the appropriate consumer(s) N)r%   getconsumerr#   r   )r	   r   funcs      r
   __call__zProducer.__call__?   s>    ""..t~~>dnnd34 r   r   )
r   r   r   __doc__r   keywords2consumerr   r)   r1   r5   r   r   r
   r   r   $   s)    
 G,A5r   r   c                   *    e Zd Zd Zd Zd Zd Zd Zy)KeywordMapperc                     i | _         y r   )r7   r   s    r
   r   zKeywordMapper.__init__F   s
    !#r   c                 6    | j                   j                         S r   )r7   copyr   s    r
   getstatezKeywordMapper.getstateI   s    %%**,,r   c                 n    | j                   j                          | j                   j                  |       y r   )r7   clearupdate)r	   states     r
   setstatezKeywordMapper.setstateL   s(    $$&%%e,r   c                     t        t        |      dd      D ]  }	 | j                  |d|    c S  | j                  j	                  dt
              S # t        $ r Y Dw xY w)a   return a consumer matching the given keywords.

            tries to find the most suitable consumer by walking, starting from
            the back, the list of keywords, the first consumer matching a
            keyword is returned (falling back to py.log.default)
        r   Ndefault)rangelenr7   KeyErrorgetdefault_consumer)r	   r   is      r
   r3   zKeywordMapper.getconsumerP   sl     s8}a, 	A--hrl;;	
 %%)))5EFF  s   A	AAc                    t        |t              r$t        t        d|j	                                     }n8t        |d      r|j                  }nt        |t              st        d|d      |Dt        j                  j                  |      s%t        |d      st        |d      t        |      }|| j                  |<   y)z' set a consumer for a set of keywords. Nr#   zkey z is not a string or tuplewritez& should be None, callable or file-like)
isinstancer   r"   filterr    r!   r#   	TypeErrorpybuiltincallableFiler7   )r	   r   consumers      r
   setconsumerzKeywordMapper.setconsumer^   s     h$VD(..*:;<HX{+))HHe,KLL

(;(;H(E8W-BJLN NH~H+3x(r   N)r   r   r   r   r=   rB   r3   rV   r   r   r
   r9   r9   E   s    $--G4r   r9   c                 Z    t         j                  j                  t        |       dz          y)zD the default consumer, prints the message to stdout (using 'print') 
NsysstderrrM   r   msgs    r
   rJ   rJ   o       JJSXd]#r   c                 0    t         j                  | |       y r   )r$   rV   )r   rU   s     r
   rV   rV   v   s    %%h9r   c                 .    t         j                  |        y r   )r$   rB   )rA   s    r
   rB   rB   z   s    ""5)r   c                  *    t         j                         S r   )r$   r=   r   r   r
   r=   r=   ~   s     ))++r   c                       e Zd ZdZd Zd Zy)rT   z, log consumer wrapping a file(-like) object c                 .    t        |d      sJ || _        y )NrM   )r!   _file)r	   fs     r
   r   zFile.__init__   s    q'"""
r   c                     | j                   j                  t        |      dz          t        | j                   d      r| j                   j	                          yy) write a message to the log rX   flushN)rd   rM   r   r!   rh   r	   r]   s     r
   r5   zFile.__call__   s?    

SD)4::w'JJ (r   Nr   r   r   r6   r   r5   r   r   r
   rT   rT      s    6
r   rT   c                   (    e Zd ZdZ	 	 ddZd Zd Zy)Pathz. log consumer that opens and writes to a Path c                 f    || _         t        |      | _        || _        |s| j	                          y y r   )_appendr   	_filename
_buffering	_openfile)r	   filenameappenddelayed_create	bufferings        r
   r   zPath.__init__   s-    X#NN r   c                 f    | j                   xr dxs d}t        | j                  |      }|| _        y )Naw)rn   openro   rd   )r	   modere   s      r
   rq   zPath._openfile   s,    ||#*s&
r   c                     t        | d      s| j                          | j                  j                  t	        |      dz          | j
                  s| j                  j                          yy)rg   rd   rX   N)r!   rq   rd   rM   r   rp   rh   ri   s     r
   r5   zPath.__call__   sL    tW%NN

SD)JJ r   N)FFF)r   r   r   r6   r   rq   r5   r   r   r
   rl   rl      s    8(-16
r   rl   c                 Z    t         j                  j                  t        |       dz          y)z$ consumer that writes to sys.stdout rX   N)rZ   stdoutrM   r   r\   s    r
   STDOUTr~      r^   r   c                 Z    t         j                  j                  t        |       dz          y)z$ consumer that writes to sys.stderr rX   NrY   r\   s    r
   STDERRr      r^   r   c                       e Zd ZdZddZd Zy)Syslogz+ consumer that writes to the syslog daemon Nc                 .    || j                   }|| _        y r   )LOG_INFOpriority)r	   r   s     r
   r   zSyslog.__init__   s    }}H r   c                 X    ddl } |j                   | j                  t        |             y)rg   r   N)syslogr   r   )r	   r]   r   s      r
   r5   zSyslog.__call__   s    dmmSX.r   r   rj   r   r   r
   r   r      s    5!
/r   r   z.EMERG ALERT CRIT ERR WARNING NOTICE INFO DEBUGLOG_)r6   rQ   rZ   objectr   r   r9   rJ   r$   rV   rB   r=   rT   rl   r~   r   r   r   r    _prior.   getattrr,   ImportErrorr   r   r
   <module>r      s     
 
.f .5v 5B'4 '4T$ & :*,6 6 0$
$
/ /
 BGGI 	FE765#9:  		  		s$   %B! BBB!B)(B)