U
    Ο_                     @   sr  d dl Z d dlZd dlmZ d dlZd dlZd dlmZ ejdk rHe	Z
neZeZ
eZeZdd Zdd Zd	d
 ZzeZW n ek
r   eZY nX edZG dd deZedZG dd deZdd Ze dfddZ!edZ"e dfddZ#dd Z$dd Z%ddddd d!d"gZ&d#d$d%d&d'd(d"gZ'e e(e&e'Z)d)d* Z*G d+d, d,eZ+G d-d. d.eZ,G d/d0 d0e,Z-dS )1    N)linesep)TomlTz)   c                 C   s&   dt jkr"dd l}t| |jr"dS dS )N)r      r   TF)sysversion_infopathlib
isinstanceZPurePath)pr    r   +lib/python3.8/site-packages/toml/decoder.py_detect_pathlib_path   s
    
r   c                 C   s   t | ttfrdS t| S )NT)r	   bytes
basestringr   )r
   r   r   r   _ispath   s    r   c                 C   s0   dt jkrdd l}|| S t| r,t| S | S )N)r      r   )r   r   osfspathr   str)r
   r   r   r   r   _getpath    s    

r   z1([0-9]{2}):([0-9]{2}):([0-9]{2})(\.([0-9]{3,6}))?c                   @   s   e Zd ZdZdd ZdS )TomlDecodeErrorzBase toml Exception / Error.c                 C   sb   | dd|d }||dd| }d||||}t| | || _|| _|| _|| _|| _	d S )N
r      z{} (line {} column {} char {}))
countrfindformat
ValueError__init__msgdocposlinenocolno)selfr   r   r    r!   r"   Zemsgr   r   r   r   5   s    zTomlDecodeError.__init__N)__name__
__module____qualname____doc__r   r   r   r   r   r   2   s   r   z([0-9])(_([0-9]))*c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
CommentValuec                 C   s&   || _ |rdnd}|| | _|| _d S )Nr    )valcomment_dict)r#   r*   r+   	beginliner,   Z	separatorr   r   r   r   F   s    
zCommentValue.__init__c                 C   s
   | j | S Nr*   )r#   keyr   r   r   __getitem__L   s    zCommentValue.__getitem__c                 C   s   || j |< d S r.   r/   )r#   r0   valuer   r   r   __setitem__O   s    zCommentValue.__setitem__c                 C   s<   || j }t| j | jr*| jd t| S t|| j S d S )Nr   )r*   r	   r,   r+   unicode)r#   Zdump_value_funcZretstrr   r   r   dumpR   s    
zCommentValue.dumpN)r$   r%   r&   r   r1   r3   r5   r   r   r   r   r(   E   s   r(   c                 C   s   |   } | sdS | d dkr dS | d dkr0dS d| ks@d| krDdS t| dkrTdS | d d	krp| d d
krpdS | d dks| d dkr| dd  } t| dkr| d d	kr| d dkrdS d| krdS dS )NFr   _z_.z._r   T0).obx+-r9   __)striplen)nr   r   r   _strictly_valid_numZ   s(    $rC   c              
      s  t | r@tjt| dd}t| ||W  5 Q R  S Q R X nt| trddlm	  ddl
m}  fdd| D sd}|t7 }|d	7 }t||d
krt|}| }| D ]*} |r|t||| q|d q|S zt|  ||W S  tk
r   tdY nX d
S )ac  Parses named file or files as toml and returns a dictionary

    Args:
        f: Path to the file to open, array of files to read into single dict
           or a file descriptor
        _dict: (optional) Specifies the class of the returned toml dictionary
        decoder: The decoder to use

    Returns:
        Parsed toml file represented as a dictionary

    Raises:
        TypeError -- When f is invalid type
        TomlDecodeError: Error while decoding toml
        IOError / FileNotFoundError -- When an array with no valid (existing)
        (Python 2 / Python 3)          file paths is passed
    zutf-8)encodingr   )path)warnc                    s   g | ]}  |r|qS r   )exists).0rE   opr   r   
<listcomp>   s     
 zload.<locals>.<listcomp>z.Load expects a list to contain filenames only.zAThe list needs to contain the path of at least one existing file.Nz>Non-existent filename in list with at least one valid filenamez5You can only load a file descriptor, filename or list)r   ioopenr   loadsreadr	   listr   rE   warningsrF   r   FNFErrorTomlDecoderget_empty_tablerG   updateloadAttributeError	TypeError)fr,   decoderZffilerF   Z	error_msgdlr   rI   r   rV   q   s.    $


