o
    YRh1                     @   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 T/home/air/sanwanet/backup_V2/venv/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   )r/   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   r9   S   s   zFunctions._validate_argumentsc                 C   s8   t t|D ]}|| d }|r| || || qd S )Ntypes)rangerB   _type_check_single)r:   actualr   r;   iallowed_typesr   r   r   rE   ]   s   zFunctions._type_checkc                 C   sR   |  |\}}t|j}||vrt||| |||r'| |||| d S d S r   )_get_allowed_pytypestyper2   r   JMESPathTypeError_convert_to_jmespath_type_subtype_check)r:   currentrG   r;   rL   allowed_subtypesactual_typenamer   r   r   rI   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   )splitrB   appendREVERSE_TYPES_MAPextend)r:   rG   rL   rS   ttype_subtyper   r   r   rM   {   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 )NrV   r   )rB   rN   r2   r   rO   )
r:   rR   rS   rG   r;   elementrT   firstsubtypesallowedr   r   r   rQ      s:   

zFunctions._subtype_checkrG   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   rB   re   r   r   r   	_func_avg   s   zFunctions._func_avgT)rG   r@   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   re   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)rm   STRING_TYPEjsondumpsr   re   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   )rm   r   r   r   r   r   
ValueErrorre   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   rh   zFunctions._func_contains)r	   r   r   c                 C   rc   r   )rB   re   r   r   r   _func_length   rh   zFunctions._func_lengthc                 C   
   | |S r   )endswithr:   rz   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?   )rm   rs   r   reversedre   r   r   r   _func_reverse   s   
zFunctions._func_reversec                 C   
   t |S r   )mathceilre   r   r   r   
_func_ceil   r   zFunctions._func_ceilc                 C   r   r   )r   floorre   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   )rY   visit
expression)r:   r   rf   resultr_   r   r   r   	_func_map   s   zFunctions._func_mapc                 C      |rt |S d S r   )maxre   r   r   r   	_func_max      zFunctions._func_maxr   c                 G   s   i }|D ]}| | q|S r   )update)r:   r   mergedrf   r   r   r   _func_merge  s   zFunctions._func_mergec                 C   r   r   )minre   r   r   r   	_func_min  r   zFunctions._func_minc                 C   s   t t|S r   )r   sortedre   r   r   r   
_func_sort     zFunctions._func_sortc                 C   rc   r   )ri   re   r   r   r   	_func_sum  rh   zFunctions._func_sumc                 C      t | S r   )r   keysre   r   r   r   
_func_keys  s   zFunctions._func_keysc                 C   r   r   )r   valuesre   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   )rm   rs   r   r   r   r   r   re   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)
rP   rN   r   r   r2   r   rO   _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   rN   r2   rP   r   rO   )xr   rT   jmespath_typerL   r   r;   r:   r   r   r   ^  s   

z+Functions._create_key_func.<locals>.keyfuncr   )r:   r   rL   r;   r   r   r   r   r   ]  s   	zFunctions._create_key_funcc                 C   s   t |dS )Nunknown)	TYPES_MAPrA   )r:   pyobjectr   r   r   rP   i  s   z#Functions._convert_to_jmespath_typeN)'r2   r3   r4   r/   r>   r9   rE   rI   rM   rQ   r   rg   rj   rl   rn   rv   rx   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rP   r   r   r   r   r6   C   s|    





























	
	r6   )	metaclass)r   rt   jmespathr   jmespath.compatr   rs   r   r   rZ   r   rN   r    r6   r   r   r   r   <module>   s:    