HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/langsmith/__pycache__/anonymizer.cpython-310.pyc
o

���g�	@s>ddlZddlZddlmZddlmZddlmZmZm	Z	m
Z
mZmZm
Z
Gdd�de�ZGdd�de�Zd	ed
ede	efdd
�ZGdd�d�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�Ze
eee	e
eefgefe	eefZdedefdd�Zdd�dede
edeegeffdd�ZdS)�N)�abstractmethod)�defaultdict)�Any�Callable�List�Optional�Tuple�	TypedDict�Unionc@seZdZUeeed<dS)�_ExtractOptions�	max_depthN)�__name__�
__module__�__qualname__r�int�__annotations__�rr�?/usr/local/lib/python3.10/dist-packages/langsmith/anonymizer.pyrs
rc@s0eZdZUdZeed<	eeeefed<dS)�
StringNodez$String node extracted from the data.�value�pathN)	r
rr�__doc__�strrrr
rrrrrrs
r�data�options�returnc
Cs�|�d�pd}|dgfg}g}|rt|�d�}|durq|\}}}t|ttf�rC||kr,q|��D]\}	}
|�|
|d||	gf�q0n/t|t�rd||krMqt|�D]\}}|�||d||gf�qQnt|t	�rr|�t
||d��|s|S)Nr�
r��rr)�get�pop�
isinstance�dictr�items�append�list�	enumeraterr)
rrr�queue�result�taskr�depthr�key�nested_value�i�itemrrr�_extract_string_nodess0

�
�
�r/c@s.eZdZdZedeedeefdd��ZdS)�StringNodeProcessorz-Processes a list of string nodes for masking.�nodesrcCsdS)z6Accept and return a list of string nodes to be masked.Nr)�selfr1rrr�
mask_nodes8szStringNodeProcessor.mask_nodesN)r
rrrrrrr3rrrrr05s r0c@s,eZdZUdZeeed<	eeed<dS)�ReplacerOptionsz3Configuration options for replacing sensitive data.r�
deep_cloneN)r
rrrrrr�boolrrrrr4=s
r4c@s*eZdZUdZejed<	eeed<dS)�StringNodeRulez3Declarative rule used for replacing sensitive data.�pattern�replaceN)	r
rrr�re�Patternrrrrrrrr7Gs

r7c@sLeZdZUdZeeed<	deefdd�Zdeedeefdd�Z	d	S)
�RuleNodeProcessorzJString node processor that uses a list of rules to replace sensitive data.�rulescCsdd�|D�|_dS)z.Initialize the processor with a list of rules.cSsPg|]$}t|dtj�r|dnt�|d�t|�d�t�r"|dndd��qS)r8r9z
[redacted])r8r9)r!r:r;�compilerr)�.0�rulerrr�
<listcomp>]s
�
�
���z.RuleNodeProcessor.__init__.<locals>.<listcomp>N�r=)r2r=rrr�__init__[s
�zRuleNodeProcessor.__init__r1rcCs\g}|D]'}|d}|jD]}|d�|d|�}q
||dkr+|�t||dd��q|S)zMask nodes using the rules.rr8r9rr)r=�subr$r)r2r1r(r.�	new_valuer@rrrr3ms
�zRuleNodeProcessor.mask_nodesN)
r
rrrrr7rrCrr3rrrrr<Qs
r<c	@s�eZdZUdZeeegefeeeeeefgeffe	d<	e
e	d<	deeegefeeeeeefgefffdd�Zdeedeefdd	�Z
d
S)�CallableNodeProcessorzNString node processor that uses a callable function to replace sensitive data.�func�accepts_pathcCs ||_tt�|�j�dk|_dS)z2Initialize the processor with a callable function.�N)rG�len�inspect�	signature�
parametersrH)r2rGrrrrC�szCallableNodeProcessor.__init__r1rcCs\g}|D]'}|jr|�|d|d�n|�|d�}||dkr+|�t||dd��q|S)z'Mask nodes using the callable function.rrr)rHrGr$r)r2r1�retval�node�	candidaterrrr3�s���z CallableNodeProcessor.mask_nodesN)r
rrrr
rrrrrr6rCrr3rrrrrFys
2,
�rF�replacercCs*t|t�r
t|d�St|�rt|d�S|S)NrB)rG)r!r%r<�callablerF)rQrrr�_get_node_processor�s



rS)rrcs$t|��dtdtf��fdd�}|S)zCreate an anonymizer function.rrcszt|d�pdi�}|}��|�}|D](}|ds|d}q|}|ddd�D]}||}q'|dd}|d||<q|S)Nrrrr���)r/r3)rr1�mutate_value�	to_updaterO�temp�part�	last_part�r�	processorrr�
anonymizer�s


z%create_anonymizer.<locals>.anonymizer)rSr)rQrr\rrZr�create_anonymizer�sr])r:rK�abcr�collectionsr�typingrrrrrr	r
rrr/r0r4r7r<rFrr�ReplacerTyperSr]rrrr�<module>s8$


(&������