U
    1ÜŸjHg  ã                
   @  sÂ  U d dl mZ d dlZd dlmZ ddlmZmZmZm	Z	m
Z
mZ dZer~d dlmZ d dlmZmZmZ dd	lmZmZmZ e ¡ Zd
ed< e ¡ Zd
ed< edd„ edƒD ƒƒeedƒƒB Zd
ed< eedƒ Zd
ed< eedƒ Z d
ed< eZ!d
ed< e Z"d
ed< eZ#d
ed< edƒZ$d
ed< e$edƒB Z%d
ed< edƒZ&d
ed< e&edƒB Z'd
ed < ed!ƒZ(d
ed"< ed#ddd$d%d&d'd(d)œƒZ)d
ed*< G d+d,„ d,ƒZ*G d-d.„ d.e+ƒZ,e-d/œd0d1d2d3œd4d5„Z.e-d/œd6d1d2d7œd8d9„Z/G d:d;„ d;ƒZ0G d<d=„ d=ƒZ1G d>d?„ d?ƒZ2d6d@dAd@dBœdCdD„Z3d6d@d6dEdFd@dGœdHdI„Z4d6d@d@dJœdKdL„Z5d6d@d@dJœdMdN„Z6d6d@d?dOdPœdQdR„Z7d6d@d?dOdPœdSdT„Z8d6d@d?dUd1d@dVœdWdX„Z9d6d@d1dYdZd[œd\d]„Z:d6d@dOdJœd^d_„Z;d6d@d`dJœdadb„Z<d6d@d`dJœdcdd„Z=d6d@d1dYded[œdfdg„Z>d6d@d1dYdhd[œdidj„Z?ddkœd6d@dFd`dlœdmdn„Z@d6d@d`dJœdodp„ZAd6d@dYd`dqœdrds„ZBd6d@d`dJœdtdu„ZCd6d@dFd`dvœdwdx„ZDd6d@dFd`dlœdydz„ZEd6d@d1dYd{d[œd|d}„ZFdYdFd~œdd€„ZGd1d1d�œd‚dƒ„ZHdS )„é    )ÚannotationsN)ÚMappingProxyTypeé   )ÚRE_DATETIMEÚRE_LOCALTIMEÚ	RE_NUMBERÚmatch_to_datetimeÚmatch_to_localtimeÚmatch_to_numberF)ÚIterable)ÚIOÚAnyÚFinal)ÚKeyÚ
ParseFloatÚPosr   ÚMAX_INLINE_NESTINGÚMAX_KEY_PARTSc                 c  s   | ]}t |ƒV  qd S ©N)Úchr©Ú.0Úi© r   ú1/tmp/pip-unpacked-wheel-bdaog1uh/tomli/_parser.pyÚ	<genexpr>,   s     r   é    é   Ú
ASCII_CTRLú	ÚILLEGAL_BASIC_STR_CHARSz	
Ú!ILLEGAL_MULTILINE_BASIC_STR_CHARSÚILLEGAL_LITERAL_STR_CHARSÚ#ILLEGAL_MULTILINE_LITERAL_STR_CHARSÚILLEGAL_COMMENT_CHARSz 	ÚTOML_WSÚ
ÚTOML_WS_AND_NEWLINEz@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_ÚBARE_KEY_CHARSz"'ÚKEY_INITIAL_CHARSZabcdefABCDEF0123456789ÚHEXDIGIT_CHARSúúúúú"ú\)z\bz\tz\nz\fz\rz\ez\"z\\ÚBASIC_STR_ESCAPE_REPLACEMENTSc                   @  s   e Zd ZdZdS )ÚDEPRECATED_DEFAULTzjSentinel to be used as default arg during deprecation
    period of TOMLDecodeError's free-form arguments.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r2   N   s   r2   c                   @  s,   e Zd ZdZeeefdddddœdd„ZdS )	ÚTOMLDecodeErrora:  An error raised if a document is not valid TOML.

    Adds the following attributes to ValueError:
    msg: The unformatted error message
    doc: The TOML document being parsed
    pos: The index of doc where parsing failed
    lineno: The line corresponding to pos
    colno: The column corresponding to pos
    zstr | type[DEPRECATED_DEFAULT]zPos | type[DEPRECATED_DEFAULT]r   )ÚmsgÚdocÚposÚargsc           
      G  s  |s"t |tƒr"t |tƒr"t |tƒs„dd l}|jdtdd� |tk	rL|f|˜}|tk	r^|f|˜}|tk	rp|f|˜}tj| f|žŽ  d S | 	dd|¡d }|dkr¨|d }n|| 
