Skip to content

Commit 0eb6289

Browse files
authored
Merge pull request #564 from danieldotnl/fix/http-session-review-issues
Fix HttpSession review issues from PR #561
2 parents 5662668 + 690b76e commit 0eb6289

2 files changed

Lines changed: 100 additions & 220 deletions

File tree

custom_components/multiscrape/http_session.py

Lines changed: 39 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,27 @@ async def async_request(
127127
headers = self._http_config.headers_renderer(variables)
128128
params = self._http_config.params_renderer(variables)
129129

130+
return await self._execute_request(
131+
context=context,
132+
method=method,
133+
resource=resource,
134+
headers=headers,
135+
params=params,
136+
auth=self._auth,
137+
data=data,
138+
)
139+
140+
async def _execute_request(
141+
self,
142+
context: str,
143+
method: str,
144+
resource: str,
145+
headers: dict,
146+
params: dict,
147+
auth: Any,
148+
data: Any = None,
149+
) -> httpx.Response:
150+
"""Core HTTP request with logging and error handling."""
130151
merged_resource = merge_url_with_params(resource, params)
131152

132153
_LOGGER.debug(
@@ -149,7 +170,7 @@ async def async_request(
149170
"method": method,
150171
"url": merged_resource,
151172
"headers": headers,
152-
"auth": self._auth,
173+
"auth": auth,
153174
}
154175

155176
if data is not None:
@@ -289,8 +310,7 @@ async def ensure_authenticated(self, main_resource: str) -> str | None:
289310

290311
if not form_cfg.resource:
291312
return response.text
292-
else:
293-
return None
313+
return None
294314

295315
async def _form_request(
296316
self,
@@ -304,51 +324,15 @@ async def _form_request(
304324
headers = form_cfg.headers_renderer()
305325
params = form_cfg.params_renderer()
306326

307-
merged_resource = merge_url_with_params(resource, params)
308-
309-
_LOGGER.debug(
310-
"%s # Executing %s-request with a %s to url: %s with headers: %s.",
311-
self._config_name,
312-
context,
313-
method,
314-
merged_resource,
315-
headers,
316-
)
317-
if self._file_manager:
318-
await asyncio.gather(
319-
self._async_file_log("request_headers", context, headers),
320-
self._async_file_log("request_body", context, request_data),
321-
)
322-
323-
request_params = {
324-
"method": method,
325-
"url": merged_resource,
326-
"headers": headers,
327-
"auth": form_cfg.auth,
328-
}
329-
330-
if request_data is not None:
331-
if isinstance(request_data, dict):
332-
request_params["data"] = request_data
333-
else:
334-
request_params["content"] = request_data
335-
336-
response = await self._client.request(**request_params)
337-
338-
_LOGGER.debug(
339-
"%s # Response status code received: %s",
340-
self._config_name,
341-
response.status_code,
327+
return await self._execute_request(
328+
context=context,
329+
method=method,
330+
resource=resource,
331+
headers=headers,
332+
params=params,
333+
auth=form_cfg.auth,
334+
data=request_data,
342335
)
343-
if self._file_manager:
344-
await asyncio.gather(
345-
self._async_file_log("response_headers", context, response.headers),
346-
self._async_file_log("response_body", context, response.text),
347-
)
348-
349-
if 400 <= response.status_code <= 599:
350-
response.raise_for_status()
351-
return response
352336

353337
async def _fetch_form_page(self, resource: str) -> str:
354338
"""Fetch the page containing the form."""
@@ -368,9 +352,8 @@ async def _extract_form(self, page: str):
368352
self._form_auth_config.parser,
369353
)
370354
soup = BeautifulSoup(page, self._form_auth_config.parser)
371-
soup.prettify()
372355
if self._file_manager:
373-
await self._async_file_log("form_page_soup", "form", soup)
356+
await self._async_file_log("form_page_soup", "form", soup.prettify())
374357

375358
_LOGGER.debug(
376359
"%s # Try to find form with selector %s",
@@ -456,11 +439,17 @@ async def _handle_request_exception(self, context, response):
456439
async def _async_file_log(self, content_name, context, content):
457440
"""Write content to a file if content is not None."""
458441
if content is not None:
442+
filename = f"{context}_{content_name}.txt"
459443
try:
460-
filename = f"{context}_{content_name}.txt"
461444
await self._hass.async_add_executor_job(
462445
self._file_manager.write, filename, content
463446
)
447+
_LOGGER.debug(
448+
"%s # %s written to file: %s",
449+
self._config_name,
450+
content_name,
451+
filename,
452+
)
464453
except Exception as ex:
465454
_LOGGER.error(
466455
"%s # Unable to write %s to file: %s. \nException: %s",
@@ -469,12 +458,6 @@ async def _async_file_log(self, content_name, context, content):
469458
filename,
470459
ex,
471460
)
472-
_LOGGER.debug(
473-
"%s # %s written to file: %s",
474-
self._config_name,
475-
content_name,
476-
filename,
477-
)
478461

479462

480463
def create_http_session(config_name, conf, hass, file_manager):

0 commit comments

Comments
 (0)