Enable ruff TRY401 (#114395)

* Enable ruff TRY401

* fix tests
This commit is contained in:
Sid 2024-03-29 07:20:36 +01:00 committed by GitHub
parent 530552b4f5
commit a5b609f081
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
61 changed files with 159 additions and 182 deletions

View file

@ -384,10 +384,8 @@ def async_get_entities(
try: try:
alexa_entity = ENTITY_ADAPTERS[state.domain](hass, config, state) alexa_entity = ENTITY_ADAPTERS[state.domain](hass, config, state)
interfaces = list(alexa_entity.interfaces()) interfaces = list(alexa_entity.interfaces())
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception( _LOGGER.exception("Unable to serialize %s for discovery", state.entity_id)
"Unable to serialize %s for discovery: %s", state.entity_id, exc
)
else: else:
if not interfaces: if not interfaces:
continue continue

View file

@ -126,9 +126,9 @@ async def async_api_discovery(
continue continue
try: try:
discovered_serialized_entity = alexa_entity.serialize_discovery() discovered_serialized_entity = alexa_entity.serialize_discovery()
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception( _LOGGER.exception(
"Unable to serialize %s for discovery: %s", alexa_entity.entity_id, exc "Unable to serialize %s for discovery", alexa_entity.entity_id
) )
else: else:
discovery_endpoints.append(discovered_serialized_entity) discovery_endpoints.append(discovered_serialized_entity)

View file

@ -94,8 +94,8 @@ class AlexaIntentsView(http.HomeAssistantView):
) )
) )
except intent.IntentError as err: except intent.IntentError:
_LOGGER.exception(str(err)) _LOGGER.exception("Error handling intent")
return self.json( return self.json(
intent_error_response(hass, message, "Error handling intent.") intent_error_response(hass, message, "Error handling intent.")
) )

View file

@ -376,11 +376,9 @@ class PassiveBluetoothProcessorCoordinator(
try: try:
update = self._update_method(service_info) update = self._update_method(service_info)
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
self.last_update_success = False self.last_update_success = False
self.logger.exception( self.logger.exception("Unexpected error updating %s data", self.name)
"Unexpected error updating %s data: %s", self.name, err
)
return return
if not self.last_update_success: if not self.last_update_success:
@ -588,10 +586,10 @@ class PassiveBluetoothDataProcessor(Generic[_T]):
"""Handle a Bluetooth event.""" """Handle a Bluetooth event."""
try: try:
new_data = self.update_method(update) new_data = self.update_method(update)
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
self.last_update_success = False self.last_update_success = False
self.coordinator.logger.exception( self.coordinator.logger.exception(
"Unexpected error updating %s data: %s", self.coordinator.name, err "Unexpected error updating %s data", self.coordinator.name
) )
return return

View file

@ -38,13 +38,13 @@ async def validate_input(user_input: dict[str, Any]) -> dict[str, str] | None:
_LOGGER.warning("Brunt Credentials are incorrect") _LOGGER.warning("Brunt Credentials are incorrect")
errors = {"base": "invalid_auth"} errors = {"base": "invalid_auth"}
else: else:
_LOGGER.exception("Unknown error when trying to login to Brunt: %s", exc) _LOGGER.exception("Unknown error when trying to login to Brunt")
errors = {"base": "unknown"} errors = {"base": "unknown"}
except ServerDisconnectedError: except ServerDisconnectedError:
_LOGGER.warning("Cannot connect to Brunt") _LOGGER.warning("Cannot connect to Brunt")
errors = {"base": "cannot_connect"} errors = {"base": "cannot_connect"}
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unknown error when trying to login to Brunt: %s", exc) _LOGGER.exception("Unknown error when trying to login to Brunt")
errors = {"base": "unknown"} errors = {"base": "unknown"}
finally: finally:
await bapi.async_close() await bapi.async_close()

View file

@ -232,12 +232,10 @@ def async_log_errors(
func.__name__, func.__name__,
err, err,
) )
except DenonAvrError as err: except DenonAvrError:
available = False available = False
_LOGGER.exception( _LOGGER.exception(
"Error %s occurred in method %s for Denon AVR receiver", "Error occurred in method %s for Denon AVR receiver", func.__name__
err,
func.__name__,
) )
finally: finally:
if available and not self.available: if available and not self.available:

View file

@ -89,8 +89,8 @@ async def _async_try_connect(token: str) -> tuple[str | None, nextcord.AppInfo |
return "invalid_auth", None return "invalid_auth", None
except (ClientConnectorError, nextcord.HTTPException, nextcord.NotFound): except (ClientConnectorError, nextcord.HTTPException, nextcord.NotFound):
return "cannot_connect", None return "cannot_connect", None
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unexpected exception: %s", ex) _LOGGER.exception("Unexpected exception")
return "unknown", None return "unknown", None
await discord_bot.close() await discord_bot.close()
return None, info return None, info

View file

@ -121,8 +121,8 @@ class DLinkFlowHandler(ConfigFlow, domain=DOMAIN):
user_input[CONF_USERNAME], user_input[CONF_USERNAME],
user_input[CONF_USE_LEGACY_PROTOCOL], user_input[CONF_USE_LEGACY_PROTOCOL],
) )
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unexpected exception: %s", ex) _LOGGER.exception("Unexpected exception")
return "unknown" return "unknown"
if not smartplug.authenticated and smartplug.use_legacy_protocol: if not smartplug.authenticated and smartplug.use_legacy_protocol:
return "cannot_connect" return "cannot_connect"

