o
    "h                     @   s~   d Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
 ddlmZmZ e	dZe	dZe	dZG d	d
 d
eeeef ZdS )aO  This module contains a mutable mapping that keeps track of the keys that where accessed.

.. versionadded:: 20.0

Warning:
    Contents of this module are intended to be used internally by the library and *not* by the
    user. Changes to this module are not considered breaking changes and may not be documented in
    the changelog.
    )UserDict)Mapping)FinalGenericOptionalTypeVarUnion)DEFAULT_NONEDefaultValue_VT_KT_Tc                	       s*  e Zd ZU dZe Zeed< 	 dZd" fddZ	de
d	eddf fd
dZde
ddf fddZdee
ee
 f ddfddZdee
 fddZdeee
ef  fddZde
ddfddZdee
ef ddfddZefde
dedef fddZd" fddZd#ddde
dee defd d!Z  ZS )$TrackingDicta'  Mutable mapping that keeps track of which keys where accessed with write access.
    Read-access is not tracked.

    Note:
        * ``setdefault()`` and ``pop`` are considered writing only depending on whether the
            key is present
        * deleting values is considered writing
    DELETED)_write_access_keysreturnNc                    s   t    t | _d S N)super__init__setr   self	__class__ S/var/www/html/venv/lib/python3.10/site-packages/telegram/ext/_utils/trackingdict.pyr   6   s   
zTrackingDict.__init__keyvaluec                    s   |  | t || d S r   )_TrackingDict__track_writer   __setitem__)r   r   r   r   r   r   r   :   s   
zTrackingDict.__setitem__c                    s   |  | t | d S r   )r   r   __delitem__r   r   r   r   r   r    >   s   
zTrackingDict.__delitem__c                 C   s,   t |tr|  j|O  _d S | j| d S r   )
isinstancer   r   addr!   r   r   r   __track_writeB   s   
zTrackingDict.__track_writec                 C   s   | j }t | _ |S )zUReturns all keys that were write-accessed since the last time this method was called.)r   r   )r   outr   r   r   pop_accessed_keysH   s   zTrackingDict.pop_accessed_keysc                    s      } fdd|D S )z
        Returns all keys & corresponding values as set of tuples that were write-accessed since
        the last time this method was called. If a key was deleted, the value will be
        :attr:`DELETED`.
        c                    s   g | ]}|  | jfqS r   )getr   ).0r   r   r   r   
<listcomp>U   s    z9TrackingDict.pop_accessed_write_items.<locals>.<listcomp>)r&   )r   keysr   r   r   pop_accessed_write_itemsN   s   z%TrackingDict.pop_accessed_write_itemsc                 C   s   | j | dS )zUse this method have the key returned again in the next call to
        :meth:`pop_accessed_write_items` or :meth:`pop_accessed_keys`
        N)r   r#   r!   r   r   r   mark_as_accessedW   s   zTrackingDict.mark_as_accessedmappingc                 C   s    |  D ]	\}}|| j|< qdS )z8Like ``update``, but doesn't count towards write access.N)itemsdata)r   r-   r   r   r   r   r   update_no_track_   s   zTrackingDict.update_no_trackdefaultc                    s8   || v r	|  | t|trt |S t j||dS )N)r1   )r   r"   r
   r   popr   r   r1   r   r   r   r2   f   s
   

zTrackingDict.popc                    s"   |  tt   t   d S r   )r   r   r   r*   clearr   r   r   r   r4   q   s   zTrackingDict.clearr   zTrackingDict[_KT, _T]c                 C   s&   || v r| | S |  | || |< |S r   )r   r3   r   r   r   
setdefaultw   s
   
zTrackingDict.setdefault)r   Nr   )__name__
__module____qualname____doc__objectr   r   __annotations__	__slots__r   r   r   r   r    r   r   r   r&   listtupler+   r,   r   r0   r	   r2   r4   r   r   r5   __classcell__r   r   r   r   r   '   s.   
 		
(r   N)r9   collectionsr   collections.abcr   typingr   r   r   r   r   telegram._utils.defaultvaluer	   r
   r   r   r   r   r   r   r   r   <module>   s   	