B
    `d[                 @   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yeZW n$ ek
r   eZeZeZeZY nX y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-hu9qqap1/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Zz+00:00r   -            )_raw_offset_signint_hours_minutes)self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   r	   	utcoffset!   s    zTomlTz.utcoffsetc             C   s
   t dS )Nr   )r   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.N)r   r   r   r   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
        N)r   r   r   r   r   r   r   r	   DynamicInlineTableDict.   s   r$   )r#   )_dictr$   r   r   r	   _get_empty_inline_table-   s    r&   c          	      s   t | tr0tj| 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|| }x.| 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).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 list)
isinstance
basestringioopenloadsreadlistosr(   warningsr)   r   FNFErrorr*   updateloadAttributeError	TypeError)fr%   ffiler)   	error_msgdlr   )r,   r	   r9   E   s*    



r9   z^[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}x2t|D ]$\}}|dkr||d  d	krd
||< qh|r0|d	krtd|r||krhd}d}d}qhnJ|dkr| rd}qhn|	 sh|dksh|dkrqhn|dkr| rqh|dkr d}ntd| d |dkr|dkrd}y2x,|||  dkrv|d7 }|dkrLP qLW W n t
k
r   Y nX |dkr|	 }	|	}n| }|rd}nd}|dkr|dkrd}d}d}yxx0|||  dkr|d7 }|dkrd}P qW |dks,|dkrT|rTx&|||  dkrR| }|d7 }q.W W n t
k
rl   Y nX |s|r|	 }	|	}n| }|rd}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rZ|sZ|sZ|
sZ|rRt||d krL||d  dkrLd}
nd}n|d7 }|dkr|s|rvd}n&|
r||d  dkrd}
n|d8 }|d	krL|s|	r6|	std||d  dks||d  dkrJ||d  ||d  krJ||d  ||< ||d  ||d  krJd
||d < n|rFd
||< nd}qh|rh|| d
krh|| dkrhd}|sh|
sh|| dkrtdd}qhW d|} | d	} d}d}	d}x| 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ryt|	|\}}W n0 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r6td |d dkrZd}
|dd }d!}n|dd }d}d}t|}d}x4|D ],}|s||krP |||7 }| }qW |||}t||d k s|d  dkrtd"||dd d#}d}x|t|k r||  ||< t|| dkr|| d dks\|| d dkr|| }|d }x\|d |d ks|d7 }|t|d krtd$| d% d& d#|||  }qnW |dd ||< g ||d |< n$t|| std$||  d' |d7 }qW |}xxtt|D ]}|| } | dkrRtd(yr||   |t|d kr| |kr||  |
rtd)n0|
r||  |  ntd*|  d+ t| W n tk
	r4   |d }y||   W nD tk
	r.   | || < |t|d k	r*|
	r*| g|| < Y nX Y n` tk
	r   |t|d k	r`||  | || < |t|d k	r|
	r| g|| < Y nX ||  }|
r2y|d }W n tk
	r   Y nX q2W n|d d,k
r:|d d-k	rtd.yt||||| W n0 tk

r6 } ztt|W dd}~X Y nX ndd|kryt|||||}!W n0 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
    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)r.   r/   r;   unicodedecoder4   	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%   implicitgroupsretvalcurrentlevelslopenarr
openstringopenstrcharmultilinestrarrayoftables	beginlinekeygroupkeynameiitemkoddbackslash	tripquotejmultikeymultibackslashlinevaluevtypeerrsplitstrquotesplitsquoted
quotesplitgroupsgroupstrgroupretr   r   r	   r2   v   s   






$
$



 
$$










 



r2   Fc             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 ]"}
t|
||||}|d k	r,P q,W d S )Nr   r   ,r   rH   z Invalid inline table encountered)rJ   rI   z-0123456789)truefalserM   rN   rS   rT   z&Invalid inline table value encountered)r]   r[   r^   popr`   rh   rk   )r   ro   r%   r   r   candidate_groupsr   candidate_grouprG   r   r   statusr   r   r	   rj     s2    



rj   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   rG   r   z_.z._r   T0rR   +r   __)r^   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  }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 )NrJ   Fr   rI   r   rF   r   )r]   r[   rh   )r   doublequotesplitsr   r   singlequotesplitsdoublequotesplitr   r   r	   rb     s&    



rb   c             C   s  d}t | }d}x.|D ]&}|s(d|kr(P ||d7 }| }qW | d|}	t|	d }
t|	d rz|	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	rRP |d7 }|	d }| d|}	||	d krt	d|
r~t|	d }
q~W d|	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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t|	d ||
\}}y||	d   t	dW n2 tk
r   |r|||fS |||	d < Y nX d S )Nr   FrH   r   rG   rB   r   rE   rO   rI   rJ   rM   rS   r   r   zInvalid date or numberrF      rP   rQ   rK   rD   zDuplicate keys!)rb   rc   r]   r   _number_with_underscoresre   replacer[   floatr`   
_load_dater\   r^   r_   ri   )r   ro   r%   r   r   ry   r   r   r   pairstrictly_validprev_valr{   rt   r   r   r   r   r	   rk     sr    

6$$"$$6

rk   c             C   s  d}d }yt | 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 ydt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      rR   r   r      r   r   
   r   r   r   r                        )r[   upperindexr
   r   r`   r   )valmicrosecondtzsubsecondvaltzvalsubsecondvalandtz
splitpointr?   r   r   r	   r   '  sB    


