
    F˝i                     v    d dl mZ d dl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	)
    )Mapping)AnycastAsyncIOMotorClient)DataNotDictLikeError)State)BaseStorageDefaultKeyBuilder
KeyBuilder	StateType
StorageKeyc                      e Zd ZdZ	 	 	 ddededz  dededdf
dZe	 dd	ed
e	ee
f   dz  de
dd fd       ZddZdededz  fdZddededdfdZdededz  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        R/home/leshdev/mybot/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_url0   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.closeD   s     s   valuec                 V    |y t        |t              r|j                  S t        |      S N)
isinstancer	   statestr)r   r(   s     r   resolve_statezMongoStorage.resolve_stateH   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r5   r6   upsert)r   buildr   find_one_and_update
delete_one
update_oner.   )r   r/   r,   document_idupdateds        r   	set_statezMongoStorage.set_stateO   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)Nr1   r,   )r   r<   r   find_onegetr   r/   r@   documents       r   	get_statezMongoStorage.get_statea   sX     ''--c2))22E;3GHH||G$$ Is   <AAAdatac                   K   t        |t              s#dt        |      j                   }t	        |      | 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 r1   r2   rI   r3   r   Tr4   r9   r:   )r+   dicttype__name__r   r   r<   r   r=   r>   r?   )r   r/   rI   msgr@   rA   s         r   set_datazMongoStorage.set_datah   s    $%A$t*BUBUAVWC&s++''--c2 ,,@@{+ 61+.!1: $	 A  G "}&&115+2FGGG  ""--{+/ .    Hs6   A;C!=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)Nr1   rI   )	r   r<   r   rD   rE   r   rK   r-   r   rF   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.r1   r9   Tr   )r5   r6   r;   r8   r7   rI   )r   r<   itemsr   r=   r>   rE   )r   r/   rI   r@   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)rM   
__module____qualname____doc__r   r   r-   r   classmethodrK   r   r%   r'   r   r.   r   rB   rH   r   rO   rQ   rV   r#   r   r   r   r      sQ    *.$0("(  $&( 	(
 ( 
((  48,,  S>D0, 	,
 
, ,&9 t : i 4 $%: %#* %* GCH4E $ ,6* 6c3h 6-Z -wsCx7H -TRUWZRZ^ -r   r   N)collections.abcr   typingr   r   motor.motor_asyncior   aiogram.exceptionsr   aiogram.fsm.stater	   aiogram.fsm.storage.baser
   r   r   r   r   r   r#   r   r   <module>rc      s,    #  2 3 # @-; @-r   