o
    �»^Þ1  ã                   @   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© ú4/usr/lib/python3/dist-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:    ôù