Skip to content

Commit 2edee89

Browse files
committed
Add test for simple input
1 parent 5825dcd commit 2edee89

File tree

2 files changed

+55
-14
lines changed

2 files changed

+55
-14
lines changed

src/apify/_actor.py

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@
66
from datetime import timedelta
77
from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast
88

9-
from crawlee.storages import RequestList
109
from lazy_object_proxy import Proxy
1110
from pydantic import AliasChoices
1211
from typing_extensions import Self
1312

1413
from apify_client import ApifyClientAsync
1514
from apify_shared.consts import ActorEnvVars, ActorExitCodes, ApifyEnvVars
1615
from apify_shared.utils import ignore_docs, maybe_extract_enum_member_value
17-
from crawlee import service_container, Request
16+
from crawlee import Request, service_container
1817
from crawlee.events._types import Event, EventPersistStateData
18+
from crawlee.storages import RequestList
1919

2020
from apify._configuration import Configuration
2121
from apify._consts import EVENT_LISTENERS_TIMEOUT
@@ -976,18 +976,19 @@ async def create_proxy_configuration(
976976
return proxy_configuration
977977

978978
@staticmethod
979-
def create_request_list(
980-
*,
981-
actor_start_urls_input: dict
982-
) ->RequestList:
983-
return RequestList(requests=[
984-
Request.from_url(
985-
method=request_input.get("method"),
986-
url=request_input.get("url"),
987-
payload=request_input.get("payload", "").encode("utf-8"),
988-
headers=request_input.get("headers", {}),
989-
user_data=request_input.get("userData", {}),
990-
) for request_input in actor_start_urls_input])
979+
def create_request_list(*, actor_start_urls_input: dict) -> RequestList:
980+
return RequestList(
981+
requests=[
982+
Request.from_url(
983+
method=request_input.get('method'),
984+
url=request_input.get('url'),
985+
payload=request_input.get('payload', '').encode('utf-8'),
986+
headers=request_input.get('headers', {}),
987+
user_data=request_input.get('userData', {}),
988+
)
989+
for request_input in actor_start_urls_input
990+
]
991+
)
991992

992993

993994
Actor = cast(_ActorType, Proxy(_ActorType))

tests/unit/actor/test_actor_create_proxy_configuration.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
from __future__ import annotations
22

3+
import typing
34
from typing import TYPE_CHECKING
45

56
import httpx
67
import pytest
78

89
from apify_client import ApifyClientAsync
910
from apify_shared.consts import ApifyEnvVars
11+
from crawlee._request import UserData
12+
from crawlee._types import HttpHeaders, HttpMethod
1013

1114
from apify import Actor
1215

@@ -141,3 +144,40 @@ async def test_proxy_configuration_with_actor_proxy_input(
141144
assert len(route.calls) == 2
142145

143146
await Actor.exit()
147+
148+
149+
@pytest.mark.parametrize('request_method', typing.get_args(HttpMethod))
150+
@pytest.mark.parametrize(
151+
'optional_input',
152+
[
153+
{},
154+
{'payload': 'some payload', 'userData': {'some key': 'some value'}, 'headers': {'h1': 'v1', 'h2': 'v2'}},
155+
],
156+
ids=['minimal', 'all_options'],
157+
)
158+
async def test_actor_create_request_list_request_types(
159+
request_method: HttpMethod, optional_input: dict[str, str]
160+
) -> None:
161+
"""Tests proper request list generation from both minimal and full inputs for all method types."""
162+
minimal_request_dict_input = {'url': 'https://www.abc.com', 'method': request_method}
163+
request_dict_input = {**minimal_request_dict_input, **optional_input}
164+
example_start_urls_input = [
165+
request_dict_input,
166+
]
167+
168+
generated_request_list = Actor.create_request_list(actor_start_urls_input=example_start_urls_input)
169+
170+
assert not await generated_request_list.is_empty()
171+
generated_request = await generated_request_list.fetch_next_request()
172+
assert await generated_request_list.is_empty()
173+
174+
assert generated_request.method == request_dict_input['method']
175+
assert generated_request.url == request_dict_input['url']
176+
assert generated_request.payload == request_dict_input.get('payload', '').encode('utf-8')
177+
expected_user_data = UserData()
178+
if 'userData' in optional_input:
179+
for key, value in optional_input['userData'].items():
180+
expected_user_data[key] = value
181+
assert generated_request.user_data == expected_user_data
182+
expected_headers = HttpHeaders(root=optional_input.get('headers', {}))
183+
assert generated_request.headers == expected_headers

0 commit comments

Comments
 (0)