
    1                         d dl Z d dlZd dlmZ d dlmZ d dlmZmZ ddddd	d	d
d
d
ddddZ	ddddddddZ
d Z G d de      Z G d d eee            Zy)    N)
exceptions)string_type)get_methodswith_metaclassbooleanarrayobjectnullstringnumberexpref)boollistdictNoneTypeunicodestrfloatintlongOrderedDict_Projection_Expression)r   )r   r   )r   r   )r   )r   r   )r   r   r   )r   )r   r   r	   r
   r   r   r   c                        fd}|S )Nc                     | _         | S N)	signature)func	argumentss    %lib/third_party/jmespath/functions.py_record_signaturez$signature.<locals>._record_signature'   s    "     )r   r!   s   ` r    r   r   &   s     r"   c                   $     e Zd Z fdZd Z xZS )FunctionRegistryc                 P    | j                          t        t        |   |||       y r   )_populate_function_tablesuperr%   __init__)clsnamebasesattrs	__class__s       r    r)   zFunctionRegistry.__init__.   s#    $$&-dE5Ar"   c                     i }t        |       D ]2  \  }}|j                  d      st        |dd       }|(||d||dd  <   4 || _        y )N_func_r   )functionr      )r   
startswithgetattrFUNCTION_TABLE)r*   function_tabler+   methodr   s        r    r'   z)FunctionRegistry._populate_function_table2   sa     (,LD&??8,T:I$ &!*,tABx( - ,r"   )__name__
__module____qualname__r)   r'   __classcell__)r.   s   @r    r%   r%   -   s    B,r"   r%   c                      e Zd Zi Zd Zd Zd Zd Zd Zd Z	 e
ddgi      d	        Z e
dd
gi      d        Z e
g dd      d        Z e
dg i      d        Z e
dg i      d        Z e
dg i      d        Z e
dddgidg i      d        Z e
dg di      d        Z e
ddgiddgi      d        Z e
ddgiddgi      d        Z e
dddgi      d        Z e
ddgi      d        Z e
ddgi      d        Z e
ddgiddgi      d        Z e
ddgiddgi      d        Z e
dd
dgi      d         Z e
d!gdd      d"        Z e
dd
dgi      d#        Z e
ddd
gi      d$        Z e
dd
gi      d%        Z e
dd!gi      d&        Z e
dd!gi      d'        Z  e
dg i      d(        Z! e
ddgiddgi      d)        Z" e
ddgiddgi      d*        Z# e
ddgiddgi      d+        Z$d, Z%d- Z&y.)/	Functionsc                     	 | j                   |   }|d   }|d   }| j	                  |||        || g| S # t        $ r t        j                  d|z        w xY w)NzUnknown function: %s()r1   r   )r5   KeyErrorr   UnknownFunctionError_validate_arguments)selffunction_nameresolved_argsspecr1   r   s         r    call_functionzFunctions.call_functionH   s{    	:&&}5D 
#%	  	=I-}--  	:11(=8: :	:s	   7 "Ac                 T   |rT|d   j                  d      r@t        |      t        |      k  rit        j                  t        |      t        |      |      t        |      t        |      k7  r)t        j                  t        |      t        |      |      | j                  |||      S )Nvariadic)getlenr   VariadictArityError
ArityError_type_check)rB   argsr   rC   s       r    rA   zFunctions._validate_argumentsS   s    2**:64y3y>) 44	NCI}> >Y#i.(''ID	=: :i??r"   c                 x    t        t        |            D ]#  }||   d   }|s| j                  ||   ||       % y )Ntypes)rangerK   _type_check_single)rB   actualr   rC   iallowed_typess         r    rN   zFunctions._type_check]   s?    s9~&A%aL1M''q	=(57 'r"   c                     | j                  |      \  }}t        |      j                  }||vr't        j                  ||| j                  |      |      |r| j                  ||||       y y r   )_get_allowed_pytypestyper8   r   JMESPathTypeError_convert_to_jmespath_type_subtype_check)rB   currentrQ   rC   rV   allowed_subtypesactual_typenames          r    rS   zFunctions._type_check_singled   s     +/*C*CE*J''
 w-00-/..w..?H H )9 %}6 r"   c                     g }g }|D ]]  }|j                  dd      }t        |      dk(  r|\  }}|j                  t        |          n|d   }|j	                  t        |          _ ||fS )N-      r   )splitrK   appendREVERSE_TYPES_MAPextend)rB   rQ   rV   r^   ttype_subtypes          r    rX   zFunctions._get_allowed_pytypes{   sy    AGGCOE5zQ!&w ''(9'(BCa  !25!9:  ...r"   c                    t        |      dk(  r>|d   }|D ]3  }t        |      j                  }||vst        j                  ||||       y t        |      dkD  r~|r{t        |d         j                  }|D ]
  }||v s|}	 n t        j                  ||d   ||      |D ]3  }t        |      j                  }||	vst        j                  ||||       y y y )Nrb   r   )rK   rY   r8   r   rZ   )
