
    x'h                         d Z 	 ddlZddlZddlZddlZddlmZmZm	Z	m
Z
 ddlmZmZ de	de	fdZ G d	 d
e      Zy# e$ r dZ Y =w xY w)T    NF)OptionalUnionCallableAny)StateStorageBaseStateDataContextfuncreturnc                       fd}|S )Nc                    K   | j                   4 d {     | g|i | d {   cd d d       d {    S 7 )7 7 	# 1 d {  7  sw Y   y xY ww)N)lock)selfargskwargsr	   s      ^/var/www/flask-api/venv/lib/python3.12/site-packages/telebot/asyncio_storage/pickle_storage.pywrapperzwith_lock.<locals>.wrapper   sV     99 	5 	5d4T4V44	5 	5 	54	5 	5 	5 	5sP   A>AAA AAAA AAA
AAA )r	   r   s   ` r   	with_lockr      s    5 N    c                      e Zd ZdZ	 	 	 ddedee   ddfdZdefdZdeddfd	Z	d
 Z
e	 	 	 ddedededee   dee   dee   defd       Ze	 	 	 ddededee   dee   dee   deedf   fd       Ze	 	 	 ddededee   dee   dee   defd       Ze	 	 	 ddedededeeeeef   dee   dee   dee   defd       Ze	 	 	 ddededee   dee   dee   defd       Ze	 	 	 ddededee   dee   dee   defd       Z	 	 	 ddededee   dee   dee   dee   fdZe	 	 	 ddedededee   dee   dee   defd       ZdefdZy)StatePickleStoragea  
    State storage based on pickle file.

    .. warning::

        This storage is not recommended for production use.
        Data may be corrupted. If you face a case where states do not work as expected,
        try to use another storage.

    .. code-block:: python3

        storage = StatePickleStorage()
        bot = AsyncTeleBot(token, storage=storage)

    :param file_path: Path to file where states will be stored.
    :type file_path: str

    :param prefix: Prefix for keys, default is "telebot".
    :type prefix: Optional[str]

    :param separator: Separator for keys, default is ":".
    :type separator: Optional[str]
    	file_path	separatorr
   Nc                     t         st        d      || _        || _        || _        t        j                         | _        | j                          y )Nz4Please install aiofiles using `pip install aiofiles`)	aiofiles_installedImportErrorr   prefixr   asyncioLockr   
create_dir)r   r   r   r   s       r   __init__zStatePickleStorage.__init__0   s?     "TUU""LLN	r   c                   K   t        j                  | j                  d      4 d {   }|j                          d {   }t	        j
                  |      cd d d       d {    S 7 B7 ,7 	# 1 d {  7  sw Y   y xY ww)Nrb)aiofilesopenr   readpickleloads)r   fdatas      r   _read_from_filez"StatePickleStorage._read_from_file@   sf     ==6 	& 	&!>D<<%	& 	& 	&!	& 	& 	& 	&sU   %BA*BA0A, A0B$A.%B,A0.B0B6A97B>Br*   c                   K   t        j                  | j                  d      4 d {   }|j                  t	        j
                  |             d {    d d d       d {    y 7 A7 7 	# 1 d {  7  sw Y   y xY ww)Nwb)r$   r%   r   writer'   dumps)r   r*   r)   s      r   _write_to_filez!StatePickleStorage._write_to_fileE   sh     ==6 	. 	.!''&,,t,---	. 	. 	.-	. 	. 	. 	.sV   %BA)B(A/A+A/B#A-$B+A/-B/B5A86B=Bc                 `   t         j                  j                  | j                        \  }}t        j                  |d       t         j                  j                  | j                        s6t        | j                  d      5 }t        j                  i |       ddd       yy# 1 sw Y   yxY w)z2
        Create directory .save-handlers.
        T)exist_okr-   N)	ospathsplitr   makedirsisfiler%   r'   dump)r   dirsfilenamefiles       r   r    zStatePickleStorage.create_dirI   s}     t~~6h
