Skip to content

Commit b4bc519

Browse files
fix(sdk): Remove exp engine passkey when retrieving routers from the API server (caraml-dev#377)
* Add steps to remove exp engine passkey when retrieving routers from the API server * Fix unit tests * Pin pytest versions * Add additional existence check before removing passkeys * Add comment to describe rationale behind setting experiment engine passkey value to none
1 parent 2b9c56e commit b4bc519

File tree

4 files changed

+22
-3
lines changed

4 files changed

+22
-3
lines changed
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
black==22.6.0
2-
pytest
2+
# The next release 8.2.0 of pytest breaks the unit tests
3+
pytest<=8.1.2
34
pytest-cov
45
pylint

sdk/requirements.dev.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ black==22.6.0
22
setuptools>=21.0.0
33
wheel
44
twine
5-
pytest
5+
# The next release 8.0.0 of pytest breaks the unit tests
6+
pytest<=7.4.4
67
pytest-cov
78
urllib3-mock>=0.3.3
89
caraml-upi-protos

sdk/tests/router/config/router_version_test.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,16 @@ def test_create_version(
4949
assert actual_response.rules[i].to_open_api() == generic_router_version.rules[i]
5050

5151
assert actual_response.default_route_id == generic_router_version.default_route_id
52+
53+
# Assert the response against an experiment engine object that has its passkey removed
54+
expected_experiment_engine = generic_router_version.experiment_engine
55+
if expected_experiment_engine.config is not None and \
56+
expected_experiment_engine.config.get("client") is not None and \
57+
expected_experiment_engine.config["client"].get("passkey") != "":
58+
expected_experiment_engine.config["client"]["passkey"] = None
5259
assert (
5360
actual_response.experiment_engine.to_open_api()
54-
== generic_router_version.experiment_engine
61+
== expected_experiment_engine
5562
)
5663
assert (
5764
actual_response.resource_request.to_open_api()

sdk/turing/router/config/router_config.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,16 @@ def experiment_engine(self, experiment_engine: Union[ExperimentConfig, Dict]):
211211
self._experiment_engine = experiment_engine
212212
elif isinstance(experiment_engine, dict):
213213
self._experiment_engine = ExperimentConfig(**experiment_engine)
214+
# This block sets the passkey (encrypted when retrieved from the Turing API server) to None to prevent users
215+
# from sending a router config with an already encrypted passkey back to API server when updating a router.
216+
#
217+
# When the passkey value is not set, the Turing API server is able to automatically retrieve the correct
218+
# passkey from the existing router version (assuming it has been configured with the same standard
219+
# experiment engine and the same client username).
220+
if self._experiment_engine.config is not None and \
221+
self._experiment_engine.config.get("client") is not None and \
222+
self._experiment_engine.config["client"].get("passkey") != "":
223+
self._experiment_engine.config["client"]["passkey"] = None
214224
else:
215225
self._experiment_engine = experiment_engine
216226

0 commit comments

Comments
 (0)