
    dhg                         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mZmZmZ d dlmZ eeeef      ZdZ ed       G d	 d
             Z G d de      Z G d de      Z G d de      Z G d de      Zy)    )ABCabstractmethod)asynccontextmanager)	dataclass)AnyAsyncGeneratorDictLiteralMappingOptionalUnionoverload)StatedefaultT)frozenc                   b    e Zd ZU eed<   eed<   eed<   dZee   ed<   dZee   ed<   e	Z
eed<   y)
StorageKeybot_idchat_iduser_idN	thread_idbusiness_connection_iddestiny)__name__
__module____qualname__int__annotations__r   r   r   strDEFAULT_DESTINYr        R/var/www/netwell/bot/venv/lib/python3.12/site-packages/aiogram/fsm/storage/base.pyr   r      s8    KLL#Ix}#,0HSM0"GS"r"   r   c                   >    e Zd ZdZe	 ddedeed      defd       Z	y)	
KeyBuilderzBase class for key builder.Nkeypartdatastatelockreturnc                      y)z
        Build key to be used in storage's db queries

        :param key: contextual key
        :param part: part of the record
        :return: key to be used in storage's db queries
        Nr!   )selfr&   r'   s      r#   buildzKeyBuilder.build#   s     	r"   N)
r   r   r   __doc__r   r   r   r
   r   r/   r!   r"   r#   r%   r%       sD    % <@ w678 
	 r"   r%   c                   b    e Zd ZdZdddddddededed	ed
eddfdZ	 ddedee	d      defdZ
y)DefaultKeyBuildera$  
    Simple key builder with default prefix.

    Generates a colon-joined string with prefix, chat_id, user_id,
    optional bot_id, business_connection_id, destiny and field.

    Format:
     :code:`<prefix>:<bot_id?>:<business_connection_id?>:<chat_id>:<user_id>:<destiny?>:<field?>`
    fsm:Fprefix	separatorwith_bot_idwith_business_connection_idwith_destinyr7   r8   r9   r:   r;   r,   Nc                J    || _         || _        || _        || _        || _        y)a  
        :param prefix: prefix for all records
        :param separator: separator
        :param with_bot_id: include Bot id in the key
        :param with_business_connection_id: include business connection id
        :param with_destiny: include destiny key
        Nr6   )r.   r7   r8   r9   r:   r;   s         r#   __init__zDefaultKeyBuilder.__init__>   s*      "&+F((r"   r&   r'   r(   c                    | j                   g}| j                  r$|j                  t        |j                               | j
                  r0|j                  r$|j                  t        |j                               |j                  t        |j                               |j                  r$|j                  t        |j                               |j                  t        |j                               | j                  r|j                  |j                         n |j                  t        k7  rd}t        |      |r|j                  |       | j                  j                  |      S )NzDefault key builder is not configured to use key destiny other than the default.

Probably, you should set `with_destiny=True` in for DefaultKeyBuilder.)r7   r9   appendr   r   r:   r   r   r   r   r;   r   r    
ValueErrorr8   join)r.   r&   r'   partserror_messages        r#   r/   zDefaultKeyBuilder.buildT   s    
 LLSZZ)++0J0JLLS7789S%&==LLS]]+,S%&LL%[[O+]  ]++LL~~""5))r"   r0   )r   r   r   r1   r   boolr=   r   r   r
   r/   r!   r"   r#   r3   r3   3   s     !,1") ) 	)
 ) &*) ) 
)2 <@** w678* 
	*r"   r3   c            
       D   e Zd ZdZeddededdfd       Zededee	   fd       Z
ededee	ef   ddfd	       Zededee	ef   fd
       Zedede	dee   fd       Zedede	dedefd       Z	 ddede	dee   dee   fdZdedee	ef   dee	ef   fdZedd       Zy)BaseStoragez)
    Base class for all FSM storages
    Nr&   r*   r,   c                    K   yw)zn
        Set state for specified key

        :param key: storage key
        :param state: new state
        Nr!   )r.   r&   r*   s      r#   	set_statezBaseStorage.set_statet         	   c                    K   yw)z_
        Get key state

        :param key: storage key
        :return: current state
        Nr!   r.   r&   s     r#   	get_statezBaseStorage.get_state~   rI   rJ   r)   c                    K   yw)ze
        Write data (replace)

        :param key: storage key
        :param data: new data
        Nr!   )r.   r&   r)   s      r#   set_datazBaseStorage.set_data   rI   rJ   c                    K   yw)zi
        Get current data for key

        :param key: storage key
        :return: current data
        Nr!   rL   s     r#   get_datazBaseStorage.get_data   rI   rJ   storage_keydict_keyc                    K   yw)z
        Get single value from data by key

        :param storage_key: storage key
        :param dict_key: value key
        :return: value stored in key of dict or ``None``
        Nr!   )r.   rR   rS   s      r#   	get_valuezBaseStorage.get_value   s      	rJ   r   c                    K   yw)z
        Get single value from data by key

        :param storage_key: storage key
        :param dict_key: value key
        :param default: default value to return
        :return: value stored in key of dict or default
        Nr!   )r.   rR   rS   r   s       r#   rU   zBaseStorage.get_value   s      	rJ   c                 d   K   | j                  |       d {   }|j                  ||      S 7 wr0   )rQ   get)r.   rR   rS   r   r)   s        r#   rU   zBaseStorage.get_value   s/      ]];//xx'** 0s   0.0c                    K   | j                  |       d{   }|j                  |       | j                  ||       d{    |j                         S 7 @7 w)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)   )rQ   updaterO   copy)r.   r&   r)   current_datas       r#   update_datazBaseStorage.update_data   sW      "]]s]33D!mm,m777  "" 47s!   AA+AAAAc                    K   yw)zC
        Close storage (database connection, file or etc.)
        Nr!   r.   s    r#   closezBaseStorage.close   s     
 	rJ   r0   r,   N)r   r   r   r1   r   r   	StateTyperH   r   r   rM   r   r   rO   r	   rQ   r   rU   r]   r`   r!   r"   r#   rF   rF   o   s    : i 4   : (3-   * GCH4E $   * c3h   :  RU   	: 	 	s 	WZ 	 	 PT+%+14+?G}+	#+#Z #wsCx7H #TRUWZRZ^ #  r"   rF   c                   H    e Zd Zeededed   fd              Zedd       Zy)BaseEventIsolationr&   r,   )NNc                   K   d yw)z
        Isolate events with lock.
        Will be used as context manager

        :param key: storage key
        :return: An async generator
        Nr!   rL   s     r#   r+   zBaseEventIsolation.lock   s      
s   	Nc                    K   y wr0   r!   r_   s    r#   r`   zBaseEventIsolation.close   s	     rJ   ra   )	r   r   r   r   r   r   r   r+   r`   r!   r"   r#   rd   rd      sC    j ^J-G     r"   rd   N)abcr   r   
contextlibr   dataclassesr   typingr   r   r	   r
   r   r   r   r   aiogram.fsm.stater   r   rb   r    r   r%   r3   rF   rd   r!   r"   r#   <module>rl      s    # * !	 	 	 $U3:&'	 $# # # &9*
 9*x\# \~ r"   