o
    g)                     @   s   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m	Z	 dd Z
dd	 ZG d
d deZe	ddG dd deZdS )    N)deque)MutableMappingSequence)Optional)
deprecatedc                 C   s"   t j j| d t jjd}|dS )z*Get an ISO 8601 string from time_ns value.g    eA)tzz%Y-%m-%dT%H:%M:%S.%fZ)datetimefromtimestamptimezoneutcstrftime)nanosecondsts r   V/var/www/visachat/venv/lib/python3.10/site-packages/opentelemetry/sdk/util/__init__.pyns_to_iso_str   s   
r   c                 C   s   t ttdd |  S )z*Converts a dict to be used as a unique keyc                 S   s&   t | d tr| d t| d fS | S )N   r   )
isinstancelisttuple)kvr   r   r   <lambda>%      &z!get_dict_as_key.<locals>.<lambda>)r   sortedmapitems)labelsr   r   r   get_dict_as_key    s   r   c                   @   ^   e Zd ZdZdee fddZdd Zdd Zd	d
 Z	dd Z
dd Zdd Zedd ZdS )BoundedListzAn append only list with a fixed max size.

    Calls to `append` and `extend` will drop the oldest elements if there is
    not enough room.
    maxlenc                 C   s    d| _ t|d| _t | _d S )Nr   )r    )droppedr   _dq	threadingLock_lockselfr    r   r   r   __init__5   s   zBoundedList.__init__c                 C   s&   t | j dt| j d| jj dS N(z	, maxlen=))type__name__r   r"   r    r'   r   r   r   __repr__:   r   zBoundedList.__repr__c                 C   
   | j | S N)r"   )r'   indexr   r   r   __getitem__=      
zBoundedList.__getitem__c                 C   
   t | jS r1   )lenr"   r.   r   r   r   __len__@   r4   zBoundedList.__len__c                 C   s8   | j  tt| jW  d    S 1 sw   Y  d S r1   )r%   iterr   r"   r.   r   r   r   __iter__C      $zBoundedList.__iter__c                 C   sd   | j % | jjd urt| j| jjkr|  jd7  _| j| W d    d S 1 s+w   Y  d S )Nr   )r%   r"   r    r6   r!   append)r'   itemr   r   r   r;   G   s   "zBoundedList.appendc                 C   st   | j - | jjd ur"t|t| j | jj }|dkr"|  j|7  _| j| W d    d S 1 s3w   Y  d S Nr   )r%   r"   r    r6   r!   extend)r'   seqto_dropr   r   r   r>   P   s   "zBoundedList.extendc                 C   s   t |}| |}|| |S r1   )r   r>   )clsr    r?   bounded_listr   r   r   from_seqX   s   
zBoundedList.from_seqN)r-   
__module____qualname____doc__r   intr(   r/   r3   r7   r9   r;   r>   classmethodrC   r   r   r   r   r   .   s    	r   z1.4.0)versionc                   @   r   )BoundedDictzAn ordered dict with a fixed max capacity.

    Oldest elements are dropped when the dict is full and a new element is
    added.
    r    c                 C   sB   |d urt |tst|dk rt|| _d| _i | _t | _d S r=   )	r   rG   
ValueErrorr    r!   _dictr#   r$   r%   r&   r   r   r   r(   h   s   
zBoundedDict.__init__c                 C   s$   t | j dt| j d| j dS r)   )r,   r-   dictrL   r    r.   r   r   r   r/   s   s   "zBoundedDict.__repr__c                 C   r0   r1   rL   r'   keyr   r   r   r3   x   r4   zBoundedDict.__getitem__c                 C   s   | j Q | jd ur| jdkr|  jd7  _	 W d    d S || jv r(| j|= n| jd urGt| j| jkrG| jtt| j = |  jd7  _|| j|< W d    d S 1 sWw   Y  d S )Nr   r   )r%   r    r!   rL   r6   nextr8   keys)r'   rP   valuer   r   r   __setitem__{   s   

"zBoundedDict.__setitem__c                 C   s   | j |= d S r1   rN   rO   r   r   r   __delitem__   s   zBoundedDict.__delitem__c                 C   s8   | j  t| j W  d    S 1 sw   Y  d S r1   )r%   r8   rL   copyr.   r   r   r   r9      r:   zBoundedDict.__iter__c                 C   r5   r1   )r6   rL   r.   r   r   r   r7      r4   zBoundedDict.__len__c                 C   s.   t |}| |}| D ]\}}|||< q|S r1   )rM   r   )rA   r    mappingbounded_dictrP   rS   r   r   r   from_map   s
   
zBoundedDict.from_mapN)r-   rD   rE   rF   r   rG   r(   r/   r3   rT   rU   r9   r7   rH   rY   r   r   r   r   rJ   `   s    rJ   )r   r#   collectionsr   collections.abcr   r   typingr   r   r   r   r   rJ   r   r   r   r   <module>   s   2