Ë
    ö­¦jÖ  ã                   óô   — d dl mZmZ 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 d dlmZ eez  dz  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)ÚAsyncGeneratorÚMapping)Úasynccontextmanager)Ú	dataclass)ÚAnyÚLiteralÚoverload)ÚStateNÚdefaultT)Úfrozenc                   ób   — e Zd ZU eed<   eed<   eed<   dZedz  ed<   dZedz  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   ÚstrÚDEFAULT_DESTINYr   © ó    úK/var/www/html/venv/lib/python3.12/site-packages/aiogram/fsm/storage/base.pyr   r      s8   … àƒKØƒLØƒLØ €Iˆs�T‰zÓ Ø)-Ð˜C $™JÓ-Ø"€GˆSÔ"r   r   c                   ó>   — e Zd ZdZe	 ddeded   dz  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"      sC   „ Ù%àð 9=ñàðð Ð-Ñ.°Ñ5ðð 
ò	ó ñ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d   dz  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_destinyr4   r5   r6   r7   r8   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
        Nr3   )r+   r4   r5   r6   r7   r8   s         r    Ú__init__zDefaultKeyBuilder.__init__5   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 )Nz˜Default key builder is not configured to use key destiny other than the default.

Probably, you should set `with_destiny=True` in for DefaultKeyBuilder.)r4   r6   Úappendr   r   r7   r   r   r   r   r8   r   r   Ú
ValueErrorr5   Újoin)r+   r#   r$   ÚpartsÚerror_messages        r    r,   zDefaultKeyBuilder.buildK   sû   € ð
 —‘�ˆØ×ÒØ�L‰Lœ˜SŸZ™Z›Ô)Ø×+Ò+°×0JÒ0JØ�L‰Lœ˜S×7Ñ7Ó8Ô9Ø�‰”S˜Ÿ™Ó%Ô&Ø�=Š=Ø�L‰Lœ˜SŸ]™]Ó+Ô,Ø�‰”S˜Ÿ™Ó%Ô&Ø×ÒØ�L‰L˜Ÿ™Õ%Ø�[‰[œOÒ+ð]ð ô ˜]Ó+Ð+ÙØ�L‰L˜ÔØ�~‰~×"Ñ" 5Ó)Ð)r   r-   )
r   r   r   r.   r   Úboolr:   r   r
   r,   r   r   r    r0   r0   *   sŠ   „ ñð ØØ!Ø,1Ø"ò)ð ð)ð ð	)ð
 ð)ð &*ð)ð ð)ð 
ó)ð2 9=ñ*àð*ð Ð-Ñ.°Ñ5ð*ð 
ô	*r   r0   c            
       óD  — e Zd ZdZeddededdfd„«       Zedededz  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dz  fd„«       Zededededefd„«       Z	 ddedededz  dedz  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_statek   ó   è ø� ùó   ‚c              ƒ   ó   K  — y­w)z_
        Get key state

        :param key: storage key
        :return: current state
        Nr   ©r+   r#   s     r    Ú	get_statezBaseStorage.get_statet   rF   rG   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}   rF   rG   c              ƒ   ó   K  — y­w)zi
        Get current data for key

        :param key: storage key
        :return: current data
        Nr   rI   s     r    Úget_datazBaseStorage.get_data†   rF   rG   Ú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+   rO   rP   s      r    Ú	get_valuezBaseStorage.get_value�   rF   rG   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+   rO   rP   r   s       r    rR   zBaseStorage.get_value™   rF   rG   c              ƒ   ód   K  — | j                  |«      ƒ d {  –—† }|j                  ||«      S 7 Œ­wr-   )rN   Úget)r+   rO   rP   r   r&   s        r    rR   zBaseStorage.get_value¤   s/   è ø€ ð —]‘] ;Ó/×/ˆØ�x‰x˜ 'Ó*Ð*ð 0ús   ‚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&   )rN   ÚupdaterL   Úcopy)r+   r#   r&   Úcurrent_datas       r    Úupdate_datazBaseStorage.update_data­   sW   è ø€ ð "Ÿ]™]¨s˜]Ó3×3ˆØ×Ñ˜DÔ!Ø�m‰m ¨,ˆmÓ7×7Ð7Ø× Ñ Ó"Ð"ð 4øà7ús!   ‚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º   rF   rG   r-   ©r)   N)r   r   r   r.   r   r   Ú	StateTyperE   r   rJ   r   r	   rL   ÚdictrN   r   rR   rZ   r]   r   r   r    rC   rC   f   sŠ  „ ñð ñ :ð °ið È4ò ó ðð ð :ð °#¸±*ò ó ðð ð *ð °G¸CÀ¸HÑ4Eð È$ò ó ðð ð *ð °°c¸3°h±ò ó ðð ð¨:ð Àð ÈÈtÉò ó ðð ð¨:ð Àð Èsð ÐWZò ó ðð #ñ	+àð+ð ð+ð �t‘ð	+ð
 
ˆt‰ó+ð# Zð #°w¸sÀC¸xÑ7Hð #ÈTÐRUÐWZÐRZÉ^ó #ð òó ñr   rC   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   rI   s     r    r(   zBaseEventIsolation.lockÂ   s   è ø€ ð Œ
ùs   ‚	Nc              ƒ   ó   K  — y ­wr-   r   r\   s    r    r]   zBaseEventIsolation.closeÎ   s	   è ø€ àùrG   r^   )	r   r   r   r   r   r   r   r(   r]   r   r   r    rb   rb   Á   sC   „ ØØð˜jð ¨^¸JÑ-Gò ó ó ðð òó ñr   rb   )Úabcr   r   Úcollections.abcr   r   Ú
contextlibr   Údataclassesr   Útypingr	   r
   r   Úaiogram.fsm.stater   r   r_   r   r   r"   r0   rC   rb   r   r   r    ú<module>rk      s   ðß #ß 3Ý *Ý !ß )Ñ )å #à�%‰K˜$Ñ€	à€ñ �$Ô÷#ð #ó ð#ô�ô ô$9*˜
ô 9*ôxX�#ô Xôv˜õ r   