B
    `d                 @   s   d dl Z d dlZd dlZd dlmZ ejdkr2eZdd ZdddZ	dd	 Z
d
d Zdd ZG dd deZG dd deZG dd deZdS )    N)InlineTableDict)   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)write	TypeErrordumps)ofd r
   </tmp/pip-unpacked-wheel-hu9qqap1/pip/_vendor/toml/encoder.pydump   s
    
r   c       	      C   s   d}|dkrt | j}|| d\}}||7 }x|r| }x|D ]~}||| |\}}|sf|s|s|r|dd dkr|d7 }|d| d 7 }|r||7 }x |D ]}|| ||d | < qW qBW |}q0W |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
     Nz


[z]
.)TomlEncoder	__class__dump_sectionsget_empty_table)	r   encoderretvaladdtoretvalsectionsnewsectionssectionaddtosectionssr
   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   decodezutf-8z%rr   u   '"z\'z\"z\xz\\\xu00   )sysversion_infohasattr
isinstancestrr   
startswithreplacesplitlenunicode)vsinglequoteijoinxjoinerr
   r
   r   	_dump_strC   s4    


&&r7   c             C   s   d | ddddS )Nz{0:.16}ze+0ze+ze-0ze-)formatr.   )r2   r
   r
   r   _dump_floatb   s    r9   c             C   s(   |   }|d kr|  S |  d d S )Ni)	utcoffset	isoformat)r2   r:   r
   r
   r   
_dump_timef   s    r<   c               @   sB   e Zd ZedfddZdd Zdd Zdd	 Zd
d Zdd Z	dS )r   Fc             C   sR   || _ || _ttttt| jtdd tdd t	t
tjdd tjttjdd i	| _d S )Nc             S   s   t |  S )N)r1   lower)r2   r
   r
   r   <lambda>w       z&TomlEncoder.__init__.<locals>.<lambda>c             S   s   | S )Nr
   )r2   r
   r
   r   r>   x   r?   c             S   s   |   ddS )Nz+00:00Z)r;   r.   )r2   r
   r
   r   r>   z   r?   c             S   s   |   S )N)r;   )r2   r
   r
   r   r>   |   r?   )_dictpreserver,   r7   r1   list	dump_listboolintfloatr9   datetimetimer<   date
dump_funcs)selfrA   rB   r
   r
   r   __init__p   s    
zTomlEncoder.__init__c             C   s   |   S )N)rA   )rL   r
   r
   r   r      s    zTomlEncoder.get_empty_tablec             C   s8   d}x&|D ]}|dt | | d 7 }q
W |d7 }|S )Nr    ,])r1   
dump_value)rL   r2   r   r   r
   r
   r   rD      s
    
zTomlEncoder.dump_listc             C   sp   d}t |tr^g }x0| D ]$\}}| |}||d |  qW |dd| d 7 }|S 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
        r   z = z{ z, z }
N)r+   dictitemsdump_inline_tableappendjoinr1   rQ   )rL   r   r   val_listkr2   valr
   r
   r   rT      s    

zTomlEncoder.dump_inline_tablec             C   sJ   | j t|}|d kr,t|dr,| j t }|d k	r<||S | j t |S )N__iter__)rK   gettyper*   rC   r,   )rL   r2   dump_fnr
   r
   r   rQ      s    
zTomlEncoder.dump_valuec             C   sJ  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 |rĐx4|| D ]}	d	}
|d
| | d 7 }| |	|| \}}|r|d dkr|
|7 }
n||7 }x|r|   }x||D ]t}| || || d | \}}|r|
d| | d | d 7 }
|
|7 }
x"|D ]}|| ||d | < qW q4W |}q W ||
7 }qW n0|| d k	r6||d t| ||  d	 7 }q4| j	r*t|| t
r*||d | ||  7 }q4|| ||< q4W ||7 }||fS )Nr   r#   r   z^[A-Za-z0-9_-]+$r"   r!   FTr   z[[z]]
r   r   z]
z = )rA   r1   rematchr+   rR   rC   r   rQ   rB   r   rT   )rL   r   supretstrretdictarraystrr   qsectionarrayoftablesaarraytabstrr   r	   newddsecs1d1r
   r
   r   r      sd    





 
"zTomlEncoder.dump_sectionsN)
__name__
__module____qualname__rR   rM   r   rD   rT   rQ   r   r
   r
   r
   r   r   n   s   r   c                   s    e Zd Zef fdd	Z  ZS )TomlPreserveInlineDictEncoderc                s   t t| |d d S )NT)superro   rM   )rL   rA   )r   r
   r   rM      s    z&TomlPreserveInlineDictEncoder.__init__)rl   rm   rn   rR   rM   __classcell__r
   r
   )r   r   ro      s   ro   c                   s,   e Zd Zeddf fdd	Zdd Z  ZS )TomlArraySeparatorEncoderFrO   c                sD   t t| || | dkr(d| }n|dr:td|| _d S )Nr   rO   z 	
,zInvalid separator for arrays)rp   rr   rM   strip
ValueError	separator)rL   rA   rB   ru   )r   r
   r   rM      s    

z"TomlArraySeparatorEncoder.__init__c             C   s   g }d}x|D ]}| | | qW x\|g krg }xF|D ]>}t|trbx.|D ]}| | qNW q:|dt| | j 7 }q:W |}q(W |d7 }|S )Nr   rN   rP   )rU   rQ   r+   rC   r1   ru   )rL   r2   tr   r   r   rr
   r
   r   rD      s    




z#TomlArraySeparatorEncoder.dump_list)rl   rm   rn   rR   rM   rD   rq   r
   r
   )r   r   rr      s   rr   )N)rH   r^   r(   pip._vendor.toml.decoderr   r)   r,   r1   r   r   r7   r9   r<   objectr   ro   rr   r
   r
   r
   r   <module>   s   

#m