
(h&                 @   s#  d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l m Z e j d k rY e Z	 d d d  Z
 d d d  Z d	 d
   Z d d   Z d d   Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z d S)    N)Decimal)InlineTableDict   c             C   s8   | j  s t d   t |  d | } | j  |  | S)a  Writes out dict as toml to a file

    Args:
        o: Object to dump into toml
        f: File descriptor where the toml should be stored
        encoder: The ``TomlEncoder`` to use for constructing the output string

    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encoder)write	TypeErrordumps)ofr   d r   7/tmp/pip-build-kmztzv_d/pip/pip/_vendor/toml/encoder.pydump   s
    	r   c             C   sq  d } | d k r! t  |  j  } | j |  d  \ } } | | 7} t |   g } x| rld d   | j   D } x& | D] } | | k r{ t d   q{ W| | 7} | j   } x | D] }	 | j | |	 |	  \ } }
 | s | r8|
 r8| r| d d  d k r| d 7} | d	 |	 d
 7} | r8| | 7} x$ |
 D] } |
 | | |	 d | <q?Wq W| } qU W| S)a  Stringifies input dict as toml

    Args:
        o: Object to dump into toml
        encoder: The ``TomlEncoder`` to use for constructing the output string

    Returns:
        String containing the toml corresponding to dict

    Examples:
        ```python
        >>> import toml
        >>> output = {
        ... 'a': "I'm a string",
        ... 'b': ["I'm", "a", "list"],
        ... 'c': 2400
        ... }
        >>> toml.dumps(output)
        'a = "I'm a string"
b = [ "I'm", "a", "list",]
c = 2400
'
        ```
     Nc             S   s   g  |  ] } t  |   q Sr   )id).0sectionr   r   r   
<listcomp>@   s   	 zdumps.<locals>.<listcomp>zCircular reference detected   z


[z]
.)TomlEncoder	__class__dump_sectionsr   values
ValueErrorget_empty_table)r	   r   retvalZaddtoretvalsectionsZ
outer_objsZsection_idsZ	outer_objZnewsectionsr   Zaddtosectionssr   r   r   r   "   s4    
	



r   c             C   s  t  j d k  r< t |  d  r< t |  t  r< |  j d  }  d |  }  |  d d k rf |  d d   }  |  j d  } | s |  j d	  r |  d d  }  | r |  j d
 d  }  |  j d	 d  }  |  j d  }  x t	 |   d k rd } |  d s|  d d   }  |  d j d d  |  d <|  d | d k } x= |  d d  |  ru|  d | d k ru| } | d 8} q9W| rd } n d } |  d | |  d g |  d d   }  q Wt
 d	 |  d d	  S)Nr   decodezutf-8z%rr   u   '"z\'z\"z\xz\\\xZu00r   )r   r)   )sysversion_infohasattr
isinstancestrr"   
startswithreplacesplitlenunicode)vZsinglequoteiZjoinxZjoinerr   r   r   	_dump_strV   s4    -

+	+r6   c             C   s%   d j  |   j d d  j d d  S)Nz{}ze+0ze+ze-0ze-)formatr0   )r4   r   r   r   _dump_floatu   s    r8   c             C   s6   |  j    } | d  k r" |  j   S|  j   d  d  S)N   i)	utcoffset	isoformat)r4   r:   r   r   r   
_dump_timey   s    
r<   c               @   s^   e  Z d  Z e d d d  Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d S)r   Fc             C   s   | |  _  | |  _ t t t t t |  j t d d   t d d   t	 t
 t t
 t j d d   t j t t j d d   i
 |  _ d  S)Nc             S   s   t  |   j   S)N)r3   lower)r4   r   r   r   <lambda>   s    z&TomlEncoder.__init__.<locals>.<lambda>c             S   s   |  S)Nr   )r4   r   r   r   r>      s    c             S   s   |  j    j d d  S)Nz+00:00Z)r;   r0   )r4   r   r   r   r>      s    c             S   s
   |  j    S)N)r;   )r4   r   r   r   r>      s    )_dictpreserver.   r6   r3   list	dump_listboolintfloatr8   r   datetimetimer<   date
dump_funcs)selfr@   rA   r   r   r   __init__   s    				zTomlEncoder.__init__c             C   s
   |  j    S)N)r@   )rK   r   r   r   r      s    zTomlEncoder.get_empty_tablec             C   sF   d } x/ | D]' } | d t  |  j |   d 7} q W| d 7} | S)Nr    ,])r3   
dump_value)rK   r4   r   r#   r   r   r   rC      s
    %