rV   z^[A-Za-z0-9_-]+$c           -      C   s  g }|dkrt |}| }|}t| ts2tdt| tsF| d} | }t| }d}d}	d}
d}d}d}d}d}d}d}d}d}t|D ]b\}}|d	kr||d  d
krd||< q|rX||7 }|d
krt	d|||	r.||
krd}d}||kr|||  dkr| }|d7 }q|sd}d}	d}
qn|dkr|
 rJd}qnf|dkr\d}qnT| s|dks|dkrzqn6|r||d  dkr|dks|dkrd}	|}
qnj|dkr|
 r|r||d  }|
 s|dkrd}q|dkrd}||d  }|
 s|dkrd}q|dkrDd}|dd  }d}d}nt	d| d |||dkr|
dkrd}z0|||  dkr|d7 }|dkrrqqrW n tk
r   Y nX |dkr| }|}	n|	 }	|	rd}
nd}
|dkr|
dkrd}d}d}zr|||  dkr6|d7 }|dkrd}q6q|dksP|dkrt|rt|||  dkrt| }|d7 }qPW n tk
r   Y nX |s|r| }|}	n|	 }	|	rd}
nd}
|dkrH|	sH|sH|sH|}d}z2|| d
kr|| | 7 }d||< |d7 }qW n tk
r0   Y  qY nX |sH||||| |dkr|	s|s|s|rt||d kr||d  dkrd}nd}n|d7 }|dkr|	s|rd}n&|r||d  dkrd}n|d8 }|d
kr|	s|r|st	d||||d  dks0||d  dkr||d  ||d  kr||d  ||< ||d  ||d  krd||d < n|rd||< nd}|d7 }q|r|| dkr|| dkrd}|s|s|| dkrt	d||d}||7 }q|rt	d|t| |	rt	d |t| d|} | d
} d}d}d}d}t| D ]R\}} |dkrt|t| |d  d 7 }||| |r|sd
|kr|  } | dkr|rH|rqH|r|r|| 7 }n|| 7 }d}d}!|d dkr| d dk}!nBt| dkr<| d |d ko:| d! |d ko:| d" |d k}!|!rz||\}"}#W n4 tk
r }$ zt	t|$||W 5 d}$~$X Y nX |"||< d}d}nRt|d }|dkr|| dkr| }|d8 }q|r|dd }n|d
7 }qH| d dkrd}t| dkrt	d#||| d dkrBd}| dd } d$}%n| dd } d}%d}|| }&d}'|&D ]0}(|'s|%|(kr q||(|%7 }|' }'qh| |%|} t| |d k s| d  dkrt	d%|||%| dd d})d}|t|)k 
r|)|  |)|< t|)| dk	r|)| d dk	sF|)| d dk	r|)| }*|d }|*d |*d k	rvt|*dk	r|d7 }|t|)d k	rt	d&|* d' d( ||d|)||  }*	qV|*dd |)|< g |)|d |< n(t|)| 
st	d&|)|  d) |||d7 }q|}tt|)D ]}|)| }+|+dk
rLt	d*||z|||+  |t|)d k
r|+|k
r||+ |
rt	d+||n6|
r||+ |  nt	d,|+ d- t| ||W n tk
r"   |d }|+|kr| ||+< |t|)d kr|r| g||+< Y nd tk
r   |t|)d krN||+ | ||+< |t|)d kr|r| g||+< Y nX ||+ }|
r(z|d }W n tk
r   Y nX 
q(n| d d.kr2| d d/krt	d0||z|| ||| W n4 tk
r. }$ zt	t|$||W 5 d}$~$X Y nX nhd| krHz| | |||},W n4 tk
r }$ zt	t|$||W 5 d}$~$X Y nX |,dk	rH|,\}}}qH|S )1aD  Parses string as toml

    Args:
        s: String to be parsed
        _dict: (optional) Specifies the class of the returned toml dictionary

    Returns:
        Parsed toml file represented as a dictionary

    Raises:
        TypeError: When a non-string is passed
        TomlDecodeError: Error while decoding toml
    Nz!Expecting something like a stringutf8r   F Tr   r   r)   z2Key name found without value. Reached end of line.\   r9   r6   r>   "'=r7   z&Found invalid character in key name: 'z'. Try quoting the key name.r   #[]zUnbalanced quotes	zFound empty keyname. z2Key name found without value. Reached end of file.z/Unterminated string found. Reached end of file.z,Opening key group bracket on line by itself.z]]z"Key group not on a line by itself.zInvalid group name 'z' Something zwent wrong.z'. Try quoting it.z(Can't have a keygroup with an empty namez-An implicitly defined table can't be an arrayzWhat? z already exists?{}z,Line breaks are not allowed in inlineobjects)!rS   rT   r	   r   rX   r4   decoderP   	enumerater   isspaceisalnumrstrip
