File: //lib/python3/dist-packages/compose/__pycache__/service.cpython-310.pyc
o
    S�`� �                   @   s�  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dlm
Z
 d dlmZ d dl
mZ d dl
mZ d dl
mZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d d
lmZ d dlmZ ddlmZ ddlmZ ddlmZ ddl m!Z! ddl m"Z" ddl m#Z# ddl m$Z$ ddl%m&Z& ddl'm(Z( ddl'm)Z) ddl'm*Z* ddlm+Z+ ddlm,Z, ddlm-Z- ddlm.Z. ddlm/Z/ dd lm0Z0 dd!lm1Z1 dd"lm2Z2 dd#lm3Z3 dd$lm4Z4 dd%lm5Z5 dd&l6m7Z7 dd'l8m9Z9 dd(l8m:Z: dd)l8m;Z; dd*l8m<Z< dd+l=m>Z> dd,lm?Z? dd-lm@Z@ dd.lAmBZB dd/lAmCZC dd0lAmDZD dd1lAmEZE dd2lAmFZF dd3lAmGZG d d4lHmIZI e�JeK�ZLg d5�ZMd6ZNd7ZOd8ZPG d9d:� d:eQ�ZRG d;d<� d<eQ�ZSG d=d>� d>eQ�ZTe	d?d@�ZUe	dAdB�ZVe jWG dCdD� dDe jX��ZYe jWG dEdF� dFe jX��ZZe jWG dGdH� dHe jX��Z[G dIdJ� dJ�Z\dKdL� Z]G dMdN� dN�Z^G dOdP� dPe^�Z_G dQdR� dRe^�Z`G dSdT� dT�ZaG dUdV� dVea�ZbG dWdX� dXea�ZcG dYdZ� dZ�ZdG d[d\� d\�ZeG d]d^� d^�Zfd�d_d`�Zgdadb� Zhdcdd� Zidedf� Zjdgdh� Zkdidj� Zldkdl� Zmdmdn� Zndodp� Zodqdr� Zpdsdt� Zqdudv� Zrdwdx� Zsdydz� Ztd{d|� Zud}d~� ZvG dd�� d��ZwG d�d�� d��ZxG d�d�� d��ZydS )��    N)�
namedtuple)�OrderedDict)�
attrgetter)�APIError)�
ImageNotFound)�NotFound)�	LogConfig)�Mount)�version_gte)�
version_lt)�build_port_bindings)�
split_port)�convert_tmpfs_mounts�   )�__version__)�const)�progress_stream)�DOCKER_CONFIG_KEYS)�is_url)�merge_environment)�merge_labels)�DependencyError)�	MountSpec)�ServicePort)�
VolumeSpec)�DEFAULT_TIMEOUT)�IS_WINDOWS_PLATFORM)�LABEL_CONFIG_HASH)�LABEL_CONTAINER_NUMBER)�
LABEL_ONE_OFF)�
LABEL_PROJECT)�
LABEL_SERVICE)�
LABEL_SLUG)�
LABEL_VERSION)�NANOCPUS_SCALE)�WINDOWS_LONGPATH_PREFIX)�	Container)�CompletedUnsuccessfully)�HealthCheckFailed)�NoHealthCheckConfigured)�OperationFailedError��parallel_execute)�
stream_output)�StreamOutputError)�generate_random_id)�	json_hash)�parse_bytes)�parse_seconds_float)�truncate_id)�unique_everseen)�binarystr_to_unicode)-�cap_add�cap_drop�
cgroup_parent�	cpu_count�cpu_percent�
cpu_period�	cpu_quota�
cpu_rt_period�cpu_rt_runtime�
cpu_shares�cpus�cpuset�device_cgroup_rules�devices�device_requests�dns�
dns_search�dns_opt�env_file�extra_hosts�	group_add�init�ipc�	isolation�	read_only�
log_driver�log_opt�	mem_limit�mem_reservation�
memswap_limit�mem_swappiness�oom_kill_disable�
oom_score_adj�pid�
pids_limit�
privileged�restart�runtime�security_opt�shm_size�storage_opt�sysctls�userns_mode�volumes_from�
volume_driver�service_started�service_healthy�service_completed_successfullyc                   @   �   e Zd Zdd� ZdS )�
BuildErrorc                 C   s   || _ || _d S �N)�service�reason)�selfri   rj   � rl   �1/usr/lib/python3/dist-packages/compose/service.py�__init__w   s   
zBuildError.__init__N��__name__�
__module__�__qualname__rn   rl   rl   rl   rm   rg   v   �    rg   c                   @   rf   )�NeedsBuildErrorc                 C   �
   || _ d S rh   �ri   �rk   ri   rl   rl   rm   rn   }   �   
zNeedsBuildError.__init__Nro   rl   rl   rl   rm   rt   |   rs   rt   c                   @   s   e Zd ZdS )�NoSuchImageErrorN)rp   rq   rr   rl   rl   rl   rm   ry   �   s    ry   �ServiceNamezproject service number�ConvergencePlanzaction containersc                   @   s(   e Zd ZdZdZdZdZedd� �ZdS )�ConvergenceStrategyzrEnumeration for all possible convergence strategies. Values refer to
    when containers should be recreated.
    r   �   �   c                 C   s   | t | �juS rh   )�type�never�rk   rl   rl   rm   �allows_recreate�   s   z#ConvergenceStrategy.allows_recreateN)	rp   rq   rr   �__doc__�changed�alwaysr�   �propertyr�   rl   rl   rl   rm   r|   �   s    r|   c                   @   �   e Zd ZdZdZdZdZdS )�	ImageTypez5Enumeration for the types of images known to compose.r   r   r}   N)rp   rq   rr   r�   �none�local�allrl   rl   rl   rm   r�   �   �
    r�   c                   @   r�   )�BuildActionz+Enumeration for the possible build actions.r   r   r}   N)rp   rq   rr   r�   r�   �force�skiprl   rl   rl   rm   r�   �   r�   r�   c                   @   s|  e Zd Z													d�dd�Zdd� Zd�d	d
�Zd�dd�Zd
d� Zdd� Zd�dd�Z					d�dd�Z
ejddfdd�Z
dd� Zdd� Zedd� �Zedd� �Zejdfdd �Zd!d"� Zd�d#d$�Zd%d&� Zd'd(� Zd�d)d*�Z				d�d,d-�Z	+	d�d.d/�Zd0d1� Zd�d2d3�Zd�d4d5�Zed6d7� �Z d�d8d9�Z!d�d:d;�Z"d<d=� Z#ed>d?� �Z$d@dA� Z%dBdC� Z&dDdE� Z'dFdG� Z(dHdI� Z)dJdK� Z*d�dLdM�Z+dNdO� Z,d�dPdQ�Z-dRdS� Z.dTdU� Z/dVdW� Z0		d�dXdY�Z1dZd[� Z2d�d\d]�Z3d^d_� Z4		d�d`da�Z5dbdc� Z6ddde� Z7d�dfdg�Z8edhdi� �Z9d�djdk�Z:dldm� Z;dndo� Z<dpdq� Z=d�drds�Z>d�dtdu�Z?dvdw� Z@dxdy� ZAdzd{� ZBd|d}� ZCd~d� ZDdS )��ServiceN�defaultFr   c                 K   s�   || _ || _|| _|| _|pg | _|pg | _|ptd �| _|p"td �| _	|p)t
d �| _|p.i | _|	p3g | _
|
| _|
| _|| _|pAg | _d S rh   )�name�client�project�use_networking�linksra   �IpcMode�ipc_mode�NetworkMode�network_mode�PidMode�pid_mode�networks�secrets�	scale_num�default_platform�options�extra_labels)rk   r�   r�   r�   r�   r�   ra   r�   r�   r�   �scaler�   r�   r�   r�   r�   rl   rl   rm   rn   �   s   
zService.__init__c                 C   s   d� | j�S )Nz
<Service: {}>)�formatr�   r�   rl   rl   rm   �__repr__�   s   zService.__repr__c              
      s�   |d u ri }|� d� j|d�|pg  i� ttd � fdd�� jj||d�D ���}|r-|S |� d� j|dd�|p9g  i� tt� fdd	�td � fd
d�� jj||d�D ����S )N�label��one_offc                    �   g | ]	}t �� j|��qS rl   �r&