Skip to content

Commit 02f9244

Browse files
committed
Change to TypedDict
1 parent b7a390b commit 02f9244

File tree

5 files changed

+23
-25
lines changed

5 files changed

+23
-25
lines changed

src/apify/_configuration.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
from pathlib import Path
88
from typing import Annotated, Any
99

10-
from pydantic import AliasChoices, BaseModel, BeforeValidator, Field, model_validator
11-
from typing_extensions import Self, deprecated
10+
from pydantic import AliasChoices, BeforeValidator, Field, model_validator
11+
from typing_extensions import Self, TypedDict, deprecated
1212

1313
from crawlee import service_locator
1414
from crawlee._utils.models import timedelta_ms
@@ -34,26 +34,26 @@ def _transform_to_list(value: Any) -> list[str] | None:
3434
return value if isinstance(value, list) else str(value).split(',')
3535

3636

37-
class ActorStorages(BaseModel):
38-
"""Storage IDs for different storage types used by an Actor."""
39-
37+
class ActorStorages(TypedDict):
4038
key_value_stores: dict[str, str]
4139
datasets: dict[str, str]
4240
request_queues: dict[str, str]
4341

4442

45-
def _load_storage_keys(data: None | str | dict | ActorStorages) -> ActorStorages | None:
43+
def _load_storage_keys(
44+
data: None | str | ActorStorages,
45+
) -> ActorStorages | None:
4646
"""Load storage keys from environment."""
4747
if data is None:
4848
return None
49-
if isinstance(data, ActorStorages):
50-
return data
51-
storage_mapping = data if isinstance(data, dict) else json.loads(data)
52-
return ActorStorages(
53-
key_value_stores=storage_mapping.get('keyValueStores', {}),
54-
datasets=storage_mapping.get('datasets', {}),
55-
request_queues=storage_mapping.get('requestQueues', {}),
56-
)
49+
if isinstance(data, str):
50+
storage_mapping = json.loads(data)
51+
return {
52+
'key_value_stores': storage_mapping.get('keyValueStores', {}),
53+
'datasets': storage_mapping.get('datasets', {}),
54+
'request_queues': storage_mapping.get('requestQueues', {}),
55+
}
56+
return data
5757

5858

5959
@docs_group('Configuration')

src/apify/storage_clients/_apify/_alias_resolving.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,9 @@ async def resolve_id(self) -> str | None:
197197
# This mapping is maintained by the Apify platform and does not have to be maintained in the default KVS.
198198
if self._configuration.actor_storages and self._alias != 'default':
199199
storage_maps = {
200-
'Dataset': self._configuration.actor_storages.datasets,
201-
'KeyValueStore': self._configuration.actor_storages.key_value_stores,
202-
'RequestQueue': self._configuration.actor_storages.request_queues,
200+
'Dataset': self._configuration.actor_storages['datasets'],
201+
'KeyValueStore': self._configuration.actor_storages['key_value_stores'],
202+
'RequestQueue': self._configuration.actor_storages['request_queues'],
203203
}
204204
if storage_id := storage_maps.get(self._storage_type, {}).get(self._alias):
205205
return storage_id

tests/e2e/test_schema_storages/actor_source/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
async def main() -> None:
55
async with Actor:
66
assert Actor.configuration.actor_storages
7-
assert (await Actor.open_dataset(alias='custom')).id == Actor.configuration.actor_storages.datasets['custom']
7+
assert (await Actor.open_dataset(alias='custom')).id == Actor.configuration.actor_storages['datasets']['custom']

tests/unit/actor/test_configuration.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,6 @@ def test_actor_storage_json_env_var(monkeypatch: pytest.MonkeyPatch) -> None:
318318
monkeypatch.setenv('ACTOR_STORAGES_JSON', actor_storages_json)
319319
config = ApifyConfiguration()
320320
assert config.actor_storages
321-
assert config.actor_storages.datasets == datasets
322-
assert config.actor_storages.request_queues == request_queues
323-
assert config.actor_storages.key_value_stores == key_value_stores
321+
assert config.actor_storages['datasets'] == datasets
322+
assert config.actor_storages['request_queues'] == request_queues
323+
assert config.actor_storages['key_value_stores'] == key_value_stores

tests/unit/storage_clients/test_alias_resolver.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from __future__ import annotations
22

3-
from apify._configuration import ActorStorages, Configuration
3+
from apify._configuration import Configuration
44
from apify.storage_clients._apify._alias_resolving import AliasResolver
55

66

@@ -88,9 +88,7 @@ async def test_configuration_storages_alias_resolving() -> None:
8888

8989
# Set up the configuration with the storage mapping
9090
configuration = Configuration(
91-
actor_storages=ActorStorages(
92-
datasets=datasets, request_queues=request_queues, key_value_stores=key_value_stores
93-
),
91+
actor_storages={'datasets': datasets, 'request_queues': request_queues, 'key_value_stores': key_value_stores}
9492
)
9593

9694
# Check that id of each non-default storage saved in the mapping is resolved

0 commit comments

Comments
 (0)