Skip to content

Commit d2a98c0

Browse files
committed
use generated models in resource clients
1 parent 41e0234 commit d2a98c0

26 files changed

+472
-305
lines changed

src/apify_client/clients/resource_clients/actor.py

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from typing import TYPE_CHECKING, Any, Literal
44

5+
from apify_client._models import Actor, Build, Run
56
from apify_client._utils import (
67
encode_key_value_store_record_value,
78
encode_webhook_list_to_base64,
@@ -105,15 +106,16 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
105106
resource_path = kwargs.pop('resource_path', 'acts')
106107
super().__init__(*args, resource_path=resource_path, **kwargs)
107108

108-
def get(self) -> dict | None:
109+
def get(self) -> Actor | None:
109110
"""Retrieve the Actor.
110111
111112
https://docs.apify.com/api/v2#/reference/actors/actor-object/get-actor
112113
113114
Returns:
114115
The retrieved Actor.
115116
"""
116-
return self._get()
117+
result = self._get()
118+
return Actor.model_validate(result) if result is not None else None
117119

118120
def update(
119121
self,
@@ -143,7 +145,7 @@ def update(
143145
actor_standby_memory_mbytes: int | None = None,
144146
pricing_infos: list[dict] | None = None,
145147
actor_permission_level: ActorPermissionLevel | None = None,
146-
) -> dict:
148+
) -> Actor:
147149
"""Update the Actor with the specified fields.
148150
149151
https://docs.apify.com/api/v2#/reference/actors/actor-object/update-actor
@@ -211,7 +213,8 @@ def update(
211213
actor_permission_level=actor_permission_level,
212214
)
213215

214-
return self._update(filter_out_none_values_recursively(actor_representation))
216+
result = self._update(filter_out_none_values_recursively(actor_representation))
217+
return Actor.model_validate(result)
215218

216219
def delete(self) -> None:
217220
"""Delete the Actor.
@@ -234,7 +237,7 @@ def start(
234237
force_permission_level: ActorPermissionLevel | None = None,
235238
wait_for_finish: int | None = None,
236239
webhooks: list[dict] | None = None,
237-
) -> dict:
240+
) -> Run:
238241
"""Start the Actor and immediately return the Run object.
239242
240243
https://docs.apify.com/api/v2#/reference/actors/run-collection/run-actor
@@ -290,7 +293,8 @@ def start(
290293
params=request_params,
291294
)
292295

293-
return parse_date_fields(pluck_data(response.json()))
296+
result = parse_date_fields(pluck_data(response.json()))
297+
return Run.model_validate(result)
294298

295299
def call(
296300
self,
@@ -307,7 +311,7 @@ def call(
307311
force_permission_level: ActorPermissionLevel | None = None,
308312
wait_secs: int | None = None,
309313
logger: Logger | None | Literal['default'] = 'default',
310-
) -> dict | None:
314+
) -> Run | None:
311315
"""Start the Actor and wait for it to finish before returning the Run object.
312316
313317
It waits indefinitely, unless the wait_secs argument is provided.
@@ -356,15 +360,15 @@ def call(
356360
force_permission_level=force_permission_level,
357361
)
358362
if not logger:
359-
return self.root_client.run(started_run['id']).wait_for_finish(wait_secs=wait_secs)
363+
return self.root_client.run(started_run.id).wait_for_finish(wait_secs=wait_secs)
360364

361-
run_client = self.root_client.run(run_id=started_run['id'])
365+
run_client = self.root_client.run(run_id=started_run.id)
362366

363367
if logger == 'default':
364368
logger = None
365369

366370
with run_client.get_status_message_watcher(to_logger=logger), run_client.get_streamed_log(to_logger=logger):
367-
return self.root_client.run(started_run['id']).wait_for_finish(wait_secs=wait_secs)
371+
return self.root_client.run(started_run.id).wait_for_finish(wait_secs=wait_secs)
368372

369373
def build(
370374
self,
@@ -374,7 +378,7 @@ def build(
374378
tag: str | None = None,
375379
use_cache: bool | None = None,
376380
wait_for_finish: int | None = None,
377-
) -> dict:
381+
) -> Build:
378382
"""Build the Actor.
379383
380384
https://docs.apify.com/api/v2#/reference/actors/build-collection/build-actor
@@ -408,7 +412,8 @@ def build(
408412
params=request_params,
409413
)
410414

411-
return parse_date_fields(pluck_data(response.json()))
415+
result = parse_date_fields(pluck_data(response.json()))
416+
return Build.model_validate(result)
412417

413418
def builds(self) -> BuildCollectionClient:
414419
"""Retrieve a client for the builds of this Actor."""
@@ -528,15 +533,16 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
528533
resource_path = kwargs.pop('resource_path', 'acts')
529534
super().__init__(*args, resource_path=resource_path, **kwargs)
530535

531-
async def get(self) -> dict | None:
536+
async def get(self) -> Actor | None:
532537
"""Retrieve the Actor.
533538
534539
https://docs.apify.com/api/v2#/reference/actors/actor-object/get-actor
535540
536541
Returns:
537542
The retrieved Actor.
538543
"""
539-
return await self._get()
544+
result = await self._get()
545+
return Actor.model_validate(result) if result is not None else None
540546

541547
async def update(
542548
self,
@@ -566,7 +572,7 @@ async def update(
566572
actor_standby_memory_mbytes: int | None = None,
567573
pricing_infos: list[dict] | None = None,
568574
actor_permission_level: ActorPermissionLevel | None = None,
569-
) -> dict:
575+
) -> Actor:
570576
"""Update the Actor with the specified fields.
571577
572578
https://docs.apify.com/api/v2#/reference/actors/actor-object/update-actor
@@ -634,7 +640,8 @@ async def update(
634640
actor_permission_level=actor_permission_level,
635641
)
636642

