Skip to content

Commit 2595b8c

Browse files
committed
Added a get_key_count() method to segment definitions
1 parent 98dfb3a commit 2595b8c

File tree

6 files changed

+112
-1
lines changed

6 files changed

+112
-1
lines changed

CHANGES.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,5 @@
4747
- fixed bug in updating rule based segments
4848
3.5.3 (Jul 10, 2025)
4949
- fixed bug in listing large segments
50+
3.5.4 (Aug 12, 2025)
51+
- added method to retrieve segment definition key counts for standard segments

splitapiclient/microclients/segment_definition_microclient.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,26 @@ def get_keys(self, segment_name, environment_id):
133133
break
134134
return [item["key"] for item in final_list]
135135

136+
137+
138+
def get_key_count(self, segment_name, environment_id):
139+
'''
140+
Returns a count of keys
141+
142+
:returns: count of keys in Segment in environemnt objects
143+
:rtype: integer
144+
'''
145+
146+
response = self._http_client.make_request(
147+
self._endpoint['get_keys'],
148+
environmentId = environment_id,
149+
segmentName = segment_name,
150+
offset = 0
151+
)
152+
153+
return int(response['count'])
154+
155+
136156
def import_keys_from_json(self, segment_name, environment_id, replace_keys, data):
137157
'''
138158
import keys from csv file into segment

splitapiclient/resources/segment_definition.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,16 @@ def tags(self):
5353
def creation_time(self):
5454
return None if self._creationTime==0 else self._creationTime
5555

56+
def get_key_count(self, apiclient=None):
57+
'''
58+
Get the key count for this segment definition in this environment
59+
60+
:returns: the key count for the segment definition
61+
:rtype: integer
62+
'''
63+
imc = require_client('SegmentDefinition', self._client, apiclient)
64+
return imc.get_key_count(self._name, self._environment['id'])
65+
5666

5767
def get_keys(self, apiclient=None):
5868
'''

splitapiclient/tests/microclients/segment_definition_microclient_test.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,39 @@ def test_list(self, mocker):
8484
assert object_to_stringified_dict(result[0]) == data[0]
8585

8686
assert object_to_stringified_dict(result[1]) == data[1]
87+
88+
def test_get_key_count(self, mocker):
89+
'''
90+
Test get_key_count method of SegmentDefinitionMicroClient
91+
'''
92+
# Mock the SyncHttpClient make_request method
93+
mocker.patch('splitapiclient.http_clients.sync_client.SyncHttpClient.make_request')
94+
95+
# Create client instances
96+
sc = SyncHttpClient('abc', 'abc')
97+
segment_client = SegmentDefinitionMicroClient(sc)
98+
99+
# Define mock response data
100+
mock_response = {
101+
'keys': [{'key': 'key1'}, {'key': 'key2'}, {'key': 'key3'}, {'key': 'key4'}, {'key': 'key5'}],
102+
'offset': 0,
103+
'count': 5, # This is the value we expect to be returned
104+
'limit': 100
105+
}
106+
107+
# Set the return value for the mocked method
108+
SyncHttpClient.make_request.return_value = mock_response
109+
110+
# Call the method being tested
111+
result = segment_client.get_key_count('test_segment', 'test_env_id')
112+
113+
# Verify the HTTP client was called with correct parameters
114+
SyncHttpClient.make_request.assert_called_once_with(
115+
SegmentDefinitionMicroClient._endpoint['get_keys'],
116+
environmentId='test_env_id',
117+
segmentName='test_segment',
118+
offset=0
119+
)
120+
121+
# Verify the result matches the expected count
122+
assert result == 5

splitapiclient/tests/resources/test_segment_definition.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,49 @@ def test_remove_keys(self, mocker):
175175
)
176176
assert attr == True
177177

178+
def test_get_key_count(self, mocker):
179+
'''
180+
Test get_key_count method of SegmentDefinition class
181+
'''
182+
# Mock response data with count
183+
data = {
184+
'keys': [{'key':'key1'}, {'key':'key2'}, {'key':'key3'}],
185+
'offset': 0,
186+
'count': 3,
187+
'limit': 100
188+
}
189+
190+
# Create mock HTTP client
191+
http_client_mock = mocker.Mock(spec=BaseHttpClient)
192+
http_client_mock.make_request.return_value = data
193+
194+
# Create segment definition with mock client
195+
seg = SegmentDefinition(
196+
{
197+
'name': 'test_segment',
198+
'environment': {
199+
'id': 'env_123',
200+
'name': 'test_env'
201+
},
202+
'trafficType': {},
203+
},
204+
http_client_mock
205+
)
206+
207+
# Call the method being tested
208+
key_count = seg.get_key_count()
209+
210+
# Verify the HTTP client was called with correct parameters
211+
http_client_mock.make_request.assert_called_once_with(
212+
SegmentDefinitionMicroClient._endpoint['get_keys'],
213+
environmentId = 'env_123',
214+
segmentName = 'test_segment',
215+
offset = 0
216+
)
217+
218+
# Verify the returned count matches expected value
219+
assert key_count == 3
220+
178221
def test_submit_change_request(self, mocker):
179222
'''
180223
'''

splitapiclient/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '3.5.3'
1+
__version__ = '3.5.4'

0 commit comments

Comments
 (0)