mirror of
https://github.com/home-assistant/core
synced 2024-08-02 23:40:32 +02:00
79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
"""The fritzbox_callmonitor integration."""
|
|
import logging
|
|
|
|
from fritzconnection.core.exceptions import FritzConnectionException, FritzSecurityError
|
|
from requests.exceptions import ConnectionError as RequestsConnectionError
|
|
|
|
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
|
|
from homeassistant.exceptions import ConfigEntryNotReady
|
|
|
|
from .base import FritzBoxPhonebook
|
|
from .const import (
|
|
CONF_PHONEBOOK,
|
|
CONF_PREFIXES,
|
|
DOMAIN,
|
|
FRITZBOX_PHONEBOOK,
|
|
PLATFORMS,
|
|
UNDO_UPDATE_LISTENER,
|
|
)
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
async def async_setup_entry(hass, config_entry):
|
|
"""Set up the fritzbox_callmonitor platforms."""
|
|
fritzbox_phonebook = FritzBoxPhonebook(
|
|
host=config_entry.data[CONF_HOST],
|
|
username=config_entry.data[CONF_USERNAME],
|
|
password=config_entry.data[CONF_PASSWORD],
|
|
phonebook_id=config_entry.data[CONF_PHONEBOOK],
|
|
prefixes=config_entry.options.get(CONF_PREFIXES),
|
|
)
|
|
|
|
try:
|
|
await hass.async_add_executor_job(fritzbox_phonebook.init_phonebook)
|
|
except FritzSecurityError as ex:
|
|
_LOGGER.error(
|
|
"User has insufficient permissions to access AVM FRITZ!Box settings and its phonebooks: %s",
|
|
ex,
|
|
)
|
|
return False
|
|
except FritzConnectionException as ex:
|
|
_LOGGER.error("Invalid authentication: %s", ex)
|
|
return False
|
|
except RequestsConnectionError as ex:
|
|
_LOGGER.error("Unable to connect to AVM FRITZ!Box call monitor: %s", ex)
|
|
raise ConfigEntryNotReady from ex
|
|
|
|
undo_listener = config_entry.add_update_listener(update_listener)
|
|
|
|
hass.data.setdefault(DOMAIN, {})
|
|
hass.data[DOMAIN][config_entry.entry_id] = {
|
|
FRITZBOX_PHONEBOOK: fritzbox_phonebook,
|
|
UNDO_UPDATE_LISTENER: undo_listener,
|
|
}
|
|
|
|
hass.config_entries.async_setup_platforms(config_entry, PLATFORMS)
|
|
|
|
return True
|
|
|
|
|
|
async def async_unload_entry(hass, config_entry):
|
|
"""Unloading the fritzbox_callmonitor platforms."""
|
|
|
|
unload_ok = await hass.config_entries.async_unload_platforms(
|
|
config_entry, PLATFORMS
|
|
)
|
|
|
|
hass.data[DOMAIN][config_entry.entry_id][UNDO_UPDATE_LISTENER]()
|
|
|
|
if unload_ok:
|
|
hass.data[DOMAIN].pop(config_entry.entry_id)
|
|
|
|
return unload_ok
|
|
|
|
|
|
async def update_listener(hass, config_entry):
|
|
"""Update listener to reload after option has changed."""
|
|
await hass.config_entries.async_reload(config_entry.entry_id)
|