
0c@_&                 @   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-jynh7p1z/pip/pip/_vendor/toml/encoder.pydump   s
    	r   c             C   sk  d } | d k r! t  |  j  } | j |  d  \ } } | | 7} t |   g } x| rfd d   | D } x& | D] } | | k ru t d   qu W| | 7} | j   } x | D] }	 | j | |	 |	  \ } }
 | s | r2|
 r2| r| d d  d k r| d 7} | d	 |	 d
 7} | r2| | 7} x$ |
 D] } |
 | | |	 d | <q9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   
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    -

+	+r5   c             C   s%   d j  |   j d d  j d d  S)Nz{}ze+0ze+ze-0ze-)formatr/   )r3   r   r   r   _dump_floatu   s    r7   c             C   s6   |  j    } | d  k r" |  j   S|  j   d  d  S)N   i)	utcoffset	isoformat)r3   r9   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)r2   lower)r3   r   r   r   <lambda>   s    z&TomlEncoder.__init__.<locals>.<lambda>c             S   s   |  S)Nr   )r3   r   r   r   r=      s    c             S   s   |  j    j d d  S)Nz+00:00Z)r:   r/   )r3   r   r   r   r=      s    c             S   s
   |  j    S)N)r:   )r3   r   r   r   r=      s    )_dictpreserver-   r5   r2   list	dump_listboolintfloatr7   r   datetimetimer;   date
dump_funcs)selfr?   r@   r   r   r   __init__   s    				zTomlEncoder.__init__c             C   s
   |  j    S)N)r?   )rJ   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    ,])r2   
dump_value)rJ   r3   r   r"   r   r   r   rB      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joinr2   rO   )rJ   r   r   Zval_listkr3   valr   r   r   rR      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__)rI   gettyper+   rA   r-   )rJ   r3   Zdump_fnr   r   r   rO      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?   r2   rematchr5   r,   rP   rA   r   rO   r@   r   rR   )rJ   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__rP   rK   r   rB   rR   rO   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)superrb   rK   )rJ   r?   )r   r   r   rK      s    z&TomlPreserveInlineDictEncoder.__init__)r_   r`   ra   rP   rK   r   r   )r   r   rb      s   rb   c                   s7   e  Z d  Z e d d   f d d  Z d d   Z   S)TomlArraySeparatorEncoderFrM   c                s`   t  t |   j | |  | j   d k r8 d | } n | j d  rS t d   | |  _ d  S)Nr   rM   z 	
,zInvalid separator for arrays)rc   rd   rK   stripr   	separator)rJ   r?   r@   rf   )r   r   r   rK      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   rL   rN   )rS   rO   r,   rA   r2   rf   )rJ   r3   tr   r"   r    rr   r   r   rB      s    

z#TomlArraySeparatorEncoder.dump_list)r_   r`   ra   rP   rK   rB   r   r   )r   r   rd      s   rd   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numpyrc   ri   rK   r7   rI   Zfloat16Zfloat32Zfloat64	_dump_intZint16Zint32Zint64)rJ   r?   r@   np)r   r   r   rK     s    zTomlNumpyEncoder.__init__c             C   s   d j  t |   S)Nz{})r6   rD   )rJ   r3   r   r   r   rj     s    zTomlNumpyEncoder._dump_int)r_   r`   ra   rP   rK   rj   r   r   )r   r   ri     s   
ri   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   rO   )r3   )rJ   r   r   r=   #  s    z5TomlPreserveCommentEncoder.__init__.<locals>.<lambda>)pip._vendor.toml.decoderrm   rc   rl   rK   rI   )rJ   r?   r@   rm   )r   )rJ   r   rK      s    z#TomlPreserveCommentEncoder.__init__)r_   r`   ra   rP   rK   r   r   )r   r   rl     s   rl   c                   s.   e  Z d  Z d d   Z   f d d   Z   S)TomlPathlibEncoderc             C   s   t  t |   S)N)r5   r-   )rJ   r3   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   rq   )	r)   r*   pathlibr,   ZPurePathr-   rc   ro   rO   )rJ   r3   rr   )r   r   r   rO   +  s
    zTomlPathlibEncoder.dump_value)r_   r`   ra   rp   rO   r   r   )r   r   ro   &  s   ro   )r   )rF   rZ   r)   decimalr   rn   r   r*   r-   r2   r   r   r5   r7   r;   objectr   rb   rd   ri   rl   ro   r   r   r   r   <module>   s"   4k