diff --git a/package-testing/python-sdk-relay/.env.SAMPLE b/package-testing/python-sdk-relay/.env.SAMPLE new file mode 100644 index 0000000..4fab25b --- /dev/null +++ b/package-testing/python-sdk-relay/.env.SAMPLE @@ -0,0 +1,3 @@ +SDK_REF=main +SDK_RELAY_HOST=localhost +SDK_RELAY_PORT=4000 diff --git a/package-testing/python-sdk-relay/.gitignore b/package-testing/python-sdk-relay/.gitignore index e9bb007..9ef644f 100644 --- a/package-testing/python-sdk-relay/.gitignore +++ b/package-testing/python-sdk-relay/.gitignore @@ -1,3 +1,4 @@ bin lib -venv +.venv +tmp diff --git a/package-testing/python-sdk-relay/Dockerfile b/package-testing/python-sdk-relay/Dockerfile deleted file mode 100644 index 183d3ab..0000000 --- a/package-testing/python-sdk-relay/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM python:3.12 - -WORKDIR /app - -COPY requirements.txt . -RUN pip install -r requirements.txt - -# Copy the source code -COPY src/ ./src/ - -CMD ["python", "/app/src/server.py"] diff --git a/package-testing/python-sdk-relay/README.md b/package-testing/python-sdk-relay/README.md index 5c56e29..61b503b 100644 --- a/package-testing/python-sdk-relay/README.md +++ b/package-testing/python-sdk-relay/README.md @@ -2,16 +2,8 @@ Post test case files to this server and check the results against what's expected. -## Running locally with Docker - -Build the docker image: - -```shell -docker build -t Eppo-exp/python-sdk-relay . -``` - -Run the docker container: +## Build and run ```shell -./docker-run.sh +./build-and-run.sh ``` diff --git a/package-testing/python-sdk-relay/build-and-run.sh b/package-testing/python-sdk-relay/build-and-run.sh new file mode 100755 index 0000000..b9ef926 --- /dev/null +++ b/package-testing/python-sdk-relay/build-and-run.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +# Set default values for vars + +: "${SDK_REF:=main}" +: "${SDK_RELAY_HOST:=localhost}" +: "${SDK_RELAY_PORT:=4000}" +SDK="https://github.com/Eppo-exp/eppo-multiplatform.git" + +# Create a persistent virtual environment. +if [ ! -d ".venv" ]; then + python3 -m venv .venv +fi +source .venv/bin/activate + +# checkout the specified ref of the SDK repo, build it, and then insert it into vendors here. +rm -rf tmp +mkdir -p tmp + +echo "Cloning ${SDK}@${SDK_REF}" +git clone -b ${SDK_REF} --depth 1 --single-branch ${SDK} tmp || ( echo "Cloning repo failed"; exit 1 ) + +# TODO: Refactor this into a `build.sh` script that resides in the SDK repo. + +# install dependencies + +pip install maturin +pip install -r requirements.txt + +# Build the wheel file in tmp directory +maturin build --release --out tmp/dist --find-interpreter --manifest-path ./tmp/python-sdk/Cargo.toml + +# Get Python version and find matching wheel +PYTHON_VERSION=$(python3 -c 'import sys; print(f"cp{sys.version_info.major}{sys.version_info.minor}")') +echo "Looking for wheel for Python version: ${PYTHON_VERSION}" + +WHEEL_FILE=$(find tmp/dist -name "eppo_server_sdk-*-${PYTHON_VERSION}-*.whl" | head -n 1) +echo "Found wheel file: ${WHEEL_FILE}" + +if [ -z "$WHEEL_FILE" ]; then + echo "Error: Wheel file not found for Python version ${PYTHON_VERSION}" + echo "Available wheels:" + ls tmp/dist + exit 1 +fi + +pip install "${WHEEL_FILE}" + +# cleanup +rm -rf tmp + +# start the relay server +echo "Listening on port ${SDK_RELAY_HOST}:${SDK_RELAY_PORT}" +python3 src/server.py diff --git a/package-testing/python-sdk-relay/docker-run.sh b/package-testing/python-sdk-relay/docker-run.sh deleted file mode 100755 index 5a14d35..0000000 --- a/package-testing/python-sdk-relay/docker-run.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -# Default is to use the latest build -VERSION="${1:-latest}" - -echo "Starting deployment with version: $VERSION" - -if [ -e .env ]; then - echo "Loading environment variables from .env file" - source .env -fi - -echo "Stopping existing container..." -docker stop python-relay -echo "Removing existing container..." -docker remove python-relay - -echo "Building new image..." -docker build . -t Eppo-exp/python-sdk-relay:$VERSION - -echo "Starting new container..." -docker run -p $SDK_RELAY_PORT:$SDK_RELAY_PORT \ - --add-host host.docker.internal:host-gateway \ - -e SDK_REF \ - -e EPPO_BASE_URL \ - -e SDK_RELAY_PORT \ - --name python-relay \ - --rm \ - -t Eppo-exp/python-sdk-relay:$VERSION; diff --git a/package-testing/python-sdk-relay/requirements.txt b/package-testing/python-sdk-relay/requirements.txt index 98476c9..9c2583c 100644 --- a/package-testing/python-sdk-relay/requirements.txt +++ b/package-testing/python-sdk-relay/requirements.txt @@ -1,2 +1,2 @@ flask -eppo-server-sdk==4.1.0 +# eppo-server-sdk installed from local wheel diff --git a/package-testing/python-sdk-relay/src/server.py b/package-testing/python-sdk-relay/src/server.py index 4f1aa88..b341cb7 100644 --- a/package-testing/python-sdk-relay/src/server.py +++ b/package-testing/python-sdk-relay/src/server.py @@ -160,7 +160,8 @@ def initialize_client_and_wait(): initialize_client_and_wait() port = int(environ.get('SDK_RELAY_PORT', 7001)) - host = environ.get('SDK_RELAY_HOST', '0.0.0.0') + # host = environ.get('SDK_RELAY_HOST', '0.0.0.0') + host = '0.0.0.0' print(f"Starting server on {host}:{port}") app.run( host=host,