dd|¡ }|t|ƒkrÌd}nd|› d	|› �}|› d
|› d�}	t | |	¡ || _|| _|| _|| _|| _d S )Nr   z{Free-form arguments for TOMLDecodeError are deprecated. Please set 'msg' (str), 'doc' (str) and 'pos' (int) arguments only.é   )Ú
stacklevelr&   r   zend of documentzline z	, column z (at ú))Ú
isinstanceÚstrÚintÚwarningsÚwarnÚDeprecationWarningr2   Ú
ValueErrorÚ__init__ÚcountÚrindexÚlenr8   r9   r:   ÚlinenoÚcolno)
Úselfr8   r9   r:   r;   rB   rJ   rK   Z
coord_reprÚerrmsgr   r   r   rF   ^   sH    ÿþýüü



zTOMLDecodeError.__init__N)r3   r4   r5   r6   r2   rF   r   r   r   r   r7   S   s
   ür7   ©Úparse_floatz	IO[bytes]r   údict[str, Any])Ú__fprO   Úreturnc                C  s@   |   ¡ }z| ¡ }W n tk
r2   tdƒd‚Y nX t||d�S )z%Parse TOML from a binary file object.zEFile must be opened in binary mode, e.g. use `open('foo.toml', 'rb')`NrN   )ÚreadÚdecodeÚAttributeErrorÚ	TypeErrorÚloads)rQ   rO   ÚbÚsr   r   r   Úload�   s    ÿþrZ   r@   )Ú__srO   rR   c             	   C  s®  z|   dd¡}W n0 ttfk
r@   tdt| ƒj› d�ƒd‚Y nX d}tƒ }d}t|ƒ}t||tƒ}z|| }W n t	k
rŠ   Y �q¦Y nX |dkrž|d7 }qX|t
krÄt|||||ƒ}t||tƒ}nŽ|d	k�r<z||d  }W n t	k
rö   d}Y nX |j ¡  |d	k�rt|||ƒ\}}nt|||ƒ\}}t||tƒ}n|d
k�rRtd||ƒ‚t||ƒ}z|| }W n t	k
�r„   Y �q¦Y nX |dk�rœtd||ƒ‚|d7 }qX|jjS )zParse TOML from a string.z
r&   zExpected str object, not 'ú'Nr   r   r   ú[ú#zInvalid statementz5Expected newline or end of document after a statement)ÚreplacerU   rV   Útyper5   ÚOutputÚmake_safe_parse_floatÚ
skip_charsr%   Ú
IndexErrorr)   Úkey_value_ruleÚflagsÚfinalize_pendingÚcreate_list_ruleÚcreate_dict_ruler7   Úskip_commentÚdataÚdict)r[   rO   Úsrcr:   ÚoutÚheaderÚcharÚsecond_charr   r   r   rW   œ   s`    ÿþ







  ÿ
rW   c                   @  sŽ   e Zd ZU dZdZded< dZded< ddœd	d
„Zddddœdd„Zddœdd„Z	dddœdd„Z
dddddœdd„Zddddœdd„ZdS )ÚFlagsz)Flags that map to parsed keys/namespaces.r   r   ÚFROZENr   ÚEXPLICIT_NESTÚNone©rR   c                 C  s   i | _ tƒ | _d S r   )Ú_flagsÚsetÚ_pending_flags©rL   r   r   r   rF   ì   s    zFlags.__init__r   rA   )ÚkeyÚflagrR   c                 C  s   | j  ||f¡ d S r   )ry   Úadd©rL   r{   r|   r   r   r   Úadd_pendingð   s    zFlags.add_pendingc                 C  s.   | j D ]\}}| j||dd� q| j  ¡  d S )NF©Ú	recursive)ry   rx   Úclearr~   r   r   r   rg   ó   s    zFlags.finalize_pending©r{   rR   c                 C  sF   | j }|d d… D ]}||kr$ d S || d }q| |d d ¡ d S )NéÿÿÿÿÚnested)rw   Úpop)rL   r{   ÚcontÚkr   r   r   Ú	unset_allø   s    zFlags.unset_allÚbool)r{   r|   r�   rR   c                C  sˆ   | j }|d d… |d  }}|D ],}||kr@tƒ tƒ i dœ||< || d }q ||krjtƒ tƒ i dœ||< || |rxdnd  |¡ d S )Nr„   )rf   Úrecursive_flagsr…   r…   r‹   rf   )rw   rx   r}   )rL   r{   r|   r�   r‡   Ú
key_parentÚkey_stemrˆ   r   r   r   rx      s    z	Flags.setc                 C  s„   |sdS | j }|d d… D ]4}||kr, dS || }||d krF dS |d }q|d }||kr€|| }||d kp~||d kS dS )NFr„   r‹   Tr…   rf   )rw   )rL   r{   r|   r‡   rˆ   Z
inner_contr�   r   r   r   Úis_  s    
z	Flags.is_N)r3   r4   r5   r6   rs   Ú__annotations__rt   rF   r   rg   r‰   rx   rŽ   r   r   r   r   rr   ã   s   
rr   c                   @  sB   e Zd Zddœdd„Zddœddd	d
œdd„Zdddœdd„ZdS )Ú
NestedDictru   rv   c                 C  s
   i | _ d S r   )rl   rz   r   r   r   rF     s    zNestedDict.__init__T©Úaccess_listsr   rŠ   rP   )r{   r’   rR   c                C  sT   | j }|D ]D}||kri ||< || }|r<t|tƒr<|d }t|t ƒs
tdƒ‚q
|S )Nr„   z There is no nest behind this key)rl   r?   ÚlistÚKeyError)rL   r{   r’   r‡   rˆ   r   r   r   Úget_or_create_nest"  s    

zNestedDict.get_or_create_nestrƒ   c                 C  sV   |   |d d… ¡}|d }||krH|| }t|tƒs<tdƒ‚| i ¡ n
i g||< d S )Nr„   z/An object other than list found behind this key)r•   r?   r“   r”   Úappend)rL   r{   r‡   Zlast_keyÚlist_r   r   r   Úappend_nest_to_list3  s    
zNestedDict.append_nest_to_listN)r3   r4   r5   rF   r•   r˜   r   r   r   r   r�     s   ür�   c                   @  s   e Zd Zddœdd„ZdS )ra   ru   rv   c                 C  s   t ƒ | _tƒ | _d S r   )r�   rk   rr   rf   rz   r   r   r   rF   @  s    zOutput.__init__N)r3   r4   r5   rF   r   r   r   r   ra   ?  s   ra   r   zIterable[str])rm   r:   ÚcharsrR   c                 C  s4   z| | |kr|d7 }qW n t k
r.   Y nX |S )Nr   )rd   )rm   r:   r™   r   r   r   rc   E  s    rc   zfrozenset[str]rŠ   )rm   r:   ÚexpectÚerror_onÚerror_on_eofrR   c                C  sˆ   z|   ||¡}W n4 tk
rD   t| ƒ}|r@td|›�| |ƒd ‚Y nX | | ||… ¡s„| | |krn|d7 }qXtd| | ›�| |ƒ‚|S )Nz	Expected r   zFound invalid character )ÚindexrE   rI   r7   Ú
isdisjoint)rm   r:   rš   r›   rœ   Únew_posr   r   r   Ú
skip_untilN  s    
r    )rm   r:   rR   c                 C  sH   z| | }W n t k
r$   d }Y nX |dkrDt| |d dtdd�S |S )Nr^   r   r&   F©r›   rœ   )rd   r    r$   )rm   r:   rp   r   r   r   rj   d  s    
    ÿrj   c                 C  s,   |}t | |tƒ}t| |ƒ}||kr |S q d S r   )rc   r'   rj   )rm   r:   Zpos_before_skipr   r   r   Úskip_comments_and_array_wsp  s
    
r¢   ztuple[Pos, Key])rm   r:   rn   rR   c                 C  sÂ   |d7 }t | |tƒ}t| |ƒ\}}|j |tj¡sB|j |tj¡rVtd|› d�| |ƒ‚|jj	|tjdd� z|j
 |¡ W n" tk
rœ   td| |ƒd ‚Y nX |  d|¡s¶td| |ƒ‚|d |fS )	Nr   zCannot declare z twiceFr€   úCannot overwrite a valueú]z.Expected ']' at the end of a table declaration)rc   r%   Ú	parse_keyrf   rŽ   rr   rt   rs   r7   rx   rk   r•   r”   Ú
startswith©rm   r:   rn   r{   r   r   r   ri   y  s"       ÿri   c                 C  s¼   |d7 }t | |tƒ}t| |ƒ\}}|j |tj¡rDtd|› �| |ƒ‚|j |¡ |jj	|tj
dd� z|j |¡ W n" tk
r–   td| |ƒd ‚Y nX |  d|¡s°td| |ƒ‚|d |fS )Nr<   ú"Cannot mutate immutable namespace Fr€   r£   z]]z0Expected ']]' at the end of an array declaration)rc   r%   r¥   rf   rŽ   rr   rs   r7   r‰   rx   rt   rk   r˜   r”   r¦   r§   r   r   r   rh   �  s$      ÿrh   r   )rm   r:   rn   ro   rO   rR   c                   s,  t | ||dd�\}‰}ˆd d… ˆd  }}ˆ | }‡ ‡fdd„tdtˆƒƒD ƒ}	|	D ]6}
|j |
tj¡r|td|
› �| |ƒ‚|j |
tj¡ qV|j |tj	¡r°td|› �| |ƒ‚z|j
 |¡}W n" tk
râ   td	| |ƒd ‚Y nX ||krøtd	| |ƒ‚t|ttfƒ�r |jjˆ ˆ tj	d
d� |||< |S )Nr   )Únest_lvlr„   c                 3  s   | ]}ˆ ˆd |…  V  qd S r   r   r   ©ro   r{   r   r   r   «  s     z!key_value_rule.<locals>.<genexpr>r   zCannot redefine namespace r¨   r£   Tr€   )Úparse_key_value_pairÚrangerI   rf   rŽ   rr   rt   r7   r   rs   rk   r•   r”   r?   rl   r“   rx   )rm   r:   rn   ro   rO   ÚvaluerŒ   r�   Zabs_key_parentZrelative_path_cont_keysZcont_keyÚnestr   rª   r   re   ¤  s0      ÿre   rA   ztuple[Pos, Key, Any])rm   r:   rO   r©   rR   c                 C  sx   t | |ƒ\}}z| | }W n tk
r2   d }Y nX |dkrHtd| |ƒ‚|d7 }t| |tƒ}t| |||ƒ\}}|||fS )Nú=z,Expected '=' after a key in a key/value pairr   )r¥   rd   r7   rc   r%   Úparse_value)rm   r:   rO   r©   r{   rp   r­   r   r   r   r«   Æ  s    
r«   c                 C  s°   t | |ƒ\}}|f}t| |tƒ}z| | }W n tk
rD   d }Y nX |dkrV||fS |d7 }t| |tƒ}t | |ƒ\}}||f7 }t|ƒtkržtdt› d�ƒ‚t| |tƒ}q d S )NÚ.r   z#TOML key has more than the allowed z parts)Úparse_key_partrc   r%   rd   rI   r   ÚRecursionError)rm   r:   Zkey_partr{   rp   r   r   r   r¥   Ö  s$    


ÿr¥   ztuple[Pos, str]c                 C  s‚   z| | }W n t k
r$   d }Y nX |tkrN|}t| |tƒ}|| ||… fS |dkr`t| |ƒS |dkrrt| |ƒS td| |ƒ‚d S )Nr\   r/   z(Invalid initial character for a key part)rd   r(   rc   Úparse_literal_strÚparse_one_line_basic_strr7   )rm   r:   rp   Ú	start_posr   r   r   r²   ì  s    


