
    i>                        d dl Z d dl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mZmZ ddlmZ ddlmZ dd	lmZ  ed
      Ze G d dee                Zd Zd Z G d d      ZdefdZde de fdZ!i dddee ef   dee ee ef   f   dedee ef   fdZ"dddee ef   dedee ef   fdZ#ddddee ef   ded e dee ef   fd!Z$d"ee ef   d#e d e ddfd$Z%dee ee ef   f   d%edee ee ef   f   fd&Z&dee ee ef   f   dee ee ef   f   fd'Z'd( Z(d-d)ed*e	ee)ef      defd+Z*dee ee ef   f   dee ee ef   f   dee ee ef   f   fd,Z+y).    N)	dataclass)	AnyCallableDictGenericListOptionalTupleTypeVarUnion   )Config)
ARGS_FIELDARGS_FIELD_ALIASRESERVED_FIELDS_REVERSE)ConfigValidationError
is_promise)Schema_PromisedTypec                       e Zd ZU eed<   eed<   ee   ed<   eeef   ed<   ee	de
f   ef   ed<   ede
fd       Zdefd	Zedd
       Zy)Promiseregistrynamevar_argskwargs.getterreturnc                     t        | j                  t              r| j                  t        j                  | j                        }|j
                  S N)
isinstancer   	Exceptioninspect	signaturereturn_annotation)selfr$   s     e/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/confection/_registry.pyreturn_typezPromise.return_type$   s:    dkk9-++%%dkk2	***    c                 H   t        | j                  t              r| j                  t        | j                        }t        | j
                        }t        |t              rt        |j                               n|}t        | j                  |      } | j                  |i |S r    )
r!   r   r"   _recursive_resolver   r   dictlistvalues_coerce_basemodel_args)r&   r   argss      r'   resolvezPromise.resolve+   sw    dkk9-++#DKK0!$--0&0t&<tDKKM"$'V<t{{D+F++r)   c                     |j                  |      \  }}|j                  |      \  }}	 |j                  ||      } | |||||      }	|	S # t        $ r}|}Y d }~d }~ww xY w)N)r   r   r   r   r   )get_constructor
parse_argsgetr"   )
clsr   r.   reg_name	func_namer   r   r   eoutputs
             r'   	from_dictzPromise.from_dict4   sz    &66v>)#..v6&	\\(I6F 
   	F	s   A 	A AA N)r   r   )__name__
__module____qualname__str__annotations__r   r   r   r   r   r   r"   propertyr(   r1   classmethodr;    r)   r'   r   r      sw    M
I3icN(3-.	9::+] + +, ,  r)   r   c                 z   	 ddl m}  ||       }t        |      }|j	                         D ]|  \  }}t        |t              s|j                  |      }|t        |t              s;t        |d      r|j                  |      ||<   \t        |d      si|j                  |      ||<   ~ |S # t        $ r |cY S w xY w)zCoerce dict kwargs to BaseModel instances where the function signature
    expects a BaseModel subclass.  This lets registered functions receive
    constructed model instances instead of raw dicts (issue #58).
    r   )get_type_hintsmodel_validate	parse_obj)typingrE   r"   r,   itemsr!   r5   typehasattrrF   rG   )funcr   rE   hintsresultr   valuehints           r'   r/   r/   F   s    
)t$ &\F||~ 
1e%&yy<z$54)*..u5F4LT;'>>%0F4L
1 M  s   B, ,B:9B:c                 (   t        | t              r| D cg c]  }t        |       c}S t        | t              r-| j	                         D ci c]  \  }}|t        |       c}}S t        | t
              r| j                         S | S c c}w c c}}w r    )r!   r-   r+   r,   rI   r   r1   )objvks      r'   r+   r+   `   sv    #t/23!"1%33	C	58YY[ATQ%a((AA	C	!{{}
 4As   B	Bc                      e Zd Zedededefd       Zedededefd       Zedi ddd	e	e
eeeeef   f   f   d
eeef   dedeeef   fd       Zedi dddd	e	e
eeeeef   f   f   d
eeef   dedede
f
d       Zededefd       Zedeeef   deeef   fd       Zedeeef   deee   eeef   f   fd       Zy)r   registry_namer8   r   c                 <    t        | |      syt        | |      }||v S )z4Check whether a function is available in a registry.F)rK   getattr)r6   rV   r8   regs       r'   haszregistry.hasl   s(     sM*c=)Cr)   c                     t        | |      st        d| d      t        | |      }|j                  |      }|t        d| d| d      |S )z0Get a registered function from a given registry.zUnknown registry: ''zCould not find 'z' in ')rK   
ValueErrorrX   r5   )r6   rV   r8   rY   rL   s        r'   r5   zregistry.gett   sb     sM*2=/CDDc=)wwy!</	{&qQRRr)   NT)schema	overridesvalidateconfigr_   r`   c                    | j                  |||d      }t        | |d      }t        |      }t        |      }t	        |t
              sJ ||rt        |      j                  |       |S )NT)r^   r_   interpolater1   )fillinsert_promisesresolve_promisesfix_positionalsr!   r,   r   r`   )r6   ra   r^   r_   r`   promisedresolvedfixeds           r'   r1   zregistry.resolve   sv     	  
 #3=#H-)%&&&(5M""6*r)   F)r^   r_   rc   r`   rc   c                   | j                  |      rd}t        |d|ig      t        |t               xs |j                  }t        |t              r|j
                  nd }|}	|st        |	      j                         }t        | |||      }
