
    i*                     b   d Z ddlmZmZmZmZ ddlmZmZm	Z	m
Z
mZmZ ddlmZ ddlmZmZmZ ddlmZmZmZmZmZmZmZmZmZ ddlmZ ddlm Z  d	ed
ee!ef   fdZ" G d de      Z#e G d de#             Z$dede!d
e%e!   fdZ&e G d de#             Z' ede#      Z(e G d de             Z)y)z$Edge condition configuration models.    )	dataclassfieldfieldsreplace)AnyDictMappingTypeTypeVarcast)enum_options_from_values)SchemaLookupErrorget_edge_condition_schemaiter_edge_condition_schemas)	
BaseConfigChildKeyConfigErrorConfigFieldSpecensure_listoptional_boolrequire_mappingrequire_strextend_path)get_function_catalog)EDGE_FUNCTION_DIRconfigreturnc                     i }t        |       D ]5  }|j                  dk(  rt        | |j                        ||j                  <   7 |S )Npath)r   namegetattr)r   payload	field_objs      O/Users/bowang/.openclaw/workspace/ChatDev/entity/configs/edge/edge_condition.py_serialize_configr%      sD     GF^	>>V#")&).."A	 $ N    c                   (    e Zd ZdZdefdZdefdZy)EdgeConditionTypeConfigz9Base helper for condition-specific configuration classes.r   c                 .    | j                   j                  S N)	__class____name__selfs    r$   display_labelz%EdgeConditionTypeConfig.display_label(   s    ~~&&&r&   c                     t        |       S r*   )r%   r-   s    r$   to_external_valuez)EdgeConditionTypeConfig.to_external_value+   s     &&r&   N)r,   
__module____qualname____doc__strr/   r   r1    r&   r$   r(   r(   %   s    C's ''3 'r&   r(   c            	            e Zd ZU dZdZeed<   d edddddd      iZe	d	e
eef   d
z  dedd fd       Ze	deeef   f fd       ZdefdZdefdZ xZS )FunctionEdgeConditionConfigz,Configuration for function-based conditions.truer    zFunction Namer5   Tz;Function Name or 'true' (indicating perpetual satisfaction)r    display_name	type_hintrequireddefaultdescriptiondataNr   r   c                d    |
 | d|      S t        ||      }t        |d|d      } | ||      S )Nr9   )r    r   r    F)allow_empty)r   r   )clsr@   r   mappingfunction_names        r$   	from_dictz%FunctionEdgeConditionConfig.from_dict@   s=    <F..!$-#GVTuMD11r&   c           	         t         
|          }|j                  d      }||S t        t              }|j                         }|j                         }|j                  xs d}|j                  r| d|j                   d}n|s| d}d|vr|j                  dd       ddi}|D ]0  }|dk(  r	|j                  |      }	|	r|	j                  nd xs d	||<   2 t        ||xs d t        ||d
      |      |d<   |S )Nr    zConditional function namez (Loading failed: )z+ (No available conditional functions found)r9   r   zDefault condition (always met)z*The conditional function is not described.Tpreserve_label_case)enumenum_optionsr?   )superfield_specsgetr   r   list_function_nameslist_metadatar?   
