g Vc@sddlZddlmZdZdZdefdYZdefdYZd efd YZd efd YZ d efdYZ dS(iN(t functionscCs!t||rtS||kSdS(N(t_is_special_integer_casetFalse(txty((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyt_equalsscCs`|dks|dkr.|tkp-|tkS|dksF|dkr\|tkp[|tkSdS(Nii(tTrueR(RR((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyR stOptionscBseZdZdZRS(s8Options to control how a JMESPath function is evaluated.cCs ||_dS(N(tdict_cls(tselfR((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyt__init__&s (t__name__t __module__t__doc__R (((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyR$st _ExpressioncBseZdZRS(cCs ||_dS(N(t expression(R R((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyR 3s(R R R (((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyR2stVisitorcBs#eZdZdZdZRS(cCs i|_dS(N(t _method_cache(R ((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyR 8scOse|d}|jj|}|dkrUt|d|d|j}||j|KstnetlttlteteqtgttgtecCsttt|j||_|j|_|dk rU|jdk rU|jj|_ntj |_ ||j _ dS(N( tsuperRR t_optionstMAP_TYPEt _dict_clsRRRtRuntimeFunctionst _functionst interpreter(R toptions((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyR Ts  cOst|ddS(NR(R(R RRR((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyR`scCs1|}x$|dD]}|j||}qW|S(Ntchildren(R(R Rtvaluetresult((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pytvisit_subexpressioncscCs.y|j|dSWntk r)dSXdS(NR0(RtAttributeErrorR(R RR0((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyt visit_fieldis cCsF|j|d}||j|dd||j|dd|S(NR0R/ii(tCOMPARATOR_FUNCR(R RR0tcomparator_func((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pytvisit_comparatoroscCs|S(N((R RR0((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyt visit_currentvscCst|ddS(NR/i(R(R RR0((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyt visit_exprefyscCsQg}x1|dD]%}|j||}|j|qW|jj|d|S(NR/R0(RtappendR,t call_function(R RR0t resolved_argstchildtcurrent((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pytvisit_function_expression|s cCs|j|dd|}t|ts-dS|dd}g}xb|D]Z}|j|j||rH|j|dd|}|dk r|j|qqHqHW|S(NR/iii(Rt isinstancetlistRt_is_trueR:(R RR0tbasetcomparator_nodet collectedtelementR>((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pytvisit_filter_projections  cCst|j|dd|}t|ts-dSg}x:|D]2}t|tr_|j|q:|j|q:W|S(NR/i(RR@RARtextendR:(R RR0RCt merged_listRF((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyt visit_flattens cCs|S(N((R RR0((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pytvisit_identityscCs<t|tsdSy||dSWntk r7dSXdS(NR0(R@RARt IndexError(R RR0((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyt visit_indexs  cCs1|}x$|dD]}|j||}qW|S(NR/(R(R RR0R1((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pytvisit_index_expressionscCs+t|tsdSt|d}||S(NR/(R@RARtslice(R RR0ts((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyt visit_slicescCs|j|dd|S(NR/i(R(R RR0((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pytvisit_key_val_pairscCs|dS(NR0((R RR0((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyt visit_literalscCsO|dkrdS|j}x,|dD] }|j||||d((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pytvisit_projections  cCs|j|dd|}y|j}Wntk r>dSXg}xD|D]<}|j|dd|}|dk rL|j|qLqLW|S(NR/ii(RtvaluesR3RR:(R RR0RCRERFR>((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pytvisit_value_projections   cCs:|dkp9|gkp9|ikp9|dkp9|tkS(Nt(RR(R R0((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyRVs0cCs|j| S(N(RV(R R0((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyRBsN(&R R toperatorRR"RR%tgeR5tdictR)RR RR2R4R7R8R9R?RGRJRKRMRNRQRRRSRTRURXRYR[R\R]R_RVRB(((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyRHsF                         tGraphvizVisitorcBs#eZdZdZdZRS(cCs)tt|jg|_d|_dS(Ni(R'RdR t_linest_count(R ((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyR s cOsf|jjdd|d|jf}|jd7_|j|||jjddj|jS(Ns digraph AST {s%s%sRit}s (ReR:Rft_visittjoin(R RRRR>((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyRs cCs|jjd||d|jddfxj|jdgD]V}d|d|jf}|jd7_|jjd||f|j||q@WdS( Ns%s [label="%s(%s)"]RR0R`R/s%s%sis %s -> %s(ReR:RRfRh(R RR>R=t child_name((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyRhs !(R R R RRh(((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyRd s  ( RatjmespathRRRtobjectRRRRRd(((s1/usr/lib/fence-agents/bundled/jmespath/visitor.pyts