t        |
|      }
|s |s|
j                  t        |	d      d	      }
||
j                  |       |
S )
NzJThe top-level config object can't be a reference to a registered function.msgra   errorsr_   r`   )section_orderF)is_interpolatedT)remove_extra)
r   r   r!   r   rr   rq   rc   fill_configmergefill_defaults)r6   ra   r^   r_   rc   r`   err_msgrr   rq   orig_configfilleds              r'   re   zregistry.fill   s     >>&!bG'vw?O>PQQ )88RF<R<R0:660J,,PTK(446FS&IQm<
 ?\\{E: " F   (r)   rR   c                     t        |      S )zCheck whether an object is a "promise", i.e. contains a reference
        to a registered function (via a key starting with `"@"`.
        r   )r6   rR   s     r'   r   zregistry.is_promise   s    
 #r)   c                     |j                         D cg c]  }|j                  d      s| }}t        |      dk7  rd| }t        |d|ig      |d   }||   }|dd  |fS c c}w )N@r   z?A block can only contain one function registry reference. Got: rm   rn   r   )keys
startswithlenr   )r6   rR   rT   id_keysrw   keyrO   s          r'   r3   zregistry.get_constructor   s}    !hhj>ALL,=1>>w<1WX_W`aG'sUG<L;MNN!*CHEGU## ?s
   A$A$c                     g }i }|j                         D ](  \  }}|j                  d      r|t        k(  r|}$|||<   * ||fS )Nr|   )rI   r~   r   )r6   rR   r0   r   r   rO   s         r'   r4   zregistry.parse_args   sS    ))+ 	(JC>>#&*$ D"'F3K	( V|r)   )r<   r=   r>   rB   r?   boolrZ   r   r5   r   r   r   r   r1   re   r   r
   r3   r   r4   rC   r)   r'   r   r   k   s                  
 $&fd3S#X#6778
 S>  
c3h , 
 $&!fd3S#X#6778
 S>   
 B S T   $$sCx. $U38_ $ $ 	T#s(^ 	d3ic3h6O0P 	 	r)   r   r   c                 d    t        | t              syt        d | j                         D              S )zFCheck if a dict is a config section (all string keys) vs a data value.Fc              3   <   K   | ]  }t        |t                y wr    )r!   r?   ).0rT   s     r'   	<genexpr>z%_is_config_section.<locals>.<genexpr>   s     6az!S!6s   )r!   r,   allr}   )rR   s    r'   _is_config_sectionr      s&    c4 6388:666r)   r   c                 L    | t         k(  rt        S t        j                  | |       S )z)Generate field aliases in promise schema.)r   r   r   r5   )r   s    r'   alias_generatorr      s&     "&&tT22r)   Trp   ra   r_   r`   c                H    t        t        |      |      }t        | ||      S )Nr`   )apply_overridesr,   _fill_defaults)r   ra   r_   r`   	overrideds        r'   rt   rt      s#      Vi8I(IAAr)   r   c                    t        |      }|j                         D ]E  \  }}t        |      rt        | |||      ||<   $t	        |t               s5t        | ||      ||<   G |S )zDRecursively fill default values from registered function signatures.r`   parentr   )r,   rI   r   _fill_promise_defaultsr!   r   )r   ra   r`   r:   r   rO   s         r'   r   r      sl     &\Flln M
Ue0%(3F3K t$(58LF3KM Mr)    r   promise_dictr   c          	      X   | j                  |      \  }}| j                  ||      st        |      S | j                  ||      }t	        j
                  |      }t        |      }|j                  j                         D ]*  \  }	}
