
    k
i&                         d 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 ddlmZmZ  ej        e          ZdZdZ G d	 d
          Z G d de          Z G d de          ZdS )zKey registry using sorted sets per checkpoint.

This module provides a registry for tracking writes per checkpoint using Redis
sorted sets, eliminating the need for some FT.SEARCH operations.
    N)ListOptionalUnion)Redis)RedisCluster)to_storage_safe_idto_storage_safe_strwrite_keys_zset:c            	       :    e Zd ZdZededededefd            ZdS )CheckpointKeyRegistryz?Base class for checkpoint-based key registry using sorted sets.	thread_idcheckpoint_nscheckpoint_idreturnc                     t          |           }t          |          }t          |          }t                              t          |||g          S )a  Create the key for the write keys sorted set for a specific checkpoint.

        Args:
            thread_id: Thread identifier
            checkpoint_ns: Checkpoint namespace (will be converted to storage-safe format)
            checkpoint_id: Checkpoint identifier (will be converted to storage-safe format)

        Returns:
            The Redis key for the write keys sorted set
        )r   r	   REDIS_KEY_SEPARATORjoinWRITE_KEYS_ZSET_PREFIX)r   r   r   safe_thread_idsafe_checkpoint_nssafe_checkpoint_ids         C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langgraph/checkpoint/redis/key_registry.pymake_write_keys_zset_keyz.CheckpointKeyRegistry.make_write_keys_zset_key   sV     ,I660??/>>"''&""	
 
 	
    N)__name__
__module____qualname____doc__staticmethodstrr    r   r   r   r      sX        II

'*
;>
	
 
 
 \
 
 
r   r   c                   *   e Zd ZdZdeeef         fdZ	 ddedededed	e	e
         d