637-
return await self._update(filter_out_none_values_recursively(actor_representation))
643+
result = await self._update(filter_out_none_values_recursively(actor_representation))
644+
return Actor.model_validate(result)
638645

639646
async def delete(self) -> None:
640647
"""Delete the Actor.
@@ -657,7 +664,7 @@ async def start(
657664
force_permission_level: ActorPermissionLevel | None = None,
658665
wait_for_finish: int | None = None,
659666
webhooks: list[dict] | None = None,
660-
) -> dict:
667+
) -> Run:
661668
"""Start the Actor and immediately return the Run object.
662669
663670
https://docs.apify.com/api/v2#/reference/actors/run-collection/run-actor
@@ -713,7 +720,8 @@ async def start(
713720
params=request_params,
714721
)
715722

716-
return parse_date_fields(pluck_data(response.json()))
723+
result = parse_date_fields(pluck_data(response.json()))
724+
return Run.model_validate(result)
717725

718726
async def call(
719727
self,
@@ -730,7 +738,7 @@ async def call(
730738
force_permission_level: ActorPermissionLevel | None = None,
731739
wait_secs: int | None = None,
732740
logger: Logger | None | Literal['default'] = 'default',
733-
) -> dict | None:
741+
) -> Run | None:
734742
"""Start the Actor and wait for it to finish before returning the Run object.
735743
736744
It waits indefinitely, unless the wait_secs argument is provided.
@@ -780,9 +788,9 @@ async def call(
780788
)
781789

782790
if not logger:
783-
return await self.root_client.run(started_run['id']).wait_for_finish(wait_secs=wait_secs)
791+
return await self.root_client.run(started_run.id).wait_for_finish(wait_secs=wait_secs)
784792

785-
run_client = self.root_client.run(run_id=started_run['id'])
793+
run_client = self.root_client.run(run_id=started_run.id)
786794

787795
if logger == 'default':
788796
logger = None
@@ -791,7 +799,7 @@ async def call(
791799
streamed_log = await run_client.get_streamed_log(to_logger=logger)
792800

793801
async with status_redirector, streamed_log:
794-
return await self.root_client.run(started_run['id']).wait_for_finish(wait_secs=wait_secs)
802+
return await self.root_client.run(started_run.id).wait_for_finish(wait_secs=wait_secs)
795803

796804
async def build(
797805
self,
@@ -801,7 +809,7 @@ async def build(
801809
tag: str | None = None,
802810
use_cache: bool | None = None,
803811
wait_for_finish: int | None = None,
804-
) -> dict:
812+
) -> Build:
805813
"""Build the Actor.
806814
807815
https://docs.apify.com/api/v2#/reference/actors/build-collection/build-actor
@@ -835,7 +843,8 @@ async def build(
835843
params=request_params,
836844
)
837845

838-
return parse_date_fields(pluck_data(response.json()))
846+
result = parse_date_fields(pluck_data(response.json()))
847+
return Build.model_validate(result)
839848

840849
def builds(self) -> BuildCollectionClientAsync:
841850
"""Retrieve a client for the builds of this Actor."""

src/apify_client/clients/resource_clients/actor_collection.py

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

33
from typing import TYPE_CHECKING, Any, Literal
44

5+
from apify_client._models import Actor, ActorShort
56
from apify_client._utils import filter_out_none_values_recursively
67
from apify_client.clients.base import ResourceCollectionClient, ResourceCollectionClientAsync
78
from apify_client.clients.resource_clients.actor import get_actor_representation
@@ -25,7 +26,7 @@ def list(
2526
offset: int | None = None,
2627
desc: bool | None = None,
2728
sort_by: Literal['createdAt', 'stats.lastRunStartedAt'] | None = 'createdAt',
28-
) -> ListPage[dict]:
29+
) -> ListPage[ActorShort]:
2930
"""List the Actors the user has created or used.
3031
3132
https://docs.apify.com/api/v2#/reference/actors/actor-collection/get-list-of-actors
@@ -68,7 +69,7 @@ def create(
6869
actor_standby_idle_timeout_secs: int | None = None,
6970
actor_standby_build: str | None = None,
7071
actor_standby_memory_mbytes: int | None = None,
71-
) -> dict:
72+
) -> Actor:
7273
"""Create a new Actor.
7374
7475
https://docs.apify.com/api/v2#/reference/actors/actor-collection/create-actor
@@ -132,7 +133,8 @@ def create(
132133
actor_standby_memory_mbytes=actor_standby_memory_mbytes,
133134
)
134135

