B
    J4¥d'  ã               @  s6  U d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 d dlmZ ddlmZ ejdkrrd d	lmZ n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ÚTypeVarÚoverload)ÚWeakKeyDictionaryé   )Úget_asynclib)é   é   )ÚLiteralÚ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   ú2/tmp/pip-unpacked-wheel-6d_pu4p9/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   0   s    r   Úobjectc               C  s
   t ƒ  ¡ S )zVReturn 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   I   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$   O   s   r$   c               @  s    e Zd ZdZdddœdd„ZdS )ÚRunvarToken)Ú_varÚ_valueÚ	_redeemedz	RunVar[T]z%T | Literal[_NoValueSet.NO_VALUE_SET])ÚvarÚvaluec             C  s   || _ || _d| _d S )NF)r)   r*   r+   )Úselfr,   r-   r   r   r   Ú__init__V   s    zRunvarToken.__init__N)r   r    r!   r"   r/   r   r   r   r   r(   S   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   Ústrz%T | Literal[_NoValueSet.NO_VALUE_SET])ÚnameÚdefaultc             C  s   || _ || _d S )N)r1   r2   )r.   r4   r5   r   r   r   r/   g   s    zRunVar.__init__zdict[str, T])r   c             C  s`   t ƒ }xTyt| S  tk
r8   t|ƒ}| j |¡ Y q tk
rV   i  }t|< |S X qW d S )N)r   r   Ú	TypeErrorr   r   ÚaddÚKeyError)r.   ÚtokenZrun_varsr   r   r   Ú_current_varso   s    zRunVar._current_varsr   zT | D)r5   r   c             C  s   d S )Nr   )r.   r5   r   r   r   Úget   s    z
RunVar.getr   c             C  s   d S )Nr   )r.   r   r   r   r;   ƒ   s    z%D | Literal[_NoValueSet.NO_VALUE_SET]c             C  sX   y| j | j S  tk
r@   |tjk	r*|S | jtjk	r<| jS Y nX td| j› dƒ‚d S )NzRun variable "z!" has no value and no default set)r:   r1   r8   r0   r'   r2   ÚLookupError)r.   r5   r   r   r   r;   ‡   s    
zRunvarToken[T])r-   r   c             C  s*   | j }t| | | jtj¡ƒ}||| j< |S )N)r:   r(   r;   r1   r0   r'   )r.   r-   Zcurrent_varsr9   r   r   r   Úset–   s    
z
RunVar.setr   )r9   r   c             C  sj   |j | k	rtdƒ‚|jr tdƒ‚|jtjkrRy| 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:   r1   r8   )r.   r9   r   r   r   Úresetœ   s    
zRunVar.resetc             C  s   d| j ›dS )Nz<RunVar name=ú>)r1   )r.   r   r   r   Ú__repr__­   s    zRunVar.__repr__N)r   r    r!   Ú__doc__r"   r$   r'   r#   r=   r   r/   Úpropertyr:   r   r;   r?   rA   r   r   r   r   r0   \   s   
r0   ) Ú
__future__r   r%   ÚsysZdataclassesr   Útypingr   r   r   r   Úweakrefr   Z_core._eventloopr
   Úversion_infor   Ztyping_extensionsr   r   r   r   r   r   r   r#   r   r   ÚEnumr$   r(   r0   r   r   r   r   Ú<module>   s,    
	