Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions tests/test_vault.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,34 @@ def test_read_object_none_object_id(self):
):
self.vault.read_object(object_id=None)

def test_read_object_by_name_success(
self, mock_vault_object, capture_and_mock_http_client_request
):
request_kwargs = capture_and_mock_http_client_request(
self.http_client, mock_vault_object, 200
)

vault_object = self.vault.read_object_by_name(name="test-secret")

assert request_kwargs["method"] == "get"
assert request_kwargs["url"].endswith("/vault/v1/kv/name/test-secret")
assert vault_object.id == "vault_01234567890abcdef"
assert vault_object.name == "test-secret"
assert vault_object.value == "secret-value"
assert vault_object.metadata.environment_id == "env_01234567890abcdef"

def test_read_object_by_name_missing_name(self):
with pytest.raises(
ValueError, match="Incomplete arguments: 'name' is a required argument"
):
self.vault.read_object_by_name(name="")

def test_read_object_by_name_none_name(self):
with pytest.raises(
ValueError, match="Incomplete arguments: 'name' is a required argument"
):
self.vault.read_object_by_name(name=None)

def test_list_objects_default_params(
self, mock_vault_objects_list, capture_and_mock_http_client_request
):
Expand Down
29 changes: 29 additions & 0 deletions workos/vault.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,17 @@ def read_object(self, *, object_id: str) -> VaultObject:
"""
...

def read_object_by_name(self, *, name: str) -> VaultObject:
"""
Get a Vault object by name with the value decrypted.

Kwargs:
name (str): The unique name of the object.
Returns:
VaultObject: A vault object with metadata, name and decrypted value.
"""
...

def list_objects(
self,
*,
Expand Down Expand Up @@ -230,6 +241,24 @@ def read_object(

return VaultObject.model_validate(response)

def read_object_by_name(
self,
*,
name: str,
) -> VaultObject:
if not name:
raise ValueError("Incomplete arguments: 'name' is a required argument")

response = self._http_client.request(
RequestHelper.build_parameterized_url(
"vault/v1/kv/name/{name}",
name=name,
),
method=REQUEST_METHOD_GET,
)

return VaultObject.model_validate(response)

def list_objects(
self,
*,
Expand Down