
    Ng              	          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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dS )    N)abstractmethod)defaultdict)AnyCallableListOptionalTuple	TypedDictUnionc                   &    e Zd ZU ee         ed<   dS )_ExtractOptions	max_depthN)__name__
__module____qualname__r   int__annotations__     P/var/www/html/ai-engine/env/lib/python3.11/site-packages/langsmith/anonymizer.pyr   r      s&         } r   r   c                   F    e Zd ZU dZeed<   	 eeeef                  ed<   dS )
StringNodez$String node extracted from the data.valuepathN)	r   r   r   __doc__strr   r   r   r   r   r   r   r   r      s=         ..JJJ
uS#X
..r   r   dataoptionsreturnc                 Z   |                     d          pd}| dg fg}g }|r|                    d          }||\  }}}t          |t          t          f          rA||k    rD|                                D ]$\  }	}
|                    |
|dz   ||	gz   f           %nt          |t                    r<||k    rt          |          D ]$\  }}|                    ||dz   ||gz   f           %n9t          |t                    r$|                    t          ||                     ||S )Nr   
   r      r   r   )getpop
isinstancedictr   itemsappendlist	enumerater   r   )r   r   r   queueresulttaskr   depthr   keynested_valueiitems                r   _extract_string_nodesr4      sl   K((.BI<@!R=/E!F
 >yy||<!udedK011 	>	!!%*[[]] F F!\lEAItse|DEEEEFt$$ 	>	!!$U++ < <4dEAItqcz:;;;;<s## 	>MM*5t<<<===#  >& Mr   c                   J    e Zd ZdZedee         dee         fd            ZdS )StringNodeProcessorz-Processes a list of string nodes for masking.nodesr   c                     dS )z6Accept and return a list of string nodes to be masked.Nr   )selfr7   s     r   
mask_nodeszStringNodeProcessor.mask_nodes8   s      r   N)r   r   r   r   r   r   r   r:   r   r   r   r6   r6   5   sX        77EZ 0 ET*5E E E E ^E E Er   r6   c                   B    e Zd ZU dZee         ed<   	 ee         ed<   dS )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                   @    e Zd ZU dZej        ed<   	 ee         ed<   dS )StringNodeRulez3Declarative rule used for replacing sensitive data.patternreplaceN)	r   r   r   r   rePatternr   r   r   r   r   r   r@   r@   G   s9         ==Z!c]GGr   r@   c                   l    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	dS )RuleNodeProcessorzJString node processor that uses a list of rules to replace sensitive data.rulesc                 (    d |D             | _         dS )z.Initialize the processor with a list of rules.c                     g | ]w}t          |d          t          j                  r|d          nt          j        |d                    t          |                    d          t
                    r|d         nddxS )rA   rB   z
[redacted])rA   rB   )r&   rC   rD   compiler$   r   ).0rules     r   
<listcomp>z.RuleNodeProcessor.__init__.<locals>.<listcomp>]   s     
 
 
  "$y/2:>>5DOODO44 "$((9"5"5s;;&DOO% 
 
 
r   NrG   )r9   rG   s     r   __init__zRuleNodeProcessor.__init__[   s(    
 
 
 
 



r   r7   r   c                     g }|D ]l}|d         }| j         D ]$}|d                             |d         |          }%||d         k    r*|                    t          ||d                              m|S )zMask nodes using the rules.r   rA   rB   r   r#   )rG   subr)   r   )r9   r7   r-   r3   	new_valuerL   s         r   r:   zRuleNodeProcessor.mask_nodesm   s     	N 	NDWI
 L L O//YKK		DM))jytF|LLLMMMr   N)
r   r   r   r   r   r@   r   rO   r   r:   r   r   r   rF   rF   Q   s~         TT
d>2 
 
 
 
$	Z 0 	T*5E 	 	 	 	 	 	r   rF   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dS )	CallableNodeProcessorzNString node processor that uses a callable function to replace sensitive data.funcaccepts_pathc                 r    || _         t          t          j        |          j                  dk    | _        dS )z2Initialize the processor with a callable function.   N)rU   leninspect	signature
parametersrV   )r9   rU   s     r   rO   zCallableNodeProcessor.__init__   s4    
 	 1$ 7 7 BCCqHr   r7   r   c                    g }|D ]|}| j         r"|                     |d         |d                   n|                     |d                   }||d         k    r*|                    t          ||d                              }|S )z'Mask nodes using the callable function.r   r   r#   )rV   rU   r)   r   )r9   r7   retvalnode	candidates        r   r:   z CallableNodeProcessor.mask_nodes   s    #% 	N 	ND $.		$w-f666YYtG}-- 
 DM))jytF|LLLMMMr   N)r   r   r   r   r   r   r   r   r   r   r>   rO   r   r:   r   r   r   rT   rT   y   s         XX
#$hT%S/5J/KS/P&QQ
RRRR G
IHcUCZ((CeCHo9N3OQT3T*UUVI I I IZ 0 T*5E      r   rT   replacerc                     t          | t                    rt          |           S t          |           rt	          |           S | S )NrN   )rU   )r&   r*   rF   callablerT   )ra   s    r   _get_node_processorrd      sK    (D!!  x0000	(		 $(3333r   )r   r   c                R    t          |           dt          dt          ffd}|S )zCreate an anonymizer function.r   r   c                     t          | dpdi          }| }	                    |          }|D ]I}|d         s	|d         }|}|d         d d         D ]
}||         }|d         d         }|d         ||<   J|S )Nr   r!   r   r   )r4   r:   )
r   r7   mutate_value	to_updater_   temppart	last_partr   	processors
           r   
anonymizerz%create_anonymizer.<locals>.anonymizer   s    %d[)/r,JKK((//	 		0 		0D< 0#G}# L"- & &D:DD L,	"&w-Yr   )rd   r   )ra   r   rn   rm   s    ` @r   create_anonymizerro      sL     $H--I        $ r   )rC   rZ   abcr   collectionsr   typingr   r   r   r   r	   r
   r   r   r   r4   r6   r<   r@   rF   rT   r   r   ReplacerTyperd   ro   r   r   r   <module>rt      s   				        # # # # # # I I I I I I I I I I I I I I I I I I    i   / / / / / / / / o $zBR    8E E E E E E E E0 0 0 0 0i 0 0 0H H H H HY H H H% % % % %+ % % %P# # # # #/ # # #L c4c3h()3./, 3F      $   } seSj	     r   