IndexErrorpreserve_commentrA   joinsplitembed_commentsr@   
load_valuer   r   _get_split_on_quotesr   _groupname_rematch_rangeremoveappendKeyErrorload_inline_object	load_line)-sr,   rZ   ZimplicitgroupsretvalcurrentlevelZoriginalslopenarrZ
openstringZopenstrcharmultilinestrZarrayoftablesr-   ZkeygroupZ	dottedkeyZkeynamer0   Zprev_keyline_noiitemoddbackslashkZnextitemZ	tripquotejr+   multikeymultibackslashr    idxlineclosedr2   vtypeerrZsplitstrquotesplitsquoted
quotesplitgroupsZgroupstrgroupretr   r   r   rN      s   


 







 


$
$


  



" 

$ $
  
 

  

 
$

"
rN   c                 C   s  d}d }zt | dkr| d dkr| d  dkrD| dd }d}nl| dd  }d|kr||d}|d | }||d  }n4d|kr|d}|d | }||d  }nd }|}|d k	rt|}tt|d	d
t |   }nt| dd  }W n tk
r
   d }Y nX d| dd  kr"d S zt | d	krftt| d d t| dd t| dd	 }n`tt| d d t| dd t| dd	 t| dd t| dd t| dd ||}W n tk
r   Y d S X |S )Nr      r9   r7   Z   r=   r>   
   r   r   r                           )rA   upperindexr   intr   datetimedate)r*   ZmicrosecondZtzZsubsecondvalZtzvalZsubsecondvalandtzZ
splitpointr[   r   r   r   
_load_date  sb    


      r   c                 C   s(  d}t | d }|dkr4| | dkr4| }|d8 }q|D ]}|rd}t |d }|dkrt|| dkrt| }|d8 }qP| |7 } | |7 } q8d}d}d}|dkrd	}d||||   }|d
rtd| |d dkr|d drtd| d | tt|d7 } | t|t |d  7 } q8| S )NFr   r7   r`   r^   r   r   \Ur   Z0123456789abcdefzInvalid escape sequence: r[   Z01234567z). Only scalar unicode points are allowed.r   )rA   rt   lowerr@   r   unichrr   r4   )vhexbytesprefixskipr   hxZhxbZhxblenr   r   r   _load_unicode_escapes7  s<    


r   r8   r;   rY   rB   rtrb    r   r_   rh   c                 C   s   d}d}|t | k r|rd}| | tkrV| d|d  t| |   | |d d  } q| | dkr| d|d  | |d  } q| | dks| | dkr|d7 }qtdqn| | dkrd	}|d7 }q| S )
z%Unescape characters in a TOML string.r   FNr   r`   uUReserved escape sequence usedT)rA   _escapes_escape_to_escapedcharsr   )r   r   	backslashr   r   r   	_unescapea  s"    .

r   c                   @   s   e Zd ZdZdS )InlineTableDictz,Sentinel subclass of dict for inline tables.Nr$   r%   r&   r'   r   r   r   r   r   w  s   r   c                   @   s|   e Zd ZefddZdd Zdd Zddd	Zd
d Zdd Z	dd Z
dddZdd Zdd Zdd Zdd Zdd ZdS ) rS   c                 C   s
   || _ d S r.   r,   r#   r,   r   r   r   r   }  s    zTomlDecoder.__init__c                 C   s   |   S r.   r   )r#   r   r   r   rT     s    zTomlDecoder.get_empty_tablec                 C   s   G dd d| j t}| S )Nc                   @   s   e Zd ZdZdS )zBTomlDecoder.get_empty_inline_table.<locals>.DynamicInlineTableDictzConcrete sentinel subclass for inline tables.
            It is a subclass of _dict which is passed in dynamically at load
            time

            It is also a subclass of InlineTableDict
            Nr   r   r   r   r   DynamicInlineTableDict  s   r   )r,   r   )r#   r   r   r   r   get_empty_inline_table  s    z"TomlDecoder.get_empty_inline_tableFc                 C   sR  |dd  d}g }t|dkr6|d  s6|  t|dkr"|d}z| dd\}}	W n tk
r~   tdY nX |	 }	|	d |	d kr|	d dks|	d dks|	d	ks|	d d
kr|	d dks|	d dkr|	d dkr|| q6t|dkr|d |d  |d< q6tdq6|D ]&}
| |
|||}|d k	r& qNq&d S )Nr   r7   ,r   rd   z Invalid inline table encountered)rb   rc   z-0123456789)truefalserf   rg   rk   rl   z&Invalid inline table value encountered)ru   rA   r@   popr   r}   r   )r#   r   r   r   r   Zcandidate_groupsr   Zcandidate_groupr6   r2   r   statusr   r   r   r     sH    









