Ë
    ú}ài,7  ã                   óx  — 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mZ d dl	m
Z
 d dlmZ d dlmZmZ ddlmZ ddlmZmZmZmZ dd	lmZ  ej2                  d
d«      Zd„ Zd„ Zd„ Z e
d¬«      d„ «       Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d%d„Z'd„ Z(d&d„Z)d„ Z*d„ Z+d„ Z,d„ Z-d „ Z.d!„ Z/d"„ Z0d'd#„Z1d$„ Z2y)(é    N)ÚdatetimeÚtimezone)Ú	lru_cache)Úzip_longest)ÚurlparseÚ
urlunparseé   )Úerrors)Ú
BYTE_UNITSÚDEFAULT_HTTP_HOSTÚDEFAULT_NPIPEÚDEFAULT_UNIX_SOCKET)Ú	TLSConfigÚURLComponentsz'scheme netloc url params query fragmentc                  ó,   — t        j                  d«      ‚)Nz[utils.create_ipam_pool has been removed. Please use a docker.types.IPAMPool object instead.©r
   ÚDeprecatedMethod©ÚargsÚkwargss     úY/home/factor_ks/STREAMA2026/tests/venv/lib/python3.12/site-packages/docker/utils/utils.pyÚcreate_ipam_poolr      s   € Ü
×
!Ñ
!ð	0óð ó    c                  ó,   — t        j                  d«      ‚)Nz_utils.create_ipam_config has been removed. Please use a docker.types.IPAMConfig object instead.r   r   s     r   Úcreate_ipam_configr   #   ó   € Ü
×
!Ñ
!ð	2óð r   c                 óx   — t        j                  | «      }|j                  d«      }t        j                  |«      S )Núutf-8)Úbase64Ú	b64decodeÚdecodeÚjsonÚloads)ÚheaderÚdatas     r   Údecode_json_headerr&   *   s/   € Ü×Ñ˜FÓ#€DØ�;‰;�wÓ€DÜ�:‰:�dÓÐr   )Úmaxsizec                 óÜ   — | |k(  ryt        d„ | j                  d«      D «       «      }t        d„ |j                  d«      D «       «      }t        ||d¬«      D ]  \  }}||k(  rŒ||kD  r y y y)z·Compare docker versions

    >>> v1 = '1.9'
    >>> v2 = '1.10'
    >>> compare_version(v1, v2)
    1
    >>> compare_version(v2, v1)
    -1
    >>> compare_version(v2, v2)
    0
    r   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N©Úint©Ú.0Úps     r   ú	<genexpr>z"compare_version.<locals>.<genexpr>@   ó   è ø€ Ò-˜!Œs�1�vÑ-ùó   ‚ú.c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr*   r+   r-   s     r   r0   z"compare_version.<locals>.<genexpr>A   r1   r2   )Ú	fillvalueéÿÿÿÿé   )ÚtupleÚsplitr   )Úv1Úv2Ús1Ús2Úc1Úc2s         r   Úcompare_versionr@   0   sv   € ð 
