Ë
    9àió  ã                   ó\  — 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	Z
d dlZd dlZddlmZ ddlmZ ej"                  j$                  Z G d„ dej                  «      Z G d„ d	ej(                  j*                  «      Z G d
„ dej.                  j0                  «      Z G d„ de«      Zy)é    Né   )Ú	constantsé   )ÚBaseHTTPAdapterc                   óH   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )	Ú	SSHSocketc                 ón  •— t         ‰| �  t        j                  t        j                  «       || _        d | _        d | _        d| j
                  v r(| j
                  j                  d«      \  | _        | _        d| j
                  v r(| j
                  j                  d«      \  | _        | _        d | _	        y )Nú:ú@)
ÚsuperÚ__init__ÚsocketÚAF_INETÚSOCK_STREAMÚhostÚportÚuserÚsplitÚproc)Úselfr   Ú	__class__s     €úY/home/factor_ks/STREAMA2026/venv/lib/python3.12/site-packages/docker/transport/sshconn.pyr   zSSHSocket.__init__   s‰   ø€ Ü‰ÑÜ�N‰NœF×.Ñ.ô	0àˆŒ	ØˆŒ	ØˆŒ	Ø�$—)‘)ÑØ#'§9¡9§?¡?°3Ó#7Ñ ˆDŒI�t”yØ�$—)‘)ÑØ#'§9¡9§?¡?°3Ó#7Ñ ˆDŒI�t”yàˆ�	ó    c                 óÀ  — dg}| j                   r|d| j                   gz   }| j                  r|d| j                  gz   }|d| j                  dgz   }d }t        j                  sd„ }|}t        t        j                  «      }|j                  dd «       |j                  dd «       t        j                  ||t        j                  t        j                  |¬	«      | _        y )
NÚsshz-lz-pz--údocker system dial-stdioc                  óh   — t        j                   t         j                  t         j                  «       y ©N)ÚsignalÚSIGINTÚSIG_IGN© r   r   ÚfzSSHSocket.connect.<locals>.f.   s   € Ü—‘œfŸm™m¬V¯^©^Õ<r   ÚLD_LIBRARY_PATHÚSSL_CERT_FILE)ÚenvÚstdoutÚstdinÚ
preexec_fn)r   r   r   r   ÚIS_WINDOWS_PLATFORMÚdictÚosÚenvironÚpopÚ
subprocessÚPopenÚPIPEr   )r   ÚkwargsÚargsÚpreexec_funcr#   r&   s         r   ÚconnectzSSHSocket.connect"   sÁ   € ØˆwˆØ�9Š9Ø˜4 §¡Ð+Ñ+ˆDà�9Š9Ø˜4 §¡Ð+Ñ+ˆDà�t˜TŸY™YÐ(BÐCÑCˆàˆÜ×,Ò,ò=àˆLä”2—:‘:Óˆð 	�‰Ð! 4Ô(Ø�‰� Ô&ä×$Ñ$ØØÜ—?‘?Ü—/‘/Ø#ô%ˆ�	r   c                 ó  — | j                   r | j                   j                  j                  rt        d«      ‚| j                   j                  j	                  |«      }| j                   j                  j                  «        |S ©Nz<SSH subprocess not initiated.connect() must be called first.)r   r(   ÚclosedÚ	ExceptionÚwriteÚflush)r   ÚdataÚwrittens      r   Ú_writezSSHSocket._write?   s\   € Ø�yŠy˜DŸI™IŸO™O×2Ò2Üð >ó ?ð ?à—)‘)—/‘/×'Ñ'¨Ó-ˆØ�	‰	�‰×ÑÔØˆr   c                 ó&   — | j                  |«       y r   ©r>   ©r   r<   s     r   ÚsendallzSSHSocket.sendallG   s   € Ø�‰�DÕr   c                 ó$   — | j                  |«      S r   r@   rA   s     r   ÚsendzSSHSocket.sendJ   s   € Ø�{‰{˜4Ó Ð r   c                 óz   — | j                   st        d«      ‚| j                   j                  j                  |«      S r7   )r   r9   r'   Úread)r   Úns     r   ÚrecvzSSHSocket.recvM   s6   € Ø�yŠyÜð >ó ?ð ?à�y‰y×Ñ×$Ñ$ QÓ'Ð'r   c                 óœ   — | j                   s| j                  «        | | j                   j                  _        | j                   j                  S r   )r   r5   r'   Úchannel)r   Úmodes     r   ÚmakefilezSSHSocket.makefileS   s4   € Ø�yŠyØ�L‰LŒNØ#'ˆ�	‰	×ÑÔ à�y‰y×ÑÐr   c                 ó$  — | j                   r | j                   j                  j                  ry | j                   j                  j                  d«       | j                   j                  j	                  «        | j                   j                  «        y )Ns   

)r   r(   r8   r:   r;   Ú	terminate©r   s    r   ÚclosezSSHSocket.closeZ   sV   € Ø�yŠy˜DŸI™IŸO™O×2Ò2ØØ�	‰	�‰×Ñ˜gÔ&Ø�	‰	�‰×ÑÔØ�	‰	×ÑÕr   )Ú__name__Ú
__module__Ú__qualname__r   r5   r>   rB   rD   rH   rL   rP   Ú__classcell__©r   s   @r   r   r      s+   ø„ ôò%ò:òò!ò(ò ör   r   c                   ó&   ‡ — e Zd Zdˆ fd„	Zd„ Zˆ xZS )ÚSSHConnectionc                 óR   •— t         ‰| �  d|¬«       || _        || _        || _        y )NÚ	localhost)Útimeout)r   r   Ússh_transportrZ   Ússh_host)r   r[   rZ   r   r   s       €r   r   zSSHConnection.__init__c   s2   ø€ Ü‰ÑØ ð 	ô 	
ð +ˆÔØˆŒØˆ�r   c                 óF  — | j                   rN| j                   j                  «       }|j                  | j                  «       |j	                  d«       || _        y t        | j                  «      }|j                  | j                  «       |j                  «        || _        y )Nr   )	r[   Úopen_sessionÚ
settimeoutrZ   Úexec_commandr   r\   r5   Úsock)r   ra   s     r   r5   zSSHConnection.connectk   sw   € Ø×ÒØ×%Ñ%×2Ñ2Ó4ˆDØ�O‰O˜DŸL™LÔ)Ø×ÑÐ8Ô9ð ˆ�	ô	 ˜TŸ]™]Ó+ˆDØ�O‰O˜DŸL™LÔ)Ø�L‰LŒNàˆ�	r   )Né<   N)rQ   rR   rS   r   r5   rT   rU   s   @r   rW   rW   b   s   ø„ õö
r   rW   c                   ó0   ‡ — e Zd ZdZdˆ fd„	Zd„ Zd„ Zˆ xZS )ÚSSHConnectionPoolr   c                 ó‚   •— t         ‰| �  d||¬«       d | _        || _        |r|j	                  «       | _        || _        y )NrY   )rZ   Úmaxsize)r   r   r[   rZ   Úget_transportr\   )r   Ú
ssh_clientrZ   rf   r   r   s        €r   r   zSSHConnectionPool.__init__{   sH   ø€ Ü‰ÑØ °'ð 	ô 	
ð "ˆÔØˆŒÙØ!+×!9Ñ!9Ó!;ˆDÔØˆ�r   c                 óX   — t        | j                  | j                  | j                  «      S r   )rW   r[   rZ   r\   rO   s    r   Ú	_new_connzSSHConnectionPool._new_conn…   s   € Ü˜T×/Ñ/°·±¸t¿}¹}ÓMÐMr   c                 ód  — d }	 | j                   j                  | j                  |¬«      }|xs | j                  «       S # t        $ r&}t        j
                  j                  | d«      |‚d }~wt        j                  $ r0 | j                  r!t        j
                  j                  | d«      d ‚Y Œƒw xY w)N)ÚblockrZ   zPool is closed.z>Pool reached maximum size and no more connections are allowed.)ÚpoolÚgetrl   ÚAttributeErrorÚurllib3Ú
