3
3
import asyncio
4
4
import base64
5
5
import json
6
- import os
7
6
from datetime import datetime , timezone
7
+ from pathlib import Path
8
8
from typing import TYPE_CHECKING
9
9
10
10
import pytest
16
16
from crawlee .storage_clients .models import KeyValueStoreMetadata , KeyValueStoreRecordMetadata
17
17
18
18
if TYPE_CHECKING :
19
- from pathlib import Path
20
-
21
19
from crawlee .storage_clients import MemoryStorageClient
22
20
from crawlee .storage_clients ._memory import KeyValueStoreClient
23
21
@@ -79,19 +77,17 @@ async def test_update(key_value_store_client: KeyValueStoreClient) -> None:
79
77
await key_value_store_client .set_record ('test' , {'abc' : 123 })
80
78
old_kvs_info = await key_value_store_client .get ()
81
79
assert old_kvs_info is not None
82
- old_kvs_directory = os . path . join (
80
+ old_kvs_directory = Path (
83
81
key_value_store_client ._memory_storage_client .key_value_stores_directory , old_kvs_info .name or ''
84
82
)
85
- new_kvs_directory = os .path .join (
86
- key_value_store_client ._memory_storage_client .key_value_stores_directory , new_kvs_name
87
- )
88
- assert os .path .exists (os .path .join (old_kvs_directory , 'test.json' )) is True
89
- assert os .path .exists (os .path .join (new_kvs_directory , 'test.json' )) is False
83
+ new_kvs_directory = Path (key_value_store_client ._memory_storage_client .key_value_stores_directory , new_kvs_name )
84
+ assert (old_kvs_directory / 'test.json' ).exists () is True
85
+ assert (new_kvs_directory / 'test.json' ).exists () is False
90
86
91
87
await asyncio .sleep (0.1 )
92
88
updated_kvs_info = await key_value_store_client .update (name = new_kvs_name )
93
- assert os . path . exists ( os . path . join ( old_kvs_directory , 'test.json' )) is False
94
- assert os . path . exists ( os . path . join ( new_kvs_directory , 'test.json' )) is True
89
+ assert ( old_kvs_directory / 'test.json' ). exists ( ) is False
90
+ assert ( new_kvs_directory / 'test.json' ). exists ( ) is True
95
91
# Only modified_at and accessed_at should be different
96
92
assert old_kvs_info .created_at == updated_kvs_info .created_at
97
93
assert old_kvs_info .modified_at != updated_kvs_info .modified_at
@@ -106,12 +102,10 @@ async def test_delete(key_value_store_client: KeyValueStoreClient) -> None:
106
102
await key_value_store_client .set_record ('test' , {'abc' : 123 })
107
103
kvs_info = await key_value_store_client .get ()
108
104
assert kvs_info is not None
109
- kvs_directory = os .path .join (
110
- key_value_store_client ._memory_storage_client .key_value_stores_directory , kvs_info .name or ''
111
- )
112
- assert os .path .exists (os .path .join (kvs_directory , 'test.json' )) is True
105
+ kvs_directory = Path (key_value_store_client ._memory_storage_client .key_value_stores_directory , kvs_info .name or '' )
106
+ assert (kvs_directory / 'test.json' ).exists () is True
113
107
await key_value_store_client .delete ()
114
- assert os . path . exists ( os . path . join ( kvs_directory , 'test.json' )) is False
108
+ assert ( kvs_directory / 'test.json' ). exists ( ) is False
115
109
# Does not crash when called again
116
110
await key_value_store_client .delete ()
117
111
@@ -188,7 +182,7 @@ async def test_get_and_set_record(tmp_path: Path, key_value_store_client: KeyVal
188
182
assert bytes_record_info .value .decode ('utf-8' ) == bytes_value .decode ('utf-8' )
189
183
190
184
# Test using file descriptor
191
- with open (os . path . join ( tmp_path , 'test.json' ) , 'w+' , encoding = 'utf-8' ) as f : # noqa: ASYNC230
185
+ with open (tmp_path / 'test.json' , 'w+' , encoding = 'utf-8' ) as f : # noqa: ASYNC230
192
186
f .write ('Test' )
193
187
with pytest .raises (NotImplementedError , match = 'File-like values are not supported in local memory storage' ):
194
188
await key_value_store_client .set_record ('file' , f )
@@ -283,12 +277,12 @@ async def test_writes_correct_metadata(
283
277
)
284
278
285
279
# Check that everything was written correctly, both the data and metadata
286
- storage_path = os . path . join (memory_storage_client .key_value_stores_directory , key_value_store_name )
287
- item_path = os . path . join (storage_path , expected_output ['filename' ])
288
- item_metadata_path = os . path . join ( storage_path , f'{ expected_output ["filename" ]} .__metadata__.json' )
280
+ storage_path = Path (memory_storage_client .key_value_stores_directory , key_value_store_name )
281
+ item_path = Path (storage_path , expected_output ['filename' ])
282
+ item_metadata_path = storage_path / f'{ expected_output ["filename" ]} .__metadata__.json'
289
283
290
- assert os . path . exists (item_path )
291
- assert os . path . exists (item_metadata_path )
284
+ assert item_path . exists ()
285
+ assert item_metadata_path . exists ()
292
286
293
287
# Test the actual value of the item
294
288
with open (item_path , 'rb' ) as item_file : # noqa: ASYNC230
@@ -396,8 +390,8 @@ async def test_reads_correct_metadata(
396
390
key_value_store_name = crypto_random_object_id ()
397
391
398
392
# Ensure the directory for the store exists
399
- storage_path = os . path . join (memory_storage_client .key_value_stores_directory , key_value_store_name )
400
- os . makedirs ( storage_path , exist_ok = True )
393
+ storage_path = Path (memory_storage_client .key_value_stores_directory , key_value_store_name )
394
+ storage_path . mkdir ( exist_ok = True , parents = True )
401
395
402
396
store_metadata = KeyValueStoreMetadata (
403
397
id = crypto_random_object_id (),
@@ -409,12 +403,12 @@ async def test_reads_correct_metadata(
409
403
)
410
404
411
405
# Write the store metadata to disk
412
- storage_metadata_path = os . path . join ( storage_path , METADATA_FILENAME )
406
+ storage_metadata_path = storage_path / METADATA_FILENAME
413
407
with open (storage_metadata_path , mode = 'wb' ) as f : # noqa: ASYNC230
414
408
f .write (store_metadata .model_dump_json ().encode ('utf-8' ))
415
409
416
410
# Write the test input item to the disk
417
- item_path = os . path . join ( storage_path , input_data ['filename' ])
411
+ item_path = storage_path / input_data ['filename' ]
418
412
with open (item_path , 'wb' ) as item_file : # noqa: ASYNC230
419
413
if isinstance (input_data ['value' ], bytes ):
420
414
item_file .write (input_data ['value' ])
@@ -426,7 +420,7 @@ async def test_reads_correct_metadata(
426
420
427
421
# Optionally write the metadata to disk if there is some
428
422
if input_data ['metadata' ] is not None :
429
- storage_metadata_path = os . path . join ( storage_path , input_data [' filename' ] + ' .__metadata__.json')
423
+ storage_metadata_path = storage_path / f' { input_data [" filename" ] } .__metadata__.json'
430
424
with open (storage_metadata_path , 'w' , encoding = 'utf-8' ) as metadata_file : # noqa: ASYNC230
431
425
s = await json_dumps (
432
426
{
0 commit comments