diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cb5592..afdebcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ how a consumer would use the library or CLI tool (e.g. adding unit tests, updating documentation, etc) are not captured here. +## 2.12.5 - 2026-09-30 +- Fixed an issue where listing trusted activities in some cases would not return the entire list. + ## 2.12.4 - 2026-09-30 - Fixed an issue where listing trusted activities in some cases would loop infinitely. diff --git a/src/_incydr_sdk/__version__.py b/src/_incydr_sdk/__version__.py index 30a174e..8036a35 100644 --- a/src/_incydr_sdk/__version__.py +++ b/src/_incydr_sdk/__version__.py @@ -1,4 +1,4 @@ # SPDX-FileCopyrightText: 2022-present Code42 Software # # SPDX-License-Identifier: MIT -__version__ = "2.12.4" +__version__ = "2.12.5" diff --git a/src/_incydr_sdk/trusted_activities/client.py b/src/_incydr_sdk/trusted_activities/client.py index c74ba8b..c47a3e5 100644 --- a/src/_incydr_sdk/trusted_activities/client.py +++ b/src/_incydr_sdk/trusted_activities/client.py @@ -77,7 +77,7 @@ def get_page( page_size = page_size or self._parent.settings.page_size data = QueryTrustedActivitiesRequest( - page_num=page_num, + page=page_num, page_size=page_size, activity_type=activity_type, sort_key=sort_key, @@ -104,7 +104,6 @@ def iter_all( """ page_size = page_size or self._parent.settings.page_size - last_page_ids = set() for page_num in count(1): page = self.get_page( page_num=page_num, @@ -113,14 +112,8 @@ def iter_all( sort_key=sort_key, sort_direction=sort_direction, ) - results_to_yield = [ - x for x in page.trusted_activities if x.activity_id not in last_page_ids - ] - yield from results_to_yield - last_page_ids = {x.activity_id for x in page.trusted_activities} - if (len(page.trusted_activities) < page_size) or ( - len(results_to_yield) < page_size - ): + yield from page.trusted_activities + if len(page.trusted_activities) < page_size: break def add_domain( diff --git a/src/_incydr_sdk/trusted_activities/models.py b/src/_incydr_sdk/trusted_activities/models.py index 32ed9f0..14ee7b5 100644 --- a/src/_incydr_sdk/trusted_activities/models.py +++ b/src/_incydr_sdk/trusted_activities/models.py @@ -160,7 +160,7 @@ class TrustedActivitiesPage(ResponseModel): class QueryTrustedActivitiesRequest(Model): - page_num: Optional[int] + page: Optional[int] page_size: Optional[int] activity_type: Optional[str] sort_key: Optional[str] diff --git a/tests/test_trusted_activities.py b/tests/test_trusted_activities.py index d413b80..cc195e7 100644 --- a/tests/test_trusted_activities.py +++ b/tests/test_trusted_activities.py @@ -73,7 +73,7 @@ def mock_get_all(httpserver_auth): } httpserver_auth.expect_request( "/v2/trusted-activities", - query_string=urlencode({"page_num": 1, "page_size": 100}), + query_string=urlencode({"page": 1, "page_size": 100}), ).respond_with_json(trusted_activities_data) @@ -106,10 +106,10 @@ def test_iter_all_when_default_params_returns_expected_data( httpserver_auth: HTTPServer, ): query_1 = { - "page_num": 1, + "page": 1, "page_size": 2, } - query_2 = {"page_num": 2, "page_size": 2} + query_2 = {"page": 2, "page_size": 2} trusted_activities_data_1 = { "trustedActivities": [TEST_TRUSTED_ACTIVITY_1, TEST_TRUSTED_ACTIVITY_2], @@ -142,42 +142,6 @@ def test_iter_all_when_default_params_returns_expected_data( assert total_trusted_activities == 2 -def test_iter_all_when_page_repeats_returns_expected_data( - httpserver_auth: HTTPServer, -): - query_1 = { - "page_num": 1, - "page_size": 2, - } - query_2 = {"page_num": 2, "page_size": 2} - - trusted_activities_data_1 = { - "trustedActivities": [TEST_TRUSTED_ACTIVITY_1, TEST_TRUSTED_ACTIVITY_2], - "totalCount": 2, - } - - httpserver_auth.expect_request( - "/v2/trusted-activities", method="GET", query_string=urlencode(query_1) - ).respond_with_json(trusted_activities_data_1) - - httpserver_auth.expect_request( - "/v2/trusted-activities", method="GET", query_string=urlencode(query_2) - ).respond_with_json(trusted_activities_data_1) - - client = Client() - iterator = client.trusted_activities.v2.iter_all(page_size=2) - total_trusted_activities = 0 - expected_trusted_activities = [TEST_TRUSTED_ACTIVITY_1, TEST_TRUSTED_ACTIVITY_2] - - for item in iterator: - total_trusted_activities += 1 - assert isinstance(item, TrustedActivity) - assert item.json() == json.dumps( - expected_trusted_activities.pop(0), separators=(",", ":") - ) - assert total_trusted_activities == 2 - - def test_add_domain_when_default_params_returns_expected_data( httpserver_auth: HTTPServer, ):