
    j.                        d dl mZ d dlZd dlZd dl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 d dlmZmZmZ d d	lmZ  e            Zd
ZdZ G d de          Z G d de          ZdS )    )annotationsN)AsyncIteratorIterableMapping)Any)uuid4)LockedError)KeyOnRemoveCallbackValue)	NOT_EXIST	UNLIMITEDBackend)Memoryz:serializable:lockz:tx_lockc                      e Zd Zg dZd] fdZd^d	Zd
 Zd Zd Zd_dZ		 	 d`dadZ
dbdcdZdddedZd^dZdfd Zdgd#Zdhd&Zdbdid)Zdd*djd,Zdkdld0Zdmd1Zdkdnd3Zd^d4Zdod5Zedpd6            Zd7 Zd8 Zdqd;Zdrd<Zdd=dsdAZdddBdtdDZ	 dbdudIZ dmdJZ!dbdvdNZ"dO Z#dwdPZ$	 	 dxdydTZ%dzdUZ&ddVd{dXZ'd|dYZ(dkd}d\Z) xZ*S )~TransactionBackend)_backend_local_cache
_to_delete	__disable_idbackendr   c                    || _         t                      | _        t                      | _        t                                                       |j        | _        d S N)r   r   r   setr   super__init__r   )selfr   	__class__s     g/DATA/AppData/hermes/projects/honcho/.venv/lib/python3.11/site-packages/cashews/backends/transaction.pyr   zTransactionBackend.__init__   sD    "HH$'EE;    keyr
   returnboolc                    || j         v S r   )r   r   r"   s     r    _key_is_deletez!TransactionBackend._key_is_delete#   s    do%%r!   c                  K   | j         r | j        j        | j           d {V  i }| j        j                                        D ]F\  }\  }}|r#t          |t          j                    z
            }||                    |i           |<   G|                                D ]'\  }}| j        	                    ||           d {V  (| 
                                 d S Nexpire)r   r   delete_manyr   storeitemsinttime
setdefaultset_many_clear_local_storage)r   expire_groupr"   r+   valuekvs         r    commitzTransactionBackend.commit&   s	     ? 	>+$-+T_========$($5$;$A$A$C$C 	= 	= C&% 3Vdikk1227<L##FB//44&,,.. 	< 	<JFB-((F(;;;;;;;;;;!!#####r!   c                2   K   |                                   d S r   )r3   r   s    r    rollbackzTransactionBackend.rollback4   s      !!#####r!   c                R    t                      | _        t                      | _        d S r   )r   r   r   r   r9   s    r    r3   z'TransactionBackend._clear_local_storage7   s    "HH%%r!   callbackr   c                n    | j                             |           | j                            |           d S r   )r   on_remove_callbackr   )r   r<   s     r    r>   z%TransactionBackend.on_remove_callback;   s5    ((222,,X66666r!   Nr5   r   r+   float | Noneexistbool | Nonec                  K   |F| j                             |           d {V |ur$| j                            |           d {V |urdS | j                            |           | j                            ||||           d {V S )NF)r   existsr   r   discardr   )r   r"   r5   r+   r@   s        r    r   zTransactionBackend.set?   s       m**3////////u<<'..s333333335@@5$$$&**3vuEEEEEEEEEr!   pairsMapping[Key, Value]c                   K   | j                             |                                           | j                            ||           d {V S r   )r   difference_updatekeysr   r2   )r   rE   r+   s      r    r2   zTransactionBackend.set_manyO   sO      ))%**,,777&//v>>>>>>>>>r!      r/   c                V  K   | j                             |           d {V sK|| j        vrB| j                            |d           d {V }| j                             ||           d {V  | j                            |           | j                             |||           d {V S )Nr   r*   )r   rC   r   r   getr   rD   incr)r   r"   r5   r+   currents        r    rM   zTransactionBackend.incrS   s      &--c22222222 	6s$/7Q7Q M--c155555555G#''W555555555$$$&++Cv+FFFFFFFFFr!   c                ~   K   | j                             |           d {V  | j                            |           dS )NT)r   deleter   addr&   s     r    rP   zTransactionBackend.deleteZ   sJ      &&s+++++++++C   tr!   rI   c                h   K    | j         j        |  d {V  | j                            |           d S r   )r   r,   r   update)r   rI   s     r    r,   zTransactionBackend.delete_many_   sG      +d+T22222222t$$$$$r!   patternstrc                   K   | j                             |           d {V  | j                            |          2 3 d {V }| j                            |           "6 d S r   )r   delete_matchr   scanr   rQ   r   rT   r"   s      r    rW   zTransactionBackend.delete_matchc   s      ,,W555555555++G44 	% 	% 	% 	% 	% 	% 	%#O$$$$ 544s   Atimeoutfloatc                   K   |                      |          rd S | j                            |t                     d {V }|t          u r!| j                            ||           d {V S | j                            |||           d {V  d S )Ndefaultr*   )r'   r   rL   _emptyr   r+   r   )r   r"   rZ   r5   s       r    r+   zTransactionBackend.expireh   s      s## 	Fm''V'<<<<<<<<F??*11#w?????????##Cw#???????????r!   r^   Value | Nonec                   K   |                      |          r|S | j                            |t                     d {V }|t          ur|S | j                            ||           d {V S )Nr]   )r'   r   rL   r_   r   )r   r"   r^   r5   s       r    rL   zTransactionBackend.getq   s      s## 	N'++C+@@@@@@@@L]&&sG&<<<<<<<<<r!   r]   tuple[Value | None, ...]c                 K   t          |          }t                              ||          t          |          }t	           | j        j        |dt          i d {V           D ]0\  }}|t          ur"||         }||<   |                    |           1t          |          }t	           | j	        j        |d|i d {V           D ]'\  }}||         }| 
                    |          s||<   (t          fd|D                       S )Nr^   c              3  (   K   | ]}|         V  d S r    ).0r"   valuess     r    	<genexpr>z.TransactionBackend.get_many.<locals>.<genexpr>   s'      11SVC[111111r!   )r   dictfromkeyslist	enumerater   get_manyr_   remover   r'   tuple)	r   r^   rI   missed_keys_keysir5   r"   rg   s	           @r    rm   zTransactionBackend.get_manyy   sC     $iitW--[!!!(B(9(BE(ZSY(Z(Z"Z"Z"Z"Z"Z"Z[[ 	( 	(HAuF""Ah#s""3'''[!!!(>(>(Ww(W(W"W"W"W"W"W"WXX 	$ 	$HAu(C&&s++ $#s1111D111111r!   d   
batch_size AsyncIterator[tuple[Key, Value]]c               >  K   t                      }| j                            |          2 3 d {V \  }}||fW V  |                    |           '6 | j                            ||          2 3 d {V \  }}|                     |          r ||v r%||fW V  -6 d S N)rt   )r   r   	get_matchrQ   r   r'   )r   rT   rt   _local_stater"   r5   s         r    rx   zTransactionBackend.get_match   s     uu $ 1 ; ;G D D 	" 	" 	" 	" 	" 	" 	"*#uu*S!!!! !E !% 7 7J 7 W W 	 	 	 	 	 	 	*#u""3'' l""u* !X W Ws   A/Bc                  K   |                      |          rt          S | j                            |           d {V }|dk    r|S | j                            |           d {V }|t          u r|t
          u rt
          S |S )Nr   )r'   r   r   
get_expirer   r   )r   r"   local_expirebackend_expires       r    r{   zTransactionBackend.get_expire   s      s## 	!.99#>>>>>>>>1#}77<<<<<<<<Y&&<9+D+Dr!   AsyncIterator[Key]c               *  K   t                      }| j                            |          2 3 d {V }|W V  |                    |           "6 | j                            ||          2 3 d {V }|                     |          r||v r"|W V  (6 d S rw   )r   r   rX   rQ   r   r'   )r   rT   rt   ry   r"   s        r    rX   zTransactionBackend.scan   s      uu*//88 	" 	" 	" 	" 	" 	" 	"#IIIIS!!!! 9 ++G
+KK 	 	 	 	 	 	 	#""3'' l""IIIII LKKs   A*Bc                   K   | j                             |           d {V rdS |                     |          rdS | j                            |           d {V S )NTF)r   rC   r'   r   r&   s     r    rC   zTransactionBackend.exists   sy      "))#........ 	4s## 	5]))#.........r!   c                   K   | j                                          d {V | j                                         d {V z   S r   )r   get_keys_countr   r9   s    r    r   z!TransactionBackend.get_keys_count   sR      ]1133333333D<M<\<\<^<^6^6^6^6^6^6^^^r!   c                    | j         j        S r   )r   is_initr9   s    r    r   zTransactionBackend.is_init   s    }$$r!   c                D   K   | j                                          d {V S r   )r   initr9   s    r    r   zTransactionBackend.init   s,      ]'')))))))))r!   c                D   K   | j                                          d {V S r   )r   closer9   s    r    r   zTransactionBackend.close   s,      ]((*********r!   kwargsr   c                :   K    | j         j        ||fi | d {V S r   )r   set_raw)r   r"   r5   r   s       r    r   zTransactionBackend.set_raw   s7      *T]*3@@@@@@@@@@@r!   c                F   K   | j                             |           d {V S r   )r   get_rawr&   s     r    r   zTransactionBackend.get_raw   s.      ]**3/////////r!   )sizeindexesr   tuple[int, ...]c               >   K    | j         j        |g|R d|i d {V S )Nr   )r   get_bits)r   r"   r   r   s       r    r   zTransactionBackend.get_bits   s=      +T]+CE'EEEEEEEEEEEEr!   r   byr   c               @   K    | j         j        |g|R ||d d {V S )Nr   )r   	incr_bits)r   r"   r   r   r   s        r    r   zTransactionBackend.incr_bits   s?      ,T],SM7MM"MMMMMMMMMMr!   startint | floatendmaxvaluec                N   K   | j                             |||||           d {V S r   )r   
slice_incr)r   r"   r   r   r   r+   s         r    r   zTransactionBackend.slice_incr   s8       ]--c5#xPPPPPPPPPr!   c                F   K   | j                             |           d {V S r   )r   get_sizer&   s     r    r   zTransactionBackend.get_size   s.      ]++C000000000r!   messagebytes | Nonebytesc                F   K   | j                             |           d {V S r   )r   ping)r   r   s     r    r   zTransactionBackend.ping   s.      ]''000000000r!   c                   K   t                      | _        | j                                         d {V  | j                                         d {V S r   )r   r   r   clearr   r9   s    r    r   zTransactionBackend.clear   s^      %%%%''''''''']((*********r!   c                J   K   | j                             |||           d {V S r   )r   set_lock)r   r"   r5   r+   s       r    r   zTransactionBackend.set_lock   s2      ]++C?????????r!   皙?waitstepc                J   K   | j                             |||           d {V S r   )r   	is_locked)r   r"   r   r   s       r    r   zTransactionBackend.is_locked   s4       ],,S$=========r!   c                H   K   | j                             ||           d {V S r   )r   unlock)r   r"   r5   s      r    r   zTransactionBackend.unlock   s0      ]))#u555555555r!   r*   rg   c               >   K    | j         j        |g|R d|i d {V S )Nr+   )r   set_add)r   r"   r+   rg   s       r    r   zTransactionBackend.set_add   s=      *T]*3GGGGGGGGGGGGGr!   c                8   K    | j         j        |g|R   d {V S r   )r   
set_remove)r   r"   rg   s      r    r   zTransactionBackend.set_remove   s5      -T]-c;F;;;;;;;;;;r!   countIterable[str]c                H   K   | j                             ||           d {V S r   )r   set_pop)r   r"   r   s      r    r   zTransactionBackend.set_pop   s0      ]**3666666666r!   r   r   r"   r
   r#   r$   )r<   r   NN
r"   r
   r5   r   r+   r?   r@   rA   r#   r$   r   rE   rF   r+   r?   rJ   Nr"   r
   r5   r/   r+   r?   r#   r/   rI   r
   rT   rU   r"   r
   rZ   r[   )r"   rU   r^   r`   r#   r   )rI   r
   r^   r`   r#   rb   )rs   )rT   rU   rt   r/   r#   ru   )r"   r
   r#   r/   )rT   rU   rt   r/   r#   r~   )r#   r/   )r#   r$   )r"   r
   r5   r   r   r   )r"   r
   r#   r   )r"   r
   r   r/   r   r/   r#   r   )
r"   r
   r   r/   r   r/   r   r/   r#   r   )r"   r
   r   r   r   r   r   r/   r+   r?   r#   r/   )r   r   r#   r   )r"   r
   r5   r   r+   r[   r#   r$   )Nr   )r"   r
   r   r?   r   r[   r#   r$   )r"   r
   r5   r   r#   r$   )r"   r
   rg   rU   r+   r?   )r"   r
   rg   rU   )r"   r
   r   r/   r#   r   )+__name__
__module____qualname__	__slots__r   r'   r7   r:   r3   r>   r   r2   rM   rP   r,   rW   r+   rL   rm   rx   r{   rX   rC   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__r   s   @r    r   r      s         I     & & & &$ $ $$ $ $     7 7 7 7  $!F F F F F ? ? ? ? ?G G G G G   
% % % %% % % %
@ @ @ @= = = = = BF 2 2 2 2 2 2$
 
 
 
 
	 	 	 	
 
 
 
 
/ / / /_ _ _ _ % % % X%* * *+ + +A A A A0 0 0 0 CD F F F F F F DEPQ N N N N N N  $Q Q Q Q Q1 1 1 11 1 1 1 1+ + +
@ @ @ @ "	> > > > >6 6 6 6 LP H H H H H H< < < <7 7 7 7 7 7 7 7 7r!   r   c                       e Zd Zg dZd'd( fdZd)d
Zd*dZd Z fdZ fdZ		 	 d+d, fdZ
d-d. fdZd/d0 fdZd1 fdZd2 fd Zd3d#Zd4 fd&Z xZS )5LockTransactionBackend)r   r   r   r   _locks_lock_id_serializable_timeoutF
   r   r   c                    t                                          |           t                      | _        t	                      j        | _        || _        || _        d S r   )	r   r   r   r   r   hexr   r   r   )r   r   serializablerZ   r   s       r    r   zLockTransactionBackend.__init__  sF    !!! #)r!   r"   r
   r#   c                6    | j         rt          S t           d| S )N:)r   _GLOBAL_LOCK_KEY_LOCK_PREFIXr&   s     r    _get_lock_keyz$LockTransactionBackend._get_lock_key  s'     	$##&&&&&r!   c                  K   |                      |          }|| j        v rd S | j        }d}|dk    r||z  }t          |d          }| j                            || j        | j                   d {V r| j                            |           d S || j        v rd S t          j	        |           d {V  |dk    t          d          )Nr   g        rJ   r*   z.probably deadlock or long running transactions)r   r   r   roundr   r   r   rQ   asynciosleepr	   )r   r"   lock_keyr   r   s        r    _lock_updatesz$LockTransactionBackend._lock_updates  s      %%c**t{""F}SjjDLDq>>D]++HdmDM+ZZZZZZZZ )))4;&&-%%%%%%%%% Sjj JKKKr!   c                    K    j         }t                       _         |r"t          j         fd|D               d {V  d S d S )Nc                P    g | ]"}j                             |j                  #S re   )r   r   r   )rf   r"   r   s     r    
<listcomp>z:LockTransactionBackend._unlock_updates.<locals>.<listcomp>)  s.    "]"]"]PS4=#7#7T]#K#K"]"]"]r!   )r   r   r   gather)r   lockss   ` r    _unlock_updatesz&LockTransactionBackend._unlock_updates%  si      ee 	_."]"]"]"]W\"]"]"]^^^^^^^^^^	_ 	_r!   c                   K   	 t                                                       d {V  |                                  d {V  d S # |                                  d {V  w xY wr   )r   r7   r   r   r   s    r    r7   zLockTransactionBackend.commit+  s      	)''.."""""""""&&((((((((((($&&((((((((((   &A A#c                   K   	 t                                                       d {V  |                                  d {V  d S # |                                  d {V  w xY wr   )r   r:   r   r   s    r    r:   zLockTransactionBackend.rollback1  s      	)''""$$$$$$$$$&&((((((((((($&&((((((((((r   Nr5   r   r+   r?   r@   rA   r$   c                   K   |                      |           d {V  t                                          ||||           d {V S )N)r+   r@   )r   r   r   )r   r"   r5   r+   r@   r   s        r    r   zLockTransactionBackend.set7  s_         %%%%%%%%%WW[[eF%[HHHHHHHHHr!   rE   rF   c                   K   |D ]}|                      |           d {V  t                                          ||           d {V }|S r)   )r   r   r2   )r   rE   r+   r"   resr   s        r    r2   zLockTransactionBackend.set_manyA  sr       	* 	*C$$S))))))))))GG$$U6$::::::::
r!   rJ   r/   c                   K   |                      |           d {V  t                                          |||           d {V S r)   )r   r   rM   )r   r"   r5   r+   r   s       r    rM   zLockTransactionBackend.incrG  s[        %%%%%%%%%WW\\#uV\<<<<<<<<<r!   c                   K   |                      |           d {V  t                                          |           d {V }|S r   )r   r   rP   )r   r"   r   r   s      r    rP   zLockTransactionBackend.deleteK  sY        %%%%%%%%%GGNN3''''''''
r!   rI   c                   K   |D ]}|                      |           d {V   t                      j        |  d {V }|S r   )r   r   r,   )r   rI   r"   r   r   s       r    r,   z"LockTransactionBackend.delete_manyP  si       	* 	*C$$S))))))))))'EGG'.......
r!   rT   rU   c                   K   | j                             |           d {V  | j                            |          2 3 d {V }|                     |           d {V  | j                            |           =6 d S r   )r   rW   r   rX   r   r   rQ   rY   s      r    rW   z#LockTransactionBackend.delete_matchV  s      ,,W555555555++G44 	% 	% 	% 	% 	% 	% 	%#$$S)))))))))O$$$$ 544s   A:rZ   r[   c                   K   |                      |           d {V  t                                          ||           d {V S r   )r   r   r+   )r   r"   rZ   r   s      r    r+   zLockTransactionBackend.expire\  sW        %%%%%%%%%WW^^C111111111r!   )Fr   r   )r"   r
   r#   r
   )r"   r
   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r7   r:   r   r2   rM   rP   r,   rW   r+   r   r   s   @r    r   r      s       	 	 	I             ' ' ' '
L L L L"_ _ _) ) ) ) )) ) ) ) )  $!I I I I I I I      = = = = = = =     
     % % % %2 2 2 2 2 2 2 2 2 2r!   r   )
__future__r   r   r0   collections.abcr   r   r   typingr   uuidr   cashewsr	   cashews._typingr
   r   r   cashews.backends.interfacer   r   r   cashews.backends.memoryr   objectr_   r   r   r   r   re   r!   r    <module>r      sS   " " " " " "   < < < < < < < < < <                   8 8 8 8 8 8 8 8 8 8 D D D D D D D D D D * * * * * *	' f7 f7 f7 f7 f7 f7 f7 f7Rb2 b2 b2 b2 b2/ b2 b2 b2 b2 b2r!   