
    jO                     R    d dl Z d dlmZmZ ddlmZ  G d dej                        Zy)    N)AnyOptional   )
anonymizerc                       e Zd ZdZddefdZdej                  dedej                  fdZ	e
j                  dededefd       Z	 	 ddej                  d
edee   dedej                  f
dZy	)RecursiveAnonymizeraS  Abstract base class for anonymizing sensitive data in various data structures.

    This class provides a framework for recursively anonymizing text content within
    nested data structures such as dictionaries, lists, and strings. Subclasses must
    implement the anonymize_text() method to define the specific anonymization logic.
    	max_depthc                     || _         y)a  Initialize the Anonymizer with depth limiting.

        Args:
            max_depth: Maximum recursion depth to prevent infinite loops when
                      processing deeply nested or circular data structures.
                      Defaults to 10.
        N)r	   )selfr	   s     }/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/anonymizer/recursive_anonymizer.py__init__zRecursiveAnonymizer.__init__   s     #    datakwargsreturnc                 (     | j                   |fi |S N)_recursive_anonymizer   r   r   s      r   	anonymizezRecursiveAnonymizer.anonymize   s     )t((888r   c                      y r    r   s      r   anonymize_textz"RecursiveAnonymizer.anonymize_text   s    r   Ndepth
field_namec                    || j                   k\  r|S |d}t        |t              r | j                  |fd|i|S t        |t              r@|j                         D ci c]$  \  }}| | j                  ||dz   fd| d| i|& c}}S t        |t              r:t        |      D cg c]#  \  }} | j                  ||dz   fd| d| i|% c}}S |S c c}}w c c}}w )N r   r   .)	r	   
isinstancestrr   dictitemsr   list	enumerate)	r   r   r   r   r   keyvalueiitems	            r   r   z(RecursiveAnonymizer._recursive_anonymize"   s6    DNN"KJdC &4&&tM
MfMMd#
 #'**,	 #/JC .T..5194><q1FJP  #/	  d#
  )	  /GAt *))%!)3=,as0CGM  /	  Ks   )C)(C)
   )r   N)__name__
__module____qualname____doc__intr   r   AnonymizerDataTyper   r   abcabstractmethodr    r   r   r   r   r   r   r   r      s    ## #9119=@9		&	&9
 	3 # #   $(	++  SM	
  
	&	&r   r   )r0   typingr   r   r   r   
Anonymizerr   r   r   r   <module>r4      s     
   9*// 9r   