Skip to content

Commit a90ed03

Browse files
committed
Update
1 parent 7fda7ea commit a90ed03

37 files changed

Lines changed: 1970 additions & 133 deletions

src/apify_client/_models.py

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# generated by datamodel-codegen:
22
# filename: openapi.json
3-
# timestamp: 2026-01-21T16:38:20+00:00
3+
# timestamp: 2026-01-21T21:58:10+00:00
44

55
from __future__ import annotations
66

@@ -470,7 +470,7 @@ class ActorJobStatus(Enum):
470470
class BuildsMeta(BaseModel):
471471
origin: Annotated[str, Field(examples=['WEB'])]
472472
client_ip: Annotated[IPv4Address | None, Field(alias='clientIp', examples=['172.234.12.34'])] = None
473-
user_agent: Annotated[str, Field(alias='userAgent', examples=['Mozilla/5.0 (iPad)'])]
473+
user_agent: Annotated[str | None, Field(alias='userAgent', examples=['Mozilla/5.0 (iPad)'])] = None
474474

475475

476476
class BuildShort(BaseModel):
@@ -1290,16 +1290,16 @@ class KeyValueStore(BaseModel):
12901290
act_id: Annotated[str | None, Field(alias='actId', examples=[None])] = None
12911291
act_run_id: Annotated[str | None, Field(alias='actRunId', examples=[None])] = None
12921292
console_url: Annotated[
1293-
AnyUrl,
1293+
AnyUrl | None,
12941294
Field(alias='consoleUrl', examples=['https://console.apify.com/storage/key-value-stores/27TmTznX9YPeAYhkC']),
1295-
]
1295+
] = None
12961296
keys_public_url: Annotated[
1297-
AnyUrl,
1297+
AnyUrl | None,
12981298
Field(
12991299
alias='keysPublicUrl',
13001300
examples=['https://api.apify.com/v2/key-value-stores/WkzbQMuFYuamGv3YF/keys?signature=abc123'],
13011301
),
1302-
]
1302+
] = None
13031303
"""
13041304
A public link to access keys of the key-value store directly.
13051305
"""
@@ -1592,7 +1592,7 @@ class RequestQueueShort(BaseModel):
15921592
"""
15931593
The timestamp when the request queue was last accessed.
15941594
"""
1595-
expire_at: Annotated[AwareDatetime, Field(alias='expireAt', examples=['2019-06-02T17:15:06.751Z'])]
1595+
expire_at: Annotated[AwareDatetime | None, Field(alias='expireAt', examples=['2019-06-02T17:15:06.751Z'])] = None
15961596
"""
15971597
The timestamp when the request queue will expire and be deleted.
15981598
"""
@@ -2164,7 +2164,7 @@ class EventData(BaseModel):
21642164
actor_run_id: Annotated[str, Field(alias='actorRunId', examples=['JgwXN9BdwxGcu9MMF'])]
21652165

21662166

2167-
class Calls(BaseModel):
2167+
class Call(BaseModel):
21682168
started_at: Annotated[AwareDatetime | None, Field(alias='startedAt', examples=['2019-12-12T07:34:14.202Z'])] = None
21692169
finished_at: Annotated[AwareDatetime | None, Field(alias='finishedAt', examples=['2019-12-12T07:34:14.202Z'])] = (
21702170
None
@@ -2181,8 +2181,8 @@ class WebhookDispatch(BaseModel):
21812181
created_at: Annotated[AwareDatetime, Field(alias='createdAt', examples=['2019-12-12T07:34:14.202Z'])]
21822182
status: Annotated[str, Field(examples=['SUCCEEDED'])]
21832183
event_type: Annotated[str, Field(alias='eventType', examples=['ACTOR.RUN.SUCCEEDED'])]
2184-
event_data: Annotated[EventData, Field(alias='eventData', title='eventData')]
2185-
calls: Annotated[Calls | None, Field(title='calls')] = None
2184+
event_data: Annotated[EventData | None, Field(alias='eventData', title='eventData')] = None
2185+
calls: Annotated[list[Call] | None, Field(title='calls')] = None
21862186

21872187

21882188
class TestWebhookResponse(BaseModel):
@@ -2467,30 +2467,22 @@ class PriceTiers(BaseModel):
24672467
class UsageItem(BaseModel):
24682468
quantity: Annotated[float, Field(examples=[2.784475])]
24692469
base_amount_usd: Annotated[float, Field(alias='baseAmountUsd', examples=[0.69611875])]
2470-
base_unit_price_usd: Annotated[float, Field(alias='baseUnitPriceUsd', examples=[0.25])]
2470+
base_unit_price_usd: Annotated[float | None, Field(alias='baseUnitPriceUsd', examples=[0.25])] = None
24712471
amount_after_volume_discount_usd: Annotated[
2472-
float, Field(alias='amountAfterVolumeDiscountUsd', examples=[0.69611875])
2473-
]
2474-
price_tiers: Annotated[list[PriceTiers], Field(alias='priceTiers')]
2475-
2476-
2477-
class MonthlyServiceUsage(BaseModel):
2478-
usage_item: Annotated[UsageItem, Field(alias='USAGE_ITEM')]
2479-
2480-
2481-
class ServiceUsage(BaseModel):
2482-
service_usage_item: Annotated[UsageItem, Field(alias='SERVICE_USAGE_ITEM')]
2472+
float | None, Field(alias='amountAfterVolumeDiscountUsd', examples=[0.69611875])
2473+
] = None
2474+
price_tiers: Annotated[list[PriceTiers] | None, Field(alias='priceTiers')] = None
24832475