|	|vs|
j                         r|
j                  ||	<   , |rt        ||||       |j                         D ]\  \  }}|j                  d      rt        |      rt        | ||| d|       ||<   ;t        |t              sLt        | ||      ||<   ^ |S )zMFill default argument values for a promise block from the function signature.r|   .r   r   )r3   rZ   r,   r5   r   from_functionmodel_fieldsrI   is_requireddefault_validate_promise_argsr~   r   r   r!   r   )r   r   r`   r   r7   r8   rL   r^   ry   
param_namefieldr   rO   s                r'   r   r     s,    #22<@Hi<<),L!!<<),D!!$'F,F#00668 /
EV#E,=,=,?!&F:/ vvy&Alln M
U>>#e0%(fXQse;LF3K t$(58LF3KM Mr)   ry   r8   c                    ddl m} g }|j                  j                         D ]  \  }}|}|| vrt        | v rt        }|| vr1|j                         s/|j                  |r||gn|gd| dd       O|t        k(  rYt        | |         rh || |   |j                        }	|	s|j                  |r||gn|g|	d        t        |j                  j                               | D 
ch c]  }
|
j                  d      s|
 c}
z  t        hz  }| D ]&  }||vs|j                  |r||gn|gd| dd       ( |rt        | |d| d	      y
c c}
w )z7Validate promise arguments against the function schema.r   )validate_typezmissing required argument: 'r\   locrm   r|   zunexpected argument: 'zConfig error for ')ra   ro   titleN)
validationr   r   rI   r   r   appendr   
annotationsetr}   r~   r   )ry   r^   r8   r   r   ro   r   r   effective_nameerrrT   knownr   s                r'   r   r   $  s    *F#00668 
E $V#
f(<'N'  "7=
3J<!=j\K z)F>23  ~ 68H8HIC7=
3J<"-< 	F$$&'
2S 11
2	3,	 

  eMM,2FC=3C5: #&yk3
 	
  3s   'E>Er1   c                     i }|j                         D ]e  \  }}| j                  |      r(t        | ||      }t        j	                  | |      ||<   ?t        |t              rt        | ||      ||<   a|||<   g |S )zlCreate a version of a config dict where promises are recognised and replaced by
    Promise dataclasses
    rd   )rI   r   rf   r   r;   r!   r,   )r   ra   r1   r:   r   rO   s         r'   rf   rf   `  s     Flln 
 
Uu%#HeWEE!++F3K t$)(E7KF3KF3K
  Mr)   c                     i }| j                         D ]M  \  }}t        |t              rt        |      ||<   %t        |t              r|j                         ||<   I|||<   O |S r    )rI   r!   r,   rg   r   r1   )ra   r:   r   rO   s       r'   rg   rg   u  sa    Flln  
UeT"*51F3Kw'--/F3KF3K  Mr)   c                 $   t        | t              ri }| j                         D ]  \  }}|t        k(  r)t        |t              rt	        |j                               }t        |t              rt        |      }n+t        |t              st        |t              rt        |      }|||<    |S t        | t              r| D cg c]  }t        |       c}S t        | t              r"t	        | D cg c]  }t        |       c}      S | S c c}w c c}w )z?Ensure positionals are provided as a tuple, rather than a dict.)r!   r,   rI   r   tupler.   rh   r-   )ra   r:   r   rO   rS   s        r'   rh   rh     s    &$ ,,. 	 JCj Zt%<elln-%&'.E4(Jue,D'.F3K	  	FD	!,23q"33	FE	"&9Qoa(9::	 49s   ?D-DrR   memoc                    i t        |       }|v r|   S t        | t              r:i }||<   | j                         D ]  \  }}t	        |      |t	        |      <     |S t        | t
              r+g }||<   | D ]  }|j                  t	        |              |S t        | t              rt        fd| D              S | S )zMDeep copy that passes through objects that can't be copied (like generators).c              3   6   K   | ]  }t        |        y wr    )_deep_copy_with_uncopyable)r   itemr   s     r'   r   z-_deep_copy_with_uncopyable.<locals>.<genexpr>  s     L/d;Ls   )idr!   r,   rI   r   r-   r   r   )rR   r   obj_idrN   rT   rS   r   s    `     r'   r   r     s    |WF~F|#tVIIK 	DAq:T4;F-a67	 	C	V 	BDMM4T4@A	B	C	LLLL
r)   c                    t        |       }|j                         D ]n  \  }}|j                  d      }d}d}||dg}|}	|dd D ](  }
t        |	t               r|
|	vrt	        ||      |	|
   }	* |d   |	vrt	        ||      ||	|d   <   p |S )z)Build first representation of the config:r   zError parsing config overridesz*not a section value that can be overriddenr   N)ro   r   )r,   rI   splitr!   r   )ra   r_   r:   r   rO   path	err_titlerw   r   nodesubkeys              r'   r   r     s    
 &\Foo' 
Uyy~4	>G,-3Bi 	 FtT*fD.@+i  <D	  84's)DDT"X!" Mr)   r    ),r#   dataclassesr   rH   r   r   r   r   r   r	   r
   r   r   _configr   
_constantsr   r   r   _errorsr   utilr   r   r   r   r   r/   r+   r   r   r   r?   r   rt   r   r   r   rf   rg   rh   intr   r   rC   r)   r'   <module>r      s    !
 
 
  
 +  ( &gm$ & &R4i iX7t 73# 3# 3 ,.BcNB Cc3h'(	B
 B 
#s(^B ;?38n37	#s(^&  sCx.  	 
   
#s(^ F9
cN9
 9
 	9

 
9
x3S#X./:>	#tCH~
*	T#tCH~"56 	4T#s(^@S;T 	*C xS#X/G SV <d38n$%Cc3h'( 
#tCH~
r)   