77from datetime import datetime , timedelta , timezone
88from hashlib import sha256
99from logging import getLogger
10- from typing import TYPE_CHECKING , Final
10+ from typing import TYPE_CHECKING , Final , Annotated
1111
1212from cachetools import LRUCache
13+ from pydantic import BaseModel , ConfigDict , Field
1314from typing_extensions import override
1415
1516from apify_client import ApifyClientAsync
@@ -52,6 +53,29 @@ def unique_key_to_request_id(unique_key: str, *, request_id_length: int = 15) ->
5253 return url_safe_key [:request_id_length ]
5354
5455
56+ class RequestQueueStats (BaseModel ):
57+ model_config = ConfigDict (populate_by_name = True )
58+
59+ delete_count : Annotated [int , Field (alias = 'deleteCount' , default = 0 )]
60+ """"The number of request queue deletes."""
61+
62+ head_item_read_count : Annotated [int , Field (alias = 'headItemReadCount' , default = 0 )]
63+ """The number of request queue head reads."""
64+
65+ read_count : Annotated [int , Field (alias = 'readCount' , default = 0 )]
66+ """The number of request queue reads."""
67+
68+ storage_bytes : Annotated [int , Field (alias = 'storageBytes' , default = 0 )]
69+ """Storage size in Bytes."""
70+
71+ write_count : Annotated [int , Field (alias = 'writeCount' , default = 0 )]
72+ """The number of request queue writes."""
73+
74+ class ApifyRequestQueueMetadata (RequestQueueMetadata ):
75+ stats : Annotated [RequestQueueStats , Field (alias = 'stats' , default_factory = RequestQueueStats )]
76+ """Additional optional statistics about the request queue."""
77+
78+
5579class ApifyRequestQueueClient (RequestQueueClient ):
5680 """An Apify platform implementation of the request queue client."""
5781
@@ -114,12 +138,12 @@ def __init__(
114138 """Fetch lock to minimize race conditions when communicating with API."""
115139
116140 @override
117- async def get_metadata (self ) -> RequestQueueMetadata :
141+ async def get_metadata (self ) -> ApifyRequestQueueMetadata :
118142 total_count = self ._initial_total_count + self ._assumed_total_count
119143 handled_count = self ._initial_handled_count + self ._assumed_handled_count
120144 pending_count = total_count - handled_count
121145
122- return RequestQueueMetadata (
146+ return ApifyRequestQueueMetadata (
123147 id = self ._id ,
124148 name = self ._name ,
125149 total_request_count = total_count ,
@@ -129,6 +153,7 @@ async def get_metadata(self) -> RequestQueueMetadata:
129153 modified_at = datetime .now (timezone .utc ),
130154 accessed_at = datetime .now (timezone .utc ),
131155 had_multiple_clients = self ._had_multiple_clients ,
156+ stats = RequestQueueStats .model_validate ({}) # TODO: update after https://github.com/apify/apify-sdk-python/pull/552
132157 )
133158
134159 @classmethod
0 commit comments