24842476

24852477
class DailyServiceUsages(BaseModel):
24862478
date: Annotated[str, Field(examples=['2022-10-02T00:00:00.000Z'])]
2487-
service_usage: Annotated[ServiceUsage, Field(alias='serviceUsage')]
2479+
service_usage: Annotated[dict[str, UsageItem], Field(alias='serviceUsage')]
24882480
total_usage_credits_usd: Annotated[float, Field(alias='totalUsageCreditsUsd', examples=[0.0474385791970591])]
24892481

24902482

24912483
class MonthlyUsage(BaseModel):
24922484
usage_cycle: Annotated[UsageCycle, Field(alias='usageCycle')]
2493-
monthly_service_usage: Annotated[MonthlyServiceUsage, Field(alias='monthlyServiceUsage')]
2485+
monthly_service_usage: Annotated[dict[str, UsageItem], Field(alias='monthlyServiceUsage')]
24942486
daily_service_usages: Annotated[list[DailyServiceUsages], Field(alias='dailyServiceUsages')]
24952487
total_usage_credits_usd_before_volume_discount: Annotated[
24962488
float, Field(alias='totalUsageCreditsUsdBeforeVolumeDiscount', examples=[0.786143673840067])

src/apify_client/_resource_clients/base/resource_collection_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def _list(self, **kwargs: Any) -> ListPage:
1818
)
1919

2020
data = response_to_dict(response)
21-
return ListPage(data)
21+
return ListPage(data.get('data', data))
2222

2323
def _create(self, resource: dict) -> dict:
2424
response = self.http_client.call(
@@ -52,7 +52,7 @@ async def _list(self, **kwargs: Any) -> ListPage:
5252
)
5353

5454
data = response_to_dict(response)
55-
return ListPage(data)
55+
return ListPage(data.get('data', data))
5656

5757
async def _create(self, resource: dict) -> dict:
5858
response = await self.http_client.call(

src/apify_client/_resource_clients/build.py

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

33
from typing import Any
44

5-
from apify_client._models import Build
5+
from apify_client._models import Build, GetBuildResponse, PostAbortBuildResponse
66
from apify_client._resource_clients.base import ActorJobBaseClient, ActorJobBaseClientAsync
77
from apify_client._resource_clients.log import LogClient, LogClientAsync
88

@@ -23,7 +23,7 @@ def get(self) -> Build | None:
2323
The retrieved Actor build data.
2424
"""
2525
result = self._get()
26-
return Build.model_validate(result) if result is not None else None
26+
return GetBuildResponse.model_validate(result).data if result is not None else None
2727

2828
def delete(self) -> None:
2929
"""Delete the build.
@@ -41,7 +41,7 @@ def abort(self) -> Build:
4141
The data of the aborted Actor build.
4242
"""
4343
result = self._abort()
44-
return Build.model_validate(result)
44+
return PostAbortBuildResponse.model_validate(result).data
4545

4646
def get_open_api_definition(self) -> dict | None:
4747
"""Return OpenAPI definition of the Actor's build.
@@ -102,7 +102,7 @@ async def get(self) -> Build | None:
102102
The retrieved Actor build data.
103103
"""
104104
result = await self._get()
105-
return Build.model_validate(result) if result is not None else None
105+
return GetBuildResponse.model_validate(result).data if result is not None else None
106106

107107
async def abort(self) -> Build:
108108
"""Abort the Actor build which is starting or currently running and return its details.
@@ -113,7 +113,7 @@ async def abort(self) -> Build:
113113
The data of the aborted Actor build.
114114
"""
115115
result = await self._abort()
116-
return Build.model_validate(result)
116+
return PostAbortBuildResponse.model_validate(result).data
117117

118118
async def delete(self) -> None:
119119
"""Delete the build.

src/apify_client/_resource_clients/dataset_collection.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, Any
3+
from typing import Any
44

5-
from apify_client._models import Dataset, DatasetListItem, DatasetResponse
5+
from apify_client._models import Dataset, DatasetResponse, GetListOfDatasetsResponse, ListOfDatasets
66
from apify_client._resource_clients.base import ResourceCollectionClient, ResourceCollectionClientAsync
7-
from apify_client._utils import filter_out_none_values_recursively
8-
9-
if TYPE_CHECKING:
10-
from apify_client._types import ListPage
7+
from apify_client._utils import filter_out_none_values_recursively, response_to_dict
118

129

1310
class DatasetCollectionClient(ResourceCollectionClient):
@@ -24,7 +21,7 @@ def list(
2421
limit: int | None = None,
2522
offset: int | None = None,
2623
desc: bool | None = None,
27-
) -> ListPage[DatasetListItem]:
24+
) -> ListOfDatasets:
2825
"""List the available datasets.
2926
3027
https://docs.apify.com/api/v2#/reference/datasets/dataset-collection/get-list-of-datasets
@@ -38,7 +35,13 @@ def list(
3835
Returns:
3936
The list of available datasets matching the specified filters.
4037
"""
41-
return self._list(unnamed=unnamed, limit=limit, offset=offset, desc=desc)
38+
response = self.http_client.call(
39+
url=self._url(),
40+
method='GET',
41+
params=self._params(unnamed=unnamed, limit=limit, offset=offset, desc=desc),
42+
)
43+
data = response_to_dict(response)
44+
return GetListOfDatasetsResponse.model_validate(data).data
4245

