Skip to content

Commit fe612a5

Browse files
authored
Merge pull request #764 from atlanhq/APP-9778
APP-9778 : find_runs_by_status_and_time_range() not working as expected
2 parents 5db008b + 21f3c75 commit fe612a5

4 files changed

Lines changed: 41 additions & 11 deletions

File tree

pyatlan/client/aio/workflow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ async def find_runs_by_status_and_time_range(
144144
if started_at:
145145
time_filters.append(Range(field="status.startedAt", gte=started_at))
146146
if finished_at:
147-
time_filters.append(Range(field="status.finishedAt", gte=finished_at))
147+
time_filters.append(Range(field="status.finishedAt", lte=finished_at))
148148

149149
run_lookup_query = Bool(
150150
must=[

pyatlan/client/workflow.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ def find_runs_by_status_and_time_range(
142142
if started_at:
143143
time_filters.append(Range(field="status.startedAt", gte=started_at))
144144
if finished_at:
145-
time_filters.append(Range(field="status.finishedAt", gte=finished_at))
145+
time_filters.append(Range(field="status.finishedAt", lte=finished_at))
146146

147147
run_lookup_query = Bool(
148148
must=[

tests/unit/aio/test_workflow_client.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
)
1717
from pyatlan.errors import InvalidRequestError
1818
from pyatlan.model.enums import AtlanWorkflowPhase, WorkflowPackage
19+
from pyatlan.model.search import Range
1920
from pyatlan.model.workflow import (
2021
PackageParameter,
2122
ScheduleQueriesSearchRequest,
@@ -299,17 +300,31 @@ async def test_find_runs_by_status_and_time_range(
299300
status = [AtlanWorkflowPhase.SUCCESS, AtlanWorkflowPhase.FAILED]
300301
started_at = "now-2h"
301302
finished_at = "now-1h"
302-
assert await async_client.find_runs_by_status_and_time_range(
303+
response = await async_client.find_runs_by_status_and_time_range(
303304
status=status,
304305
started_at=started_at,
305306
finished_at=finished_at,
306307
from_=10,
307308
size=5,
308-
) == WorkflowSearchResponse(**raw_json)
309+
)
310+
assert response == WorkflowSearchResponse(**raw_json)
309311
mock_api_caller._call_api.assert_called_once()
310-
assert isinstance(
311-
mock_api_caller._call_api.call_args.kwargs["request_obj"], WorkflowSearchRequest
312+
request_obj = mock_api_caller._call_api.call_args.kwargs["request_obj"]
313+
assert isinstance(request_obj, WorkflowSearchRequest)
314+
assert request_obj.query
315+
range_filters = [
316+
clause
317+
for clause in request_obj.query.must # type: ignore
318+
if isinstance(clause, Range)
319+
]
320+
assert any(
321+
rf.field == "status.startedAt" and rf.gte == started_at for rf in range_filters
312322
)
323+
finished_filters = [rf for rf in range_filters if rf.field == "status.finishedAt"]
324+
assert len(finished_filters) == 1
325+
finished_filter = finished_filters[0]
326+
assert finished_filter.lte == finished_at
327+
assert finished_filter.gte is None
313328

314329

315330
@pytest.mark.asyncio

tests/unit/test_workflow_client.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from pyatlan.client.workflow import WorkflowClient
1717
from pyatlan.errors import InvalidRequestError
1818
from pyatlan.model.enums import AtlanWorkflowPhase, WorkflowPackage
19+
from pyatlan.model.search import Range
1920
from pyatlan.model.workflow import (
2021
PackageParameter,
2122
ScheduleQueriesSearchRequest,
@@ -285,17 +286,31 @@ def test_find_runs_by_status_and_time_range(client: WorkflowClient, mock_api_cal
285286
status = [AtlanWorkflowPhase.SUCCESS, AtlanWorkflowPhase.FAILED]
286287
started_at = "now-2h"
287288
finished_at = "now-1h"
288-
assert client.find_runs_by_status_and_time_range(
289+
response = client.find_runs_by_status_and_time_range(
289290
status=status,
290291
started_at=started_at,
291292
finished_at=finished_at,
292293
from_=10,
293294
size=5,
294-
) == WorkflowSearchResponse(**raw_json)
295-
mock_api_caller._call_api.assert_called_once()
296-
assert isinstance(
297-
mock_api_caller._call_api.call_args.kwargs["request_obj"], WorkflowSearchRequest
298295
)
296+
assert response == WorkflowSearchResponse(**raw_json)
297+
mock_api_caller._call_api.assert_called_once()
298+
request_obj = mock_api_caller._call_api.call_args.kwargs["request_obj"]
299+
assert isinstance(request_obj, WorkflowSearchRequest)
300+
assert request_obj.query
301+
range_filters = [
302+
clause
303+
for clause in request_obj.query.must # type: ignore
304+
if isinstance(clause, Range)
305+
]
306+
assert any(
307+
rf.field == "status.startedAt" and rf.gte == started_at for rf in range_filters
308+
)
309+
finished_filters = [rf for rf in range_filters if rf.field == "status.finishedAt"]
310+
assert len(finished_filters) == 1
311+
finished_filter = finished_filters[0]
312+
assert finished_filter.lte == finished_at
313+
assert finished_filter.gte is None
299314

300315

301316
def test_find_by_id(

0 commit comments

Comments
 (0)