U
    ÷EZhI  ã                   @  s  U d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ ddlmZ e	dƒZe	d	ƒZd
dœdd„Zd
dœdd„Zd
dœdd„Zddœdd„Zeƒ Zded< i Zded< eddG dd„ dƒƒZG dd„ dejƒZG dd „ d ee ƒZG d!d"„ d"ee ƒZdS )#é    )ÚannotationsN)Ú	dataclass)ÚAnyÚGenericÚLiteralÚTypeVarÚoverload)ÚWeakKeyDictionaryé   )Úget_async_backendÚTÚDÚNone©Úreturnc                   Ã  s   t ƒ  ¡ I dH  dS )zó
    Check for cancellation and allow the scheduler to switch to another task.

    Equivalent to (but more efficient than)::

        await checkpoint_if_cancelled()
        await cancel_shielded_checkpoint()


    .. versionadded:: 3.0

    N)r   Ú
checkpoint© r   r   úU/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/anyio/lowlevel.pyr      s    r   c                   Ã  s   t ƒ  ¡ I dH  dS )z°
    Enter a checkpoint if the enclosing cancel scope has been cancelled.

    This does not allow the scheduler to switch to a different task.

    .. versionadded:: 3.0

    N)r   Úcheckpoint_if_cancelledr   r   r   r   r      s    	r   c                   Ã  s   t ƒ  ¡ I dH  dS )zý
    Allow the scheduler to switch to another task but without checking for cancellation.

    Equivalent to (but potentially more efficient than)::

        with CancelScope(shield=True):
            await checkpoint()


    .. versionadded:: 3.0

    N)r   Úcancel_shielded_checkpointr   r   r   r   r   *   s    r   Úobjectc                   C  s
   t ƒ  ¡ S )ze
    Return a backend specific token object that can be used to get back to the event
    loop.

    )r   Úcurrent_tokenr   r   r   r   r   :   s    r   z&WeakKeyDictionary[Any, dict[str, Any]]Ú	_run_varszdict[Any, _TokenWrapper]Ú_token_wrappersT)Úfrozenc                   @  s   e Zd ZU dZded< dS )Ú_TokenWrapper)Ú_tokenÚ__weakref__r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú	__slots__Ú__annotations__r   r   r   r   r   G   s   
r   c                   @  s   e Zd Ze ¡ ZdS )Ú_NoValueSetN)r   r   r    ÚenumÚautoÚNO_VALUE_SETr   r   r   r   r#   M   s   r#   c                   @  s    e Zd ZdZdddœdd„ZdS )ÚRunvarToken©Ú_varÚ_valueÚ	_redeemedz	RunVar[T]ú%T | Literal[_NoValueSet.NO_VALUE_SET])ÚvarÚvaluec                 C  s   || _ || _d| _d S )NFr(   )Úselfr-   r.   r   r   r   Ú__init__T   s    zRunvarToken.__init__N)r   r   r    r!   r0   r   r   r   r   r'   Q   s   r'   c                   @  sÀ   e Zd ZU dZdZejZded< eƒ Z	ded< efddd	œd
d„Z
eddœdd„ƒZedddœdd„ƒZeddœdd„ƒZefdddœdd„Zdddœdd„Zdddœdd „Zddœd!d"„Zd#S )$ÚRunVarz[
    Like a :class:`~contextvars.ContextVar`, except scoped to the running event loop.
    ©Ú_nameÚ_defaultz!Literal[_NoValueSet.NO_VALUE_SET]r&   zset[_TokenWrapper]r   Ústrr,   )ÚnameÚdefaultc                 C  s   || _ || _d S ©Nr2   )r/   r6   r7   r   r   r   r0   e   s    zRunVar.__init__zdict[str, T]r   c                 C  s:   t ƒ }z
t| W S  tk
r4   i  }t|< | Y S X d S r8   )r   r   ÚKeyError)r/   ÚtokenZrun_varsr   r   r   Ú_current_varsk   s    
zRunVar._current_varsr   zT | D)r7   r   c                 C  s   d S r8   r   ©r/   r7   r   r   r   Úgett   s    z
RunVar.getr   c                 C  s   d S r8   r   ©r/   r   r   r   r=   w   s    z%D | Literal[_NoValueSet.NO_VALUE_SET]c                 C  sb   z| j | j W S  tk
rJ   |tjk	r0| Y S | jtjk	rF| j Y S Y nX td| j› dƒ‚d S )NzRun variable "z!" has no value and no default set)r;   r3   r9   r1   r&   r4   ÚLookupErrorr<   r   r   r   r=   z   s    
ÿzRunvarToken[T])r.   r   c                 C  s*   | j }t| | | jtj¡ƒ}||| j< |S r8   )r;   r'   r=   r3   r1   r&   )r/   r.   Zcurrent_varsr:   r   r   r   Úset‰   s    
z
RunVar.setr   )r:   r   c                 C  sj   |j | k	rtdƒ‚|jr tdƒ‚|jtjkrRz| j| j= W q` tk
rN   Y q`X n|j| j| j< d|_d S )Nz)This token does not belong to this RunVarz This token has already been usedT)	r)   Ú
ValueErrorr+   r*   r#   r&   r;   r3   r9   )r/   r:   r   r   r   Úreset   s    
zRunVar.resetc                 C  s   d| j ›dS )Nz<RunVar name=ú>)r3   r>   r   r   r   Ú__repr__    s    zRunVar.__repr__N)r   r   r    Ú__doc__r!   r#   r&   r"   r@   r   r0   Úpropertyr;   r   r=   rB   rD   r   r   r   r   r1   Z   s"   
ÿÿr1   )Ú
__future__r   r$   Údataclassesr   Útypingr   r   r   r   r   Úweakrefr	   Z_core._eventloopr   r   r   r   r   r   r   r   r"   r   r   ÚEnumr#   r'   r1   r   r   r   r   Ú<module>   s&    		