ˆR‚xØä	Ñ-˜rŸx™x¨›}Ô-Ó	-€BÜ	Ñ-˜rŸx™x¨›}Ô-Ó	-€Bä˜b "°Ô2ò ‰ˆˆBØ�Š8ØØ�"ŠWÙáðð r   c                 ó    — t        | |«      dkD  S )Nr   )r@   ©r:   r;   s     r   Ú
version_ltrC   M   s   € Ü˜2˜rÓ" QÑ&Ð&r   c                 ó   — t        | |«       S r*   )rC   rB   s     r   Úversion_gterE   Q   s   € Ü˜"˜bÓ!Ð!Ð!r   c                 ód  — dddœ}t        | t        «      rDt        | «      dk(  r| d   |d<   | d   |d<   n^t        | d   t        «      r	| d   |d<   nB| d   |d<   n9t        | t        «      r$d| v r| d   |d<   d| v r| d   |d<   nt        | «      ‚| |d<   |d   €d|d<   |S t        |d   «      |d<   |S )NÚ )ÚHostIpÚHostPortr	   r7   rI   r   rH   )Ú
isinstancer8   ÚlenÚstrÚdictÚ
ValueError)ÚbindingÚresults     r   Ú_convert_port_bindingrQ   U   sì   € Ø¨Ñ+€FÜ�'œ5Ô!Üˆw‹<˜1ÒØ!(¨¡ˆF�:ÑØ& q™zˆF�8ÒÜ˜ ™
¤CÔ(Ø& q™zˆF�8Òà!(¨¡ˆF�:ÒÜ	�GœTÔ	"Ø˜Ñ Ø!(¨Ñ!4ˆF�:ÑØ˜7Ñ"Ø#*¨8Ñ#4��xÒ ä˜WÓ%Ð%à$ˆˆzÑàˆjÑÐ!ØˆˆzÑð €Mô ! ¨
Ñ!3Ó4ˆˆzÑà€Mr   c                 óö   — i }t        | j                  «       «      D ]U  \  }}t        |«      }d|vr|dz  }t        |t        «      r|D �cg c]  }t        |«      ‘Œ c}||<   ŒGt        |«      g||<   ŒW |S c c}w )Nú/z/tcp)ÚiterÚitemsrL   rJ   ÚlistrQ   )Úport_bindingsrP   ÚkÚvÚkeyrO   s         r   Úconvert_port_bindingsr[   q   sƒ   € Ø€FÜ�]×(Ñ(Ó*Ó+ò 5‰ˆˆ1Ü�!‹fˆØ�c‰>Ø�6‰MˆCÜ�aœÔØIJÖK¸gÔ0°Õ9ÒKˆF�3ŠKä0°Ó3Ð4ˆF�3ŠKð5ð €Mùò Ls   Á
A6c                 óV  — t        | t        «      r| S g }| j                  «       D �]   \  }}t        |t        «      r|j	                  d«      }t        |t
        «      r‘d|v rd|v rt        d|›�«      ‚|d   }t        |t        «      r|j	                  d«      }d|v r
|d   rdnd}nd|v r|d   }nd}g d¢}d|v r|d   |v r|r|› d	|d   › �}n|d   }|j                  |› d
|› d
|› �«       ŒÉt        |t        «      r|j	                  d«      }|j                  |› d
|› d�«       �Œ |S )Nr   ÚroÚmodez-Binding cannot contain both "ro" and "mode": ÚbindÚrw)ÚrsharedÚsharedÚrslaveÚslaveÚrprivateÚprivateÚpropagationú,ú:z:rw)rJ   rV   rU   Úbytesr!   rM   rN   Úappend)ÚbindsrP   rX   rY   r_   r^   Úpropagation_modess          r   Úconvert_volume_bindsrn   ~   sa  € Ü�%œÔØˆà€FØ—‘“ó -‰ˆˆ1Ü�aœÔØ—‘˜Ó!ˆAä�aœÔØ�q‰y˜V q™[Ü ØCÀAÀ5ÐIóð ð �V‘9ˆDÜ˜$¤Ô&Ø—{‘{ 7Ó+�à�q‰yØ  šw‘t¨D‘Ø˜1‘Ø˜‘y‘à�ò!Ðð  Ñ! a¨Ñ&6Ð:KÑ&KÙØ"˜V 1 Q }Ñ%5Ð$6Ð7‘Dà˜]Ñ+�Dà�M‰MØ�#�Q�t�f˜A˜d˜VÐ$õô ˜!œUÔ#Ø—H‘H˜WÓ%�Ø�M‰MØ�#�Q�q�c˜�öðW-ð\ €Mr   c                 óH  — t        | t        «      r| S t        | t        «      s!t        dt	        | «      j
                  › �«      ‚i }| D ]W  }t        |t        «      rd|v r|j                  dd«      \  }}n&|}d}n!t        dt	        |«      j
                  › �«      ‚|||<   ŒY |S )Nz;Expected tmpfs value to be either a list or a dict, found: ri   r7   rG   z3Expected item in tmpfs list to be a string, found: )rJ   rM   rV   rN   ÚtypeÚ__name__rL   r9   )ÚtmpfsrP   ÚmountÚnameÚoptionss        r   Úconvert_tmpfs_mountsrv   ´   sÂ   € Ü�%œÔØˆä�eœTÔ"ÜðÜ˜5“k×*Ñ*Ð+ð-ó
