Skip to content

Commit de13b6c

Browse files
committed
New client commit and test fixes
1 parent c98dd1e commit de13b6c

21 files changed

+93
-93
lines changed

docs/02_concepts/code/07_webhook.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ async def main() -> None:
77
async with Actor:
88
# Create a webhook that will be triggered when the Actor run fails.
99
webhook = Webhook(
10-
event_types=['ACTOR.RUN.FAILED'], # ty: ignore[invalid-argument-type]
10+
event_types=['ACTOR.RUN.FAILED'],
1111
request_url='https://example.com/run-failed',
1212
)
1313

docs/02_concepts/code/07_webhook_preventing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ async def main() -> None:
77
async with Actor:
88
# Create a webhook that will be triggered when the Actor run fails.
99
webhook = Webhook(
10-
event_types=['ACTOR.RUN.FAILED'], # ty: ignore[invalid-argument-type]
10+
event_types=['ACTOR.RUN.FAILED'],
1111
request_url='https://example.com/run-failed',
1212
)
1313

src/apify/_models.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from pydantic import BaseModel, BeforeValidator, ConfigDict, Field
88

9-
from apify_client._models import ActorJobStatus, RunOrigin, WebhookEventType
9+
from apify_client._models import ActorJobStatus
1010
from crawlee._utils.models import timedelta_ms
1111
from crawlee._utils.urls import validate_http_url
1212

@@ -18,10 +18,10 @@
1818

1919
@docs_group('Actor')
2020
class Webhook(BaseModel):
21-
__model_config__ = ConfigDict(populate_by_name=True)
21+
__model_config__ = ConfigDict(populate_by_name=True, use_enum_values=True)
2222

