U
    Zޫ^[                     @   s  d Z ddlZddlZddlZddlmZ ddlZdZdZG dd de	Z
G dd	 d	ejZG d
d deZdd ZzeZW n$ ek
r   eZeZeZeZY nX zeZW n ek
r   eZY nX efddZedZefddZ dGddZ!edZ"dd Z#dd Z$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,dHd1d2Z-d3d4 Z.d5d6 Z/d7d8 Z0dId9d:Z1dJd;d<Z2d=d> Z3d?d@ Z4dAdB Z5dCdD Z6dEdF Z7dS )KzLPython module which parses and emits TOML.

Released under the MIT license.
    N)linesepz0.9.6z0.4.0c                   @   s   e Zd ZdZdS )TomlDecodeErrorzBase toml Exception / Error.N__name__
__module____qualname____doc__ r	   r	   4/tmp/pip-unpacked-wheel-huh_82lg/pip/_vendor/toml.pyr      s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TomlTzc                 C   sZ   |dkrd| _ n|| _ | j d dkr(dnd| _t| j dd | _t| j dd	 | _d S )
NZ+00:00r   -            )_raw_offset_signint_hours_minutes)selfZtoml_offsetr	   r	   r
   __init__   s    zTomlTz.__init__c                 C   s
   d| j  S )NUTC)r   r   dtr	   r	   r
   tzname   s    zTomlTz.tznamec                 C   s   | j tj| j| jd S )N)hoursminutes)r   datetime	timedeltar   r   r   r	   r	   r
   	utcoffset!   s    zTomlTz.utcoffsetc                 C   s
   t dS )Nr   )r!   r"   r   r	   r	   r
   dst%   s    z
TomlTz.dstN)r   r   r   r   r   r#   r$   r	   r	   r	   r
   r      s   	r   c                   @   s   e Zd ZdZdS )InlineTableDictz,Sentinel subclass of dict for inline tables.Nr   r	   r	   r	   r
   r%   )   s   r%   c                 C   s   G dd d| t }| S )Nc                   @   s   e Zd ZdZdS )z7_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%   )_dictr&   r	   r	   r
   _get_empty_inline_table-   s    r(   c              
      s   t | tr<tj| 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 ]&} |r|t| q|d
 q|S zt|  |W 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
    utf-8)encodingr   )path)warnc                    s   g | ]}  |r|qS r	   )exists).0r+   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.z>Non-existent filename in list with at least one valid filenamez5You can only load a file descriptor, filename or listN)
isinstance
basestringioopenloadsreadlistosr+   warningsr,   r   FNFErrorr-   updateloadAttributeError	TypeError)fr'   Zffiler,   	error_msgdlr	   r/   r
   r=   E   s*    
"


r=   ^[A-Za-z0-9_-]+$c           "      C   s
  g }| }|}t | ts tdt | ts4| d} t| }d}d}d}d}	d}
d}d}d}t|D ]\}}|dkr||d  d	krd
||< qd|r,|d	krtd|r||krdd}d}d}qdnJ|dkr| rd}qdn|	 sd|dksd|dkrqdn|dkr| rqd|dkrd}ntd| d |dkr|dkrd}z0|||  dkrr|d7 }|dkrFqrqFW 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r
|d7 }|dkrd}q
q|dks$|dkrH|rH|||  dkrH| }|d7 }q$W n t
k
r`   Y nX |s|rz|	 }	|	}n| }|rd}nd}|dkr|s|s|
s|}z&|| d	krd
||< |d7 }qW n t
k
r   Y  qY nX |dkrP|sP|sP|
sP|rHt||d krB||d  dkrBd}
nd}n|d7 }|dkr|s|rld}n&|
r||d  dkrd}
n|d8 }|d	krB|s|	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}qd|rd|| d
krd|| dkrdd}|sd|
sd|| dkrtdd}qdd|} | d	} d}d}	d}| D ]}|	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rzt|	|\}}W n0 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 }	q|d dk	rd}
t|dkr"td |d dkrFd}
|dd }d!}n|dd }d}d}t|}d}|D ]0}|s||kr q|||7 }| }qj|||}t||d k s|d  dkrtd"||dd d#}d}|t|k r ||  ||< t|| dkr|| d dksD|| d dkr|| }|d }|d |d ks|d7 }|t|d krtd$| d% d& d#|||  }qT|dd ||< g ||d |< n$t|| std$||  d' |d7 }q|}tt|D ]}|| } | dkr0td(zr||   |t|d kr| |krp||  |
rtd)n0|
r||  |  ntd*|  d+ t| W n tk
	r   |d }z||   W nD tk
	r   | || < |t|d k	r|
	r| g|| < Y nX Y n` tk
	rp   |t|d k	r>||  | || < |t|d k	rl|
	rl| g|| < Y nX ||  }|