exceptionsÚClosedPoolErrorÚqueueÚEmptyÚEmptyPoolErrorrj   )r   rZ   ÚconnÚaes       r   Ú	_get_connzSSHConnectionPool._get_conn‹   s¨   € Øˆð	Ø—9‘9—=‘= t§z¡z¸7�=ÓCˆDð Ò'�t—~‘~Ó'Ð'øô ò 	VÜ×$Ñ$×4Ñ4°TÐ;LÓMÐSUÐUûä�{‰{ò 	Ø�zŠzÜ×(Ñ(×7Ñ7Øð/óð ð	ñ ð	ús   „'? ¿	B/Á!A)Á)AB/Â.B/)Nrb   é
   N)rQ   rR   rS   Úschemer   rj   rx   rT   rU   s   @r   rd   rd   x   s   ø„ Ø€FõòNö(r   rd   c                   ó¸   ‡ — e Zd Zej                  j
                  j                  g d¢z   Zdej                  ej                  dfˆ fd„	Z
d„ Zd„ Zd	d„Zˆ fd„Zˆ xZS )
ÚSSHHTTPAdapter)ÚpoolsrZ   rh   Ú
ssh_paramsÚmax_pool_sizerb   Fc                 ó  •— d | _         |s!| j                  |«       | j                  «        || _        |j	                  d«      r|t        d«      d  | _        || _        || _        t        |d„ ¬«      | _	        t        ‰| �-  «        y )Nzssh://c                 ó"   — | j                  «       S r   )rP   )Úps    r   ú<lambda>z)SSHHTTPAdapter.__init__.<locals>.<lambda>µ   s   € °Q·W±W³Y€ r   )Údispose_func)rh   Ú_create_paramiko_clientÚ_connectr\   Ú
startswithÚlenrZ   r   ÚRecentlyUsedContainerr}   r   r   )r   Úbase_urlrZ   Úpool_connectionsr   Ú	shell_outr   s         €r   r   zSSHHTTPAdapter.__init__¥   s{   ø€ ð ˆŒÙØ×(Ñ(¨Ô2Ø�M‰MŒOà ˆŒØ×Ñ˜xÔ(Ø$¤S¨£] ^Ð4ˆDŒMàˆŒØ*ˆÔÜ*ØÑ+>ô
ˆŒ
ô 	‰ÑÕr   c                 ó(  — t        j                  d«      j                  t         j                  «       t	        j
                  «       | _        t        j                  j                  |«      }|j                  |j                  |j                  dœ| _        t        j                  j!                  d«      }t        j                  j#                  |«      rít	        j$                  «       }t'        |«      5 }|j                  |«       d d d «       |j)                  |j                  «      }d|v r%t	        j*                  |d   «      | j                  d<   d|v r|d   | j                  d<   |j                  €d|v r|d   | j                  d<   |j                  €d|v r|d   | j                  d	<   d
|v r|d
   | j                  d<   | j                  j-                  «        | j                  j/                  t	        j0                  «       «       y # 1 sw Y   �ŒxY w)NÚparamiko)Úhostnamer   Úusernamez~/.ssh/configÚproxycommandra   r�   r   r   r�   ÚidentityfileÚkey_filename)ÚloggingÚ	getLoggerÚsetLevelÚWARNINGrŽ   Ú	SSHClientrh   ÚurllibÚparseÚurlparser�   r   r�   r~   r,   ÚpathÚ
expanduserÚexistsÚ	SSHConfigÚopenÚlookupÚProxyCommandÚload_system_host_keysÚset_missing_host_key_policyÚRejectPolicy)r   rŠ   Ússh_config_fileÚconfr#   Úhost_configs         r   r…   z&SSHHTTPAdapter._create_paramiko_client¹   s­  € Ü×Ñ˜*Ó%×.Ñ.¬w¯©Ô?Ü"×,Ñ,Ó.ˆŒÜ—<‘<×(Ñ(¨Ó2ˆà ×)Ñ)Ø—M‘MØ ×)Ñ)ñˆŒô
 Ÿ'™'×,Ñ,¨_Ó=ˆÜ�7‰7�>‰>˜/Ô*Ü×%Ñ%Ó'ˆDÜ�oÓ&ð ¨!Ø—
‘
˜1”÷àŸ+™+ h×&7Ñ&7Ó8ˆKØ Ñ,Ü*2×*?Ñ*?Ø Ñ/ó+�—‘ Ñ'ð ˜[Ñ(Ø.9¸*Ñ.E�—‘ 
Ñ+Ø�}‰}Ð$¨°;Ñ)>Ø*5°fÑ*=�—‘ Ñ'Ø× Ñ Ð(¨V°{Ñ-BØ.9¸&Ñ.A�—‘ 
Ñ+Ø Ñ,Ø2=¸nÑ2M�—‘ Ñ/à�‰×-Ñ-Ô/Ø�‰×3Ñ3´H×4IÑ4IÓ4KÕL÷#ñ ús   Ã1HÈHc                 ój   — | j                   r' | j                   j                  di | j                  ¤Ž y y )Nr"   )rh   r5   r~   rO   s    r   r†   zSSHHTTPAdapter._connectØ   s)   € Ø�?Š?Ø#ˆD�O‰O×#Ñ#Ñ6 d§o¡oÓ6ð r   c                 ó,  — | j                   s7t        | j                   | j                  | j                  | j                  ¬«      S | j
                  j                  5  | j
                  j                  |«      }|r|cd d d «       S | j                   r*| j                   j                  «       s| j                  «        t        | j                   | j                  | j                  | j                  ¬«      }|| j
                  |<   d d d «       |S # 1 sw Y   S xY w)N)rh   rZ   rf   r   )