rB   r]   r^   rQ   rC   elementr_   firstsubtypesalloweds
             r    r\   zFunctions._subtype_check   s    A%  02""&w-"8"8"*::$66%wH H #
 !"Q&7 $--E,H$&G -
 !22!71:ue= =""&w-"8"8"'1$66%wH H # ,3&r"   rQ   r   c                     t        |      S r   )absrB   args     r    	_func_abszFunctions._func_abs       3xr"   zarray-numberc                 H    |r t        |      t        t        |            z  S y r   )sumr   rK   rr   s     r    	_func_avgzFunctions._func_avg   s    s8eCHo--r"   T)rQ   rI   c                     |D ]  }||c S  y r   r#   )rB   r   arguments      r    _func_not_nullzFunctions._func_not_null   s    !H# "r"   c                 ,    t        |t              r|S |gS r   )
isinstancer   rr   s     r    _func_to_arrayzFunctions._func_to_array   s    c4 J5Lr"   c                 ^    t        |t              r|S t        j                  |dt              S )N),:)
separatorsdefault)r}   STRING_TYPEjsondumpsr   rr   s     r    _func_to_stringzFunctions._func_to_string   s)    c;'J::cj&)+ +r"   c                     t        |t        t        t        f      ry |y t        |t        t
        f      r|S 	 t	        |      S # t        $ r 	 t        |      cY S # t        $ r Y Y y w xY ww xY wr   )r}   r   r   r   r   r   
ValueErrorrr   s     r    _func_to_numberzFunctions._func_to_number   so    cD$-.[c5\*J 3x    :%!    s/   
A 	A,
AA,	A($A,'A((A,r   r   c                 
    ||v S r   r#   )rB   subjectsearchs      r    _func_containszFunctions._func_contains   s      r"   )r   r   r	   c                     t        |      S r   )rK   rr   s     r    _func_lengthzFunctions._func_length   ru   r"   c                 $    |j                  |      S r   )endswithrB   r   suffixs      r    _func_ends_withzFunctions._func_ends_with   s    v&&r"   c                 $    |j                  |      S r   )r3   r   s      r    _func_starts_withzFunctions._func_starts_with   s      ((r"   c                 Z    t        |t              r|d d d   S t        t        |            S )NrH   )r}   r   r   reversedrr   s     r    _func_reversezFunctions._func_reverse   s)    c;'tt9&&r"   c                 ,    t        j                  |      S r   )mathceilrr   s     r    
_func_ceilzFunctions._func_ceil   s    yy~r"   c                 ,    t        j                  |      S r   )r   floorrr   s     r    _func_floorzFunctions._func_floor   s    zz#r"   zarray-stringc                 $    |j                  |      S r   )join)rB   	separatorr   s      r    
_func_joinzFunctions._func_join   s    ~~e$$r"   r   c                 n    g }|D ]-  }|j                  |j                  |j                  |             / |S r   )re   visit
expression)rB   r   rs   resultrl   s        r    	_func_mapzFunctions._func_map   s3    GMM&,,v'8'8'BC r"   c                     |rt        |      S y r   )maxrr   s     r    	_func_maxzFunctions._func_max       s8Or"   r	   c                 :    i }|D ]  }|j                  |        |S r   )update)rB   r   mergedrs   s       r    _func_mergezFunctions._func_merge  s"    CMM# r"   c                     |rt        |      S y r   )minrr   s     r    	_func_minzFunctions._func_min  r   r"   c                 *    t        t        |            S r   )r   sortedrr   s     r    
_func_sortzFunctions._func_sort  s    F3K  r"   c                     t        |      S r   )rw   rr   s     r    	_func_sumzFunctions._func_sum  ru   r"   c                 4    t        |j                               S r   )r   keysrr   s     r    
_func_keyszFunctions._func_keys  s     CHHJr"   c                 4    t        |j                               S r   )r   valuesrr   s     r    _func_valueszFunctions._func_values"  s    CJJL!!r"   c                     t        |t              ryt        |t              ryt        |t              ryt        |t              ryt        |t
        t        f      ry|yy )Nr   r   r   r	   r   r
   )r}   r   r   r   r   r   r   rr   s     r    
