o
    e|
                     @   sj   d Z ddlmZ ddlmZ ddlmZ G dd dZG dd deZG d	d
 d
eZ	G dd de	Z
dS )zVarious base classes.    )	coroutine)	Coroutine)get_running_loopc                       s@   e Zd Zdd Zedd Zdd Z fddZd	d
 Z  Z	S )	AsyncBasec                 C   s   || _ || _|| _d S N)_fileZ	_executor	_ref_loop)selffileloopexecutor r   =D:\Projects\ConvertPro\env\Lib\site-packages\aiofiles/base.py__init__   s   
zAsyncBase.__init__c                 C   s   | j pt S r   )r   r   r	   r   r   r   _loop   s   zAsyncBase._loopc                 C   s   | S )zWe are our own iterator.r   r   r   r   r   	__aiter__      zAsyncBase.__aiter__c                    s   t   d t| j S )Nz
 wrapping )super__repr__reprr   r   	__class__r   r   r      s   zAsyncBase.__repr__c                    s   |   I dH }|r|S t)zSimulate normal file iteration.N)readlineStopAsyncIteration)r	   liner   r   r   	__anext__   s
   zAsyncBase.__anext__)
__name__
__module____qualname__r   propertyr   r   r   r   __classcell__r   r   r   r   r      s    
r   c                       s6   e Zd Z fddZedd Zejdd Z  ZS )AsyncIndirectBasec                    s    || _ || _t d || d S r   )	_indirect_namer   r   )r	   namer   r   Zindirectr   r   r   r   "   s   zAsyncIndirectBase.__init__c                 C   s   |   S r   )r#   r   r   r   r   r   '      zAsyncIndirectBase._filec                 C   s   d S r   r   )r	   vr   r   r   r   +   r   )r   r   r   r   r    r   setterr!   r   r   r   r   r"   !   s    
r"   c                   @   s   e Zd ZdZdd Zdd ZdddZd	d
 Zedd Z	edd Z
edd Zdd Zedd Zdd Zdd Zdd Zdd ZdS )_ContextManager_coro_objc                 C   s   || _ d | _d S r   r*   )r	   coror   r   r   r   3   s   
z_ContextManager.__init__c                 C   s   | j |S r   )r+   send)r	   valuer   r   r   r.   7   s   z_ContextManager.sendNc                 C   s:   |d u r
| j |S |d u r| j ||S | j |||S r   )r+   throw)r	   typvaltbr   r   r   r0   :   s
   z_ContextManager.throwc                 C   s
   | j  S r   )r+   closer   r   r   r   r4   B      
z_ContextManager.closec                 C      | j jS r   )r+   gi_framer   r   r   r   r7   E   r&   z_ContextManager.gi_framec                 C   r6   r   )r+   
gi_runningr   r   r   r   r8   I   r&   z_ContextManager.gi_runningc                 C   r6   r   )r+   gi_coder   r   r   r   r9   M   r&   z_ContextManager.gi_codec                 C   s
   |  d S r   )r.   r   r   r   r   __next__Q   r5   z_ContextManager.__next__c                 c       | j E d H }|S r   r+   r	   respr   r   r   __iter__T   s   z_ContextManager.__iter__c                 c   r;   r   r<   r=   r   r   r   	__await__Y      z_ContextManager.__await__c                    s   | j I d H }|S r   r<   r=   r   r   r   r   ]   rA   z_ContextManager.__anext__c                    s   | j I d H | _| jS r   r*   r   r   r   r   
__aenter__a   s   z_ContextManager.__aenter__c                    s   | j   d | _ d S r   )r,   r4   )r	   exc_typeexcr3   r   r   r   	__aexit__e   s   

z_ContextManager.__aexit__)NN)r   r   r   	__slots__r   r.   r0   r4   r    r7   r8   r9   r:   r   r?   r@   r   rB   rE   r   r   r   r   r)   0   s&    




r)   c                   @   s   e Zd ZdZdd ZdS )AiofilesContextManagerz/An adjusted async context manager for aiofiles.c                    s,   t  d | jjj|||I d H  d | _d S r   )r   run_in_executorr,   r   __exit__)r	   rC   exc_valexc_tbr   r   r   rE   m   s
   

z AiofilesContextManager.__aexit__N)r   r   r   __doc__rE   r   r   r   r   rG   j   s    rG   N)rL   typesr   collections.abcr   asyncior   r   r"   r)   rG   r   r   r   r   <module>   s    :