ð 	
ð
 €FØò ˆÜ�eœSÔ!Ø�e‰|Ø %§¡¨C°Ó 3‘�‘gà�Ø‘ô ðÜ˜u›+×.Ñ.Ð/ð1óð ð
 ˆˆtŠðð €Mr   c                 ó    — | s| S t        | t        «      st        d«      ‚g }| D ]'  }t        |t        «      rd|i}|j	                  |«       Œ) |S )Nz"networks parameter must be a list.ÚTarget)rJ   rV   Ú	TypeErrorrL   rk   )ÚnetworksrP   Úns      r   Úconvert_service_networksr|   Ñ   sZ   € ÙØˆÜ�h¤Ô%ÜÐ<Ó=Ð=à€FØò ˆÜ�aœÔØ˜1�ˆAØ�‰�aÕðð €Mr   c                 óÄ   — | j                  dd«      }t        |«      dk(  rt        |«      S | j                  dd«      }t        |«      dk(  rd|d   vrt        |«      S | d fS )Nú@r7   r	   ri   rS   )ÚrsplitrK   r8   )Ú	repo_nameÚpartss     r   Úparse_repository_tagr‚   ß   se   € Ø×Ñ˜S !Ó$€EÜ
ˆ5ƒz�Q‚Ü�U‹|ÐØ×Ñ˜S !Ó$€EÜ
ˆ5ƒz�Q‚˜3 e¨A¡hÑ.Ü�U‹|ÐØ�dˆ?Ðr   c           
      óª  — | s|rt         S | r| j                  «       dk(  rt        S | j                  «       } t        | «      }|j                  }|rt        d„ |D «       «      rt        d| › �d«      }d}|dk(  rt        j                  d«      ‚|dk(  s|dk(  r|dk(  }d}n|d	k(  rd
}|dvrt        j                  d| › �«      ‚|dk(  r$|j                  st        j                  d| › �«      ‚t        |j                  |j                  |j                  |j                  g«      rt        j                  d| › �«      ‚|j                  r|dk(  rt        j                  d| › �«      ‚|j                  }|d
k(  r|j                  �|j                  › d|› �}|j                  }|dv r\|j                  xs d}|dk  r0|dk7  rt        j                  d| › �«      ‚d}|j                  › d|› �}|j                  st         › d|› �}|dk(  r
d|rdnd› �}n|d
k(  rd	}|dv r|› d|› �j#                  d«      S t%        t'        |||ddd¬«      «      j#                  d«      S )Nzunix://c              3   óF   K  — | ]  }|t         j                  › d �v–— Œ y­w)ú+N)ÚstringÚascii_letters)r.   Úxs     r   r0   zparse_host.<locals>.<genexpr>ô   s#   è ø€ ÒKÀ˜¤F×$8Ñ$8Ð#9¸Ð!;Ô;ÑKùs   ‚!z//ÚtcpÚfdzfd protocol is not implementedÚhttpÚhttpsú	http+unixÚunix)r‰   rŽ   ÚnpipeÚsshzInvalid bind address protocol: zInvalid bind address format: r�   z@Invalid bind address format: no path allowed for this protocol: rS   )r‰   r�   r   z/Invalid bind address format: port is required: é   ri   ÚsrG   )r�   r�   z://)ÚschemeÚnetlocÚurlÚparamsÚqueryÚfragment)r   Ústripr   r   r“   Úanyr
   ÚDockerExceptionr”   r–   r—   r˜   ÚpasswordÚpathÚhostnameÚportr   Úrstripr   r   )ÚaddrÚis_win32ÚtlsÚ
