-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* feat(eppo_core): make PollerThread Sync * feat: implement python-sdk * test(python): adapt tests to run against eppo_client-3 To run tests against old SDK: 1. Create and activate a virtual for the old SDK. 2. Install old SDK with `pip install -e .` 3. Install pytest 4. Run pytest in this directory with `-k 'not rust_only'` * refactor(python): split into multiple files The one file was growing too big. Split it into multiple files for easier maintenance. * feat(python): add bandits * feat(python): log bandit actions * feat(python): add non-graceful mode * test(python): exclude weakly-typed tests * feat(python): add BanditResult.to_string() * feat(python): add EppoClient.is_initialized() and EppoClient.wait_for_initialization() * feat(python): add EppoClient.get_flag_keys() and EppoClient.get_bandit_keys() * test(python): refactor tests - add a common util module - move tests outside of python source (this is recommended by pytest to avoid confusion) * feat(python): add EppoClient.get_bandit_action_details() * refactor(python): rename Config to ClientConfig This is to free up space for Configuration type that holds UFC flags and bandits configuration. * feat(python): add Configuration * feat(python): export version string * test(python): add tox configuration * chore(mock-server): rewrite prepare.sh with javascript * chore(python): add CI configuration for Python SDK * chore(python): run pytest with mock server * chore(python): echo commands in CI * chore(python): disable test on musllinux armv7 until upstream issue is fixed * chore(python): bundle openssl on linux * feat(python): restore feature parity with native SDK - allow setting initial configuration - allow disabling polling * feat(python): forbid 0 for poll_interval_seconds Negative values are already forbidden. * feat: add AssignmentCacheLogger Just a copy from the native SDK. * feat(python): add typing information * fix(python): small typing fixes * fix: adapt tests to new configuration store API * chore: bump eppo_core to 3.0.0 Breaking changes: - ConfigurationStore::set_configuration() now accepts Arc<Configuration> - Fixed default poll interval to 30 (from 5 minutes) * chore(ci): build all targets in CI This helps to avoid breakage in benchmarks and examples. * docs(python): update README
- Loading branch information
Showing
58 changed files
with
2,861 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,280 @@ | ||
# This file is autogenerated by maturin v1.7.0 | ||
# To update, run | ||
# | ||
# maturin generate-ci -o .github/workflows/python.yml --pytest --manifest-path ./python-sdk/Cargo.toml github | ||
# | ||
# Manually modified: | ||
# - tag filter in Release job to only trigger on python-sdk@ tags | ||
# - added checkout with submodules | ||
# - replaced `pytest` with `npm run with-server test:python` | ||
name: Python SDK | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
- master | ||
tags: | ||
- '*' | ||
pull_request: | ||
workflow_dispatch: | ||
|
||
permissions: | ||
contents: read | ||
|
||
jobs: | ||
linux: | ||
runs-on: ${{ matrix.platform.runner }} | ||
strategy: | ||
matrix: | ||
platform: | ||
- runner: ubuntu-latest | ||
target: x86_64 | ||
- runner: ubuntu-latest | ||
target: x86 | ||
- runner: ubuntu-latest | ||
target: aarch64 | ||
- runner: ubuntu-latest | ||
target: armv7 | ||
- runner: ubuntu-latest | ||
target: s390x | ||
- runner: ubuntu-latest | ||
target: ppc64le | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- uses: actions/setup-python@v5 | ||
with: | ||
python-version: 3.x | ||
|
||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
if: ${{ startsWith(matrix.platform.target, 'x86') }} | ||
with: | ||
target: ${{ matrix.platform.target }} | ||
args: --release --out dist --find-interpreter --manifest-path ./python-sdk/Cargo.toml | ||
sccache: 'true' | ||
manylinux: auto | ||
before-script-linux: | | ||
yum install -y perl-IPC-Cmd devtoolset-10-libatomic-devel | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
if: ${{ !startsWith(matrix.platform.target, 'x86') }} | ||
with: | ||
target: ${{ matrix.platform.target }} | ||
args: --release --out dist --find-interpreter --manifest-path ./python-sdk/Cargo.toml | ||
sccache: 'true' | ||
manylinux: auto | ||
before-script-linux: | | ||
apt-get update | ||
apt-get install --no-install-recommends -y libssl-dev | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: wheels-linux-${{ matrix.platform.target }} | ||
path: dist | ||
|
||
- name: pytest | ||
if: ${{ startsWith(matrix.platform.target, 'x86_64') }} | ||
shell: bash | ||
run: | | ||
set -ex | ||
python3 -m venv .venv | ||
source .venv/bin/activate | ||
pip install eppo-server-sdk --find-links dist --force-reinstall | ||
pip install pytest cachetools | ||
npm ci | ||
npm run with-server test:python | ||
- name: pytest | ||
if: ${{ !startsWith(matrix.platform.target, 'x86') && matrix.platform.target != 'ppc64' }} | ||
uses: uraimo/run-on-arch-action@v2 | ||
with: | ||
arch: ${{ matrix.platform.target }} | ||
distro: ubuntu22.04 | ||
githubToken: ${{ github.token }} | ||
install: | | ||
apt-get update | ||
apt-get install -y --no-install-recommends python3 python3-pip nodejs npm | ||
pip3 install -U pip pytest cachetools | ||
run: | | ||
set -ex | ||
pip3 install eppo-server-sdk --find-links dist --force-reinstall | ||
npm ci | ||
npm run with-server test:python | ||
musllinux: | ||
runs-on: ${{ matrix.platform.runner }} | ||
strategy: | ||
matrix: | ||
platform: | ||
- runner: ubuntu-latest | ||
target: x86_64 | ||
- runner: ubuntu-latest | ||
target: x86 | ||
- runner: ubuntu-latest | ||
target: aarch64 | ||
- runner: ubuntu-latest | ||
target: armv7 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- uses: actions/setup-python@v5 | ||
with: | ||
python-version: 3.x | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
target: ${{ matrix.platform.target }} | ||
args: --release --out dist --find-interpreter --manifest-path ./python-sdk/Cargo.toml | ||
sccache: 'true' | ||
manylinux: musllinux_1_2 | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: wheels-musllinux-${{ matrix.platform.target }} | ||
path: dist | ||
- name: pytest | ||
if: ${{ startsWith(matrix.platform.target, 'x86_64') }} | ||
uses: addnab/docker-run-action@v3 | ||
with: | ||
image: alpine:latest | ||
options: -v ${{ github.workspace }}:/io -w /io | ||
run: | | ||
set -ex | ||
apk add py3-pip py3-virtualenv nodejs npm | ||
python3 -m virtualenv .venv | ||
source .venv/bin/activate | ||
pip install eppo-server-sdk --no-index --find-links dist --force-reinstall | ||
pip install pytest cachetools | ||
npm ci | ||
npm run with-server test:python | ||
- name: pytest | ||
# `npm ci` just hangs on Alpine armv7 now. | ||
# Disabling tests until this issue is fixed: | ||
# https://github.com/nodejs/docker-node/issues/1829 | ||
if: ${{ !startsWith(matrix.platform.target, 'x86') && matrix.platform.target != 'armv7' }} | ||
uses: uraimo/run-on-arch-action@v2 | ||
with: | ||
arch: ${{ matrix.platform.target }} | ||
distro: alpine_latest | ||
githubToken: ${{ github.token }} | ||
install: | | ||
apk add py3-virtualenv nodejs npm | ||
run: | | ||
set -ex | ||
python3 -m virtualenv .venv | ||
source .venv/bin/activate | ||
pip install pytest cachetools | ||
pip install eppo-server-sdk --find-links dist --force-reinstall | ||
npm ci | ||
npm run with-server test:python | ||
windows: | ||
runs-on: ${{ matrix.platform.runner }} | ||
strategy: | ||
matrix: | ||
platform: | ||
- runner: windows-latest | ||
target: x64 | ||
- runner: windows-latest | ||
target: x86 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- uses: actions/setup-python@v5 | ||
with: | ||
python-version: 3.x | ||
architecture: ${{ matrix.platform.target }} | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
target: ${{ matrix.platform.target }} | ||
args: --release --out dist --find-interpreter --manifest-path ./python-sdk/Cargo.toml | ||
sccache: 'true' | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: wheels-windows-${{ matrix.platform.target }} | ||
path: dist | ||
- name: pytest | ||
if: ${{ !startsWith(matrix.platform.target, 'aarch64') }} | ||
shell: bash | ||
run: | | ||
set -ex | ||
python3 -m venv .venv | ||
source .venv/Scripts/activate | ||
pip install eppo-server-sdk --find-links dist --force-reinstall | ||
pip install pytest cachetools | ||
npm ci | ||
npm run with-server test:python | ||
macos: | ||
runs-on: ${{ matrix.platform.runner }} | ||
strategy: | ||
matrix: | ||
platform: | ||
- runner: macos-12 | ||
target: x86_64 | ||
- runner: macos-14 | ||
target: aarch64 | ||
steps: | ||
- uses: actions/checkout@v4 | ||
with: | ||
submodules: true | ||
- uses: actions/setup-python@v5 | ||
with: | ||
python-version: 3.x | ||
- name: Build wheels | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
target: ${{ matrix.platform.target }} | ||
args: --release --out dist --find-interpreter --manifest-path ./python-sdk/Cargo.toml | ||
sccache: 'true' | ||
- name: Upload wheels | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: wheels-macos-${{ matrix.platform.target }} | ||
path: dist | ||
- name: pytest | ||
run: | | ||
set -ex | ||
python3 -m venv .venv | ||
source .venv/bin/activate | ||
pip install eppo-server-sdk --find-links dist --force-reinstall | ||
pip install pytest cachetools | ||
npm ci | ||
npm run with-server test:python | ||
sdist: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Build sdist | ||
uses: PyO3/maturin-action@v1 | ||
with: | ||
command: sdist | ||
args: --out dist --manifest-path ./python-sdk/Cargo.toml | ||
- name: Upload sdist | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: wheels-sdist | ||
path: dist | ||
|
||
release: | ||
name: Release | ||
runs-on: ubuntu-latest | ||
if: "startsWith(github.ref, 'refs/tags/python-sdk@')" | ||
needs: [linux, musllinux, windows, macos, sdist] | ||
steps: | ||
- uses: actions/download-artifact@v4 | ||
- name: Publish to PyPI | ||
uses: PyO3/maturin-action@v1 | ||
env: | ||
MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_API_TOKEN }} | ||
with: | ||
command: upload | ||
args: --non-interactive --skip-existing wheels-*/* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -3,6 +3,7 @@ resolver = "2" | |
members = [ | ||
"eppo_core", | ||
"rust-sdk", | ||
"python-sdk", | ||
"ruby-sdk/ext/eppo_client", | ||
] | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.