
    i!                        d 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mZ  edd      Z G d de      Z ed	
       G d d             Z ed	
       G d d             Z ed	
       G d d             Z ed	
       G d d             Z ed	
       G d d             Ze G d d             Z ed      Zdede	e   fdZde
eef   dz  deeef   fdZdedede
eef   fdZdd de
eef   d!eded"edef
d#Zde
eef   d!edededz  fd$Z de
eef   d!ededefd%Z!dd&de
eef   d!eded'edz  dedz  f
d(Z"de
eef   d!ededeeef   dz  fd)Z#ded*edefd+Z$y),z>Shared helpers and base classes for configuration dataclasses.    )	dataclassfieldreplace)
AnyDictIterableListMappingMutableMappingSequenceTypeVarClassVarOptionalTConfig
BaseConfig)boundc                   4     e Zd ZdZddededz  f fdZ xZS )ConfigErrorz6Raised when configuration parsing or validation fails.Nmessagepathc                 H    || _         |r| d| n|}t        | 	  |       y )Nz: )r   super__init__)selfr   r   full_message	__class__s       @/Users/bowang/.openclaw/workspace/ChatDev/entity/configs/base.pyr   zConfigError.__init__   s+    	/3$r'+&    N)__name__
__module____qualname____doc__strr   __classcell__)r   s   @r   r   r   
   s"    @' '3: ' 'r   r   T)frozenc                   V    e Zd ZU dZeeef   ed<   ee   ed<   eed<   de	eef   fdZ
y)RuntimeConstraintz>Represents a conditional requirement for configuration fields.whenrequirer   returnc                 n    t        | j                        t        | j                        | j                  dS )N)r)   r*   r   )dictr)   listr*   r   r   s    r   to_jsonzRuntimeConstraint.to_json   s*    ODLL)||
 	
