o
    :ik'                     @   s\  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZmZmZmZmZ d dlZd dlZd dlZd dlZd dlmZmZ d dlmZ d dlmZmZ d dlmZ e e!Z"e#ej$j% dej&_'d	Z(d
Z)d	Z*ej+Z,ej-ej.dfe,ej/dfej-ej0dfej-ej0dfgZ1e d2ej3 i Z4i Z5e j6dd Z7e(e)e*ddddfde8de8de8dee9 de:dee9 dee9 dee9ef fddZ;e(e)e*ddddddf	de8de8de8dee9 de:dee9 dee9 dee9 dee9 fddZ<defd d!Z=d"e9fd#d$Z>d%ede?fd&d'Z@d(e9d"e9d)e8dee9 fd*d+ZAe< ZBd,d- ZCG d.d/ d/ZDdS )0    N)deque)DictAnyOptionalTupleCallable)PoolManagerProxyManager)HTTPResponse)ProgrammingErrorOperationalError)commoni'           i   urllib3c                  C   s   t D ]} |   qd S N)all_managersclear)manager r   o/home/aiteam/pcaa-dev/dashboard-backend/venv/lib/python3.10/site-packages/clickhouse_connect/driver/httputil.pyclose_managers0   s   
r   Tkeep_interval
keep_count	keep_idleca_certverifyclient_certclient_cert_keyreturnc           	      K   s  t  }ttdd d ur|ttj| f ttdd d ur&|ttj|f ttdd d ur7|ttj|f t	j
dkrH|tttdd| f |dd|d< |d	d
|d	< |dkr`t }|rddnd|d< |rn||d< |rt||d< |rz||d< ||d< |dd|d< |S )NTCP_KEEPINTVLTCP_KEEPCNTTCP_KEEPIDLEdarwinTCP_KEEPALIVE   maxsize   retriesr   certifiCERT_REQUIRED	CERT_NONE	cert_reqsca_certs	cert_filekey_filesocket_optionsblockF)core_socket_optionscopygetattrsocketappend
SOCKET_TCPr!   r"   r#   sysplatformgetr*   where)	r   r   r   r   r   r   r   optionsr1   r   r   r   get_pool_manager_options7   s.   
r>   
http_proxyhttps_proxyc	                 K   s   t | ||||||fi |	}	|r)|rtd|ds d| }t|fi |	}
n|r>|ds5d| }t|fi |	}
ntdi |	}
tt t|
< |
S )Nz9Only one of http_proxy or https_proxy should be specifiedhttpzhttp://zhttps://r   )r>   r   
startswithr	   r   inttimer   )r   r   r   r   r   r   r   r?   r@   r=   r   r   r   r   get_pool_managerX   s.   




rE   r   c                 C   sX   t d}|r(t| d}tt }||| k r*td |   |t| < d S d S d S )Nmax_connection_ager   zconnection expiration)	r   get_settingr   r;   rC   rD   loggerdebugr   )r   reset_seconds
last_resetnowr   r   r   check_conn_expirationz   s   

rM   hostc                 C   s4   |  d| }|t v rt | S t|d}|t |< |S )N__)r?   )_proxy_managersrE   )rN   r?   keyproxy_managerr   r   r   get_proxy_manager   s   
rS   responsec                 C   sr   | j dd }|dkr#zt }|| j W S  tjy"   Y nw |dkr6tj	
 }|| jt| jS | jS )Ncontent-encodingzstdlz4)headersr;   	zstandardZstdDecompressorstream_readerdataread	ZstdErrorrW   frameLZ4FrameDecompressor
decompresslen)rT   encoding
zstd_decom	lz4_decomr   r   r   get_response_data   s   
rf   schemeportc                 C   s   |  d  }tj|}|stj| }|sd S tjd}|s-tjd}|s-|S |dkr3d S |  }|dD ]'}| }|rc|d  }||| d| fv rY d S |d| rc d S q<|S )N_proxyno_proxyNO_PROXY*,.:)	lowerosenvironr;   uppersplitstriplstripendswith)rg   rN   rh   env_varproxyrj   namer   r   r   check_env_proxy   s0   r{   c                   C   s   t  jdkr	tS t S )NMainProcess)multiprocessingcurrent_processrz   _default_pool_managerrE   r   r   r   r   default_pool_manager   s   r   c                   @   s0   e Zd Zd
dededee fddZdd	 ZdS )ResponseSource   NrT   
chunk_sizeexception_tagc                    s   | _ || _jd}d |dkr*t  dtdtt	t
f ffdd}|n|dkrFtj dtdttt	 t
f ffdd	}|td
  fdd}| | _d S )NrU   rV   cr    c                    s   |   } |t|fS r   )popleftra   rb   )r   chunk)rd   r   r   zstd_decompress   s   z0ResponseSource.__init__.<locals>.zstd_decompressrW   c                    s\   d}|   }|t|7 } jr|t j7 } j| } |} jr*|t j8 }||fS )Nr   )r   rb   unused_datara   )r   read_amtr\   r2   )re   r   r   lz_decompress   s   

z.ResponseSource.__init__.<locals>.lz_decompresshttp_buffer_sizec            	   
   3   s   t  } d}d}d u }d}d }	 |sSd }zt|d }W n ty; } z|}tjddd W Y d }~nd }~ww |sAd}n| | |t|7 }| krQn|rt| dkrd|rb|sbtd|d S rq| \}}||8 }n
| 	 }|t|8 }|rd}|V  q)NFr   Tz%unexpected failure to read next chunk)exc_infoz(Failed to read response data from server)
r   streamnext	ExceptionrH   warningr7   rb   r   r   )	chunksdonecurrent_sizeread_gendata_received
read_errorr   exused)buffer_sizer   ra   rT   r   r   buffered   sL   


z)ResponseSource.__init__.<locals>.buffered)rT   r   rX   r;   rY   rZ   decompressobjr   r   bytesrC   rW   r_   r`   r   r   rG   gen)selfrT   r   r   compressionr   r   r   r   )r   r   ra   re   rT   rd   r   __init__   s   
"
%zResponseSource.__init__c                 C   s   | j   | j   d S r   )rT   
drain_connclose)r   r   r   r   r   	  s   
zResponseSource.close)r   N)	__name__
__module____qualname__r
   rC   r   strr   r   r   r   r   r   r      s    Gr   )Eatexithttp.clientrA   loggingr}   rq   r9   r6   rD   collectionsr   typingr   r   r   r   r   r*   	lz4.framerW   r   rY   urllib3.poolmanagerr   r	   urllib3.responser
   $clickhouse_connect.driver.exceptionsr   r   clickhouse_connectr   	getLoggerr   rH   disable_warnings
exceptionsInsecureRequestWarningclient_MAXHEADERSDEFAULT_KEEP_INTERVALDEFAULT_KEEP_COUNTDEFAULT_KEEP_IDLEIPPROTO_TCPr8   
SOL_SOCKETSO_KEEPALIVETCP_NODELAY	SO_SNDBUFr3   setLevelWARNINGrP   r   registerr   rC   r   boolr>   rE   rM   rS   r   rf   r{   r   r   r   r   r   r   r   <module>   s    




!
"	