U
    h                     @   sd   d dl Z d dlZd dlZddlmZmZ G dd dZG dd dZG dd	 d	ZG d
d dZ	dS )    N   )get_running_loopget_task_loopc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )

StreamSinkc                 C   sB   || _ tt|dd | _tt|dd | _tt|dd | _d S )Nflushstopcomplete)_streamcallablegetattr
_flushable
_stoppableinspectiscoroutinefunction_completable)selfstream r   8/tmp/pip-unpacked-wheel-j9z6yzd1/loguru/_simple_sinks.py__init__	   s    zStreamSink.__init__c                 C   s    | j | | jr| j   d S N)r	   writer   r   r   messager   r   r   r      s    zStreamSink.writec                 C   s   | j r| j  d S r   )r   r	   r   r   r   r   r   r      s    zStreamSink.stopc                 C   s   | j s
g S | j gS r   )r   r	   r   r   r   r   r   tasks_to_complete   s    zStreamSink.tasks_to_completeN__name__
__module____qualname__r   r   r   r   r   r   r   r   r      s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
StandardSinkc                 C   s
   || _ d S r   )_handler)r   handlerr   r   r   r      s    zStandardSink.__init__c                 C   s   |j }t|}|d }t |d |d j|d j|d |d|rR|j|j|j	fnd |d d|d i	}|rrd	|_
|d j|_| j| d S )
N	exceptionnamelevelfileliner   functionextra
)recordstrlogging	getLogger
makeRecordnopathtypevalue	tracebackexc_textr$   	levelnamer!   handle)r   r   Z
raw_recordexcr+   r   r   r   r   "   s$    
zStandardSink.writec                 C   s   | j   d S r   )r!   closer   r   r   r   r   6   s    zStandardSink.stopc                 C   s   g S r   r   r   r   r   r   r   9   s    zStandardSink.tasks_to_completeNr   r   r   r   r   r       s   r    c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )	AsyncSinkc                 C   s    || _ || _|| _t | _d S r   )	_function_loop_error_interceptorweakrefWeakSet_tasks)r   r(   loopZerror_interceptorr   r   r   r   >   s    zAsyncSink.__init__c                    sd   zj pt }W n tk
r&   Y d S X  }||} fdd}|| j| d S )Nc                    sD   |   s|  d krd S j s*|  jj j|  d d S )N)r#   )Z	cancelledr#   r=   Zshould_catchprintr+   )futurer   r   r   r   check_exceptionM   s
    
z(AsyncSink.write.<locals>.check_exception)r<   r   RuntimeErrorr;   Zcreate_taskZadd_done_callbackr@   add)r   r   rA   	coroutinetaskrE   r   rD   r   r   D   s    


zAsyncSink.writec                 C   s   | j D ]}|  qd S r   )r@   cancel)r   rI   r   r   r   r   W   s    
zAsyncSink.stopc                    s    fdd j D S )Nc                    s   g | ]}  |qS r   )_complete_task).0rI   r   r   r   
<listcomp>a   s     z/AsyncSink.tasks_to_complete.<locals>.<listcomp>)r@   r   r   r   r   r   [   s    zAsyncSink.tasks_to_completec                    s>   t  }t||k	rd S z|I d H  W n tk
r8   Y nX d S r   )r   r   	Exception)r   rI   rA   r   r   r   rK   c   s    zAsyncSink._complete_taskc                 C   s   | j  }d |d< |S )Nr@   )__dict__copyr   stater   r   r   __getstate__l   s    
zAsyncSink.__getstate__c                 C   s   | j | t | _d S r   )rO   updater>   r?   r@   rQ   r   r   r   __setstate__q   s    zAsyncSink.__setstate__N)
r   r   r   r   r   r   r   rK   rS   rU   r   r   r   r   r:   =   s   	r:   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CallableSinkc                 C   s
   || _ d S r   r;   )r   r(   r   r   r   r   w   s    zCallableSink.__init__c                 C   s   |  | d S r   rW   r   r   r   r   r   z   s    zCallableSink.writec                 C   s   d S r   r   r   r   r   r   r   }   s    zCallableSink.stopc                 C   s   g S r   r   r   r   r   r   r      s    zCallableSink.tasks_to_completeNr   r   r   r   r   rV   v   s   rV   )
r   r-   r>   Z_asyncio_loopr   r   r   r    r:   rV   r   r   r   r   <module>   s   9