Move I/O to executor thread pool (#23589)

* Move I/O to executor thread pool

* Check if image is in whitelist_external_dir

* Move import to top of file

* Fix bad indentation
This commit is contained in:
Cyro 2019-05-02 01:00:17 +02:00 committed by Aaron Bach
parent d9d5c91adc
commit beb678e259

View file

@ -1,5 +1,6 @@
"""Discord platform for notify component.""" """Discord platform for notify component."""
import logging import logging
import os.path
import voluptuous as vol import voluptuous as vol
@ -33,6 +34,13 @@ class DiscordNotificationService(BaseNotificationService):
self.token = token self.token = token
self.hass = hass self.hass = hass
def file_exists(self, filename):
"""Check if a file exists on disk and is in authorized path."""
if not self.hass.config.is_allowed_path(filename):
return False
return os.path.isfile(filename)
async def async_send_message(self, message, **kwargs): async def async_send_message(self, message, **kwargs):
"""Login to Discord, send message to channel(s) and log out.""" """Login to Discord, send message to channel(s) and log out."""
import discord import discord
@ -49,11 +57,14 @@ class DiscordNotificationService(BaseNotificationService):
data = kwargs.get(ATTR_DATA) data = kwargs.get(ATTR_DATA)
if ATTR_IMAGES in data: if ATTR_IMAGES in data:
import os.path
images = list() images = list()
for image in data.get(ATTR_IMAGES): for image in data.get(ATTR_IMAGES):
if os.path.isfile(image): image_exists = await self.hass.async_add_executor_job(
self.file_exists,
image)
if image_exists:
images.append(image) images.append(image)
else: else:
_LOGGER.warning("Image not found: %s", image) _LOGGER.warning("Image not found: %s", image)