zTomlEncoder.dump_listc             C   s   d } t  | t  r{ g  } x> | j   D]0 \ } } |  j |  } | j | d |  q( W| d d j |  d 7} | St |  j |   Sd 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joinr3   rP   )rK   r   r   Zval_listkr4   valr   r   r   rS      s    zTomlEncoder.dump_inline_tablec             C   sg   |  j  j t |   } | d  k r@ t | d  r@ |  j  t } | d  k	 rV | |  S|  j  t |  S)N__iter__)rJ   gettyper,   rB   r.   )rK   r4   Zdump_fnr   r   r   rP      s    zTomlEncoder.dump_valuec             C   s  d } | d k r, | d d k r, | d 7} |  j    } d } xV| D]N} t |  } | } t j d |  s{ t |  } t | | t  sGd } t | | t  r x' | | D] }	 t |	 t  r d } q W| rxj| | D]"}	 d }
 | d | | d	 7} |  j |	 | |  \ } } | rM| d
 d k rC|
 | 7}
 n
 | | 7} x | r|  j    } x | D] } |  j | | | | d |  \ } } | r|
 d | | d | d 7}
 |
 | 7}
 x$ | D] } | | | | d | <qWqiW| } qPW| |
 7} q Wq| | d  k	 r| | d t |  j	 | |   d 7} qE |  j
 rt | | t  r| | d |  j | |  7} qE | | | | <qE W| | 7} | | f S)Nr   r$   r   z^[A-Za-z0-9_-]+$FTr   z[[z]]
r   r   z]
z = r)   )r@   r3   rematchr6   r-   rQ   rB   r   rP   rA   r   rS   )rK   r	   supZretstrZretdictZarraystrr   ZqsectionZarrayoftablesaZarraytabstrr!   r   ZnewdZdsecs1Zd1r   r   r   r      s`    


	

)

zTomlEncoder.dump_sectionsN)
__name__
__module____qualname__rQ   rL   r   rC   rS   rP   r   r   r   r   r   r      s   r   c                   s%   e  Z d  Z e   f d d  Z   S)TomlPreserveInlineDictEncoderc                s   t  t |   j | d  d  S)NT)superrc   rL   )rK   r@   )r   r   r   rL      s    z&TomlPreserveInlineDictEncoder.__init__)r`   ra   rb   rQ   rL   r   r   )r   r   rc      s   rc   c                   s7   e  Z d  Z e d d   f d d  Z d d   Z   S)TomlArraySeparatorEncoderFrN   c                s`   t  t |   j | |  | j   d k r8 d | } n | j d  rS t d   | |  _ d  S)Nr   rN   z 	
,zInvalid separator for arrays)rd   re   rL   stripr   	separator)rK   r@   rA   rg   )r   r   r   rL      s    z"TomlArraySeparatorEncoder.__init__c             C   s   g  } d } x$ | D] } | j  |  j |   q Wxx | g  k r g  } xY | D]Q } t | t  r x9 | D] } | j  |  qk WqO | d t |  |  j 7} qO W| } q6 W| d 7} | S)Nr   rM   rO   )rT   rP   r-   rB   r3   rg   )rK   r4   tr   r#   r!   rr   r   r   rC      s    

z#TomlArraySeparatorEncoder.dump_list)r`   ra   rb   rQ   rL   rC   r   r   )r   r   re      s   re   c                   s4   e  Z d  Z e d   f d d  Z d d   Z   S)TomlNumpyEncoderFc                s   d d  l  } t t |   j | |  t |  j | j <t |  j | j <t |  j | j <|  j	 |  j | j
 <|  j	 |  j | j <|  j	 |  j | j <d  S)Nr   )Znumpyrd   rj   rL   r8   rJ   Zfloat16Zfloat32Zfloat64	_dump_intZint16Zint32Zint64)rK   r@   rA   np)r   r   r   rL     s    zTomlNumpyEncoder.__init__c             C   s   d j  t |   S)Nz{})r7   rE   )rK   r4   r   r   r   rk     s    zTomlNumpyEncoder._dump_int)r`   ra   rb   rQ   rL   rk   r   r   )r   r   rj     s   
rj   c                   s(   e  Z d  Z e d   f d d  Z   S)TomlPreserveCommentEncoderFc                sF   d d l  m } t t    j | |    f d d     j | <d  S)Nr   )CommentValuec                s   |  j    j  S)N)r   rP   )r4   )rK   r   r   r>   #  s    z5TomlPreserveCommentEncoder.__init__.<locals>.<lambda>)pip._vendor.toml.decoderrn   rd   rm   rL   rJ   )rK   r@   rA   rn   )r   )rK   r   rL      s    z#TomlPreserveCommentEncoder.__init__)r`   ra   rb   rQ   rL   r   r   )r   r   rm     s   rm   c                   s.   e  Z d  Z d d   Z   f d d   Z   S)TomlPathlibEncoderc             C   s   t  t |   S)N)r6   r.   )rK   r4   r   r   r   _dump_pathlib_path(  s    z%TomlPathlibEncoder._dump_pathlib_pathc                sO   d t  j k r9 d d  l } t | | j  r9 t |  } t t |   j |  S)Nr      r   )r   rr   )	r*   r+   pathlibr-   ZPurePathr.   rd   rp   rP   )rK   r4   rs   )r   r   r   rP   +  s
    zTomlPathlibEncoder.dump_value)r`   ra   rb   rq   rP   r   r   )r   r   rp   &  s   rp   )r   )rG   r[   r*   decimalr   ro   r   r+   r.   r3   r   r   r6   r8   r<   objectr   rc   re   rj   rm   rp   r   r   r   r   <module>   s"   4k