View file

@ -430,8 +430,8 @@ class EsphomeFlowHandler(ConfigFlow, domain=DOMAIN):
except aiohttp.ClientError as err: except aiohttp.ClientError as err:
_LOGGER.error("Error talking to the dashboard: %s", err) _LOGGER.error("Error talking to the dashboard: %s", err)
return False return False
except json.JSONDecodeError as err: except json.JSONDecodeError:
_LOGGER.exception("Error parsing response from dashboard: %s", err) _LOGGER.exception("Error parsing response from dashboard")
return False return False
self._noise_psk = noise_psk self._noise_psk = noise_psk

View file

@ -353,11 +353,11 @@ class RuntimeEntryData:
if subscription := self.state_subscriptions.get(subscription_key): if subscription := self.state_subscriptions.get(subscription_key):
try: try:
subscription() subscription()
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
# If we allow this exception to raise it will # If we allow this exception to raise it will
# make it all the way to data_received in aioesphomeapi # make it all the way to data_received in aioesphomeapi
# which will cause the connection to be closed. # which will cause the connection to be closed.
_LOGGER.exception("Error while calling subscription: %s", ex) _LOGGER.exception("Error while calling subscription")
@callback @callback
def async_update_device_state(self) -> None: def async_update_device_state(self) -> None:

View file

@ -43,8 +43,8 @@ class FAADelaysConfigFlow(ConfigFlow, domain=DOMAIN):
_LOGGER.error("Error connecting to FAA API") _LOGGER.error("Error connecting to FAA API")
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except Exception as error: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unexpected exception: %s", error) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
if not errors: if not errors:

View file

@ -44,9 +44,9 @@ class FliprConfigFlow(ConfigFlow, domain=DOMAIN):
errors["base"] = "invalid_auth" errors["base"] = "invalid_auth"
except (Timeout, ConnectionError): except (Timeout, ConnectionError):
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except Exception as exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
errors["base"] = "unknown" errors["base"] = "unknown"
_LOGGER.exception(exception) _LOGGER.exception("Unexpected exception")
if not errors and not flipr_ids: if not errors and not flipr_ids:
# No flipr_id found. Tell the user with an error message. # No flipr_id found. Tell the user with an error message.

View file

@ -74,8 +74,8 @@ class FrontierSiliconConfigFlow(ConfigFlow, domain=DOMAIN):
self._webfsapi_url = await AFSAPI.get_webfsapi_endpoint(device_url) self._webfsapi_url = await AFSAPI.get_webfsapi_endpoint(device_url)
except FSConnectionError: except FSConnectionError:
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except Exception as exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception(exception) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
else: else:
return await self._async_step_device_config_if_needed() return await self._async_step_device_config_if_needed()
@ -206,8 +206,8 @@ class FrontierSiliconConfigFlow(ConfigFlow, domain=DOMAIN):
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except InvalidPinException: except InvalidPinException:
errors["base"] = "invalid_auth" errors["base"] = "invalid_auth"
except Exception as exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception(exception) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
else: else:
if self._reauth_entry: if self._reauth_entry:

View file

@ -295,7 +295,7 @@ class GoogleCloudTTSProvider(Provider):
except TimeoutError as ex: except TimeoutError as ex:
_LOGGER.error("Timeout for Google Cloud TTS call: %s", ex) _LOGGER.error("Timeout for Google Cloud TTS call: %s", ex)
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Error occurred during Google Cloud TTS call: %s", ex) _LOGGER.exception("Error occurred during Google Cloud TTS call")
return None, None return None, None

View file

@ -53,7 +53,7 @@ class OAuth2FlowHandler(
reason="access_not_configured", reason="access_not_configured",
description_placeholders={"message": error}, description_placeholders={"message": error},
) )
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
self.logger.exception("Unknown error occurred: %s", ex) self.logger.exception("Unknown error occurred")
return self.async_abort(reason="unknown") return self.async_abort(reason="unknown")
return self.async_create_entry(title=self.flow_impl.name, data=data) return self.async_create_entry(title=self.flow_impl.name, data=data)

View file

@ -162,8 +162,8 @@ class GoogleProvider(Provider):
try: try:
tts.write_to_fp(mp3_data) tts.write_to_fp(mp3_data)
except gTTSError as exc: except gTTSError:
_LOGGER.exception("Error during processing of TTS request %s", exc) _LOGGER.exception("Error during processing of TTS request")
return None, None return None, None
return "mp3", mp3_data.getvalue() return "mp3", mp3_data.getvalue()

View file

@ -124,8 +124,8 @@ class HERETravelTimeConfigFlow(ConfigFlow, domain=DOMAIN):
await async_validate_api_key(user_input[CONF_API_KEY]) await async_validate_api_key(user_input[CONF_API_KEY])
except HERERoutingUnauthorizedError: except HERERoutingUnauthorizedError:
errors["base"] = "invalid_auth" errors["base"] = "invalid_auth"
except (HERERoutingError, HERETransitError) as error: except (HERERoutingError, HERETransitError):
_LOGGER.exception("Unexpected exception: %s", error) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
if not errors: if not errors:
self._config = user_input self._config = user_input