rz|d }W n tk
	r   Y nX qn|d d,k
r|d d-k	rtd.zt||||| W n0 tk

r } ztt|W 5 d}~X Y nX ndd|krzt|||||}!W n0 tk

rd } ztt|W 5 d}~X Y nX |!dk	r|!\}}	}q|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
    z!Expecting something like a stringutf8r   F Tr   
 z2Key name found without value. Reached end of line.   _r   =z&Found invalid character in key name: 'z'. Try quoting the key name.'"r   \#[]zUnbalanced quotes	zFound empty keyname. Nr   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)r2   r3   r?   unicodedecoder8   	enumerater   isspaceisalnum
IndexErrorlenjoinsplitstrip_load_value
ValueErrorstr_get_split_on_quotescount_groupname_rematch_rangeremoveappendKeyError_load_inline_object
_load_line)"sr'   ZimplicitgroupsretvalcurrentlevelslopenarrZ
openstringZopenstrcharmultilinestrarrayoftablesZ	beginlineZkeygroupZkeynameiitemkoddbackslashZ	tripquotejmultikeymultibackslashlinevaluevtypeerrsplitstrquotesplitsquoted
quotesplitgroupsZgroupstrgroupretr	   r	   r
   r6   v   s   






$
$




 
$$








 


r6   Fc                 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 ]&}
t|
||||}|d k	r& qNq&d S )Nr   r   ,r   rL   z Invalid inline table encountered)rN   rM   z-0123456789)truefalserQ   rR   rW   rX   z&Invalid inline table value encountered)ra   r_   rb   poprd   rl   ro   )r~   rr   r'   r|   r}   Zcandidate_groupsr   Zcandidate_grouprK   r   r   statusr	   r	   r
   rn     sD    








rn   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  } | d d	kr| d d
krdS d| krdS dS )NFr   rK   r   z_.z._r   T0rV   +r   __)rb   r_   )nr	   r	   r
   _strictly_valid_num  s(    r   c                 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 )NrN   Fr   rM   r   rJ   r   )ra   r_   rl   )r~   Zdoublequotesplitsr   r   ZsinglequotesplitsZdoublequotesplitr	   r	   r
   rf     s(    

rf   c                 C   s  d}t | }d}|D ](}|s(d|kr( q>||d7 }| }q| d|}	t|	d }
t|	d rx|	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
r:   Y nX t
|	d d k	rRq|d7 }|	d }| d|}	||	d krt	d|
rxt|	d }
qxd|	d d  |	d  g}	|	d d dks|	d d d
kr|	d d dks |	d d d
kr|	d dd |	d< t|	d dkrJ|	d d dksJ|	d d d
krJ|	d d |	d d krJ|	d d |	d d krJt|	d dkr|	d d |	d d kr|	d d |	d d kr|	d d |	d d ksJt|	d d }|dkr|	d | dkr| }|d8 }q|r4|	d d d }n|	d d }|	d }nt|	d ||
\}}z||	d   t	dW n6 tk
r   |r|||f Y S |||	d < Y nX d S )Nr   FrL   r   rK   rF   r   rI   rS   rM   rN   rQ   rW   r   r   zInvalid date or numberrJ      rT   rU   rO   rH   zDuplicate keys!)rf   rg   ra   r   _number_with_underscoresri   replacer_   floatrd   
_load_dater`   rb   rc   rm   )r~   rr   r'   r|   r}   rw   r   r   r   pairstrictly_validZprev_valry   ru   r   r   r	   r	   r
   ro     s    2


"$6
ro   c                 C   s  d}d }zt | dkr| d dkr| d  dkrD| dd }d}nb| dd  }d|kr||d}|d | }||d  }n*d|kr|d}|d | }||d  }t|}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 zdt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      rV   r   r      r   r   
   r   r   r   r                        )r_   upperindexr   r   rd   r!   )valmicrosecondtzZsubsecondvalZtzvalZsubsecondvalandtzZ
splitpointrB   r	   r	   r
   r   '  sP    


     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   r   rO   rF   r   r   \Ur   Z0123456789abcdefzInvalid escape sequence: rB   01234567z). Only scalar unicode points are allowed.r   )r_   r`   lowerrb   rd   unichrr   rY   )vhexbytesprefixskiprw   hxZhxbZhxblenr	   r	   r
   _load_unicode_escapesM  s<    