r   N)r    r!   r"   r#   r
   r$   r   __annotations__r   r   r0    r   r   r(   r(      s7    H
#s(
c]L
c3h 
r   r(   c                   `    e Zd ZU dZeed<   dZedz  ed<   dededz  defdZ	de
eef   fdZy)ChildKeyz>Identifies a conditional navigation target for nested schemas.r   Nvaluer+   c                 Z    | j                   |k7  ry| j                  y| j                  |k(  S )NFTr   r5   )r   r   r5   s      r   matcheszChildKey.matches+   s/    :: ::zzU""r   c                 X    d| j                   i}| j                  | j                  |d<   |S )Nr   r5   r7   r   payloads     r   r0   zChildKey.to_json4   s/    #*DJJ"7::!#zzGG r   )r    r!   r"   r#   r$   r1   r5   r   boolr8   r   r0   r2   r   r   r4   r4   #   sJ    HJE3:#S #t # #c3h r   r4   c                   Z    e Zd ZU dZeed<   dZedz  ed<   dZedz  ed<   de	eef   fdZ
y)
EnumOptionz*Rich metadata for enum values shown in UI.r5   Nlabeldescriptionr+   c                     d| j                   i}| j                  r| j                  |d<   | j                  r| j                  |d<   |S )Nr5   r?   r@   )r5   r?   r@   r:   s     r   r0   zEnumOption.to_jsonE   sC    #*DJJ"7::#zzGG%)%5%5GM"r   )r    r!   r"   r#   r   r1   r?   r$   r@   r   r0   r2   r   r   r>   r>   =   s:    4JE3:"Kt"c3h r   r>   c                       e Zd ZU dZeed<   eed<   dZeed<   dZedz  ed<   dZ	e
dz  ed<   dZee
   dz  ed	<   dZee   dz  ed
<   dZedz  ed<   dZed   dz  ed<   dZeed<   dedd fdZdeee
f   fdZy)ConfigFieldSpecz9Describes a single configuration field for schema export.name	type_hintFrequiredNdisplay_namedefaultenumenum_optionsr@   r   childadvancer+   c                 >    | j                   |k(  r| S t        | |      S )N)rD   )rD   r   )r   rD   s     r   	with_namezConfigFieldSpec.with_name^   s     99Kt$''r   c                    | j                   xs | j                  }| j                  || j                  | j                  | j                  d}| j
                  | j
                  |d<   | j                  t        | j                        |d<   | j                  r+| j                  D cg c]  }|j                          c}|d<   | j                  r| j                  |d<   | j                  | j                  j                  |d<   |S c c}w )N)rD   displayNametyperF   rL   rH   rI   enumOptionsr@   	childNode)rG   rD   rE   rF   rL   rH   rI   r.   rJ   r0   r@   rK   r    )r   displaydataoptions       r   r0   zConfigFieldSpec.to_jsonc   s    ##0tyyII"NN|| 
 <<#"llDO99 		?DLBFBSBS"TBS6>>#3BS"TD"&"2"2D::! $

 3 3D  #Us   $D)r    r!   r"   r#   r$   r1   rF   r<   rG   rH   r   rI   r   rJ   r>   r@   rK   rQ   rL   rN   r   r0   r2   r   r   rC   rC   N   s    C
INHd#L#*#GS4Z!%D(3-$
%04L(:&-4"Kt"'+E4$+GT(c (&7 (
c3h r   rC   c                   d    e Zd ZU dZeed<   ee   ed<    ee	      Z
ee   ed<   deeef   fdZy)	
SchemaNodez4Serializable representation of a configuration node.nodefields)default_factoryconstraintsr+   c                     | j                   | j                  D cg c]  }|j                          c}| j                  D cg c]  }|j                          c}dS c c}w c c}w N)rY   rZ   r\   )rY   rZ   r0   r\   )r   spec
constraints      r   r0   zSchemaNode.to_json   sX    II26++>+$t||~+>CGCSCSTCSZJ..0CST
 	
>Ts   AA"N)r    r!   r"   r#   r$   r1   r   rC   r   r.   r\   r(   r   r   r0   r2   r   r   rX   rX   {   s>    >
I_%%/4T/JK+,J
c3h 
r   rX   c            	       x   e Zd ZU dZeed<   i Zeeee	f      ed<   dZ
eee      ed<   i Zeeeed    f      ed<   dd	Zdd
Zedeee	f   fd       Zedee   fd       Zedeeed    f   fd       Zeddededz  ded    dz  fd       Zdddee   dededz  fdZedefd       Zedeeef   fd       Zy)r   z5Base dataclass providing validation and schema hooks.r   FIELD_SPECSr2   CONSTRAINTSCHILD_ROUTESr+   Nc                 $    | j                          y r   )validater/   s    r   __post_init__zBaseConfig.__post_init__   s    r   c                      y)z7Hook for subclasses to implement structural validation.Nr2   r/   s    r   rf   zBaseConfig.validate   s     r   c                     t        | di       j                         D ci c]  \  }}||j                  |       c}}S c c}}w )Nrb   )getattritemsrN   )clsrD   r_   s      r   field_specszBaseConfig.field_specs   sA    =DS-Y[=\=b=b=de=dztTdnnT**=deees   ?c                 6    t        t        | dd      xs d      S )Nrc   r2   )tuplerj   rl   s    r   r\   zBaseConfig.constraints   s    WS-4:;;r   c                 6    t        t        | di       xs i       S )Nrd   )r-   rj   rp   s    r   child_routeszBaseConfig.child_routes   s    GC4:;;r   r   r5   c                 |    | j                         j                         D ]  \  }}|j                  ||      s|c S  y r   )rr   rk   r8   )rl   r   r5   keytargets        r   resolve_childzBaseConfig.resolve_child   s:    ++-335KC{{5%( 6 r   config)attrexpected_typerx   c                :    t        | |d      }t        ||      r|S y)zMReturn the nested config stored under *attr* if it matches the expected type.N)rj   
isinstance)r   ry   rx   r5   s       r   	as_configzBaseConfig.as_config   s"    dD)e]+Lr   c                     t        | j                  t        | j                         j	                               t        | j                                     S r^   )rX   r    r.   rm   valuesr\   rp   s    r   collect_schemazBaseConfig.collect_schema   s:    s||D9J9Q9Q9S4Tbfgjgvgvgxbyzzr   c                     i S )z.Placeholder for future example export support.r2   rp   s    r   examplezBaseConfig.example   s	     	r   )r+   Nr   )r    r!   r"   r#   r$   r1   rb   r   r   rC   rc   r   r(   rd   r4   rQ   rg   rf   classmethodrm   r\   rr   r   rv   r   r|   rX   r   r   r2   r   r   r   r      sz   ?
I 9;K$sO345:9;K(#456;ACL(4$|*< <=>C
 fDo!56 f f <H%67 < < <T(D,>">? < < # cDj DDVY]D]   FN tG} s RY\`R`  {z { { S#X  r   Tr5   r+   c                     | g S t        | t              rt        |       S t        | t        t        f      rt        |       S | gS r   )r{   r.   ro   setr5   s    r   ensure_listr      s?    }	%E{%%&E{7Nr   Nc                     | i S t        | t              rt        |       S t        | t              rt        |       S t	        dt        |             )Nexpected mapping)r   )r{   r   r-   r
   r   r$   r   s    r   ensure_dictr      sF    }	%(E{%!E{
(s5z
::r   rU   r   c                 >    t        | t              st        d|      | S )Nr   )r{   r
   r   )rU   r   s     r   require_mappingr      s    dG$,d33Kr   F)allow_emptyrt   r   c                    | j                  |      }|r| d| n|}t        |t              st        d|      |s|j	                         st        d|      |S )N.expected stringzexpected non-empty string)getr{   r$   r   strip)rU   rt   r   r   r5   key_paths         r   require_strr      sX    HHSME"&$qCHeS!+X66u{{}5x@@Lr   c                     | j                  |      }||dk(  ry |r| d| n|}t        |t              st        d|      |S )N r   r   )r   r{   r$   r   rU   rt   r   r5   r   s        r   optional_strr      sM    HHSME}"&$qCHeS!+X66Lr   c                 v    | j                  |      }|r| d| n|}t        |t              st        d|      |S Nr   zexpected boolean)r   r{   r<   r   r   s        r   require_boolr      s?    HHSME"&$qCHeT",h77Lr   )rH   rH   c                j    || vr|S | |   }|r| d| n|}t        |t              st        d|      |S r   )r{   r<   r   )rU   rt   r   rH   r5   r   s         r   optional_boolr      sG    
$IE"&$qCHeT",h77Lr   c                     || vs| |   y | |   }|r| d| n|}t        |t              st        d|      t        |      S )Nr   r   )r{   r
   r   r-   r   s        r   optional_dictr     sS    
$$s)+IE"&$qCHeW%,h77;r   suffixc                 F    | s|S |j                  d      r|  | S |  d| S )N[r   )
startswith)r   r   s     r   extend_pathr     s8    x  V1VHr   )%r#   dataclassesr   r   r   typingr   r   r   r	   r
   r   r   r   r   r   r   
ValueErrorr   r(   r4   r>   rC   rX   r   r   r   r$   r   r   r<   r   r   r   r   r   r   r2   r   r   <module>r      sw   D 1 1 l l l )<
0'* ' $
 
 
 $  2 $    $) ) )X $
 
 
 3 3 3l CLs tCy ;wsCx(4/ ;DcN ;# S WS#X->  V[ gc3h' c  d _b wsCx( s # #* wsCx( s # $  [_ S)  3 DSWK cgjncn S)  3 4S>TXCX c 3 3 r   