bgbUddlmZmZmZmZddlZddlmZddl m Z m Z e e fZe edfed<eddDZGd d ZGd d ZejeejedS) )MutableMappingMappingMutableSequenceIteratorN)ref)TupleAny.str_typec#K|]}|VdSN).0_s b/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/pyparsing/results.py rsar c,eZdZdgZdZdZdZdZdS)_ParseResultsWithOffsettupc||f|_dSr r)selfp1p2s r__init__z _ParseResultsWithOffset.__init__s8rc|j|Sr rris r __getitem__z#_ParseResultsWithOffset.__getitem__sx{rc|jSr rrs r __getstate__z$_ParseResultsWithOffset.__getstate__s xrc |d|_dSNrr)rargss r __setstate__z$_ParseResultsWithOffset.__setstate__s7rN)__name__ __module__ __qualname__ __slots__rrr"r&r rrrr sWIrrceZdZUdZdgddfZeedfed<gdZGdd e Z d3d Z ddd d e fd Z d Ze fdZdZdefdZdefdZdefdZdefdZdefdZdZdZdZdefdZdZd4dZdZdZ dZ!dZ"d Z#d5d!Z$d5d"Z%d5d#Z&de'fd$Z(de'fd%Z)d6d&Z*de fd'Z+de,fd(Z-d5d)Z.d*Z/d7de'fd,Z0d-Z1d.Z2d/Z3d0Z4d1Z5e6d4d5d2Z7e+Z8e-Z9e/Z:dS)8 ParseResultsaStructured parse results, to provide multiple means of access to the parsed data: - as a list (``len(results)``) - by list index (``results[0], results[1]``, etc.) - by attribute (``results.`` - see :class:`ParserElement.set_results_name`) Example:: integer = Word(nums) date_str = (integer.set_results_name("year") + '/' + integer.set_results_name("month") + '/' + integer.set_results_name("day")) # equivalent form: # date_str = (integer("year") + '/' # + integer("month") + '/' # + integer("day")) # parse_string returns a ParseResults object result = date_str.parse_string("1999/12/31") def test(s, fn=repr): print("{} -> {}".format(s, fn(eval(s)))) test("list(result)") test("result[0]") test("result['month']") test("result.day") test("'month' in result") test("'minutes' in result") test("result.dump()", str) prints:: list(result) -> ['1999', '/', '12', '/', '31'] result[0] -> '1999' result['month'] -> '12' result.day -> '31' 'month' in result -> True 'minutes' in result -> False result.dump() -> ['1999', '/', '12', '/', '31'] - day: '31' - month: '12' - year: '1999' Nr . _null_values)_name_parent _all_names_modal_toklist_tokdict __weakref__ceZdZdZddZdS)ParseResults.Lista Simple wrapper class to distinguish parsed list results that should be preserved as actual Python lists, instead of being converted to :class:`ParseResults`: LBRACK, RBRACK = map(pp.Suppress, "[]") element = pp.Forward() item = ppc.integer element_list = LBRACK + pp.delimited_list(element) + RBRACK # add parse actions to convert from ParseResults to actual Python collection types def as_python_list(t): return pp.ParseResults.List(t.as_list()) element_list.add_parse_action(as_python_list) element <<= item | element_list element.run_tests(''' 100 [2,3,4] [[2, 1],3,4] [(2, 1),3,4] (2,3,4) ''', post_parse=lambda s, r: (r[0], type(r[0]))) prints: 100 (100, ) [2,3,4] ([2, 3, 4], ) [[2, 1],3,4] ([[2, 1], 3, 4], ) (Used internally by :class:`Group` when `aslist=True`.) Nc|g}t|ts:td|jt |jt|S)Nz.{} may only be constructed with a list, not {}) isinstancelist TypeErrorformatr'type__new__)cls containeds rr>zParseResults.List.__new__|sd  i.. $fS\4 ??3KLL <<$$ $rr )r'r(r)__doc__r>r rrListr7Us3$ $ L % % % % % %rrBc t|tr|St|}d|_d|_t |_|g|_n^t|ttfr:t|tj r |ddgnt||_n|g|_t|_ |Sr )r9r,objectr>r/r0setr1r3r:_generator_typerBdictr4)r?toklistnamekwargsrs rr>zParseResults.__new__s g| , , N~~c""  %% ?DMM $!8 9 9 &g|'899# ']] MM %IDM  rTc4||_| |dkr||trt|}|s|h|_||_||jvr||t tfr|g}|rl||tr&tt|j d||<n&tt|dd||<|||_dS |d||<dS#tttf$r||ur|||<YdS||_YdSwxYwdSdSdS)Nr-r)r2intstrr1r/r.r r=r,rr3KeyErrorr; IndexError)rrHrIasListmodalr9s rrzParseResults.__init__sl   z$$$ !4yy )#'&DJd///:g$'788(&iG.!z'<88%<()9::A&&T &=(44a&&T (,DJ$$$.%,QZT $i<..."$..)0DJJJJ)-DJJJJ .-   0/s C## DDDct|ttfr |j|S||jvr|j|ddSt d|j|DS)Nrcg|] }|d S)rr )rvs r z,ParseResults.__getitem__..s$D$D$DaQqT$D$D$Dr)r9rLslicer3r1r4r,rs rrzParseResults.__getitem__sn a#u & & F=# #''}Q'+A..#$D$D4=3C$D$D$DEEErc||tr<|j|t|gz|j|<|d}nh||tt fr ||j|<|}nC|j|tt|dgz|j|<|}||trt||_ dSdSr$) rr4getr:rLrWr3r,wkrefr0)rkrUr9subs r __setitem__zParseResults.__setitem__s :a0 1 1 #}00DFF;;qcADM! A$CC ZC< ( (  DM! CC#}00DFF;;'1--? DM! C :c< ( ( &++CKKK & &rc t|ttfrt|j}|j|=t|tr|dkr||z }t||dz}t t ||}||j D]<\}}|D]4}t|D]"\}\}} t|| | |kz ||<#5=dS|j |=dS)Nr) r9rLrWlenr3r:rangeindicesreverser4items enumerater) rrmylenremovedrI occurrencesjr[valuepositions r __delitem__zParseResults.__delitem__s1 a#u & & ! &&E a !S!! $q55JA!QUOO5!))E"2"2344G OO   %)]%8%8%:%:  !k A09+0F0F,,E8)@!8x!|#<** A   a   rreturnc||jvSr )r4)rr[s r __contains__zParseResults.__contains__sDM!!rc*t|jSr )r`r3r!s r__len__zParseResults.__len__s4=!!!rc"|jp|j Sr )r3r4r!s r__bool__zParseResults.__bool__s 6777rc*t|jSr iterr3r!s r__iter__zParseResults.__iter__DM"""rc<t|jdddS)NrSrur!s r __reversed__zParseResults.__reversed__sDM$$B$'(((rc*t|jSr )rvr4r!s rkeyszParseResults.keysrxrcDfdDS)Nc3(K|] }|V dSr r rr[rs rrz&ParseResults.values..s'--AQ------rr|r!s`rvalueszParseResults.valuess%--------rcDfdDS)Nc3,K|]}||fVdSr r rs rrz%ParseResults.items..s+22DG 222222rrr!s`rrdzParseResults.itemss%2222diikk2222rc*t|jS)z Since ``keys()`` returns an iterator, this method is helpful in bypassing code that looks for the existence of any defined results names.)boolr4r!s rhaskeyszParseResults.haskeyssDM"""rcR|sdg}|D]7\}}|dkr |d|f}td|t|dtst |dks |d|vr|d}||}||=|S|d}|S)a Removes and returns item at specified index (default= ``last``). Supports both ``list`` and ``dict`` semantics for ``pop()``. If passed no argument or an integer argument, it will use ``list`` semantics and pop tokens from the list of parsed tokens. If passed a non-integer argument (most likely a string), it will use ``dict`` semantics and pop the corresponding value from any defined results names. A second default return value argument is supported, just as in ``dict.pop()``. Example:: numlist = Word(nums)[...] print(numlist.parse_string("0 123 321")) # -> ['0', '123', '321'] def remove_first(tokens): tokens.pop(0) numlist.add_parse_action(remove_first) print(numlist.parse_string("0 123 321")) # -> ['123', '321'] label = Word(alphas) patt = label("LABEL") + Word(nums)[1, ...] print(patt.parse_string("AAB 123 321").dump()) # Use pop() in a parse action to remove named result (note that corresponding value is not # removed from list form of results) def remove_LABEL(tokens): tokens.pop("LABEL") return tokens patt.add_parse_action(remove_LABEL) print(patt.parse_string("AAB 123 321").dump()) prints:: ['AAB', '123', '321'] - LABEL: 'AAB' ['AAB', '123', '321'] rSdefaultrz-pop() got an unexpected keyword argument {!r}r_)rdr;r<r9rLr`)rr%rJr[rUindexret defaultvalues rpopzParseResults.pop sP 4DLLNN  DAqI~~Q|CJJ1MM d1gs # # s4yyA~~aDGEu+CU J7L rc||vr||S|S)a^ Returns named result matching the given key, or if there is no such name, then returns the given ``default_value`` or ``None`` if no ``default_value`` is specified. Similar to ``dict.get()``. Example:: integer = Word(nums) date_str = integer("year") + '/' + integer("month") + '/' + integer("day") result = date_str.parse_string("1999/12/31") print(result.get("year")) # -> '1999' print(result.get("hour", "not specified")) # -> 'not specified' print(result.get("hour")) # -> None r )rkey default_values rrYzParseResults.getFs$ $;;9  rc|j|||jD]7\}}t |D]"\}\}}t ||||kz||<#8dS)a; Inserts new element at location index in the list of parsed tokens. Similar to ``list.insert()``. Example:: numlist = Word(nums)[...] print(numlist.parse_string("0 123 321")) # -> ['0', '123', '321'] # use a parse action to insert the parse location in the front of the parsed results def insert_locn(locn, tokens): tokens.insert(0, locn) numlist.add_parse_action(insert_locn) print(numlist.parse_string("0 123 321")) # -> [0, '0', '123', '321'] N)r3insertr4rdrer)rr ins_stringrIrhr[rjrks rrzParseResults.insert]s" UJ///!%!4!4!6!6   D+(1+(>(>  $$E8!88x%'78"" A   rc:|j|dS)a Add single element to end of ``ParseResults`` list of elements. Example:: numlist = Word(nums)[...] print(numlist.parse_string("0 123 321")) # -> ['0', '123', '321'] # use a parse action to compute the sum of the parsed integers, and add it to the end def append_sum(tokens): tokens.append(sum(map(int, tokens))) numlist.add_parse_action(append_sum) print(numlist.parse_string("0 123 321")) # -> ['0', '123', '321', 444] N)r3append)ritems rrzParseResults.appendvs  T"""""rct|tr||dS|j|dS)a Add sequence of elements to end of ``ParseResults`` list of elements. Example:: patt = Word(alphas)[1, ...] # use a parse action to append the reverse of the matched strings, to make a palindrome def make_palindrome(tokens): tokens.extend(reversed([t[::-1] for t in tokens])) return ''.join(tokens) patt.add_parse_action(make_palindrome) print(patt.parse_string("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' N)r9r,__iadd__r3extend)ritemseqs rrzParseResults.extendsJ g| , , * MM' " " " " " M  ) ) ) ) )rcL|jdd=|jdS)z7 Clear all elements and results names. N)r3r4clearr!s rrzParseResults.clears, M!!!  rc~ ||S#t$r(|drt|YdSwxYw)N__r-)rN startswithAttributeError)rrIs r __getattr__zParseResults.__getattr__sU :    t$$ +$T***22 s  .<<c8|}||z }|Sr )copy)rotherrs r__add__zParseResults.__add__siikk u  rcp|jrt|jfd|j}fd|D}|D]?\}}|||<t |dt rt ||d_@|xj|jz c_|xj|jzc_|S)Nc|dkrn|zSr$r )aoffsets rz'ParseResults.__iadd__..sAEE&&q6zrc ng|]1\}}|D])}|t|d|df*2S)rr_)r)rr[vlistrU addoffsets rrVz)ParseResults.__iadd__..sdAu+AaD))AaD//BBCrr) r4r`r3rdr9r,rZr0r1)rr otheritemsotherdictitemsr[rUrrs @@rrzParseResults.__iadd__s > /''FAAAAI--//J *N ' / /1QadL11/#(;;AaDL '  5++ rcjt|tr|dkr|S||zSr$)r9rLr)rrs r__radd__zParseResults.__radd__s6 eS ! ! eqjj99;; 4< rcdt|j|j|S)Nz {}({!r}, {}))r<r=r'r3as_dictr!s r__repr__zParseResults.__repr__s-$$T$ZZ%8$-XXXrcVddd|jDzdzS)N[z, ctg|]5}t|trt|nt|6Sr )r9r,rMrepr)rrs rrVz(ParseResults.__str__..sG)L99FCFFFtAwwr])joinr3r!s r__str__zParseResults.__str__sH ii!]   rcg}|jD]j}|r|r||t|tr||z }H|t |k|Sr )r3rr9r, _asStringListrM)rsepoutrs rrzParseResults._asStringListsM & &D s  3$ -- &t))+++ 3t99%%%% rc$d|jDS)ax Returns the parse results as a nested list of matching tokens, all converted to strings. Example:: patt = Word(alphas)[1, ...] result = patt.parse_string("sldkj lsdkj sldkj") # even though the result prints in string-like form, it is actually a pyparsing ParseResults print(type(result), result) # -> ['sldkj', 'lsdkj', 'sldkj'] # Use as_list() to create an actual list result_list = result.as_list() print(type(result_list), result_list) # -> ['sldkj', 'lsdkj', 'sldkj'] cdg|]-}t|tr|n|.Sr )r9r,as_list)rress rrVz(ParseResults.as_list..sC   (\:: CCKKMMM   r)r3r!s rrzParseResults.as_lists%  }    rchfdtfd|DS)a Returns the named parse results as a nested dictionary. Example:: integer = Word(nums) date_str = integer("year") + '/' + integer("month") + '/' + integer("day") result = date_str.parse_string('12/31/1999') print(type(result), repr(result)) # -> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) result_dict = result.as_dict() print(type(result_dict), repr(result_dict)) # -> {'day': '1999', 'year': '12', 'month': '31'} # even though a ParseResults supports dict-like access, sometime you just need to have a dict import json print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable print(json.dumps(result.as_dict())) # -> {"month": "31", "day": "1999", "year": "12"} ct|tr6|r|n fd|DS|S)Nc&g|] }|Sr r )rrUto_items rrVz9ParseResults.as_dict..to_item..s!;T;T;T1GGAJJ;T;T;Tr)r9r,rr)objrs rrz%ParseResults.as_dict..to_item sO#|,, (+ Ts{{}}};T;T;T;TPS;T;T;TT rc38K|]\}}||fVdSr r )rr[rUrs rrz'ParseResults.as_dict..s3==1Q O======r)rGrd)rrs @rrzParseResults.as_dictsI*      ==== ======rct|j}|j|_|j|_|xj|jzc_|j|_|S)zG Returns a new copy of a :class:`ParseResults` object. )r,r3r4rr0r1r/)rrs rrzParseResults.copysQ4=))}))++ l  $/)J  rc|jr|jS|jr(|fd}r ||ndSt|dkrt|jdkrtt t |jdddvr3t t |jSdS)a Returns the results name for this token expression. Useful when several different expressions might match at a particular location. Example:: integer = Word(nums) ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") house_number_expr = Suppress('#') + Word(nums, alphanums) user_data = (Group(house_number_expr)("house_number") | Group(ssn_expr)("ssn") | Group(integer)("age")) user_info = user_data[1, ...] result = user_info.parse_string("22 111-22-3333 #221B") for item in result: print(item.get_name(), ':', item[0]) prints:: age : 22 ssn : 111-22-3333 house_number : 221B cltfdjDdS)Nc3:K|]\}}|D] \}}|u |VdSr r )rr[rrUlocr\s rrz@ParseResults.get_name..find_in_parent..@sS$Au&+#As!88$8888 r)nextr4rd)r\pars`rfind_in_parentz-ParseResults.get_name..find_in_parent>sO(+ (:(:(<(< rNr_r)rrS)r/r0r`r4rrvrr|)rrrs @rget_namezParseResults.get_name s2 : :  \ ,,..C     ,/8>>$'''D 8 IINNDM""a''T$-..00112215a8GCCT]//112233 34rrctg}d}||r$|t|znd|r|rt d|D}|D]\}} |r|||d|d|z|t| trU| r0|| ||||dz|t| |t| td|Dr|} t| D]\} } t| trQ|d |d|z| |d|dzz| ||||dzk|d |d|z| |d|dzzt| fzd |S) aM Diagnostic method for listing out the contents of a :class:`ParseResults`. Accepts an optional ``indent`` argument so that this string can be embedded in a nested display of other data. Example:: integer = Word(nums) date_str = integer("year") + '/' + integer("month") + '/' + integer("day") result = date_str.parse_string('1999/12/31') print(result.dump()) prints:: ['1999', '/', '12', '/', '31'] - day: '31' - month: '12' - year: '1999'  r-c3>K|]\}}t||fVdSr )rM)rr[rUs rrz$ParseResults.dump..ns0DDtq!A{DDDDDDrz {}{}- {}: z r_)indentfull include_list_depthc3@K|]}t|tVdSr )r9r,)rvvs rrz$ParseResults.dump..s,??B:b,//??????rz {}{}[{}]: {}{}{}z %s%s[%d]: %s%s%s)rrMrrsortedrdr<r9r,dumpranyrer) rrrrrrNLrdr[rUrrs rrzParseResults.dumpSs*  <G6C ////RHHH 3 ||~~ ,DDtzz||DDDDD!,,DAq' 2JJ|226D6MANNOOO!!\22 , /JJ !+1)-1=+1A: !'!"!" JJs1vv.... 477++++??$????? &q\\EAr!"l33 188 &!% ! &!%!!4 "+1)-1=+1A: !(!"!"    1 &!% ! &!%!!4 #B     wws||rcTtj|g|Ri|dS)a% Pretty-printer for parsed results as a list, using the `pprint `_ module. Accepts additional positional or keyword args as defined for `pprint.pprint `_ . Example:: ident = Word(alphas, alphanums) num = Word(nums) func = Forward() term = ident | num | Group('(' + func + ')') func <<= ident + Group(Optional(delimited_list(term))) result = func.parse_string("fna a,b,(fnb c,d,200),100") result.pprint(width=40) prints:: ['fna', ['a', 'b', ['(', 'fnb', ['c', 'd', '200'], ')'], '100']] N)pprintr)rr%rJs rrzParseResults.pprints22  dllnn6t666v66666rc|j|j|jdur|pd|j|jffSr )r3r4rr0r1r/r!s rr"zParseResults.__getstate__sM M ""$$ D(;T\\^^Ct    rc|\|_\|_}}|_t||_|t ||_dSd|_dSr )r3r4r/rEr1rZr0)rstater inAccumNamess rr&zParseResults.__setstate__sKHME E sL$*l++ ? ::DLLLDLLLrc|j|jfSr )r3r/r!s r__getnewargs__zParseResults.__getnewargs__s}dj((rc~tt|t|zSr )dirr=r:r|r!s r__dir__zParseResults.__dir__s)4::diikk!2!222rc  d}|g}|D]P\}}t|tr||||z }5|||g|||z }Q|||g|}|S)z Helper classmethod to construct a ``ParseResults`` from a ``dict``, preserving the name-value relations as results names. If an optional ``name`` argument is given, a nested ``ParseResults`` will be returned. cp t|t|t S#t$rYdSwxYw)NF)rvr9r Exception)rs r is_iterablez+ParseResults.from_dict..is_iterablesK 5S &c84444   uu s ' 55)rI)rIrP)rdr9r from_dict)r?rrIrrr[rUs rrzParseResults.from_dicts 5 5 5c"ggKKMM ? ?DAq!W%% ?s}}QQ}///ssA3Q{{1~~>>>>  #se$'''C r)NNr )rmr,)r-)r-TTr);r'r(r)rAr.rr __annotations__r*r:rBr>r9rrr]rlrrorLrqrsrrwrzr|rrdrrrYrrrrrrrrrMrrrrrGrrrrrr"r&rr classmethodrrPasDictgetNamer rrr,r,s++Z&*2r2$6L%S/666I1%1%1%1%1%t1%1%1%f0d$:....@FFF,6 & & & &!!!.""""""""""8$8888#(####)h))))###...333##### 8 8 8 t!!!!.2###"***( &    Y#YYYY                (>>>>>:    111fNNNNNN`7778       )))333[2F FGGGrr,)collections.abcrrrrrweakrefrrZtypingrr rMbytesr r=rrFrr,registerr rrrsNNNNNNNNNNNNN !5\%c )))$2''         Y Y Y Y Y Y Y Y x %%%&&&&&r