View file

@ -201,7 +201,7 @@ class HomeWizardConfigFlow(ConfigFlow, domain=DOMAIN):
) from ex ) from ex
except Exception as ex: except Exception as ex:
_LOGGER.exception(ex) _LOGGER.exception("Unexpected exception")
raise AbortFlow("unknown_error") from ex raise AbortFlow("unknown_error") from ex
finally: finally:

View file

@ -58,7 +58,7 @@ class CachingStaticResource(StaticResource):
raise raise
except Exception as error: except Exception as error:
# perm error or other kind! # perm error or other kind!
request.app.logger.exception(error) request.app.logger.exception("Unexpected exception")
raise HTTPNotFound from error raise HTTPNotFound from error
content_type: str | None = None content_type: str | None = None

View file

@ -40,8 +40,8 @@ class IpmaFlowHandler(ConfigFlow, domain=DOMAIN):
user_input[CONF_LATITUDE], user_input[CONF_LATITUDE],
user_input[CONF_LONGITUDE], user_input[CONF_LONGITUDE],
) )
except IPMAException as err: except IPMAException:
_LOGGER.exception(err) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
else: else:
return self.async_create_entry(title=location.name, data=user_input) return self.async_create_entry(title=location.name, data=user_input)

View file

@ -66,9 +66,9 @@ class JellyfinConfigFlow(ConfigFlow, domain=DOMAIN):
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except InvalidAuth: except InvalidAuth:
errors["base"] = "invalid_auth" errors["base"] = "invalid_auth"
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
errors["base"] = "unknown" errors["base"] = "unknown"
_LOGGER.exception(ex) _LOGGER.exception("Unexpected exception")
else: else:
entry_title = user_input[CONF_URL] entry_title = user_input[CONF_URL]
@ -116,9 +116,9 @@ class JellyfinConfigFlow(ConfigFlow, domain=DOMAIN):
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except InvalidAuth: except InvalidAuth:
errors["base"] = "invalid_auth" errors["base"] = "invalid_auth"
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
errors["base"] = "unknown" errors["base"] = "unknown"
_LOGGER.exception(ex) _LOGGER.exception("Unexpected exception")
else: else:
self.hass.config_entries.async_update_entry(self.entry, data=new_input) self.hass.config_entries.async_update_entry(self.entry, data=new_input)

View file

@ -94,7 +94,7 @@ class LitterRobotConfigFlow(ConfigFlow, domain=DOMAIN):
return "invalid_auth" return "invalid_auth"
except LitterRobotException: except LitterRobotException:
return "cannot_connect" return "cannot_connect"
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unexpected exception: %s", ex) _LOGGER.exception("Unexpected exception")
return "unknown" return "unknown"
return "" return ""

View file

@ -49,8 +49,8 @@ def setup(hass: HomeAssistant, config: ConfigType) -> bool:
try: try:
payload = {"host": le_wh, "event": json_body} payload = {"host": le_wh, "event": json_body}
requests.post(le_wh, data=json.dumps(payload), timeout=10) requests.post(le_wh, data=json.dumps(payload), timeout=10)
except requests.exceptions.RequestException as error: except requests.exceptions.RequestException:
_LOGGER.exception("Error sending to Logentries: %s", error) _LOGGER.exception("Error sending to Logentries")
hass.bus.listen(EVENT_STATE_CHANGED, logentries_event_listener) hass.bus.listen(EVENT_STATE_CHANGED, logentries_event_listener)

View file

@ -86,8 +86,8 @@ class MailgunNotificationService(BaseNotificationService):
except MailgunCredentialsError: except MailgunCredentialsError:
_LOGGER.exception("Invalid credentials") _LOGGER.exception("Invalid credentials")
return False return False
except MailgunDomainError as mailgun_error: except MailgunDomainError:
_LOGGER.exception(mailgun_error) _LOGGER.exception("Unexpected exception")
return False return False
return True return True
@ -110,5 +110,5 @@ class MailgunNotificationService(BaseNotificationService):
files=files, files=files,
) )
_LOGGER.debug("Message sent: %s", resp) _LOGGER.debug("Message sent: %s", resp)
except MailgunError as mailgun_error: except MailgunError:
_LOGGER.exception("Failed to send message: %s", mailgun_error) _LOGGER.exception("Failed to send message")

View file

@ -136,11 +136,10 @@ class InspectorBLEConfigFlow(ConfigFlow, domain=DOMAIN):
return self.async_abort(reason="cannot_connect") return self.async_abort(reason="cannot_connect")
except AbortFlow: except AbortFlow:
raise raise
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception( _LOGGER.exception(
"Error occurred reading information from %s: %s", "Error occurred reading information from %s",
self._discovery_info.address, self._discovery_info.address,
err,
) )
return self.async_abort(reason="unknown") return self.async_abort(reason="unknown")
_LOGGER.debug("Device connection successful, proceeding") _LOGGER.debug("Device connection successful, proceeding")

View file

