o
    EDi%                     @   sX  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 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j/dfej,ej/dfgZ0ed1ej2 i Z3i Z4e j5dd Z6e'e(e)ddddfde7de7de7dee8 de9dee8 dee8 dee8ef fddZ:e'e(e)ddddddf	de7de7de7dee8 de9dee8 dee8 dee8 dee8 fddZ;defd d!Z<d"e8fd#d$Z=d%ede>fd&d'Z?d(e8d"e8d)e7dee8 fd*d+Z@e; ZAd,d- ZBG d.d/ d/ZCdS )0    N)deque)DictAnyOptionalTupleCallable)PoolManagerProxyManager)HTTPResponse)ProgrammingError)commoni'           i   urllib3c                  C   s   t D ]} |   qd S N)all_managersclear)manager r   [/var/www/Datamplify/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   optionsr0   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.   




rD   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:   rB   rC   loggerdebugr   )r   reset_seconds
last_resetnowr   r   r   check_conn_expirationz   s   

rL   hostc                 C   s4   |  d| }|t v rt | S t|d}|t |< |S )N__)r>   )_proxy_managersrD   )rM   r>   keyproxy_managerr   r   r   get_proxy_manager   s   
rR   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	ZstdErrorrV   frameLZ4FrameDecompressor
decompresslen)rS   encoding
zstd_decom	lz4_decomr   r   r   get_response_data   s   
re   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)rf   rM   rg   env_varproxyri   namer   r   r   check_env_proxy   s0   rz   c                   C   s   t  jdkr	tS t S )NMainProcess)multiprocessingcurrent_processry   _default_pool_managerrD   r   r   r   r   default_pool_manager   s   r   c                   @   s(   e Zd Zd	dedefddZdd ZdS )
ResponseSource   rS   
chunk_sizec                    s   | _ jd}d |dkr't  dtdttt	f ffdd}|n|dkrCt
j dtdttt t	f ffdd	}|td
  fdd}| | _d S )NrT   rU   cr   c                    s   |   } |t|fS r   )popleftr`   ra   )r   chunk)rc   r   r   zstd_decompress   s   z0ResponseSource.__init__.<locals>.zstd_decompressrV   c                    s\   d}|   }|t|7 } jr|t j7 } j| } |} jr*|t j8 }||fS )Nr   )r   ra   unused_datar`   )r   read_amtr[   r1   )rd   r   r   lz_decompress   s   

z.ResponseSource.__init__.<locals>.lz_decompresshttp_buffer_sizec                  3   s    t  } d}d}d u }	 |sDd }zt|d }W n ty,   tjddd Y nw |s2d}n| | |t|7 }| krBn|rt| dkrLd S rY| \}}||8 }n
|  }|t|8 }|rh|V  q)NFr   Tz%unexpected failure to read next chunk)exc_info)	r   streamnext	ExceptionrG   warningr6   ra   r   )chunksdonecurrent_sizeread_genr   used)buffer_sizer   r`   rS   r   r   buffered   s>   

z)ResponseSource.__init__.<locals>.buffered)rS   rW   r:   rX   rY   decompressobjr   r   bytesrB   rV   r^   r_   r   r   rF   gen)selfrS   r   compressionr   r   r   r   )r   r   r`   rd   rS   rc   r   __init__   s   
"
 zResponseSource.__init__c                 C   s   | j   | j   d S r   )rS   
drain_connclose)r   r   r   r   r     s   
zResponseSource.closeN)r   )__name__
__module____qualname__r
   rB   r   r   r   r   r   r   r      s    Ar   )Datexithttp.clientr@   loggingr|   rp   r8   r5   rC   collectionsr   typingr   r   r   r   r   r)   	lz4.framerV   r   rX   urllib3.poolmanagerr   r	   urllib3.responser
   $clickhouse_connect.driver.exceptionsr   clickhouse_connectr   	getLoggerr   rG   disable_warnings
exceptionsInsecureRequestWarningclient_MAXHEADERSDEFAULT_KEEP_INTERVALDEFAULT_KEEP_COUNTDEFAULT_KEEP_IDLEIPPROTO_TCPr7   
SOL_SOCKETSO_KEEPALIVETCP_NODELAY	SO_SNDBUFr2   setLevelWARNINGrO   r   registerr   rB   strboolr=   rD   rL   rR   r   re   rz   r~   r   r   r   r   r   r   <module>   s    




!
"	