(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   rK   rB   r   r   z\Ur   0123456789abcdefzInvalid escape sequence: r?   01234567z). Only scalar unicode points are allowed.r   )r[   r\   lowerr^   r`   unichrr   rU   )vhexbytesprefixskipry   hxhxbhxblenr   r   r	   _load_unicode_escapesM  s:    

r   r   br<   r   rtrJ    rD   rC   rO   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   rK   uUzReserved escape sequence usedT)r[   _escapes_escape_to_escapedcharsr`   )r   ry   	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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|r|dkr"d}qd}qW | 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r0| d dkr0t| dk s$| d | d kr0| dd } | dd dfS | d dkr| d dkrt| dk s|| d | d kr| 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 |st dd}d	}| d dkr.d}| dd  } n| d d krH| dd  } | d!d
} d"| ksrd#| ksrd$| 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   rJ   r   FrB   rF   Tr   rK   zStuff after closed string. WTF?r   r   zReserved escape sequence used)z\uz\Ur   rP   ra   rI   rM   arrayrS   inline_objectdatez<Weirdness with leading zeroes or underscores in your number.r   r   r   rG   rR   eEz,This float is missing digits after the point
0123456789z'This float doesn't have a leading digitr   )r`   r]   r[   rZ   r   r   r   _load_arrayr&   rj   r   r   r   r   )r   r%   r   testvtriplequotetriplequotecountclosedtvr|   ry   r~   
escapeseqsr   r   r   r   parsed_dateitypenegr   r   r	   r_     s    $





*



<.
 r_   c             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   FrP   rK   r   )r[   )rl   ry   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} 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}|rnx|t| d k r| |   }xt|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|t	| | |\}}|r||krt
dn|}|| q|W |S )NrM   r   r   rB   r   FrJ   rI   TrS   r   rF   rK   rT   rP   rQ   rN   zNot a homogeneous array)r^   r]   
startswithr[   rh   r   r4   rf   r\   r_   r`   )ar%   atypern   strarraytmpanew_astart_group_indexend_group_indexin_strbackslash_indexr   abalrq   r~   ry   nval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<   r?   r   r   r	   dumpW  s
    
r   c       	      C   s   d}t | d\}}||7 }x|i kri }x|D ]~}t || ||\}}|sR|s|s|rn|dd dkrn|d7 }|d| d 7 }|r||7 }x |D ]}|| ||d | < qW q.W |}qW |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
    rB   rP   Nz

rD   rM   z]
rR   )_dump_sections)	r   preservern   addtoretvalsectionsnewsectionssectionaddtosectionsrl   r   r   r	   r   l  s$    


r   c             C   s>  d}|dkr |d dkr |d7 }|   }d}x| D ]}t|}|}td|std|krhd| d }nd| d }t| | tsd}t| | trx| | D ]}	t|	trd}qW |rx| | D ]}	d	}
|d
| | d 7 }t|	|| \}}|r|d dkr|
|7 }
n||7 }x|i kri }xz|D ]r}t|| || d | \}}|r||
d| | d | d 7 }
|
|7 }
x"|D ]}|| ||d | < qW q0W |}qW ||
7 }qW n.| | d k	r*||d tt| |  d	 7 }q4|rt| | t	r||d t
| |  7 }q4| | ||< q4W ||7 }||fS )NrB   r   rR   z^[A-Za-z0-9_-]+$rJ   rI   FTrD   z[[z]]
r   rM   z]
z = )	__class__rU   rere   r.   dictr4   r   _dump_valuer#   _dump_inline_table)r   supr   retstrretdictarraystrr   qsectionru   r   arraytabstrrl   r?   newddsecs1d1r   r   r	   r     s`    



 
 r   c             C   sl   d}t | tr\g }x.|  D ]"\}}t|}||d |  qW |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
    rB   z = z{ z, z }
N)r.   r   itemsr   rh   r\   rU   r   )r   rn   val_listr{   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 )N)rU   r   )r   r   r   r	   r    r  c             S   s   |   ddS )Nz+00:00r   )	isoformatr   )r   r   r   r	   r    r  __iter__)ra   	_dump_strrU   r4   
_dump_listr   r   r   _dump_floatr   gettypehasattr)r   
dump_funcsdump_fnr   r   r	   r     s    r   c             C   s`  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} xt	| dkrJd
}| d s| dd  } | d dd| d< | d | dk}x6| d d | r| d | dkr| }|d8 }qW |r"d}nd}| d | | d  g| dd   } qW t
d	| d  d	 S )N)r   rV   zutf-8z%rr   r   r   rI   rJ   r   z\'z\"z\xz\\rK   xu00rF   )sysversion_infor  r.   ra   rV   r   r   r]   r[   rU   )r   singlequotery   joinxjoinerr   r   r	   r    s4    


&&r  c             C   s6   d}x$| D ]}|dt t| d 7 }q
W |d7 }|S )NrM   rE   r   rN   )rU   r   )r   rn   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   r0   r   r5   r   r  __version___spec_	Exceptionr   tzinfor
   objectr#   r&   xrangerf   	NameErrorra   rU   ranger/   chrr   FileNotFoundErrorr7   IOErrorr   r9   compilerd   r2   rj   r   r   rb   rk   r   r   r   _escapedcharszipr   r   r_   r   r   r   r   r   r   r   r  r  r  r   r   r   r	   <module>   sd   


.
  $ 

?&#
cW
 
7