2323
event_types: Annotated[
24-
list[WebhookEventType],
24+
list[str],
2525
Field(description='Event types that should trigger the webhook'),
2626
]
2727
request_url: Annotated[
@@ -37,9 +37,9 @@ class Webhook(BaseModel):
3737

3838
@docs_group('Actor')
3939
class ActorRunMeta(BaseModel):
40-
__model_config__ = ConfigDict(populate_by_name=True)
40+
__model_config__ = ConfigDict(populate_by_name=True, use_enum_values=True)
4141

42-
origin: Annotated[RunOrigin, Field()]
42+
origin: Annotated[str, Field()]
4343

4444

4545
@docs_group('Actor')
@@ -96,7 +96,7 @@ class ActorRunUsage(BaseModel):
9696
class ActorRun(BaseModel):
9797
"""Represents an Actor run and its associated data."""
9898

99-
__model_config__ = ConfigDict(populate_by_name=True)
99+
__model_config__ = ConfigDict(populate_by_name=True, use_enum_values=True)
100100

101101
id: Annotated[str, Field(alias='id')]
102102
"""Unique identifier of the Actor run."""

tests/integration/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ async def test_something(
5252
actor = await make_actor(label='something', main_func=main)
5353
run_result = await run_actor(actor)
5454

55-
assert run_result.status == 'SUCCEEDED'
55+
assert run_result.status.value == 'SUCCEEDED'
5656
```
5757

5858
These Actors will have the `src/main.py` file set to the `main` function definition, prepended with `import asyncio` and `from apify import Actor`, for your convenience.
@@ -74,7 +74,7 @@ async def test_something(
7474
actor = await make_actor(label='something', main_func=main)
7575
run_result = await run_actor(actor)
7676

77-
assert run_result.status == 'SUCCEEDED'
77+
assert run_result.status.value == 'SUCCEEDED'
7878
```
7979

8080
#### Creating Actor from source files
@@ -135,7 +135,7 @@ async def test_something(
135135
actor = await make_actor(label='something', source_files=actor_source_files)
136136
actor_run = await run_actor(actor)
137137

138-
assert actor_run.status == 'SUCCEEDED'
138+
assert actor_run.status.value == 'SUCCEEDED'
139139
```
140140

141141
#### Asserts
@@ -158,5 +158,5 @@ async def test_add_and_fetch_requests(
158158
actor = await make_actor(label='rq-test', main_func=main)
159159
run_result = await run_actor(actor)
160160

161-
assert run_result.status == 'SUCCEEDED'
161+
assert run_result.status.value == 'SUCCEEDED'
162162
```

tests/integration/actor/conftest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from filelock import FileLock
1414

1515
from apify_client import ApifyClient, ApifyClientAsync
16-
from apify_client._models import ActorJobStatus, ActorPermissionLevel, VersionSourceType
16+
from apify_client._models import ActorPermissionLevel, VersionSourceType
1717

1818
from .._utils import generate_unique_resource_name
1919
from apify._models import ActorRun
@@ -230,7 +230,7 @@ async def _make_actor(
230230
{
231231
'versionNumber': '0.0',
232232
'buildTag': 'latest',
233-
'sourceType': VersionSourceType.SOURCE_FILES,
233+
'sourceType': VersionSourceType.SOURCE_FILES.value,
234234
'sourceFiles': source_files_for_api,
235235
}
236236
],
@@ -244,7 +244,7 @@ async def _make_actor(
244244
build_client_result = await build_client.wait_for_finish(wait_secs=600)
245245

246246
assert build_client_result is not None
247-
assert build_client_result.status == ActorJobStatus.SUCCEEDED
247+
assert build_client_result.status.value == 'SUCCEEDED'
248248

249249
# We only mark the client for cleanup if the build succeeded, so that if something goes wrong here,
250250
# you have a chance to check the error.

tests/integration/actor/test_actor_api_helpers.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import json
55
from typing import TYPE_CHECKING
66

7-
from apify_client._models import ActorPermissionLevel
7+
from apify_client._models import ActorJobStatus, ActorPermissionLevel
88
from crawlee._utils.crypto import crypto_random_object_id
99

1010
from .._utils import generate_unique_resource_name
@@ -28,7 +28,7 @@ async def main() -> None:
2828
actor = await make_actor(label='is-at-home', main_func=main)
2929
run_result = await run_actor(actor)
3030

31-
assert run_result.status == 'SUCCEEDED'
31+
assert run_result.status.value == 'SUCCEEDED'
3232

3333

3434
async def test_actor_retrieves_env_vars(
@@ -52,7 +52,7 @@ async def main() -> None:
5252
actor = await make_actor(label='get-env', main_func=main)
5353
run_result = await run_actor(actor)
5454

55-
assert run_result.status == 'SUCCEEDED'
55+
assert run_result.status.value == 'SUCCEEDED'
5656

5757

5858
async def test_actor_creates_new_client_instance(
@@ -76,7 +76,7 @@ async def main() -> None:
7676
actor = await make_actor(label='new-client', main_func=main)
7777
run_result = await run_actor(actor)
7878

79-
assert run_result.status == 'SUCCEEDED'
79+
assert run_result.status.value == 'SUCCEEDED'
8080

8181
output_record = await actor.last_run().key_value_store().get_record('OUTPUT')
8282
assert output_record is not None
@@ -129,7 +129,7 @@ async def main_outer() -> None:
129129

130130
inner_run_status = await Actor.apify_client.actor(inner_actor_id).last_run().get()
131131
assert inner_run_status is not None
132-
assert inner_run_status.status in ['READY', 'RUNNING']
132+
assert inner_run_status.status.value in {'READY', 'RUNNING'}
133133

134134
inner_actor = await make_actor(label='start-inner', main_func=main_inner)
135135
outer_actor = await make_actor(label='start-outer', main_func=main_outer)
@@ -175,9 +175,10 @@ async def main_outer() -> None:
175175

176176
await Actor.call(inner_actor_id, run_input={'test_value': test_value})
177177

178-
inner_run_status = await Actor.apify_client.actor(inner_actor_id).last_run().get()
179-
assert inner_run_status is not None
180-
assert inner_run_status.status == 'SUCCEEDED'
178+
run_result_inner = await Actor.apify_client.actor(inner_actor_id).last_run().get()
179+
180+
assert run_result_inner is not None
181+
assert run_result_inner.status.value == 'SUCCEEDED'
181182

182183
inner_actor = await make_actor(label='call-inner', main_func=main_inner)
183184
outer_actor = await make_actor(label='call-outer', main_func=main_outer)
@@ -223,9 +224,10 @@ async def main_outer() -> None:
223224

224225
await Actor.call_task(inner_task_id)
225226

226-
inner_run_status = await Actor.apify_client.task(inner_task_id).last_run().get()
227-
assert inner_run_status is not None
228-
assert inner_run_status.status == 'SUCCEEDED'
227+
run_result_inner = await Actor.apify_client.task(inner_task_id).last_run().get()
228+
229+
assert run_result_inner is not None
230+
assert run_result_inner.status.value == 'SUCCEEDED'
229231

230232
inner_actor = await make_actor(label='call-task-inner', main_func=main_inner)
231233
outer_actor = await make_actor(label='call-task-outer', main_func=main_outer)
@@ -248,7 +250,7 @@ async def main_outer() -> None:
248250
force_permission_level=ActorPermissionLevel.FULL_PERMISSIONS,
249251
)
250252

251-
assert run_result_outer.status == 'SUCCEEDED'
253+
assert run_result_outer.status.value == 'SUCCEEDED'
252254

253255
await inner_actor.last_run().wait_for_finish(wait_secs=600)
254256

@@ -301,7 +303,7 @@ async def main_outer() -> None:
301303
inner_actor_run_dict = inner_actor_run.model_dump(by_alias=True)
302304
inner_actor_last_run = ActorRun.model_validate(inner_actor_run_dict)
303305

304-
assert inner_actor_last_run.status == 'ABORTED'
306+
assert inner_actor_last_run.status == ActorJobStatus.ABORTED
305307

306308
inner_output_record = await inner_actor.last_run().key_value_store().get_record('OUTPUT')
307309
assert inner_output_record is None
@@ -394,7 +396,7 @@ async def main() -> None:
394396
run_input={'counter_key': 'reboot_counter'},
395397
)
396398

397-
assert run_result.status == 'SUCCEEDED'
399+
assert run_result.status.value == 'SUCCEEDED'
398400

399401
not_written_value = await actor.last_run().key_value_store().get_record('THIS_KEY_SHOULD_NOT_BE_WRITTEN')
400402
assert not_written_value is None
@@ -450,7 +452,7 @@ async def main_client() -> None:
450452

451453
await Actor.add_webhook(
452454
Webhook(
453-
event_types=[WebhookEventType.ACTOR_RUN_SUCCEEDED],
455+
event_types=[WebhookEventType.ACTOR_RUN_SUCCEEDED.value],
454456
request_url=server_actor_container_url,
455457
)
456458
)

tests/integration/actor/test_actor_call_timeouts.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ async def main() -> None:
5353
actor = await make_actor(label='inherit-timeout', main_func=main)
5454
run_result = await run_actor(actor)
5555

56-
assert run_result.status == 'SUCCEEDED'
56+
assert run_result.status.value == 'SUCCEEDED'
5757

5858

5959
async def test_actor_call_inherit_timeout(
@@ -102,4 +102,4 @@ async def main() -> None:
102102
actor = await make_actor(label='remaining-timeout', main_func=main)
103103
run_result = await run_actor(actor)
104104

105-
assert run_result.status == 'SUCCEEDED'
105+
assert run_result.status.value == 'SUCCEEDED'

tests/integration/actor/test_actor_charge.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
import pytest_asyncio
88

9-
from apify_client._models import ActorJobStatus
10-
119
from apify import Actor
1210
from apify._models import ActorRun
1311

@@ -91,7 +89,7 @@ async def test_actor_charge_basic(
9189
run = ActorRun.model_validate(updated_run_dict)
9290

9391
try:
94-
assert run.status == ActorJobStatus.SUCCEEDED
92+
assert run.status == 'SUCCEEDED'
9593
assert run.charged_event_counts == {'foobar': 4}
9694
break
9795
except AssertionError:
@@ -104,22 +102,22 @@ async def test_actor_charge_limit(
104102
run_actor: RunActorFunction,
105103
apify_client_async: ApifyClientAsync,
106104
) -> None:
107-
run = await run_actor(ppe_actor, max_total_charge_usd=Decimal('0.2'))
105+
run_result = await run_actor(ppe_actor, max_total_charge_usd=Decimal('0.2'))
108106

109107
# Refetch until the platform gets its act together
110108
for is_last_attempt, _ in retry_counter(30):
111109
await asyncio.sleep(1)
112110

113-
run_client = apify_client_async.run(run.id)
111+
run_client = apify_client_async.run(run_result.id)
114112
updated_run = await run_client.get()
115113
assert updated_run is not None, 'Updated run should not be None'
116114

117115
updated_run_dict = updated_run.model_dump(by_alias=True)
118-
run = ActorRun.model_validate(updated_run_dict)
116+
run_result = ActorRun.model_validate(updated_run_dict)
119117

120118
try:
121-
assert run.status == ActorJobStatus.SUCCEEDED
122-
assert run.charged_event_counts == {'foobar': 2}
119+
assert run_result.status.value == 'SUCCEEDED'
120+
assert run_result.charged_event_counts == {'foobar': 2}
123121
break
124122
except AssertionError:
125123
if is_last_attempt:

tests/integration/actor/test_actor_create_proxy_configuration.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ async def main() -> None:
3030
actor = await make_actor(label='proxy-configuration', main_func=main)
3131
run_result = await run_actor(actor)
3232

33-
assert run_result.status == 'SUCCEEDED'
33+
assert run_result.status.value == 'SUCCEEDED'
3434

3535

3636
async def test_create_proxy_configuration_with_groups_and_country(
@@ -70,4 +70,4 @@ async def main() -> None:
7070
actor = await make_actor(label='proxy-configuration', main_func=main)
7171
run_result = await run_actor(actor)
7272

73-
assert run_result.status == 'SUCCEEDED'
73+
assert run_result.status.value == 'SUCCEEDED'

tests/integration/actor/test_actor_dataset.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ async def main() -> None:
2929
actor = await make_actor(label='push-data', main_func=main)
3030
run_result = await run_actor(actor)
3131

32-
assert run_result.status == 'SUCCEEDED'
32+
assert run_result.status.value == 'SUCCEEDED'
3333

3434
list_page = await actor.last_run().dataset().list_items()
3535
assert list_page.items[0]['id'] == 0
@@ -48,7 +48,7 @@ async def main() -> None:
4848
actor = await make_actor(label='push-data-over-9mb', main_func=main)
4949
run_result = await run_actor(actor)
5050

51-
assert run_result.status == 'SUCCEEDED'
51+
assert run_result.status.value == 'SUCCEEDED'
5252

5353
async for item in actor.last_run().dataset().iterate_items():
5454
assert item['str'] == 'x' * 10000
@@ -71,7 +71,7 @@ async def main() -> None:
7171

7272
actor = await make_actor(label='test_dataset_iter_items', main_func=main)
7373
run_result = await run_actor(actor)
74-
assert run_result.status == 'SUCCEEDED'
74+
assert run_result.status.value == 'SUCCEEDED'
7575

7676

7777
async def test_same_references_in_default_dataset(
@@ -87,7 +87,7 @@ async def main() -> None:
8787
actor = await make_actor(label='dataset-same-ref-default', main_func=main)
8888
run_result = await run_actor(actor)
8989

90-
assert run_result.status == 'SUCCEEDED'
90+
assert run_result.status.value == 'SUCCEEDED'
9191

9292

9393
async def test_same_references_in_named_dataset(
@@ -115,7 +115,7 @@ async def main() -> None:
115115
actor = await make_actor(label='dataset-same-ref-named', main_func=main)
116116
run_result = await run_actor(actor, run_input={'datasetName': dataset_name})
117117

118-
assert run_result.status == 'SUCCEEDED'
118+
assert run_result.status.value == 'SUCCEEDED'
119119

120120

121121
async def test_force_cloud(
@@ -183,7 +183,7 @@ async def main() -> None:
183183
actor = await make_actor(label='dataset-defaults', main_func=main)
184184
run_result = await run_actor(actor)
185185

186-
assert run_result.status == 'SUCCEEDED'
186+
assert run_result.status.value == 'SUCCEEDED'
187187

188188

189189
async def test_dataset_aliases(
@@ -227,4 +227,4 @@ async def main() -> None:
227227
actor = await make_actor(label='dataset-aliases', main_func=main)
228228
run_result = await run_actor(actor)
229229

230-
assert run_result.status == 'SUCCEEDED'
230+
assert run_result.status.value == 'SUCCEEDED'

0 commit comments

Comments
 (0)