o
    ¯N iw  ã                   @   s.   d dl mZ d dlmZ 	 G dd„ deƒZd	S )
é    )Údeque)ÚlocalFé   ©ÚPromise)ÚAnyÚCallableÚOptionalÚUnionc                   @   sœ   e Zd Zd%dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZeZdd„ Zdd„ Zd&dd„Zdd „ Zd!d"„ Zd#d$„ ZdS )'ÚAsyncTc                 C   s&   d| _ tƒ | _tƒ | _d| _|| _d S ©NF)Úis_tick_usedr   Ú
late_queueÚnormal_queueÚhave_drained_queuesÚtrampoline_enabled)Úselfr   © r   úB/home/ubuntu/.local/lib/python3.10/site-packages/promise/async_.pyÚ__init__   s
   
zAsync.__init__c                 C   ó
   d| _ d S ©NT©r   ©r   r   r   r   Úenable_trampoline   ó   
zAsync.enable_trampolinec                 C   r   r   r   r   r   r   r   Údisable_trampoline   r   zAsync.disable_trampolinec                 C   s   | j p| jS ©N)r   r   r   r   r   r   Úhave_items_queued   s   zAsync.have_items_queuedc                 C   ó   | j  |¡ |  |¡ d S r   )r   ÚappendÚ
queue_tick©r   ÚfnÚ	schedulerr   r   r   Ú_async_invoke_later   s   zAsync._async_invoke_laterc                 C   r   r   )r   r    r!   r"   r   r   r   Ú_async_invoke   s   zAsync._async_invokec                 C   s   | j  |¡ |  |j¡ d S r   )r   r    r!   r$   ©r   Úpromiser   r   r   Ú_async_settle_promise$   s   zAsync._async_settle_promisec                 C   s&   | j r|  |t¡ d S t d|¡ d S )Ngš™™™™™¹?)r   r%   r$   Ú
call_later)r   r#   r   r   r   Úinvoke_later)   s   zAsync.invoke_laterc                 C   s$   | j r|  ||¡ d S | |¡ d S r   )r   r&   Úcallr"   r   r   r   Úinvoke/   s   zAsync.invokec                 C   s&   | j r
|  |¡ d S |j |j¡ d S r   )r   r)   r$   r,   Ú_settle_promisesr'   r   r   r   Úsettle_promises6   s   zAsync.settle_promisesc                    s   ‡ fdd„}|  |¡ d S )Nc                      s   ˆ ‚r   r   r   ©Úreasonr   r   r#   ?   s   zAsync.throw_later.<locals>.fn)r,   )r   r1   r$   r#   r   r0   r   Úthrow_later=   s   zAsync.throw_laterc                 C   s>   ddl m} |r| ¡ }t||ƒr| ¡  q|ƒ  |sd S d S )Nr   r   )r(   r   ÚpopleftÚ
isinstancer.   )r   Úqueuer   r#   r   r   r   Údrain_queueG   s   
ûzAsync.drain_queuec                 C   sd   ddl m} | j}|r#|jsd S | ¡ }t||ƒr| ¡  q	|ƒ  |s|  ¡  d| _|  	| j
¡ d S )Nr   r   T)r(   r   r   Ú
is_pendingr3   r4   r.   Úresetr   r6   r   )r   r(   r   r5   r#   r   r   r   Údrain_queue_until_resolvedR   s   
ù	z Async.drain_queue_until_resolvedNc                 C   sD   |j sd S | ¡ }| jr| jr|  |¡ |j sd S |j ||¡ d S r   )r7   Ú_targetr   r   r9   r$   Úwait)r   r(   ÚtimeoutÚtargetr   r   r   r;   d   s   
z
Async.waitc                 C   s4   | j sJ ‚|  | j¡ |  ¡  d| _|  | j¡ d S r   )r   r6   r   r8   r   r   r   r   r   r   Údrain_queuesw   s
   
zAsync.drain_queuesc                 C   s    | j sd| _ | | j¡ d S d S r   )r   r,   r>   )r   r$   r   r   r   r!      s   þzAsync.queue_tickc                 C   r   r   )r   r   r   r   r   r8   …   s   
zAsync.reset)Tr   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r%   r&   r)   r+   r-   r/   r2   Úfatal_errorr6   r9   r;   r>   r!   r8   r   r   r   r   r   
   s&    

r   N)Úcollectionsr   Ú	threadingr   r(   r   Útypingr   r   r	   r
   r   r   r   r   r   Ú<module>   s   