a
    y{Jh	                     @   s   d dl mZm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 eeeef  ZdZeddG d	d
 d
ZG dd deZG dd deZdS )    )ABCabstractmethod)asynccontextmanager)	dataclass)AnyAsyncGeneratorDictOptionalUnion)StatedefaultT)frozenc                   @   sB   e Zd ZU eed< eed< eed< dZee ed< eZe	ed< dS )
StorageKeyZbot_idZchat_idZuser_idN	thread_iddestiny)
__name__
__module____qualname__int__annotations__r   r	   DEFAULT_DESTINYr   str r   r   J/var/www/shaz/venv/lib/python3.9/site-packages/aiogram/fsm/storage/base.pyr      s
   
r   c                   @   s   e Zd ZdZedeeddddZeeee	 dddZ
eeee	ef dd	d
dZeeee	ef dddZeee	ef ee	ef d	ddZeddddZdS )BaseStoragez)
    Base class for all FSM storages
    N)keystatereturnc                    s   dS )zn
        Set state for specified key

        :param key: storage key
        :param state: new state
        Nr   )selfr   r   r   r   r   	set_state   s    zBaseStorage.set_stater   r   c                    s   dS )z_
        Get key state

        :param key: storage key
        :return: current state
        Nr   r   r   r   r   r   	get_state%   s    zBaseStorage.get_state)r   datar   c                    s   dS )ze
        Write data (replace)

        :param key: storage key
        :param data: new data
        Nr   )r   r   r#   r   r   r   set_data/   s    zBaseStorage.set_datac                    s   dS )zi
        Get current data for key

        :param key: storage key
        :return: current data
        Nr   r!   r   r   r   get_data9   s    zBaseStorage.get_datac                    s8   | j |dI dH }|| | j||dI dH  | S )z
        Update date in the storage for key (like dict.update)

        :param key: storage key
        :param data: partial data
        :return: new data
        )r   N)r   r#   )r%   updater$   copy)r   r   r#   Zcurrent_datar   r   r   update_dataC   s    
zBaseStorage.update_datar   c                    s   dS )zC
        Close storage (database connection, file or etc.)
        Nr   r   r   r   r   closeP   s    zBaseStorage.close)N)r   r   r   __doc__r   r   	StateTyper   r	   r   r"   r   r   r$   r%   r(   r+   r   r   r   r   r      s   				"r   c                   @   s:   e Zd Zeeeed dddZeddddZdS )	BaseEventIsolation)NNr    c                 C  s
   dV  dS )z
        Isolate events with lock.
        Will be used as context manager

        :param key: storage key
        :return: An async generator
        Nr   r!   r   r   r   lockY   s    
zBaseEventIsolation.lockNr)   c                    s   d S )Nr   r*   r   r   r   r+   e   s    zBaseEventIsolation.close)	r   r   r   r   r   r   r   r/   r+   r   r   r   r   r.   X   s
   
r.   N)abcr   r   
contextlibr   dataclassesr   typingr   r   r   r	   r
   Zaiogram.fsm.stater   r   r-   r   r   r   r.   r   r   r   r   <module>   s   B