7
7
from datetime import datetime , timedelta , timezone
8
8
from hashlib import sha256
9
9
from logging import getLogger
10
- from typing import TYPE_CHECKING , Final
10
+ from typing import TYPE_CHECKING , Final , Annotated
11
11
12
12
from cachetools import LRUCache
13
+ from pydantic import BaseModel , ConfigDict , Field
13
14
from typing_extensions import override
14
15
15
16
from apify_client import ApifyClientAsync
@@ -52,6 +53,29 @@ def unique_key_to_request_id(unique_key: str, *, request_id_length: int = 15) ->
52
53
return url_safe_key [:request_id_length ]
53
54
54
55
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
+
55
79
class ApifyRequestQueueClient (RequestQueueClient ):
56
80
"""An Apify platform implementation of the request queue client."""
57
81
@@ -114,12 +138,12 @@ def __init__(
114
138
"""Fetch lock to minimize race conditions when communicating with API."""
115
139
116
140
@override
117
- async def get_metadata (self ) -> RequestQueueMetadata :
141
+ async def get_metadata (self ) -> ApifyRequestQueueMetadata :
118
142
total_count = self ._initial_total_count + self ._assumed_total_count
119
143
handled_count = self ._initial_handled_count + self ._assumed_handled_count
120
144
pending_count = total_count - handled_count
121
145
122
- return RequestQueueMetadata (
146
+ return ApifyRequestQueueMetadata (
123
147
id = self ._id ,
124
148
name = self ._name ,
125
149
total_request_count = total_count ,
@@ -129,6 +153,7 @@ async def get_metadata(self) -> RequestQueueMetadata:
129
153
modified_at = datetime .now (timezone .utc ),
130
154
accessed_at = datetime .now (timezone .utc ),
131
155
had_multiple_clients = self ._had_multiple_clients ,
156
+ stats = RequestQueueStats .model_validate ({}) # TODO: update after https://github.com/apify/apify-sdk-python/pull/552
132
157
)
133
158
134
159
@classmethod
0 commit comments