B
    `s              	   @   s  d Z ddlZddlZG dd deZG dd deZG dd dZd	d
 Ze Zdd Z	dd Z
dd ZG dd deZG dd deZdd Zdd ZG dd dZyddlZW n ek
r   Y nJX xFd D ]:Zde Zyeeeeee W q ek
r
   Y qX qW dS )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               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Messagec             C   s   || _ || _d S )N)keywordsargs)selfr   r    r   S/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/py/_log/log.py__init__   s    zMessage.__init__c             C   s   d tt| jS )N )joinmapstrr   )r   r   r   r   content   s    zMessage.contentc             C   s   dd | j S )Nz[%s] :)r
   r   )r   r   r   r   prefix   s    zMessage.prefixc             C   s   |   |   S )N)r   r   )r   r   r   r   __str__    s    zMessage.__str__N)__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s   r   c               @   s:   e Zd ZdZeZi ZdddZdd Zdd Zd	d
 Z	dS )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             K   s2   t |drt| }|| _|d kr(t}|| _d S )Nsplit)hasattrtupler   	_keywordsdefault_keywordmapper_keywordmapper)r   r   Zkeywordmapperkwr   r   r   r   -   s    
zProducer.__init__c             C   s   dd | j S )Nz<py.log.Producer %s>r   )r
   r   )r   r   r   r   __repr__5   s    zProducer.__repr__c             C   s2   d|krt || | j|f }t| || |S )N_)AttributeError	__class__r   setattr)r   nameZproducerr   r   r   __getattr__8   s
    zProducer.__getattr__c             G   s,   | j | j}|dk	r(|| | j| dS )z0 write a message to the appropriate consumer(s) N)r   getconsumerr   r   )r   r   funcr   r   r   __call__?   s    zProducer.__call__)N)
r   r   r   __doc__r   keywords2consumerr   r   r"   r%   r   r   r   r   r   $   s   
r   c               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )KeywordMapperc             C   s
   i | _ d S )N)r'   )r   r   r   r   r   F   s    zKeywordMapper.__init__c             C   s
   | j  S )N)r'   copy)r   r   r   r   getstateI   s    zKeywordMapper.getstatec             C   s   | j   | j | d S )N)r'   clearupdate)r   stater   r   r   setstateL   s    
zKeywordMapper.setstatec          	   C   sR   xBt t|ddD ].}y| j|d|  S  tk
r>   wY qX qW | jdtS )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lenr'   KeyErrorgetdefault_consumer)r   r   ir   r   r   r#   P   s    zKeywordMapper.getconsumerc             C   s   t |trttd| }n*t|dr0|j}nt |tsHtd|f |dk	r|tj	
|s|t|dsttd|f t|}|| j|< dS )z' set a consumer for a set of keywords. Nr   zkey %r is not a string or tuplewritez(%r should be None, callable or file-like)
isinstancer   r   filterr   r   r   	TypeErrorpybuiltincallableFiler'   )r   r   consumerr   r   r   setconsumer^   s    



zKeywordMapper.setconsumerN)r   r   r   r   r*   r.   r#   r@   r   r   r   r   r(   E   s
   r(   c             C   s   t jt| d  dS )zD the default consumer, prints the message to stdout (using 'print') 
N)sysstderrr7   r   )msgr   r   r   r5   o   s    r5   c             C   s   t | | d S )N)r   r@   )r   r?   r   r   r   r@   v   s    r@   c             C   s   t |  d S )N)r   r.   )r-   r   r   r   r.   z   s    r.   c               C   s   t  S )N)r   r*   r   r   r   r   r*   ~   s    r*   c               @   s    e Zd ZdZdd Zdd ZdS )r>   z, log consumer wrapping a file(-like) object c             C   s   t |dst|| _d S )Nr7   )r   AssertionError_file)r   fr   r   r   r      s    zFile.__init__c             C   s.   | j t|d  t| j dr*| j   dS )z write a message to the log rA   flushN)rF   r7   r   r   rH   )r   rD   r   r   r   r%      s    zFile.__call__N)r   r   r   r&   r   r%   r   r   r   r   r>      s   r>   c               @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )Pathz. log consumer that opens and writes to a Path Fc             C   s&   || _ t|| _|| _|s"|   d S )N)_appendr   	_filename
_buffering	_openfile)r   filenameappendZdelayed_create	bufferingr   r   r   r      s
    
zPath.__init__c             C   s$   | j r
dpd}t| j|}|| _d S )Naw)rJ   openrK   rF   )r   moderG   r   r   r   rM      s    zPath._openfilec             C   s:   t | ds|   | jt|d  | js6| j  dS )z write a message to the log rF   rA   N)r   rM   rF   r7   r   rL   rH   )r   rD   r   r   r   r%      s
    
zPath.__call__N)FFF)r   r   r   r&   r   rM   r%   r   r   r   r   rI      s
    
rI   c             C   s   t jt| d  dS )z$ consumer that writes to sys.stdout rA   N)rB   stdoutr7   r   )rD   r   r   r   STDOUT   s    rV   c             C   s   t jt| d  dS )z$ consumer that writes to sys.stderr rA   N)rB   rC   r7   r   )rD   r   r   r   STDERR   s    rW   c               @   s"   e Zd ZdZdddZdd ZdS )Syslogz+ consumer that writes to the syslog daemon Nc             C   s   |d kr| j }|| _d S )N)LOG_INFOpriority)r   rZ   r   r   r   r      s    zSyslog.__init__c             C   s   ddl }| | jt| dS )z write a message to the log r   N)syslogrZ   r   )r   rD   r[   r   r   r   r%      s    zSyslog.__call__)N)r   r   r   r&   r   r%   r   r   r   r   rX      s   
rX   z.EMERG ALERT CRIT ERR WARNING NOTICE INFO DEBUGZLOG_)r&   r;   rB   objectr   r   r(   r5   r   r@   r.   r*   r>   rI   rV   rW   rX   r[   ImportErrorr   Z_prior    getattrr   r   r   r   r   <module>   s2   !*