
    i '                        d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ ej                  dk\  rd dlmZ nd dlmZ ddlmZmZ dd	lmZmZ dd
lmZmZ  G d de      Zd ZddZdd	 	 	 	 	 	 	 ddZy)    )annotationsN)Path)AnyDictListOptionalUnion)      )Self   )ConfectionErrorConfigValidationError)parse_configserialize_config)ValidationErrorensure_schemac                      e Zd ZU dZded<   	 dddd	 	 	 	 	 	 	 ddZddZddZ	 d	 	 	 	 	 dd	Zdd
Z	ddZ
di dd	 	 	 	 	 	 	 ddZddddZddddZdi d	 	 	 	 	 	 	 ddZddddZdi d	 	 	 	 	 	 	 d dZy)!Configz]Dict subclass to save TOML-style configuration format from/to string, file
    or bytes.
    boolis_interpolatedNr   section_orderc               ~   t         j                  |        |i }t        |t         t        f      st	        dt        |             ||| _        n)t        |t              r|j                  | _        nd| _        ||| _        n)t        |t              r|j                  | _        ng | _        | j                  |       y)z2Initialize a new Config object with optional data.NzDCan't initialize Config with data. Expected dict or Config but got: T)	dict__init__
isinstancer   r   typer   r   update)selfdatar   r   s       c/var/www/vps2.regionflexible.com/Desarrollo/venv/lib/python3.12/site-packages/confection/_config.pyr   zConfig.__init__   s     	d<D$v/!##':,0  &#2D f%#'#7#7D #'D $!.Df%!%!3!3D!#DD    c                \     t        |              j                  | j                               S )z^Interpolate (resolve var references) a config.

        Returns a copy of the object.
        )r   from_strto_str)r    s    r"   interpolatezConfig.interpolate<   s#     tDz|$$T[[]33r#   c                |    t        j                  |       } t        |       || j                  | j                        S )zDeepcopy the config.r   )copydeepcopyr   r   r   )r    configs     r"   r)   zConfig.copyG   s8    t$tDz 00,,
 	
r#   c                    | j                         }t        |      j                         }t        |||      } t        |       ||j                  xr |j                  |j
                        S )z>Deep merge the config with updates, using current as defaults.remove_extrar   )r)   r   deep_merge_configsr   r   r   )r    updatesr.   defaultsmergeds        r"   mergezConfig.mergeP   sb     99;/&&(#GXLQtDz$44P9P9P"00
 	
r#   c                H    t        |      }t        t        |       ||        | S )zhValidate the config against a schema. Raises ConfigValidationError
        if validation fails.
        )r   _validate_recursiver   )r    schemas     r"   validatezConfig.validate]   s#     v&DJ5r#   c                6   t        |      }|j                  j                  dd      }|j                  j	                         D ]  \  }}|| vr |j                         s|j                  | |<   *|| v s/t        | |   t              sC|j                  }t        |t              s`t        |d      smt        |      }t        | |   |        |dk(  rIt        |j                  j                               }t        | j                               D ]
  }||vs| |=  | S )zFill in missing values from schema defaults and remove extra
        fields if the schema forbids them. Modifies in place and returns self.
        extraallowmodel_fieldsforbid)r   model_configgetr;   itemsis_requireddefaultr   r   
annotationr   hasattr_fill_defaults_recursivesetkeyslist)	r    r6   r9   namefieldfield_schema
sub_schemaknownkeys	            r"   fill_defaultszConfig.fill_defaultse   s    v&##''9!..446 		EKD%4(9(9(;"]]T
*T$Z">$//lD1g .7 "/|!<J,T$ZD		E H++0023EDIIK( "e#S	" r#   T)r'   	overridesr6   c                   | j                          | j                  t        |||             |r|r| j                         } || _        |"| j                  |       | j                  |       | S )zLoad the config from a string.r'   rO   )clearr   r   r'   r   rN   r7   )r    textr'   rO   r6   s        r"   r%   zConfig.from_str~   sd     	

L;)TU ##%D*v&MM&!r#   r'   c                   t        | |      S )zWrite the config to a string.rT   )r   r    r'   s     r"   r&   zConfig.to_str   s    +>>r#   c               D    | j                  |      j                  d      S )z&Serialize the config to a byte string.rT   utf8)r&   encoderV   s     r"   to_byteszConfig.to_bytes   s    {{{{3::6BBr#   rQ   c               H    | j                  |j                  d      ||      S )z#Load the config from a byte string.rX   rQ   )r%   decode)r    
bytes_datar'   rO   s       r"   
from_byteszConfig.from_bytes   s,     }}f%;)  
 	
