Skip to content

Commit af7a29d

Browse files
authored
Add read_object_by_name method for Vault API (#506)
1 parent 1434326 commit af7a29d

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

tests/test_vault.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,34 @@ def test_read_object_none_object_id(self):
107107
):
108108
self.vault.read_object(object_id=None)
109109

110+
def test_read_object_by_name_success(
111+
self, mock_vault_object, capture_and_mock_http_client_request
112+
):
113+
request_kwargs = capture_and_mock_http_client_request(
114+
self.http_client, mock_vault_object, 200
115+
)
116+
117+
vault_object = self.vault.read_object_by_name(name="test-secret")
118+
119+
assert request_kwargs["method"] == "get"
120+
assert request_kwargs["url"].endswith("/vault/v1/kv/name/test-secret")
121+
assert vault_object.id == "vault_01234567890abcdef"
122+
assert vault_object.name == "test-secret"
123+
assert vault_object.value == "secret-value"
124+
assert vault_object.metadata.environment_id == "env_01234567890abcdef"
125+
126+
def test_read_object_by_name_missing_name(self):
127+
with pytest.raises(
128+
ValueError, match="Incomplete arguments: 'name' is a required argument"
129+
):
130+
self.vault.read_object_by_name(name="")
131+
132+
def test_read_object_by_name_none_name(self):
133+
with pytest.raises(
134+
ValueError, match="Incomplete arguments: 'name' is a required argument"
135+
):
136+
self.vault.read_object_by_name(name=None)
137+
110138
def test_list_objects_default_params(
111139
self, mock_vault_objects_list, capture_and_mock_http_client_request
112140
):

workos/vault.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,17 @@ def read_object(self, *, object_id: str) -> VaultObject:
3737
"""
3838
...
3939

40+
def read_object_by_name(self, *, name: str) -> VaultObject:
41+
"""
42+
Get a Vault object by name with the value decrypted.
43+
44+
Kwargs:
45+
name (str): The unique name of the object.
46+
Returns:
47+
VaultObject: A vault object with metadata, name and decrypted value.
48+
"""
49+
...
50+
4051
def list_objects(
4152
self,
4253
*,
@@ -230,6 +241,24 @@ def read_object(
230241

231242
return VaultObject.model_validate(response)
232243

244+
def read_object_by_name(
245+
self,
246+
*,
247+
name: str,
248+
) -> VaultObject:
249+
if not name:
250+
raise ValueError("Incomplete arguments: 'name' is a required argument")
251+
252+
response = self._http_client.request(
253+
RequestHelper.build_parameterized_url(
254+
"vault/v1/kv/name/{name}",
255+
name=name,
256+
),
257+
method=REQUEST_METHOD_GET,
258+
)
259+
260+
return VaultObject.model_validate(response)
261+
233262
def list_objects(
234263
self,
235264
*,

0 commit comments

Comments
 (0)