o
    ai                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 e	r2d 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)Span)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   V/home/ubuntu/SoloSpeech/.venv/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   sJ   t  j}|| | t  }|r!t|tr#|d|  | dS 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_spanr&   r   set_flag)r
   r   r1   spanr   r   r   add_feature_flag8   s   
r5   )r   r/   sentry_sdk._lru_cacher   sentry_sdk.tracingr   	threadingr   typingr   r   r   r-   r.   r   DEFAULT_FLAG_CAPACITYr   r5   r   r   r   r   <module>   s    &