From 863c7414bcde37b7884d871b20b469b9d68c7d6e Mon Sep 17 00:00:00 2001 From: Chris Talkington Date: Sun, 30 Aug 2020 13:59:15 -0500 Subject: [PATCH] Implement code review for nzbget (#39425) * implement code review for nzbget * Update strings.json * Update sensor.py * Update config_flow.py * Update sensor.py * Update config_flow.py * Update config_flow.py * Update config_flow.py --- .../components/nzbget/config_flow.py | 35 ++++++++++--------- homeassistant/components/nzbget/sensor.py | 18 +++++++--- homeassistant/components/nzbget/strings.json | 3 +- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/homeassistant/components/nzbget/config_flow.py b/homeassistant/components/nzbget/config_flow.py index 77524cc3079..dfed7a9bfee 100644 --- a/homeassistant/components/nzbget/config_flow.py +++ b/homeassistant/components/nzbget/config_flow.py @@ -78,26 +78,27 @@ class NZBGetConfigFlow(ConfigFlow, domain=DOMAIN): if self._async_current_entries(): return self.async_abort(reason="single_instance_allowed") - if user_input is None: - return self._show_setup_form() + errors = {} - if CONF_VERIFY_SSL not in user_input: - user_input[CONF_VERIFY_SSL] = DEFAULT_VERIFY_SSL + if user_input is not None: + if CONF_VERIFY_SSL not in user_input: + user_input[CONF_VERIFY_SSL] = DEFAULT_VERIFY_SSL - try: - await self.hass.async_add_executor_job( - validate_input, self.hass, user_input - ) - except NZBGetAPIException: - return self._show_setup_form({"base": "cannot_connect"}) - except Exception: # pylint: disable=broad-except - _LOGGER.exception("Unexpected exception") - return self.async_abort(reason="unknown") + try: + await self.hass.async_add_executor_job( + validate_input, self.hass, user_input + ) + except NZBGetAPIException: + errors["base"] = "cannot_connect" + except Exception: # pylint: disable=broad-except + _LOGGER.exception("Unexpected exception") + return self.async_abort(reason="unknown") + else: + return self.async_create_entry( + title=user_input[CONF_HOST], + data=user_input, + ) - return self.async_create_entry(title=user_input[CONF_HOST], data=user_input) - - def _show_setup_form(self, errors: Optional[Dict] = None) -> Dict[str, Any]: - """Show the setup form to the user.""" data_schema = { vol.Required(CONF_HOST): str, vol.Optional(CONF_NAME, default=DEFAULT_NAME): str, diff --git a/homeassistant/components/nzbget/sensor.py b/homeassistant/components/nzbget/sensor.py index e8e7b619f2c..c9437195826 100644 --- a/homeassistant/components/nzbget/sensor.py +++ b/homeassistant/components/nzbget/sensor.py @@ -1,4 +1,5 @@ """Monitor the NZBGet API.""" +from datetime import timedelta import logging from typing import Callable, List, Optional @@ -7,10 +8,11 @@ from homeassistant.const import ( CONF_NAME, DATA_MEGABYTES, DATA_RATE_MEGABYTES_PER_SECOND, - TIME_MINUTES, + DEVICE_CLASS_TIMESTAMP, ) from homeassistant.helpers.entity import Entity from homeassistant.helpers.typing import HomeAssistantType +from homeassistant.util.dt import utcnow from . import NZBGetEntity from .const import DATA_COORDINATOR, DOMAIN @@ -32,7 +34,7 @@ SENSOR_TYPES = { "post_job_count": ["PostJobCount", "Post Processing Jobs", "Jobs"], "post_paused": ["PostPaused", "Post Processing Paused", None], "remaining_size": ["RemainingSizeMB", "Queue Size", DATA_MEGABYTES], - "uptime": ["UpTimeSec", "Uptime", TIME_MINUTES], + "uptime": ["UpTimeSec", "Uptime", None], } @@ -85,6 +87,14 @@ class NZBGetSensor(NZBGetEntity, Entity): name=f"{entry_name} {sensor_name}", ) + @property + def device_class(self): + """Return the device class.""" + if "UpTimeSec" in self._sensor_type: + return DEVICE_CLASS_TIMESTAMP + + return None + @property def unique_id(self) -> str: """Return the unique ID of the sensor.""" @@ -109,7 +119,7 @@ class NZBGetSensor(NZBGetEntity, Entity): return round(value / 2 ** 20, 2) if "UpTimeSec" in self._sensor_type and value > 0: - # Convert uptime from seconds to minutes - return round(value / 60, 2) + uptime = utcnow() - timedelta(seconds=value) + return uptime.replace(microsecond=0).isoformat() return value diff --git a/homeassistant/components/nzbget/strings.json b/homeassistant/components/nzbget/strings.json index 9bbcd66781e..5a0c31054a9 100644 --- a/homeassistant/components/nzbget/strings.json +++ b/homeassistant/components/nzbget/strings.json @@ -16,8 +16,7 @@ } }, "error": { - "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]", - "invalid_auth": "[%key:common::config_flow::error::invalid_auth%]" + "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]" }, "abort": { "single_instance_allowed": "[%key:common::config_flow::abort::single_instance_allowed%]",