zTomlDecoder.load_inline_objectc                 C   s   | d}d}g }t|dkrd|d kr|d  d}|dd  }t|d dkrt|r|d  d|d  7  < |dd  }d|d krD|d d |d  d }qD||7 }|D ](}|r|| q|| d7 }| }q|S )Nrb   Fr   rc   r   ra   r7   )ru   rA   r}   )r#   r   Zdoublequotesplitsr   r   ZsinglequotesplitsZdoublequotesplitr   r   r   rx     s(    

z TomlDecoder._get_split_on_quotesc                 C   s(  d}|  |}d}|D ](}|s*d|kr* q@||d7 }| }q|d|}	t|	d }
t|	d rz|	d dd|	d< t|	d r|	d d dkr|	d d d	kr|	d d d
kr|	d d dkr|	d d dkr|	d d dkr|	d  dkr|	d  dkrzt	|	d  W qW n t
k
rD   Y nX t|	d d k	r\qt|	d rpq|d7 }|	d }|d|}	||	d krt
d|
rzt|	d }
qzd|	d d  |	d  g}	d|	d krd|	d ks d
|	d krT|  |	d }d}g }|D ]6}|r0|| n|dd |dD 7 }| }qn|	d d}|d dkr|d d }qb|d d D ]2}|dkrq||kr|  ||< || }q|d  |	d< nV|	d d dks|	d d d
kr(|	d d |	d d kr(t|	d dd |	d< | |	d \}}|dkr|dkrv|	d ||  dkrv| }|d8 }qD|r|	d d d }n|	d d }|	d }n| |	d |
\}}z||	d   t
dW nR tk
r   t
dY n6 tk
r"   |r|||f Y S |||	d < Y nX d S )Nr   Frd   r7   r6   r^   r   r)   rh   rc   rb   rf   rk   r   r   zInvalid date or numberr9   c                 S   s   g | ]}|  qS r   r@   )rH   levelr   r   r   rK     s     z)TomlDecoder.load_line.<locals>.<listcomp>r`   r   zDuplicate keys!)rx   r   ru   rC   _number_with_underscoresrz   replacerA   r@   floatr   r   TIME_RErt   r}   rT   r   _load_line_multiline_strrw   rX   r~   )r#   r   r   r   r   r   r   r   r   Zpairstrictly_validZprev_valZlevelsr   r   Zkoffsetr   r2   r   r   r   r   r     s    
2
"

$
 
zTomlDecoder.load_linec                 C   sh  d}t |dk rd|fS |d dkr| d dkr| |r|dd   d}t |dkr|d d dkr|d d d	kr|d d
 |d
 d |d  g }qT|d }t |t | }|}|d dkr|d d	krd|fS |d |d ks|d |d krd|fS t |dkrX|d |d krX|d
 |d krX|d |d krXd|fS t |d |fS )Nr   r   r7   rf   rg   r   r   rb   rc   ri   ra   r   rj   )rA   r@   _load_array_isstrarrayru   )r#   r
   ZpoffsetZnewpr   r   r   r     s&    ,$$Dz$TomlDecoder._load_line_multiline_strTc              	   C   sr  |st d|dkrdS | dkr0t dn>|dkr<dS | dkrTt dn|d dksn|d d	kr|d }|d
d  |}d}d}t|d
kr|d dkr|d
 dkr|dd  }d}d}|D ]}|dkr|r|d
7 }nd}qd}	z4d}
||
 }|dkr"|	 }	|
d
8 }
||
 } qW n tk
r:   Y nX |	s|rPt dq|r`|d
krfd}qd}q|dkr,|dd
d  }d}|D ]Z}
|
dkr| }nB|
d tkr|
d dkr|
d dkr|st d|rd}qdD ]2}||kr||}t|d |d
d  |}qt|}t|d
krt|d
 |krtt|dk sh|d
 |d krt|dd }|d
d dfS |d dkr| |dfS |d dkr| 	 }| 
|| |dfS t|r t| \}}}}}tt|t|t||rt|nd}|dfS t|}|d k	r:|dfS |sHt dd }d}|d d!krpd}|d
d  }n|d d"kr|d
d  }|d#d}| }d$|ksd%|krd&|ksd'|krd$|kr|d$d
d
 dkrt d(|d d)krt d*t|}d+}n.t|dkr@|d,ks4|d-kr@t|}d+}|d krTt|d}|rfd| |fS ||fS d S ).NzEmpty value is invalidr   )Tboolz#Only all lowercase booleans allowedr   )Fr   r   rb   rc   r   Fr^   ra   Tr7   r`   z1Found tokens after a closed string. Invalid TOML.r   r   r   )z\ur   r   ri   r   rf   Zarrayrk   inline_objecttimer   z<Weirdness with leading zeroes or underscores in your number.r   r>   r=   r6   r9   r<   eEz,This float is missing digits after the point
