U
     T‚g÷c  ã                	   @  sÌ  U d dl mZ 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 d dlZddlmZmZmZmZmZmZ ddlmZmZmZ 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ej'ej( d ƒZ)d	ed< e)edƒB Z*d	ed< eej+ƒZ,d	ed< ed ddd!d"d#d$d%œƒZ-d	ed&< G d'd(„ d(ƒZ.G d)d*„ d*e/ƒZ0e1d+œd,d-d.d/œd0d1„Z2e1d+œd2d-d.d3œd4d5„Z3G d6d7„ d7ƒZ4G d8d9„ d9ƒZ5G d:d;„ d;eƒZ6d2d<d=d<d>œd?d@„Z7d2d<d2dAdBd<dCœdDdE„Z8d2d<d<dFœdGdH„Z9d2d<d<dFœdIdJ„Z:d2d<d;dKdLœdMdN„Z;d2d<d;dKdLœdOdP„Z<d2d<d;dQd-d<dRœdSdT„Z=d2d<d-dUdVdWœdXdY„Z>d2d<dKdFœdZd[„Z?d2d<d\dFœd]d^„Z@d2d<d\dFœd_d`„ZAd2d<d-dUdadWœdbdc„ZBd2d<d-dUdddWœdedf„ZCdgdhœd2d<dBd\diœdjdk„ZDd2d<d\dFœdldm„ZEd2d<dUd\dnœdodp„ZFd2d<d\dFœdqdr„ZGd2d<dBd\dsœdtdu„ZHd2d<dBd\diœdvdw„ZId2d<d-dUdxdWœdydz„ZJdUdBd{œd|d}„ZKd-d-d~œdd€„ZLdS )�é    )Úannotations)ÚIterableN)ÚMappingProxyType)ÚIOÚAnyÚFinalÚ
NamedTupleé   )ÚRE_DATETIMEÚRE_LOCALTIMEÚ	RE_NUMBERÚmatch_to_datetimeÚmatch_to_localtimeÚmatch_to_number)ÚKeyÚ
ParseFloatÚPosr   ÚMAX_INLINE_NESTINGc                 c  s   | ]}t |ƒV  qd S ©N)Úchr©Ú.0Úi© r   ú1/tmp/pip-unpacked-wheel-cxctmdbi/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-_ÚBARE_KEY_CHARSz"'ÚKEY_INITIAL_CHARSÚHEXDIGIT_CHARSúúúú"ú\)z\bz\tz\nz\fz\rz\"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   r1   B   s   r1   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|tjdtdd� |tk	rD|f|˜}|tk	rV|f|˜}|tk	rh|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 )Nz{Free-form arguments for TOMLDecodeError are deprecated. Please set 'msg' (str), 'doc' (str) and 'pos' (int) arguments only.é   )Ú
stacklevelr&   r   r	   zend of documentzline z	, column z (at ú))Ú
isinstanceÚstrÚintÚwarningsÚwarnÚDeprecationWarningr1   Ú
ValueErrorÚ__init__ÚcountÚrindexÚlenr7   r8   r9   ÚlinenoÚcolno)	Úselfr7   r8   r9   r:   rI   rJ   Z
coord_reprÚerrmsgr   r   r   rE   R   sF    ÿþýüü



zTOMLDecodeError.__init__N)r2   r3   r4   r5   r1   rE   r   r   r   r   r6   G   s
   ür6   ©Úparse_floatz	IO[bytes]r   zdict[str, Any])Ú__fprN   Ú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')`NrM   )ÚreadÚdecodeÚAttributeErrorÚ	TypeErrorÚloads)rO   rN   ÚbÚsr   r   r   Úload‚   s    ÿþrX   r?   )Ú__srN   rP   c             	   C  s¶  z|   dd¡}W n0 ttfk
