testcontainers / testcontainers/testcontainers-python
New Container: MFflow
未关闭
还没有人认领这个 Issue。
🚀 enhancement
- 主要语言
- Python
- 星标
- 2.3k
- 派生
- 386
- 平均合并
- 4 小时 40 分钟
- 30 天内合并 PR
- 1
描述
What is the new container you'd like to have?
I would like to provide a new testcontainer for mlflow, a tool for managing your machine learning model life cycle.
Why not just use a generic container for this?
I added handy utilites to get the url to track to and to get the client to interact with the container directly.
The implementation would look like:
import logging
import requests
from mlflow import MlflowClient
from testcontainers.core.container import DockerContainer
from testcontainers.core.waiting_utils import wait_container_is_ready
logger = logging.getLogger(__name__)
class MFlowContainer(DockerContainer):
"""Test container for MLflow.
Args:
image: the image to use. Change if you need different version.
port: the internal port to use. The exposed port is assigned automatically.
cmd: the command to run. Defaults to "mlflow server". If you want to use the ui for debugging and testing use "mlflow ui".
"""
def __init__(
self, image: str = "ghcr.io/mlflow/mlflow:v2.14.1", port: int = 5000, cmd: str = "mlflow server"
) -> None:
super().__init__(image=image)
self.port = port
self.with_exposed_ports(self.port)
self.cmd = cmd
def _configure(self) -> None:
self.with_env("MLFLOW_PORT", str(self.port))
self.with_env("MLFLOW_HOST", "0.0.0.0")
self.with_command(self.cmd)
def get_url(self) -> str:
"""Returns the url of the container.
Returns:
The url. Use to track to.
"""
return f"http://{self.get_container_host_ip()}:{self.get_exposed_port(self.port)}"
@wait_container_is_ready(requests.exceptions.ConnectionError, requests.exceptions.ReadTimeout)
def _readiness_probe(self) -> None:
# https://mlflow.org/docs/latest/deployment/deploy-model-locally.html?highlight=health
response = requests.get(f"{self.get_url()}/health", timeout=1)
response.raise_for_status()
def get_client(self) -> MlflowClient:
"""Returns the MlflowClient of the container.
Can be used for testing.
"""
return MlflowClient(self.get_url())
def start(self) -> "MFlowContainer":
self._configure()
super().start()
self._readiness_probe()
return self
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
未指定任何仓库文件或测试。首先定位现有的 Testcontainers Python 容器集成及其测试,然后以提议的 MLflow 容器入口点为指导;当 MLflow 服务准备就绪,并且可以在测试中使用其 URL 和客户端时,即视为完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- docker, python
- 领域
- machine-learning, testing
- Issue 类型
- 功能
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 42/100