t_&@s#ddlZddlZddlZddlmZddlmZejdkrYeZ dddZ dddZ d d Z d d Z d dZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZdS)N)Decimal)InlineTableDictcCs8|jstdt|d|}|j||S)aWrites 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 descriptorencoder)write TypeErrordumps)ofrdr /builddir/build/BUILDROOT/alt-python35-pip-20.2.4-1.el7.x86_64/opt/alt/python35/lib/python3.5/site-packages/pip/_vendor/toml/encoder.pydump s    rc Cskd}|dkr!t|j}|j|d\}}||7}t|g}x|rfdd|D}x&|D]}||krutdquW||7}|j}x|D]} |j|| | \}} |s| r2| r2|r|d ddkr|d7}|d | d 7}|r2||7}x$| D]} | | || d | >> 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 ' ``` NcSsg|]}t|qSr )id).0sectionr r r @s zdumps..zCircular reference detectedz  [z] .) TomlEncoder __class__ dump_sectionsr ValueErrorget_empty_table) r rretval addtoretvalsections outer_objs section_ids outer_obj newsectionsr addtosectionssr r r r"s4            rcCstjdkr<t|dr<t|tr<|jd}d|}|ddkrf|dd}|jd}|s|jd r|dd}|r|jd d}|jd d }|jd }xt |dkrd}|ds|dd}|djd d|d<|d|dk}x=|dd|ru|d|dkru| }|d8}q9W|rd}nd}|d||dg|dd}qWt d |dd S)Nrdecodezutf-8z%rru'"z\'z\"z\xz\\\xu00r)rr/) sys version_infohasattr isinstancestrr' startswithreplacesplitlenunicode)v singlequoteijoinxjoinerr r r _dump_strVs4-  + +r?cCs%dj|jddjddS)Nz{}ze+0ze+ze-0ze-)formatr6)r:r r r _dump_floatusrAcCs6|j}|dkr"|jS|jddS)Ni) utcoffset isoformat)r:rCr r r _dump_timeys   rEc@s^eZdZedddZddZddZdd Zd d Zd d Z dS)rFcCs||_||_ttttt|jtddtddt t t t t j ddt j tt jddi |_dS)NcSst|jS)N)r9lower)r:r r r sz&TomlEncoder.__init__..cSs|S)Nr )r:r r r rGscSs|jjddS)Nz+00:00Z)rDr6)r:r r r rGscSs |jS)N)rD)r:r r r rGs)_dictpreserver4r?r9list dump_listboolintfloatrArdatetimetimerEdate dump_funcs)selfrIrJr r r __init__s      zTomlEncoder.__init__cCs |jS)N)rI)rTr r r rszTomlEncoder.get_empty_tablecCsFd}x/|D]'}|dt|j|d7}q W|d7}|S)Nr ,])r9 dump_value)rTr:rr(r r r rLs  % zTomlEncoder.dump_listcCsd}t|tr{g}x>|jD]0\}}|j|}|j|d|q(W|ddj|d7}|St|j|SdS)zPreserve inline table in its compact syntax instead of expanding into subsection. https://github.com/toml-lang/toml#user-content-inline-table rz = z{ z, z } N)r3dictitemsdump_inline_tableappendjoinr9rY)rTrrval_listkr:valr r r r\szTomlEncoder.dump_inline_tablecCsg|jjt|}|dkr@t|dr@|jt}|dk rV||S|jt|S)N__iter__)rSgettyper2rKr4)rTr:dump_fnr r r rYs zTomlEncoder.dump_valuecCsd}|dkr,|ddkr,|d7}|j}d}xV|D]N}t|}|}tjd|s{t|}t||tsGd}t||trx'||D]} t| trd}qW|r xj||D]"} d} |d||d 7}|j| ||\} } | rM| d d krC| | 7} n || 7}x| r|j} x| D]}|j| |||d|\}}|r| d ||d|d 7} | |7} x$|D]}||| |d|.)pip._vendor.toml.decoderrrxrrUrS)rTrIrJr)r)rTr rU sz#TomlPreserveCommentEncoder.__init__)rtrurvrZrUr r )rr rs rcs.eZdZddZfddZS)TomlPathlibEncodercCstt|S)N)r?r4)rTr:r r r _dump_pathlib_path(sz%TomlPathlibEncoder._dump_pathlib_pathcsOdtjkr9ddl}t||jr9t|}tt|j|S)Nrr)rr) r0r1pathlibr3PurePathr4rxrrY)rTr:r)rr r rY+s   zTomlPathlibEncoder.dump_value)rtrurvrrYr r )rr r&s  r)r)rPrfr0decimalrrrr1r4r9rrr?rArEobjectrrwryr~rrr r r r s"   4   k