o ^\*@sddlZddlmZddlmZddlmZddZddZd d Z d d Z Gd dde Z Gddde Z Gddde ZGdddeZGdddeZdS)N) functions) string_type)NumbercCst||rdS||kS)NF)_is_special_integer_casexyr 2/usr/lib/python3/dist-packages/jmespath/visitor.py_equalss r cCs`t|tur|dks|dkr|dup|duSt|tur,|dks$|dkr.|dup+|duSdSdS)NrTF)typeintrr r r rs rcCst|pt|tSN)_is_actual_number isinstancerrr r r _is_comparable&srcCs|dus|dur dSt|tS)NTF)rrrr r r r.s rc@seZdZdZdddZdS)Optionsz8Options to control how a JMESPath function is evaluated.NcC||_||_dSr)dict_clscustom_functions)selfrrr r r __init__=s zOptions.__init__)NN)__name__ __module__ __qualname____doc__rr r r r r;src@seZdZddZddZdS) _ExpressioncCrr) expression interpreter)rrr r r r rKs z_Expression.__init__cOs|jj|g|Ri|Sr)r visitrnodeargskwargsr r r r!Osz_Expression.visitN)rrrrr!r r r r rJs rc@s$eZdZddZddZddZdS)VisitorcCs i|_dSr) _method_cacherr r r rTs zVisitor.__init__cOsR|d}|j|}|durt|d|d|j}||j|<||g|Ri|S)Nr zvisit_%s)r'getgetattr default_visit)rr#r$r% node_typemethodr r r r!Ws  z Visitor.visitcOstd)Nr+NotImplementedErrorr"r r r r+`zVisitor.default_visitN)rrrrr!r+r r r r r&Ss r&cseZdZeddejejejejdZ ddgZ e Z d;fdd Z d d Zd d Zd dZddZddZddZddZddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Z d/d0Z!d1d2Z"d3d4Z#d5d6Z$d7d8Z%d9d:Z&Z'S)<TreeInterpretercCs t|| Sr)r rr r r gs zTreeInterpreter.)eqneltgtltegter3r4Ncsdtt||j|_|durt}||_|jdur|jj|_|jdur+|jj|_ dSt |_ dSr) superr1rMAP_TYPE _dict_clsr_optionsrr _functionsr Functions)roptions __class__r r rps   zTreeInterpreter.__init__cOs t|d)Nr r.r"r r r r+} zTreeInterpreter.default_visitcC"|}|dD]}|||}q|SNchildrenr!rr#valueresultr r r visit_subexpression z#TreeInterpreter.visit_subexpressioncCs&z||dWStyYdSwNrH)r)AttributeErrorrr#rHr r r visit_fields  zTreeInterpreter.visit_fieldcCs|j|d}|d|jvr#|||dd|||dd|S||dd|}||dd|}ttf}t|rCt|sEdS|||S)NrHrErr )COMPARATOR_FUNC _EQUALITY_OPSr!rfloatr)rr#rHcomparator_funcleftright num_typesr r r visit_comparators z TreeInterpreter.visit_comparatorcC|Srr rNr r r visit_currentzTreeInterpreter.visit_currentcCst|dd|SNrEr)rrNr r r visit_exprefszTreeInterpreter.visit_exprefcCs:g}|dD] }|||}||q|j|d|SNrErH)r!appendr= call_function)rr#rH resolved_argschildcurrentr r r visit_function_expressions    z)TreeInterpreter.visit_function_expressioncCsx||dd|}t|tsdS|dd}g}|D]}||||r9||dd|}|dur9||q|S)NrErr )r!rlist_is_truer^)rr#rHbasecomparator_node collectedelementrbr r r visit_filter_projections   z'TreeInterpreter.visit_filter_projectioncCsT||dd|}t|tsdSg}|D]}t|tr"||q||q|Sr[)r!rreextendr^)rr#rHrg merged_listrjr r r visit_flattens    zTreeInterpreter.visit_flattencCrXrr rNr r r visit_identityrZzTreeInterpreter.visit_identitycCs2t|tsdSz||dWStyYdSwrL)rre IndexErrorrNr r r visit_indexs  zTreeInterpreter.visit_indexcCrCrDrFrGr r r visit_index_expressionrKz&TreeInterpreter.visit_index_expressioncCs"t|tsdSt|d}||SrD)rreslice)rr#rHsr r r visit_slices  zTreeInterpreter.visit_slicecCs||dd|Sr[rFrNr r r visit_key_val_pairsz"TreeInterpreter.visit_key_val_paircCs|dSrLr rNr r r visit_literalr0zTreeInterpreter.visit_literalcCs:|durdS|}|dD] }|||||d<q|Sr])r;r!rr#rHrirar r r visit_multi_select_dicts  z'TreeInterpreter.visit_multi_select_dictcCs4|durdSg}|dD] }||||q |SrD)r^r!rxr r r visit_multi_select_lists  z'TreeInterpreter.visit_multi_select_listcCs6||dd|}||r||dd|}|SNrErr r! _is_falserr#rHmatchedr r r visit_or_expressions z#TreeInterpreter.visit_or_expressioncCs6||dd|}||r|S||dd|Sr{r|r~r r r visit_and_expressions z$TreeInterpreter.visit_and_expressioncCs2||dd|}t|tur|dkrdS| S)NrErF)r!r r)rr#rHoriginal_resultr r r visit_not_expressionsz$TreeInterpreter.visit_not_expressioncCrCrDrFrGr r r visit_pipe rKzTreeInterpreter.visit_pipecCsZ||dd|}t|tsdSg}|D]}||dd|}|dur*||q|Sr{)r!rrer^rr#rHrgrirjrbr r r visit_projections  z TreeInterpreter.visit_projectioncCsn||dd|}z|}Wn tyYdSwg}|D]}||dd|}|dur4||q|Sr{)r!valuesrMr^rr r r visit_value_projections   z&TreeInterpreter.visit_value_projectioncCs(|dkp|gkp|ikp|dup|duS)NFr rrHr r r r}(s zTreeInterpreter._is_falsecCs || Sr)r}rr r r rf/rBzTreeInterpreter._is_truer)(rrrr operatorr5r6legerPrQdictr:rr+rJrOrWrYr\rcrkrnrorqrrrurvrwryrzrrrrrrr}rf __classcell__r r r@r r1dsH      r1cs,eZdZfddZddZddZZS)GraphvizVisitorcstt|g|_d|_dS)Nr )r9rr_lines_countr(r@r r r4s zGraphvizVisitor.__init__cOsP|jdd|d|jf}|jd7_||||jdd|jS)Nz digraph AST {%s%sr r } )rr^r_visitjoin)rr#r$r%rbr r r r!9s    zGraphvizVisitor.visitc Csx|jd||d|ddf|dgD]"}d|d|jf}|jd7_|jd||f|||qdS) Nz%s [label="%s(%s)"]r rHrrErr z %s -> %s)rr^r)rr)rr#rbra child_namer r r rAszGraphvizVisitor._visit)rrrrr!rrr r r@r r3s r)rjmespathrjmespath.compatrnumbersrr rrrobjectrrr&r1rr r r r s     P