U
    42ife                  
   @  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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.d/d0d1d2d3d4Z-e,d.d5d0d1d6d7d8Z.G d9d: d:Z/G d;d< d<Z0G d=d> d>Z1d5d?d@d?dAdBdCZ2d5d?d5dDdEd?dFdGdHZ3d5d?d?dIdJdKZ4d5d?d?dIdLdMZ5d5d?d>dNdOdPdQZ6d5d?d>dNdOdRdSZ7d5d?d>dTd0d?dUdVdWZ8d5d?d0dXdYdZd[d\Z9d5d?dNdId]d^Z:d5d?d_dId`daZ;d5d?d_dIdbdcZ<d5d?d0dXdddZdedfZ=d5d?d0dXdgdZdhdiZ>ddjd5d?dEd_dkdldmZ?d5d?d_dIdndoZ@d5d?dXd_dpdqdrZAd5d?d_dIdsdtZBd5d?dEd_dudvdwZCd5d?dEd_dkdxdyZDd5d?d0dXdzdZd{d|ZEdXdEd}d~dZFd0d0dddZGd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_NESTINGc                 c  s   | ]}t |V  qd S N)chr.0i r   1/tmp/pip-unpacked-wheel-1lrsd9l9/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   r1   G   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sd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rd}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DeprecationWarningr1   
ValueError__init__countrindexlenr7   r8   r9   linenocolno)
selfr7   r8   r9   r:   rA   rI   rJ   Z
coord_reprerrmsgr   r   r   rE   W   sH    



zTOMLDecodeError.__init__N)r2   r3   r4   r5   r1   rE   r   r   r   r   r6   L   s
   r6   parse_floatz	IO[bytes]r   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)rP   rN   bsr   r   r   load   s    rY   r?   )__srN   rQ   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 qY nX |dkr|d7 }qX|t
krt|||||}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 qY nX |dkrt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)replacerT   rU   typer4   Outputmake_safe_parse_float
skip_charsr$   
IndexErrorr(   key_value_ruleflagsfinalize_pendingcreate_list_rulecreate_dict_ruler6   skip_commentdatadict)rZ   rN   srcr9   outheadercharsecond_charr   r   r   rV      s`    







  
rV   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rQ   c                 C  s   i | _ t | _d S r   )_flagsset_pending_flagsrK   r   r   r   rE      s    zFlags.__init__r   r@   )keyflagrQ   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   rf      s    zFlags.finalize_pendingrz   rQ   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   rQ   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   )re   recursive_flagsr   r   r   re   )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   re   )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~   rf   r   rw   r   r   r   r   r   rq      s   
rq   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 )
NestedDictrt   ru   c                 C  s
   i | _ d S r   )rk   ry   r   r   r   rE     s    zNestedDict.__init__Taccess_listsr   r   rO   )rz   r   rQ   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)rk   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ddddZdS )r`   rt   ru   c                 C  s   t  | _t | _d S r   )r   rj   rq   re   ry   r   r   r   rE   9  s    zOutput.__init__N)r2   r3   r4   rE   r   r   r   r   r`   8  s   r`   r   zIterable[str])rl   r9   charsrQ   c                 C  s4   z| | |kr|d7 }qW n t k
r.   Y nX |S )Nr   )rc   )rl   r9   r   r   r   r   rb   >  s    rb   zfrozenset[str]r   )rl   r9   expecterror_onerror_on_eofrQ   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)rl   r9   r   r   r   new_posr   r   r   
skip_untilG  s    
r   )rl   r9   rQ   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   )rc   r   r#   )rl   r9   ro   r   r   r   ri   ]  s    
    ri   c                 C  s,   |}t | |t}t| |}||kr |S q d S r   )rb   r&   ri   )rl   r9   Zpos_before_skipr   r   r   skip_comments_and_array_wsi  s
    
r   ztuple[Pos, Key])rl   r9   rm   rQ   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|std| ||d |fS )	Nr   zCannot declare z twiceFr   Cannot overwrite a value]z.Expected ']' at the end of a table declaration)rb   r$   	parse_keyre   r   rq   rs   rr   r6   rw   rj   r   r   
startswithrl   r9   rm   rz   r   r   r   rh   r  s"       rh   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|std| ||d |fS )Nr;   "Cannot mutate immutable namespace Fr   r   z]]z0Expected ']]' at the end of an array declaration)rb   r$   r   re   r   rq   rr   r6   r   rw   rs   rj   r   r   r   r   r   r   r   rg     s$      rg   r   )rl   r9   rm   rn   rN   rQ   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	rtd| | |z|j
|}W n" tk
r   td	| |d Y nX ||krt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   rn   rz   r   r   r     s     z!key_value_rule.<locals>.<genexpr>r   zCannot redefine namespace r   r   Tr   )parse_key_value_pairrangerH   re   r   rq   rs   r6   r~   rr   rj   r   r   r>   rk   r   rw   )rl   r9   rm   rn   rN   valuer   r   Zabs_key_parentZrelative_path_cont_keysZcont_keynestr   r   r   rd     s0      rd   r@   ztuple[Pos, Key, Any])rl   r9   rN   r   rQ   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   rc   r6   rb   r$   parse_value)rl   r9   rN   r   rz   ro   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_partrb   r$   rc   )rl   r9   Zkey_partrz   ro   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)rc   r'   rb   parse_literal_strparse_one_line_basic_strr6   )rl   r9   ro   	start_posr   r   r   r     s    


r   c                 C  s   |d7 }t | |ddS )Nr   F	multiline)parse_basic_strrl   r9   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rtd| ||d7 }t | |}| d|r.|d |fS q.d S )Nr   r   ,zUnclosed array)r   r   r   r   r6   )rl   r9   rN   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rtd| | |z|j	|dd}
W n" t
k
r   td| |d Y nX |	|
krt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   rq   r   r   rk   r   r   rr   r6   r   r   r>   r   rw   )rl   r9   rN   r   Znested_dictre   rz   r   r   r   r   r   r   r   r   parse_inline_table  s:    




r   r   )rl   r9   r   rQ   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rt| |dS |d	krt| |d
S |dkrt| |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   )rb   r$   rc   r6   r&   parse_hex_charr0   r   )rl   r9   r   Z	escape_idro   r   r   r   parse_basic_str_escape4  s0    r   c                 C  s   t | |ddS )NTr   )r   r   r   r   r    parse_basic_str_escape_multilineS  s    r   )rl   r9   hex_lenrQ   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   )rl   r9   r   hex_strZhex_intr   r   r   r   W  s    
  r   c                 C  s2   |d7 }|}t | |dtdd}|d | || fS )Nr   r[   Tr   )r   r!   )rl   r9   r   r   r   r   r   d  s        r   )rl   r9   literalrQ   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   )rl   r9   r   delimZend_posresultr   r   r   parse_multiline_strm  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rtd|| ||d7 }qd S )	Nr   zUnterminated stringr.   r   """r   r/   zIllegal character )r    r   r   r   rc   r6   r   )	rl   r9   r   r   Zparse_escapesr   r   ro   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|rt| |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rt| |||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   >   naninf>   -inf+inf+nan-nanzInvalid value)r   RecursionErrorrc   r   r   r   r   r   r   r   matchr   rD   r6   endr   r	   r   r
   )rl   r9   rN   r   ro   Zdatetime_matchZdatetime_objeZlocaltime_matchZnumber_matchZfirst_threeZ
first_fourr   r   r   r     s\    




 

r   )	codepointrQ   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   rQ   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_strrQ   c                   s"    | }t |ttfrtd|S )Nz*parse_float must not return dicts or lists)r>   rk   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   ra     s    	ra   )H
__future__r   systypesr   _rer   r   r   r   r	   r
   TYPE_CHECKINGcollections.abcr   typingr   r   r   _typesr   r   r   getrecursionlimitr   r   	frozensetr   r   r   r   r    r!   r"   r#   r$   r&   r'   r(   r)   r0   r1   rD   r6   r   rY   rV   rq   r   r`   rb   r   ri   r   rh   rg   rd   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   r   r   r   r   <module>   s     	*=G:"		"%	 L