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
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down
2 changes: 1 addition & 1 deletion src/_incydr_sdk/__version__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SPDX-FileCopyrightText: 2022-present Code42 Software <integrations@code42.com>
#
# SPDX-License-Identifier: MIT
__version__ = "2.12.4"
__version__ = "2.12.5"
13 changes: 3 additions & 10 deletions src/_incydr_sdk/trusted_activities/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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(
Expand Down
2 changes: 1 addition & 1 deletion src/_incydr_sdk/trusted_activities/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down
42 changes: 3 additions & 39 deletions tests/test_trusted_activities.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


Expand Down Expand Up @@ -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],
Expand Down Expand Up @@ -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,
):
Expand Down
Loading