o
    iT                     @   st   d dl Z d dlZd dl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	 d	eZdS )
    N)Sequence)AnyLiteralSupportsFloat)override)AsyncKeyValueDEFAULT_COLLECTION_NAME)BaseWrapperc                       s  e Zd ZdZdejddfdedejdB dede	de	d	df fd
dZ
dedB d	efddZ		d.ded dedee eB dedB deeef eeeef  B dB deeef dB d	efddZ		d.ded dedee eB dedB deeef eeeef  B dB deeef dB d	dfddZedddededB d	eeef dB fddZedddee dedB d	eeeef dB  fddZedddededB d	eeeef dB edB f fdd Zedddee dedB d	eeeeef dB edB f  fd!d"Zeddd#ded$eeef dedB d%edB d	df
d&d'Zeddd#dee deeeef  dedB d%eedB  dB d	df
d(d)ZedddededB d	e	fd*d+Zedddee dedB d	efd,d-Z  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                    s6   || _ |p	td| _|| _|| _|| _t   dS )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__ l/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/key_value/aio/wrappers/logging/wrapper.pyr      s   zLoggingWrapper.__init__
collectionc                 C   s   |pt S )z#Format collection name for logging.r   )r   r   r   r   r   _format_collection4   s   z!LoggingWrapper._format_collectionstate)startfinishactionkeysvaluesextrac           	      C   s   | j r||||d}|d ur||d< |d ur||d< t|S |  d| d| | d| d}|d ur=|d| 7 }|d urI|d	| d
7 }|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_msgr   r   r   _format_message8   s"   	
&zLoggingWrapper._format_messagec                 C   s&   | j | j| j||||||d d S )Nr   r    r!   r   r"   r#   )r   logr   r.   )r   r   r    r!   r   r"   r#   r   r   r   _logY   s   	zLoggingWrapper._log)r   keyc             	      sL   | j dd||d | jj||dI d H }| j dd|||d|d uid |S )Nr   GETr   r    r!   r   r2   r   r   hitr/   )r1   r   getr   r2   r   resultr   r   r   r7   f   s
   zLoggingWrapper.getc             	      t   | j dd||d|d d id | jj||dI d H }tdd |D }t|| }| j d	d||||d
d |S )Nr   GET_MANYr!      r   r    r!   r   r#   r!   r   c                 s   s    | ]	}|d urdV  qd S )N   r   .0rr   r   r   	<genexpr>v   s    z*LoggingWrapper.get_many.<locals>.<genexpr>r   hitsmisses)r1   r   get_manysumlenr   r!   r   resultsrE   rF   r   r   r   rG   p       zLoggingWrapper.get_manyc                   sP   | j dd||d | jj||dI d H \}}| j dd|||d|id ||fS )Nr   TTLr4   r5   r   ttlr/   )r1   r   rN   )r   r2   r   r%   rN   r   r   r   rN   }   s
   zLoggingWrapper.ttlc             	      r:   )Nr   TTL_MANYr!   r<   r=   r>   c                 s   s     | ]}|d  durdV  qdS )r   Nr?   r   r@   r   r   r   rC      s    z*LoggingWrapper.ttl_many.<locals>.<genexpr>r   rD   )r1   r   ttl_manyrH   rI   rJ   r   r   r   rP      rL   zLoggingWrapper.ttl_many)r   rN   r%   rN   c                   T   | j dd|||d|id | jj||||dI d H  | j dd|||d|id d S )Nr   PUTrN   r/   )r2   r%   r   rN   r   )r1   r   put)r   r2   r%   r   rN   r   r   r   rS      s   zLoggingWrapper.putc                   rQ   )Nr   PUT_MANYrN   r/   )r!   r"   r   rN   r   )r1   r   put_many)r   r!   r"   r   rN   r   r   r   rU      s   	zLoggingWrapper.put_manyc                   sF   | j dd||d | jj||dI d H }| j dd||d|id |S )Nr   DELETEr4   r5   r   deletedr=   )r1   r   deleter8   r   r   r   rX      s
   zLoggingWrapper.deletec             	      sT   | j dd||d|d d id | jj||dI d H }| j dd||d|id |S )	Nr   DELETE_MANYr!   r<   r=   r>   r   rW   )r1   r   delete_many)r   r!   r   deleted_countr   r   r   rZ      s
    zLoggingWrapper.delete_many)NN)!__name__
__module____qualname____doc__r   INFOr   Loggerintboolr   strr   r   listdictr   r   r.   r1   r   r7   rG   tuplefloatrN   rP   r   rS   rU   rX   rZ   __classcell__r   r   r   r   r      s    


'

.	6:	B8".r   )r)   r   collections.abcr   typingr   r   r   typing_extensionsr   !key_value.aio.protocols.key_valuer   key_value.aio.stores.baser	   key_value.aio.wrappers.baser
   r   r   r   r   r   <module>   s    