
    biB                     4    d dl mZmZ d dlmZ  G d d      Zy)   )errorsutils)CancellableStreamc                       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                  N/home/cdr/jupyterlab/.venv/lib/python3.12/site-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&&r1   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
        r3   )hwz/exec/{0}/resize)paramsN)r   r   r4   r   _post_raise_for_status)r"   r6   heightwidthr;   r-   r.   s          r/   exec_resizezExecApiMixin.exec_resizec   sW     gt$kk$'GE*ii*G4jjVj,s#r1   r6   c                 J   ||d}|ri nddd}| j                  | j                  d|      ||d      }	|r"	 | j                  |	      |	j                          S |r| j	                  |	      S | j                  |	|||      }
|rt        |
|	      S |
S # |	j                          w xY w)	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): Return response data progressively as an iterator
                of strings, rather than a single string.
            socket (bool): Return the connection socket to allow custom
                read/write operations. Must be closed by the caller when done.
            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)
ConnectionrC   z/exec/{0}/startT)headersr   stream)r'   demux)r    r   r!   close_get_raw_response_socket_read_from_socketr   )r"   r6   detachr'   rG   socketrH   r   rF   r.   outputs              r/   
exec_startzExecApiMixin.exec_startu   s    @ 

 "#%

 ooII'1	  
 ||C(		0055''VE'J$VS11M 		s   B B")	TTFFF NNN)NN)FFFFF)	__name__
__module____qualname__r   check_resourcer0   r7   r@   rO    r1   r/   r   r      s^    U+&>BCE@DG' 'G'R'&$$ U)$BG',: %:r1   r   N)rP   r   r   typesr   r   rU   r1   r/   <module>rW      s     %k kr1   