D4(ww~~dnn-dnnd+ &tB%& & .& &s   B$$B-chat_iduser_idstatebusiness_connection_idmessage_thread_idbot_idc           	         K   | j                  ||| j                  | j                  |||      }| j                          d {   }||vr	|i d||<   n|||   d<   | j	                  |       d {    y7 37 w)N)r>   r*   r>   T_get_keyr   r   r+   r0   )	r   r<   r=   r>   r?   r@   rA   _keyr*   s	            r   	set_statezStatePickleStorage.set_stateS   s      }}KKNN"
 ))++t#("5DJ"'DJw!!$''' ,
 	(s#   ?A9A5-A9/A70A97A9c           	         K   | j                  ||| j                  | j                  |||      }| j                          d {   }|j	                  |i       j	                  d      S 7 %w)Nr>   rD   r   r   r+   getr   r<   r=   r?   r@   rA   rE   r*   s           r   	get_statezStatePickleStorage.get_staten   sg      }}KKNN"
 ))++xxb!%%g.. ,s   ?A)A'&A)c           	         K   | j                  ||| j                  | j                  |||      }| j                          d {   }||v r||= | j	                  |       d {    yy7 &7 w)NTFrC   rJ   s           r   delete_statezStatePickleStorage.delete_state   sy      }}KKNN"
 ))++4<T
%%d+++ , ,s#   ?A,A(A,!A*"A,*A,keyvaluec           	      <  K   | j                  ||| j                  | j                  |||      }| j                          d {   }	|	j	                  |i       }
||
d   |<   ||	vrt        d| d      ||	|   d   |<   | j                  |	       d {    y7 V7 w)Nr*   zStatePickleStorage: key z does not exist.T)rD   r   r   r+   rI   RuntimeErrorr0   )r   r<   r=   rN   rO   r?   r@   rA   rE   r*   
state_datas              r   set_datazStatePickleStorage.set_data   s      }}KKNN"
 ))++XXdB'
"'
63t!9$?OPQQ&+DJvs#!!$''' , 	(s$   ?BBABBBBc           	         K   | j                  ||| j                  | j                  |||      }| j                          d {   }|j	                  |i       j	                  di       S 7 &w)Nr*   rH   rJ   s           r   get_datazStatePickleStorage.get_data   si      }}KKNN"
 ))++xxb!%%fb11 ,s   ?A*A('A*c           	         K   | j                  ||| j                  | j                  |||      }| j                          d {   }||v r"i ||   d<   | j	                  |       d {    yy7 +7 w)Nr*   TFrC   rJ   s           r   
reset_datazStatePickleStorage.reset_data   s      }}KKNN"
 ))++4<!#DJv%%d+++ , ,s#   ?A1A-$A1&A/'A1/A1c                 $    t        | |||||      S )N)r<   r=   r?   r@   rA   )r   )r   r<   r=   r?   r@   rA   s         r   get_interactive_dataz'StatePickleStorage.get_interactive_data   s#      #9/
 	
r   c           	         K   | j                  ||| j                  | j                  |||      }| j                          d {   }|||   d<   | j	                  |       d {    y7 &7 w)Nr*   TrC   )	r   r<   r=   r*   r?   r@   rA   rE   	file_datas	            r   savezStatePickleStorage.save   st      }}KKNN"
 ..00	"&	$!!),,, 1,s#   ?A,A( A,"A*#A,*A,c                 <    d| j                    d| j                   dS )NzStatePickleStorage(z, ))r   r   )r   s    r   __str__zStatePickleStorage.__str__  s     $T^^$4Bt{{m1EEr   )z./.state-save/states.pkltelebot:)NNN)__name__
__module____qualname____doc__strr   r!   dictr+   r0   r    r   intboolrF   r   rK   rM   floatrS   rU   rW   rY   r\   r_   r   r   r   r   r      s   4 4#&	 C=	
 
 &t &
. .$ .&  15+/ $  	
 !) $C=  
 4 
 15+/ $// / !)	/
 $C=/ / 
sDy	/ /( 
 15+/ $  !)	
 $C=  
 0  15+/ $  	
 S#ud*+ !) $C=  
 : 
 15+/ $22 2 !)	2
 $C=2 2 
2 2( 
 15+/ $  !)	
 $C=  
 8 15+/ $

 
 !)	

 $C=
 
 
$
"  15+/ $  	
 !) $C=  
 .F Fr   r   )r   r$   r   r3   r'   r   typingr   r   r   r   $telebot.asyncio_storage.base_storager   r   r   r   r   r   r   <module>rm      sb     
   1 1 SH  {F) {F'  s   < AA