o
    gZh7                     @   s.  d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
mZmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z"m#Z#m$Z$m%Z% d	d
l&m'Z'm(Z(m)Z) e *dZ+de,e-dd   Z.e *dZ/e.d Z0eeeefde
e	e,e,f  deedee,e,f e,f deedee,e,f e,f deedee,e,f e,f deede,f defddZ1		d%de
eee,ef ee,ef ge
ee,ef  f  de
eee,ef ege
e f  de'fddZ2dee,ef dede
e fddZ3e2e3d Z4G d!d" d"Z5G d#d$ d$e5Z6dS )&    N)
AnyCallable
CollectionDictIterableListMappingOptionalTupleUnion)
ApiResponseBinaryApiResponseHeadApiResponseHttpHeadersListApiResponse
NodeConfigObjectApiResponseSniffOptionsTextApiResponse	Transport)DEFAULTDefaultType   )__versionstr__)warn_stacklevel)HTTP_EXCEPTIONSApiErrorConnectionErrorElasticsearchWarningSerializationErrorUnsupportedProductError   )_TYPE_SYNC_SNIFF_CALLBACK_base64_auth_header_quote_queryz\"([^\"]*)\"z2application/vnd.elasticsearch+%s; compatible-with=.z3application/(json|x-ndjson|vnd\.mapbox-vector-tile))z\g<1>headers	http_authapi_key
basic_authbearer_authreturnc           	      C   sR  | d u rt  } n	t| t st | } |tur|nd }|tur|nd }|d urR|d ur-tdt|tsBt|ttfrEtdd |D rE|}ntdt	j
dtt d |turX|nd }|tur`|nd }|sh|sh|rtdd |||fD dkrztd	| r| d
d d urtd|rdt| | d
< |rdt| | d
< |rd| | d
< | S )NzRCan't specify both 'http_auth' and 'basic_auth', instead only specify 'basic_auth'c                 s   s    | ]}t |tV  qd S N)
isinstancestr.0x r2   W/var/www/html/lang_env/lib/python3.10/site-packages/elasticsearch/_sync/client/_base.py	<genexpr>Y   s    z'resolve_auth_headers.<locals>.<genexpr>z}The deprecated 'http_auth' parameter must be either 'Tuple[str, str]' or 'str'. Use either the 'basic_auth' parameter insteadz]The 'http_auth' parameter is deprecated. Use 'basic_auth' or 'bearer_auth' parameters insteadcategory
stacklevelc                 s   s    | ]}|d uV  qd S r,   r2   r/   r2   r2   r3   r4   m   s
    
r!   z>Can only set one of 'api_key', 'basic_auth', and 'bearer_auth'authorizationzGCan't set 'Authorization' HTTP header with other authentication optionszApiKey zBasic zBearer )r   r-   r   
ValueErrorr.   listtupleall	TypeErrorwarningswarnDeprecationWarningr   sumgetr#   )	r&   r'   r(   r)   r*   Zresolved_http_authZresolved_basic_authZresolved_api_keyZresolved_bearer_authr2   r2   r3   resolve_auth_headersC   sj   


rC   host_info_callbacksniffed_node_callbackc                    sh    d u d u ks
J  d ur#dt ttf dtdtt f fdd}|dtdtdtt ffdd	}|S )
N	node_infonode_configr+   c                    s,    d usJ  | |j |jdd u rd S |S )NhostportrH   rF   rG   )rD   r2   r3   _sniffed_node_callback   s   z5create_sniff_callback.<locals>._sniffed_node_callback	transportsniff_optionsc              
      s:  | j  D ]}z| jddddi|js|jnd d\}}W n ttfy'   Y qw d|j  kr3dks5n qg }|di 	 D ]T}|d	i d
}|rPd|vrQq?d|v rl|
dd\}}	|}
|	dd\}}t|}n|dd\}
}t|} d us~J  ||jj|
|d}|d u rq?|| q?|r|  S qg S )NGETz/_nodes/_all/httpacceptz5application/vnd.elasticsearch+json; compatible-with=8)r&   request_timeout   +  nodeshttpZpublish_address:/r!   rH   )Z	node_poolr<   perform_requestZis_initial_sniffZsniff_timeoutr   r   statusrB   valuessplitrsplitintnodereplaceappend)rM   rN   _metaZ
node_infosZnode_configsrF   addressZfqdn	ipaddressrI   Zport_strrJ   Zsniffed_noderE   r2   r3   sniff_callback   sN   
z-create_sniff_callback.<locals>.sniff_callback)r   r.   r   r   r	   r   r   r   )rD   rE   rL   rf   r2   )rD   rE   r3   create_sniff_callback   s$   
6rg   rF   rG   c                 C   s   |  dg dgkrd S |S )NZrolesZmaster)rB   rK   r2   r2   r3   _default_sniffed_node_callback   s   rh   re   c                   @   s|   e Zd ZdeddfddZedefddZddddd	ed
edee	ee
f  dee	eef  dee
 dee
 fddZdS )
BaseClient
_transportr+   Nc                 C   s<   || _ t| _t | _t| _t| _t| _t| _t| _	d| _
d S )NF)rj   r   _client_metar   _headers_request_timeout_ignore_status_max_retries_retry_on_timeout_retry_on_status_verified_elasticsearch)selfrj   r2   r2   r3   __init__   s   
zBaseClient.__init__c                 C   s   | j S r,   )rj   )rs   r2   r2   r3   rM      s   zBaseClient.transportparamsr&   bodymethodpathrv   r&   rw   c                   sp  |r| j    | n| j  dtdd f fdd}|d |d |r/| dt| }n|}| jj|| || j| j| j	| j
| jd	\}}	|d	krP|jd
ksd|j  kr[dk sn | jtu sl| jd u sl|j| jvrt|	}
t|	trz|	d|
}t|trd|v r|d }|}
W n tttfy   Y nw t|jt|
||	d| js|jdddkrd| _n|jdkr|jdk rtd||	dd|jv r|jdpd }t|p|f}t }|D ]
}tj|t |d q|d	krt!|d}|S t|	trt"|	|d}|S t|	t#rt$|	|d}|S t|	tr"t%|	|d}|S t|	t&r0t'|	|d}|S t(|	|d}|S )Nheaderr+   c                    s(     | d }|rtt| | < d S d S r,   )rB   _COMPAT_MIMETYPE_REsub_COMPAT_MIMETYPE_SUB)rz   mimetypeZrequest_headersr2   r3   mimetype_header_to_compat  s   z=BaseClient.perform_request.<locals>.mimetype_header_to_compatAcceptzContent-Type?)r&   rw   rQ   max_retriesZretry_on_statusZretry_on_timeoutZclient_metaHEADi  rR   rS   errortype)messagerb   rw   zx-elastic-product ZElasticsearchTi,  zbThe client noticed that the server is not Elasticsearch and we do not support this unknown productwarningr5   )rb   )rw   rb   ))rl   copyupdater.   r$   rM   rX   rm   ro   rq   rp   rk   rY   rn   r   r-   dictrB   r9   KeyErrorr=   r   r   rr   r&   r    strip_WARNING_REfindallr   r>   r?   r   r   r   r:   r   r   bytesr   r   )rs   rx   ry   rv   r&   rw   r   targetrb   Z	resp_bodyr   r   Zwarning_headerZwarning_messagesr7   Zwarning_messageresponser2   r   r3   rX      s   	









	zBaseClient.perform_request)__name__
__module____qualname__r   rt   propertyrM   r.   r	   r   r   r   rX   r2   r2   r2   r3   ri      s(    ri   c                       sj   e Zd Zd fddZddddded	ed
eeeef  deeeef  dee dee fddZ	  Z
S )NamespacedClientclientri   r+   Nc                    s   || _ t | j j d S r,   )_clientsuperrt   rM   )rs   r   	__class__r2   r3   rt   v  s   zNamespacedClient.__init__ru   rx   ry   rv   r&   rw   c                C   s   | j j|||||dS )Nru   )r   rX   )rs   rx   ry   rv   r&   rw   r2   r2   r3   rX   z  s   
z NamespacedClient.perform_request)r   ri   r+   N)r   r   r   rt   r.   r	   r   r   r   rX   __classcell__r2   r2   r   r3   r   u  s$    	r   )NN)7rer>   typingr   r   r   r   r   r   r   r	   r
   r   Zelastic_transportr   r   r   r   r   r   r   r   r   r   Zelastic_transport.client_utilsr   r   _versionr   compatr   
exceptionsr   r   r   r   r   r    utilsr"   r#   r$   compiler   r.   	partitionZ_COMPAT_MIMETYPE_TEMPLATEr{   r}   rC   rg   rh   Zdefault_sniff_callbackri   r   r2   r2   r2   r3   <module>   st   00 


J*
U

 
