Team Ai
Apppublic

openenv/coding_env

sourceHugging Faceupdated 3mo agoView on Hugging Face
21likes
providers.cpython-311.pyc158 linesDownload Raw Back to __pycache__
1�

2���h!���dZddlmZddlmZmZddlmZmZm	Z	Gd�de��Z3Gd�de4��ZGd	�d5e6��ZdS)z�7Container provider abstractions for running environment servers.8 9This module provides a pluggable architecture for different container providers10(local Docker, Kubernetes, cloud providers, etc.) to be used with HTTPEnvClient.11�)�annotations)�ABC�abstractmethod)�Any�Dict�Optionalc�b�eZdZdZe		ddd���Zedd���Zeddd���ZdS)�ContainerProvidera�12    Abstract base class for container providers.13 14    Providers implement this interface to support different container platforms:15    - LocalDockerProvider: Runs containers on local Docker daemon16    - KubernetesProvider: Runs containers in Kubernetes cluster17    - FargateProvider: Runs containers on AWS Fargate18    - CloudRunProvider: Runs containers on Google Cloud Run19 20    The provider manages a single container lifecycle and provides the base URL21    for connecting to it.22 23    Example:24        >>> provider = LocalDockerProvider()25        >>> base_url = provider.start_container("echo-env:latest")26        >>> print(base_url)  # http://localhost:800027        >>> # Use the environment via base_url28        >>> provider.stop_container()29    N�image�str�port�
Optional[int]�env_vars�Optional[Dict[str, str]]�kwargsr�returnc��dS)a�30        Start a container from the specified image.31 32        Args:33            image: Container image name (e.g., "echo-env:latest")34            port: Port to expose (if None, provider chooses)35            env_vars: Environment variables to pass to container36            **kwargs: Provider-specific options37 38        Returns:39            Base URL to connect to the container (e.g., "http://localhost:8000")40 41        Raises:42            RuntimeError: If container fails to start43        N�)�selfrr
rrs     �-/app/src/core/containers/runtime/providers.py�start_containerz!ContainerProvider.start_container)s	��.	
���Nonec��dS)z�44        Stop and remove the running container.45 46        This cleans up the container that was started by start_container().47        Nr)rs r�stop_containerz ContainerProvider.stop_containerBs	��	
�r�>@�base_url�	timeout_s�floatc��dS)aQ48        Wait for the container to be ready to accept requests.49 50        This typically polls the /health endpoint until it returns 200.51 52        Args:53            base_url: Base URL of the container54            timeout_s: Maximum time to wait55 56        Raises:57            TimeoutError: If container doesn't become ready in time58        Nr)rrrs   r�wait_for_readyz ContainerProvider.wait_for_readyKs	��	
�r�NN�59rrr
rrrrrrr�rr�r�rrrrrr)�__name__�60__module__�__qualname__�__doc__rrrr!rrrr61r62s���������(�#�-1�	
�
�
�
��^�
�0�
�
�
��^�
��

�

�

�

��^�

�

�

rr63c�H�eZdZdZd�Z		ddd
�Zdd�Zddd�Zdd�Zdd�Z	dS)�LocalDockerProvidera�64    Container provider for local Docker daemon.65 66    This provider runs containers on the local machine using Docker.67    Useful for development and testing.68 69    Example:70        >>> provider = LocalDockerProvider()71        >>> base_url = provider.start_container("echo-env:latest")72        >>> # Container running on http://localhost:<random-port>73        >>> provider.stop_container()74    c��d|_d|_ddl}	|�ddgddd���dS#|jt75|jf$rtd���wxYw)	z%Initialize the local Docker provider.Nr�docker�versionT�)�check�capture_output�timeoutzHDocker is not available. Please install Docker Desktop or Docker Engine.)�
_container_id�_container_name�76subprocess�run�CalledProcessError�FileNotFoundError�TimeoutExpired�RuntimeError�rr6s  r�__init__zLocalDockerProvider.__init__js���,0���.2���	����77	��N�N��9�%��#��	
�
�
�
�
�
���-�/@�*�B[�\�	�	�	��Z���
�	���s	�1�'ANrrr
rrrrrrc���ddl}ddl}|�|���}|�|��|_dddd|jd|�d�g}|r6|���D]!\}}	|�d	|�d78|	��g���"|�|��|�|ddd���}79|80j	�81��|_|�d
��d|��}|S)a]82        Start a Docker container locally.83 84        Args:85            image: Docker image name86            port: Port to expose (if None, finds available port)87            env_vars: Environment variables for the container88            **kwargs: Additional Docker run options89 90        Returns:91            Base URL to connect to the container92        rNr.r7z-dz--namez-pz:8000z-e�=T)r2�textr1�zhttp://localhost:)
r6�time�_find_available_port�_generate_container_namer5�items�extend�appendr7�stdout�stripr4�sleep)rrr
rrr6rB�cmd�key�value�resultrs            rrz#LocalDockerProvider.start_container~s$��&	���������<��,�,�.�.�D� $�<�<�U�C�C���
�e���d�*��T�.�.�.�	93���	5�&�n�n�.�.�
5�
5�94��U��95�96�D�S�"2�"2�5�"2�"2�3�4�4�4�4�	�97�98�5��������D�t�4��P�P��#�]�0�0�2�2���	
�99�100�1�
�
�
�-�t�-�-���rrc�101�|j�dSddl}	|�dd|jgddd���|�dd|jgddd���n#|j$rYnwxYwd|_d|_dS#d|_d|_wxYw)	z7102        Stop and remove the Docker container.103        Nrr.�stopT�104)r2r1r3�rm)r4r6r7r8r5r<s  rrz"LocalDockerProvider.stop_container�s�����%��F�����	(��N�N��6�4�#5�6�#���	
�
�
�
�
�N�N��4��!3�4�#���	
�
�
�
�
���,�	�	�	��D�	����"&�D��#'�D� � � ��"&�D��#'�D� �'�'�'�'s*�AA�A2�105A�A2�A�A2�2Brrrrc�r�ddl}ddl}|���}|�d�}|���|z106|krf	|�|d���}|jdkrdSn#|j$rYnwxYw|�d��|���|z107|k�ft
d|�d	|�d108����)a109        Wait for container to be ready by polling /health endpoint.110 111        Args:112            base_url: Base URL of the container113            timeout_s: Maximum time to wait114 115        Raises:116            TimeoutError: If container doesn't become ready117        rNz/healthg@)r3��g�?z
Container at z did not become ready within �s)rB�requests�get�status_code�RequestExceptionrJ�TimeoutError)rrrrBrV�118start_time�119health_url�responses        rr!z"LocalDockerProvider.wait_for_ready�s���	���������Y�Y�[�[�120� �)�)�)�121��i�i�k�k�J�&��2�2�
�#�<�<�122�C�<�@�@���'�3�.�.��F�/���,�
�
�
���
����
�J�J�s�O�O�O��i�i�k�k�J�&��2�2��O�H�O�O�9�O�O�O�123�124�	125s�"A#�#126A0�/A0�intc��ddl}|�|j|j��5}|�d��|�d��|���d}ddd��n#1swxYwY|S)zm127        Find an available port on localhost.128 129        Returns:130            An available port number131        rN)�rrA)�socket�AF_INET�SOCK_STREAM�bind�listen�getsockname)rrarUr
s    rrCz(LocalDockerProvider._find_available_port�s���	�
�
�
�
�]�]�6�>�6�+=�
>�
>�	&�!�
�F�F�7�O�O�O�
�H�H�Q�K�K�K��=�=�?�?�1�%�D�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&�	&����	&�	&�	&�	&��s�AA6�6A:�=A:c���ddl}|�d��d�d��d}t|���dz��}|�d|��S)z�132        Generate a unique container name based on image name and timestamp.133 134        Args:135            image: Docker image name136 137        Returns:138            A unique container name139        rN�/������:i��-)rB�splitr^)rrrB�clean_image�	timestamps     rrDz,LocalDockerProvider._generate_container_namesd��	�����k�k�#�&�&�r�*�0�0��5�5�a�8����	�	���d�*�+�+�	��+�+�	�+�+�+rr"r#r$r%r&)rr^)rrrr)140r'r(r)r*r=rrr!rCrDrrrr,r,\s������������.#�-1�	5�5�5�5�5�n(�(�(�(�@141�142�143�144�145�>
�
�
�
�,�,�,�,�,�,rr,c��eZdZdZdS)�KubernetesProvidera�146    Container provider for Kubernetes clusters.147 148    This provider creates pods in a Kubernetes cluster and exposes them149    via services or port-forwarding.150 151    Example:152        >>> provider = KubernetesProvider(namespace="envtorch-dev")153        >>> base_url = provider.start_container("echo-env:latest")154        >>> # Pod running in k8s, accessible via service or port-forward155        >>> provider.stop_container()156    N)r'r(r)r*rrrrprps��������	�DrrpN)
r*�157__future__r�abcrr�typingrrrr158r,rprrr�<module>rts�����#�"�"�"�"�"�#�#�#�#�#�#�#�#�&�&�&�&�&�&�&�&�&�&�E
�E
�E
�E
�E
��E
�E
�E
�Pu,�u,�u,�u,�u,�+�u,�u,�u,�p
	�
	�
	�
	�
	�*�
	�
	�
	�
	�
	r