
    5                     n   S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  S SKJrJr  \R,                  " SS5      rS rS rS rS rS rS rS rS rS r S r!S r"S r#S&S jr$S r%S'S jr&S r'S r(S r)S  r*S! r+S" r,S# r-S(S$ jr.S% r/g))    N)datetimeVersion   )errors)DEFAULT_HTTP_HOST)DEFAULT_UNIX_SOCKET)DEFAULT_NPIPE)
BYTE_UNITS)	TLSConfig)urlparse
urlunparseURLComponentsz'scheme netloc url params query fragmentc                  .    [         R                  " S5      e)Nz[utils.create_ipam_pool has been removed. Please use a docker.types.IPAMPool object instead.r   DeprecatedMethodargskwargss     %lib/third_party/docker/utils/utils.pycreate_ipam_poolr      s    

!
!	0     c                  .    [         R                  " S5      e)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                 |    [         R                  " U 5      nUR                  S5      n[        R                  " U5      $ )Nutf-8)base64	b64decodedecodejsonloads)headerdatas     r   decode_json_headerr%   )   s/    F#D;;wD::dr   c                 H    [        U 5      n[        U5      nX#:X  a  gX#:  a  gg)zCompare docker versions

>>> v1 = '1.9'
>>> v2 = '1.10'
>>> compare_version(v1, v2)
1
>>> compare_version(v2, v1)
-1
>>> compare_version(v2, v2)
0
r      r   )v1v2s1s2s       r   compare_versionr-   /   s)     
B	B	x	r   c                     [        X5      S:  $ )Nr   )r-   r)   r*   s     r   
version_ltr0   E   s    2"Q&&r   c                 "    [        X5      (       + $ N)r0   r/   s     r   version_gter3   I   s    "!!!r   c                    SSS.n[        U [        5      (       aJ  [        U 5      S:X  a  U S   US'   U S   US'   Ok[        U S   [        5      (       a	  U S   US'   OJU S   US'   OA[        U [        5      (       a(  SU ;   a  U S   US'   SU ;   a  U S   US'   O[        U 5      eXS'   US   c  SUS'   U$ [        US   5      US'   U$ )N )HostIpHostPortr   r(   r7   r   r6   )
isinstancetuplelenstrdict
ValueError)bindingresults     r   _convert_port_bindingr@   M   s    +F'5!!w<1!(F:&qzF8
C((&qzF8!(F:	GT	"	" !(!4F:7"#*8#4x W%%$zj!z M !
!34zMr   c                 
   0 n[        U R                  5       5       H^  u  p#[        U5      nSU;  a  US-  n[        U[        5      (       a   U Vs/ s H  n[        U5      PM     snX'   MP  [        U5      /X'   M`     U$ s  snf )N/z/tcp)iteritemsr;   r8   listr@   )port_bindingsr?   kvkeyr>   s         r   convert_port_bindingsrJ   i   s    F]((*+!fc>6MCaIJKg09KFK034FK , M Ls   B c                    [        U [        5      (       a  U $ / nU R                  5        GH  u  p#[        U[        5      (       a  UR	                  S5      n[        U[
        5      (       a  SU;   a)  SU;   a#  [        SR                  [        U5      5      5      eUS   n[        U[        5      (       a  UR	                  S5      nSU;   a  US   (       a  SOSnOSU;   a  US   nOSnUR                  U SU SU 35        M  [        U[        5      (       a  UR	                  S5      nUR                  U SU S35        GM     U$ )	Nr   romodez/Binding cannot contain both "ro" and "mode": {}bindrw:z:rw)
r8   rE   rD   bytesr    r<   r=   formatreprappend)bindsr?   rG   rH   rN   rM   s         r   convert_volume_bindsrV   v   s+   %Fa!AaqyVq[ EVDG_ 
 V9D$&&{{7+qy wtD1yMM#QtfAdV$ !U##HHW%MM#Qqc9 > Mr   c                    [        U [        5      (       a  U $ [        U [        5      (       d-  [        SR	                  [        U 5      R                  5      5      e0 nU  Hi  n[        U[        5      (       a   SU;   a  UR                  SS5      u  p4O2UnSnO-[        SR	                  [        U5      R                  5      5      eXAU'   Mk     U$ )Nz=Expected tmpfs value to be either a list or a dict, found: {}rP   r(   r5   z5Expected item in tmpfs list to be a string, found: {})	r8   r<   rE   r=   rR   type__name__r;   split)tmpfsr?   mountnameoptionss        r   convert_tmpfs_mountsr_      s    %eT""KVDK(()
 	

 FeS!!e| %C 3g GU,,- 
 t  Mr   c                     U (       d  U $ [        U [        5      (       d  [        S5      e/ nU  H-  n[        U[        5      (       a  SU0nUR	                  U5        M/     U$ )Nz"networks parameter must be a list.Target)r8   rE   	TypeErrorr;   rT   )networksr?   ns      r   convert_service_networksre      s[    h%%<==Fa1Aa  Mr   c                     U R                  SS5      n[        U5      S:X  a  [        U5      $ U R                  SS5      n[        U5      S:X  a  SUS   ;  a  [        U5      $ U S 4$ )N@r(   r   rP   rB   )rsplitr:   r9   )	repo_namepartss     r   parse_repository_tagrk      se    S!$E
5zQU|S!$E
5zQ3eAh.U|d?r   c                    U (       d  U(       a  [         $ U (       a  U R                  5       S:X  a  [        $ U R                  5       n [        U 5      nUR                  nU(       a4  [        U Vs/ s H  oU[        R                  S-   ;  PM     sn5      (       a  [        SU -   S5      nSnUS:X  a  [        R                  " S5      eUS:X  d  US:X  a  US:H  nSnOUS	:X  a  S
nUS;  a  [        R                  " SU  35      eUS:X  a*  UR                  (       d  [        R                  " SU  35      e[        UR                  UR                  UR                  UR                  /5      (       a  [        R                  " SU  35      eUR                  (       a+  US:X  a%  [        R                  " SR!                  U 5      5      eUR                  nUS
:X  a*  UR"                  b  SR%                  UR"                  U45      nUR                  nUS;   au  UR&                  =(       d    SnUS::  a>  US:w  a%  [        R                  " SR!                  U 5      5      eSnUR                   SU 3nUR"                  (       d  [(         SU 3nUS:X  a  SR!                  U(       a  SOS5      nOUS
:X  a  S	nUS;   a  U SU 3R+                  S5      $ [-        [/        UUUSSSS95      R+                  S5      $ s  snf )Nzunix://+z//tcpfdzfd protocol is not implementedhttphttps	http+unixunix)rn   rs   npipesshzInvalid bind address protocol: zInvalid bind address format: ru   zBInvalid bind address format: no path allowed for this protocol: {}rB   )rn   ru   r   z1Invalid bind address format: port is required: {}   rP   zhttp{}sr5   )rr   rt   z://)schemenetlocurlparamsqueryfragment)r
   stripr	   r   rx   anystringascii_lettersr   DockerExceptionry   r{   r|   r}   passwordpathrR   hostnamejoinportr   rstripr   r   )	addris_win32tls
parsed_urlprotoxr   ry   r   s	            r   
parse_hostr      s   H4::<9,""::<D$JECeLe&"6"6"<<eLMMdTk51
}$$%EFF %7*w	+	33$$-dV4
 	
 ~j// $$+D62
 	
 :++Z-@-@   $$+D62
 	
 5E>$$&,
 	

 F?z22> 88Z00$78DF#!19~,, &,  D"))*!D62F"")*!D62F ~s3	&&&D6"))#..m  vc{Q Ms   -K/c                    / nU  H  n[        U[        5      (       a  UR                  U5        M+  [        U[        5      (       d"  [        R
                  " S[        U5       35      eUR                  S5      nU(       d  M|  US   n[        U5      S:  a  US   nOUn[        U5      S:  a  US   nOSnUR                  UUUS.5        M     U$ )NzInvalid device type rP   r   r(   r   rwm)
PathOnHostPathInContainerCgroupPermissions)	r8   r<   rT   r;   r   r   rX   rZ   r:   )devicesdevice_listdevicedevice_mappingpath_on_hostpath_in_containerpermissionss          r   parse_devicesr   /  s    Kfd##v&&#&&((&tF|n5   c*>)!,L>"Q&$21$5!$0!>"Q&,Q/#*#4%0  ' 0 r   c                    U(       d  [         R                  nUR                  S5      nUR                  S5      =(       d    S nUR                  S5      nUS:X  a  SnOUS LnU=(       d    Un0 nU(       a  X7S'   U(       d  U$ U(       d=  [         R                  R	                  [         R                  R                  S5      S5      nU(       d  Uc  Sn[        [         R                  R	                  US	5      [         R                  R	                  US
5      4[         R                  R	                  US5      UU US9US'   U$ )NDOCKER_HOSTDOCKER_CERT_PATHDOCKER_TLS_VERIFYr5   Fbase_url~z.dockerzcert.pemzkey.pemzca.pem)client_certca_certverifyssl_versionassert_hostnamer   )osenvirongetr   r   
expanduserr   )r   r   environmenthost	cert_path
tls_verify
enable_tlsr{   s           r   kwargs_from_envr   L  s
   jj??=)D  23;tI !45JR
t+
(jJF!zGGLL!3!3C!8)D	/1  WW\\)Z8WW\\)Y79Y1'F5M Mr   c                 Z   0 n[        U R                  5       5       Hr  u  p#[        U[        5      (       a  U(       a  SOSn[        U[        5      (       d  U/nU Vs/ s H%  n[        U[
        5      (       d  [        U5      OUPM'     snX'   Mt     [        R                  " U5      $ s  snf )Ntruefalse)rC   rD   r8   boolrE   r;   r!   dumps)filtersr?   rG   rH   items        r   convert_filtersr   y  s    FW]]_%aA!T""A 
 (c22CI<
	 & ::f	
s   ,B(c                 r    U [         R                  " S5      -
  nUR                  UR                  S-  S-  -   $ )z*Convert a UTC datetime to a Unix timestampr      i  )r   utcfromtimestampsecondsdays)dtdeltas     r   datetime_to_timestampr     s3    **1--E==5::?T111r   c                    [        U [        [        45      (       a  U $ [        U 5      S:X  a  gU SS R	                  5       (       a/  U S   R	                  5       (       a  U S   S:X  d	  U S   S:X  a  U S S n [
        nU S   R                  5       nUR                  5       (       a  U nSnOU S S nX!R                  5       ;   d  UR                  5       (       a   [        U5      n[        XAU   -  5      n U $ [        R                  " SR                  U 5      5      e! [         a&    [        R                  " SR                  U5      5      ef = f)Nr   r'   bBzAFailed converting the string value for memory ({}) to an integer.zyThe specified value for memory ({}) should specify the units. The postfix should be one of the `b` `k` `m` `g` characters)r8   intfloatr:   isalphar   lowerisdigitkeysr=   r   r   rR   )rw   unitssuffixdigits_partdigitss        r   parse_bytesr     s8   !c5]##
1v{BxaemmooR5C<1R5C<#2AErU[[]F ~~f!1!1	;'F v&' H $$ &)
 	
  	((%vk2 	s   D 0Ec                     [        U [        5      (       a  [        U R                  5       5      n [	        U 5       VVs/ s H  u  pU(       a  U SU 3OUPM     snn$ s  snnf )NrP   )r8   r<   rC   rD   sorted)linksrG   rH   s      r   normalize_linksr     sN    %U[[]#/5e}=}tq!qc1#J"}===s   Ac                 L   0 n[        U 5       nU Hu  nUS   S:X  a  M  UR                  5       nU(       d  M'  UR                  SS5      n[        U5      S:X  a
  Uu  pVXaU'   MR  [        R
                  " SR                  X5      5      e   SSS5        U$ ! , (       d  f       U$ = f)zY
Reads a line-separated environment file.
The format of each line should be "key=value".
r   #=r(   r   z'Invalid line in environment file {}:
{}N)openr~   rZ   r:   r   r   rR   )env_filer   fline
parse_linerG   rH   s          r   parse_env_filer     s    
 K	h1DAw#~::<DC+J:!#!!"A,,>EE () )  
& ' 
& s   A<B
B#c                 .    [         R                  " U 5      $ r2   )shlexrZ   )commands    r   split_commandr     s    ;;wr   c                 j    S n[        U R                  5       5       Vs/ s H  o!" U6 PM	     sn$ s  snf )Nc                 f    Uc  U $ [        U[        5      (       a  UR                  S5      nU  SU 3$ )Nr   r   )r8   rQ   r    )rI   values     r   
format_env&format_environment.<locals>.format_env  s8    =JeU##LL)Eawr   )rC   rD   )r   r   vars      r   format_environmentr     s6      )-[->->-@(AB(AJ(ABBBs   0c                    U(       a<  [        [        U R                  5       5      5       VVs/ s H  u  p#U SU 3PM     snn$ [        [        U R                  5       5      5       VVs/ s H  u  p#U SU 3PM     snn$ s  snnf s  snnf )N rP   )r   rC   rD   )extra_hoststaskrG   rH   s       r   format_extra_hostsr     s    #)${/@/@/B*C#D
#D41qc1#J#D
 	

  &d;+<+<+>&?@@tq1#Qqc
@ 	
s   B )Bc                 .    [         R                  " S5      e)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   )FF)NNN)F)0r   collectionsr!   r   os.pathr   r   r   packaging.versionr   r5   r   	constantsr   r	   r
   r   r   r   urllib.parser   r   
namedtupler   r   r   r%   r-   r0   r3   r@   rJ   rV   r_   re   rk   r   r   r   r   r   r   r   r   r   r   r   r    r   r   <module>r      s       	     %  ) + % "  - &&-,'"8
$N:Zz:*Z2&R>: C	r   