o
    02b1                     @   s   d dl Z d dlZd dlmZ d dlmZ d dl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dZdS )    N)
exceptions)string_type)get_methods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 6usr/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 )NZ_func_r   )functionr      )r   
startswithgetattrFUNCTION_TABLE)r$   Z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   )r.   KeyErrorr   ZUnknownFunctionError_validate_arguments)selffunction_nameZ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   ZVariadictArityErrorZ
ArityError_type_check)r7   argsr   r8   r   r   r   r6   S   s   zFunctions._validate_argumentsc                 C   s8   t t|D ]}|| d }|r| || || qd S )Ntypes)ranger>   _type_check_single)r7   Zactualr   r8   iallowed_typesr   r   r   r?   ]   s   zFunctions._type_checkc                 C   sR   |  |\}}t|j}||vrt||| |||r'| |||| d S d S r   )_get_allowed_pytypestyper0   r   JMESPathTypeError_convert_to_jmespath_type_subtype_check)r7   currentrA   r8   rE   allowed_subtypesactual_typenamer   r   r   rC   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   )splitr>   appendREVERSE_TYPES_MAPextend)r7   rA   rE   rL   ttype_subtyper   r   r   rF   {   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 )NrO   r   )r>   rG   r0   r   rH   )
r7   rK   rL   rA   r8   elementrM   firstZsubtypesallowedr   r   r   rJ      s:   

zFunctions._subtype_checkrA   r
   c                 C      t |S r   )absr7   argr   r   r   	_func_abs      zFunctions._func_abszarray-numberc                 C   s   |rt |tt| S d S r   )sumr   r>   r]   r   r   r   	_func_avg   s   zFunctions._func_avgT)rA   r<   c                 G   s   |D ]
}|d ur|  S qd S r   r   )r7   r   Zargumentr   r   r   _func_not_null   s
   zFunctions._func_not_nullc                 C   s   t |tr|S |gS r   )
isinstancer   r]   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)rd   STRING_TYPEjsondumpsr   r]   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   )rd   r   r   r   r   r   
ValueErrorr]   r   r   r   _func_to_number   s   
zFunctions._func_to_numberr   r	   c                 C   s   ||v S r   r   )r7   subjectsearchr   r   r   _func_contains   r`   zFunctions._func_contains)r	   r   r   c                 C   r[   r   )r>   r]   r   r   r   _func_length   r`   zFunctions._func_lengthc                 C   
   | |S r   )endswithr7   rq   suffixr   r   r   _func_ends_with      
zFunctions._func_ends_withc                 C   rt   r   )r,   rv   r   r   r   _func_starts_with   ry   zFunctions._func_starts_withc                 C   s$   t |tr|d d d S tt|S )Nr;   )rd   rj   r   reversedr]   r   r   r   _func_reverse   s   
zFunctions._func_reversec                 C   
   t |S r   )mathceilr]   r   r   r   
_func_ceil   ry   zFunctions._func_ceilc                 C   r}   r   )r~   floorr]   r   r   r   _func_floor   ry   zFunctions._func_floorzarray-stringc                 C   rt   r   )join)r7   	separatorr   r   r   r   
_func_join   ry   zFunctions._func_joinr   c                 C   s&   g }|D ]}| ||j| q|S r   )rR   visit
expression)r7   r   r^   resultrX   r   r   r   	_func_map   s   zFunctions._func_mapc                 C      |rt |S d S r   )maxr]   r   r   r   	_func_max      zFunctions._func_maxr   c                 G   s   i }|D ]}| | q|S r   )update)r7   r   mergedr^   r   r   r   _func_merge  s   zFunctions._func_mergec                 C   r   r   )minr]   r   r   r   	_func_min  r   zFunctions._func_minc                 C   s   t t|S r   )r   sortedr]   r   r   r   
_func_sort     zFunctions._func_sortc                 C   r[   r   )ra   r]   r   r   r   	_func_sum  r`   zFunctions._func_sumc                 C      t | S r   )r   keysr]   r   r   r   
_func_keys  s   zFunctions._func_keysc                 C   r   r   )r   valuesr]   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   )rd   rj   r   r   r   r   r   r]   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	   Zsort_byr	   r
   key)
rI   rG   r   r   r0   r   rH   _create_key_funcr   r   )r7   r   r   Z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	   Zmin_byr   )r   r   r7   r   r   r   r   r   r   _func_min_byI     zFunctions._func_min_byc                 C   r   )Nr
   r	   Z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   rG   r0   rI   r   rH   )xr   rM   Zjmespath_typerE   r   r8   r7   r   r   r   ^  s   

z+Functions._create_key_func.<locals>.keyfuncr   )r7   r   rE   r8   r   r   r   r   r   ]  s   	zFunctions._create_key_funcc                 C   s   t |dS )Nunknown)	TYPES_MAPr=   )r7   Zpyobjectr   r   r   rI   i  s   z#Functions._convert_to_jmespath_typeN)'r0   r1   r2   r.   r:   r6   r?   rC   rF   rJ   r   r_   rb   rc   re   rm   ro   rr   rs   rx   rz   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rI   r   r   r   r   r4   C   s|    





























	
	r4   )	metaclass)r~   rk   jmespathr   Zjmespath.compatr   rj   r   r   rS   r   rG   r    r4   r   r   r   r   <module>   s:    