0123456789z'This float doesn't have a leading digitr   infnan)r   r   ru   rA   rr   r   r   r   
load_arrayr   r   r   rz   r   r   r   r   r   r   r   )r#   r   r   Z	quotecharZtestvZtriplequoteZtriplequotecountr   Ztvr   r   r   Z
escapeseqsr   r   r   r   hmr   r6   msr   Zparsed_dateZitypenegZlowervr   r   r   rw   *  s    $







**
( "

zTomlDecoder.load_valuec                 C   sb   t |dkrdS |d |d kr$dS d}d}t || dkr\|| dkr\| }|d8 }q,q\q,| S )Nr   Tr7   Fri   r`   r   )rA   )r#   r   r   r   r   r   r   bounded_string  s    
zTomlDecoder.bounded_stringc                 C   s8   |dd   }|dkr4|d dks0|d dkr4dS dS )	Nr   r7   r^   r   rb   rc   TFr   )r#   ar   r   r   r     s     z"TomlDecoder._load_array_isstrarrayc                 C   s  d }g }|  }d|dd ks@d|dd dd   kr| |}|dd   dsv|dd d}nNg }d}d}|| dkrdnd}d	}	|t|dd  k r|| d
ks|| dkr|	r|d }
|
dkr||
 dkr|	 }	|
d8 }
q|	 }	|	s|| dkr|d7 }|	s.|| dkr:|d7 }qn*|| dkrd|dkrd|d8 }|d7 }q|d7 }||||  |d }|t|dd  k r|| dkr|d7 }q|d }q|}d}|r||t|d k r|||   }| |rRt|dkr|d |d   kr*|d krn n|d |d kr|d |d kr|| d ||d   ||< ||   }|t|d k r|d |d  ||d d   }n|d |d  }q|d7 }qnt|dd }g }d}d}tt|D ]j}|| dkr|d7 }nL|| dkr,|d8 }n4|| dkr|s|d	|||  |d }q|d	||d   tt|D ]^}||   ||< || dkr| 
|| \}}|r||krtdn|}|| q|S )Nrf   r   r7   r^   r   rk   r   ra   Frb   rc   r`   rl   ri   rj   rg   zNot a homogeneous array)r@   ru   r   
startswithrA   r}   r   rP   r{   rt   rw   r   )r#   r   Zatyper   ZstrarrayZnew_aZstart_group_indexZend_group_indexZopen_bracket_countZin_strZbackslash_indexr;   abZalr   r   r   ZnvalZntyper   r   r   r     s    0





 
"



zTomlDecoder.load_arrayc                 C   s   d S r.   r   r#   r   r0   r+   r-   r   r   r   rs     s    zTomlDecoder.preserve_commentc                 C   s   d S r.   r   )r#   r   r   r   r   r   rv     s    zTomlDecoder.embed_commentsN)FF)T)r$   r%   r&   dictr   rT   r   r   rx   r   r   rw   r   r   r   rs   rv   r   r   r   r   rS   {  s     
T
q[rS   c                       s0   e Zd Zef fdd	Zdd Zdd Z  ZS )TomlPreserveCommentDecoderc                    s   i | _ tt| | d S r.   )saved_commentssuperr   r   r   	__class__r   r   r     s    z#TomlPreserveCommentDecoder.__init__c                 C   s   |||f| j |< d S r.   )r   r   r   r   r   rs     s    z+TomlPreserveCommentDecoder.preserve_commentc                 C   s:   || j krd S | j | \}}}t|| ||| j||< d S r.   )r   r(   r,   )r#   r   r   r0   r+   r-   r   r   r   rv     s    
z)TomlPreserveCommentDecoder.embed_comments)r$   r%   r&   r   r   rs   rv   __classcell__r   r   r   r   r     s   r   ).r   rL   r   r   rer   Ztoml.tzr   r   Zxranger{   r   r4   ranger   chrr   r   r   r   FileNotFoundErrorrR   	NameErrorIOErrorcompiler   r   r   r   objectr(   rC   r   rV   ry   rN   r   r   r   Z_escapedcharszipr   r   r   rS   r   r   r   r   r   <module>   sP   
	


1
  e/#   