parsed_urlÚprotor�   r”   rŸ   s           r   Ú
parse_hostr¦   é   s¶  € á‘HÜÐÙ�4—:‘:“< 9Ò,Ü"Ð"à�:‰:‹<€Dä˜$“€JØ×Ñ€EÙ”CÑKÀUÔKÔKä  4 &˜k¨5Ó1ˆ
Øˆà�‚}Ü×$Ñ$Ð%EÓFÐFð �‚˜% 7Ò*Ø�wÑˆØ‰Ø	�+Ò	ØˆàÐ3Ñ3Ü×$Ñ$Ø-¨d¨VÐ4ó
ð 	
ð �‚~˜j×/Ò/ô ×$Ñ$Ø+¨D¨6Ð2ó
ð 	
ô Ø×Ñ˜:×+Ñ+¨Z×-@Ñ-@Ø×Ñðô ô ×$Ñ$Ø+¨D¨6Ð2ó
ð 	
ð ‡‚˜5 Eš>Ü×$Ñ$ØNÈtÈfÐUó
ð 	
ð �‰ˆØ�FŠ?˜z×2Ñ2Ð>ð !×)Ñ)Ð*¨!¨D¨6Ð2ˆDà×Ñ€FØ�ÑØ�‰Ò# !ˆØ�1Š9Ø˜Š~Ü×,Ñ,ØEÀdÀVÐLóð ð ˆDØ"×)Ñ)Ð*¨!¨D¨6Ð2ˆFà×"Ò"Ü)Ð*¨!¨D¨6Ð2ˆFð �‚~Ø™c‘s rÐ*Ð+‰Ø	�&ŠØˆàÐ&Ñ&Ø�˜˜D˜6Ð"×)Ñ)¨#Ó.Ð.ä”mØØØØØØôó ÷ �vˆcƒ{ðr   c                 ór  — g }| D ]¯  }t        |t        «      r|j                  |«       Œ%t        |t        «      s!t	        j
                  dt        |«      › �«      ‚|j                  d«      }|sŒj|d   }t        |«      dkD  r|d   }n|}t        |«      dkD  r|d   }nd}|j                  |||dœ«       Œ± |S )NzInvalid device type ri   r   r7   r	   Úrwm)Ú
PathOnHostÚPathInContainerÚCgroupPermissions)	rJ   rM   rk   rL   r
   r›   rp   r9   rK   )ÚdevicesÚdevice_listÚdeviceÚdevice_mappingÚpath_on_hostÚpath_in_containerÚpermissionss          r   Úparse_devicesr³   D  s×   € Ø€KØò ˆÜ�fœdÔ#Ø×Ñ˜vÔ&ØÜ˜&¤#Ô&Ü×(Ñ(Ø&¤t¨F£| nÐ5óð ð  Ÿ™ cÓ*ˆÚØ)¨!Ñ,ˆLÜ�>Ó" QÒ&Ø$2°1Ñ$5Ñ!à$0Ð!Ü�>Ó" QÒ&Ø,¨QÑ/‘à#�Ø×ÑØ*Ø#4Ø%0ñ õ ð'ð0 Ðr   c                 ó.  — | st         j                  } | j                  d«      }| j                  d«      xs d }| j                  d«      }|dk(  rd}n|d u}|xs |}i }|r||d<   |s|S |s=t         j                  j	                  t         j                  j                  d«      d«      }t        t         j                  j	                  |d	«      t         j                  j	                  |d
