Skip to content

Commit

Permalink
get_key_and_value fix (#57)
Browse files Browse the repository at this point in the history
  • Loading branch information
kp-cat authored Dec 19, 2023
1 parent 1aed3cb commit 107e142
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 21 deletions.
15 changes: 10 additions & 5 deletions configcatclient/configcatclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ def get_all_keys(self):
settings = config.get(FEATURE_FLAGS, {})
return list(settings)

def get_key_and_value(self, variation_id):
def get_key_and_value(self, variation_id): # noqa: C901
"""
Gets the key of a setting, and it's value identified by the given Variation ID (analytics)
Expand All @@ -210,10 +210,15 @@ def get_key_and_value(self, variation_id):
if served_value is not None and variation_id == served_value.get(VARIATION_ID):
return KeyValue(key, get_value(served_value, setting_type))

rollout_percentage_items = targeting_rule.get(PERCENTAGE_OPTIONS, [])
for rollout_percentage_item in rollout_percentage_items:
if variation_id == rollout_percentage_item.get(VARIATION_ID):
return KeyValue(key, get_value(rollout_percentage_item, setting_type))
targeting_rule_percentage_options = targeting_rule.get(PERCENTAGE_OPTIONS, [])
for percentage_option in targeting_rule_percentage_options:
if variation_id == percentage_option.get(VARIATION_ID):
return KeyValue(key, get_value(percentage_option, setting_type))

percentage_options = value.get(PERCENTAGE_OPTIONS, [])
for percentage_option in percentage_options:
if variation_id == percentage_option.get(VARIATION_ID):
return KeyValue(key, get_value(percentage_option, setting_type))
except Exception:
self.log.exception('Error occurred in the `' + __name__ + '` method. Returning None.', event_id=1002)
return None
Expand Down
2 changes: 1 addition & 1 deletion configcatclient/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
CONFIGCATCLIENT_VERSION = "9.0.0"
CONFIGCATCLIENT_VERSION = "9.0.1"
13 changes: 11 additions & 2 deletions configcatclienttests/mocks.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,17 @@
]},
"testIntKey": {"v": {"i": 1}, "t": 2},
"testDoubleKey": {"v": {"d": 1.1}, "t": 3},
"key1": {"v": {"b": true}, "t": 0, "i": "fakeId1"},
"key2": {"v": {"b": false}, "t": 0, "i": "fakeId2"}
"key1": {"v": {"b": true}, "t": 0, "i": "id3"},
"key2": {"v": {"s": "fake4"}, "t": 1, "i": "id4",
"r": [
{"c": [{"s": {"s": 0, "c": 0}}], "p": [
{"p": 50, "v": {"s": "fake5"}, "i": "id5"}, {"p": 50, "v": {"s": "fake6"}, "i": "id6"}
]}
],
"p": [
{"p": 50, "v": {"s": "fake7"}, "i": "id7"}, {"p": 50, "v": {"s": "fake8"}, "i": "id8"}
]
}
}
}''')

Expand Down
14 changes: 7 additions & 7 deletions configcatclienttests/test_configcatclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ def test_get_all_values(self):
self.assertEqual(1, all_values['testIntKey'])
self.assertEqual(1.1, all_values['testDoubleKey'])
self.assertTrue(all_values['key1'])
self.assertFalse(all_values['key2'])
self.assertEqual('fake4', all_values['key2'])
client.close()

def test_get_all_value_details(self):
Expand Down Expand Up @@ -196,12 +196,12 @@ def details_by_key(all_details, key):
details = details_by_key(all_details, 'key1')
self.assertEqual('key1', details.key)
self.assertEqual(True, details.value)
self.assertEqual('fakeId1', details.variation_id)
self.assertEqual('id3', details.variation_id)

details = details_by_key(all_details, 'key2')
self.assertEqual('key2', details.key)
self.assertEqual(False, details.value)
self.assertEqual('fakeId2', details.variation_id)
self.assertEqual('fake4', details.value)
self.assertEqual('id4', details.variation_id)

client.close()

Expand Down Expand Up @@ -263,7 +263,7 @@ def test_default_user_get_all_values(self):
self.assertEqual(1, all_values['testIntKey'])
self.assertEqual(1.1, all_values['testDoubleKey'])
self.assertTrue(all_values['key1'])
self.assertFalse(all_values['key2'])
self.assertEqual('fake6', all_values['key2'])

all_values = client.get_all_values(user2)
# Two dictionary should have exactly the same elements, order doesn't matter.
Expand All @@ -273,7 +273,7 @@ def test_default_user_get_all_values(self):
self.assertEqual(1, all_values['testIntKey'])
self.assertEqual(1.1, all_values['testDoubleKey'])
self.assertTrue(all_values['key1'])
self.assertFalse(all_values['key2'])
self.assertEqual('fake8', all_values['key2'])

client.clear_default_user()
all_values = client.get_all_values()
Expand All @@ -283,7 +283,7 @@ def test_default_user_get_all_values(self):
self.assertEqual(1, all_values['testIntKey'])
self.assertEqual(1.1, all_values['testDoubleKey'])
self.assertTrue(all_values['key1'])
self.assertFalse(all_values['key2'])
self.assertEqual('fake4', all_values['key2'])

client.close()

Expand Down
36 changes: 31 additions & 5 deletions configcatclienttests/test_variation_id.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ class VariationIdTests(unittest.TestCase):
def test_get_variation_id(self):
client = ConfigCatClient.get(TEST_SDK_KEY, ConfigCatOptions(polling_mode=PollingMode.manual_poll(),
config_cache=ConfigCacheMock()))
self.assertEqual('fakeId1', client.get_value_details('key1', None).variation_id)
self.assertEqual('fakeId2', client.get_value_details('key2', None).variation_id)
self.assertEqual('id3', client.get_value_details('key1', None).variation_id)
self.assertEqual('id4', client.get_value_details('key2', None).variation_id)
client.close()

def test_get_variation_id_not_found(self):
Expand All @@ -32,12 +32,38 @@ def test_get_variation_id_empty_config(self):
def test_get_key_and_value(self):
client = ConfigCatClient.get(TEST_SDK_KEY, ConfigCatOptions(polling_mode=PollingMode.manual_poll(),
config_cache=ConfigCacheMock()))
result = client.get_key_and_value('fakeId1')
result = client.get_key_and_value('id1')
self.assertEqual('testStringKey', result.key)
self.assertEqual('fake1', result.value)

result = client.get_key_and_value('id2')
self.assertEqual('testStringKey', result.key)
self.assertEqual('fake2', result.value)

result = client.get_key_and_value('id3')
self.assertEqual('key1', result.key)
self.assertTrue(result.value)
result = client.get_key_and_value('fakeId2')

result = client.get_key_and_value('id4')
self.assertEqual('key2', result.key)
self.assertEqual('fake4', result.value)

result = client.get_key_and_value('id5')
self.assertEqual('key2', result.key)
self.assertEqual('fake5', result.value)

result = client.get_key_and_value('id6')
self.assertEqual('key2', result.key)
self.assertEqual('fake6', result.value)

result = client.get_key_and_value('id7')
self.assertEqual('key2', result.key)
self.assertFalse(result.value)
self.assertEqual('fake7', result.value)

result = client.get_key_and_value('id8')
self.assertEqual('key2', result.key)
self.assertEqual('fake8', result.value)

client.close()

def test_get_key_and_value_not_found(self):
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ def parse_requirements(filename):
return [line for line in lines if line]


configcatclient_version = '9.0.0'
configcatclient_version = '9.0.1'

requirements = parse_requirements('requirements.txt')

Expand Down

0 comments on commit 107e142

Please sign in to comment.