r#   c                   t        |t              rt        |      n|}|j                  dd      5 }|j	                  | j                  |             ddd       y# 1 sw Y   yxY w)zSerialize the config to a file.wrX   encodingrT   N)r   strr   openwriter&   )r    pathr'   file_s       r"   to_diskzConfig.to_disk   sT    'c2tDzYYsVY, 	>KK<=	> 	> 	>s   "AA%c                   t        |t              rt        |      n|}|j                  dd      5 }|j	                         }ddd       | j                  ||      S # 1 sw Y   xY w)zLoad config from a file.rrX   ra   NrQ   )r   rc   r   rd   readr%   )r    rf   r'   rO   rg   rS   s         r"   	from_diskzConfig.from_disk   s_     (c2tDzYYsVY, 	 ::<D	 }}T{i}PP	  	 s   AA')N)r!   z)Optional[Union[Dict[str, Any], 'Config']]r   zOptional[bool]r   zOptional[List[str]]returnNone)rm   r   )F)r0   zUnion[Dict[str, Any], 'Config']r.   r   rm   r   )rS   rc   r'   r   rO   Dict[str, Any]rm   r   )r'   r   rm   rc   )r'   r   rm   bytes)r]   rp   r'   r   rO   ro   rm   r   )rf   Union[str, Path]r'   r   rm   rn   )rf   rq   r'   r   rO   ro   rm   r   )__name__
__module____qualname____doc____annotations__r   r'   r)   r3   r7   rN   r%   r&   rZ   r^   rh   rl    r#   r"   r   r      sG     ;?  +/-1 7  (	 
 +  
 D	4
 NS
6
FJ
	
: !$& 	
 " 
* -1 ? /3 C !$&



 	


 "

 


 FJ > !$&QQ 	Q
 "Q 
Qr#   r   c                   |j                   j                  dd      }|j                  j                         D ]  \  }}|| vr |j	                         s|j
                  | |<   *|| v s/t        | |   t              sC|j                  }t        |t              s`t        |d      smt        | |   t        |              |dk(  rJt        |j                  j                               }t        | j                               D ]
  }||vs| |=  yy)z>Fill defaults and strip extras recursively for nested schemas.r9   r:   r;   r<   N)r=   r>   r;   r?   r@   rA   r   r   rB   r   rC   rD   r   rE   rF   rG   )r!   r6   r9   rH   rI   rJ   rL   rM   s           r"   rD   rD      s    ##GW5E**002 RetE$5$5$7DJT\jdT: ++L,-',2W(d]<5PQR F'',,./		$ 	C%I	 r#   c                   	 |j                  |        |j                  j                         D ]e  \  }}|j                  }t        |t              s#t        |d      s0|| v s5t        | |   t              sI|r| d| n|}	t        | |   |||		       g y# t        $ r/}|rd| dnd}t        ||j                         d|       dd}~ww xY w)
z>Validate data against a schema, recursing into nested schemas.z in [] zConfig validation error)r+   errorstitleNmodel_validate.)parent)r~   r   r   r|   r;   r?   rB   r   r   rC   r   r5   )
r!   r6   r+   r   esectionrH   rI   rB   child_parents
             r"   r5   r5      s    d# **002 	Ue%%
z4(
$454:t,17fXQtf-TLT
J|T	U  '-E&#2#88:+G95
 		s   B 	C*C		CFr-   c               4   |r(t        | j                               }|D ]
  }||vs| |=  |j                         D ]  \  }}t        |t              r| j                  |i       }t        |t              s9|D cg c]  }|j                  d      s| }}|r|d   nd}	|r"|D cg c]  }|j                  d      s| c}ng }
|
r|
d   nd}|	r|r|	|v r||	   ||	   k7  r|r||vs||   ||   k7  rt        |||      }|| vs|| |<    | S c c}w c c}w )zDeep merge two configs.@r   Nr-   )rG   rF   r?   r   r   
setdefault
startswithr/   )r+   r1   r.   rF   rM   valuenodekvalue_promisesvalue_promisenode_promisesnode_promises               r"   r/   r/      sI    FKKM" 	 C("3K	  nn&  
UeT"$$S"-DdD)).DA!,,s2CaDND1?N1-TMFJB1S0AQBPRM/<=+$L  !T)]+u]/CC E)T,-?5CV-V)$LQHF3K5 6 M- EBs   8DD$D;D)r{   )r+   Union[Dict[str, Any], Config]r1   r   r.   r   rm   r   )
__future__r   r)   syspathlibr   typingr   r   r   r   r	   version_infor   typing_extensions_errorsr   r   _parserr   r   
validationr   r   r   r   rD   r5   r/   rw   r#   r"   <module>r      s~    "  
  3 3w& ; 3 6fQT fQR"U8 	()(+( 	(
 #(r#   