From 681082a3adc40db146197fa295305f47b5c98746 Mon Sep 17 00:00:00 2001 From: Fabian Affolter <mail@fabian-affolter.ch> Date: Sun, 29 Jul 2018 23:39:01 +0200 Subject: [PATCH] Various updates (#15738) --- homeassistant/components/camera/proxy.py | 71 +++++++++++------------- requirements_all.txt | 2 +- 2 files changed, 33 insertions(+), 40 deletions(-) diff --git a/homeassistant/components/camera/proxy.py b/homeassistant/components/camera/proxy.py index d88d52c4c8a..a695848d1fa 100644 --- a/homeassistant/components/camera/proxy.py +++ b/homeassistant/components/camera/proxy.py @@ -2,56 +2,53 @@ Proxy camera platform that enables image processing of camera data. For more details about this platform, please refer to the documentation -https://home-assistant.io/components/proxy +https://www.home-assistant.io/components/camera.proxy/ """ -import logging import asyncio +import logging + import aiohttp import async_timeout - import voluptuous as vol -from homeassistant.util.async_ import run_coroutine_threadsafe +from homeassistant.components.camera import PLATFORM_SCHEMA, Camera +from homeassistant.const import CONF_ENTITY_ID, CONF_NAME, HTTP_HEADER_HA_AUTH from homeassistant.helpers import config_validation as cv - -import homeassistant.util.dt as dt_util -from homeassistant.const import ( - CONF_NAME, CONF_ENTITY_ID, HTTP_HEADER_HA_AUTH) -from homeassistant.components.camera import ( - PLATFORM_SCHEMA, Camera) from homeassistant.helpers.aiohttp_client import ( - async_get_clientsession, async_aiohttp_proxy_web) + async_aiohttp_proxy_web, async_get_clientsession) +from homeassistant.util.async_ import run_coroutine_threadsafe +import homeassistant.util.dt as dt_util -REQUIREMENTS = ['pillow==5.0.0'] +REQUIREMENTS = ['pillow==5.2.0'] _LOGGER = logging.getLogger(__name__) -CONF_MAX_IMAGE_WIDTH = "max_image_width" -CONF_IMAGE_QUALITY = "image_quality" -CONF_IMAGE_REFRESH_RATE = "image_refresh_rate" -CONF_FORCE_RESIZE = "force_resize" -CONF_MAX_STREAM_WIDTH = "max_stream_width" -CONF_STREAM_QUALITY = "stream_quality" -CONF_CACHE_IMAGES = "cache_images" +CONF_CACHE_IMAGES = 'cache_images' +CONF_FORCE_RESIZE = 'force_resize' +CONF_IMAGE_QUALITY = 'image_quality' +CONF_IMAGE_REFRESH_RATE = 'image_refresh_rate' +CONF_MAX_IMAGE_WIDTH = 'max_image_width' +CONF_MAX_STREAM_WIDTH = 'max_stream_width' +CONF_STREAM_QUALITY = 'stream_quality' DEFAULT_BASENAME = "Camera Proxy" DEFAULT_QUALITY = 75 PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_ENTITY_ID): cv.entity_id, - vol.Optional(CONF_NAME): cv.string, - vol.Optional(CONF_MAX_IMAGE_WIDTH): int, + vol.Optional(CONF_CACHE_IMAGES, False): cv.boolean, + vol.Optional(CONF_FORCE_RESIZE, False): cv.boolean, vol.Optional(CONF_IMAGE_QUALITY): int, vol.Optional(CONF_IMAGE_REFRESH_RATE): float, - vol.Optional(CONF_FORCE_RESIZE, False): cv.boolean, - vol.Optional(CONF_CACHE_IMAGES, False): cv.boolean, + vol.Optional(CONF_MAX_IMAGE_WIDTH): int, vol.Optional(CONF_MAX_STREAM_WIDTH): int, + vol.Optional(CONF_NAME): cv.string, vol.Optional(CONF_STREAM_QUALITY): int, }) -async def async_setup_platform(hass, config, async_add_devices, - discovery_info=None): +async def async_setup_platform( + hass, config, async_add_devices, discovery_info=None): """Set up the Proxy camera platform.""" async_add_devices([ProxyCamera(hass, config)]) @@ -77,7 +74,7 @@ def _resize_image(image, opts): old_size = len(image) if old_width <= new_width: if opts.quality is None: - _LOGGER.debug("Image is smaller-than / equal-to requested width") + _LOGGER.debug("Image is smaller-than/equal-to requested width") return image new_width = old_width @@ -86,7 +83,7 @@ def _resize_image(image, opts): img = img.resize((new_width, new_height), Image.ANTIALIAS) imgbuf = io.BytesIO() - img.save(imgbuf, "JPEG", optimize=True, quality=quality) + img.save(imgbuf, 'JPEG', optimize=True, quality=quality) newimage = imgbuf.getvalue() if not opts.force_resize and len(newimage) >= old_size: _LOGGER.debug("Using original image(%d bytes) " @@ -94,11 +91,9 @@ def _resize_image(image, opts): old_size, len(newimage)) return image - _LOGGER.debug("Resized image " - "from (%dx%d - %d bytes) " - "to (%dx%d - %d bytes)", - old_width, old_height, old_size, - new_width, new_height, len(newimage)) + _LOGGER.debug( + "Resized image from (%dx%d - %d bytes) to (%dx%d - %d bytes)", + old_width, old_height, old_size, new_width, new_height, len(newimage)) return newimage @@ -112,7 +107,7 @@ class ImageOpts(): self.force_resize = force_resize def __bool__(self): - """Bool evalution rules.""" + """Bool evaluation rules.""" return bool(self.max_width or self.quality) @@ -133,8 +128,7 @@ class ProxyCamera(Camera): config.get(CONF_FORCE_RESIZE)) self._stream_opts = ImageOpts( - config.get(CONF_MAX_STREAM_WIDTH), - config.get(CONF_STREAM_QUALITY), + config.get(CONF_MAX_STREAM_WIDTH), config.get(CONF_STREAM_QUALITY), True) self._image_refresh_rate = config.get(CONF_IMAGE_REFRESH_RATE) @@ -145,8 +139,7 @@ class ProxyCamera(Camera): self._last_image = None self._headers = ( {HTTP_HEADER_HA_AUTH: self.hass.config.api.api_password} - if self.hass.config.api.api_password is not None - else None) + if self.hass.config.api.api_password is not None else None) def camera_image(self): """Return camera image.""" @@ -195,8 +188,8 @@ class ProxyCamera(Camera): self.hass, request, stream_coro) response = aiohttp.web.StreamResponse() - response.content_type = ('multipart/x-mixed-replace; ' - 'boundary=--frameboundary') + response.content_type = ( + 'multipart/x-mixed-replace; boundary=--frameboundary') await response.prepare(request) async def write(img_bytes): diff --git a/requirements_all.txt b/requirements_all.txt index a8e57097bf2..887b158899e 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -649,7 +649,7 @@ piglow==1.2.4 pilight==0.1.1 # homeassistant.components.camera.proxy -pillow==5.0.0 +pillow==5.2.0 # homeassistant.components.dominos pizzapi==0.0.3 -- GitLab