load_errorinsertr   r   )rC   specs	name_speccatalognamesmetadatar?   descriptionsr    metar+   s             r$   rN   z'FunctionEdgeConditionConfig.field_specsH   s"   #%IIf%	L&'89++-((*++J/J(M);G<N<N;OqQK(M)TUKLLF# @ADv~<<%D6:$"2"2!uIuL	 
  $1%[_`#	
f r&   c                 "    | j                   xs dS Nr9   r    r-   s    r$   r/   z)FunctionEdgeConditionConfig.display_labelh       yy"F"r&   c                 "    | j                   xs dS r\   r]   r-   s    r$   r1   z-FunctionEdgeConditionConfig.to_external_valuek   r^   r&   )r,   r2   r3   r4   r    r5   __annotations__r   FIELD_SPECSclassmethodr	   r   rF   r   rN   r/   r1   __classcell__r+   s   @r$   r8   r8   /   s    6D# 	(U
	K 2WS#X.5 2 2He 2 2 Do!56  >#s ##3 #r&   r8   valuer   c           
          t        |       }g }t        |      D ]@  \  }}t        |t              st	        dt        |d| d            |j                  |       B |S )Nzentries must be strings[])r   	enumerate
isinstancer5   r   r   append)re   r   items
normalizedidxitems         r$   _normalize_keyword_listrp   o   sb    EJu%	T$$7TQseST:9VWW$ & r&   c                   >   e Zd ZU dZ ee      Zee   ed<    ee      Z	ee   ed<    ee      Z
ee   ed<   dZeed<   dZeed	<    ed
dddd       eddddd       edddddd       edddddd      dZedeeef   dedd fd       ZdefdZdefd Zy!)"KeywordEdgeConditionConfigz-Configuration for declarative keyword checks.)default_factoryany_keywordsnone_keywordsregex_patternsTcase_sensitiveFr>   anyzContains keywordsz	list[str]z'Returns True if any keyword is matched.r    r;   r<   r=   r?   nonezExclude keywordszMIf any of the excluded keywords are matched, return False (highest priority).regexzRegular expressionsz2Returns True if any regular expression is matched.)r    r;   r<   r=   r?   advancezcase sensitiveboolzQWhether to distinguish between uppercase and lowercase letters (default is true).r:   )rx   rz   r{   rw   r@   r   r   c          	         t        ||      }t        |j                  dg       t        |d            }t        |j                  dg       t        |d            }t        |j                  dg       t        |d            }t	        |d|d      }t	        |d|d      }|s|s|st        d	|       | ||||dn
t        |      |d|
      S t        |      |
      S )Nrx   rz   r{   rw   T)r>   r>   Fz)keyword condition requires any/none/regex)rt   ru   rv   rw   r>   r   )r   rp   rO   r   r   r   r}   )	rC   r@   r   rD   rt   ru   rv   rw   default_values	            r$   rF   z$KeywordEdgeConditionConfig.from_dict   s    !$-.w{{5"/E{SWY^G_`/FB0GUY[aIbc0Wb1I;W[]dKef&w0@$PTU%gy$NI4PP%')#1#94tN?S*2E
 	

 9=]8K
 	
r&   c                     dt        | j                         dt        | j                         dt        | j                         dS )Nzkeyword(any=z, none=z, regex=rH   )lenrt   ru   rv   r-   s    r$   r/   z(KeywordEdgeConditionConfig.display_label   sE    c$"3"345WSASAS=T<UU]^abfbubu^v]wwxyyr&   c                    i }| j                   rt        | j                         |d<   | j                  rt        | j                        |d<   | j                  rt        | j                        |d<   | j                  |d<   | j
                  |d<   |S )Nrx   rz   r{   rw   r>   )rt   listru   rv   rw   r>   )r.   r"   s     r$   r1   z,KeywordEdgeConditionConfig.to_external_value   s    "$!$"3"34GEN"4#5#56GFO#D$7$78GG$($7$7 !!\\	r&   N)r,   r2   r3   r4   r   r   rt   r5   r`   ru   rv   rw   r}   r>   r   ra   rb   r	   r   rF   r/   r1   r6   r&   r$   rr   rr   y   s   7#D9L$s)9$T:M49: %d ;NDI;NDGT ,!A
  +!g
 !.!L
 *!)k
/(KT 
WS#X. 
 
A] 
 
