
    j
i*                        d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
mZmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ  ede          ZddZ G d de          Z ddZ!ddZ"dS )z7Utilities for batching operations in a background task.    )annotationsN)CallableIterable)AnyLiteralTypeVar)NOT_PROVIDED	BaseStoreGetOpItemListNamespacesOpMatchConditionNamespacePathNotProvidedOpPutOpResult
SearchItemSearchOp_ensure_refresh_ensure_ttl_validate_namespaceF)boundfuncreturnc                H     t          j                   d fd            }|S )	NstoreAsyncBatchedBaseStoreargsr   kwargsr   c                    j         }	 t          j                    }|| j        u r2|r	d| d| dnd}t          j        d| j        j          d| d          n# t          $ r Y nw xY w | g|R i |S )NzSpecifically, replace `store.z(...)` with `await store.az(...)zBFor example, replace `store.get(...)` with `await store.aget(...)`zSynchronous calls to z detected in the main event loop. This can lead to deadlocks or performance issues. Please use the asynchronous interface for main thread operations.  )__name__asyncioget_running_loop_loopInvalidStateError	__class__RuntimeError)r   r    r!   method_namecurrent_loopreplacement_strr   s         C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\site-packages\langgraph/store/base/batch.pywrapperz_check_loop.<locals>.wrapper"   s    =	"355Lu{** #^mKmm[fmmmm]  
 /*EO,D * * '* * *   +  	 	 	D	tE+D+++F+++s   AA 
A&%A&)r   r   r    r   r!   r   r   r   )	functoolswraps)r   r/   s   ` r.   _check_loopr2   !   s=    _T, , , , , ,( N    c                  H    e Zd ZdZdZd: fdZd:dZd:dZdd	d;dZddddddd<dZ		 d=e
dd>d&Zd?d'Zdddd(dd)d@d0ZedAd4            Zedd	d;d5            Zeddddddd<d6            Ze	 d=e
dd>d7            Zed?d8            Zedddd(dd)d@d9            Z xZS )Br   z2Efficiently batch operations in a background task.)r'   _aqueue_taskr   Nonec                    t                                                       t          j                    | _        t          j                    | _        d | _        |                                  d S N)	super__init__r%   r&   r'   Queuer5   r6   _ensure_task)selfr)   s    r.   r;   zAsyncBatchedBaseStore.__init__?   sU    -//
AH*.
r3   c                n    	 | j         r| j                                          d S d S # t          $ r Y d S w xY wr9   )r6   cancelr*   r>   s    r.   __del__zAsyncBatchedBaseStore.__del__F   sW    	z $
!!#####$ $ 	 	 	DD	s    & 
44c                    | j         | j                                         rF| j                            t	          | j        t          j        |                               | _         dS dS )z1Ensure the background processing loop is running.N)r6   doner'   create_task_runr5   weakrefrefrA   s    r.   r=   z"AsyncBatchedBaseStore._ensure_taskM   sT    :!2!2//T\7;tCTCT0U0UVVDJJJ r3   Nrefresh_ttl	namespacetuple[str, ...]keystrrJ   bool | NoneItem | Nonec                  K   |                                   | j                                        }| j                            |t          ||t          | j        |                    f           | d {V S NrI   )r=   r'   create_futurer5   
put_nowaitr   r   
ttl_config)r>   rK   rM   rJ   futs        r.   agetzAsyncBatchedBaseStore.agetR   s       	j&&(( / M M  		
 		
 		
 yyyyyyr3   
   r   queryfilterlimitoffsetrJ   namespace_prefixrZ   
str | Noner[   dict[str, Any] | Noner\   intr]   list[SearchItem]c                 K   |                                   | j                                        }| j                            |t          |||||t          | j        |                    f           | d {V S rR   )r=   r'   rS   r5   rT   r   r   rU   )r>   r^   rZ   r[   r\   r]   rJ   rV   s           r.   asearchzAsyncBatchedBaseStore.asearchg   s       	j&&(($ / M M  
	
 	
 	
 yyyyyyr3   ttlvaluedict[str, Any]index!Literal[False] | list[str] | Nonerf   float | None | NotProvidedc                 K   |                                   t          |           | j                                        }| j                            |t          ||||t          | j        |                    f           | d {V S )Nre   )	r=   r   r'   rS   r5   rT   r   r   rU   )r>   rK   rM   rg   ri   rf   rV   s          r.   aputzAsyncBatchedBaseStore.aput   s       	I&&&j&&((sE5k$/SV6W6W  	
 	
 	
 yyyyyyr3   c                   K   |                                   | j                                        }| j                            |t          ||d           f           | d {V S r9   )r=   r'   rS   r5   rT   r   )r>   rK   rM   rV   s       r.   adeletezAsyncBatchedBaseStore.adelete   sf      
 	j&&((eIsD&A&A BCCCyyyyyyr3   d   prefixsuffix	max_depthr\   r]   rr   NamespacePath | Noners   rt   
int | Nonelist[tuple[str, ...]]c                 K   |                                   | j                                        }g }|r$|                    t	          d|                     |r$|                    t	          d|                     t          t          |          |||          }| j                            ||f           | d {V S )Nrr   )
match_typepathrs   )match_conditionsrt   r\   r]   )	r=   r'   rS   appendr   r   tupler5   rT   )	r>   rr   rs   rt   r\   r]   rV   r{   ops	            r.   alist_namespacesz&AsyncBatchedBaseStore.alist_namespaces   s       	j&&(( 	V##NhV$T$T$TUUU 	V##NhV$T$T$TUUU"#344	
 
 
 	b	***yyyyyyr3   opsIterable[Op]list[Result]c                    t          j        |                     |          | j                                                  S r9   )r%   run_coroutine_threadsafeabatchr'   result)r>   r   s     r.   batchzAsyncBatchedBaseStore.batch   s/    /C0@0@$*MMTTVVVr3   c                   t          j        |                     |||          | j                                                  S )N)rM   rJ   )r%   r   rW   r'   r   )r>   rK   rM   rJ   s       r.   getzAsyncBatchedBaseStore.get   s;     /IIiSkIBBDJ
 

&((	r3   c         
         t          j        |                     ||||||          | j                                                  S )NrY   )r%   r   rd   r'   r   )r>   r^   rZ   r[   r\   r]   rJ   s          r.   searchzAsyncBatchedBaseStore.search   sS     /LL '    J

 

 &((
	r3   c                   t          |           t          j        |                     ||||t	          | j        |                    | j                                                   d S )N)rM   rg   ri   rf   )r   r%   r   rm   r   rU   r'   r   )r>   rK   rM   rg   ri   rf   s         r.   putzAsyncBatchedBaseStore.put   sk     	I&&&(II55    J		
 		
 &(((((r3   c                    t          j        |                     ||          | j                                                   d S )N)rM   )r%   r   ro   r'   r   )r>   rK   rM   s      r.   deletezAsyncBatchedBaseStore.delete   s:     	(LLL,,dj	
 	

&(((((r3   c          	         t          j        |                     |||||          | j                                                  S )Nrq   )r%   r   r   r'   r   )r>   rr   rs   rt   r\   r]   s         r.   list_namespacesz%AsyncBatchedBaseStore.list_namespaces  sR     /!!# "   J	
 	
 &((		r3   )r   r7   )rK   rL   rM   rN   rJ   rO   r   rP   )r^   rL   rZ   r_   r[   r`   r\   ra   r]   ra   rJ   rO   r   rb   r9   )rK   rL   rM   rN   rg   rh   ri   rj   rf   rk   r   r7   )rK   rL   rM   rN   r   r7   )rr   ru   rs   ru   rt   rv   r\   ra   r]   ra   r   rw   )r   r   r   r   )r$   
__module____qualname____doc__	__slots__r;   rB   r=   rW   rd   r	   rm   ro   r   r2   r   r   r   r   r   r   __classcell__)r)   s   @r.   r   r   :   sY       <<-I        W W W W $(     4 !(,#'     B 48 +7     ,    (,'+ $     4 W W W [W  $(	 	 	 	 	 [	  !(,#'     [.  48 +7     [*    [  (,'+ $     [    r3   r   valueslist[Op]!tuple[list[int] | None, list[Op]]c                *   t          |           dk    rdt          |           fS g }g }i }| D ]b}t          |t          t          t
          f          rq	 |                    |                    |                     O# t          $ r: |                    t          |                     |                    |           Y w xY wt          |t                    r|j
        |j        f}||v r#||         }|||<   |                    |           t          |          ||<   |                    t          |                     |                    |           +|                    t          |                     |                    |           d||fS )a  Dedupe operations while preserving order for results.

    Args:
        values: List of operations to dedupe

    Returns:
        Tuple of (listen indices, deduped operations)
        where listen indices map deduped operation results back to original positions
       N)lenlist
isinstancer   r   r   r|   ri   
ValueErrorr   rK   rM   )r   deduppedlistenputsr~   putkeyixs          r.   _dedupe_opsr     s    6{{aT&\\!!HF35D    b5(,<=>> 	 $hnnR001111 $ $ $c(mm,,,#####$ E"" 	 lBF+F~~&\!b!!!!"8}}Vc(mm,,,#### MM#h--(((OOB8s   (A<<AC ?C aqueue(asyncio.Queue[tuple[asyncio.Future, Op]]r    weakref.ReferenceType[BaseStore]r7   c                $  K   |                                   d {V x}ro |            x}rA	 |g}	 |                                 x}r+|                    |           |                                 x}+n# t          j        $ r Y nw xY wd |D             }d |D             }	 t          |          \  }}|                    |           d {V |fd|D             t          |d          D ].\  }	}
|	                                s|		                    |
           /nE# t          $ r8}|D ]+}	|	                                s|	                    |           ,Y d }~nd }~ww xY w~n# ~w xY wd S |                                   d {V x}md S d S )Nc                    g | ]
}|d          S )r    .0items     r.   
<listcomp>z_run.<locals>.<listcomp>V  s    222DQ222r3   c                    g | ]
}|d          S )r   r   r   s     r.   r   z_run.<locals>.<listcomp>W  s    444d$q'444r3   c                     g | ]
}|         S r   r   )r   r   resultss     r.   r   z_run.<locals>.<listcomp>]  s    "@"@"@272;"@"@"@r3   F)strict)r   
get_nowaitr|   r%   
QueueEmptyr   r   ziprD   
set_result	Exceptionset_exception)r   r   r   sitemsfutsr   r   r   rV   r   er   s               @r.   rF   rF   F  sM      

$$$$$$
$$ #<1 !	"("3"3"5"55$ +T*** #)"3"3"5"55$ +)   D 32E22244e4441'26':':$FH$%HHX$6$6666666G)"@"@"@"@"@"@"@ (+4'G'G'G 3 3V"xxzz 3NN62223 ! 1 1 1# 1 1"xxzz 1--a0001 1 1 1 11 AAEG 

$$$$$$
$$ # # # # #sZ   E) AA5 4E) 5BE) BE) #A>D" !E) "
E$,.EE) E$$E) )E,)r   r   r   r   )r   r   r   r   )r   r   r   r   r   r7   )#r   
__future__r   r%   r0   rG   collections.abcr   r   typingr   r   r   langgraph.store.baser	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r   r   rF   r   r3   r.   <module>r      s   = = " " " " " "       . . . . . . . . ( ( ( ( ( ( ( ( ( (                                   & GCx      2^ ^ ^ ^ ^I ^ ^ ^B( ( ( (V' ' ' ' ' 'r3   