
    2.a                     0    d dl mZ d dl mZ  G d d      Zy)   )errors)utilsc                       e Zd Z ej                  d      	 	 	 dd       Zd Zd	dZ ej                  d      	 	 d
d       Zy)ExecApiMixin	containerNc           
      f   |	5t        j                  | j                  d      rt        j                  d      t        |t              rt        j                  |      }t        |	t              rt         j                   j                  |	      }	|||||||||	d	}|
:t        j                  | j                  d      rt        j                  d      |
|d<   |r||d<   n d| j                  v r| j                  d   |d<   | j                  d|      }| j                  ||	      }| j                  |d
      S )aC  
        Sets up an exec instance in a running container.

        Args:
            container (str): Target container where exec instance will be
                created
            cmd (str or list): Command to be executed
            stdout (bool): Attach to stdout. Default: ``True``
            stderr (bool): Attach to stderr. Default: ``True``
            stdin (bool): Attach to stdin. Default: ``False``
            tty (bool): Allocate a pseudo-TTY. Default: False
            privileged (bool): Run as privileged.
            user (str): User to execute command as. Default: root
            environment (dict or list): A dictionary or a list of strings in
                the following format ``["PASSWORD=xxx"]`` or
                ``{"PASSWORD": "xxx"}``.
            workdir (str): Path to working directory for this exec session
            detach_keys (str): Override the key sequence for detaching
                a container. Format is a single character `[a-Z]`
                or `ctrl-<value>` where `<value>` is one of:
                `a-z`, `@`, `^`, `[`, `,` or `_`.
                ~/.docker/config.json is used by default.

        Returns:
            (dict): A dictionary with an exec ``Id`` key.

        Raises:
            :py:class:`docker.errors.APIError`
                If the server returns an error.
        z1.25z;Setting environment for exec is not supported in API < 1.25)		ContainerUser
PrivilegedTtyAttachStdinAttachStdoutAttachStderrCmdEnvz1.35z/workdir is not supported for API version < 1.35
WorkingDir
detachKeysz/containers/{0}/exec)dataT)r   
version_lt_versionr   InvalidVersion
isinstancestrsplit_commanddictformat_environment_general_configs_url
_post_json_result)selfr   cmdstdoutstderrstdintty
privilegeduserenvironmentworkdirdetach_keysr   urlress                  5/usr/lib/python3/dist-packages/docker/api/exec_api.pyexec_createzExecApiMixin.exec_create   s4   F "u'7'7v'N''M  c3%%c*Ck4(++88EK #$ ""

 v6++E  ")D!,DT222!%!6!6|!DDii.	:ooco-||C&&    c                     t        |t              r|j                  d      }| j                  | j	                  d|            }| j                  |d      S )aL  
        Return low-level information about an exec command.

        Args:
            exec_id (str): ID of the exec instance

        Returns:
            (dict): Dictionary of values returned by the endpoint.

        Raises:
            :py:class:`docker.errors.APIError`
                If the server returns an error.
        Idz/exec/{0}/jsonT)r   r   get_getr   r    )r!   exec_idr-   s      r.   exec_inspectzExecApiMixin.exec_inspectP   sG     gt$kk$'Gii		"2G<=||C&&r0   c                     t        |t              r|j                  d      }||d}| j                  d|      }| j	                  ||      }| j                  |       y)z
        Resize the tty session used by the specified exec command.

        Args:
            exec_id (str): ID of the exec instance
            height (int): Height of tty session
            width (int): Width of tty session
        r2   )hwz/exec/{0}/resize)paramsN)r   r   r3   r   _post_raise_for_status)r!   r5   heightwidthr:   r,   r-   s          r.   exec_resizezExecApiMixin.exec_resizec   sW     gt$kk$'GE*ii*G4jjVj,s#r0   r5   c                     ||d}|ri nddd}| j                  | j                  d|      ||d      }	|r| j                  |	      S |r| j                  |	      S | j	                  |	|||      S )	a  
        Start a previously set up exec instance.

        Args:
            exec_id (str): ID of the exec instance
            detach (bool): If true, detach from the exec command.
                Default: False
            tty (bool): Allocate a pseudo-TTY. Default: False
            stream (bool): Stream response data. Default: False
            socket (bool): Return the connection socket to allow custom
                read/write operations.
            demux (bool): Return stdout and stderr separately

        Returns:

            (generator or str or tuple): If ``stream=True``, a generator
            yielding response chunks. If ``socket=True``, a socket object for
            the connection. A string containing response data otherwise. If
            ``demux=True``, a tuple with two elements of type byte: stdout and
            stderr.

        Raises:
            :py:class:`docker.errors.APIError`
                If the server returns an error.
        )r   DetachUpgradetcp)
ConnectionrB   z/exec/{0}/startT)headersr   stream)r&   demux)r   r   r    _get_raw_response_socket_read_from_socket)
r!   r5   detachr&   rF   socketrG   r   rE   r-   s
             r.   
exec_startzExecApiMixin.exec_startu   s    > 

 "#%

 ooII'1	  
 <<$$0055%%c6s%%HHr0   )	TTFFF NNN)NN)FFFFF)	__name__
__module____qualname__r   check_resourcer/   r6   r?   rL    r0   r.   r   r      s`    U+&>BCE@DG' 'G'R'&$$ U)$BG',1I %1Ir0   r   N)rM   r   r   r   rR   r0   r.   <module>rS      s     bI bIr0   