U ʗReb@sUddlmZmZmZmZddlZddlmZddl m Z m Z e e fZe edfed<eddd DZGd d d ZGd d d ZeeeedS))MutableMappingMappingMutableSequenceIteratorN)ref)TupleAny.str_typeccs|] }|VqdSN).0_r r /builddir/build/BUILDROOT/alt-python38-pip-22.2.1-2.el8.x86_64/opt/alt/python38/lib/python3.8/site-packages/pip/_vendor/pyparsing/results.py srr c@s2eZdZdgZddZddZddZdd Zd S) _ParseResultsWithOffsettupcCs||f|_dSr r)selfp1p2r r r__init__sz _ParseResultsWithOffset.__init__cCs |j|Sr rrir r r __getitem__sz#_ParseResultsWithOffset.__getitem__cCs|jSr rrr r r __getstate__sz$_ParseResultsWithOffset.__getstate__cGs|d|_dSNrr)rargsr r r __setstate__sz$_ParseResultsWithOffset.__setstate__N)__name__ __module__ __qualname__ __slots__rrrrr r r rr s rc@s eZdZUdZdgddfZeedfed<ddd d d d d gZGddde Z d_ddZ dddde fddZ ddZe fddZddZedddZedddZedd d!Zedd"d#Zedd$d%Zd&d'Zd(d)Zd*d+Zedd,d-Zd.d/Zd`d0d1Zd2d3Zd4d5Z d6d7Z!d8d9Z"d:d;Z#dddd?Z%ddd@dAZ&e'ddBdCZ(e'ddDdEZ)dadFdGZ*e ddHdIZ+e,ddJdKZ-dddLdMZ.dNdOZ/dbe'ddQdRZ0dSdTZ1dUdVZ2dWdXZ3dYdZZ4d[d\Z5e6dcddd]d^Z7e+Z8e-Z9e/Z:dS)d 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__c@seZdZdZdddZdS)zParseResults.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`.) NcCs8|dkr g}t|ts.td|jt|jt|S)Nz.{} may only be constructed with a list, not {}) isinstancelist TypeErrorformatrtype__new__)cls containedr r rr2|s zParseResults.List.__new__)N)rr r!__doc__r2r r r rListUs&r6cKst|tr|St|}d|_d|_t|_|dkrsz,ParseResults.__getitem__..)r-r>slicer*r(r+r#rr r rrs   zParseResults.__getitem__cCs||tr0|j|t|g|j|<|d}nD||ttfrN||j|<|}n&|j|tt|dg|j|<|}||trt||_ dSr) rr+getr.r>rHr*r#wkrefr')rkrFr-subr r r __setitem__s     zParseResults.__setitem__c Cst|ttfrt|j}|j|=t|trH|dkr:||7}t||d}tt||}||j D]>\}}|D]0}t |D]"\}\}} t || | |k||<qqxqln|j |=dS)Nr) r-r>rHlenr*r.rangeindicesreverser+items enumerater) rrmylenremovedr< occurrencesjrKvaluepositionr r r __delitem__s"   zParseResults.__delitem__)returncCs ||jkSr )r+)rrKr r r __contains__szParseResults.__contains__cCs t|jSr )rOr*rr r r__len__szParseResults.__len__cCs|jp |j Sr )r*r+rr r r__bool__szParseResults.__bool__cCs t|jSr iterr*rr r r__iter__szParseResults.__iter__cCst|jdddS)NrDr`rr r r __reversed__szParseResults.__reversed__cCs t|jSr )rar+rr r rkeysszParseResults.keyscsfddDS)Nc3s|]}|VqdSr r r rKrr rrsz&ParseResults.values..rdrr rrvaluesszParseResults.valuescsfddDS)Nc3s|]}||fVqdSr r rerr rrsz%ParseResults.items..rfrr rrrSszParseResults.itemscCs 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.)boolr+rr r rhaskeysszParseResults.haskeyscOs|s dg}|D],\}}|dkr0|d|f}qtd|qt|dtsft|dksf|d|kr|d}||}||=|S|d}|SdS)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'] rDdefaultrz-pop() got an unexpected keyword argument {!r}rNN)rSr/r0r-r>rO)rrr=rKrFindexret defaultvaluer r rpop s(&zParseResults.popcCs||kr||S|SdS)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 Nr )rkey default_valuer r rrIFszParseResults.getcCsR|j|||jD]4\}}t|D]"\}\}}t||||k||<q(qdS)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)r*insertr+rSrTr)rrk ins_stringr<rWrKrYrZr r rrq]s zParseResults.insertcCs|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)r*append)ritemr r rrsvszParseResults.appendcCs&t|tr||n |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)r-r#__iadd__r*extend)ritemseqr r rrvs  zParseResults.extendcCs|jdd=|jdS)z7 Clear all elements and results names. N)r*r+clearrr r rrxs zParseResults.clearcCs8z ||WStk r2|dr,t|YdSXdS)N__r$)r@ startswithAttributeError)rr<r r r __getattr__s   zParseResults.__getattr__cCs|}||7}|Sr )copy)rotherrlr r r__add__szParseResults.__add__cs|jrjt|jfdd|j}fdd|D}|D],\}}|||<t|dtrz'ParseResults.__iadd__..c s4g|],\}}|D]}|t|d|dfqqS)rrN)r)r rKvlistrF) addoffsetr rrGsz)ParseResults.__iadd__..r) r+rOr*rSr-r#rJr'r()rr~ otheritemsotherdictitemsrKrFr )rrrrus     zParseResults.__iadd__cCs&t|tr|dkr|S||SdSr)r-r>r})rr~r r r__radd__szParseResults.__radd__cCsdt|j|j|S)Nz {}({!r}, {}))r0r1rr*as_dictrr r r__repr__szParseResults.__repr__cCsdddd|jDdS)N[z, cSs&g|]}t|trt|nt|qSr )r-r#r?repr)r rr r rrGsz(ParseResults.__str__..])joinr*rr r r__str__szParseResults.__str__cCsLg}|jD]<}|r |r ||t|tr8||7}q |t|q |Sr )r*rsr-r# _asStringListr?)rsepoutrtr r rrs   zParseResults._asStringListcCsdd|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'] cSs"g|]}t|tr|n|qSr )r-r#as_list)r resr r rrGsz(ParseResults.as_list..)r*rr r rrszParseResults.as_listcs&fddtfdd|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"} cs4t|tr,|r|Sfdd|DS|SdS)Ncsg|] }|qSr r rEto_itemr rrGsz9ParseResults.as_dict..to_item..)r-r#rirobjrr rr s "z%ParseResults.as_dict..to_itemc3s|]\}}||fVqdSr r r rKrFrr rrsz'ParseResults.as_dict..)r:rSrr rrrs zParseResults.as_dictcCs:t|j}|j|_|j|_|j|jO_|j|_|S)zG Returns a new copy of a :class:`ParseResults` object. )r#r*r+r}r'r(r&)rrlr r rr}s   zParseResults.copycs|jr |jS|jr6|fdd}r2||SdSt|dkrt|jdkrtt|jdddkrtt|jSdSdS)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 cstfddjDdS)Nc3s,|]$\}}|D]\}}|kr|VqqdSr r )r rKrrFlocrLr rr@s z@ParseResults.get_name..find_in_parent..)nextr+rSrparrrfind_in_parent>s  z-ParseResults.get_name..find_in_parentNrNr)rrD)r&r'rOr+rrargrd)rrr rrget_name s   zParseResults.get_namerc Cslg}d}||r |t|nd|rb|rtdd|D}|D]x\}} |rd|||d|d||t| tr| r|| j ||||ddq|t| qN|t | qNt d d|Drb|} t | D]x\} } t| tr6|d |d|| |d|d| j ||||ddq|d |d|| |d|dt| fqd |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$css|]\}}t||fVqdSr )r?rr r rrnsz$ParseResults.dump..z {}{}- {}: z rN)indentfull include_list_depthcss|]}t|tVqdSr )r-r#)r vvr r rrsz {}{}[{}]: {}{}{}z %s%s[%d]: %s%s%s)rsr?rrisortedrSr0r-r#dumpranyrTr) rrrrrrNLrSrKrFrrr r rrSsj        zParseResults.dumpcOstj|f||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)rrr=r r rrszParseResults.pprintcCs.|j|j|jdk r|p d|j|jffSr )r*r+r}r'r(r&rr r rrszParseResults.__getstate__cCs>|\|_\|_}}|_t||_|dk r4t||_nd|_dSr )r*r+r&r8r(rJr')rstater inAccumNamesr r rrs   zParseResults.__setstate__cCs |j|jfSr )r*r&rr r r__getnewargs__szParseResults.__getnewargs__cCstt|t|Sr )dirr1r.rdrr r r__dir__szParseResults.__dir__cCsrdd}|g}|D]>\}}t|tr>||j||d7}q|||g|||d7}q|dk rn||g|d}|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. cSs4z t|Wntk r"YdSXt|t SdS)NF)ra Exceptionr-r rr r r is_iterables  z+ParseResults.from_dict..is_iterable)r<)r<rBN)rSr-r from_dict)r3r~r<rrlrKrFr r rrs zParseResults.from_dict)NN)N)r$)r$TTr)N);rr r!r5r%rr__annotations__r"r.r6r2r-rrrMr[rhr]r>r^r_rrbrcrdrgrSrirnrIrqrsrvrxr|rrurr?rrrrr:rr}rrrrrrr classmethodrrBasDictgetNamer r r rr#st - 3   :   3P r#)collections.abcrrrrrweakrefrrJtypingrrr?bytesr r1rr9rr#registerr r r rs a