From 7a87846146a1f1b4e392fd78671b16ef50a2eee6 Mon Sep 17 00:00:00 2001 From: Maciej Bieniek Date: Fri, 7 May 2021 13:03:11 +0200 Subject: [PATCH] Bump `gios` library (#50145) * Bump gios library * Use consts for API strings * Do not store data locally * Use API_TIMEOUT const --- homeassistant/components/gios/__init__.py | 7 ++- homeassistant/components/gios/air_quality.py | 52 +++++++++----------- homeassistant/components/gios/config_flow.py | 6 +-- homeassistant/components/gios/const.py | 30 +++++++++++ homeassistant/components/gios/manifest.json | 2 +- requirements_all.txt | 2 +- requirements_test_all.txt | 2 +- tests/components/gios/__init__.py | 4 +- tests/fixtures/gios/sensors.json | 14 +++--- 9 files changed, 72 insertions(+), 47 deletions(-) diff --git a/homeassistant/components/gios/__init__.py b/homeassistant/components/gios/__init__.py index 90e12061da3..9c4b76d8009 100644 --- a/homeassistant/components/gios/__init__.py +++ b/homeassistant/components/gios/__init__.py @@ -8,7 +8,7 @@ from gios import ApiError, Gios, InvalidSensorsData, NoStationError from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed -from .const import CONF_STATION_ID, DOMAIN, SCAN_INTERVAL +from .const import API_TIMEOUT, CONF_STATION_ID, DOMAIN, SCAN_INTERVAL _LOGGER = logging.getLogger(__name__) @@ -51,8 +51,8 @@ class GiosDataUpdateCoordinator(DataUpdateCoordinator): async def _async_update_data(self): """Update data via library.""" try: - with timeout(30): - await self.gios.update() + with timeout(API_TIMEOUT): + return await self.gios.async_update() except ( ApiError, NoStationError, @@ -60,4 +60,3 @@ class GiosDataUpdateCoordinator(DataUpdateCoordinator): InvalidSensorsData, ) as error: raise UpdateFailed(error) from error - return self.gios.data diff --git a/homeassistant/components/gios/air_quality.py b/homeassistant/components/gios/air_quality.py index ab83191a1ac..9e4df19e7ad 100644 --- a/homeassistant/components/gios/air_quality.py +++ b/homeassistant/components/gios/air_quality.py @@ -1,28 +1,24 @@ """Support for the GIOS service.""" -from homeassistant.components.air_quality import ( - ATTR_CO, - ATTR_NO2, - ATTR_OZONE, - ATTR_PM_2_5, - ATTR_PM_10, - ATTR_SO2, - AirQualityEntity, -) +from homeassistant.components.air_quality import AirQualityEntity from homeassistant.const import CONF_NAME from homeassistant.helpers.update_coordinator import CoordinatorEntity -from .const import ATTR_STATION, DEFAULT_NAME, DOMAIN, ICONS_MAP, MANUFACTURER - -ATTRIBUTION = "Data provided by GIOŚ" - -SENSOR_MAP = { - "CO": ATTR_CO, - "NO2": ATTR_NO2, - "O3": ATTR_OZONE, - "PM10": ATTR_PM_10, - "PM2.5": ATTR_PM_2_5, - "SO2": ATTR_SO2, -} +from .const import ( + API_AQI, + API_CO, + API_NO2, + API_O3, + API_PM10, + API_PM25, + API_SO2, + ATTR_STATION, + ATTRIBUTION, + DEFAULT_NAME, + DOMAIN, + ICONS_MAP, + MANUFACTURER, + SENSOR_MAP, +) PARALLEL_UPDATES = 1 @@ -72,43 +68,43 @@ class GiosAirQuality(CoordinatorEntity, AirQualityEntity): @property def air_quality_index(self): """Return the air quality index.""" - return self._get_sensor_value("AQI") + return self._get_sensor_value(API_AQI) @property @round_state def particulate_matter_2_5(self): """Return the particulate matter 2.5 level.""" - return self._get_sensor_value("PM2.5") + return self._get_sensor_value(API_PM25) @property @round_state def particulate_matter_10(self): """Return the particulate matter 10 level.""" - return self._get_sensor_value("PM10") + return self._get_sensor_value(API_PM10) @property @round_state def ozone(self): """Return the O3 (ozone) level.""" - return self._get_sensor_value("O3") + return self._get_sensor_value(API_O3) @property @round_state def carbon_monoxide(self): """Return the CO (carbon monoxide) level.""" - return self._get_sensor_value("CO") + return self._get_sensor_value(API_CO) @property @round_state def sulphur_dioxide(self): """Return the SO2 (sulphur dioxide) level.""" - return self._get_sensor_value("SO2") + return self._get_sensor_value(API_SO2) @property @round_state def nitrogen_dioxide(self): """Return the NO2 (nitrogen dioxide) level.""" - return self._get_sensor_value("NO2") + return self._get_sensor_value(API_NO2) @property def attribution(self): diff --git a/homeassistant/components/gios/config_flow.py b/homeassistant/components/gios/config_flow.py index cdf166b4073..b351fafc0c1 100644 --- a/homeassistant/components/gios/config_flow.py +++ b/homeassistant/components/gios/config_flow.py @@ -10,7 +10,7 @@ from homeassistant import config_entries from homeassistant.const import CONF_NAME from homeassistant.helpers.aiohttp_client import async_get_clientsession -from .const import CONF_STATION_ID, DEFAULT_NAME, DOMAIN +from .const import API_TIMEOUT, CONF_STATION_ID, DEFAULT_NAME, DOMAIN DATA_SCHEMA = vol.Schema( { @@ -38,9 +38,9 @@ class GiosFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): websession = async_get_clientsession(self.hass) - with timeout(30): + with timeout(API_TIMEOUT): gios = Gios(user_input[CONF_STATION_ID], websession) - await gios.update() + await gios.async_update() return self.async_create_entry( title=user_input[CONF_STATION_ID], diff --git a/homeassistant/components/gios/const.py b/homeassistant/components/gios/const.py index ab354e319a8..4d3d7e139ce 100644 --- a/homeassistant/components/gios/const.py +++ b/homeassistant/components/gios/const.py @@ -1,6 +1,17 @@ """Constants for GIOS integration.""" from datetime import timedelta +from homeassistant.components.air_quality import ( + ATTR_CO, + ATTR_NO2, + ATTR_OZONE, + ATTR_PM_2_5, + ATTR_PM_10, + ATTR_SO2, +) + +ATTRIBUTION = "Data provided by GIOŚ" + ATTR_STATION = "station" CONF_STATION_ID = "station_id" DEFAULT_NAME = "GIOŚ" @@ -9,6 +20,16 @@ SCAN_INTERVAL = timedelta(minutes=30) DOMAIN = "gios" MANUFACTURER = "Główny Inspektorat Ochrony Środowiska" +API_AQI = "aqi" +API_CO = "co" +API_NO2 = "no2" +API_O3 = "o3" +API_PM10 = "pm10" +API_PM25 = "pm2.5" +API_SO2 = "so2" + +API_TIMEOUT = 30 + AQI_GOOD = "dobry" AQI_MODERATE = "umiarkowany" AQI_POOR = "dostateczny" @@ -22,3 +43,12 @@ ICONS_MAP = { AQI_POOR: "mdi:emoticon-sad", AQI_VERY_POOR: "mdi:emoticon-dead", } + +SENSOR_MAP = { + API_CO: ATTR_CO, + API_NO2: ATTR_NO2, + API_O3: ATTR_OZONE, + API_PM10: ATTR_PM_10, + API_PM25: ATTR_PM_2_5, + API_SO2: ATTR_SO2, +} diff --git a/homeassistant/components/gios/manifest.json b/homeassistant/components/gios/manifest.json index f0d5422de24..3dfb2a168db 100644 --- a/homeassistant/components/gios/manifest.json +++ b/homeassistant/components/gios/manifest.json @@ -3,7 +3,7 @@ "name": "GIO\u015a", "documentation": "https://www.home-assistant.io/integrations/gios", "codeowners": ["@bieniu"], - "requirements": ["gios==0.2.1"], + "requirements": ["gios==1.0.1"], "config_flow": true, "quality_scale": "platinum", "iot_class": "cloud_polling" diff --git a/requirements_all.txt b/requirements_all.txt index 6ec0c43d4cc..3a4ea78760a 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -657,7 +657,7 @@ georss_qld_bushfire_alert_client==0.3 getmac==0.8.2 # homeassistant.components.gios -gios==0.2.1 +gios==1.0.1 # homeassistant.components.gitter gitterpy==0.1.7 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 176e202ae0d..e8095e104a6 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -360,7 +360,7 @@ georss_qld_bushfire_alert_client==0.3 getmac==0.8.2 # homeassistant.components.gios -gios==0.2.1 +gios==1.0.1 # homeassistant.components.glances glances_api==0.2.0 diff --git a/tests/components/gios/__init__.py b/tests/components/gios/__init__.py index 6b1aa982c71..729d0d50f61 100644 --- a/tests/components/gios/__init__.py +++ b/tests/components/gios/__init__.py @@ -26,8 +26,8 @@ async def init_integration(hass, incomplete_data=False) -> MockConfigEntry: sensors = json.loads(load_fixture("gios/sensors.json")) if incomplete_data: indexes["stIndexLevel"]["indexLevelName"] = "foo" - sensors["PM10"]["values"][0]["value"] = None - sensors["PM10"]["values"][1]["value"] = None + sensors["pm10"]["values"][0]["value"] = None + sensors["pm10"]["values"][1]["value"] = None with patch( "homeassistant.components.gios.Gios._get_stations", return_value=STATIONS diff --git a/tests/fixtures/gios/sensors.json b/tests/fixtures/gios/sensors.json index 3103a2bf16e..62732552172 100644 --- a/tests/fixtures/gios/sensors.json +++ b/tests/fixtures/gios/sensors.json @@ -1,47 +1,47 @@ { - "SO2": { + "so2": { "values": [ { "date": "2020-07-31 15:00:00", "value": 4.35478 }, { "date": "2020-07-31 14:00:00", "value": 4.25478 }, { "date": "2020-07-31 13:00:00", "value": 4.34309 } ] }, - "C6H6": { + "c6h6": { "values": [ { "date": "2020-07-31 15:00:00", "value": 0.23789 }, { "date": "2020-07-31 14:00:00", "value": 0.22789 }, { "date": "2020-07-31 13:00:00", "value": 0.21315 } ] }, - "CO": { + "co": { "values": [ { "date": "2020-07-31 15:00:00", "value": 251.874 }, { "date": "2020-07-31 14:00:00", "value": 250.874 }, { "date": "2020-07-31 13:00:00", "value": 251.097 } ] }, - "NO2": { + "no2": { "values": [ { "date": "2020-07-31 15:00:00", "value": 7.13411 }, { "date": "2020-07-31 14:00:00", "value": 7.33411 }, { "date": "2020-07-31 13:00:00", "value": 9.32578 } ] }, - "O3": { + "o3": { "values": [ { "date": "2020-07-31 15:00:00", "value": 95.7768 }, { "date": "2020-07-31 14:00:00", "value": 93.7768 }, { "date": "2020-07-31 13:00:00", "value": 89.4232 } ] }, - "PM2.5": { + "pm2.5": { "values": [ { "date": "2020-07-31 15:00:00", "value": 4 }, { "date": "2020-07-31 14:00:00", "value": 4 }, { "date": "2020-07-31 13:00:00", "value": 5 } ] }, - "PM10": { + "pm10": { "values": [ { "date": "2020-07-31 15:00:00", "value": 16.8344 }, { "date": "2020-07-31 14:00:00", "value": 17.8344 },