o
    ٰiX                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZmZ er,d dlm	Z	 e	de
edZdZG d	d
 d
Zde
deddfddZdS )    N)LRUCache)Lock)TYPE_CHECKINGAny)	TypedDictFlagDataflagresultd   c                   @   sR   e Zd ZdeddfddZdddZdd
dZdddZdede	ddfddZ
dS )
FlagBuffercapacityreturnNc                 C   s   || _ t | _t|| _d S N)r   r   lockr   _FlagBuffer__buffer)selfr    r   L/home/ubuntu/.local/lib/python3.10/site-packages/sentry_sdk/feature_flags.py__init__   s   zFlagBuffer.__init__c                 C   s   t | j| _d S r   )r   r   r   r   r   r   r   clear   s   zFlagBuffer.clearmemodict[int, Any]c                 C   sH   | j  t| j}t| j||_|W  d    S 1 sw   Y  d S r   )r   r   r   copydeepcopyr   )r   r   bufferr   r   r   __deepcopy__   s
   
$zFlagBuffer.__deepcopy__list[FlagData]c                 C   s>   | j  dd | j D W  d    S 1 sw   Y  d S )Nc                 S   s   g | ]	\}}||d qS )r   r   ).0keyvaluer   r   r   
<listcomp>%   s    z"FlagBuffer.get.<locals>.<listcomp>)r   r   get_allr   r   r   r   get#   s
   $zFlagBuffer.getr	   r
   c                 C   sL   t |tr	td| j | j|| W d    d S 1 sw   Y  d S )Nz=FlagBuffer instances can not be inserted into the dictionary.)
isinstancer   
ValueErrorr   r   set)r   r	   r
   r   r   r   r'   )   s   
"zFlagBuffer.set)r   N)r   r   r   r   )r   r   )__name__
__module____qualname__intr   r   r   r$   strboolr'   r   r   r   r   r      s    


r   r	   r
   r   c                 C   s<   t  j}|| | t  }|r|d|  | dS dS )z
    Records a flag and its value to be sent on subsequent error events.
    We recommend you do this on flag evaluations. Flags are buffered per Sentry scope.
    zflag.evaluation.N)
sentry_sdkget_isolation_scopeflagsr'   get_current_spanset_flag)r	   r
   r0   spanr   r   r   add_feature_flag7   s   
r4   )r   r.   sentry_sdk._lru_cacher   	threadingr   typingr   r   r   r,   r-   r   DEFAULT_FLAG_CAPACITYr   r4   r   r   r   r   <module>   s    &