
    Mi>                        S SK r S SKJr  S SKJrJrJrJrJrJ	r	J
r
JrJr  SSKJr  SSKJrJrJr  SSKJr  SSKJr  SS	KJr  \" S
5      r\ " S S\\   5      5       rS rS r " S S5      rS\4S jrS\ S\ 4S jr!0 SS.S\\ \4   S\\ \\ \4   4   S\S\\ \4   4S jjr"SS.S\\ \4   S\S\\ \4   4S jjr#SSS.S\\ \4   S\S \ S\\ \4   4S! jjr$S"\\ \4   S#\ S \ SS4S$ jr%S\\ \\ \4   4   S%\S\\ \\ \4   4   4S& jr&S\\ \\ \4   4   S\\ \\ \4   4   4S' jr'S( r(S-S)\S*\	\\)\4      S\4S+ jjr*S\\ \\ \4   4   S\\ \\ \4   4   S\\ \\ \4   4   4S, jr+g).    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                       \ rS rSr% \\S'   \\S'   \\   \S'   \\\4   \S'   \	\
S\4   \4   \S'   \S\4S	 j5       rS\4S
 jr\SS j5       rSrg)Promise   registrynamevar_argskwargs.getterreturnc                     [        U R                  [        5      (       a  U R                  e[        R                  " U R                  5      nUR
                  $ N)
isinstancer   	Exceptioninspect	signaturereturn_annotation)selfr%   s     n/var/www/eduai.edurigo.com/storigo/production/storigo_env/lib/python3.13/site-packages/confection/_registry.pyreturn_typePromise.return_type$   s=    dkk9--++%%dkk2	***    c                 \   [        U R                  [        5      (       a  U R                  e[        U R                  5      n[        U R
                  5      n[        U[        5      (       a  [        UR                  5       5      OUn[        U R                  U5      nU R                  " U0 UD6$ r!   )
r"   r   r#   _recursive_resolver   r   dictlistvalues_coerce_basemodel_args)r'   r   argss      r(   resolvePromise.resolve+   s{    dkk9--++#DKK0!$--0&0t&<&<tDKKM"$'V<{{D+F++r+   c                     UR                  U5      u  p4UR                  U5      u  pV UR                  X45      nU " UUUUUS9n	U	$ ! [         a  nUn S nANS nAff = f)N)r   r   r   r   r   )get_constructor
parse_argsgetr#   )
clsr   r0   reg_name	func_namer   r   r   eoutputs
             r(   	from_dictPromise.from_dict4   st    &66v>#..v6	\\(6F 
   	F	s   A 
AAA N)r   r   )__name__
__module____qualname____firstlineno__str__annotations__r   r   r   r   r   r   r#   propertyr)   r3   classmethodr>   __static_attributes__r@   r+   r(   r   r      sw    M
I3icN(3-.	9::+] + +, ,  r+   r   c                     SSK Jn  U" U 5      n[        U5      nUR	                  5        H  u  pV[        U[        5      (       d  M  UR                  U5      nUb  [        U[        5      (       d  MG  [        US5      (       a  UR                  U5      XE'   Mm  [        US5      (       d  M  UR                  U5      XE'   M     U$ ! [         a    Us $ f = f)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)typingrK   r#   r.   itemsr"   r8   typehasattrrL   rM   )funcr   rK   hintsresultr   valuehints           r(   r1   r1   F   s    
)t$ &\F||~%&&yy<z$554)**..u5FLT;''>>%0FL & M  s   C CCc                 P   [        U [        5      (       a  U  Vs/ s H  n[        U5      PM     sn$ [        U [        5      (       a/  U R	                  5        VVs0 s H  u  p!U[        U5      _M     snn$ [        U [
        5      (       a  U R                  5       $ U $ s  snf s  snnf r!   )r"   r/   r-   r.   rO   r   r3   )objvks      r(   r-   r-   `   s    #t/23s!"1%s33	C		58YY[A[TQ%a(([AA	C	!	!{{}
 4As   BB"c                      \ rS rSr\S\S\S\4S j5       r\S\S\S\4S j5       r	\S0 SS	.S
\
\\\\\\4   4   4   S\\\4   S\S\\\4   4S jj5       r\S0 SSS.S
\
\\\\\\4   4   4   S\\\4   S\S\S\4
S jj5       r\S\S\4S j5       r\S\\\4   S\\\4   4S j5       r\S\\\4   S\\\   \\\4   4   4S j5       rSrg)r   k   registry_namer;   r   c                 B    [        X5      (       d  g[        X5      nX#;   $ )z4Check whether a function is available in a registry.F)rQ   getattr)r9   r]   r;   regs       r(   hasregistry.hasl   s%     s**c)r+   c                     [        X5      (       d  [        SU S35      e[        X5      nUR                  U5      nUc  [        SU SU S35      eU$ )z0Get a registered function from a given registry.zUnknown registry: ''zCould not find 'z' in ')rQ   
ValueErrorr_   r8   )r9   r]   r;   r`   rR   s        r(   r8   registry.gett   sa     s**2=/CDDc)wwy!</	{&qQRRr+   NT)schema	overridesvalidateconfigrh   ri   c                    U R                  UUUSS9n[        XSS9n[        U5      n[        U5      n[	        U[
        5      (       d   eUb!  U(       a  [        U5      R                  U5        U$ )NT)rg   rh   interpolater3   )fillinsert_promisesresolve_promisesfix_positionalsr"   r.   r   ri   )r9   rj   rg   rh   ri   promisedresolvedfixeds           r(   r3   registry.resolve   sw     	  
 #3=#H-)%&&&&(5M""6*r+   F)rg   rh   rl   ri   rl   c                   U R                  U5      (       a  Sn[        USU0/S9e[        U[        5      (       + =(       d    UR                  n[        U[        5      (       a  UR
                  OS nUn	U(       d  [        U	5      R                  5       n[        XX5S9n
[        XS9n
U(       d  U(       d  U
R                  [        U	SS9SS	9n
Ub  U
R                  U5        U
$ )
NzJThe top-level config object can't be a reference to a registered function.msgrj   errorsrh   ri   )section_orderF)is_interpolatedT)remove_extra)
r   r   r"   r   r|   r{   rl   fill_configmergefill_defaults)r9   rj   rg   rh   rl   ri   err_msgr|   r{   orig_configfilleds              r(   rn   registry.fill   s     >>&!!bG'vw?O>PQQ )88RF<R<R0:660J0J,,PTK(446FSIQ<
 ?\\{E: " F   (r+   rX   c                     [        U5      $ )z{Check whether an object is a "promise", i.e. contains a reference
to a registered function (via a key starting with `"@"`.
r   )r9   rX   s     r(   r   registry.is_promise   s    
 #r+   c                     UR                  5        Vs/ s H  o"R                  S5      (       d  M  UPM     nn[        U5      S:w  a  SU 3n[        USU0/S9eUS   nX   nUSS  U4$ s  snf )N@r   z?A block can only contain one function registry reference. Got: rw   rx   r   )keys
startswithlenr   )r9   rX   rZ   id_keysr   keyrU   s          r(   r6   registry.get_constructor   sz    !hhj>jLL,=1j>w<1WX_W`aG'sUG<L;MNN!*CHEGU## ?s
   A)A)c                     / n0 nUR                  5        H/  u  pEUR                  S5      (       a  M  U[        :X  a  UnM+  XSU'   M1     X#4$ )Nr   )rO   r   r   )r9   rX   r2   r   r   rU   s         r(   r7   registry.parse_args   sK    ))+JC>>#&&*$ D"'3K & |r+   r@   )rA   rB   rC   rD   rH   rE   boolra   r   r8   r   r   r   r   r3   rn   r   r
   r6   r   r7   rI   r@   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                 n    [        U [        5      (       d  g[        S U R                  5        5       5      $ )zFCheck if a dict is a config section (all string keys) vs a data value.Fc              3   B   #    U  H  n[        U[        5      v   M     g 7fr!   )r"   rE   ).0rZ   s     r(   	<genexpr>%_is_config_section.<locals>.<genexpr>   s     6:az!S!!:s   )r"   r.   allr   )rX   s    r(   _is_config_sectionr      s)    c4  6388:666r+   r   c                 N    U [         :X  a  [        $ [        R                  " X 5      $ )z)Generate field aliases in promise schema.)r   r   r   r8   )r   s    r(   alias_generatorr      s$     "&&t22r+   Trz   rj   rh   ri   c                @    [        [        U5      U5      n[        XUS9$ )Nri   )apply_overridesr.   _fill_defaults)r   rj   rh   ri   	overrideds        r(   r~   r~      s!      Vi8I(AAr+   r   c                    [        U5      nUR                  5        HF  u  pE[        U5      (       a  [        XX$S9X4'   M#  [	        U[         5      (       d  M:  [        XUS9X4'   MH     U$ )zDRecursively fill default values from registered function signatures.ri   parentr   )r.   rO   r   _fill_promise_defaultsr"   r   )r   rj   ri   r=   r   rU   s         r(   r   r      s_     &\Flln
e0(FK t$$(8LFK % Mr+    r   promise_dictr   c          	         U R                  U5      u  pEU R                  XE5      (       d  [        U5      $ U R                  XE5      n[        R
                  " U5      n[        U5      nUR                  R                  5        H1  u  pX;  d  M  U
R                  5       (       a  M#  U
R                  X'   M3     U(       a  [        XXS5        UR                  5        Hc  u  pUR                  S5      (       a  M  [        U5      (       a  [        XX# SU 3S9X'   M@  [        U[        5      (       d  MW  [        XUS9X'   Me     U$ )zMFill default argument values for a promise block from the function signature.r   .r   r   )r6   ra   r.   r8   r   from_functionmodel_fieldsrO   is_requireddefault_validate_promise_argsr   r   r   r"   r   )r   r   ri   r   r:   r;   rR   rg   r   
param_namefieldr   rU   s                r(   r   r     s    #22<@H<<,,L!!<<,D!!$'F,F#00668
#E,=,=,?,?!&F 9 vyAlln
>>#e0(XQse;LFK t$$(8LFK % Mr+   r   r;   c                    SSK Jn  / nUR                  R                  5        H  u  pgUnX`;  a  [        U ;   a  [        nX;  a<  UR                  5       (       a%  UR                  U(       a  X6/OU/SU S3S.5        M[  M]  U[        :X  a  Mi  [        X   5      (       a  M}  U" X   UR                  5      n	U	(       d  M  UR                  U(       a  X6/OU/U	S.5        M     [        UR                  R                  5       5      U  V
s1 s H  oR                  S5      (       d  M  U
iM     sn
-  [        1-  nU  H-  nX;  d  M
  UR                  U(       a  X</OU/SU S3S.5        M/     U(       a  [        U USU S3S	9eg
s  sn
f )z7Validate promise arguments against the function schema.r   )validate_typezmissing required argument: 'rd   locrw   r   zunexpected argument: 'zConfig error for ')rj   ry   titleN)
validationr   r   rO   r   r   appendr   
annotationsetr   r   r   )r   rg   r;   r   r   ry   r   r   effective_nameerrrZ   knownr   s                r(   r   r   $  s    *F#00668
 $#
f(<'N'  ""7=3J<!=j\K # z)F233   68H8HICs7=3J<"- 9< 	F$$&'
2fS 11f
2	3,	 

 MM,2F=3C5:  #&yk3
 	
  3s   F$Fr3   c                     0 nUR                  5        Hf  u  pEU R                  U5      (       a$  [        XUS9n[        R	                  U U5      X4'   M?  [        U[        5      (       a  [        XUS9X4'   Mb  XSU'   Mh     U$ )zdCreate a version of a config dict where promises are recognised and replaced by
Promise dataclasses
rm   )rO   r   ro   r   r>   r"   r.   )r   rj   r3   r=   r   rU   s         r(   ro   ro   `  s{     Flln
u%%#HWEE!++FK t$$)(7KFK3K % Mr+   c                     0 nU R                  5        HV  u  p#[        U[        5      (       a  [        U5      X'   M)  [        U[        5      (       a  UR                  5       X'   MR  X1U'   MX     U$ r!   )rO   r"   r.   rp   r   r3   )rj   r=   r   rU   s       r(   rp   rp   u  sZ    Flln
eT""*51FKw''--/FK3K % Mr+   c                 x   [        U [        5      (       a  0 nU R                  5        H  u  p#U[        :X  a.  [        U[        5      (       a  [	        UR                  5       5      n[        U[        5      (       a  [        U5      nO5[        U[        5      (       d  [        U[        5      (       a  [        U5      nX1U'   M     U$ [        U [        5      (       a  U  Vs/ s H  n[        U5      PM     sn$ [        U [        5      (       a%  [	        U  Vs/ s H  n[        U5      PM     sn5      $ U $ s  snf s  snf )z?Ensure positionals are provided as a tuple, rather than a dict.)r"   r.   rO   r   tupler0   rq   r/   )rj   r=   r   rU   rY   s        r(   rq   rq     s    &$ ,,.JCj Zt%<%<elln-%&&'.E4((Jue,D,D'.3K ) 	FD	!	!,23Fq"F33	FE	"	"&9&Qoa(&9::	 49s   D2D7rX   memoc                   ^ Tc  0 m[        U 5      nUT;   a  TU   $ [        U [        5      (       a;  0 nUTU'   U R                  5        H  u  pE[	        UT5      U[	        UT5      '   M      U$ [        U [
        5      (       a-  / nUTU'   U  H  nUR                  [	        UT5      5        M      U$ [        U [        5      (       a  [        U4S jU  5       5      $ U $ )zMDeep copy that passes through objects that can't be copied (like generators).c              3   <   >#    U  H  n[        UT5      v   M     g 7fr!   )_deep_copy_with_uncopyable)r   itemr   s     r(   r   -_deep_copy_with_uncopyable.<locals>.<genexpr>  s     L/d;;s   )idr"   r.   rO   r   r/   r   r   )rX   r   obj_idrT   rZ   rY   r   s    `     r(   r   r     s    |WF~F|#tVIIKDA:T4;F-a67   	C		VDMM4T4@A 	C		LLLL
r+   c                    [        U 5      nUR                  5        Hm  u  p4UR                  S5      nSnSnXWS./nUn	USS  H*  n
[        U	[         5      (       a  X;  a	  [	        XS9eX   n	M,     US   U	;  a	  [	        XS9eXIUS   '   Mo     U$ )z)Build first representation of the config:r   zError parsing config overridesz*not a section value that can be overriddenr   N)ry   r   )r.   rO   splitr"   r   )rj   rh   r=   r   rU   path	err_titler   r   nodesubkeys              r(   r   r     s    
 &\Foo'
yy~4	>,-3BiFtT**f.@+  <D   84'sDDT"X! (" Mr+   r!   ),r$   dataclassesr   rN   r   r   r   r   r   r	   r
   r   r   _configr   
_constantsr   r   r   _errorsr   utilr   r   r   r   r   r1   r-   r   r   r   rE   r   r~   r   r   r   ro   rp   rq   intr   r   r@   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+   