rh   rd   rZ   r   r\   r}   Úlockrn   rg   r†   )r   ÚurlÚproxiesrm   s       r   Úget_connectionzSSHHTTPAdapter.get_connectionÜ   sÙ   € Ø�ŠÜ$ØŸ?™?ØŸ™Ø×*Ñ*Ø—]‘]ô	ð ð �Z‰Z�_‰_ñ 	#Ø—:‘:—>‘> #Ó&ˆDÙØ÷	#ñ 	#ð �Š t§¡×'DÑ'DÔ'FØ—‘”ä$ØŸ?™?ØŸ™Ø×*Ñ*Ø—]‘]ô	ˆDð #ˆD�J‰J�s‰O÷	#ð" ˆ÷#	#ð" ˆús   ÁD	ÂA<D	Ä	Dc                 óp   •— t         ‰| �  «        | j                  r| j                  j                  «        y y r   )r   rP   rh   )r   r   s    €r   rP   zSSHHTTPAdapter.close÷   s(   ø€ Ü‰‰ŒØ�?Š?Ø�O‰O×!Ñ!Õ#ð r   r   )rQ   rR   rS   ÚrequestsÚadaptersÚHTTPAdapterÚ	__attrs__r   ÚDEFAULT_NUM_POOLSÚDEFAULT_MAX_POOL_SIZEr   r…   r†   r®   rP   rT   rU   s   @r   r|   r|   Ÿ   s]   ø„ à×!Ñ!×-Ñ-×7Ñ7ò ;ñ €Ið *,Ø"+×"=Ñ"=Ø(×>Ñ>Ø õò(Mò>7ó÷6$ð $r   r|   )r”   r,   rs   r   r   r/   Úurllib.parser™   rŽ   Úrequests.adaptersr°   rp   Úurllib3.connectionÚ r   Úbasehttpadapterr   Ú_collectionsr‰   r   Ú
connectionÚHTTPConnectionrW   ÚconnectionpoolÚHTTPConnectionPoolrd   r|   r"   r   r   ú<module>rÀ      s�   ðÛ Û 	Û Û Û Û Û ã Û Û Û å Ý ,à×,Ñ,×BÑBÐ ôK�—‘ô Kô\�G×&Ñ&×5Ñ5ô ô,$(˜×.Ñ.×AÑAô $(ôN[$�_õ [$r   