
    Kiw                     ~    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
 d dlmZ d dlmZ d dlmZ  G d d	e      Zy)
    N)MappingSequence)AnyLiteralSupportsFloatDEFAULT_COLLECTION_NAME)override)AsyncKeyValue)BaseWrapperc                       e Zd ZdZdej
                  ddfdedej                  dz  dede	de	d	df fd
Z
dedz  d	efdZ	 	 d"ded   dedee   ez  dedz  deeef   eeeef      z  dz  deeef   dz  d	efdZ	 	 d"ded   dedee   ez  dedz  deeef   eeeef      z  dz  deeef   dz  d	dfdZedddededz  d	eeef   dz  fd       Zedddee   dedz  d	eeeef   dz     fd       Zedddededz  d	eeeef   dz  edz  f   fd       Zedddee   dedz  d	eeeeef   dz  edz  f      fd       Zeddddedeeef   dedz  dedz  d	df
d       Zeddddee   deeeef      dedz  dedz  d	df
d       Zedddededz  d	e	fd        Zedddee   dedz  d	efd!       Z  xZ!S )#LoggingWrappera>  Wrapper that logs all operations for debugging and auditing.

    This wrapper logs all key-value operations including their parameters and results.
    It's useful for:
    - Debugging application behavior
    - Auditing data access
    - Understanding cache hit/miss patterns
    - Monitoring performance issues
    NF	key_valuelogger	log_level
log_valuesstructured_logsreturnc                     || _         |xs t        j                  d      | _        || _        || _        || _        t        | !          y)a  Initialize the logging wrapper.

        Args:
            key_value: The store to wrap.
            logger: Logger instance to use. If None, creates a logger named 'key_value.logging'.
            log_level: Logging level to use. Defaults to logging.INFO.
            log_values: If True, logs the actual values being stored/retrieved.
                       If False (default), only logs metadata (keys, collections, operation types).
                       Set to False to avoid logging sensitive data.
            structured_logs: If True, logs the values as structured data.
                       If False (default), logs the values as a string.
        zkey_value.loggingN)	r   logging	getLoggerr   r   r   r   super__init__)selfr   r   r   r   r   	__class__s         r/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/key_value/aio/wrappers/logging/wrapper.pyr   zLoggingWrapper.__init__   sE    ( )2&,&V0A0ABU0V' *%4    
collectionc                     |xs t         S )z#Format collection name for logging.r   )r   r   s     r   _format_collectionz!LoggingWrapper._format_collection4   s    444r   state)startfinishactionkeysvaluesextrac                     | j                   r*||||d}|||d<   |||d<   t        j                  |      S |j                          d| d| j	                  |       d| d}||d| z  }|	|d	| d
z  }|S )N)statusr$   r   r%   valuer'    z collection='z' keys=''z value=z ())r   jsondumps
capitalizer    )	r   r!   r$   r%   r   r&   r'   structured_database_msgs	            r   _format_messagezLoggingWrapper._format_message8   s      (	/O !+1( +0(::o..&&()6(-@W@WXb@c?ddlmqlrrst'&**H"UG1%Hr   c                 z    | j                   j                  | j                  | j                  ||||||             y )Nr!   r$   r%   r   r&   r'   )r   logr   r3   )r   r!   r$   r%   r   r&   r'   s          r   _logzLoggingWrapper._logY   s@     	NND00uVRVcmv|  EJ0  K	
r   )r   keyc          
         K   | j                  dd||       | j                  j                  ||       d {   }| j                  dd|||d|d ui       |S 7 !w)Nr"   GETr!   r$   r%   r   r8   r   r#   hitr5   )r7   r   getr   r8   r   results       r   r>   zLoggingWrapper.getf   sv     		CJ	O~~))cj)II		SZX^glnt  }A  oA  gB	  	C	 Js   6AA"Ac          
        K   | j                  dd||d|d d i       | j                  j                  ||       d {   }t        d |D              }t	        |      |z
  }| j                  dd||||d	       |S 7 ?w)
