Skip to content

Commit 1f3c481

Browse files
committed
KVS metadata extended model
1 parent ad7c0d8 commit 1f3c481

File tree

3 files changed

+20
-10
lines changed

3 files changed

+20
-10
lines changed

src/apify/storage_clients/_apify/_key_value_store_client.py

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

1010
from apify_client import ApifyClientAsync
1111
from crawlee.storage_clients._base import KeyValueStoreClient
12-
from crawlee.storage_clients.models import KeyValueStoreMetadata, KeyValueStoreRecord, KeyValueStoreRecordMetadata
12+
from crawlee.storage_clients.models import KeyValueStoreRecord, KeyValueStoreRecordMetadata
1313

14-
from ._models import KeyValueStoreListKeysPage
14+
from ._models import ApifyKeyValueStoreMetadata, KeyValueStoreListKeysPage
1515
from apify._crypto import create_hmac_signature
1616

1717
if TYPE_CHECKING:
@@ -48,9 +48,9 @@ def __init__(
4848
"""A lock to ensure that only one operation is performed at a time."""
4949

5050
@override
51-
async def get_metadata(self) -> KeyValueStoreMetadata:
51+
async def get_metadata(self) -> ApifyKeyValueStoreMetadata:
5252
metadata = await self._api_client.get()
53-
return KeyValueStoreMetadata.model_validate(metadata)
53+
return ApifyKeyValueStoreMetadata.model_validate(metadata)
5454

5555
@classmethod
5656
async def open(
@@ -112,7 +112,7 @@ async def open(
112112

113113
# If name is provided, get or create the storage by name.
114114
if name is not None and id is None:
115-
id = KeyValueStoreMetadata.model_validate(
115+
id = ApifyKeyValueStoreMetadata.model_validate(
116116
await apify_kvss_client.get_or_create(name=name),
117117
).id
118118

@@ -219,9 +219,7 @@ async def get_public_url(self, key: str) -> str:
219219
)
220220
metadata = await self.get_metadata()
221221

222-
if metadata.model_extra is not None:
223-
url_signing_secret_key = metadata.model_extra.get('urlSigningSecretKey')
224-
if url_signing_secret_key is not None:
225-
public_url = public_url.with_query(signature=create_hmac_signature(url_signing_secret_key, key))
222+
if metadata.url_signing_secret_key is not None:
223+
public_url = public_url.with_query(signature=create_hmac_signature(metadata.url_signing_secret_key, key))
226224

227225
return str(public_url)

src/apify/storage_clients/_apify/_models.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,22 @@
66
from pydantic import BaseModel, ConfigDict, Field
77

88
from crawlee._utils.docs import docs_group
9+
from crawlee.storage_clients.models import KeyValueStoreMetadata
910

1011
from apify import Request
1112

1213

14+
@docs_group('Data structures')
15+
class ApifyKeyValueStoreMetadata(KeyValueStoreMetadata):
16+
"""Extended key-value store metadata model for Apify platform.
17+
18+
Includes additional Apify-specific fields.
19+
"""
20+
21+
url_signing_secret_key: Annotated[str | None, Field(alias='urlSigningSecretKey', default=None)]
22+
"""The secret key used for signing URLs for secure access to key-value store records."""
23+
24+
1325
@docs_group('Data structures')
1426
class ProlongRequestLockResponse(BaseModel):
1527
"""Response to prolong request lock calls."""

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)