Skip to content

Commit 7cea0b3

Browse files
committed
try to use model validate
1 parent 0ddc760 commit 7cea0b3

File tree

2 files changed

+30
-29
lines changed

2 files changed

+30
-29
lines changed

tests/integration/conftest.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import apify._actor
1919
from ._utils import generate_unique_resource_name
20+
from apify._models import ActorRun
2021

2122
if TYPE_CHECKING:
2223
from collections.abc import AsyncIterator, Awaitable, Mapping
@@ -64,7 +65,7 @@ def __call__(
6465
actor: ActorClientAsync,
6566
*,
6667
run_input: Any = None,
67-
) -> Coroutine[None, None, dict]:
68+
) -> Coroutine[None, None, ActorRun]:
6869
"""Initiate an Actor run and wait for its completion.
6970
7071
Args:
@@ -87,7 +88,7 @@ async def run_actor(apify_client_async: ApifyClientAsync) -> RunActorFunction:
8788
A coroutine that initiates an Actor run and waits for its completion.
8889
"""
8990

90-
async def _run_actor(actor: ActorClientAsync, *, run_input: Any = None) -> dict:
91+
async def _run_actor(actor: ActorClientAsync, *, run_input: Any = None) -> ActorRun:
9192
call_result = await actor.call(run_input=run_input)
9293

9394
assert isinstance(call_result, dict), 'The result of ActorClientAsync.call() is not a dictionary.'
@@ -96,9 +97,7 @@ async def _run_actor(actor: ActorClientAsync, *, run_input: Any = None) -> dict:
9697
run_client = apify_client_async.run(call_result['id'])
9798
run_result = await run_client.wait_for_finish(wait_secs=600)
9899

99-
assert isinstance(run_result, dict), 'The result of RunClientAsync.wait_for_finish() is not a dictionary.'
100-
assert 'status' in run_result, 'The result of RunClientAsync.wait_for_finish() does not contain a status.'
101-
return run_result
100+
return ActorRun.model_validate(run_result)
102101

103102
return _run_actor
104103

tests/integration/test_actor_api_helpers.py

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from ._utils import generate_unique_resource_name
1010
from apify import Actor
11+
from apify._models import ActorRun
1112

1213
if TYPE_CHECKING:
1314
from apify_client import ApifyClientAsync
@@ -26,7 +27,7 @@ async def main() -> None:
2627
actor = await make_actor('is-at-home', main_func=main)
2728
run_result = await run_actor(actor)
2829

29-
assert run_result['status'] == 'SUCCEEDED'
30+
assert run_result.status == 'SUCCEEDED'
3031

3132

3233
async def test_actor_retrieves_env_vars(
@@ -52,7 +53,7 @@ async def main() -> None:
5253
actor = await make_actor('get-env', main_func=main)
5354
run_result = await run_actor(actor)
5455

55-
assert run_result['status'] == 'SUCCEEDED'
56+
assert run_result.status == 'SUCCEEDED'
5657

5758

5859
async def test_actor_creates_new_client_instance(
@@ -76,7 +77,7 @@ async def main() -> None:
7677
actor = await make_actor('new-client', main_func=main)
7778
run_result = await run_actor(actor)
7879

79-
assert run_result['status'] == 'SUCCEEDED'
80+
assert run_result.status == 'SUCCEEDED'
8081

8182
output_record = await actor.last_run().key_value_store().get_record('OUTPUT')
8283
assert output_record is not None
@@ -95,15 +96,15 @@ async def main() -> None:
9596
actor = await make_actor('set-status-message', main_func=main)
9697
run_result_1 = await run_actor(actor)
9798

98-
assert run_result_1['status'] == 'SUCCEEDED'
99-
assert run_result_1['statusMessage'] == 'testing-status-message'
100-
assert run_result_1['isStatusMessageTerminal'] is None
99+
assert run_result_1.status == 'SUCCEEDED'
100+
assert run_result_1.status_message == 'testing-status-message'
101+
assert run_result_1.is_status_message_terminal is None
101102

102103
run_result_2 = await run_actor(actor, run_input={'is_terminal': True})
103104

104-
assert run_result_2['status'] == 'SUCCEEDED'
105-
assert run_result_2['statusMessage'] == 'testing-status-message'
106-
assert run_result_2['isStatusMessageTerminal'] is True
105+
assert run_result_2.status == 'SUCCEEDED'
106+
assert run_result_2.status_message == 'testing-status-message'
107+
assert run_result_2.is_status_message_terminal is True
107108

108109

109110
async def test_actor_starts_another_actor_instance(
@@ -142,7 +143,7 @@ async def main_outer() -> None:
142143
run_input={'test_value': test_value, 'inner_actor_id': inner_actor_id},
143144
)
144145

145-
assert run_result_outer['status'] == 'SUCCEEDED'
146+
assert run_result_outer.status == 'SUCCEEDED'
146147

147148
await inner_actor.last_run().wait_for_finish(wait_secs=600)
148149

@@ -187,7 +188,7 @@ async def main_outer() -> None:
187188
run_input={'test_value': test_value, 'inner_actor_id': inner_actor_id},
188189
)
189190

190-
assert run_result_outer['status'] == 'SUCCEEDED'
191+
assert run_result_outer.status == 'SUCCEEDED'
191192

192193
await inner_actor.last_run().wait_for_finish(wait_secs=600)
193194

@@ -238,7 +239,7 @@ async def main_outer() -> None:
238239
run_input={'test_value': test_value, 'inner_task_id': task['id']},
239240
)
240241

