a oeiX @sDddlmZddlmZddlZddlmZddlmZm Z m Z ddl m Z m Z mZmZmZmZddlmZmZmZed d ed Deed BZeed ZeedZeZeZeZedZeedBZ eej!ej"dZ#e#edBZ$eej%Z&edd ddddddZ'Gddde(Z)e*dddddd d!Z+e*dd"ddd#d$d%Z,Gd&d'd'Z-Gd(d)d)Z.Gd*d+d+e Z/d"d,d-d,d.d/d0Z0d"d,d"d1d2d,d3d4d5Z1d"d,d,d6d7d8Z2d"d,d,d6d9d:Z3d"d,d+d;d<d=d>Z4d"d,d+d;d<d?d@Z5d"d,d+dAdd,dBdCdDZ6d"d,ddEdFdGdHZ7d"d,d;d6dIdJZ8d"d,dKd6dLdMZ9d"d,dKd6dNdOZ:d"d,ddPdFdQdRZ;d"d,ddSdFdTdUZd"d,d]dKd^d_d`Z?d"d,dKd6dadbZ@d"d,d2dKdcdddeZAd"d,d2dKdXdfdgZBd"d,ddhdFdidjZCd"d,d"ddkdldmZDd]d2dndodpZEdddqdrdsZFdS)t) annotations)IterableN)MappingProxyType)AnyBinaryIO NamedTuple) RE_DATETIME RE_LOCALTIME RE_NUMBERmatch_to_datetimematch_to_localtimematch_to_number)Key ParseFloatPosccs|]}t|VqdSN)chr.0irAC:\Program Files\Certbot\pkgs\setuptools\_vendor\tomli\_parser.py r  z z  z-_z"'  "\)z\bz\tz\nz\fz\rz\"z\\c@seZdZdZdS)TOMLDecodeErrorz0An error raised if a document is not valid TOML.N)__name__ __module__ __qualname____doc__rrrrr$5sr$ parse_floatrrzdict[str, Any])__fpr*returncCs>|}z |}Wnty0tddYn0t||dS)z%Parse TOML from a binary file object.zEFile must be opened in binary mode, e.g. use `open('foo.toml', 'rb')`Nr))readdecodeAttributeError TypeErrorloads)r+r*bsrrrload9s  r4str)__sr*r,cCsx|dd}d}ttt}d}t|}t||t}z ||}WntyZYqpYn0|dkrn|d7}q*|tvrt |||||}t||t}n|dkrz||d}Wntyd}Yn0|j |dkrt |||\}}nt |||\}}t||t}n|dkrt||d t||}z ||}WntyNYqpYn0|dkrft||d |d7}q*|jjS) zParse TOML from a string.z rrrr[N#zInvalid statementz5Expected newline or end of document after a statement)replaceOutput NestedDictFlagsmake_safe_parse_float skip_charsTOML_WS IndexErrorKEY_INITIAL_CHARSkey_value_ruleflagsfinalize_pendingcreate_list_rulecreate_dict_rule suffixed_err skip_commentdatadict)r6r*srcposoutheadercharZ second_charrrrr1EsN                r1c@s|eZdZdZdZdZddddZdd dd d d Zddd dZdddddZ dd dddddZ dd dd ddZ dS)r<z)Flags that map to parsed keys/namespaces.rrNoner,cCsi|_t|_dSr)_flagsset_pending_flagsselfrrr__init__szFlags.__init__rint)keyflagr,cCs|j||fdSr)rTaddrVrYrZrrr add_pendingszFlags.add_pendingcCs.|jD]\}}|j||ddq|jdS)NF recursive)rTrSclearr\rrrrDszFlags.finalize_pendingrYr,cCsF|j}|ddD]}||vr$dS||d}q||dddS)Nnested)rRpop)rVrYcontkrrr unset_alls zFlags.unset_allbool)rYrZr_r,cCs|j}|dd|d}}|D],}||vr@ttid||<||d}q ||vrjttid||<|||rxdnd|dS)Nrb)rCrecursive_flagsrcrcrirC)rRrSr[)rVrYrZr_re key_parentkey_stemrfrrrrSsz Flags.setcCs|sdS|j}|ddD]4}||vr,dS||}||dvrFdS|d}q|d}||vr||}||dvp~||dvSdS)NFrbriTrcrC)rR)rVrYrZrerfZ inner_contrkrrris_s  z Flags.is_N) r%r&r'r(FROZEN EXPLICIT_NESTrWr]rDrgrSrlrrrrr<s r<c@sBeZdZddddZddddd d d d Zddd ddZdS)r;rPrQcCs i|_dSr)rJrUrrrrWszNestedDict.__init__T access_listsrrhrJ)rYrpr,cCsT|j}|D]D}||vri||<||}|rs   r>zfrozenset[str]rh)rKrLexpecterror_on error_on_eofr,cCsz|||}Wn2tyBt|}|r>t||d|dYn0||||s|||vrl|d7}qVt||d|||S)Nz Expected rzFound invalid character )index ValueErrorlenrG isdisjoint)rKrLryrzr{Znew_posrrr skip_untils   rrKrLr,cCsFz ||}Wnty"d}Yn0|dkrBt||ddtddS|S)Nr8rrFrzr{)r@rILLEGAL_COMMENT_CHARS)rKrLrOrrrrHs   rHcCs,|}t||t}t||}||kr|SqdSr)r>TOML_WS_AND_NEWLINErH)rKrLZpos_before_skiprrrskip_comments_and_array_wss   rztuple[Pos, Key])rKrLrMr,cCs|d7}t||t}t||\}}|j|tjsB|j|tjrVt||d|d|jj |tjddz|j |Wn t yt||ddYn0| d|st||d|d|fS) NrzCannot declare z twiceFr^Cannot overwrite a value]z.Expected ']' at the end of a table declaration)r>r? parse_keyrCrlr<rnrmrGrSrIrtrs startswithrKrLrMrYrrrrFs     rFcCs|d7}t||t}t||\}}|j|tjrDt||d||j||jj |tj ddz|j |Wn t yt||ddYn0|d|st||d|d|fS)N"Cannot mutate immutable namespace Fr^rz]]z0Expected ']]' at the end of an array declaration)r>r?rrCrlr<rmrGrgrSrnrIrvrsrrrrrrE.s     rEr)rKrLrMrNr*r,c s&t|||\}}ddd}}|}fddtdtD} | D]6} |j| tjrxt||d| |j| tjqR|j|tj rt||d|z|j |} Wn t yt||ddYn0|| vrt||dt |ttfr|jjtj dd || |<|S) Nrbc3s|]}d|VqdSrrrrNrYrrrJrz!key_value_rule..rzCannot redefine namespace rrTr^)parse_key_value_pairranger~rCrlr<rnrGr]rmrIrtrsrqrJrrrS) rKrLrMrNr*valuerjrkZabs_key_parentZrelative_path_cont_keysZcont_keynestrrrrBCs,   rBztuple[Pos, Key, Any])rKrLr*r,cCstt||\}}z ||}Wnty0d}Yn0|dkrFt||d|d7}t||t}t|||\}}|||fS)N=z,Expected '=' after a key in a key/value pairr)rr@rGr>r? parse_value)rKrLr*rYrOrrrrres     rcCst||\}}|f}t||t}z ||}WntyBd}Yn0|dkrT||fS|d7}t||t}t||\}}||f7}t||t}q dS)N.r)parse_key_partr>r?r@)rKrLZkey_partrYrOrrrrus      rztuple[Pos, str]cCsz ||}Wnty"d}Yn0|tvrL|}t||t}||||fS|dkr^t||S|dkrpt||St||ddS)N'r"z(Invalid initial character for a key part)r@BARE_KEY_CHARSr>parse_literal_strparse_one_line_basic_strrG)rKrLrO start_posrrrrs      rcCs|d7}t||ddS)NrF multiline)parse_basic_strrKrLrrrrsrztuple[Pos, list]cCs|d7}g}t||}|d|r.|d|fSt|||\}}||t||}|||d}|dkrv|d|fS|dkrt||d|d7}t||}|d|r.|d|fSq.dS)Nrr,zUnclosed array)rrrrurG)rKrLr*Zarrayvalcrrr parse_arrays"         rztuple[Pos, dict]c Cs^|d7}t}t}t||t}|d|r:|d|jfSt|||\}}}|dd|d}}||tjrt ||d|z|j |dd} Wn t yt ||ddYn0|| vrt ||d||| |<t||t}|||d} | dkr |d|jfS| d kr"t ||d t |tt frD|j|tjd d |d7}t||t}q:dS) Nr}rbrFrorzDuplicate inline table key rzUnclosed inline tableTr^)r;r<r>r?rrJrrlrmrGrtrsrqrrrS) rKrLr*Z nested_dictrCrYrrjrkrrrrrparse_inline_tables6       rFr)rKrLrr,cCs|||d}|d7}|r|dvr|dkr|t||t}z ||}Wnty^|dfYS0|dkrtt||d|d7}t||t}|dfS|dkrt||d S|d krt||d Sz|t|fWStyt||ddYn0dS) Nr>z\ \ z\ rrzUnescaped '\' in a stringrz\uz\U)r>r?r@rGrparse_hex_charBASIC_STR_ESCAPE_REPLACEMENTSrs)rKrLrZ escape_idrOrrrparse_basic_str_escapes,         rcCst||ddS)NTr)rrrrr parse_basic_str_escape_multilinesrrX)rKrLhex_lenr,cCsd||||}t||ks&t|s2t||d||7}t|d}t|sXt||d|t|fS)NzInvalid hex valuez/Escaped character is not a Unicode scalar value)r~HEXDIGIT_CHARS issupersetrGrXis_unicode_scalar_valuer)rKrLrZhex_strZhex_intrrrrs   rcCs2|d7}|}t||dtdd}|d|||fS)NrrTr)rILLEGAL_LITERAL_STR_CHARS)rKrLrrrrrs  r)rKrLliteralr,cCs|d7}|d|r|d7}|rLd}t||dtdd}|||}|d}nd}t||dd \}}|||sv||fS|d7}|||s|||fS|d7}|||d fS) Nrrr'''Trr"rr)rr#ILLEGAL_MULTILINE_LITERAL_STR_CHARSr)rKrLrdelimZend_posresultrrrparse_multiline_str s.      rc Cs|rt}t}nt}t}d}|}z ||}Wn tyJt||ddYn0|dkr|sp|d||||fS|d|r|d||||fS|d7}q|dkr||||7}|||\}}||7}|}q||vrt||d||d7}qdS) NrzUnterminated stringr"r"""rr#zIllegal character )!ILLEGAL_MULTILINE_BASIC_STR_CHARSrILLEGAL_BASIC_STR_CHARSrr@rGr) rKrLrrzZ parse_escapesrrrOZ parsed_escaperrrr(s6   rztuple[Pos, Any]c Csz ||}Wnty"d}Yn0|dkrP|d|rFt||ddSt||S|dkr||d|rrt||ddSt||S|dkr|d |r|d dfS|d kr|d |r|d dfS|dkrt|||S|dkrt|||St||}|rDz t |}Wn4t y6}zt ||d|WYd}~n d}~00| |fSt ||}|rf| t|fSt||}|r| t||fS|||d} | dvr|d|| fS|||d } | dvr|d || fSt ||ddS)Nr"rF)rrrTttruerfZfalser7{zInvalid date or datetimer>infnan>z+nanz+infz-infz-nanz Invalid value)r@rrrrrrr matchr r}rGendr r r r) rKrLr*rOZdatetime_matchZ datetime_objeZlocaltime_matchZ number_matchZ first_threeZ first_fourrrrrHsT               $     r)rKrLmsgr,cCs,dddddd}t|d|||dS)zZReturn a `TOMLDecodeError` where error message is suffixed with coordinates in source.r5rrcSsV|t|krdS|dd|d}|dkr4|d}n||dd|}d|d|S)Nzend of documentrrrzline z , column )r~countrindex)rKrLlinecolumnrrr coord_reprs  z suffixed_err..coord_reprz (at ))r$)rKrLrrrrrrGs rG) codepointr,cCs0d|kodknp.d|ko*dkSS)Nriiir)rrrrrsr)r*r,cs$tur tSdddfdd }|S)a%A decorator to make `parse_float` safe. `parse_float` must not return dicts or lists, because these types would be mixed with parsed TOML tables and arrays, thus confusing the parser. The returned decorated callable raises `ValueError` instead of returning illegal types. r5r) float_strr,cs"|}t|ttfrtd|S)Nz*parse_float must not return dicts or lists)rqrJrrr})rZ float_valuer)rrsafe_parse_floatsz/make_safe_parse_float..safe_parse_float)float)r*rrr)rr=s r=)GZ __future__rcollections.abcrstringtypesrtypingrrr_rer r r r r rZ_typesrrr frozensetrrZ ASCII_CTRLrrrrrr?r ascii_lettersdigitsrrAZ hexdigitsrrr}r$rr4r1r<r;r:r>rrHrrFrErBrrrrrrrrrrrrrrGrr=rrrrsr    "       B:"   "!   D