135-
return self._create(filter_out_none_values_recursively(actor_representation))
136+
result = self._create(filter_out_none_values_recursively(actor_representation))
137+
return Actor.model_validate(result)
136138

137139

138140
class ActorCollectionClientAsync(ResourceCollectionClientAsync):
@@ -150,7 +152,7 @@ async def list(
150152
offset: int | None = None,
151153
desc: bool | None = None,
152154
sort_by: Literal['createdAt', 'stats.lastRunStartedAt'] | None = 'createdAt',
153-
) -> ListPage[dict]:
155+
) -> ListPage[ActorShort]:
154156
"""List the Actors the user has created or used.
155157
156158
https://docs.apify.com/api/v2#/reference/actors/actor-collection/get-list-of-actors
@@ -193,7 +195,7 @@ async def create(
193195
actor_standby_idle_timeout_secs: int | None = None,
194196
actor_standby_build: str | None = None,
195197
actor_standby_memory_mbytes: int | None = None,
196-
) -> dict:
198+
) -> Actor:
197199
"""Create a new Actor.
198200
199201
https://docs.apify.com/api/v2#/reference/actors/actor-collection/create-actor
@@ -257,4 +259,5 @@ async def create(
257259
actor_standby_memory_mbytes=actor_standby_memory_mbytes,
258260
)
259261

260-
return await self._create(filter_out_none_values_recursively(actor_representation))
262+
result = await self._create(filter_out_none_values_recursively(actor_representation))
263+
return Actor.model_validate(result)

src/apify_client/clients/resource_clients/actor_env_var.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from typing import Any
44

5+
from apify_client._models import EnvVar
56
from apify_client._utils import filter_out_none_values_recursively
67
from apify_client.clients.base import ResourceClient, ResourceClientAsync
78

@@ -27,23 +28,24 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
2728
resource_path = kwargs.pop('resource_path', 'env-vars')
2829
super().__init__(*args, resource_path=resource_path, **kwargs)
2930

30-
def get(self) -> dict | None:
31+
def get(self) -> EnvVar | None:
3132
"""Return information about the Actor environment variable.
3233
3334
https://docs.apify.com/api/v2#/reference/actors/environment-variable-object/get-environment-variable
3435
3536
Returns:
3637
The retrieved Actor environment variable data.
3738
"""
38-
return self._get()
39+
result = self._get()
40+
return EnvVar.model_validate(result) if result is not None else None
3941

4042
def update(
4143
self,
4244
*,
4345
is_secret: bool | None = None,
4446
name: str,
4547
value: str,
46-
) -> dict:
48+
) -> EnvVar:
4749
"""Update the Actor environment variable with specified fields.
4850
4951
https://docs.apify.com/api/v2#/reference/actors/environment-variable-object/update-environment-variable
@@ -62,7 +64,8 @@ def update(
6264
value=value,
6365
)
6466

65-
return self._update(filter_out_none_values_recursively(actor_env_var_representation))
67+
result = self._update(filter_out_none_values_recursively(actor_env_var_representation))
68+
return EnvVar.model_validate(result)
6669

6770
def delete(self) -> None:
6871
"""Delete the Actor environment variable.
@@ -79,23 +82,24 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
7982
resource_path = kwargs.pop('resource_path', 'env-vars')
8083
super().__init__(*args, resource_path=resource_path, **kwargs)
8184

82-
async def get(self) -> dict | None:
85+
async def get(self) -> EnvVar | None:
8386
"""Return information about the Actor environment variable.
8487
8588
https://docs.apify.com/api/v2#/reference/actors/environment-variable-object/get-environment-variable
8689
8790
Returns:
8891
The retrieved Actor environment variable data.
8992
"""
90-
return await self._get()
93+
result = await self._get()
94+
return EnvVar.model_validate(result) if result is not None else None
9195

9296
async def update(
9397
self,
9498
*,
9599
is_secret: bool | None = None,
96100
name: str,
97101
value: str,
98-
) -> dict:
102+
) -> EnvVar:
99103
"""Update the Actor environment variable with specified fields.
100104
101105
https://docs.apify.com/api/v2#/reference/actors/environment-variable-object/update-environment-variable
@@ -114,7 +118,8 @@ async def update(
114118
value=value,
115119
)
116120

117-
return await self._update(filter_out_none_values_recursively(actor_env_var_representation))
121+
result = await self._update(filter_out_none_values_recursively(actor_env_var_representation))
122+
return EnvVar.model_validate(result)
118123

119124
async def delete(self) -> None:
120125
"""Delete the Actor environment variable.

0 commit comments

Comments
 (0)