Skip to content

Commit 33c2edb

Browse files
vdusekclaude
andcommitted
Address feedback (p4)
Fix generated models (nullable finished_at, Literal[1] for actorSpecification, correct DATA_TRANSFER_EXTERNAL_GBYTES alias) and use proper response wrapper models in user client. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 3e78777 commit 33c2edb

2 files changed

Lines changed: 20 additions & 24 deletions

File tree

src/apify_client/_models.py

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# generated by datamodel-codegen:
2-
# filename: https://docs.apify.com/api/openapi.json
3-
# timestamp: 2026-02-23T08:49:00+00:00
2+
# filename: openapi.json
3+
# timestamp: 2026-02-23T14:42:02+00:00
44

55
from __future__ import annotations
66

7-
from enum import Enum, IntEnum
7+
from enum import Enum
88
from typing import Annotated, Any, Literal
99

1010
from pydantic import AnyUrl, AwareDatetime, BaseModel, ConfigDict, EmailStr, Field
@@ -657,7 +657,9 @@ class BuildShort(BaseModel):
657657
act_id: Annotated[str | None, Field(alias='actId', examples=['janedoe~my-actor'])] = None
658658
status: ActorJobStatus
659659
started_at: Annotated[AwareDatetime, Field(alias='startedAt', examples=['2019-11-30T07:34:24.202Z'])]
660-
finished_at: Annotated[AwareDatetime, Field(alias='finishedAt', examples=['2019-12-12T09:30:12.202Z'])]
660+
finished_at: Annotated[AwareDatetime | None, Field(alias='finishedAt', examples=['2019-12-12T09:30:12.202Z'])] = (
661+
None
662+
)
661663
usage_total_usd: Annotated[float, Field(alias='usageTotalUsd', examples=[0.02])]
662664
meta: BuildsMeta | None = None
663665

@@ -702,12 +704,6 @@ class BuildUsage(BaseModel):
702704
actor_compute_units: Annotated[float | None, Field(alias='ACTOR_COMPUTE_UNITS', examples=[0.08])] = None
703705

704706

705-
class ActorSpecification(IntEnum):
706-
"""The Actor specification version that this Actor follows. This property must be set to 1."""
707-
708-
INTEGER_1 = 1
709-
710-
711707
class Storages(BaseModel):
712708
model_config = ConfigDict(
713709
extra='allow',
@@ -724,7 +720,7 @@ class ActorDefinition(BaseModel):
724720
model_config = ConfigDict(
725721
extra='allow',
726722
)
727-
actor_specification: Annotated[ActorSpecification | None, Field(alias='actorSpecification')] = None
723+
actor_specification: Annotated[Literal[1], Field(alias='actorSpecification')] = 1
728724
"""
729725
The Actor specification version that this Actor follows. This property must be set to 1.
730726
"""
@@ -850,7 +846,9 @@ class RunShort(BaseModel):
850846
actor_task_id: Annotated[str | None, Field(alias='actorTaskId', examples=['KJHSKHausidyaJKHs'])] = None
851847
status: ActorJobStatus
852848
started_at: Annotated[AwareDatetime, Field(alias='startedAt', examples=['2019-11-30T07:34:24.202Z'])]
853-
finished_at: Annotated[AwareDatetime, Field(alias='finishedAt', examples=['2019-12-12T09:30:12.202Z'])]
849+
finished_at: Annotated[AwareDatetime | None, Field(alias='finishedAt', examples=['2019-12-12T09:30:12.202Z'])] = (
850+
None
851+
)
854852
build_id: Annotated[str, Field(alias='buildId', examples=['HG7ML7M8z78YcAPEB'])]
855853
build_number: Annotated[str | None, Field(alias='buildNumber', examples=['0.0.2'])] = None
856854
meta: RunMeta
@@ -933,8 +931,8 @@ class RunUsage(BaseModel):
933931
data_transfer_internal_gbytes: Annotated[
934932
float | None, Field(alias='DATA_TRANSFER_INTERNAL_GBYTES', examples=[1])
935933
] = None
936-
data_transfer_external_gbytes_: Annotated[
937-
float | None, Field(alias='DATA_TRANSFER_EXTERNAL_GBYTES?', examples=[3])
934+
data_transfer_external_gbytes: Annotated[
935+
float | None, Field(alias='DATA_TRANSFER_EXTERNAL_GBYTES', examples=[3])
938936
] = None
939937
proxy_residential_transfer_gbytes: Annotated[
940938
float | None, Field(alias='PROXY_RESIDENTIAL_TRANSFER_GBYTES', examples=[34])
@@ -959,8 +957,8 @@ class RunUsageUsd(BaseModel):
959957
data_transfer_internal_gbytes: Annotated[
960958
float | None, Field(alias='DATA_TRANSFER_INTERNAL_GBYTES', examples=[0.001])
961959
] = None
962-
data_transfer_external_gbytes_: Annotated[
963-
float | None, Field(alias='DATA_TRANSFER_EXTERNAL_GBYTES?', examples=[0.003])
960+
data_transfer_external_gbytes: Annotated[
961+
float | None, Field(alias='DATA_TRANSFER_EXTERNAL_GBYTES', examples=[0.003])
964962
] = None
965963
proxy_residential_transfer_gbytes: Annotated[
966964
float | None, Field(alias='PROXY_RESIDENTIAL_TRANSFER_GBYTES', examples=[0.034])

src/apify_client/_resource_clients/user.py

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

77
from apify_client._models import (
88
AccountLimits,
9+
LimitsResponse,
910
MonthlyUsage,
11+
MonthlyUsageResponse,
1012
PrivateUserDataResponse,
1113
PublicUserDataResponse,
1214
UserPrivateInfo,
@@ -64,8 +66,7 @@ def monthly_usage(self) -> MonthlyUsage | None:
6466
params=self._build_params(),
6567
)
6668
result = response_to_dict(response)
67-
# API returns {data: {...}} structure
68-
return MonthlyUsage.model_validate(result.get('data', {}))
69+
return MonthlyUsageResponse.model_validate(result).data
6970

7071
except ApifyApiError as exc:
7172
catch_not_found_or_throw(exc)
@@ -90,8 +91,7 @@ def limits(self) -> AccountLimits | None:
9091
params=self._build_params(),
9192
)
9293
result = response_to_dict(response)
93-
# API returns {data: {...}} structure
94-
return AccountLimits.model_validate(result.get('data', {}))
94+
return LimitsResponse.model_validate(result).data
9595

9696
except ApifyApiError as exc:
9797
catch_not_found_or_throw(exc)
@@ -165,8 +165,7 @@ async def monthly_usage(self) -> MonthlyUsage | None:
165165
params=self._build_params(),
166166
)
167167
result = response_to_dict(response)
168-
# API returns {data: {...}} structure
169-
return MonthlyUsage.model_validate(result.get('data', {}))
168+
return MonthlyUsageResponse.model_validate(result).data
170169

171170
except ApifyApiError as exc:
172171
catch_not_found_or_throw(exc)
@@ -191,8 +190,7 @@ async def limits(self) -> AccountLimits | None:
191190
params=self._build_params(),
192191
)
193192
result = response_to_dict(response)
194-
# API returns {data: {...}} structure
195-
return AccountLimits.model_validate(result.get('data', {}))
193+
return LimitsResponse.model_validate(result).data
196194

197195
except ApifyApiError as exc:
198196
catch_not_found_or_throw(exc)

0 commit comments

Comments
 (0)