
    bi,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     M/home/cdr/jupyterlab/.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)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   c              3   2   K   | ]  }t        |        y wNint.0ps     r   	<genexpr>z"compare_version.<locals>.<genexpr>@        -!s1v-   .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     
Rx	-rxx}-	-B	-rxx}-	-Bb"2 B8"W r   c                      t        | |      dkD  S )Nr   )r@   r:   r;   s     r   
version_ltrC   M   s    2r"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:&qzF8
C(&qzF8!(F:	GT	" !(!4F: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>6MCaIJKg09KF3K034F3K5 M Ls   
A6c                 V   t        | t              r| S g }| j                         D ]   \  }}t        |t              r|j	                  d      }t        |t
              rd|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qyVq[ CA5I  V9D$&{{7+qy wtD1y! !a&6:K&K"V1Q}%5$67D]+DMM#QtfAdV$ !U#HHW%MM#Qqc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    %eT"5k**+-
 	

 F eS!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
5zQU|S!$E
5zQ3eAh.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!;;Ks   !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KUKK4&k51
}$$%EFF %7*w	+	33$$-dV4
 	
 ~j// $$+D62
 	
 :++Z-@-@  $$+D62
 	
 5E>$$NtfU
 	
 F?z22> !))*!D62DF#!19~,,EdVL  D"))*!D62F"")*!D62F ~csr*+	&&&D6"))#..m  vc{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 fd#v&&#&((&tF|n5   c*)!,L>"Q&$21$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    jj??=)D  23;tI !45JR
t+
(jJF!zGGLL!3!3C!8)D	WW\\)Z8WW\\)Y79Y1	F5M 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2C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    MM(,,'(4Ahll*SSE==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<   !c5]#
1v{BxaemmoR5C<1R5C<#2AErU[[]F ~~f!1	;'F v&' H $$.qc 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[[]#/5e}=tq!!qc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Aw#~::<DC+J:!#!1!"A,,7zTF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eU#LL)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
1aqc1#J
 	

  &d;+<+<+>&?@q!1#Qqc
 	
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   