r@   tdt| ƒj› d�ƒd‚Y nX d}ttƒ tƒ ƒ}d}t|ƒ}t	||t
ƒ}z|| }W n tk
r’   Y �q®Y nX |dkr¦|d7 }q`|tkrÌt|||||ƒ}t	||t
ƒ}nŽ|d	k�rDz||d  }W n tk
rþ   d}Y nX |j ¡  |d	k�r&t|||ƒ\}}nt|||ƒ\}}t	||t
ƒ}n|d
k�rZtd||ƒ‚t||ƒ}z|| }W n tk
�rŒ   Y �q®Y nX |dk�r¤td||ƒ‚|d7 }q`|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)ÚreplacerS   rT   Útyper4   ÚOutputÚ
NestedDictÚFlagsÚmake_safe_parse_floatÚ
skip_charsr%   Ú
IndexErrorr)   Úkey_value_ruleÚflagsÚfinalize_pendingÚcreate_list_ruleÚcreate_dict_ruler6   Úskip_commentÚdataÚdict)rY   rN   Úsrcr9   ÚoutÚheaderÚcharÚsecond_charr   r   r   rU   Ž   s`    ÿþ







  ÿ
rU   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 )ra   z)Flags that map to parsed keys/namespaces.r   r   ÚFROZENr	   ÚEXPLICIT_NESTÚNone©rP   c                 C  s   i | _ tƒ | _d S r   )Ú_flagsÚsetÚ_pending_flags©rK   r   r   r   rE   Þ   s    zFlags.__init__r   r@   )ÚkeyÚflagrP   c                 C  s   | j  ||f¡ d S r   )rx   Úadd©rK   rz   r{   r   r   r   Úadd_pendingâ   s    zFlags.add_pendingc                 C  s.   | j D ]\}}| j||dd� q| j  ¡  d S )NF©Ú	recursive)rx   rw   Úclearr}   r   r   r   rg   å   s    zFlags.finalize_pending©rz   rP   c                 C  sF   | j }|d d… D ]}||kr$ d S || d }q| |d d ¡ d S )NéÿÿÿÿÚnested)rv   Úpop)rK   rz   ÚcontÚkr   r   r   Ú	unset_allê   s    zFlags.unset_allÚbool)rz   r{   r€   rP   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   )rv   rw   r|   )rK   rz   r{   r€   r†   Ú
key_parentÚkey_stemr‡   r   r   r   rw   ò   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   )rv   )rK   rz   r{   r†   r‡   Z
inner_contrŒ   r   r   r   Úis_ý   s    
z	Flags.is_N)r2   r3   r4   r5   rr   Ú__annotations__rs   rE   r~   rg   rˆ   rw   r�   r   r   r   r   ra   Õ   s   
ra   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 )r`   rt   ru   c                 C  s
   i | _ d S r   )rl   ry   r   r   r   rE     s    zNestedDict.__init__T©Úaccess_listsr   r‰   rl   )rz   r�   rP   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)rK   rz   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)rK   rz   r†   Zlast_keyÚlist_r   r   r   Úappend_nest_to_list%  s    
zNestedDict.append_nest_to_listN)r2   r3   r4   rE   r“   r–   r   r   r   r   r`     s   ür`   c                   @  s   e Zd ZU ded< ded< dS )r_   r`   rk   ra   rf   N)r2   r3   r4   rŽ   r   r   r   r   r_   1  s   
r_   r   zIterable[str])rm   r9   ÚcharsrP   c                 C  s4   z| | |kr|d7 }qW n t k
r.   Y nX |S )Nr	   )rd   )rm   r9   r—   r   r   r   rc   6  s    rc   zfrozenset[str]r‰   )rm   r9   ÚexpectÚerror_onÚerror_on_eofrP   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 )ÚindexrD   rH   r6   Ú
isdisjoint)rm   r9   r˜   r™   rš   Únew_posr   r   r   Ú
skip_until?  s    
rž   )rm   r9   rP   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   r9   rp   r   r   r   rj   U  s    
    ÿrj   c                 C  s,   |}t | |tƒ}t| |ƒ}||kr |S q d S r   )rc   r'   rj   )rm   r9   Zpos_before_skipr   r   r   Úskip_comments_and_array_wsa  s
    
r    ztuple[Pos, Key])rm   r9   rn   rP   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�   ra   rs   rr   r6   rw   rk   r“   r’   Ú
startswith©rm   r9   rn   rz   r   r   r   ri   j  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�   ra   rr   r6   rˆ   rw   rs   rk   r–   r’   r¤   r¥   r   r   r   rh   ~  s$      ÿrh   r   )rm   r9   rn   ro   rN   rP   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   rz   r   r   r   œ  s     z!key_value_rule.<locals>.<genexpr>r	   zCannot redefine namespace r¦   r¡   Tr   )Úparse_key_value_pairÚrangerH   rf   r�   ra   rs   r6   r~   rr   rk   r“   r’   r>   rl   r‘   rw   )rm   r9   rn   ro   rN   Úvaluer‹   rŒ   Zabs_key_parentZrelative_path_cont_keysZcont_keyÚnestr   r¨   r   re   •  s0      ÿre   r@   ztuple[Pos, Key, Any])rm   r9   rN   r§   rP   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   r6   rc   r%   Úparse_value)rm   r9   rN   r§   rz   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ƒ}q d S )NÚ.r	   )Úparse_key_partrc   r%   rd   )rm   r9   Zkey_partrz   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 )NrZ   r.   z(Invalid initial character for a key part)rd   r(   rc   Úparse_literal_strÚparse_one_line_basic_strr6   )rm   r9   rp   Ú	start_posr   r   r   r°   Ù  s    


r°   c                 C  s   |d7 }t | |dd�S )Nr	   F©Ú	multiline)Úparse_basic_str©rm   r9   r   r   r   r²   é  s    r²   ztuple[Pos, list]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”   r6   )rm   r9   rN   r§   ÚarrayÚvalÚcr   r   r   Úparse_arrayî  s"    



r¼   ztuple[Pos, dict]c                 C  sb  |d7 }t ƒ }tƒ }t| |tƒ}|  d|¡r:|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| |tƒ}| ||d … }|dk�r|d |jfS |d	k�r&t	d
| |ƒ‚t|ttfƒ�rH|j|tjdd� |d7 }t| |tƒ}q:d S )Nr	   Ú}rƒ   r¦   Fr�   r¡   zDuplicate inline table key r¸   zUnclosed inline tableTr   )r`   ra   rc   r%   r¤   rl   r©   r�   rr   r6   r“   r’   r>   r‘   rw   )rm   r9   rN   r§   Znested_dictrf   rz   r«   r‹   rŒ   r¬   r»   r   r   r   Úparse_inline_table  s6    

