B
    `d                 @   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yeZW n ek
r   eZY nX edZG dd deZed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+dS )-    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
isinstancePurePath)pr    r   </tmp/pip-unpacked-wheel-hu9qqap1/pip/_vendor/toml/decoder.py_detect_pathlib_path   s
    
r   c             C   s   t | trdS t| S )NT)r	   
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"   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             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+-r,   __)striplen)nr   r   r   _strictly_valid_numE   s(    $r6   c          	      s  t | r4tjt| dd}t| ||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 }| }x2| D ]*} |r|t||| q|d qW |S yt|  ||S  tk
r    tdY nX dS )a?  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

    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)encodingNr   )path)warnc                s   g | ]}  |r|qS r   )exists).0r8   )opr   r   
<listcomp>t   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.z>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   r8   warningsr9   r   FNFErrorTomlDecoderget_empty_tabler:   updateloadAttributeError	TypeError)f_dictdecoderffiler9   	error_msgdlr   )r<   r   rH   \   s.    


rH   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}xt|D ]\}}|dkr||d	  d
krd||< q|r|d
krt	d|||	r||
krd}d}	d}
qn|d	krf|
 rd}qnf|dkrd}qnT| s|dks|dkr.qn6|r||d	  dkr|dksZ|dkrd}	|}
qnj|dkr|
 r|r||d	  }|
 s|dkrd	}q|dkrd}||d	  }|
 s|dkrd	}q|dkrd}d}nt	d| d |||dkr|
dkrd	}y2x,|||  dkr>|d	7 }|dkrP qW W n tk
rX   Y nX |dkrp| }|}	n|	 }	|	rd}
nd}
|dkrd|
dkrdd}d	}d}yxx0|||  dkr|d	7 }|dkrd}P qW |d	ks|dkr|rx&|||  dkr| }|d	7 }qW W n tk
r4   Y nX |sT|rN| }|}	n|	 }	|	r`d}
nd}
|dkr|	s|s|s|}y*x$|| d
krd||< |d	7 }qW W n tk
r   P Y nX |dkr"|	s"|s"|s"|rt||d	 kr||d	  dkrd}nd}n|d	7 }|dkrd|	sd|r>d}n&|r\||d	  dkrdd}n|d	8 }|d
kr|	sz|r|st	d||||d	  dks||d	  dkr||d  ||d	  kr||d	  ||< ||d  ||d	  krd||d < n|rd||< nd}q|r|| dkr|| dkrd}|s|s|| dkrZt	d||d	}qW d|} | d
} d}d}d}d}x6t| D ](\}}|dkr|t| |d	  d	 7 }|r|sd
|kr| }|dkr|r|rq|r|r||7 }n||7 }d}t|dkr|d |d kr|d |d kr|d  |d kry||\}}W n4 tk
r } zt	t|||W dd}~X Y nX |||< d}d}nVt|d	 }x,|dkr|| dkr| }|d	8 }qW |r|dd }n|d
7 }q|d dk
rd}t|d	kr<t	d!|||d	 dkr`d}|dd }d"} n|d	d }d} d	}||}!d}"x4|!D ],}#|"s| |#krP ||#| 7 }|" }"qW || |}t||d	 k s|d  dkrt	d#||| |dd d}$d}x|t|$k 	r0|$|  |$|< t|$| dkr|$| d dksh|$| d dkr|$| }%|d	 }x`|%d |%d ks|d	7 }|t|$d krt	d$|% d% d& ||d|$||  }%qzW |%d	d |$|< g |$|d	 |< n(t|$| 	s$t	d$|$|  d' |||d	7 }qW |}xtt|$D ]}|$| }&|&dk	rjt	d(||y|||&  |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
rl||& | ||&< |t|$d	 k
r|
r| g||&< Y nX ||& }|	rFy|d }W n tk

r   Y nX 	qFW n|d d,krR|d d-krt	d.||y||||| W n4 tk
rN } zt	t|||W dd}~X Y nX nhd|kry|||||}'W n4 tk
r } zt	t|||W dd}~X Y nX |'dk	r|'\}}}qW |S )/aD  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 Tr   r    z2Key name found without value. Reached end of line.   r,   r)   r1   "'=z&Found invalid character in key name: 'z'. Try quoting the key name.r   \#[]zUnbalanced quotes	zFound empty keyname. r*   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)rE   rF   r	   r   rJ   unicodedecoderB   	enumerater   isspaceisalnum
IndexErrorr4   joinsplitr3   
load_valuer   r   _get_split_on_quotesr   _groupname_rematch_rangeremoveappendKeyErrorload_inline_object	load_line)(srL   rM   implicitgroupsretvalcurrentleveloriginalslopenarr
openstringopenstrcharmultilinestrarrayoftables	beginlinekeygroup	dottedkeykeynameiitemnextitemkoddbackslash	tripquotejmultikeymultibackslashr    idxlinevaluevtypeerrsplitstrquotesplitsquoted
quotesplitgroupsgroupstrgroupretr   r   r   r@      s:   












$
$




 "

$$









$


"
r@   c             C   s  d}d }yt | 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 yt | 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   d S X |S )Nr      r,   r*   Z   r0   r1   
   r   r   r                           )r4   upperindexr   intr   datetimedate)valmicrosecondtzsubsecondvaltzvalsubsecondvalandtz
