Skip to content

Commit ea8e085

Browse files
committed
Add storage tests
1 parent d6b85ac commit ea8e085

File tree

3 files changed

+48
-13
lines changed

3 files changed

+48
-13
lines changed

src/apify/storage_clients/_apify/_storage_client.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from ._dataset_client import ApifyDatasetClient
1010
from ._key_value_store_client import ApifyKeyValueStoreClient
1111
from ._request_queue_client import ApifyRequestQueueClient
12+
from apify._configuration import service_locator
1213
from apify._utils import docs_group
1314

1415
if TYPE_CHECKING:
@@ -19,6 +20,15 @@
1920
class ApifyStorageClient(StorageClient):
2021
"""Apify storage client."""
2122

23+
def __init__(self, configuration: Configuration | None = None) -> None:
24+
"""Initialize the file system storage client.
25+
26+
Args:
27+
configuration: Optional configuration instance to use with the storage client.
28+
If not provided, the global configuration will be used.
29+
"""
30+
self._configuration = configuration or service_locator.get_configuration()
31+
2232
@override
2333
async def create_dataset_client(
2434
self,
@@ -30,13 +40,12 @@ async def create_dataset_client(
3040
# Import here to avoid circular imports.
3141
from apify import Configuration as ApifyConfiguration # noqa: PLC0415
3242

33-
configuration = configuration or ApifyConfiguration.get_global_configuration()
34-
if isinstance(configuration, ApifyConfiguration):
35-
return await ApifyDatasetClient.open(id=id, name=name, configuration=configuration)
43+
if isinstance(self._configuration, ApifyConfiguration):
44+
return await ApifyDatasetClient.open(id=id, name=name, configuration=self._configuration)
3645

3746
raise TypeError(
3847
f'Expected "configuration" to be an instance of "apify.Configuration", '
39-
f'but got {type(configuration).__name__} instead.'
48+
f'but got {type(self._configuration).__name__} instead.'
4049
)
4150

4251
@override
@@ -50,13 +59,12 @@ async def create_kvs_client(
5059
# Import here to avoid circular imports.
5160
from apify import Configuration as ApifyConfiguration # noqa: PLC0415
5261

53-
configuration = configuration or ApifyConfiguration.get_global_configuration()
54-
if isinstance(configuration, ApifyConfiguration):
55-
return await ApifyKeyValueStoreClient.open(id=id, name=name, configuration=configuration)
62+
if isinstance(self._configuration, ApifyConfiguration):
63+
return await ApifyKeyValueStoreClient.open(id=id, name=name, configuration=self._configuration)
5664

5765
raise TypeError(
5866
f'Expected "configuration" to be an instance of "apify.Configuration", '
59-
f'but got {type(configuration).__name__} instead.'
67+
f'but got {type(self._configuration).__name__} instead.'
6068
)
6169

6270
@override
@@ -70,11 +78,15 @@ async def create_rq_client(
7078
# Import here to avoid circular imports.
7179
from apify import Configuration as ApifyConfiguration # noqa: PLC0415
7280

73-
configuration = configuration or ApifyConfiguration.get_global_configuration()
74-
if isinstance(configuration, ApifyConfiguration):
75-
return await ApifyRequestQueueClient.open(id=id, name=name, configuration=configuration)
81+
if isinstance(self._configuration, ApifyConfiguration):
82+
return await ApifyRequestQueueClient.open(id=id, name=name, configuration=self._configuration)
7683

7784
raise TypeError(
7885
f'Expected "configuration" to be an instance of "apify.Configuration", '
79-
f'but got {type(configuration).__name__} instead.'
86+
f'but got {type(self._configuration).__name__} instead.'
8087
)
88+
89+
@override
90+
def create_client(self, configuration: Configuration) -> ApifyStorageClient:
91+
"""Create a storage client from an existing storage client potentially just replacing the configuration."""
92+
return ApifyStorageClient(configuration)

tests/unit/actor/test_configuration.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,3 +136,26 @@ async def test_crawler_global_configuration() -> None:
136136

137137
assert service_locator.get_configuration() is config_global
138138
assert crawler_1._service_locator.get_configuration() is config_global
139+
140+
141+
async def test_storage_retrieved_is_different_with_different_config() -> None:
142+
"""Test that retrieving storage depends on used configuration."""
143+
config_actor = ApifyConfiguration()
144+
apify_crawler_1 = ApifyConfiguration()
145+
146+
async with Actor(configuration=config_actor):
147+
actor_kvs = await Actor.open_key_value_store()
148+
crawler_1 = BasicCrawler(configuration=apify_crawler_1)
149+
crawler_kvs = await crawler_1.get_key_value_store()
150+
151+
assert actor_kvs is not crawler_kvs
152+
153+
154+
async def test_storage_retrieved_is_same_with_same_config() -> None:
155+
"""Test that retrieving storage is same if same configuration is used."""
156+
async with Actor():
157+
actor_kvs = await Actor.open_key_value_store()
158+
crawler_1 = BasicCrawler()
159+
crawler_kvs = await crawler_1.get_key_value_store()
160+
161+
assert actor_kvs is crawler_kvs

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)