«      ft         j                  j	                  |d«      |¬«      |d<   |S )NÚDOCKER_HOSTÚDOCKER_CERT_PATHÚDOCKER_TLS_VERIFYrG   FÚbase_urlú~z.dockerzcert.pemzkey.pemzca.pem)Úclient_certÚca_certÚverifyr£   )ÚosÚenvironÚgetr�   ÚjoinÚ
expanduserr   )ÚenvironmentÚhostÚ	cert_pathÚ
tls_verifyÚ
enable_tlsr–   s         r   Úkwargs_from_envrÇ   a  s÷   € ÙÜ—j‘jˆØ�?‰?˜=Ó)€Dð —‘Ð 2Ó3Ò;°t€Ið —‘Ð!4Ó5€JØ�RÒØ‰
à tÐ+ˆ
ØÒ(˜j€Jà€FáØ!ˆˆzÑáØˆáÜ—G‘G—L‘L¤§¡×!3Ñ!3°CÓ!8¸)ÓDˆ	äÜ—W‘W—\‘\ )¨ZÓ8Ü—W‘W—\‘\ )¨YÓ7ð9ä—‘—‘˜Y¨Ó1Øô	€Fˆ5�Mð €Mr   c                 ó*  — i }t        | j                  «       «      D ]\  \  }}t        |t        «      r|rdnd}t        |t        «      s|g}|D �cg c]  }t        |t
        «      st        |«      n|‘Œ! c}||<   Œ^ t        j                  |«      S c c}w )NÚtrueÚfalse)rT   rU   rJ   ÚboolrV   rL   r"   Údumps)ÚfiltersrP   rX   rY   Úitems        r   Úconvert_filtersrÏ   ‡  s�   € Ø€FÜ�W—]‘]“_Ó%ò 
‰ˆˆ1Ü�aœÔÙ‘ ˆAÜ˜!œTÔ"Ø�ˆAð ö
àô (¨¬cÔ2ŒC�ŒI¸Ñ<ò
ˆˆqŠ	ð
ô �:‰:�fÓÐùò	
s   Á$Bc                 óº   — | j                  t        j                  «      t        dddt        j                  ¬«      z
  }|j                  |j
                  dz  dz  z   S )z&Convert a datetime to a Unix timestampi²  r7   )Útzinfoé   i  )Ú
astimezoner   Úutcr   ÚsecondsÚdays)ÚdtÚdeltas     r   Údatetime_to_timestamprÙ   •  sD   € à�M‰Mœ(Ÿ,™,Ó'¬(°4¸¸AÄhÇlÁlÔ*SÑS€EØ�=‰=˜5Ÿ:™:¨™?¨TÑ1Ñ1Ð1r   c                 ó6  — t        | t        t        f«      r| S t        | «      dk(  ry| dd j	                  «       r(| d   j	                  «       r| d   dk(  s| d   dk(  r| d d } t
        }| d   j                  «       }|j                  «       r| }d}n| d d }||j                  «       v s|j                  «       r	 t        |«      }t        |||   z  «      } | S t        j                  d| › d	�«      ‚# t        $ r}t        j                  d|› d�«      |‚d }~ww xY w)
Nr   éþÿÿÿr6   ÚbÚBz/Failed converting the string value for memory (z) to an integer.z The specified value for memory (zW) should specify the units. The postfix should be one of the `b` `k` `m` `g` characters)rJ   r,   ÚfloatrK   Úisalphar   ÚlowerÚisdigitÚkeysrN   r
   r›   )r’   ÚunitsÚsuffixÚdigits_partÚdigitsÚves         r   Úparse_bytesrè   ›  s<  € Ü�!”cœ5�]Ô#ØˆÜ
ˆ1ƒv�‚{ØàˆˆB€x×ÑÔ˜a ™eŸm™mœoØˆR‰5�CŠ<˜1˜R™5 Cš<Ø�#�2�ˆAÜ€EØˆr‰U�[‰[‹]€Fð ‡~�~ÔØˆØ‰à˜˜�fˆà�—‘“Ñ §¡Ô!1ð	Ü˜;Ó'ˆFô �˜˜v™Ñ&Ó'ˆð €Hô ×$Ñ$Ø.¨q¨cð 2Jð Jó
ð 	
øô ò 	Ü×(Ñ(ðØ�=Ð 0ð2óð ðûð	ús   Â9C0 Ã0	DÃ9DÄDc                 ó®   — t        | t        «      rt        | j                  «       «      } t	        | «      D ��cg c]  \  }}|r|› d|› �n|‘Œ c}}S c c}}w )Nri   )rJ   rM   rT   rU   Úsorted)ÚlinksrX   rY   s      r   Únormalize_linksrì   Ã  sI   € Ü�%œÔÜ�U—[‘[“]Ó#ˆä/5°e«}×=¡t q¨!™!ˆqˆc��1�#‰J Ñ"Ó=Ð=ùÓ=s   ¸Ac                 ó  — i }t        | «      5 }|D ]c  }|d   dk(  rŒ|j                  «       }|sŒ|j                  dd«      }t        |«      dk(  r|\  }}|||<   ŒJt	        j
                  d| › d|› �«      ‚ 	 ddd«       |S # 1 sw Y   |S xY w)	ze
    Reads a line-separated environment file.
    The format of each line should be "key=value".
    r   ú#ú=r7   r	   z!Invalid line in environment file z:
N)Úopenr™   r9   rK   r
   r›   )Úenv_filerÂ   ÚfÚlineÚ