splitpointrP   r   r   r   
_load_date  sP    


(r   c             C   s8  d}t | d }x&|dkr6| | dkr6| }|d8 }qW x|D ]}|rd}t |d }x&|dkr||| dkr|| }|d8 }qXW | |7 } | |7 } q>d}d}d}|dkrd	}d||||   }|d
rtd| |d dkr|d drtd| d | tt|d7 } | t|t |d  7 } q>W | S )NFr   r*   rZ   rS   r   r   z\Ur   0123456789abcdefzInvalid escape sequence: rP   01234567z). Only scalar unicode points are allowed.r   )r4   ri   lowerr3   r   unichrr   rc   )vhexbytesprefixskipr   hxhxbhxblenr   r   r   _load_unicode_escapes  s:    

r   r+   r.   rK   r5   rtrW    r   rT   r^   c             C   s   d}d}x|t | k r|rd}| | tkrX| 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
W | S )
z%Unescape characters in a TOML string.r   FNr   rZ   uUzReserved escape sequence usedT)r4   _escapes_escape_to_escapedcharsr   )r   r   	backslashr   r   r   	_unescape)  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   ?  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dZ
dd Zdd ZdS )rE   c             C   s
   || _ d S )N)rL   )r#   rL   r   r   r   r   E  s    zTomlDecoder.__init__c             C   s   |   S )N)rL   )r#   r   r   r   rF   H  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
            N)r%   r&   r'   r(   r   r   r   r   DynamicInlineTableDictL  s   r   )rL   r   )r#   r   r   r   r   get_empty_inline_tableK  s    z"TomlDecoder.get_empty_inline_tableFc             C   sV  |dd  d}g }t|dkr6|d  s6|  xt|dkr$|d}y| 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|| q8t|dkr|d |d  |d< q8tdq8W x*|D ]"}
| |
|||}|d k	r,P q,W d S )Nr   r*   ,r   rY   z Invalid inline table encountered)rW   rX   z-0123456789)truefalser\   r]   ra   rb   z&Invalid inline table value encountered)rj   r4   r3   popr   rq   rt   )r#   r   rx   r   r   candidate_groupsr   candidate_groupr)   r   r   statusr   r   r   rs   V  s4    



zTomlDecoder.load_inline_objectc             C   s   | d}d}g }t|dkrd|d kr|d  d}|dd  }xft|d dkrt|r|d  d|d  7  < |dd  }d|d krF|d d |d  d }qFW ||7 }x0|D ](}|r|| q|| d7 }| }qW |S )NrW   Fr   rX   r   rV   r*   )rj   r4   rq   )r#   r   doublequotesplitsr   r   singlequotesplitsdoublequotesplitr   r   r   rl   t  s&    