_func_typezFunctions._func_type&  sT    c;'T"T"T"eS\*[ r"   c           	      "   |s|S | j                  t        |j                  |j                  |d               j                        }|dvrt        j                  d|d   |ddg      | j                  ||gd      }t        t        ||            S )Nr   )r   r   sort_byr   r   key)
r[   rY   r   r   r8   r   rZ   _create_key_funcr   r   )rB   r   r   required_typekeyfuncs        r    _func_sort_byzFunctions._func_sort_by5  s    L 66f//q:;DDF 44..58]Xx4HJ J'')6(13 F5g.//r"   c                 L    | j                  |ddgd      }|rt        ||      S y )Nr   r   min_byr   )r   r   rB   r   r   r   s       r    _func_min_byzFunctions._func_min_byI  4    '')18(<(02 u'**r"   c                 L    | j                  |ddgd      }|rt        ||      S y )Nr   r   max_byr   )r   r   r   s       r    _func_max_byzFunctions._func_max_byS  r   r"   c                       fd}|S )Nc                     j                  j                  |       }t        |      j                  }j	                  |      }|vrt        j                  ||      |S r   )r   r   rY   r8   r[   r   rZ   )xr   r_   jmespath_typerV   r   rC   rB   s       r    r   z+Functions._create_key_func.<locals>.keyfunc^  sc    \\&"3"3Q7F"6l33O ::?KMM1 22!6=-I IMr"   r#   )rB   r   rV   rC   r   s   ```` r    r   zFunctions._create_key_func]  s    	 r"   c                 .    t         j                  |d      S )Nunknown)	TYPES_MAPrJ   )rB   pyobjects     r    r[   z#Functions._convert_to_jmespath_typei  s    }}Xy11r"   N)'r8   r9   r:   r5   rF   rA   rN   rS   rX   r\   r   rt   rx   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r[   r#   r"   r    r=   r=   C   s   N	.@76./H8 ($% & .)*+ , ./  0 
 }  }+ + }     '8,-}=! >! 678 9 ($w
&;<' =' ($w
&;<) =) '8,-.' /' ($% & ($% & ($w0@&AB% C% ($w	&:; < ..9:; < (67 8 ..9:; < ..9:;! <! .)*+ , ($%  & 
 ($%" &" }  '#gz%:;0 <0& '#gz%:; < '#gz%:; <
2r"   r=   )r   r   jmespathr   jmespath.compatr   r   r   r   r   rf   r   rY   r%   r	   r=   r#   r"   r    <module>r      s       6 7
 	$ $& & ,t ,,g2/8 g2r"   