Nr"   GET_MANYr%      r!   r$   r%   r   r'   r%   r   c              3   &   K   | ]	  }|d  y w)N    .0rs     r   	<genexpr>z*LoggingWrapper.get_many.<locals>.<genexpr>v   s     717s   r#   hitsmisses)r7   r   get_manysumlenr   r%   r   resultsrN   rO   s         r   rP   zLoggingWrapper.get_manyp   s     		
*]ceijlklem\n	o//Tj/QQ7g77W$		$:fjv|]}	~ R   <B A>A B c          	         K   | j                  dd||       | j                  j                  ||       d {   \  }}| j                  dd|||d|i       ||fS 7 $w)Nr"   TTLr;   r<   r#   ttlr5   )r7   r   rX   )r   r8   r   r*   rX   s        r   rX   zLoggingWrapper.ttl}   sj     		CJ	O>>--#*-MM
s		SZX]fkmpeq	rcz	 Ns   6AA%Ac          
        K   | j                  dd||d|d d i       | j                  j                  ||       d {   }t        d |D              }t	        |      |z
  }| j                  dd||||d	       |S 7 ?w)
Nr"   TTL_MANYr%   rC   rD   rE   c              3   ,   K   | ]  }|d    	d  yw)r   NrG   rH   rI   s     r   rL   z*LoggingWrapper.ttl_many.<locals>.<genexpr>   s     :1)91:s   
r#   rM   )r7   r   ttl_manyrQ   rR   rS   s         r   r\   zLoggingWrapper.ttl_many   s     		
*]ceijlklem\n	o//Tj/QQ:g::W$		$:fjv|]}	~ RrU   )r   rX   r*   rX   c          	         K   | j                  dd|||d|i       | j                  j                  ||||       d {    | j                  dd|||d|i       y 7 w)Nr"   PUTrX   r5   )r8   r*   r   rX   r#   )r7   r   put)r   r8   r*   r   rX   s        r   r_   zLoggingWrapper.put   sn     		CJW\ejlodp	qnn  S*RU VVV		SZX]fkmpeq	r 	W   <AAAc          	         K   | j                  dd|||d|i       | j                  j                  ||||       d {    | j                  dd|||d|i       y 7 w)Nr"   PUT_MANYrX   r5   )r%   r&   r   rX   r#   )r7   r   put_many)r   r%   r&   r   rX   s        r   rc   zLoggingWrapper.put_many   sp      			
*]clqsvkw	xnn%%4:[^%___		$:^dmrtwlx	y 	`r`   c                   K   | j                  dd||       | j                  j                  ||       d {   }| j                  dd||d|i       |S 7 w)Nr"   DELETEr;   r<   r#   deletedrD   )r7   r   deleter?   s       r   rg   zLoggingWrapper.delete   s^     		sz	R!^^22sz2RR		
[dflZm	n Ss   6AAAc          
         K   | j                  dd||d|d d i       | j                  j                  ||       d {   }| j                  dd||d|i       |S 7 w)	Nr"   DELETE_MANYr%   rC   rD   rE   r#   rf   )r7   r   delete_many)r   r%   r   deleted_counts       r   rj   zLoggingWrapper.delete_many   sr     		DZ`fhlmonohp_q	r#'>>#=#=4T^#=#__		Tjajly`z	{	 `r`   )NN)"__name__
__module____qualname____doc__r   INFOr   Loggerintboolr   strr    r   r   r   r   dictr3   r7   r
   r>   listrP   tuplefloatrX   r\   r   r_   rc   rg   rj   __classcell__)r   s   @r   r   r      s$    )-   %  % 	
   
85S4Z 5C 5 JN'+()  smc!	
 $J S!HWS#X->$??$F CH~$ 
N JN'+
()
 
 smc!	

 $J
 S!HWS#X->$??$F
 CH~$
 

 >B S t tCQTH~X\G\   NR 
8C= 
t 
W[\`adfiai\jmq\qWr 
 
 >B S t uTRUWZRZ^^bMbdilpdpMpGq   NR 
8C= 
t 
W[\abfgjlogobpswbwy~  BF  zF  cF  ]G  XH 
 
 X\z~ sS sc): s3QU: scpswcw s  DH s s  "&$(zsmz c*+z
 $Jz T!z 
z z AE  C$J $   QU hsm C$J Z]  r   r   )r.   r   collections.abcr   r   typingr   r   r   key_value.shared.constantsr	   typing_extensionsr
   !key_value.aio.protocols.key_valuer   key_value.aio.wrappers.baser   r   rH   r   r   <module>r      s.      - . . > & ; 3o[ or   