|
4 | 4 |
|
5 | 5 | from typing import TYPE_CHECKING, cast |
6 | 6 |
|
| 7 | +from apify_client._models import LockedRequestQueueHead, RequestQueueHead |
| 8 | + |
7 | 9 | if TYPE_CHECKING: |
8 | 10 | from apify_client import ApifyClient, ApifyClientAsync |
9 | 11 | from apify_client._models import ( |
10 | 12 | BatchAddResult, |
11 | 13 | BatchDeleteResult, |
12 | 14 | ListOfRequestQueues, |
13 | 15 | ListOfRequests, |
14 | | - LockedRequestQueueHead, |
15 | 16 | Request, |
16 | 17 | RequestLockInfo, |
17 | 18 | RequestQueue, |
18 | | - RequestQueueHead, |
19 | 19 | RequestRegistration, |
20 | 20 | UnlockRequestsResult, |
21 | 21 | ) |
@@ -421,16 +421,23 @@ async def test_request_queue_list_and_lock_head(client: ApifyClient | ApifyClien |
421 | 421 | rq_client.add_request({'url': f'https://example.com/lock-{i}', 'unique_key': f'lock-{i}'}) |
422 | 422 | ) |
423 | 423 |
|
424 | | - # Poll until requests are available for locking (eventual consistency) |
425 | | - lock_response: LockedRequestQueueHead | None = None |
| 424 | + # Poll (without side effects) until all requests are visible. Using `list_and_lock_head` for polling |
| 425 | + # would lock items across iterations, leading to an ambiguous count of actually-locked requests. |
| 426 | + head_response: RequestQueueHead | None = None |
426 | 427 | for _ in range(5): |
427 | 428 | await maybe_sleep(1, is_async=is_async) |
428 | | - result = await maybe_await(rq_client.list_and_lock_head(limit=3, lock_duration=timedelta(seconds=60))) |
429 | | - lock_response = cast('LockedRequestQueueHead', result) |
430 | | - if len(lock_response.items) == 3: |
| 429 | + result = await maybe_await(rq_client.list_head(limit=5)) |
| 430 | + assert isinstance(result, RequestQueueHead) |
| 431 | + head_response = result |
| 432 | + if len(head_response.items) == 5: |
431 | 433 | break |
432 | 434 |
|
433 | | - assert lock_response is not None |
| 435 | + assert head_response is not None |
| 436 | + assert len(head_response.items) == 5 |
| 437 | + |
| 438 | + result = await maybe_await(rq_client.list_and_lock_head(limit=3, lock_duration=timedelta(seconds=60))) |
| 439 | + assert isinstance(result, LockedRequestQueueHead) |
| 440 | + lock_response = result |
434 | 441 | assert len(lock_response.items) == 3 |
435 | 442 |
|
436 | 443 | # Verify requests are locked |
@@ -530,16 +537,23 @@ async def test_request_queue_unlock_requests(client: ApifyClient | ApifyClientAs |
530 | 537 | rq_client.add_request({'url': f'https://example.com/unlock-{i}', 'unique_key': f'unlock-{i}'}) |
531 | 538 | ) |
532 | 539 |
|
533 | | - # Poll until requests are available for locking (eventual consistency) |
534 | | - lock_response: LockedRequestQueueHead | None = None |
| 540 | + # Poll (without side effects) until all requests are visible. Using `list_and_lock_head` for polling |
| 541 | + # would lock items across iterations, leading to an ambiguous count of actually-locked requests. |
| 542 | + head_response: RequestQueueHead | None = None |
535 | 543 | for _ in range(5): |
536 | 544 | await maybe_sleep(1, is_async=is_async) |
537 | | - result = await maybe_await(rq_client.list_and_lock_head(limit=3, lock_duration=timedelta(seconds=60))) |
538 | | - lock_response = cast('LockedRequestQueueHead', result) |
539 | | - if len(lock_response.items) == 3: |
| 545 | + result = await maybe_await(rq_client.list_head(limit=5)) |
| 546 | + assert isinstance(result, RequestQueueHead) |
| 547 | + head_response = result |
| 548 | + if len(head_response.items) == 5: |
540 | 549 | break |
541 | 550 |
|
542 | | - assert lock_response is not None |
| 551 | + assert head_response is not None |
| 552 | + assert len(head_response.items) == 5 |
| 553 | + |
| 554 | + result = await maybe_await(rq_client.list_and_lock_head(limit=3, lock_duration=timedelta(seconds=60))) |
| 555 | + assert isinstance(result, LockedRequestQueueHead) |
| 556 | + lock_response = result |
543 | 557 | assert len(lock_response.items) == 3 |
544 | 558 |
|
545 | 559 | # Unlock all requests |
|
0 commit comments