From 62e00bd26c450567d77891945cb2acaab73c206b Mon Sep 17 00:00:00 2001 From: Max Bohomolov Date: Sun, 3 May 2026 23:54:16 +0000 Subject: [PATCH 1/3] update `test_request_deduplication_edge_cases` --- tests/integration/test_request_queue.py | 15 +++++++-------- uv.lock | 8 +++++++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/tests/integration/test_request_queue.py b/tests/integration/test_request_queue.py index ab8967d2..d9fb8000 100644 --- a/tests/integration/test_request_queue.py +++ b/tests/integration/test_request_queue.py @@ -723,14 +723,8 @@ async def test_persistence_across_operations( assert final_handled == 15, f'final_handled={final_handled}' -async def test_request_deduplication_edge_cases( - request_queue_apify: RequestQueue, request: pytest.FixtureRequest -) -> None: +async def test_request_deduplication_edge_cases(request_queue_apify: RequestQueue) -> None: """Test edge cases in request deduplication.""" - rq_access_mode = request.node.callspec.params.get('request_queue_apify') - if rq_access_mode == 'shared': - pytest.skip(reason='Test is flaky, see https://github.com/apify/apify-sdk-python/issues/786') - rq = request_queue_apify Actor.log.info('Request queue opened') @@ -749,7 +743,12 @@ async def test_request_deduplication_edge_cases( results = list[bool]() for url, expected_duplicate in urls_and_deduplication_expectations: - result = await rq.add_request(url) + # add_request may transiently return None due to platform-side issues, retry up to 3 times. + for _ in range(3): + result = await rq.add_request(url) + if result is not None: + break # Successfully added. + assert result is not None results.append(result.was_already_present) assert result.was_already_present == expected_duplicate, ( diff --git a/uv.lock b/uv.lock index f98fe747..99b488ad 100644 --- a/uv.lock +++ b/uv.lock @@ -3,9 +3,15 @@ revision = 3 requires-python = ">=3.10" [options] -exclude-newer = "2026-04-26T08:17:16.734666375Z" +exclude-newer = "0001-01-01T00:00:00Z" # This has no effect and is included for backwards compatibility when using relative exclude-newer values. exclude-newer-span = "PT24H" +[options.exclude-newer-package] +apify-fingerprint-datapoints = false +crawlee = false +apify-shared = false +apify-client = false + [[package]] name = "annotated-types" version = "0.7.0" From 4d31c8dd77957a279c19c7ee25c17594287b6d76 Mon Sep 17 00:00:00 2001 From: Vlada Dusek Date: Fri, 29 May 2026 17:40:14 +0200 Subject: [PATCH 2/3] test: poll with backoff for transient add_request failures Replace the no-delay retry loop with the poll_until_condition helper so transient platform-side None results have time to clear between attempts. --- tests/integration/test_request_queue.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tests/integration/test_request_queue.py b/tests/integration/test_request_queue.py index d9fb8000..a03e097a 100644 --- a/tests/integration/test_request_queue.py +++ b/tests/integration/test_request_queue.py @@ -743,11 +743,9 @@ async def test_request_deduplication_edge_cases(request_queue_apify: RequestQueu results = list[bool]() for url, expected_duplicate in urls_and_deduplication_expectations: - # add_request may transiently return None due to platform-side issues, retry up to 3 times. - for _ in range(3): - result = await rq.add_request(url) - if result is not None: - break # Successfully added. + # In shared mode, `add_request` may transiently return None until the operation propagates, + # so poll with backoff until it returns a result. + result = await poll_until_condition(lambda url=url: rq.add_request(url), lambda result: result is not None) assert result is not None results.append(result.was_already_present) From f5835aacc96dd86552317ad6e76e1192909eed6f Mon Sep 17 00:00:00 2001 From: Vlada Dusek Date: Fri, 29 May 2026 17:40:40 +0200 Subject: [PATCH 3/3] chore: drop unrelated uv.lock changes from this PR --- uv.lock | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/uv.lock b/uv.lock index 99b488ad..f98fe747 100644 --- a/uv.lock +++ b/uv.lock @@ -3,15 +3,9 @@ revision = 3 requires-python = ">=3.10" [options] -exclude-newer = "0001-01-01T00:00:00Z" # This has no effect and is included for backwards compatibility when using relative exclude-newer values. +exclude-newer = "2026-04-26T08:17:16.734666375Z" exclude-newer-span = "PT24H" -[options.exclude-newer-package] -apify-fingerprint-datapoints = false -crawlee = false -apify-shared = false -apify-client = false - [[package]] name = "annotated-types" version = "0.7.0"