o
    i1                     @   s   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d ZG dd deZG dd deeeZdS )    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                     s    fdd}|S )Nc                    s
    | _ | S N)	signature)func	arguments F/home/ubuntu/.local/lib/python3.10/site-packages/jmespath/functions.py_record_signature'   s   z$signature.<locals>._record_signaturer   )r   r    r   r   r   r   &   s   r   c                       s$   e Zd Z fddZdd Z  ZS )FunctionRegistryc                    s    |    tt| ||| d S r   )_populate_function_tablesuperr!   __init__)clsnamebasesattrs	__class__r   r   r$   .   s   zFunctionRegistry.__init__c                 C   sV   i }t | D ]\}}|dsqt|dd }|d ur%||d||dd  < q|| _d S )N_func_r   )functionr      )r   
startswithgetattrFUNCTION_TABLE)r%   function_tabler&   methodr   r   r   r   r"   2   s   

z)FunctionRegistry._populate_function_table)__name__
__module____qualname__r$   r"   __classcell__r   r   r)   r   r!   -   s    r!   c                   @   s  e Zd Zi Zdd Zdd Zdd Zdd Zd	d
 Zdd Z	e
ddgidd Ze
ddgidd Ze
g dddd Ze
dg idd Ze
dg idd Ze
dg idd Ze
dddgidg id d! Ze
dg d"id#d$ Ze
ddgiddgid%d& Ze
ddgiddgid'd( Ze
dddgid)d* Ze
ddgid+d, Ze
ddgid-d. Ze
ddgidd/gid0d1 Ze
dd2giddgid3d4 Ze
ddd/gid5d6 Ze
d7gddd8d9 Ze
ddd/gid:d; Ze
dd/dgid<d= Ze
ddgid>d? Ze
dd7gid@dA Ze
dd7gidBdC Z e
dg idDdE Z!e
ddgidd2gidFdG Z"e
ddgidd2gidHdI Z#e
ddgidd2gidJdK Z$dLdM Z%dNdO Z&dPS )Q	Functionsc                 C   sZ   z| j | }W n ty   td| w |d }|d }| ||| || g|R  S )NzUnknown function: %s()r,   r   )r0   KeyErrorr   UnknownFunctionError_validate_arguments)selffunction_nameresolved_argsspecr,   r   r   r   r   call_functionH   s   zFunctions.call_functionc                 C   sn   |r|d  drt|t|k rtt|t||nt|t|kr0tt|t||| |||S )Nvariadic)getlenr   VariadictArityError
ArityError_type_check)r;   argsr   r<   r   r   r   r:   S   s   zFunctions._validate_argumentsc                 C   s8   t t|D ]}|| d }|r| || || qd S )Ntypes)rangerC   _type_check_single)r;   actualr   r<   iallowed_typesr   r   r   rF   ]   s   zFunctions._type_checkc                 C   sR   |  |\}}t|j}||vrt||| |||r'| |||| d S d S r   )_get_allowed_pytypestyper3   r   JMESPathTypeError_convert_to_jmespath_type_subtype_check)r;   currentrH   r<   rM   allowed_subtypesactual_typenamer   r   r   rJ   d   s   

zFunctions._type_check_singlec                 C   s`   g }g }|D ]%}| dd}t|dkr |\}}|t|  n|d }|t|  q||fS )N-      r   )splitrC   appendREVERSE_TYPES_MAPextend)r;   rH   rM   rT   ttype_subtyper   r   r   rN   {   s   zFunctions._get_allowed_pytypesc           
      C   s   t |dkr"|d }|D ]}t|j}||vrt||||qd S t |dkr^|r`t|d j}|D ]
}||v r=|}	 nq3t||d |||D ]}t|j}||	vr]t||||qJd S d S d S )NrW   r   )rC   rO   r3   r   rP   )
r;   rS   rT   rH   r<   elementrU   firstsubtypesallowedr   r   r   rR      s:   

zFunctions._subtype_checkrH   r   c                 C      t |S r   )absr;   argr   r   r   	_func_abs      zFunctions._func_abszarray-numberc                 C   s   |rt |tt| S d S r   )sumr   rC   rf   r   r   r   	_func_avg   s   zFunctions._func_avgT)rH   rA   c                 G   s   |D ]
}|d ur|  S qd S r   r   )r;   r   argumentr   r   r   _func_not_null   s
   zFunctions._func_not_nullc                 C   s   t |tr|S |gS r   )
