
    dh                     v    d dl mZmZmZmZmZ d dl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  G d de      Zy)	    )AnyDictMappingOptionalcastAsyncIOMotorClient)DataNotDictLikeError)State)BaseStorageDefaultKeyBuilder
KeyBuilder	StateType
StorageKeyc                      e Zd ZdZ	 	 	 ddedee   dededdf
dZe		 dd	ed
ee
eef      dedd fd       ZddZdedee   fdZddededdfdZdedee   fdZdedeeef   ddfdZdede
eef   fdZdedeeef   de
eef   fdZy)MongoStoragez

    .. warning::
        DEPRECATED: Use :class:`PyMongoStorage` instead.
        This class will be removed in future versions.


    MongoDB storage required :code:`motor` package installed (:code:`pip install motor`)
    Nclientkey_builderdb_namecollection_namereturnc                     |
t               }|| _        | j                  |   | _        | j                  |   | _        || _        y)a&  
        :param client: Instance of AsyncIOMotorClient
        :param key_builder: builder that helps to convert contextual key to string
        :param db_name: name of the MongoDB database for FSM
        :param collection_name: name of the collection for storing FSM states and data
        N)r   _client	_database_collection_key_builder)selfr   r   r   r   s        S/var/www/netwell/bot/venv/lib/python3.12/site-packages/aiogram/fsm/storage/mongo.py__init__zMongoStorage.__init__   sB     +-Kg.>>/:'    urlconnection_kwargskwargsc                 6    |i }t        |fi |} | dd|i|S )ad  
        Create an instance of :class:`MongoStorage` with specifying the connection string

        :param url: for example :code:`mongodb://user:password@host:port`
        :param connection_kwargs: see :code:`motor` docs
        :param kwargs: arguments to be passed to :class:`MongoStorage`
        :return: an instance of :class:`MongoStorage`
        r    r   )clsr!   r"   r#   r   s        r   from_urlzMongoStorage.from_url/   s3     $ "#C=+<=+&+F++r    c                 @   K   | j                   j                          yw)z5Cleanup client resources and disconnect from MongoDB.N)r   close)r   s    r   r)   zMongoStorage.close@   s     s   valuec                 V    |y t        |t              r|j                  S t        |      S N)
isinstancer   statestr)r   r*   s     r   resolve_statezMongoStorage.resolve_stateD   s(    =eU#;;5zr    keyr.   c                 ~  K   | j                   j                  |      }|[| j                  j                  d|idddiiddid       d {   }|i k(  r&| j                  j	                  d|i       d {    y y | j                  j                  d|idd| j                  |      iid	       d {    y 7 l7 D7 	w)
N_id$unsetr.      r   Tfilterupdate
projectionreturn_document$setr7   r8   upsert)r   buildr   find_one_and_update
delete_one
update_oner0   )r   r1   r.   document_idupdateds        r   	set_statezMongoStorage.set_stateK   s     ''--c2= ,,@@{+ 7A,/!1: $	 A  G "}&&115+2FGGG  ""--{+$*<*<U*C DE .    Hs6   AB=
B7)B=4B95<B=1B;2B=9B=;B=c                    K   | j                   j                  |      }| j                  j                  d|i       d {   }|y |j	                  d      S 7 w)Nr3   r.   )r   r>   r   find_onegetr   r1   rB   documents       r   	get_statezMongoStorage.get_state]   sX     ''--c2))22E;3GHH||G$$ Is   <AAAdatac                   K   t        |t              s!t        dt        |      j                         | j
                  j                  |      }|s[| j                  j                  d|idddiiddid       d {   }|i k(  r&| j                  j                  d|i       d {    y y | j                  j                  d|id	d|iid
       d {    y 7 ]7 57 	w)Nz-Data must be a dict or dict-like object, got r3   r4   rK   r5   r   Tr6   r;   r<   )r-   dictr
   type__name__r   r>   r   r?   r@   rA   )r   r1   rK   rB   rC   s        r   set_datazMongoStorage.set_datad   s    $%&?T
@S@S?TU  ''--c2 ,,@@{+ 61+.!1: $	 A  G "}&&115+2FGGG  ""--{+/ .    Hs6   A9C;C<)C%C&-CCCCCc                    K   | j                   j                  |      }| j                  j                  d|i       d {   }||j	                  d      si S t        t        t        t        f   |d         S 7 9w)Nr3   rK   )	r   r>   r   rF   rG   r   r   r/   r   rH   s       r   get_datazMongoStorage.get_data{   sp     ''--c2))22E;3GHH8<<#7IDcNHV$455 Is   <A:A8:A:c                 n  K   | j                   j                  |      }|j                         D ci c]  \  }}d| | }}}| j                  j	                  d|id|iddddi       d {   }|s%| j                  j                  d|i       d {    |j                  di       S c c}}w 7 C7 w)Nzdata.r3   r;   Tr   )r7   r8   r=   r:   r9   rK   )r   r>   itemsr   r?   r@   rG   )r   r1   rK   rB   r*   update_withupdate_results          r   update_datazMongoStorage.update_data   s     ''--c2>BjjlK
Use}e+KK"..BB;'K( qz C 
 
 ""--uk.BCCC  ,, L
 Ds.   /B5B+,B5-B1.&B5B3B53B5)Naiogram_fsmstates_and_datar,   )r   N)rO   
__module____qualname____doc__r	   r   r   r/   r   classmethodr   r   r'   r)   r   r0   r   rD   rJ   r   rP   rR   rW   r%   r    r   r   r      sI    -1$0("( j)( 	(
 ( 
(( EI,,*24S>*B,UX,	, , 9 # : i 4 $%: %(3- %* GCH4E $ .6* 6c3h 6-Z -wsCx7H -TRUWZRZ^ -r    r   N)typingr   r   r   r   r   motor.motor_asyncior	   aiogram.exceptionsr
   aiogram.fsm.stater   aiogram.fsm.storage.baser   r   r   r   r   r   r%   r    r   <module>rc      s,    5 5 2 3 # ~-; ~-r    