dfdZdedededee         d
df
dZdededed
ee         fdZdededed
efdZdededed
efdZdedededed
df
dZdededed
dfdZdedededed
df
dZdS )SyncCheckpointKeyRegistryz6Synchronous checkpoint key registry using sorted sets.redis_clientc                     || _         d S N_redisselfr%   s     r   __init__z"SyncCheckpointKeyRegistry.__init__:       "r   Nr   r   r   	write_keyscorer   c                     |                      |||          }|ddl}|                                }| j                            |||i           dS )aI  Register a write key in the checkpoint's sorted set.

        Args:
            thread_id: Thread identifier
            checkpoint_ns: Checkpoint namespace
            checkpoint_id: Checkpoint identifier
            write_key: The write key to register
            score: Optional score (defaults to current timestamp)
        Nr   r   timer)   zaddr+   r   r   r   r.   r/   zset_keyr2   s           r   register_write_keyz,SyncCheckpointKeyRegistry.register_write_key=   s`    " 00}m
 
 =KKKIIKKEIu#566666r   
write_keysc                     |sdS |                      |||          }d t          |          D             }| j                            ||           dS )zRegister multiple write keys at once.

        Args:
            thread_id: Thread identifier
            checkpoint_ns: Checkpoint namespace
            checkpoint_id: Checkpoint identifier
            write_keys: List of write keys to register
        Nc                     i | ]\  }}||	S r"   r"   .0idxkeys      r   
<dictcomp>zGSyncCheckpointKeyRegistry.register_write_keys_batch.<locals>.<dictcomp>n       BBBS3BBBr   r   	enumerater)   r3   r+   r   r   r   r7   r5   mappings          r   register_write_keys_batchz3SyncCheckpointKeyRegistry.register_write_keys_batchX   si      	F00}m
 
 CBIj,A,ABBB7+++++r   c                     |                      |||          }| j                            |dd          }d |D             S )zvGet all write keys for a specific checkpoint.

        Returns:
            List of write keys in score order
        r   c                 d    g | ]-}t          |t                    r|                                n|.S r"   
isinstancebytesdecoder;   r=   s     r   
<listcomp>z<SyncCheckpointKeyRegistry.get_write_keys.<locals>.<listcomp>~   3    PPPC
3 6 6?

CPPPr   r   r)   zranger+   r   r   r   r5   keyss         r   get_write_keysz(SyncCheckpointKeyRegistry.get_write_keysq   sO     00}m
 
 {!!(Ar22PP4PPPPr   c                     |                      |||          }| j                            |          sdS | j                            |          S )zGet count of write keys for a checkpoint.

        Returns:
            Number of writes registered for this checkpoint
        r   )r   r)   existszcardr+   r   r   r   r5   s        r   get_write_countz)SyncCheckpointKeyRegistry.get_write_count   sU     00}m
 
 {!!(++ 	1{  ***r   c                 8    |                      |||          dk    S )zyCheck if checkpoint has any writes.

        Returns:
            True if checkpoint has writes, False otherwise
        r   rX   )r+   r   r   r   s       r   
has_writesz$SyncCheckpointKeyRegistry.has_writes   s!     ##I}mLLqPPr   c                 j    |                      |||          }| j                            ||           dS z;Remove a specific write key from the checkpoint's registry.Nr   r)   zremr+   r   r   r   r.   r5   s         r   remove_write_keyz*SyncCheckpointKeyRegistry.remove_write_key   s@     00}m
 
 	9-----r   c                 h    |                      |||          }| j                            |           dS z/Clear all write keys for a specific checkpoint.Nr   r)   deleterW   s        r   clear_checkpoint_writesz1SyncCheckpointKeyRegistry.clear_checkpoint_writes   s>     00}m
 
 	8$$$$$r   ttl_secondsc                     |                      |||          }	 | j                            ||           dS # t          $ r! t                              d|d           Y dS w xY w);Apply TTL to the checkpoint's write registry (best-effort).-Failed to apply TTL to write registry key: %sTexc_infoNr   r)   expire	Exceptionloggerwarningr+   r   r   r   rg   r5   s         r   	apply_ttlz#SyncCheckpointKeyRegistry.apply_ttl   s     00}m
 
	Kx55555 	 	 	NN?       	s   6 'A! A!r'   )r   r   r   r   r   r   r   r,   r!   r   floatr6   r   rD   rS   intrX   boolr[   ra   rf   rs   r"   r   r   r$   r$   7   s?       @@#U5,+>%? # # # # "&7 77 7 	7
 7 7 
7 7 7 76,, , 	,
 I, 
, , , ,2QQ-0QADQ	cQ Q Q Q++-0+AD+	+ + + + QQ-0QADQ	Q Q Q Q..-0.AD.QT.	. . . .%%-0%AD%	% % % %-0ADSV	     r   r$   c                   *   e Zd ZdZdeeef         fdZ	 ddedededed	e	e
         d
dfdZdedededee         d
df
dZdededed
ee         fdZdededed
efdZdededed
efdZdedededed
df
dZdededed
dfdZdedededed
df
dZdS )AsyncCheckpointKeyRegistryz7Asynchronous checkpoint key registry using sorted sets.r%   c                     || _         d S r'   r(   r*   s     r   r,   z#AsyncCheckpointKeyRegistry.__init__   r-   r   Nr   r   r   r.   r/   r   c                    K   |                      |||          }|ddl}|                                }| j                            |||i           d{V  dS )z4Register a write key in the checkpoint's sorted set.Nr   r1   r4   s           r   r6   z-AsyncCheckpointKeyRegistry.register_write_key   sv       00}m
 
 =KKKIIKKEkx)U);<<<<<<<<<<<r   r7   c                    K   |sdS |                      |||          }d t          |          D             }| j                            ||           d{V  dS )z%Register multiple write keys at once.Nc                     i | ]\  }}||	S r"   r"   r:   s      r   r>   zHAsyncCheckpointKeyRegistry.register_write_keys_batch.<locals>.<dictcomp>   r?   r   r@   rB   s          r   rD   z4AsyncCheckpointKeyRegistry.register_write_keys_batch   s        	F00}m
 
 CBIj,A,ABBBkx11111111111r   c                    K   |                      |||          }| j                            |dd           d{V }d |D             S )z-Get all write keys for a specific checkpoint.r   rF   Nc                 d    g | ]-}t          |t                    r|                                n|.S r"   rH   rL   s     r   rM   z=AsyncCheckpointKeyRegistry.get_write_keys.<locals>.<listcomp>   rN   r   rO   rQ   s         r   rS   z)AsyncCheckpointKeyRegistry.get_write_keys   se       00}m
 
 [''!R88888888PP4PPPPr   c                 t   K   |                      |||          }| j                            |           d{V S )z)Get count of write keys for a checkpoint.N)r   r)   rV   rW   s        r   rX   z*AsyncCheckpointKeyRegistry.get_write_count   sN       00}m
 
 [&&x000000000r   c                 L   K   |                      |||           d{V }|dk    S )z#Check if checkpoint has any writes.Nr   rZ   )r+   r   r   r   counts        r   r[   z%AsyncCheckpointKeyRegistry.has_writes   s;       **9m]SSSSSSSSqyr   c                 z   K   |                      |||          }| j                            ||           d{V  dS r]   r^   r`   s         r   ra   z+AsyncCheckpointKeyRegistry.remove_write_key   sV       00}m
 
 kx33333333333r   c                 x   K   |                      |||          }| j                            |           d{V  dS rc   rd   rW   s        r   rf   z2AsyncCheckpointKeyRegistry.clear_checkpoint_writes	  sT       00}m
 
 k  ***********r   rg   c                    K   |                      |||          }	 | j                            ||           d{V  dS # t          $ r! t                              d|d           Y dS w xY w)ri   Nrj   Trk   rm   rr   s         r   rs   z$AsyncCheckpointKeyRegistry.apply_ttl  s       00}m
 
	+$$X{;;;;;;;;;;; 	 	 	NN?       	s   !> 'A)(A)r'   )r   r   r   r   r   
AsyncRedisAsyncRedisClusterr,   r!   r   rt   r6   r   rD   rS   ru   rX   rv   r[   ra   rf   rs   r"   r   r   rx   rx      s8       AA#U:7H+H%I # # # # "&= == = 	=
 = = 
= = = =$22 2 	2
 I2 
2 2 2 2"QQ-0QADQ	cQ Q Q Q11-01AD1	1 1 1 1-0AD	   44-04AD4QT4	4 4 4 4++-0+AD+	+ + + +-0ADSV	     r   rx   )r   loggingtypingr   r   r   redisr   redis.asyncior   redis.asyncio.clusterr   r   redis.clusterlanggraph.checkpoint.redis.utilr   r	   	getLoggerr   rp   r   r   r   r$   rx   r"   r   r   <module>r      sR     ( ( ( ( ( ( ( ( ( (       - - - - - - C C C C C C & & & & & & S S S S S S S S		8	$	$*  
 
 
 
 
 
 
 
@C C C C C 5 C C CLc c c c c!6 c c c c cr   