Skip to content

Commit 6141a71

Browse files
authored
Let provider params influece AnyResponse resolution (#200)
1 parent 17f76d0 commit 6141a71

File tree

2 files changed

+59
-2
lines changed

2 files changed

+59
-2
lines changed

scrapy_zyte_api/providers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,10 @@ async def __call__( # noqa: C901
174174

175175
if AnyResponse in to_provide:
176176
if (
177-
item_requested and extract_from != "httpResponseBody"
178-
) or extract_from == "browserHtml":
177+
(item_requested and extract_from != "httpResponseBody")
178+
or extract_from == "browserHtml"
179+
or zyte_api_meta.get("browserHtml", False) is True
180+
):
179181
html_requested = True
180182
elif extract_from == "httpResponseBody" or http_response_needed:
181183
zyte_api_meta["httpResponseBody"] = True

tests/test_providers.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,61 @@ def parse_(self, response: DummyResponse, page: SomePage):
439439
assert type(item["page"].response.response) is HttpResponse
440440

441441

442+
@ensureDeferred
443+
async def test_provider_any_response_http_response_param(mockserver):
444+
@attrs.define
445+
class SomePage(BasePage):
446+
response: AnyResponse
447+
448+
class ZyteAPISpider(Spider):
449+
def start_requests(self):
450+
yield Request(self.url, callback=self.parse_)
451+
452+
def parse_(self, response: DummyResponse, page: SomePage):
453+
yield {"page": page}
454+
455+
settings = provider_settings(mockserver)
456+
settings["ZYTE_API_PROVIDER_PARAMS"] = {"httpResponseBody": True}
457+
item, url, crawler = await crawl_single_item(ZyteAPISpider, HtmlResource, settings)
458+
params = crawler.engine.downloader.handlers._handlers["http"].params
459+
460+
assert len(params) == 1
461+
assert params[0] == {
462+
"url": url,
463+
"httpResponseBody": True,
464+
"httpResponseHeaders": True,
465+
}
466+
assert type(item["page"].response) is AnyResponse
467+
assert type(item["page"].response.response) is HttpResponse
468+
469+
470+
@ensureDeferred
471+
async def test_provider_any_response_browser_html_param(mockserver):
472+
@attrs.define
473+
class SomePage(BasePage):
474+
response: AnyResponse
475+
476+
class ZyteAPISpider(Spider):
477+
def start_requests(self):
478+
yield Request(self.url, callback=self.parse_)
479+
480+
def parse_(self, response: DummyResponse, page: SomePage):
481+
yield {"page": page}
482+
483+
settings = provider_settings(mockserver)
484+
settings["ZYTE_API_PROVIDER_PARAMS"] = {"browserHtml": True}
485+
item, url, crawler = await crawl_single_item(ZyteAPISpider, HtmlResource, settings)
486+
params = crawler.engine.downloader.handlers._handlers["http"].params
487+
488+
assert len(params) == 1
489+
assert params[0] == {
490+
"url": url,
491+
"browserHtml": True,
492+
}
493+
assert type(item["page"].response) is AnyResponse
494+
assert type(item["page"].response.response) is BrowserResponse
495+
496+
442497
@ensureDeferred
443498
async def test_provider_any_response_product(mockserver):
444499
@attrs.define

0 commit comments

Comments
 (0)