
    i                     x    d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZ dd	lmZ  G d
 de	e         Zy)zRegex-based payload processor.    N)List)Message)
LogManager   )EdgePayloadProcessorProcessorFactoryContext)RegexEdgeProcessorConfig)ExecutionContextc                        e Zd Zdededdf fdZdededed	ededz  f
d
Z	de
ej                     de
e   fdZdedededededz  f
dZ xZS )RegexEdgePayloadProcessorconfigctxreturnNc                    t         |   ||       d}|j                  s|t        j                  z  }|j
                  r|t        j                  z  }|j                  r|t        j                  z  }t        j                  |j                  |      | _        d|j                   d| _        |j                  |j                  |j                  d| _        y )Nr   zregex())patterngroupmultiple)super__init__case_sensitivere
IGNORECASE	multiline	MULTILINEdotallDOTALLcompiler   _patternlabelr   r   metadata)selfr   r   flags	__class__s       T/Users/bowang/.openclaw/workspace/ChatDev/runtime/edge/processors/regex_processor.pyr   z"RegexEdgePayloadProcessor.__init__   s    %$$R]]"ER\\!E==RYYE

6>>59fnn-Q/
~~\\
    payloadsource_resultlog_managercontextc                   t        | j                  j                  | j                  |                  }|s2| j	                  |||j
                  |j                  j
                        S | j                  |      }|s2| j	                  |||j
                  |j                  j
                        S |j                         }	| j                  j                  rdj                  |      |	_        |	S |d   |	_        |	S )N
r   )listr   finditer_text_handle_no_matchidtarget_extract_valuescloner   r   joincontent)
r"   r'   r(   	from_node	edge_linkr)   r*   matches	extractedcloneds
             r%   	transformz#RegexEdgePayloadProcessor.transform   s     t}}--djj.ABC((+y||YM]M]M`M`aa((1	((+y||YM]M]M`M`aa;;!YYy1FN  'q\FNr&   r9   c                 `   g }|D ]  }| j                   j                  }||j                  d      }n|j                  |      }|A| j                   j                  r&| j                   j                  j                  d|      }|j	                  |       | j                   j
                  r |S  |S )Nr   z{match})r   r   templatereplaceappendr   )r"   r9   valuesmatchr   values         r%   r3   z)RegexEdgePayloadProcessor._extract_values8   s    EKK%%E}AE*}{{##,,44YFMM% ;;''  r&   from_node_id
to_node_idc                     | j                   j                  }|dk(  r|j                  d| d| d       y |dk(  r3| j                   j                  xs d}|j	                         }||_        |S |S )Ndropz$Regex processor dropped payload for z->z (no match)default )r   on_no_matchdebugdefault_valuer4   r6   )r"   r'   r)   rD   rE   behaviorrL   r;   s           r%   r0   z*RegexEdgePayloadProcessor._handle_no_matchI   sy     ;;**v6|nBzlR]^ y  KK55;M]]_F*FNMr&   )__name__
__module____qualname__r	   r   r   r   r   r
   r<   r   r   Matchstrr3   r0   __classcell__)r$   s   @r%   r   r      s    
7 
>U 
Z^ 
" 	   " 
42tBHH~ $s) "   	
  
4r&   r   )__doc__r   typingr   entity.messagesr   utils.log_managerr   baser   r   "entity.configs.edge.edge_processorr	   runtime.node.executorr
   r    r&   r%   <module>r\      s2    $ 	  # ( ? G 2N 45M N Nr&   