From 51508d69ad91c0bca1a7c326841ccf95b8f03fa7 Mon Sep 17 00:00:00 2001 From: Diogo Gomes Date: Fri, 12 Apr 2019 22:28:59 +0100 Subject: [PATCH] Bandage telegram bot (#23022) * Bandage * lint * move everything into __init__.py * fix lint --- .../components/telegram_bot/__init__.py | 85 ++++++++++++------- .../components/telegram_bot/broadcast.py | 4 +- .../components/telegram_bot/polling.py | 6 +- .../components/telegram_bot/webhooks.py | 29 +------ 4 files changed, 57 insertions(+), 67 deletions(-) diff --git a/homeassistant/components/telegram_bot/__init__.py b/homeassistant/components/telegram_bot/__init__.py index a77b8603853..66f074273ef 100644 --- a/homeassistant/components/telegram_bot/__init__.py +++ b/homeassistant/components/telegram_bot/__init__.py @@ -1,5 +1,6 @@ """Support to send and receive Telegram messages.""" import io +from ipaddress import ip_network from functools import partial import importlib import logging @@ -12,7 +13,7 @@ from homeassistant.components.notify import ( ATTR_DATA, ATTR_MESSAGE, ATTR_TITLE) from homeassistant.const import ( ATTR_COMMAND, ATTR_LATITUDE, ATTR_LONGITUDE, CONF_API_KEY, - CONF_PLATFORM, CONF_TIMEOUT, HTTP_DIGEST_AUTHENTICATION) + CONF_PLATFORM, CONF_TIMEOUT, HTTP_DIGEST_AUTHENTICATION, CONF_URL) import homeassistant.helpers.config_validation as cv from homeassistant.exceptions import TemplateError @@ -51,6 +52,7 @@ ATTR_VERIFY_SSL = 'verify_ssl' CONF_ALLOWED_CHAT_IDS = 'allowed_chat_ids' CONF_PROXY_URL = 'proxy_url' CONF_PROXY_PARAMS = 'proxy_params' +CONF_TRUSTED_NETWORKS = 'trusted_networks' DOMAIN = 'telegram_bot' @@ -73,17 +75,34 @@ EVENT_TELEGRAM_TEXT = 'telegram_text' PARSER_HTML = 'html' PARSER_MD = 'markdown' -PLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend({ - vol.Required(CONF_PLATFORM): vol.In(('broadcast', 'polling', 'webhooks')), - vol.Required(CONF_API_KEY): cv.string, - vol.Required(CONF_ALLOWED_CHAT_IDS): - vol.All(cv.ensure_list, [vol.Coerce(int)]), - vol.Optional(ATTR_PARSER, default=PARSER_MD): cv.string, - vol.Optional(CONF_PROXY_URL): cv.string, - vol.Optional(CONF_PROXY_PARAMS): dict, -}) +DEFAULT_TRUSTED_NETWORKS = [ + ip_network('149.154.167.197/32'), + ip_network('149.154.167.198/31'), + ip_network('149.154.167.200/29'), + ip_network('149.154.167.208/28'), + ip_network('149.154.167.224/29'), + ip_network('149.154.167.232/31') +] -PLATFORM_SCHEMA_BASE = cv.PLATFORM_SCHEMA_BASE.extend(PLATFORM_SCHEMA.schema) +CONFIG_SCHEMA = vol.Schema({ + DOMAIN: vol.All(cv.ensure_list, [ + vol.Schema({ + vol.Required(CONF_PLATFORM): vol.In( + ('broadcast', 'polling', 'webhooks')), + vol.Required(CONF_API_KEY): cv.string, + vol.Required(CONF_ALLOWED_CHAT_IDS): + vol.All(cv.ensure_list, [vol.Coerce(int)]), + vol.Optional(ATTR_PARSER, default=PARSER_MD): cv.string, + vol.Optional(CONF_PROXY_URL): cv.string, + vol.Optional(CONF_PROXY_PARAMS): dict, + # webhooks + vol.Optional(CONF_URL): cv.url, + vol.Optional(CONF_TRUSTED_NETWORKS, + default=DEFAULT_TRUSTED_NETWORKS): + vol.All(cv.ensure_list, [ip_network]) + }) + ]) +}, extra=vol.ALLOW_EXTRA) BASE_SERVICE_SCHEMA = vol.Schema({ vol.Optional(ATTR_TARGET): vol.All(cv.ensure_list, [vol.Coerce(int)]), @@ -213,33 +232,33 @@ async def async_setup(hass, config): if not config[DOMAIN]: return False - p_config = config[DOMAIN][0] + for p_config in config[DOMAIN]: - p_type = p_config.get(CONF_PLATFORM) + p_type = p_config.get(CONF_PLATFORM) - platform = importlib.import_module('.{}'.format(config[CONF_PLATFORM]), - __name__) + platform = importlib.import_module( + '.{}'.format(p_config[CONF_PLATFORM]), __name__) - _LOGGER.info("Setting up %s.%s", DOMAIN, p_type) - try: - receiver_service = await \ - platform.async_setup_platform(hass, p_config) - if receiver_service is False: - _LOGGER.error( - "Failed to initialize Telegram bot %s", p_type) + _LOGGER.info("Setting up %s.%s", DOMAIN, p_type) + try: + receiver_service = await \ + platform.async_setup_platform(hass, p_config) + if receiver_service is False: + _LOGGER.error( + "Failed to initialize Telegram bot %s", p_type) + return False + + except Exception: # pylint: disable=broad-except + _LOGGER.exception("Error setting up platform %s", p_type) return False - except Exception: # pylint: disable=broad-except - _LOGGER.exception("Error setting up platform %s", p_type) - return False - - bot = initialize_bot(p_config) - notify_service = TelegramNotificationService( - hass, - bot, - p_config.get(CONF_ALLOWED_CHAT_IDS), - p_config.get(ATTR_PARSER) - ) + bot = initialize_bot(p_config) + notify_service = TelegramNotificationService( + hass, + bot, + p_config.get(CONF_ALLOWED_CHAT_IDS), + p_config.get(ATTR_PARSER) + ) async def async_send_telegram_message(service): """Handle sending Telegram Bot message service calls.""" diff --git a/homeassistant/components/telegram_bot/broadcast.py b/homeassistant/components/telegram_bot/broadcast.py index a129ebf6604..e78c28bd0c4 100644 --- a/homeassistant/components/telegram_bot/broadcast.py +++ b/homeassistant/components/telegram_bot/broadcast.py @@ -1,12 +1,10 @@ """Support for Telegram bot to send messages only.""" import logging -from . import PLATFORM_SCHEMA as TELEGRAM_PLATFORM_SCHEMA, initialize_bot +from . import initialize_bot _LOGGER = logging.getLogger(__name__) -PLATFORM_SCHEMA = TELEGRAM_PLATFORM_SCHEMA - async def async_setup_platform(hass, config): """Set up the Telegram broadcast platform.""" diff --git a/homeassistant/components/telegram_bot/polling.py b/homeassistant/components/telegram_bot/polling.py index 7d0039319e3..0d3a8810911 100644 --- a/homeassistant/components/telegram_bot/polling.py +++ b/homeassistant/components/telegram_bot/polling.py @@ -5,14 +5,10 @@ from homeassistant.const import ( EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STOP) from homeassistant.core import callback -from . import ( - CONF_ALLOWED_CHAT_IDS, PLATFORM_SCHEMA as TELEGRAM_PLATFORM_SCHEMA, - BaseTelegramBotEntity, initialize_bot) +from . import (CONF_ALLOWED_CHAT_IDS, BaseTelegramBotEntity, initialize_bot) _LOGGER = logging.getLogger(__name__) -PLATFORM_SCHEMA = TELEGRAM_PLATFORM_SCHEMA - async def async_setup_platform(hass, config): """Set up the Telegram polling platform.""" diff --git a/homeassistant/components/telegram_bot/webhooks.py b/homeassistant/components/telegram_bot/webhooks.py index 1a2839b176e..b3b6add0a1c 100644 --- a/homeassistant/components/telegram_bot/webhooks.py +++ b/homeassistant/components/telegram_bot/webhooks.py @@ -1,43 +1,20 @@ """Support for Telegram bots using webhooks.""" import datetime as dt -from ipaddress import ip_network import logging -import voluptuous as vol - from homeassistant.components.http import HomeAssistantView from homeassistant.components.http.const import KEY_REAL_IP from homeassistant.const import ( - CONF_URL, EVENT_HOMEASSISTANT_STOP, HTTP_BAD_REQUEST, HTTP_UNAUTHORIZED) -import homeassistant.helpers.config_validation as cv + EVENT_HOMEASSISTANT_STOP, HTTP_BAD_REQUEST, HTTP_UNAUTHORIZED) -from . import ( - CONF_ALLOWED_CHAT_IDS, PLATFORM_SCHEMA, BaseTelegramBotEntity, - initialize_bot) +from . import (CONF_ALLOWED_CHAT_IDS, CONF_TRUSTED_NETWORKS, CONF_URL, + BaseTelegramBotEntity, initialize_bot) _LOGGER = logging.getLogger(__name__) TELEGRAM_HANDLER_URL = '/api/telegram_webhooks' REMOVE_HANDLER_URL = '' -CONF_TRUSTED_NETWORKS = 'trusted_networks' - -DEFAULT_TRUSTED_NETWORKS = [ - ip_network('149.154.167.197/32'), - ip_network('149.154.167.198/31'), - ip_network('149.154.167.200/29'), - ip_network('149.154.167.208/28'), - ip_network('149.154.167.224/29'), - ip_network('149.154.167.232/31') -] - -# pylint: disable=no-value-for-parameter -PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Optional(CONF_URL): vol.Url(), - vol.Optional(CONF_TRUSTED_NETWORKS, default=DEFAULT_TRUSTED_NETWORKS): - vol.All(cv.ensure_list, [ip_network]) -}) - async def async_setup_platform(hass, config): """Set up the Telegram webhooks platform."""