@ -121,10 +121,9 @@ async def async_migrate_entry(hass: HomeAssistant, config_entry: ConfigEntry) ->
try: try:
await api.async_initialize() await api.async_initialize()
except MinecraftServerAddressError as error: except MinecraftServerAddressError:
_LOGGER.exception( _LOGGER.exception(
"Can't migrate configuration entry due to error while parsing server address, try again later: %s", "Can't migrate configuration entry due to error while parsing server address, try again later"
error,
) )
return False return False

View file

@ -45,8 +45,8 @@ def setup(hass: HomeAssistant, config: ConfigType) -> bool:
try: try:
mochad_controller = MochadCtrl(host, port) mochad_controller = MochadCtrl(host, port)
except exceptions.ConfigurationError as err: except exceptions.ConfigurationError:
_LOGGER.exception(str(err)) _LOGGER.exception("Unexpected exception")
return False return False
def stop_mochad(event): def stop_mochad(event):

View file

@ -37,8 +37,8 @@ def get_service(
try: try:
return MSTeamsNotificationService(webhook_url) return MSTeamsNotificationService(webhook_url)
except RuntimeError as err: except RuntimeError:
_LOGGER.exception("Error in creating a new Microsoft Teams message: %s", err) _LOGGER.exception("Error in creating a new Microsoft Teams message")
return None return None

View file

@ -115,11 +115,11 @@ class OctoPrintConfigFlow(ConfigFlow, domain=DOMAIN):
try: try:
await self.api_key_task await self.api_key_task
except OctoprintException as err: except OctoprintException:
_LOGGER.exception("Failed to get an application key: %s", err) _LOGGER.exception("Failed to get an application key")
return self.async_show_progress_done(next_step_id="auth_failed") return self.async_show_progress_done(next_step_id="auth_failed")
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Failed to get an application key : %s", err) _LOGGER.exception("Failed to get an application key")
return self.async_show_progress_done(next_step_id="auth_failed") return self.async_show_progress_done(next_step_id="auth_failed")
finally: finally:
self.api_key_task = None self.api_key_task = None

View file

@ -83,8 +83,8 @@ def setup_platform(
host = config[CONF_HOST] host = config[CONF_HOST]
try: try:
bridge = Lightify(host, log_level=logging.NOTSET) bridge = Lightify(host, log_level=logging.NOTSET)
except OSError as err: except OSError:
_LOGGER.exception("Error connecting to bridge: %s due to: %s", host, err) _LOGGER.exception("Error connecting to bridge %s", host)
return return
setup_bridge(bridge, add_entities, config) setup_bridge(bridge, add_entities, config)

View file

@ -177,8 +177,8 @@ class Remote:
self._control = None self._control = None
self.state = STATE_OFF self.state = STATE_OFF
self.available = self._on_action is not None self.available = self._on_action is not None
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("An unknown error occurred: %s", err) _LOGGER.exception("An unknown error occurred")
self._control = None self._control = None
self.state = STATE_OFF self.state = STATE_OFF
self.available = self._on_action is not None self.available = self._on_action is not None
@ -265,7 +265,7 @@ class Remote:
self.state = STATE_OFF self.state = STATE_OFF
self.available = self._on_action is not None self.available = self._on_action is not None
await self.async_create_remote_control() await self.async_create_remote_control()
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("An unknown error occurred: %s", err) _LOGGER.exception("An unknown error occurred")
self.state = STATE_OFF self.state = STATE_OFF
self.available = self._on_action is not None self.available = self._on_action is not None

View file

@ -60,8 +60,8 @@ class PanasonicVieraConfigFlow(ConfigFlow, domain=DOMAIN):
except (URLError, SOAPError, OSError) as err: except (URLError, SOAPError, OSError) as err:
_LOGGER.error("Could not establish remote connection: %s", err) _LOGGER.error("Could not establish remote connection: %s", err)
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("An unknown error occurred: %s", err) _LOGGER.exception("An unknown error occurred")
return self.async_abort(reason="unknown") return self.async_abort(reason="unknown")
if "base" not in errors: if "base" not in errors:
@ -118,8 +118,8 @@ class PanasonicVieraConfigFlow(ConfigFlow, domain=DOMAIN):
except (URLError, OSError) as err: except (URLError, OSError) as err:
_LOGGER.error("The remote connection was lost: %s", err) _LOGGER.error("The remote connection was lost: %s", err)
return self.async_abort(reason="cannot_connect") return self.async_abort(reason="cannot_connect")
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unknown error: %s", err) _LOGGER.exception("Unknown error")
return self.async_abort(reason="unknown") return self.async_abort(reason="unknown")
if "base" not in errors: if "base" not in errors:
@ -142,8 +142,8 @@ class PanasonicVieraConfigFlow(ConfigFlow, domain=DOMAIN):
except (URLError, SOAPError, OSError) as err: except (URLError, SOAPError, OSError) as err:
_LOGGER.error("The remote connection was lost: %s", err) _LOGGER.error("The remote connection was lost: %s", err)
return self.async_abort(reason="cannot_connect") return self.async_abort(reason="cannot_connect")
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unknown error: %s", err) _LOGGER.exception("Unknown error")
return self.async_abort(reason="unknown") return self.async_abort(reason="unknown")
return self.async_show_form( return self.async_show_form(

View file

@ -50,8 +50,7 @@ class MyPermobilCoordinator(DataUpdateCoordinator[MyPermobilData]):
except MyPermobilAPIException as err: except MyPermobilAPIException as err:
_LOGGER.exception( _LOGGER.exception(
"Error fetching data from MyPermobil API for account %s %s", "Error fetching data from MyPermobil API for account %s",
self.p_api.email, self.p_api.email,
err,
) )
raise UpdateFailed from err raise UpdateFailed from err

View file

@ -216,8 +216,8 @@ class PlexFlowHandler(ConfigFlow, domain=DOMAIN):
self.available_servers = available_servers.args[0] self.available_servers = available_servers.args[0]
return await self.async_step_select_server() return await self.async_step_select_server()
except Exception as error: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unknown error connecting to Plex server: %s", error) _LOGGER.exception("Unknown error connecting to Plex server")
return self.async_abort(reason="unknown") return self.async_abort(reason="unknown")
if errors: if errors:

View file

@ -62,8 +62,8 @@ class ProsegurConfigFlow(ConfigFlow, domain=DOMAIN):
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except InvalidAuth: except InvalidAuth:
errors["base"] = "invalid_auth" errors["base"] = "invalid_auth"
except Exception as exception: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception(exception) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
else: else:
self.user_input = user_input self.user_input = user_input

View file

@ -290,7 +290,7 @@ def execute(hass, filename, source, data=None, return_response=False):
raise HomeAssistantError( raise HomeAssistantError(
f"Error executing script ({type(err).__name__}): {err}" f"Error executing script ({type(err).__name__}): {err}"
) from err ) from err
logger.exception("Error executing script: %s", err) logger.exception("Error executing script")
return None return None
return restricted_globals["output"] return restricted_globals["output"]

View file

@ -55,8 +55,8 @@ def validate_table_schema_supports_utf8(
schema_errors = _validate_table_schema_supports_utf8( schema_errors = _validate_table_schema_supports_utf8(
instance, table_object, columns instance, table_object, columns
) )
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Error when validating DB schema: %s", exc) _LOGGER.exception("Error when validating DB schema")
_log_schema_errors(table_object, schema_errors) _log_schema_errors(table_object, schema_errors)
return schema_errors return schema_errors
@ -76,8 +76,8 @@ def validate_table_schema_has_correct_collation(
schema_errors = _validate_table_schema_has_correct_collation( schema_errors = _validate_table_schema_has_correct_collation(
instance, table_object instance, table_object
) )
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Error when validating DB schema: %s", exc) _LOGGER.exception("Error when validating DB schema")
_log_schema_errors(table_object, schema_errors) _log_schema_errors(table_object, schema_errors)
return schema_errors return schema_errors
@ -159,8 +159,8 @@ def validate_db_schema_precision(
return schema_errors return schema_errors
try: try:
schema_errors = _validate_db_schema_precision(instance, table_object) schema_errors = _validate_db_schema_precision(instance, table_object)
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Error when validating DB schema: %s", exc) _LOGGER.exception("Error when validating DB schema")
_log_schema_errors(table_object, schema_errors) _log_schema_errors(table_object, schema_errors)
return schema_errors return schema_errors

View file

@ -898,8 +898,8 @@ class Recorder(threading.Thread):
_LOGGER.debug("Processing task: %s", task) _LOGGER.debug("Processing task: %s", task)
try: try:
self._process_one_task_or_event_or_recover(task) self._process_one_task_or_event_or_recover(task)
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Error while processing event %s: %s", task, err) _LOGGER.exception("Error while processing event %s", task)
def _process_one_task_or_event_or_recover(self, task: RecorderTask | Event) -> None: def _process_one_task_or_event_or_recover(self, task: RecorderTask | Event) -> None:
"""Process a task or event, reconnect, or recover a malformed database.""" """Process a task or event, reconnect, or recover a malformed database."""
@ -921,11 +921,9 @@ class Recorder(threading.Thread):
except exc.DatabaseError as err: except exc.DatabaseError as err:
if self._handle_database_error(err): if self._handle_database_error(err):
return return
_LOGGER.exception( _LOGGER.exception("Unhandled database error while processing task %s", task)
"Unhandled database error while processing task %s: %s", task, err except SQLAlchemyError:
) _LOGGER.exception("SQLAlchemyError error processing task %s", task)
except SQLAlchemyError as err:
_LOGGER.exception("SQLAlchemyError error processing task %s: %s", task, err)
# Reset the session if an SQLAlchemyError (including DatabaseError) # Reset the session if an SQLAlchemyError (including DatabaseError)
# happens to rollback and recover # happens to rollback and recover
@ -941,10 +939,9 @@ class Recorder(threading.Thread):
return migration.initialize_database(self.get_session) return migration.initialize_database(self.get_session)
except UnsupportedDialect: except UnsupportedDialect:
break break
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception( _LOGGER.exception(
"Error during connection setup: %s (retrying in %s seconds)", "Error during connection setup: (retrying in %s seconds)",
err,
self.db_retry_wait, self.db_retry_wait,
) )
tries += 1 tries += 1
@ -1262,10 +1259,8 @@ class Recorder(threading.Thread):
try: try:
self.event_session.rollback() self.event_session.rollback()
self.event_session.close() self.event_session.close()
except SQLAlchemyError as err: except SQLAlchemyError:
_LOGGER.exception( _LOGGER.exception("Error while rolling back and closing the event session")
"Error while rolling back and closing the event session: %s", err
)
def _reopen_event_session(self) -> None: def _reopen_event_session(self) -> None:
"""Rollback the event session and reopen it after a failure.""" """Rollback the event session and reopen it after a failure."""
@ -1473,8 +1468,8 @@ class Recorder(threading.Thread):
self.recorder_runs_manager.end(self.event_session) self.recorder_runs_manager.end(self.event_session)
try: try:
self._commit_event_session_or_retry() self._commit_event_session_or_retry()
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Error saving the event session during shutdown: %s", err) _LOGGER.exception("Error saving the event session during shutdown")
self.event_session.close() self.event_session.close()
self.recorder_runs_manager.clear() self.recorder_runs_manager.clear()

View file

@ -183,8 +183,8 @@ def get_schema_version(session_maker: Callable[[], Session]) -> int | None:
try: try:
with session_scope(session=session_maker(), read_only=True) as session: with session_scope(session=session_maker(), read_only=True) as session:
return _get_schema_version(session) return _get_schema_version(session)
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Error when determining DB schema version: %s", err) _LOGGER.exception("Error when determining DB schema version")
return None return None
@ -1786,8 +1786,8 @@ def initialize_database(session_maker: Callable[[], Session]) -> bool:
with session_scope(session=session_maker()) as session: with session_scope(session=session_maker()) as session:
return _initialize_database(session) return _initialize_database(session)
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Error when initialise database: %s", err) _LOGGER.exception("Error when initialise database")
return False return False

View file

@ -18,8 +18,8 @@ def ulid_to_bytes_or_none(ulid: str | None) -> bytes | None:
return None return None
try: try:
return ulid_to_bytes(ulid) return ulid_to_bytes(ulid)
except ValueError as ex: except ValueError:
_LOGGER.exception("Error converting ulid %s to bytes: %s", ulid, ex) _LOGGER.exception("Error converting ulid %s to bytes", ulid)
return None return None
@ -29,8 +29,8 @@ def bytes_to_ulid_or_none(_bytes: bytes | None) -> str | None:
return None return None
try: try:
return bytes_to_ulid(_bytes) return bytes_to_ulid(_bytes)
except ValueError as ex: except ValueError:
_LOGGER.exception("Error converting bytes %s to ulid: %s", _bytes, ex) _LOGGER.exception("Error converting bytes %s to ulid", _bytes)
return None return None

View file

@ -143,7 +143,7 @@ def session_scope(
need_rollback = True need_rollback = True
session.commit() session.commit()
except Exception as err: # pylint: disable=broad-except except Exception as err: # pylint: disable=broad-except
_LOGGER.exception("Error executing query: %s", err) _LOGGER.exception("Error executing query")
if need_rollback: if need_rollback:
session.rollback() session.rollback()
if not exception_filter or not exception_filter(err): if not exception_filter or not exception_filter(err):

View file

@ -547,9 +547,9 @@ class ReolinkHost:
self._long_poll_error = True self._long_poll_error = True
await asyncio.sleep(LONG_POLL_ERROR_COOLDOWN) await asyncio.sleep(LONG_POLL_ERROR_COOLDOWN)
continue continue
except Exception as ex: except Exception:
_LOGGER.exception( _LOGGER.exception(
"Unexpected exception while requesting ONVIF pull point: %s", ex "Unexpected exception while requesting ONVIF pull point"
) )
await self._api.unsubscribe(sub_type=SubType.long_poll) await self._api.unsubscribe(sub_type=SubType.long_poll)
raise raise
@ -652,11 +652,9 @@ class ReolinkHost:
message = data.decode("utf-8") message = data.decode("utf-8")
channels = await self._api.ONVIF_event_callback(message) channels = await self._api.ONVIF_event_callback(message)
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception( _LOGGER.exception(
"Error processing ONVIF event for Reolink %s: %s", "Error processing ONVIF event for Reolink %s", self._api.nvr_name
self._api.nvr_name,
ex,
) )
return return

View file

@ -219,8 +219,8 @@ class RestSwitch(ManualTriggerEntity, SwitchEntity):
req = await self.get_device_state(self.hass) req = await self.get_device_state(self.hass)
except (TimeoutError, httpx.TimeoutException): except (TimeoutError, httpx.TimeoutException):
_LOGGER.exception("Timed out while fetching data") _LOGGER.exception("Timed out while fetching data")
except httpx.RequestError as err: except httpx.RequestError:
_LOGGER.exception("Error while fetching data: %s", err) _LOGGER.exception("Error while fetching data")
if req: if req:
self._process_manual_data(req.text) self._process_manual_data(req.text)

View file

@ -69,11 +69,11 @@ class RoborockFlowHandler(ConfigFlow, domain=DOMAIN):
errors["base"] = "unknown_url" errors["base"] = "unknown_url"
except RoborockInvalidEmail: except RoborockInvalidEmail:
errors["base"] = "invalid_email_format" errors["base"] = "invalid_email_format"
except RoborockException as ex: except RoborockException:
_LOGGER.exception(ex) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown_roborock" errors["base"] = "unknown_roborock"
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception(ex) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
return errors return errors
@ -92,11 +92,11 @@ class RoborockFlowHandler(ConfigFlow, domain=DOMAIN):
login_data = await self._client.code_login(code) login_data = await self._client.code_login(code)
except RoborockInvalidCode: except RoborockInvalidCode:
errors["base"] = "invalid_code" errors["base"] = "invalid_code"
except RoborockException as ex: except RoborockException:
_LOGGER.exception(ex) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown_roborock" errors["base"] = "unknown_roborock"
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception(ex) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
else: else:
if self.reauth_entry is not None: if self.reauth_entry is not None:

View file

@ -187,12 +187,10 @@ class SerialSensor(SensorEntity):
**kwargs, **kwargs,
) )
except SerialException as exc: except SerialException:
if not logged_error: if not logged_error:
_LOGGER.exception( _LOGGER.exception(
"Unable to connect to the serial device %s: %s. Will retry", "Unable to connect to the serial device %s. Will retry", device
device,
exc,
) )
logged_error = True logged_error = True
await self._handle_error() await self._handle_error()
@ -201,9 +199,9 @@ class SerialSensor(SensorEntity):
while True: while True:
try: try:
line = await reader.readline() line = await reader.readline()
except SerialException as exc: except SerialException:
_LOGGER.exception( _LOGGER.exception(
"Error while reading serial device %s: %s", device, exc "Error while reading serial device %s", device
) )
await self._handle_error() await self._handle_error()
break break

View file

@ -58,8 +58,8 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
rendered_args = args_compiled.async_render( rendered_args = args_compiled.async_render(
variables=service.data, parse_result=False variables=service.data, parse_result=False
) )
except TemplateError as ex: except TemplateError:
_LOGGER.exception("Error rendering command template: %s", ex) _LOGGER.exception("Error rendering command template")
raise raise
else: else:
rendered_args = None rendered_args = None

View file

@ -77,8 +77,8 @@ def validate_input(data: dict[str, Any]) -> dict[str, str] | None:
return {"base": "invalid_account_format"} return {"base": "invalid_account_format"}
except InvalidAccountLengthError: except InvalidAccountLengthError:
return {"base": "invalid_account_length"} return {"base": "invalid_account_length"}
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unexpected exception from SIAAccount: %s", exc) _LOGGER.exception("Unexpected exception from SIAAccount")
return {"base": "unknown"} return {"base": "unknown"}
if not 1 <= data[CONF_PING_INTERVAL] <= 1440: if not 1 <= data[CONF_PING_INTERVAL] <= 1440:
return {"base": "invalid_ping"} return {"base": "invalid_ping"}

View file

@ -68,7 +68,7 @@ class SlackFlowHandler(ConfigFlow, domain=DOMAIN):
if ex.response["error"] == "invalid_auth": if ex.response["error"] == "invalid_auth":
return "invalid_auth", None return "invalid_auth", None
return "cannot_connect", None return "cannot_connect", None
except Exception as ex: # pylint:disable=broad-except except Exception: # pylint:disable=broad-except
_LOGGER.exception("Unexpected exception: %s", ex) _LOGGER.exception("Unexpected exception")
return "unknown", None return "unknown", None
return None, info return None, info

View file

@ -104,8 +104,8 @@ class TeslaWallConnectorConfigFlow(ConfigFlow, domain=DOMAIN):
info = await validate_input(self.hass, user_input) info = await validate_input(self.hass, user_input)
except WallConnectorError: except WallConnectorError:
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except Exception as ex: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Unexpected exception: %s", ex) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
if not errors: if not errors:

View file

@ -154,7 +154,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
}, },
) )
ir.async_delete_issue(hass, DOMAIN, "ea_channel_warning") ir.async_delete_issue(hass, DOMAIN, "ea_channel_warning")
_LOGGER.exception("Error setting up UniFi Protect integration: %s", err) _LOGGER.exception("Error setting up UniFi Protect integration")
raise raise
return True return True

View file

@ -45,8 +45,8 @@ async def get_by_station_number(
measuring_station = await client.get_by_station_number(station_number) measuring_station = await client.get_by_station_number(station_number)
except WAQIConnectionError: except WAQIConnectionError:
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception(exc) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
return measuring_station, errors return measuring_station, errors
@ -76,8 +76,8 @@ class WAQIConfigFlow(ConfigFlow, domain=DOMAIN):
errors["base"] = "invalid_auth" errors["base"] = "invalid_auth"
except WAQIConnectionError: except WAQIConnectionError:
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception(exc) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
else: else:
self.data = user_input self.data = user_input
@ -118,8 +118,8 @@ class WAQIConfigFlow(ConfigFlow, domain=DOMAIN):
) )
except WAQIConnectionError: except WAQIConnectionError:
errors["base"] = "cannot_connect" errors["base"] = "cannot_connect"
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception(exc) _LOGGER.exception("Unexpected exception")
errors["base"] = "unknown" errors["base"] = "unknown"
else: else:
return await self._async_create_entry(measuring_station) return await self._async_create_entry(measuring_station)

View file

@ -289,7 +289,7 @@ async def handle_call_service(
translation_placeholders=err.translation_placeholders, translation_placeholders=err.translation_placeholders,
) )
except HomeAssistantError as err: except HomeAssistantError as err:
connection.logger.exception(err) connection.logger.exception("Unexpected exception")
connection.send_error( connection.send_error(
msg["id"], msg["id"],
const.ERR_HOME_ASSISTANT_ERROR, const.ERR_HOME_ASSISTANT_ERROR,
@ -299,7 +299,7 @@ async def handle_call_service(
translation_placeholders=err.translation_placeholders, translation_placeholders=err.translation_placeholders,
) )
except Exception as err: # pylint: disable=broad-except except Exception as err: # pylint: disable=broad-except
connection.logger.exception(err) connection.logger.exception("Unexpected exception")
connection.send_error(msg["id"], const.ERR_UNKNOWN_ERROR, str(err)) connection.send_error(msg["id"], const.ERR_UNKNOWN_ERROR, str(err))

View file

@ -205,7 +205,7 @@ class DeviceCoordinator(DataUpdateCoordinator[None]): # pylint: disable=hass-en
except Exception as err: # pylint: disable=broad-except except Exception as err: # pylint: disable=broad-except
self.last_exception = err self.last_exception = err
self.last_update_success = False self.last_update_success = False
_LOGGER.exception("Unexpected error fetching %s data: %s", self.name, err) _LOGGER.exception("Unexpected error fetching %s data", self.name)
else: else:
self.async_set_updated_data(None) self.async_set_updated_data(None)

View file

@ -126,8 +126,8 @@ class WyomingSttProvider(stt.SpeechToTextEntity):
text = transcript.text text = transcript.text
break break
except (OSError, WyomingError) as err: except (OSError, WyomingError):
_LOGGER.exception("Error processing audio stream: %s", err) _LOGGER.exception("Error processing audio stream")
return stt.SpeechResult(None, stt.SpeechResultState.ERROR) return stt.SpeechResult(None, stt.SpeechResultState.ERROR)
return stt.SpeechResult( return stt.SpeechResult(

View file

@ -187,8 +187,8 @@ class WyomingWakeWordProvider(wake_word.WakeWordDetectionEntity):
for task in pending: for task in pending:
task.cancel() task.cancel()
except (OSError, WyomingError) as err: except (OSError, WyomingError):
_LOGGER.exception("Error processing audio stream: %s", err) _LOGGER.exception("Error processing audio stream")
return None return None

View file

@ -1101,10 +1101,8 @@ class HomeAssistant:
_LOGGER.exception( _LOGGER.exception(
"Task %s could not be canceled during final shutdown stage", task "Task %s could not be canceled during final shutdown stage", task
) )
except Exception as exc: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception( _LOGGER.exception("Task %s error during final shutdown stage", task)
"Task %s error during final shutdown stage: %s", task, exc
)
# Prevent run_callback_threadsafe from scheduling any additional # Prevent run_callback_threadsafe from scheduling any additional
# callbacks in the event loop as callbacks created on the futures # callbacks in the event loop as callbacks created on the futures

View file

@ -489,8 +489,8 @@ class FlowManager(abc.ABC, Generic[_FlowResultT, _HandlerT]):
flow.async_cancel_progress_task() flow.async_cancel_progress_task()
try: try:
flow.async_remove() flow.async_remove()
except Exception as err: # pylint: disable=broad-except except Exception: # pylint: disable=broad-except
_LOGGER.exception("Error removing %s flow: %s", flow.handler, err) _LOGGER.exception("Error removing %s flow", flow.handler)
async def _async_handle_step( async def _async_handle_step(
self, self,

View file

@ -383,9 +383,7 @@ class DataUpdateCoordinator(BaseDataUpdateCoordinatorProtocol, Generic[_DataT]):
except Exception as err: # pylint: disable=broad-except except Exception as err: # pylint: disable=broad-except
self.last_exception = err self.last_exception = err
self.last_update_success = False self.last_update_success = False
self.logger.exception( self.logger.exception("Unexpected error fetching %s data", self.name)
"Unexpected error fetching %s data: %s", self.name, err
)
else: else:
if not self.last_update_success: if not self.last_update_success:

View file

@ -715,8 +715,7 @@ ignore = [
"PT019", "PT019",
"TRY002", "TRY002",
"TRY301", "TRY301",
"TRY300", "TRY300"
"TRY401"
] ]
[tool.ruff.lint.flake8-import-conventions.extend-aliases] [tool.ruff.lint.flake8-import-conventions.extend-aliases]

View file

@ -143,7 +143,7 @@ raise Exception('boom')
hass.async_add_executor_job(execute, hass, "test.py", source, {}) hass.async_add_executor_job(execute, hass, "test.py", source, {})
await hass.async_block_till_done() await hass.async_block_till_done()
assert "Error executing script: boom" in caplog.text assert "Error executing script" in caplog.text
async def test_execute_runtime_error_with_response(hass: HomeAssistant) -> None: async def test_execute_runtime_error_with_response(hass: HomeAssistant) -> None:

View file

@ -189,7 +189,7 @@ async def test_abort_calls_async_remove_with_exception(
with caplog.at_level(logging.ERROR): with caplog.at_level(logging.ERROR):
await manager.async_init("test") await manager.async_init("test")
assert "Error removing test flow: error" in caplog.text assert "Error removing test flow" in caplog.text
TestFlow.async_remove.assert_called_once() TestFlow.async_remove.assert_called_once()