
    x'h                     f    d dl Z d dlZd dlZd dl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)	    N)OptionalUnionCallable)StateStorageBaseStateDataContextfuncreturnc                       fd}|S )Nc                 `    | j                   5   | g|i |cd d d        S # 1 sw Y   y xY wN)lock)selfargskwargsr   s      V/var/www/flask-api/venv/lib/python3.12/site-packages/telebot/storage/pickle_storage.pywrapperzwith_lock.<locals>.wrapper	   s1    YY 	/.t.v.	/ 	/ 	/s   $- )r   r   s   ` r   	with_lockr      s    / 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 = TeleBot(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        j                         | _        | j                          y r   )r   prefixr   	threadingLockr   
create_dir)r   r   r   r   s       r   __init__zStatePickleStorage.__init__)   s1     #"NN$	r   c                     t        | j                  d      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w)Nrb)openr   pickleload)r   fs     r   _read_from_filez"StatePickleStorage._read_from_file6   s2    $..$' 	"1;;q>	" 	" 	"s   6?datac                     t        | j                  d      5 }t        j                  ||       d d d        y # 1 sw Y   y xY w)Nwb)r"   r   r#   dump)r   r'   r%   s      r   _write_to_filez!StatePickleStorage._write_to_file:   s5    $..$' 	!1KKa 	! 	! 	!s	   7A 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#   r*   )r   dirsfilenamefiles       r   r   zStatePickleStorage.create_dir>   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           	          | j                  ||| j                  | j                  |||      }| j                         }||vr	|i d||<   n|||   d<   | j	                  |       y)N)r8   r'   r8   T_get_keyr   r   r&   r+   )	r   r6   r7   r8   r9   r:   r;   _keyr'   s	            r   	set_statezStatePickleStorage.set_stateH   st     }}KKNN"
 ##%t#("5DJ"'DJwD!r   c           	          | j                  ||| j                  | j                  |||      }| j                         }|j	                  |i       j	                  d      S )Nr8   r>   r   r   r&   getr   r6   r7   r9   r:   r;   r?   r'   s           r   	get_statezStatePickleStorage.get_statec   s[     }}KKNN"
 ##%xxb!%%g..r   c           	          | j                  ||| j                  | j                  |||      }| j                         }||v r||= | j	                  |       yy)NTFr=   rD   s           r   delete_statezStatePickleStorage.delete_statex   sa     }}KKNN"
 ##%4<T
%r   keyvaluec           	          | j                  ||| j                  | j                  |||      }| j                         }	|	j	                  |i       }
||
d   |<   ||	vrt        d| d      | j                  |	       y)Nr'   zPickleStorage: key z does not exist.T)r>   r   r   r&   rC   RuntimeErrorr+   )r   r6   r7   rH   rI   r9   r:   r;   r?   r'   
state_datas              r   set_datazStatePickleStorage.set_data   s     }}KKNN"
 ##%XXdB'
"'
63t!4TF:JKLLD!r   c           	          | j                  ||| j                  | j                  |||      }| j                         }|j	                  |i       j	                  di       S )Nr'   rB   rD   s           r   get_datazStatePickleStorage.get_data   s]     }}KKNN"
 ##%xxb!%%fb11r   c           	          | j                  ||| j                  | j                  |||      }| j                         }||v ri ||   d<   | j	                  |       yy)Nr'   TFr=   rD   s           r   
reset_datazStatePickleStorage.reset_data   sh     }}KKNN"
 ##%4<!#DJv%r   c                 $    t        | |||||      S )N)r6   r7   r9   r:   r;   )r   )r   r6   r7   r9   r:   r;   s         r   get_interactive_dataz'StatePickleStorage.get_interactive_data   s#      #9/
 	
r   c           	          | j                  ||| j                  | j                  |||      }| j                         }|||   d<   | j	                  |       y)Nr'   Tr=   )	r   r6   r7   r'   r9   r:   r;   r?   	file_datas	            r   savezStatePickleStorage.save   s^     }}KKNN"
 ((*	"&	$I&r   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&   r+   r   r   intboolr@   r   rE   rG   floatrM   rO   rQ   rS   rV   rY   r   r   r   r   r      s   4 4#&	 C=	
 
" "!4 !D !&  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   typingr   r   r   telebot.storage.base_storager   r   r   r   r   r   r   <module>rg      s;    	   , , KH  wF) wFr   