From 37dab15dc2127de87d5cf3441854e7b2c1419210 Mon Sep 17 00:00:00 2001 From: Mark Waddle Date: Fri, 18 Oct 2024 15:33:10 -0700 Subject: [PATCH] Fixes replacement of masked secrets (#143) --- libraries/python/chat-driver/.vscode/settings.json | 2 -- libraries/python/events/.vscode/settings.json | 2 -- .../python/guided-conversation/.vscode/settings.json | 2 -- .../semantic_workbench_assistant/config.py | 3 ++- .../tests/test_config.py | 12 +++++++----- .../skills/document-skill/.vscode/settings.json | 2 -- .../skills/skills/posix-skill/.vscode/settings.json | 2 -- 7 files changed, 9 insertions(+), 16 deletions(-) diff --git a/libraries/python/chat-driver/.vscode/settings.json b/libraries/python/chat-driver/.vscode/settings.json index 38d6fe3b..d02aad67 100644 --- a/libraries/python/chat-driver/.vscode/settings.json +++ b/libraries/python/chat-driver/.vscode/settings.json @@ -21,8 +21,6 @@ "python.analysis.typeCheckingMode": "basic", "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", "python.testing.cwd": "${workspaceFolder}", - "python.testing.pytestArgs": ["--color", "yes"], - "python.testing.pytestEnabled": true, "search.exclude": { "**/.venv": true, "**/data": true diff --git a/libraries/python/events/.vscode/settings.json b/libraries/python/events/.vscode/settings.json index 38d6fe3b..d02aad67 100644 --- a/libraries/python/events/.vscode/settings.json +++ b/libraries/python/events/.vscode/settings.json @@ -21,8 +21,6 @@ "python.analysis.typeCheckingMode": "basic", "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", "python.testing.cwd": "${workspaceFolder}", - "python.testing.pytestArgs": ["--color", "yes"], - "python.testing.pytestEnabled": true, "search.exclude": { "**/.venv": true, "**/data": true diff --git a/libraries/python/guided-conversation/.vscode/settings.json b/libraries/python/guided-conversation/.vscode/settings.json index 0a12dd20..7069ad31 100644 --- a/libraries/python/guided-conversation/.vscode/settings.json +++ b/libraries/python/guided-conversation/.vscode/settings.json @@ -26,8 +26,6 @@ "python.analysis.typeCheckingMode": "basic", "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", "python.testing.cwd": "${workspaceFolder}", - "python.testing.pytestArgs": ["--color", "yes"], - "python.testing.pytestEnabled": true, "search.exclude": { "**/.venv": true, "**/data": true diff --git a/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/config.py b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/config.py index 00873470..485d0cb8 100644 --- a/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/config.py +++ b/libraries/python/semantic-workbench-assistant/semantic_workbench_assistant/config.py @@ -1,5 +1,6 @@ import inspect import os +import re import types from collections import ChainMap from enum import StrEnum @@ -212,7 +213,7 @@ def replace_config_secret_str_masked_values(model_values: ModelT, original_model continue if field_info.annotation is ConfigSecretStr: - if getattr(updated_model_values, field_name) == _mask(getattr(original_model_values, field_name)): + if hasattr(original_model_values, field_name) and re.match(r"^[*]+$", getattr(updated_model_values, field_name)): setattr(updated_model_values, field_name, getattr(original_model_values, field_name)) continue diff --git a/libraries/python/semantic-workbench-assistant/tests/test_config.py b/libraries/python/semantic-workbench-assistant/tests/test_config.py index 3972a9c3..37787a4d 100644 --- a/libraries/python/semantic-workbench-assistant/tests/test_config.py +++ b/libraries/python/semantic-workbench-assistant/tests/test_config.py @@ -76,10 +76,10 @@ class TestModel(BaseModel): def test_config_secret_str_deserialization() -> None: class SubModel1(BaseModel): - secret: ConfigSecretStr + submodel1_secret: ConfigSecretStr class SubModel2(BaseModel): - secret: ConfigSecretStr + submodel2_secret: ConfigSecretStr class TestModel(BaseModel): secret: ConfigSecretStr @@ -87,19 +87,21 @@ class TestModel(BaseModel): secret_value = uuid.uuid4().hex - model = TestModel(secret=secret_value, sub_model=SubModel2(secret=secret_value)) + sub_model = SubModel2(submodel2_secret=secret_value) + model = TestModel(secret=secret_value, sub_model=sub_model) assert model.secret == secret_value serialized_config = model.model_dump(mode="json") assert serialized_config["secret"] == "*" * len(secret_value) - assert serialized_config["sub_model"]["secret"] == "*" * len(secret_value) + assert serialized_config["sub_model"]["submodel2_secret"] == "*" * len(secret_value) deserialized_config = TestModel.model_validate(serialized_config) masked_reverted = replace_config_secret_str_masked_values(deserialized_config, model) assert masked_reverted.secret == model.secret - assert masked_reverted.sub_model.secret == model.sub_model.secret + assert isinstance(masked_reverted.sub_model, SubModel2) + assert masked_reverted.sub_model.submodel2_secret == sub_model.submodel2_secret deserialized_model = TestModel.model_validate(masked_reverted) diff --git a/libraries/python/skills/skills/document-skill/.vscode/settings.json b/libraries/python/skills/skills/document-skill/.vscode/settings.json index 91a8a27a..a01f4f46 100644 --- a/libraries/python/skills/skills/document-skill/.vscode/settings.json +++ b/libraries/python/skills/skills/document-skill/.vscode/settings.json @@ -20,8 +20,6 @@ "python.analysis.typeCheckingMode": "basic", "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", "python.testing.cwd": "${workspaceFolder}", - "python.testing.pytestArgs": ["--color", "yes"], - "python.testing.pytestEnabled": true, "search.exclude": { "**/.venv": true, "**/data": true diff --git a/libraries/python/skills/skills/posix-skill/.vscode/settings.json b/libraries/python/skills/skills/posix-skill/.vscode/settings.json index d8f854ed..7177a8e5 100644 --- a/libraries/python/skills/skills/posix-skill/.vscode/settings.json +++ b/libraries/python/skills/skills/posix-skill/.vscode/settings.json @@ -21,8 +21,6 @@ "python.analysis.typeCheckingMode": "basic", "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python", "python.testing.cwd": "${workspaceFolder}", - "python.testing.pytestArgs": ["--color", "yes"], - "python.testing.pytestEnabled": true, "search.exclude": { "**/.venv": true, "**/data": true