r²   c                 C  s   |d7 }t | |dd�S )Nr   F©Ú	multiline)Úparse_basic_str©rm   r:   r   r   r   rµ   ü  s    rµ   ztuple[Pos, list[Any]]c                 C  s¼   |d7 }g }t | |ƒ}|  d|¡r.|d |fS t| |||ƒ\}}| |¡ t | |ƒ}| ||d … }|dkrx|d |fS |dkrŒtd| |ƒ‚|d7 }t | |ƒ}|  d|¡r.|d |fS q.d S )Nr   r¤   ú,zUnclosed array)r¢   r¦   r°   r–   r7   )rm   r:   rO   r©   ÚarrayÚvalÚcr   r   r   Úparse_array  s"    



r¿   ztuple[Pos, dict[str, Any]]c                 C  sv  |d7 }t ƒ }tƒ }t| |ƒ}|  d|¡r8|d |jfS t| |||ƒ\}}}|d d… |d  }}	| |tj¡r‚td|› �| |ƒ‚z|j	|dd�}
W n" t
k
r¶   td| |ƒd ‚Y nX |	|
krÒtd|	›�| |ƒ‚||
|	< t| |ƒ}| ||d … }|dk�r|d |jfS |d	k�r"td
| |ƒ‚|d7 }t| |ƒ}|  d|¡�rP|d |jfS t|ttfƒr8|j|tjdd� q8d S )Nr   Ú}r„   r¨   Fr‘   r£   zDuplicate inline table key r»   zUnclosed inline tableTr€   )r�   rr   r¢   r¦   rl   r«   rŽ   rs   r7   r•   r”   r?   r“   rx   )rm   r:   rO   r©   Znested_dictrf   r{   r­   rŒ   r�   r®   r¾   r   r   r   Úparse_inline_table  s:    




rÁ   r·   )rm   r:   r¸   rR   c                C  s  | ||d … }|d7 }|r’|dkr’|dkr~t | |tƒ}z| | }W n tk
r`   |df Y S X |dkrvtd| |ƒ‚|d7 }t | |tƒ}|dfS |dkr¦t| |dƒS |d	krºt| |d
ƒS |dkrÎt| |dƒS z|t| fW S  tk
�r    td| |ƒd ‚Y nX d S )Nr<   >   ú\
ú\ ú\	rÂ   Ú r&   zUnescaped '\' in a stringr   z\xz\ué   z\Ué   )rc   r%   rd   r7   r'   Úparse_hex_charr1   r”   )rm   r:   r¸   Z	escape_idrp   r   r   r   Úparse_basic_str_escape?  s0    rÉ   c                 C  s   t | |dd�S )NTr·   )rÉ   rº   r   r   r   Ú parse_basic_str_escape_multiline^  s    rÊ   )rm   r:   Úhex_lenrR   c                 C  sd   | ||| … }t |ƒ|ks&t |¡s2td| |ƒ‚||7 }t|dƒ}t|ƒsXtd| |ƒ‚|t|ƒfS )NzInvalid hex valueé   z/Escaped character is not a Unicode scalar value)rI   r*   Ú
issupersetr7   rA   Úis_unicode_scalar_valuer   )rm   r:   rË   Úhex_strZhex_intr   r   r   rÈ   b  s    
  ÿrÈ   c                 C  s2   |d7 }|}t | |dtdd�}|d | ||… fS )Nr   r\   Tr¡   )r    r"   )rm   r:   r¶   r   r   r   r´   o  s        ÿr´   )rm   r:   ÚliteralrR   c                C  s®   |d7 }|   d|¡r|d7 }|rLd}t| |dtdd�}| ||… }|d }nd}t| |dd	�\}}|   ||¡sv||fS |d7 }|   ||¡s–||| fS |d7 }|||d
  fS )Né   r&   r   r\   ú'''Tr¡   r/   r·   r<   )r¦   r    r#   r¹   )rm   r:   rÐ   ÚdelimZend_posÚresultr   r   r   Úparse_multiline_strx  s.    û
rÕ   c          	      C  sü   |rt }t}nt}t}d}|}z| | }W n" tk
rL   td| |ƒd ‚Y nX |dkr |sr|d || ||…  fS |  d|¡r–|d || ||…  fS |d7 }q|dkrÔ|| ||… 7 }|| |ƒ\}}||7 }|}q||krîtd|›�| |ƒ‚|d7 }qd S )	NrÅ   zUnterminated stringr/   r   ú"""rÑ   r0   zIllegal character )r!   rÊ   r    rÉ   rd   r7   r¦   )	rm   r:   r¸   r›   Zparse_escapesrÔ   r¶   rp   Zparsed_escaper   r   r   r¹   —  s6    r¹   ztuple[Pos, Any]c              
   C  s  |t krtdt › d�ƒ‚z| | }W n tk
r<   d }Y nX |dkrj|  d|¡r`t| |dd�S t| |ƒS |dkr–|  d|¡rŒt| |d	d�S t| |ƒS |d
kr¶|  d|¡r¶|d d	fS |dkrÖ|  d|¡rÖ|d dfS |dkrðt| |||d ƒS |dk�rt| |||d ƒS t	 
| |¡}|�rjzt|ƒ}W n2 tk
�r\ } ztd| |ƒ|‚W 5 d }~X Y nX | ¡ |fS t 
| |¡}|�rŒ| ¡ t|ƒfS t 
| |¡}	|	�r°|	 ¡ t|	|ƒfS | ||d … }
|
dk�rÚ|d ||
ƒfS | ||d … }|dk�r|d ||ƒfS td| |ƒ‚d S )Nz;TOML inline arrays/tables are nested more than the allowed z levelsr/   rÖ   F)rÐ   r\   rÒ   TÚtÚtruerÆ   ÚfÚfalseé   r]   r   Ú{zInvalid date or datetimerÑ   >   ÚinfÚnan>   ú+infú+nanú-nanú-infzInvalid value)r   r³   rd   r¦   rÕ   rµ   r´   r¿   rÁ   r   Úmatchr   rE   r7   Úendr   r	   r   r
   )rm   r:   rO   r©   rp   Zdatetime_matchZdatetime_objÚeZlocaltime_matchZnumber_matchZfirst_threeZ
