Skip to content

Commit b6530b0

Browse files
authored
Merge pull request #11 from vdloo/ignore-empty-keys
Ignore empty keys
2 parents 9f9fa90 + bdfab6f commit b6530b0

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

consul_kv/api.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ def get_kv(k=None, recurse=False, endpoint=DEFAULT_KV_ENDPOINT, timeout=socket._
9696
mapping = {
9797
# values are stored base64 encoded in consul, they
9898
# are decoded before returned by this function.
99-
r['Key']: b64decode(r['Value']).decode('utf-8') for r in result if r['Value']
99+
r['Key']: b64decode(r['Value']).decode('utf-8')
100+
if r['Value'] else None for r in result if r['Key']
100101
}
101102
return mapping
102103

tests/unit/api/test_get_kv.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ class TestGetKV(TestCase):
99
def setUp(self):
1010
self.request = self.set_up_patch('consul_kv.api.request')
1111
self.request.urlopen.return_value.__exit__ = lambda a, b, c, d: None
12-
self.json_dump = '[{"Key": "key1", "Value": "Value"}]'
1312
self.base64decode = self.set_up_patch('consul_kv.api.b64decode')
1413
self.base64decode.return_value = 'value1'.encode('utf-8')
14+
self.json_dump = '[{"Key": "key1", "Value": "Value"}]'
1515
self.request.urlopen.return_value.__enter__ = lambda x: Mock(
1616
read=lambda: Mock(
1717
decode=lambda _: self.json_dump
@@ -77,3 +77,31 @@ def test_get_kv_returns_mapping(self):
7777
'key1': 'value1'
7878
}
7979
self.assertEqual(ret, expected_mapping)
80+
81+
def test_get_kv_returns_empty_results_as_none(self):
82+
self.json_dump = '[{"Key": "key1", "Value": null}]'
83+
self.request.urlopen.return_value.__enter__ = lambda x: Mock(
84+
read=lambda: Mock(
85+
decode=lambda _: self.json_dump
86+
)
87+
)
88+
89+
ret = get_kv('some/path', recurse=True)
90+
91+
expected_mapping = {
92+
'key1': None
93+
}
94+
self.assertEqual(ret, expected_mapping)
95+
96+
def test_get_kv_ignores_empty_keys(self):
97+
self.json_dump = '[{"Key": "", "Value": null}]'
98+
self.request.urlopen.return_value.__enter__ = lambda x: Mock(
99+
read=lambda: Mock(
100+
decode=lambda _: self.json_dump
101+
)
102+
)
103+
104+
ret = get_kv('some/path', recurse=True)
105+
106+
expected_mapping = {}
107+
self.assertEqual(ret, expected_mapping)

0 commit comments

Comments
 (0)