(zs z
3 
r&   rr   TConditionConfig)boundc            	       (    e Zd ZU dZeed<   eed<    eddddd       edd	d
dd      dZe	de
dedeee
f   fd       Ze	de
dedd fd       Ze	deeee   f   fd       Ze	deeef   f fd       ZdefdZde
fdZdee   dedz  fdZ xZS )EdgeConditionConfigz<Wrapper config that stores condition type + concrete config.typer   zCondition Typer5   TzlSelect which condition implementation to run (function, keyword, etc.) so the engine can resolve the schema.ry   zCondition ConfigobjectzTPayload interpreted by the chosen function or any/none/regex lists for keyword mode.r   r   re   r   r   c                     |dddidS t        |t              r|rdddidS dddidS t        |t              rdd|idS t        ||      S )Nfunctionr    r9   r   always_false)rj   r}   r5   r   )rC   re   r   s      r$   _normalize_valuez$EdgeConditionConfig._normalize_value   sj    =&662BCCeT" *vv6FGG&6>2JKKeS!&65/BBud++r&   r@   c                V   | j                  ||      }t        |d|      }|j                  d      }t        |d      }	 t	        |      }|t        d|      |j                  j                  ||      }	 | ||	|      S # t
        $ r }t        d| dt        |d            |d }~ww xY w)Nr   r   zunknown condition type ''zcondition config is required)r   )r   r   r   )	r   r   rO   r   r   r   r   
config_clsrF   )
rC   r@   r   rD   condition_typeconfig_payloadconfig_pathschemaexccondition_configs
             r$   rF   zEdgeConditionConfig.from_dict   s    &&tT2$Wfd; X.!$1	p.~>F !<kJJ!,,66~K6X/?dKK ! 	p 88HJKX\^dLefloo	ps   A? ?	B(B##B(c                     t               j                         D ci c]  \  }}t        d|      |j                   c}}S c c}}w )Nr   )r   re   )r   rl   r   r   )rC   r    r   s      r$   child_routesz EdgeConditionConfig.child_routes	  sK     !< = C C E
 Ef 840&2C2CC E
 	
 
s   "Ac           	      0   t         |          }|j                  d      }|rmt               }t	        |j                               }|j                         D ci c]  \  }}||j                   }}}t        ||t        ||d            |d<   |S c c}}w )Nr   TrI   )rK   rL   )
rM   rN   rO   r   r   keysrl   summaryr   r   )	rC   rT   	type_specregistrationsrW   r    r   rY   r+   s	           r$   rN   zEdgeConditionConfig.field_specs  s    #%IIf%	79M++-.EEREXEXEZ[EZ\T6D&..0EZL[#5e\_cdE&M
  \s   Bc                 6    | j                   j                         S r*   )r   r/   r-   s    r$   r/   z!EdgeConditionConfig.display_label  s    {{((**r&   c                     | j                   dk(  r| j                  j                         S | j                   | j                  j                         dS )Nr   r   )r   r   r1   r-   s    r$   r1   z%EdgeConditionConfig.to_external_value"  sB    99
";;0022IIkk335
 	
r&   expected_typeNc                 T    | j                   }t        ||      rt        t        |      S y r*   )r   rj   r   r   )r.   r   r   s      r$   	as_configzEdgeConditionConfig.as_config*  s&    fm,(&11r&   )r,   r2   r3   r4   r5   r`   r(   r   ra   rb   r   r	   r   rF   r   r   r
   r   r   rN   r/   r1   r   r   rc   rd   s   @r$   r   r      s5   F
I##  ) G
 "+n
K" 	,S 	, 	,S8I 	, 	, LS L3 L3H L L 
T(D,<"<= 
 
 Do!56  +s +
3 
t,<'= BRUYBY r&   r   N)*r4   dataclassesr   r   r   r   typingr   r   r	   r
   r   r   entity.enum_optionsr   schema_registryr   r   r   entity.configs.baser   r   r   r   r   r   r   r   r   utils.function_catalogr   utils.function_managerr   r5   r%   r(   r8   r   rp   rr   r   r   r6   r&   r$   <module>r      s    * 9 9 : : 8 
 
 
 8 4j T#s(^ 'j ' <#"9 <# <#~3 c d3i  U!8 U Up -5LM  X* X Xr&   