Skip to content

Commit b4f5485

Browse files
authored
fix: Update push_data annotation with JsonSerializable instead of Any (#899)
Follow-up: apify/crawlee-python#1889
1 parent 1e5b94c commit b4f5485

5 files changed

Lines changed: 17 additions & 14 deletions

File tree

src/apify/_actor.py

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

4242
if TYPE_CHECKING:
4343
import logging
44-
from collections.abc import Callable
44+
from collections.abc import Callable, MutableMapping
4545
from decimal import Decimal
4646
from types import TracebackType
4747

@@ -1401,7 +1401,7 @@ async def use_state(
14011401
default_value: dict[str, JsonSerializable] | None = None,
14021402
key: str | None = None,
14031403
kvs_name: str | None = None,
1404-
) -> dict[str, JsonSerializable]:
1404+
) -> MutableMapping[str, JsonSerializable]:
14051405
"""Easily create and manage state values. All state values are automatically persisted.
14061406
14071407
Values can be modified by simply using the assignment operator.

src/apify/_charging.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ async def charge(self, event_name: str, count: int = 1) -> ChargeResult:
318318
{
319319
'event_name': event_name,
320320
'event_title': pricing_info.title,
321-
'event_price_usd': round(pricing_info.price, 3),
321+
'event_price_usd': float(round(pricing_info.price, 3)),
322322
'charged_count': charged_count,
323323
'timestamp': datetime.now(timezone.utc).isoformat(),
324324
}

src/apify/storage_clients/_apify/_dataset_client.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import asyncio
44
import warnings
55
from logging import getLogger
6-
from typing import TYPE_CHECKING, Any
6+
from typing import TYPE_CHECKING
77

88
from typing_extensions import override
99

@@ -16,7 +16,7 @@
1616
from apify.storage_clients._ppe_dataset_mixin import DatasetClientPpeMixin
1717

1818
if TYPE_CHECKING:
19-
from collections.abc import AsyncIterator
19+
from collections.abc import AsyncIterator, Mapping, Sequence
2020

2121
from apify_client.clients import DatasetClientAsync
2222
from crawlee._types import JsonSerializable
@@ -137,13 +137,13 @@ async def drop(self) -> None:
137137
await self._api_client.delete()
138138

139139
@override
140-
async def push_data(self, data: list[Any] | dict[str, Any]) -> None:
141-
async def payloads_generator(items: list[Any]) -> AsyncIterator[str]:
140+
async def push_data(self, data: Sequence[Mapping[str, JsonSerializable]] | Mapping[str, JsonSerializable]) -> None:
141+
async def payloads_generator(items: Sequence[Mapping[str, JsonSerializable]]) -> AsyncIterator[str]:
142142
for index, item in enumerate(items):
143143
yield await self._check_and_serialize(item, index)
144144

145145
async with self._charge_lock(), self._lock:
146-
items = data if isinstance(data, list) else [data]
146+
items = data if self._is_sequence_of_items(data) else [data]
147147
limit = self._compute_limit_for_push(len(items))
148148
items = items[:limit]
149149

@@ -211,7 +211,7 @@ async def iterate_items(
211211
yield item
212212

213213
@classmethod
214-
async def _check_and_serialize(cls, item: JsonSerializable, index: int | None = None) -> str:
214+
async def _check_and_serialize(cls, item: Mapping[str, JsonSerializable], index: int | None = None) -> str:
215215
"""Serialize a given item to JSON, checks its serializability and size against a limit.
216216
217217
Args:

src/apify/storage_clients/_file_system/_dataset_client.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
from apify.storage_clients._ppe_dataset_mixin import DatasetClientPpeMixin
1010

1111
if TYPE_CHECKING:
12+
from collections.abc import Mapping, Sequence
13+
14+
from crawlee._types import JsonSerializable
1215
from crawlee.configuration import Configuration
1316

1417

@@ -47,9 +50,9 @@ async def open(
4750
return dataset_client
4851

4952
@override
50-
async def push_data(self, data: list[dict[str, Any]] | dict[str, Any]) -> None:
53+
async def push_data(self, data: Sequence[Mapping[str, JsonSerializable]] | Mapping[str, JsonSerializable]) -> None:
5154
async with self._charge_lock():
52-
items = data if isinstance(data, list) else [data]
55+
items = data if self._is_sequence_of_items(data) else [data]
5356
limit = self._compute_limit_for_push(len(items))
5457

5558
await super().push_data(items[:limit])

uv.lock

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)