4346
def get_or_create(self, *, name: str | None = None, schema: dict | None = None) -> Dataset:
4447
"""Retrieve a named dataset, or create a new one when it doesn't exist.
@@ -70,7 +73,7 @@ async def list(
7073
limit: int | None = None,
7174
offset: int | None = None,
7275
desc: bool | None = None,
73-
) -> ListPage[DatasetListItem]:
76+
) -> ListOfDatasets:
7477
"""List the available datasets.
7578
7679
https://docs.apify.com/api/v2#/reference/datasets/dataset-collection/get-list-of-datasets
@@ -84,7 +87,13 @@ async def list(
8487
Returns:
8588
The list of available datasets matching the specified filters.
8689
"""
87-
return await self._list(unnamed=unnamed, limit=limit, offset=offset, desc=desc)
90+
response = await self.http_client.call(
91+
url=self._url(),
92+
method='GET',
93+
params=self._params(unnamed=unnamed, limit=limit, offset=offset, desc=desc),
94+
)
95+
data = response_to_dict(response)
96+
return GetListOfDatasetsResponse.model_validate(data).data
8897

8998
async def get_or_create(
9099
self,

src/apify_client/_resource_clients/key_value_store_collection.py

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, Any
4-
5-
from apify_client._models import CreateKeyValueStoreResponse, KeyValueStore
3+
from typing import Any
4+
5+
from apify_client._models import (
6+
CreateKeyValueStoreResponse,
7+
GetListOfKeyValueStoresResponse,
8+
KeyValueStore,
9+
ListOfKeyValueStores,
10+
)
611
from apify_client._resource_clients.base import ResourceCollectionClient, ResourceCollectionClientAsync
7-
from apify_client._utils import filter_out_none_values_recursively
8-
9-
if TYPE_CHECKING:
10-
from apify_client._types import ListPage
12+
from apify_client._utils import filter_out_none_values_recursively, response_to_dict
1113

1214

1315
class KeyValueStoreCollectionClient(ResourceCollectionClient):
@@ -24,7 +26,7 @@ def list(
2426
limit: int | None = None,
2527
offset: int | None = None,
2628
desc: bool | None = None,
27-
) -> ListPage[KeyValueStore]:
29+
) -> ListOfKeyValueStores:
2830
"""List the available key-value stores.
2931
3032
https://docs.apify.com/api/v2#/reference/key-value-stores/store-collection/get-list-of-key-value-stores
@@ -38,7 +40,13 @@ def list(
3840
Returns:
3941
The list of available key-value stores matching the specified filters.
4042
"""
41-
return self._list(unnamed=unnamed, limit=limit, offset=offset, desc=desc)
43+
response = self.http_client.call(
44+
url=self._url(),
45+
method='GET',
46+
params=self._params(unnamed=unnamed, limit=limit, offset=offset, desc=desc),
47+
)
48+
data = response_to_dict(response)
49+
return GetListOfKeyValueStoresResponse.model_validate(data).data
4250

4351
def get_or_create(
4452
self,
@@ -75,7 +83,7 @@ async def list(
7583
limit: int | None = None,
7684
offset: int | None = None,
7785
desc: bool | None = None,
78-
) -> ListPage[KeyValueStore]:
86+
) -> ListOfKeyValueStores:
7987
"""List the available key-value stores.
8088
8189
https://docs.apify.com/api/v2#/reference/key-value-stores/store-collection/get-list-of-key-value-stores
@@ -89,7 +97,13 @@ async def list(
8997
Returns:
9098
The list of available key-value stores matching the specified filters.
9199
"""
92-
return await self._list(unnamed=unnamed, limit=limit, offset=offset, desc=desc)
100+
response = await self.http_client.call(
101+
url=self._url(),
102+
method='GET',
103+
params=self._params(unnamed=unnamed, limit=limit, offset=offset, desc=desc),
104+
)
105+
data = response_to_dict(response)
106+
return GetListOfKeyValueStoresResponse.model_validate(data).data
93107

94108
async def get_or_create(
95109
self,

src/apify_client/_resource_clients/request_queue_collection.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
from __future__ import annotations
22

3-
from typing import TYPE_CHECKING, Any
4-
5-
from apify_client._models import CreateRequestQueueResponse, RequestQueue, RequestQueueShort
3+
from typing import Any
4+
5+
from apify_client._models import (
6+
CreateRequestQueueResponse,
7+
GetListOfRequestQueuesResponse,
8+
ListOfRequestQueues,
9+
RequestQueue,
10+
)
611
from apify_client._resource_clients.base import ResourceCollectionClient, ResourceCollectionClientAsync
7-
8-
if TYPE_CHECKING:
9-
from apify_client._types import ListPage
12+
from apify_client._utils import response_to_dict
1013

1114

1215
class RequestQueueCollectionClient(ResourceCollectionClient):
@@ -23,7 +26,7 @@ def list(
2326
limit: int | None = None,
2427
offset: int | None = None,
2528
desc: bool | None = None,
26-
) -> ListPage[RequestQueueShort]:
29+
) -> ListOfRequestQueues:
2730
"""List the available request queues.
2831
2932
https://docs.apify.com/api/v2#/reference/request-queues/queue-collection/get-list-of-request-queues
@@ -37,7 +40,13 @@ def list(
3740
Returns:
3841
The list of available request queues matching the specified filters.
3942
"""
40-
return self._list(unnamed=unnamed, limit=limit, offset=offset, desc=desc)
43+
response = self.http_client.call(
44+
url=self._url(),
45+
method='GET',
46+
params=self._params(unnamed=unnamed, limit=limit, offset=offset, desc=desc),
47+
)
48+
data = response_to_dict(response)
49+
return GetListOfRequestQueuesResponse.model_validate(data).data
4150

4251
def get_or_create(self, *, name: str | None = None) -> RequestQueue:
4352
"""Retrieve a named request queue, or create a new one when it doesn't exist.
@@ -68,7 +77,7 @@ async def list(
6877
limit: int | None = None,
6978
offset: int | None = None,
7079
desc: bool | None = None,
71-
) -> ListPage[RequestQueueShort]:
80+
) -> ListOfRequestQueues:
7281
"""List the available request queues.
7382
7483
https://docs.apify.com/api/v2#/reference/request-queues/queue-collection/get-list-of-request-queues
@@ -82,7 +91,13 @@ async def list(
8291
Returns:
8392
The list of available request queues matching the specified filters.
8493
"""
85-
return await self._list(unnamed=unnamed, limit=limit, offset=offset, desc=desc)
94+
response = await self.http_client.call(
95+
url=self._url(),
96+
method='GET',
97+
params=self._params(unnamed=unnamed, limit=limit, offset=offset, desc=desc),
98+
)
99+
data = response_to_dict(response)
100+
return GetListOfRequestQueuesResponse.model_validate(data).data
86101

87102
async def get_or_create(self, *, name: str | None = None) -> RequestQueue:
88103
"""Retrieve a named request queue, or create a new one when it doesn't exist.

src/apify_client/_resource_clients/run.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def abort(self, *, gracefully: bool | None = None) -> Run:
107107
The data of the aborted Actor run.
108108
"""
109109
response = self._abort(gracefully=gracefully)
110-
return Run.model_validate(response)
110+
return RunResponse.model_validate(response).data
111111

112112
def wait_for_finish(self, *, wait_secs: int | None = None) -> Run | None:
113113
"""Wait synchronously until the run finishes or the server times out.

0 commit comments

Comments
 (0)