first_fourr   r   r   r°   ·  s\    
ÿ



 

r°   )Ú	codepointrR   c                 C  s0   d|   kodkn  p.d|   ko*dkS   S )Nr   iÿ×  i à  iÿÿ r   )ræ   r   r   r   rÎ     s    rÎ   )rO   rR   c                   s$   ˆ t krt S dddœ‡ fdd„}|S )a%  A decorator to make `parse_float` safe.

    `parse_float` must not return dicts or lists, because these types
    would be mixed with parsed TOML tables and arrays, thus confusing
    the parser. The returned decorated callable raises `ValueError`
    instead of returning illegal types.
    r@   r   )Ú	float_strrR   c                   s"   ˆ | ƒ}t |ttfƒrtdƒ‚|S )Nz*parse_float must not return dicts or lists)r?   rl   r“   rE   )rç   Zfloat_valuerN   r   r   Úsafe_parse_float  s    z/make_safe_parse_float.<locals>.safe_parse_float)Úfloat)rO   rè   r   rN   r   rb     s    	rb   )IÚ
__future__r   ÚsysÚtypesr   Ú_rer   r   r   r   r	   r
   ÚTYPE_CHECKINGÚcollections.abcr   Útypingr   r   r   Ú_typesr   r   r   Úgetrecursionlimitr   r�   r   Ú	frozensetr¬   r   r   r    r!   r"   r#   r$   r%   r'   r(   r)   r*   r1   r2   rE   r7   ré   rZ   rW   rr   r�   ra   rc   r    rj   r¢   ri   rh   re   r«   r¥   r²   rµ   r¿   rÁ   rÉ   rÊ   rÈ   r´   rÕ   r¹   r°   rÎ   rb   r   r   r   r   Ú<module>   s‚     	*ÿøÿ=G:"		"%ÿ	 L