o
    i                     @   s   d dl Z d dlZd dlmZ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)OrderedDictdeque)MutableMappingSequence)Optional)
deprecatedc                 C   s   t j | d }|dS )z*Get an ISO 8601 string from time_ns value.g    eAz%Y-%m-%dT%H:%M:%S.%fZ)datetimeutcfromtimestampstrftime)nanosecondsts r   `/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/mysql/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>$   s   & 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__2   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__7   s   &zBoundedList.__repr__c                 C   
   | j | S N)r   )r$   indexr   r   r   __getitem__:      
zBoundedList.__getitem__c                 C   
   t | jS r.   )lenr   r+   r   r   r   __len__=   r1   zBoundedList.__len__c                 C   s8   | j  tt| jW  d    S 1 sw   Y  d S r.   )r"   iterr   r   r+   r   r   r   __iter__@      $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   r3   r   append)r$   itemr   r   r   r8   D   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   r3   r   extend)r$   seqto_dropr   r   r   r;   J   s   "zBoundedList.extendc                 C   s   t |}| |}|| |S r.   )r   r;   )clsr   r<   bounded_listr   r   r   from_seqR   s   
zBoundedList.from_seqN)r*   
__module____qualname____doc__r   intr%   r,   r0   r4   r6   r8   r;   classmethodr@   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   sD   |d urt |tst|dk rt|| _d| _t | _t | _	d S r:   )
r   rD   
ValueErrorr   r   r   _dictr    r!   r"   r#   r   r   r   r%   b   s   
zBoundedDict.__init__c                 C   s$   t | j dt| j d| j dS r&   )r)   r*   dictrI   r   r+   r   r   r   r,   m   s   $zBoundedDict.__repr__c                 C   r-   r.   rI   r$   keyr   r   r   r0   p   r1   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   rI   r3   nextr5   keys)r$   rM   valuer   r   r   __setitem__s   s   

"zBoundedDict.__setitem__c                 C   s   | j |= d S r.   rK   rL   r   r   r   __delitem__   s   zBoundedDict.__delitem__c                 C   s8   | j  t| j W  d    S 1 sw   Y  d S r.   )r"   r5   rI   copyr+   r   r   r   r6      r7   zBoundedDict.__iter__c                 C   r2   r.   )r3   rI   r+   r   r   r   r4      r1   zBoundedDict.__len__c                 C   s.   t |}| |}| D ]\}}|||< q|S r.   )r   r   )r>   r   mappingbounded_dictrM   rP   r   r   r   from_map   s
   
zBoundedDict.from_mapN)r*   rA   rB   rC   r   rD   r%   r,   r0   rQ   rR   r6   r4   rE   rV   r   r   r   r   rG   Z   s    rG   )r   r    collectionsr   r   collections.abcr   r   typingr   r   r   r   r   rG   r   r   r   r   <module>   s   /