r   r   br@   r   rtrN    rH   rG   rS   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   rO   uUReserved escape sequence usedT)r_   _escapes_escape_to_escapedcharsrd   )r   rw   	backslashr	   r	   r
   	_unescapew  s"    .

r   Tc              	   C   s  | st d| dkrdS | dkr$dS | d dkr0| 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	}z0d}	||	 }
|
dkr| }|	d8 }	||	 }
qW n tk
r   Y nX |s|rt dq|r|dkrd}qd}q| ddd  }d	}|D ]Z}	|	d
krR| }nB|	d tkr|	d dkr|	d dkr|st d|r<d	}q<dD ]2}|| kr| |}t|d |dd  |} qt| } t| dkr | d dkr t| dk s| d | d kr | dd } | dd dfS | d dkr| d dkrxt| dk sl| d | d krx| dd } | dd dfS | d dkrt| |dfS | d dkrt|}t	| || |dfS t
| }|d k	r|dfS |st dd}d	}| d dkrd}| dd  } n| d d kr8| dd  } | d!d
} d"| ksbd#| ksbd$| krd"| kr| d"dd d
krt d%| d d&krt d't| } d(}nt| } |rd|  |fS | |fS d S ))NzEmpty value is invalidr   )Tboolr   )Fr   r   rN   r   FrF   rJ   Tr   rO   zStuff after closed string. WTF?r   r   r   )z\ur   r   rT   re   rM   rQ   arrayrW   inline_objectdatez<Weirdness with leading zeroes or underscores in your number.r   r   r   rK   rV   eEz,This float is missing digits after the point
0123456789z'This float doesn't have a leading digitr   )rd   ra   r_   r^   r   r   r   _load_arrayr(   rn   r   r   r   r   )r   r'   r   ZtestvZtriplequoteZtriplequotecountclosedZtvrz   rw   r{   Z
escapeseqsr   r   r   r   Zparsed_dateZitypenegr	   r	   r
   rc     s    $


*

<.
 rc   c                 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   Tr   FrT   rO   r   )r_   )rp   rw   r   r	   r	   r
   _bounded_string  s    
r   c                 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} ng }d}d}d}	|t| dd  k r| | dks| | dkr|	r|d }
|
dkr| |
 dkr|	 }	|