isinstancer   rf   r   r   r   _func_to_array   s   
zFunctions._func_to_arrayc                 C   s   t |tr|S tj|dtdS )N),:)
separatorsdefault)rn   STRING_TYPEjsondumpsr   rf   r   r   r   _func_to_string   s
   
zFunctions._func_to_stringc                 C   sr   t |tttfr
d S |d u rd S t |ttfr|S zt|W S  ty8   zt|W  Y S  ty7   Y Y d S w w r   )rn   r   r   r   r   r   
ValueErrorrf   r   r   r   _func_to_number   s   
zFunctions._func_to_numberr   r
   c                 C   s   ||v S r   r   )r;   subjectsearchr   r   r   _func_contains   ri   zFunctions._func_contains)r
   r   r   c                 C   rd   r   )rC   rf   r   r   r   _func_length   ri   zFunctions._func_lengthc                 C   
   | |S r   )endswithr;   r{   suffixr   r   r   _func_ends_with      
zFunctions._func_ends_withc                 C   r~   r   )r.   r   r   r   r   _func_starts_with   r   zFunctions._func_starts_withc                 C   s$   t |tr|d d d S tt|S )Nr@   )rn   rt   r   reversedrf   r   r   r   _func_reverse   s   
zFunctions._func_reversec                 C   
   t |S r   )mathceilrf   r   r   r   
_func_ceil   r   zFunctions._func_ceilc                 C   r   r   )r   floorrf   r   r   r   _func_floor   r   zFunctions._func_floorzarray-stringc                 C   r~   r   )join)r;   	separatorr   r   r   r   
_func_join   r   zFunctions._func_joinr   c                 C   s&   g }|D ]}| ||j| q|S r   )rZ   visit
expression)r;   r   rg   resultr`   r   r   r   	_func_map   s   zFunctions._func_mapc                 C      |rt |S d S r   )maxrf   r   r   r   	_func_max      zFunctions._func_maxr   c                 G   s   i }|D ]}| | q|S r   )update)r;   r   mergedrg   r   r   r   _func_merge  s   zFunctions._func_mergec                 C   r   r   )minrf   r   r   r   	_func_min  r   zFunctions._func_minc                 C   s   t t|S r   )r   sortedrf   r   r   r   
_func_sort     zFunctions._func_sortc                 C   rd   r   )rj   rf   r   r   r   	_func_sum  ri   zFunctions._func_sumc                 C      t | S r   )r   keysrf   r   r   r   
_func_keys  s   zFunctions._func_keysc                 C   r   r   )r   valuesrf   r   r   r   _func_values"  r   zFunctions._func_valuesc                 C   sZ   t |trdS t |trdS t |trdS t |trdS t |ttfr%dS |d u r+dS d S )Nr
   r   r   r   r   r	   )rn   rt   r   r   r   r   r   rf   r   r   r   
_func_type&  s   



zFunctions._func_typec                 C   sf   |s|S |  t||j|d j}|dvr#td|d |ddg| ||gd}tt	||dS )Nr   )r   r
   sort_byr
   r   key)
rQ   rO   r   r   r3   r   rP   _create_key_funcr   r   )r;   r   r   required_typekeyfuncr   r   r   _func_sort_by5  s   zFunctions._func_sort_byc                 C   &   |  |ddgd}|rt||dS d S )Nr   r
   min_byr   )r   r   r;   r   r   r   r   r   r   _func_min_byI     zFunctions._func_min_byc                 C   r   )Nr   r
   max_byr   )r   r   r   r   r   r   _func_max_byS  r   zFunctions._func_max_byc                    s    fdd}|S )Nc                    s>    j| }t|j}|}| vrt|| |S r   )r   r   rO   r3   rQ   r   rP   )xr   rU   jmespath_typerM   r   r<   r;   r   r   r   ^  s   

z+Functions._create_key_func.<locals>.keyfuncr   )r;   r   rM   r<   r   r   r   r   r   ]  s   	zFunctions._create_key_funcc                 C   s   t |dS )Nunknown)	TYPES_MAPrB   )r;   pyobjectr   r   r   rQ   i  s   z#Functions._convert_to_jmespath_typeN)'r3   r4   r5   r0   r?   r:   rF   rJ   rN   rR   r   rh   rk   rm   ro   rw   ry   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rQ   r   r   r   r   r7   C   s|    





























	
	r7   )r   ru   jmespathr   jmespath.compatr   rt   r   r   r   r[   r   rO   r!   r   r7   r   r   r   r   <module>   s:    