
    h              	       j   d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ  G d de
      Z G d de
      Zd	ed
edee   fdZ G d d      Z G d de
      Z G d de
      Z G d de      Z G d de      Zeeeeeeef      gef   ee   ef   ZdedefdZdddede	e   deegef   fdZy)    N)abstractmethod)defaultdict)AnyCallableOptional	TypedDictUnionc                       e Zd ZU ee   ed<   y)_ExtractOptions	max_depthN)__name__
__module____qualname__r   int__annotations__     R/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/langsmith/anonymizer.pyr   r      s    }r   r   c                   8    e Zd ZU dZeed<   	 eeeef      ed<   y)
StringNodez$String node extracted from the data.valuepathN)	r   r   r   __doc__strr   listr	   r   r   r   r   r   r      s#    .J
uS#X
.r   r   dataoptionsreturnc                     |j                  d      xs d}| dg fg}g }|r|j                  d      }||\  }}}t        |t        t        f      r:||k\  r8|j                         D ]   \  }	}
|j                  |
|dz   ||	gz   f       " nqt        |t              r5||k\  rt        |      D ]   \  }}|j                  ||dz   ||gz   f       " n,t        |t              r|j                  t        ||             |r|S )Nr   
   r      r   r   )getpop
isinstancedictr   itemsappendr   	enumerater   r   )r   r   r   queueresulttaskr   depthr   keynested_valueiitems                r   _extract_string_nodesr2      s   K(.BI<@!R=/E!F
yy|<!udedK01	!%*[[] F!\lEAItse|DEFt$	!$U+ <4dEAItqcz:;<s#MM*5t<=# & Mr   c                   6    e Zd ZdZedee   dee   fd       Zy)StringNodeProcessorz-Processes a list of string nodes for masking.nodesr   c                      y)z6Accept and return a list of string nodes to be masked.Nr   )selfr5   s     r   
mask_nodeszStringNodeProcessor.mask_nodes8   s    r   N)r   r   r   r   r   r   r   r8   r   r   r   r4   r4   5   s3    7EZ 0 ET*5E E Er   r4   c                   4    e Zd ZU dZee   ed<   	 ee   ed<   y)ReplacerOptionsz3Configuration options for replacing sensitive data.r   
deep_cloneN)r   r   r   r   r   r   r   boolr   r   r   r:   r:   =   s    =}?/r   r:   c                   B    e Zd ZU dZej
                  ed<   	 ee   ed<   y)StringNodeRulez3Declarative rule used for replacing sensitive data.patternreplaceN)	r   r   r   r   rePatternr   r   r   r   r   r   r>   r>   G   s    =ZZ!c]Gr   r>   c                   R    e Zd ZU dZee   ed<   	 dee   fdZdee   dee   fdZ	y)RuleNodeProcessorzJString node processor that uses a list of rules to replace sensitive data.rulesc           	          |D cg c]c  }t        |d   t        j                        r|d   nt        j                  |d         t        |j	                  d      t
              r|d   ndde c}| _        yc c}w )z.Initialize the processor with a list of rules.r?   r@   z
[redacted])r?   r@   N)r%   rA   rB   compiler#   r   rE   )r7   rE   rules      r   __init__zRuleNodeProcessor.__init__[   ss     
  "$y/2::> ODO4 "$((9"5s; O%

 
s   A(A6r5   r   c                     g }|D ]X  }|d   }| j                   D ]  }|d   j                  |d   |      } ||d   k7  s:|j                  t        ||d                Z |S )zMask nodes using the rules.r   r?   r@   r   r"   )rE   subr(   r   )r7   r5   r+   r1   	new_valuerH   s         r   r8   zRuleNodeProcessor.mask_nodesm   sz     	NDWI

 L O//YK	LDM)jytF|LM	N r   N)
r   r   r   r   r   r>   r   rI   r   r8   r   r   r   rD   rD   Q   sC    T
d>2 
$	Z 0 	T*5E 	r   rD   c            	           e Zd ZU dZeeegef   eeeeeef      gef   f   e	d<   	 e
e	d<   	 deeegef   eeeeeef      gef   f   fdZdee   dee   fdZy)	CallableNodeProcessorzNString node processor that uses a callable function to replace sensitive data.funcaccepts_pathc                 r    || _         t        t        j                  |      j                        dk(  | _        y)z2Initialize the processor with a callable function.   N)rO   leninspect	signature
parametersrP   )r7   rO   s     r   rI   zCallableNodeProcessor.__init__   s.    
 	 1 1$ 7 B BCqHr   r5   r   c                     g }|D ]b  }| j                   r| j                  |d   |d         n| j                  |d         }||d   k7  sD|j                  t        ||d                d |S )z'Mask nodes using the callable function.r   r   r"   )rP   rO   r(   r   )r7   r5   retvalnode	candidates        r   r8   z CallableNodeProcessor.mask_nodes   s|    #% 	ND $$ 		$w-f6YYtG}- 
 DM)jytF|LM	N r   N)r   r   r   r   r	   r   r   r   r   r   r<   rI   r   r8   r   r   r   rN   rN   y   s    X
#$hT%S/5J/KS/P&QQ
RR G
IHcUCZ((CeCHo9N3OQT3T*UUVIZ 0 T*5E r   rN   replacerc                 l    t        | t              rt        |       S t        |       rt	        |       S | S )N)rE   )rO   )r%   r   rD   callablerN   )r[   s    r   _get_node_processorr^      s/    (D! x00	(	$(33r   )r   r   c                F    t        |       dt        dt        ffd}|S )zCreate an anonymizer function.r   r   c                     t        | dxs di      }| }	j                  |      }|D ]1  }|d   s|d   }|}|d   d d D ]  }||   }	 |d   d   }|d   ||<   3 |S )Nr   r    r   r   )r2   r8   )
r   r5   mutate_value	to_updaterY   temppart	last_partr   	processors
           r   
anonymizerz%create_anonymizer.<locals>.anonymizer   s    %d[)/r,JK((/	 		0D<#G}# L"- &D:D& !L,	"&w-Y		0 r   )r^   r   )r[   r   rh   rg   s    ` @r   create_anonymizerri      s*     $H-I  $ r   )rA   rT   abcr   collectionsr   typingr   r   r   r   r	   r   r   r   r2   r4   r:   r>   rD   rN   r   r   ReplacerTyper^   ri   r   r   r   <module>rn      s   	   # < <i / / o $zBR 8E E0i 0HY H%+ %P#/ #L c4c3h()3./, 3F   $ } seSj	r   