chore: add some constants for exception messages to satisfy the linter

This commit is contained in:
Xavier Morel
2025-03-21 17:54:03 +01:00
parent 1c6c04dd33
commit 49d40a3a92
3 changed files with 27 additions and 14 deletions

View File

@@ -14,6 +14,9 @@ from .const import (
ECOCITO_COLLECTION_ENDPOINT, ECOCITO_COLLECTION_ENDPOINT,
ECOCITO_COLLECTION_TYPE_ENDPOINT, ECOCITO_COLLECTION_TYPE_ENDPOINT,
ECOCITO_DEFAULT_COLLECTION_TYPE, ECOCITO_DEFAULT_COLLECTION_TYPE,
ECOCITO_ERROR_AUTHENTICATION,
ECOCITO_ERROR_FETCHING,
ECOCITO_ERROR_UNHANDLED,
ECOCITO_GARBAGE_COLLECTION_TYPE, ECOCITO_GARBAGE_COLLECTION_TYPE,
ECOCITO_LOGIN_ENDPOINT, ECOCITO_LOGIN_ENDPOINT,
ECOCITO_LOGIN_PASSWORD_KEY, ECOCITO_LOGIN_PASSWORD_KEY,
@@ -78,7 +81,7 @@ class EcocitoClient:
raise InvalidAuthenticationError(error[0].find("li").text) raise InvalidAuthenticationError(error[0].find("li").text)
LOGGER.debug("Connected as %s", self._username) LOGGER.debug("Connected as %s", self._username)
except aiohttp.ClientError as e: except aiohttp.ClientError as e:
raise EcocitoError(f"Authentication error: {e}") from e raise EcocitoError(ECOCITO_ERROR_AUTHENTICATION.format(exc=e)) from e
async def get_collection_types(self) -> dict: async def get_collection_types(self) -> dict:
"""Return the mapping of collection type ID with their label.""" """Return the mapping of collection type ID with their label."""
@@ -100,7 +103,9 @@ class EcocitoClient:
except Exception as e: # noqa: BLE001 except Exception as e: # noqa: BLE001
await self._handle_error(content, e) await self._handle_error(content, e)
except aiohttp.ClientError as e: except aiohttp.ClientError as e:
raise EcocitoError(f"Unable to get collection types: {e}") from e raise EcocitoError(
ECOCITO_ERROR_FETCHING.format(exc=e, type="collection types")
) from e
async def get_collection_events( async def get_collection_events(
self, event_type: str, year: int self, event_type: str, year: int
@@ -138,7 +143,9 @@ class EcocitoClient:
await self._handle_error(content, e) await self._handle_error(content, e)
except aiohttp.ClientError as e: except aiohttp.ClientError as e:
raise EcocitoError(f"Unable to get collection events: {e}") from e raise EcocitoError(
ECOCITO_ERROR_FETCHING.format(exc=e, type="collection events")
) from e
async def get_garbage_collections(self, year: int) -> list[CollectionEvent]: async def get_garbage_collections(self, year: int) -> list[CollectionEvent]:
"""Return the list of the garbage collections for a year.""" """Return the list of the garbage collections for a year."""
@@ -179,10 +186,12 @@ class EcocitoClient:
await self._handle_error(content, e) await self._handle_error(content, e)
except aiohttp.ClientError as e: except aiohttp.ClientError as e:
raise EcocitoError(f"Unable to get waste deposit visits: {e}") from e raise EcocitoError(
ECOCITO_ERROR_FETCHING.format(exc=e, type="waste deposit events")
) from e
async def _handle_error(self, content: str, e: Exception): async def _handle_error(self, content: str, e: Exception) -> None:
"""Handle a request error by checking for login form and re-authenticating if necessary.""" """Handle request errors by checking for login form and re-auth if necessary."""
html = bs(content, "html.parser") html = bs(content, "html.parser")
form = html.find("form", action=re.compile(f"{ECOCITO_LOGIN_URI}")) form = html.find("form", action=re.compile(f"{ECOCITO_LOGIN_URI}"))
@@ -190,4 +199,4 @@ class EcocitoClient:
LOGGER.debug("The session has expired, try to login again.") LOGGER.debug("The session has expired, try to login again.")
await self.authenticate() await self.authenticate()
else: else:
raise EcocitoError("Unhandled request error") from e raise EcocitoError(ECOCITO_ERROR_UNHANDLED) from e

View File

@@ -8,18 +8,15 @@ LOGGER = logging.getLogger(__package__)
# Config Flow # Config Flow
# Service Device # Service Device
DEVICE_ATTRIBUTION = "Données fournies par Ecocito" DEVICE_ATTRIBUTION = "Données fournies par Ecocito"
DEVICE_NAME = "Ecocito" DEVICE_NAME = "Ecocito"
DEVICE_MANUFACTURER = "Ecocito" DEVICE_MANUFACTURER = "Ecocito"
DEVICE_MODEL = "Calendrier Ecocito" DEVICE_MODEL = "Calendrier Ecocito"
# Ecocito - Base # Ecocito - Base
ECOCITO_DOMAIN = "{}.ecocito.com" ECOCITO_DOMAIN = "{}.ecocito.com"
# Ecocito - Login # Ecocito - Login
ECOCITO_LOGIN_URI = "/Usager/Profil/Connexion" ECOCITO_LOGIN_URI = "/Usager/Profil/Connexion"
ECOCITO_LOGIN_ENDPOINT = f"https://{ECOCITO_DOMAIN}{ECOCITO_LOGIN_URI}" ECOCITO_LOGIN_ENDPOINT = f"https://{ECOCITO_DOMAIN}{ECOCITO_LOGIN_URI}"
ECOCITO_LOGIN_USERNAME_KEY = "Identifiant" ECOCITO_LOGIN_USERNAME_KEY = "Identifiant"
@@ -36,3 +33,12 @@ ECOCITO_COLLECTION_TYPE_ENDPOINT = f"https://{ECOCITO_DOMAIN}/Usager/Collecte"
# Ecocito - Waste deposit visits # Ecocito - Waste deposit visits
ECOCITO_WASTE_DEPOSIT_ENDPOINT = f"https://{ECOCITO_DOMAIN}/Usager/Apport/GetApport" ECOCITO_WASTE_DEPOSIT_ENDPOINT = f"https://{ECOCITO_DOMAIN}/Usager/Apport/GetApport"
# Ecocito - Errors
ECOCITO_ERROR_AUTHENTICATION = "Authentication error: {exc}"
ECOCITO_ERROR_FETCHING = "Unable to get {type}: {exc}"
ECOCITO_ERROR_UNHANDLED = "Unhandled request error"
ECOCITO_MESSAGE_REAUTHENTICATE = (
"Credentials are no longer valid. Please reauthenticate"
)

View File

@@ -13,7 +13,7 @@ from homeassistant.exceptions import ConfigEntryAuthFailed
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
from .client import CollectionEvent, EcocitoClient, WasteDepotVisit from .client import CollectionEvent, EcocitoClient, WasteDepotVisit
from .const import DOMAIN, LOGGER from .const import DOMAIN, ECOCITO_MESSAGE_REAUTHENTICATE, LOGGER
from .errors import CannotConnectError, InvalidAuthenticationError from .errors import CannotConnectError, InvalidAuthenticationError
T = TypeVar("T", bound=list[CollectionEvent] | list[WasteDepotVisit]) T = TypeVar("T", bound=list[CollectionEvent] | list[WasteDepotVisit])
@@ -46,9 +46,7 @@ class EcocitoDataUpdateCoordinator(DataUpdateCoordinator[T], Generic[T], ABC):
except CannotConnectError as ex: except CannotConnectError as ex:
raise UpdateFailed(ex) from ex raise UpdateFailed(ex) from ex
except InvalidAuthenticationError as ex: except InvalidAuthenticationError as ex:
raise ConfigEntryAuthFailed( raise ConfigEntryAuthFailed(ECOCITO_MESSAGE_REAUTHENTICATE) from ex
"Credentials are no longer valid. Please reauthenticate"
) from ex
@abstractmethod @abstractmethod
async def _fetch_data(self) -> T: async def _fetch_data(self) -> T: