@@ -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. \n Exception: %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
480463def create_http_session (config_name , conf , hass , file_manager ):
0 commit comments