z TomlDecoder._get_split_on_quotesc             C   s  d}|  |}d}x.|D ]&}|s*d|kr*P ||d7 }| }qW |d|}	t|	d }
t|	d r||	d dd|	d< x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ryt|	d  P W n t	k
r>   Y nX t
|	d d k	rTP |d7 }|	d }|d|}	||	d krt	d|
rt|	d }
qW d|	d d  |	d  g}	d|	d krd|	d ksd
|	d kr>|  |	d }d}g }xN|D ]6}|r|| n|dd |dD 7 }| }qW n|	d d}x |d dkrl|d d }qNW xB|d d D ]2}|dkrq|||kr|  ||< || }q|W |d  |	d< nR|	d d dks|	d d d
kr|	d d |	d d kr|	d dd |	d< t|	d dkrP|	d d dksL|	d d d
krP|	d d |	d d krP|	d d |	d d krPt|	d dkr|	d d |	d d kr|	d d |	d d kr|	d d |	d d ksPt|	d d }x0|dkr |	d | dkr | }|d8 }qW |r:|	d d d }n|	d d }|	d }n| |	d |
\}}y||	d   t	dW nN tk
r   t	dY n2 tk
r   |r|||fS |||	d < Y nX d S )Nr   FrY   r*   r)   rS   r   rU   r^   rX   rW   r\   ra   r   r   zInvalid date or numberr,   c             S   s   g | ]}|  qS r   )r3   )r;   levelr   r   r   r=     s    z)TomlDecoder.load_line.<locals>.<listcomp>rV   r   r_   r`   rZ   r   zDuplicate keys!)rl   r   rj   r6   _number_with_underscoresrn   replacer4   floatr   r   ri   r3   rq   rF   rk   rJ   rr   )r#   r   rx   r   r   r   r   r   r   pairstrictly_validprev_vallevelsr   r   r~   r   r   r   r   r   rt     s    


6$$"


$6

zTomlDecoder.load_lineTc          	   C   sN  |st d|dkrdS |dkr$dS |d dks>|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
}x|D ]}|dkr|r|d	7 }nd}qd
}	y4d}
||
 }x"|dkr|	 }	|
d	8 }
||
 }qW W n tk
r   Y nX |	s|r"t dq|r2|d	kr8d}qd}qW |dkr|dd	d  }d
}xb|D ]Z}
|
dkr|| }nB|
d tkr|
d dkr|
d dkr|st d|rfd
}qfW x:dD ]2}||kr||}t|d |d	d  |}qW t|}t|d	krP|d	 |krPt|dk sD|d	 |d krP|dd }|d	d dfS |d dkr|| |dfS |d dkr|  }| 	|| |dfS t
|rt
| \}}}}}tt|t|t||rt|nd}|dfS t|}|d k	r|dfS |s$t dd}d
}|d d krLd}|d	d  }n|d d!krf|d	d  }|d"d}| }d#|ksd$|krd%|ksd&|krd#|kr|d#d	d	 dkrt d'|d d(krt d)t|}d*}n.t|dkr|d+ks|d,krt|}d*}|dkr0t|d}|rBd| |fS ||fS d S )-NzEmpty value is invalidr   )Tboolr   )Fr   r   rW   rX   r   FrS   rV   Tr*   rZ   zStuff after closed string. WTF?r   r   zReserved escape sequence used)z\uz\Ur   r_   r   r\   arrayra   inline_objecttimer   z<Weirdness with leading zeroes or underscores in your number.r   r1   r0   r)   r,   r/   eEz,This float is missing digits after the point
0123456789z'This float doesn't have a leading digitr   infnan)r   rj   r4   rh   r   r   r   
load_arrayr   rs   TIME_RErn   r   r   r   r   r   r   r   r   )r#   r   r   	quotechartestvtriplequotetriplequotecountclosedtvr   r   r   
escapeseqsr   r   r   r   hmru   r)   msr   parsed_dateitypeneglowervr   r   r   rk     s    $










**
( "

zTomlDecoder.load_valuec             C   sf   t |dkrdS |d |d kr$dS d}d}x2t || dkr^|| dkrZ| }|d8 }q.P q.W | S )Nr   Tr*   Fr_   rZ   r   )r4   )r#   ru   r   r   r   r   r   bounded_stringM  s    
zTomlDecoder.bounded_stringc             C   s  d }g }|  }d|dd ks@d|dd dd   krd}|dd   }|dkrx|d dkst|d dkrxd	}|dd   d
s|dd d}ng }d}d}d}	x|t|dd  k r|| dks|| dkr&|	r |d }
x*|
dkr||
 dkr|	 }	|
d8 }
qW |	 }	|	s:|| dkrD|d7 }q|d7 }||||  |d }x2|t|dd  k r|| d
kr|d7 }qhW |d }qW |}d}|rpx|t|d k r||   }x| |r>t|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  }qW |d7 }qW nt|dd }g }d}d}xztt|D ]j}|| dkr|d7 }nL|| dkr|d8 }n4|| dkr|s|d|||  |d }qW |d||d   xntt|D ]^}||   ||< || dkr~| 	|| \}}|r||krt
dn|}|| q~W |S )Nr\   r   r*   rS   r   FrW   rX   Tra   r   rV   rZ   rb   r_   r`   r]   zNot a homogeneous array)r3   rj   
startswithr4   rq   r   rB   ro   ri   rk   r   )r#   aatyperw   strarraytmpanew_astart_group_indexend_group_indexin_strbackslash_indexr.   abalr{   r   r   nvalntyper   r   r   r   \  s    0 ("



zTomlDecoder.load_arrayN)FF)T)r%   r&   r'   dictr   rF   r   rs   rl   rt   rk   r   r   r   r   r   r   rE   C  s    
W
lrE   ),r   r>   r   r   rer   pip._vendor.toml.tzr   r   xrangero   r   rc   ranger   chrr   r   r   r   FileNotFoundErrorrD   	NameErrorIOErrorcompiler   r   r   r   r6   r  rH   rm   r@   r   r   r   _escapedcharszipr   r   objectr   rE   r   r   r   r   <module>   sF   
	


0
  C/#