d8 }
q|	 }	|	s2| | dkr<|d7 }q|d7 }|| ||  |d }|t| dd  k r| | d
kr|d7 }q^|d }q|} d}|rR|t| d k rR| |   }t|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  } 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^t	| | |\}}|r||krt
dn|}|| q^|S )NrQ   r   r   rF   r   FrN   rM   TrW   r   rJ   rO   rX   rT   rU   rR   zNot a homogeneous array)rb   ra   
startswithr_   rl   r   r8   rj   r`   rc   rd   )ar'   Zatyperq   ZstrarrayZtmpaZnew_aZstart_group_indexZend_group_indexZin_strZbackslash_indexr   abalrt   r{   rw   ZnvalZntyper	   r	   r
   r      s    0 






 
"



r   c                 C   s$   |j stdt| }| | |S )a0  Writes out dict as toml to a file

    Args:
        o: Object to dump into toml
        f: File descriptor where the toml should be stored

    Returns:
        String containing the toml corresponding to dictionary

    Raises:
        TypeError: When anything other than file descriptor is passed
    z0You can only dump an object to a file descriptor)writer?   dumps)or@   rB   r	   r	   r
   dumpW  s
    
r   c           	      C   s   d}t | d\}}||7 }|i kri }|D ]z}t || ||\}}|sN|s|s|rj|dd dkrj|d7 }|d| d 7 }|r||7 }|D ]}|| ||d | < qq*|}q|S )	zStringifies input dict as toml

    Args:
        o: Object to dump into toml

        preserve: Boolean parameter. If true, preserve inline tables.

    Returns:
        String containing the toml corresponding to dict
    rF   rT   Nz

rH   rQ   ]
rV   )_dump_sections)	r   preserverq   ZaddtoretvalsectionsZnewsectionssectionZaddtosectionsrp   r	   r	   r
   r   l  s(     r   c                 C   s$  d}|dkr |d dkr |d7 }|   }d}| D ]}t|}|}td|spd|krdd| d }nd| d }t| | tsd}t| | tr| | D ]}	t|	trd}q|r| | D ]}	d	}
|d
| | d 7 }t|	|| \}}|r|d dkr|
|7 }
n||7 }|i kri }|D ]n}t|| || d | \}}|rn|
d| | d | d 7 }
|
|7 }
|D ]}|| ||d | < qrq"|}q||
7 }qn.| | d k	r||d tt| |  d	 7 }q0|rt| | t	r||d t
| |  7 }q0| | ||< q0||7 }||fS )NrF   r   rV   rD   rN   rM   FTrH   z[[z]]
r   rQ   r    = )	__class__rY   reri   r2   dictr8   r   _dump_valuer%   _dump_inline_table)r   supr   ZretstrZretdictZarraystrr   Zqsectionrv   r   Zarraytabstrrp   rB   ZnewdZdsecs1Zd1r	   r	   r
   r     sr    




r   c                 C   sh   d}t | trXg }|  D ]"\}}t|}||d |  q|dd| d 7 }|S tt| S dS )zPreserve inline table in its compact syntax instead of expanding
    into subsection.

    https://github.com/toml-lang/toml#user-content-inline-table
    rF   r   z{ z, z }
N)r2   r   itemsr   rl   r`   rY   r   )r   rq   Zval_listry   r   r   r	   r	   r
   r     s    
r   c                 C   sr   t ttttttdd tdd ttt	j	dd i}|
t| }|d krVt| drV|t }|d k	rf|| S |t  | S )Nc                 S   s   | S Nr	   r   r	   r	   r
   <lambda>      z_dump_value.<locals>.<lambda>c                 S   s   t |  S r   )rY   r   r   r	   r	   r
   r     r   c                 S   s   |   ddS )Nr   r   )	isoformatr   r   r	   r	   r
   r     r   __iter__)re   	_dump_strrY   r8   
_dump_listr   r   r   _dump_floatr!   gettypehasattr)r   Z
dump_funcsZdump_fnr	   r	   r
   r     s&           
r   c                 C   sX  t jdk r(t| dr(t| tr(| d} d|  } | d dkrH| dd  } | d}|s`| d	rl| dd
 } |r| dd} | d	d} | d} t	| dkrDd
}| d s| dd  } | d dd| d< | d | dk}| d d | r| d | dkr| }|d8 }q|rd}nd}| d | | d  g| dd   } qt
d	| d  d	 S )N)r   rZ   r)   z%rr   r   r   rM   rN   r   z\'z\"z\xz\\rO   xZu00rJ   )sysversion_infor   r2   re   rZ   r   r   ra   r_   rY   )r   Zsinglequoterw   ZjoinxZjoinerr	   r	   r
   r     s4    


$
$r   c                 C   s2   d}| D ]}|dt t| d 7 }q|d7 }|S )NrQ   rI   r   rR   )rY   r   )r   rq   r   r	   r	   r
   r     s
    r   c                 C   s   d | ddddS )Nz{0:.16}ze+0ze+ze-0ze-)formatr   r   r	   r	   r
   r     s    r   )FF)T)F)F)8r   r   r4   r!   r9   r   r   __version__Z_spec_	Exceptionr   tzinfor   objectr%   r(   xrangerj   	NameErrorre   rY   ranger3   chrr   FileNotFoundErrorr;   IOErrorr   r=   compilerh   r6   rn   r   r   rf   ro   r   r   r   Z_escapedcharszipr   r   rc   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   <module>   sf   


.
  $  

?&#
cW
 
7