From 71b604de54f94a9449d0768e3bf5292c1940cbc5 Mon Sep 17 00:00:00 2001 From: Vlada Dusek Date: Wed, 4 Nov 2026 14:24:22 +0100 Subject: [PATCH] fix: match URLs case-insensitively in `ApifyRequestList` remote sources --- .../request_loaders/_apify_request_list.py | 3 ++- tests/unit/actor/test_request_list.py | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/apify/request_loaders/_apify_request_list.py b/src/apify/request_loaders/_apify_request_list.py index 4a5fe9711..e5a5c3d7d 100644 --- a/src/apify/request_loaders/_apify_request_list.py +++ b/src/apify/request_loaders/_apify_request_list.py @@ -17,7 +17,8 @@ from apify._utils import docs_group URL_NO_COMMAS_REGEX = re.compile( - r'https?:\/\/(www\.)?([^\W_]|[^\W_][-\w0-9@:%._+~#=]{0,254}[^\W_])\.[a-z]{2,63}(:\d{1,5})?(\/[-\w@:%+.~#?&/=()]*)?' + r'https?:\/\/(www\.)?([^\W_]|[^\W_][-\w0-9@:%._+~#=]{0,254}[^\W_])\.[a-z]{2,63}(:\d{1,5})?(\/[-\w@:%+.~#?&/=()]*)?', + re.IGNORECASE, ) diff --git a/tests/unit/actor/test_request_list.py b/tests/unit/actor/test_request_list.py index 8b2841b65..5eb6ab4c7 100644 --- a/tests/unit/actor/test_request_list.py +++ b/tests/unit/actor/test_request_list.py @@ -235,6 +235,29 @@ async def test_request_list_open_from_url_non_utf8_body(httpserver: HTTPServer) assert request.url == expected_url +@pytest.mark.parametrize( + 'url', + [ + pytest.param('HTTPS://example.com/b', id='uppercase scheme'), + pytest.param('https://EXAMPLE.COM/a', id='uppercase host'), + pytest.param('https://example.Com/c', id='mixed-case TLD'), + ], +) +async def test_request_list_open_from_url_case_insensitive(httpserver: HTTPServer, url: str) -> None: + """Test that URLs with an uppercase scheme, host or TLD are extracted from a remote source.""" + httpserver.expect_oneshot_request('/file.txt').respond_with_data(status=200, response_data=f'see {url} here') + + request_list = await ApifyRequestList.open( + request_list_sources_input=[{'requestsFromUrl': httpserver.url_for('/file.txt')}] + ) + + requests = [] + while request := await request_list.fetch_next_request(): + requests.append(request) + + assert [request.url for request in requests] == [url] + + async def test_request_list_open_name() -> None: name = 'some_name' request_list = await ApifyRequestList.open(name=name)