241-
assert run_result_outer['status'] == 'SUCCEEDED'
242+
assert run_result_outer.status == 'SUCCEEDED'
242243

243244
await inner_actor.last_run().wait_for_finish(wait_secs=600)
244245

@@ -278,12 +279,13 @@ async def main_outer() -> None:
278279
run_input={'inner_run_id': inner_run_id},
279280
)
280281

281-
assert run_result_outer['status'] == 'SUCCEEDED'
282+
assert run_result_outer.status == 'SUCCEEDED'
282283

283284
await inner_actor.last_run().wait_for_finish(wait_secs=600)
284-
inner_actor_last_run = await inner_actor.last_run().get()
285-
assert inner_actor_last_run is not None
286-
assert inner_actor_last_run['status'] == 'ABORTED'
285+
inner_actor_last_run_dict = await inner_actor.last_run().get()
286+
inner_actor_last_run = ActorRun.model_validate(inner_actor_last_run_dict)
287+
288+
assert inner_actor_last_run.status == 'ABORTED'
287289

288290
inner_output_record = await inner_actor.last_run().key_value_store().get_record('OUTPUT')
289291
assert inner_output_record is None
@@ -335,7 +337,7 @@ async def main_outer() -> None:
335337
run_input={'test_value': test_value, 'inner_actor_id': inner_actor_id},
336338
)
337339

338-
assert run_result_outer['status'] == 'SUCCEEDED'
340+
assert run_result_outer.status == 'SUCCEEDED'
339341

340342
outer_run_key_value_store = outer_actor.last_run().key_value_store()
341343

@@ -373,7 +375,7 @@ async def main() -> None:
373375
run_input={'counter_key': 'reboot_counter'},
374376
)
375377

376-
assert run_result['status'] == 'SUCCEEDED'
378+
assert run_result.status == 'SUCCEEDED'
377379

378380
not_written_value = await actor.last_run().key_value_store().get_record('THIS_KEY_SHOULD_NOT_BE_WRITTEN')
379381
assert not_written_value is None
@@ -452,17 +454,17 @@ async def main_client() -> None:
452454
run_input={'server_actor_container_url': server_actor_container_url},
453455
)
454456

455-
assert ac_run_result['status'] == 'SUCCEEDED'
457+
assert ac_run_result.status == 'SUCCEEDED'
456458

457-
sa_run_result = await server_actor.last_run().wait_for_finish(wait_secs=600)
459+
sa_run_result_dict = await server_actor.last_run().wait_for_finish(wait_secs=600)
460+
sa_run_result = ActorRun.model_validate(sa_run_result_dict)
458461

459-
assert sa_run_result is not None
460-
assert sa_run_result['status'] == 'SUCCEEDED'
462+
assert sa_run_result.status == 'SUCCEEDED'
461463

462464
webhook_body_record = await server_actor.last_run().key_value_store().get_record('WEBHOOK_BODY')
463465
assert webhook_body_record is not None
464466
assert webhook_body_record['value'] != ''
465467
parsed_webhook_body = json.loads(webhook_body_record['value'])
466468

467-
assert parsed_webhook_body['eventData']['actorId'] == ac_run_result['actId']
468-
assert parsed_webhook_body['eventData']['actorRunId'] == ac_run_result['id']
469+
assert parsed_webhook_body['eventData']['actorId'] == ac_run_result.act_id
470+
assert parsed_webhook_body['eventData']['actorRunId'] == ac_run_result.id

0 commit comments

Comments
 (0)