parse_linerX   rY   s          r   Úparse_env_filerõ   Ê  s¸   € ð
 €Kä	ˆh‹ð M˜1Øò 	MˆDà�A‰w˜#Š~Øà—:‘:“<ˆDÙØàŸ™ C¨Ó+ˆJÜ�:‹ !Ò#Ø!‘��1Ø!"�˜A’ä×,Ñ,Ø7¸°zÀÀTÀFÐKóMð Mñ	M÷Mð$ Ð÷%Mð$ Ðús   ŽA)BÂBc                 ó,   — t        j                  | «      S r*   )Úshlexr9   )Úcommands    r   Úsplit_commandrù   æ  s   € Ü�;‰;�wÓÐr   c                 óf   — d„ }t        | j                  «       «      D �cg c]  } ||Ž ‘Œ	 c}S c c}w )Nc                 óZ   — |€| S t        |t        «      r|j                  d«      }| › d|› �S )Nr   rï   )rJ   rj   r!   )rZ   Úvalues     r   Ú
format_envz&format_environment.<locals>.format_envë  s5   € Øˆ=ØˆJÜ�eœUÔ#Ø—L‘L Ó)ˆEà��a˜�wÐÐr   )rT   rU   )rÂ   rý   Úvars      r   Úformat_environmentrÿ   ê  s0   € ò ô )-¨[×->Ñ->Ó-@Ó(AÖB ‰J˜ÒÒBÐBùÒBs   Ÿ.c                 ó  — |r:t        t        | j                  «       «      «      D ��cg c]  \  }}|› d|› �‘Œ c}}S t        t        | j                  «       «      «      D ��cg c]  \  }}|› d|› �‘Œ c}}S c c}}w c c}}w )Nú ri   )rê   rT   rU   )Úextra_hostsÚtaskrX   rY   s       r   Úformat_extra_hostsr  õ  sƒ   € áä#)¬$¨{×/@Ñ/@Ó/BÓ*CÓ#D÷
Ù˜1˜aˆqˆc��1�#ŠJó
ð 	
ô
  &¤d¨;×+<Ñ+<Ó+>Ó&?Ó@÷Ù�q˜!ˆ1ˆ#ˆQˆqˆcŠ
óð ùó	
ùós   ¨A7Á"A=c                 ó,   — t        j                  d«      ‚)Nz_utils.create_host_config has been removed. Please use a docker.types.HostConfig object instead.r   )Úselfr   r   s      r   Úcreate_host_configr    r   r   )FFr*   )F)3r   Úcollectionsr"   r½   Úos.pathr÷   r†   r   r   Ú	functoolsr   Ú	itertoolsr   Úurllib.parser   r   rG   r
   Ú	constantsr   r   r   r   r£   r   Ú
namedtupler   r   r   r&   r@   rC   rE   rQ   r[   rn   rv   r|   r‚   r¦   r³   rÇ   rÏ   rÙ   rè   rì   rõ   rù   rÿ   r  r  © r   r   ú<module>r     sâ   ðÛ Û Û Û 	Û Û Û ß 'Ý Ý !ß -å ÷ó õ à&�×&Ñ&ØØ-ó€òòòñ �4Ôñó ðò8'ò"òò8
ò3òlò:òóXòvó:#òLò2ò%òP>òò8 òCó	ór   