o
    ל_&                     @   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reZ	d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G dd deZG dd deZG dd deZdS )    N)Decimal)InlineTableDict   c                 C   s(   |j stdt| |d}| | |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   0usr/lib/python3.10/site-packages/toml/encoder.pydump   s
   
r   c                 C   s  d}|du rt | j}|| d\}}||7 }t| g}|rdd | D }|D ]
}||v r3tdq)||7 }| }|D ]=}	|||	 |	\}}
|sP|sl|
sl|r^|dd dkr^|d7 }|d	|	 d
 7 }|rl||7 }|
D ]}|
| ||	d | < qnq>|}|s|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S r   )id).0sectionr   r   r   
<listcomp>@   s    zdumps.<locals>.<listcomp>zCircular reference detectedz


[]
.)TomlEncoder	__class__dump_sectionsr   values
ValueErrorget_empty_table)r
   r   retvaladdtoretvalsections
outer_objssection_ids	outer_objnewsectionsr   addtosectionssr   r   r   r	   "   s<   

r	   c                 C   sx  t jdk rt| drt| tr| d} d|  } | d dkr$| dd  } | d}|s0| d	r6| dd
 } |rD| dd} | d	d} | d} t	| dkrd
}| d s[| dd  } | d dd| d< | d | dk}| d d | r| d | dkr| }|d8 }| d d | r| d | dks}|rd}nd}| d | | d  g| dd   } t	| dksOt
d	| d  d	 S )Nr   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_strV   s8   


  "rB   c                 C   s   d | ddddS )N{}ze+0ze+ze-0ze-)formatr9   r=   r   r   r   _dump_floatu   s   rF   c                 C   s(   |   }|d u r|  S |  d d S )Ni)	utcoffset	isoformat)r=   rG   r   r   r   
_dump_timey   s   rI   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   sV   || _ || _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 |  S N)r<   lowerrE   r   r   r   <lambda>       z&TomlEncoder.__init__.<locals>.<lambda>c                 S   s   | S rJ   r   rE   r   r   r   rL      s    c                 S   s   |   ddS )Nz+00:00Z)rH   r9   rE   r   r   r   rL      s    c                 S      |   S rJ   )rH   rE   r   r   r   rL      s    )_dictpreserver7   rB   r<   list	dump_listboolintfloatrF   r   datetimetimerI   date
dump_funcs)selfrP   rQ   r   r   r   __init__   s   


zTomlEncoder.__init__c                 C   rO   rJ   )rP   r[   r   r   r   r      s   zTomlEncoder.get_empty_tablec                 C   s4   d}|D ]}|dt | | d 7 }q|d7 }|S )Nr    ,])r<   
dump_value)r[   r=   r    r*   r   r   r   rS      s
   zTomlEncoder.dump_listc                 C   sh   d}t |tr-g }| D ]\}}| |}||d |  q|dd| d 7 }|S t| |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 }
)r6   dictitemsdump_inline_tableappendjoinr<   ra   )r[   r   r    val_listkr=   valr   r   r   re      s   

zTomlEncoder.dump_inline_tablec                 C   sJ   | j t|}|d u rt|dr| j t }|d ur||S | j t |S )N__iter__)rZ   gettyper5   rR   r7   )r[   r=   dump_fnr   r   r   ra      s   
zTomlEncoder.dump_valuec                 C   s  d}|dkr|d dkr|d7 }|   }d}|D ]}t|}|}td|s*t|}t|| tsd}t|| trH|| D ]	}	t|	trGd}q>|r|| D ]o}	d}
|d| | d	 7 }| |	|| \}}|rw|d
 dkrs|
|7 }
n||7 }|r|   }|D ]5}| || || d | \}}|r|
d| | d | d 7 }
|
|7 }
|D ]}|| ||d | < qq|}|sy||
7 }qNq|| d ur||d t| 	||  d 7 }q| j
rt|| tr||d | ||  7 }q|| ||< q||7 }||fS )Nr   r.   r   z^[A-Za-z0-9_-]+$FTr   z[[z]]
r   r   r   rb   )rP   r<   rematchrB   r6   rc   rR   r   ra   rQ   r   re   )r[   r
   supretstrretdictarraystrr   qsectionarrayoftablesaarraytabstrr(   r   newddsecs1d1r   r   r   r      s   



zTomlEncoder.dump_sectionsN)
__name__
__module____qualname__rc   r\   r   rS   re   ra   r   r   r   r   r   r      s    r   c                       s    e Zd Zef fdd	Z  ZS )TomlPreserveInlineDictEncoderc                    s   t t| |d d S )NT)superr   r\   )r[   rP   r   r   r   r\      s   z&TomlPreserveInlineDictEncoder.__init__r}   r~   r   rc   r\   __classcell__r   r   r   r   r      s    r   c                       s,   e Zd Zeddf fdd	Zdd Z  ZS )TomlArraySeparatorEncoderFr_   c                    sD   t t| || | dkrd| }n	|drtd|| _d S )Nr   r_   z 	
,zInvalid separator for arrays)r   r   r\   stripr   	separator)r[   rP   rQ   r   r   r   r   r\      s   


z"TomlArraySeparatorEncoder.__init__c                 C   s   g }d}|D ]
}| | | q|g kr=g }|D ]}t|tr+|D ]}| | q"q|dt| | j 7 }q|}|g ks|d7 }|S )Nr   r^   r`   )rf   ra   r6   rR   r<   r   )r[   r=   tr    r*   r(   rr   r   r   rS      s    
	z#TomlArraySeparatorEncoder.dump_list)r}   r~   r   rc   r\   rS   r   r   r   r   r   r      s    r   c                       s*   e Zd Zedf fdd	Zdd Z  ZS )TomlNumpyEncoderFc                    sl   dd l }tt| || t| j|j< t| j|j< t| j|j< | j	| j|j
< | j	| j|j< | j	| j|j< d S )Nr   )numpyr   r   r\   rF   rZ   float16float32float64	_dump_intint16int32int64)r[   rP   rQ   npr   r   r   r\     s   zTomlNumpyEncoder.__init__c                 C   s   d t|S )NrC   )rD   rU   r[   r=   r   r   r   r     s   zTomlNumpyEncoder._dump_int)r}   r~   r   rc   r\   r   r   r   r   r   r   r     s    
r   c                       s"   e Zd Zedf fdd	Z  ZS )TomlPreserveCommentEncoderFc                    s4   ddl m} tt ||  fdd j|< d S )Nr   )CommentValuec                    s   |   jS rJ   )r   ra   rE   r]   r   r   rL   #  rM   z5TomlPreserveCommentEncoder.__init__.<locals>.<lambda>)toml.decoderr   r   r   r\   rZ   )r[   rP   rQ   r   r   r]   r   r\      s   z#TomlPreserveCommentEncoder.__init__r   r   r   r   r   r     s    r   c                       s$   e Zd Zdd Z fddZ  ZS )TomlPathlibEncoderc                 C   s   t t|S rJ   )rB   r7   r   r   r   r   _dump_pathlib_path(  s   z%TomlPathlibEncoder._dump_pathlib_pathc                    s6   dt jkrdd l}t||jrt|}tt| |S )N)r      r   )	r3   r4   pathlibr6   PurePathr7   r   r   ra   )r[   r=   r   r   r   r   ra   +  s
   
zTomlPathlibEncoder.dump_value)r}   r~   r   r   ra   r   r   r   r   r   r   &  s    r   rJ   )rW   ro   r3   decimalr   r   r   r4   r7   r<   r   r	   rB   rF   rI   objectr   r   r   r   r   r   r   r   r   r   <module>   s$    


4k