r¾   Fr´   )rm   r9   rµ   rP   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 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\ué   z\Ué   )rc   r%   rd   r6   r'   Úparse_hex_charr0   r’   )rm   r9   rµ   Z	escape_idrp   r   r   r   Úparse_basic_str_escape*  s,    rÆ   c                 C  s   t | |dd�S )NTr´   )rÆ   r·   r   r   r   Ú parse_basic_str_escape_multilineG  s    rÇ   )rm   r9   Úhex_lenrP   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)rH   r*   Ú
issupersetr6   r@   Úis_unicode_scalar_valuer   )rm   r9   rÈ   Úhex_strZhex_intr   r   r   rÅ   K  s    
  ÿrÅ   c                 C  s2   |d7 }|}t | |dtdd�}|d | ||… fS )Nr	   rZ   TrŸ   )rž   r"   )rm   r9   r³   r   r   r   r±   X  s        ÿr±   )rm   r9   ÚliteralrP   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	   rZ   ú'''TrŸ   r.   r´   r;   )r¤   rž   r#   r¶   )rm   r9   rÍ   ÚdelimZend_posÚresultr   r   r   Úparse_multiline_stra  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Î   r/   zIllegal character )r!   rÇ   r    rÆ   rd   r6   r¤   )	rm   r9   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Í   rZ   rÏ   TÚtÚtruerÃ   ÚfÚfalseé   r[   r	   Ú{zInvalid date or datetimerÎ   >   ÚnanÚinf>   ú-infú+infú+nanú-nanzInvalid value)r   ÚRecursionErrorrd   r¤   rÒ   r²   r±   r¼   r¾   r
   Úmatchr   rD   r6   Úendr   r   r   r   )rm   r9   rN   r§   rp   Zdatetime_matchZdatetime_objÚeZlocaltime_matchZnumber_matchZfirst_threeZ
first_fourr   r   r   r®      s\    
ÿ



 

r®   )Ú	codepointrP   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Ë   )rN   rP   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_strrP   c                   s"   ˆ | ƒ}t |ttfƒrtdƒ‚|S )Nz*parse_float must not return dicts or lists)r>   rl   r‘   rD   )rå   Zfloat_valuerM   r   r   Úsafe_parse_floatü  s    z/make_safe_parse_float.<locals>.safe_parse_float)Úfloat)rN   ræ   r   rM   r   rb   ð  s    	rb   )MÚ
__future__r   Úcollections.abcr   ÚstringÚsysÚtypesr   Útypingr   r   r   r   rA   Ú_rer
   r   r   r   r   r   Ú_typesr   r   r   Úgetrecursionlimitr   rŽ   Ú	frozensetrª   r   r   r    r!   r"   r#   r$   r%   r'   Úascii_lettersÚdigitsr(   r)   Ú	hexdigitsr*   r0   r1   rD   r6   rç   rX   rU   ra   r`   r_   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>   sz     *ùÿ;G:"		"#ÿ	 L