Ë
    äš¾j '  ã                  óð   — 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       ú\/home/spazio/kingdom_calls/work5/transenv/lib/python3.12/site-packages/confection/_config.pyr   zConfig.__init__   s²   € ô 	�‰�dÔØˆ<ØˆDÜ˜$¤¤v Ô/Ü!ð#Ü#'¨£: ,ð0óð ð Ð&Ø#2ˆDÕ Ü˜œfÔ%Ø#'×#7Ñ#7ˆDÕ à#'ˆDÔ ØÐ$Ø!.ˆDÕÜ˜œfÔ%Ø!%×!3Ñ!3ˆDÕà!#ˆ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#   € ð Œt�D‹z‹|×$Ñ$ 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Ó$ˆØŒt�D‹zØØ ×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   € ð —9‘9“;ˆÜ˜“/×&Ñ&Ó(ˆÜ# G¨XÀLÔQˆØŒt�D‹zØØ$×4Ñ4ÒP¸×9PÑ9PØ"×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 )z”Fill 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‰KˆD�%Ø˜4Ñ¨×(9Ñ(9Ô(;Ø"Ÿ]™]��T’
Ø˜’¤*¨T°$©Z¼Õ">Ø$×/Ñ/�Ü˜l¬DÕ1´gØ  .õ7ô "/¨|Ó!<�JÜ,¨T°$©Z¸ÕDð		Eð �HÒÜ˜×+Ñ+×0Ñ0Ó2Ó3ˆEÜ˜DŸI™I›KÓ(ò "�Ø˜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Ô&Ø�M‰M˜&Ô!Øˆ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Ô2Œt�DŒz¸ˆØ�Y‰Y�s VˆYÓ,ð 	>°Ø�K‰K˜Ÿ™°˜Ó<Ô=÷	>÷ 	>ñ 	>ú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Ô2Œt�DŒz¸ˆØ�Y‰Y�s VˆYÓ,ð 	 °Ø—:‘:“<ˆ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ô   € à×Ñ×#Ñ# G¨WÓ5€EØ×*Ñ*×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Ø×%Ñ%ˆ
ä�z¤4Õ(Ü˜
Ð$4Õ5Ø˜’Ü˜4 ™:¤tÕ,á17˜f˜X Q t fÑ-¸TˆLÜ  T¡
¨J¸À|ÖTñ	Uøô ò Ù'-�E˜&˜ Ñ#°2ˆÜ#ØØ—8‘8“:Ø+¨G¨9Ð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  € ñ ä�F—K‘K“MÓ"ˆØò 	 ˆCØ˜(Ò"Ø˜3‘Kð	 ð —n‘nÓ&ò  ‰
ˆˆUÜ�eœTÔ"Ø×$Ñ$ S¨"Ó-ˆDÜ˜d¤DÔ)ØØ).ÖD A°!·,±,¸sÕ2CšaÐDˆNÐDÙ1?˜N¨1Ò-ÀTˆMÙFJ¨ÖB 1°·±¸SÕ0AšQÓBÐPRˆMÙ/<˜=¨Ò+À$ˆLñ Ù à! TÑ)Ø˜]Ñ+¨u°]Ñ/CÒCð ÙØ EÑ)¨T°,Ñ-?À5ÈÑCVÒ-VàÜ)¨$°ÀLÔQ‰HØ˜ÒØˆF�3ŠKð5 ð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#   