@@ -39,3 +39,68 @@ async def main() -> None:
39
39
run_result = await actor .call ()
40
40
assert run_result is not None
41
41
assert run_result ['status' ] == 'SUCCEEDED'
42
+
43
+ async def test_batch (self , make_actor : ActorFactory ) -> None :
44
+ async def main () -> None :
45
+ async with Actor :
46
+ desired_request_count = 100
47
+ print ('Opening request queue...' )
48
+ # I have seen it get stuck on this call
49
+ rq = await Actor .open_request_queue ()
50
+ # Add some requests
51
+ await rq .add_requests_batched ([f'https://example.com/{ i } ' for i in range (desired_request_count )])
52
+
53
+ handled_request_count = 0
54
+ while next_request := await rq .fetch_next_request ():
55
+ print ('Fetching next request...' )
56
+ queue_operation_info = await rq .mark_request_as_handled (next_request )
57
+ assert queue_operation_info is not None
58
+ assert queue_operation_info .was_already_handled is False
59
+ handled_request_count += 1
60
+
61
+ assert handled_request_count == desired_request_count
62
+ print ('Waiting for queue to be finished...' )
63
+ is_finished = await rq .is_finished ()
64
+ assert is_finished is True
65
+
66
+ actor = await make_actor ('rq-batch-test' , main_func = main )
67
+
68
+ run_result = await actor .call ()
69
+ assert run_result is not None
70
+ assert run_result ['status' ] == 'SUCCEEDED'
71
+
72
+ async def test_batch_non_unique (self , make_actor : ActorFactory ) -> None :
73
+ async def main () -> None :
74
+ from crawlee import Request
75
+
76
+ async with Actor :
77
+ desired_request_count = 100
78
+ print ('Opening request queue...' )
79
+ # I have seen it get stuck on this call
80
+ rq = await Actor .open_request_queue ()
81
+ # Add some requests
82
+ await rq .add_requests_batched (
83
+ [
84
+ Request .from_url (f'https://example.com/{ i } ' , unique_key = str (i - 1 if i % 4 == 1 else i ))
85
+ for i in range (desired_request_count )
86
+ ]
87
+ )
88
+
89
+ handled_request_count = 0
90
+ while next_request := await rq .fetch_next_request ():
91
+ print ('Fetching next request...' )
92
+ queue_operation_info = await rq .mark_request_as_handled (next_request )
93
+ assert queue_operation_info is not None
94
+ assert queue_operation_info .was_already_handled is False
95
+ handled_request_count += 1
96
+
97
+ assert handled_request_count == desired_request_count * 3 / 4
98
+ print ('Waiting for queue to be finished...' )
99
+ is_finished = await rq .is_finished ()
100
+ assert is_finished is True
101
+
102
+ actor = await make_actor ('rq-batch-test' , main_func = main )
103
+
104
+ run_result = await actor .call ()
105
+ assert run_result is not None
106
+ assert run_result ['status' ] == 'SUCCEEDED'
0 commit comments