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
2 changes: 2 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,5 @@
- fixed bug in updating rule based segments
3.5.3 (Jul 10, 2025)
- fixed bug in listing large segments
3.5.4 (Aug 12, 2025)
- added method to retrieve segment definition key counts for standard segments
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "splitapiclient"
version = "3.5.3"
version = "3.5.4"
description = "This Python Library provide full support for Split REST Admin API, allow creating, deleting and editing Environments, Splits, Split Definitions, Segments, Segment Keys, Users, Groups, API Keys, Change Requests, Attributes and Identities"
classifiers = [
"Programming Language :: Python :: 3",
Expand Down
20 changes: 20 additions & 0 deletions splitapiclient/microclients/segment_definition_microclient.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,26 @@ def get_keys(self, segment_name, environment_id):
break
return [item["key"] for item in final_list]



def get_key_count(self, segment_name, environment_id):
'''
Returns a count of keys

:returns: count of keys in Segment in environemnt objects
:rtype: integer
'''

response = self._http_client.make_request(
self._endpoint['get_keys'],
environmentId = environment_id,
segmentName = segment_name,
offset = 0
)

return int(response['count'])


def import_keys_from_json(self, segment_name, environment_id, replace_keys, data):
'''
import keys from csv file into segment
Expand Down
10 changes: 10 additions & 0 deletions splitapiclient/resources/segment_definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ def tags(self):
def creation_time(self):
return None if self._creationTime==0 else self._creationTime

def get_key_count(self, apiclient=None):
'''
Get the key count for this segment definition in this environment

:returns: the key count for the segment definition
:rtype: integer
'''
imc = require_client('SegmentDefinition', self._client, apiclient)
return imc.get_key_count(self._name, self._environment['id'])


def get_keys(self, apiclient=None):
'''
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,39 @@ def test_list(self, mocker):
assert object_to_stringified_dict(result[0]) == data[0]

assert object_to_stringified_dict(result[1]) == data[1]

def test_get_key_count(self, mocker):
'''
Test get_key_count method of SegmentDefinitionMicroClient
'''
# Mock the SyncHttpClient make_request method
mocker.patch('splitapiclient.http_clients.sync_client.SyncHttpClient.make_request')

# Create client instances
sc = SyncHttpClient('abc', 'abc')
segment_client = SegmentDefinitionMicroClient(sc)

# Define mock response data
mock_response = {
'keys': [{'key': 'key1'}, {'key': 'key2'}, {'key': 'key3'}, {'key': 'key4'}, {'key': 'key5'}],
'offset': 0,
'count': 5, # This is the value we expect to be returned
'limit': 100
}

# Set the return value for the mocked method
SyncHttpClient.make_request.return_value = mock_response

# Call the method being tested
result = segment_client.get_key_count('test_segment', 'test_env_id')

# Verify the HTTP client was called with correct parameters
SyncHttpClient.make_request.assert_called_once_with(
SegmentDefinitionMicroClient._endpoint['get_keys'],
environmentId='test_env_id',
segmentName='test_segment',
offset=0
)

# Verify the result matches the expected count
assert result == 5
43 changes: 43 additions & 0 deletions splitapiclient/tests/resources/test_segment_definition.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,49 @@ def test_remove_keys(self, mocker):
)
assert attr == True

def test_get_key_count(self, mocker):
'''
Test get_key_count method of SegmentDefinition class
'''
# Mock response data with count
data = {
'keys': [{'key':'key1'}, {'key':'key2'}, {'key':'key3'}],
'offset': 0,
'count': 3,
'limit': 100
}

# Create mock HTTP client
http_client_mock = mocker.Mock(spec=BaseHttpClient)
http_client_mock.make_request.return_value = data

# Create segment definition with mock client
seg = SegmentDefinition(
{
'name': 'test_segment',
'environment': {
'id': 'env_123',
'name': 'test_env'
},
'trafficType': {},
},
http_client_mock
)

# Call the method being tested
key_count = seg.get_key_count()

# Verify the HTTP client was called with correct parameters
http_client_mock.make_request.assert_called_once_with(
SegmentDefinitionMicroClient._endpoint['get_keys'],
environmentId = 'env_123',
segmentName = 'test_segment',
offset = 0
)

# Verify the returned count matches expected value
assert key_count == 3

def test_submit_change_request(self, mocker):
'''
'''
Expand Down
2 changes: 1 addition & 1 deletion splitapiclient/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = '3.5.3'
__version__ = '3.5.4'