From fe764eabe855a786ea3d2b19d775539f8d93a11a Mon Sep 17 00:00:00 2001 From: Yuval Aboulafia Date: Mon, 30 Aug 2021 20:47:38 +0300 Subject: [PATCH 1/5] use _attr --- custom_components/feedparser/sensor.py | 66 +++++++++++++------------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/custom_components/feedparser/sensor.py b/custom_components/feedparser/sensor.py index 888dd5f..794ad0e 100644 --- a/custom_components/feedparser/sensor.py +++ b/custom_components/feedparser/sensor.py @@ -1,17 +1,21 @@ """Feedparser sensor""" +from __future__ import annotations import asyncio import re -import feedparser -import voluptuous as vol from datetime import timedelta -from dateutil import parser -from homeassistant.components.sensor import SensorEntity + import homeassistant.helpers.config_validation as cv -from homeassistant.components.sensor import PLATFORM_SCHEMA +import voluptuous as vol +from dateutil import parser +from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity from homeassistant.const import CONF_NAME +from homeassistant.core import HomeAssistant +from homeassistant.helpers.typing import ConfigType, DiscoverInfoType + +import feedparser -__version__ = "0.1.2" +__version__ = "0.1.6" REQUIREMENTS = ["feedparser"] @@ -40,7 +44,12 @@ @asyncio.coroutine -def async_setup_platform(hass, config, async_add_devices, discovery_info=None): +def async_setup_platform( + hass: HomeAssistant, + config: ConfigType, + async_add_devices, + discovery_info: DiscoverInfoType | None = None, +) -> None: async_add_devices( [ FeedParserSensor( @@ -65,31 +74,32 @@ def __init__( show_topn: str, exclusions: str, inclusions: str, - ): + ) -> None: self._feed = feed - self._name = name + self._attr_name = name + self._attr_icon = ICON self._date_format = date_format self._show_topn = show_topn self._inclusions = inclusions self._exclusions = exclusions - self._state = None + self._attr_state = None self._entries = [] def update(self): - parsedFeed = feedparser.parse(self._feed) + parsed_feed = feedparser.parse(self._feed) - if not parsedFeed: + if not parsed_feed: return False else: - self._state = ( + self._attr_state = ( self._show_topn - if len(parsedFeed.entries) > self._show_topn - else len(parsedFeed.entries) + if len(parsed_feed.entries) > self._show_topn + else len(parsed_feed.entries) ) self._entries = [] - for entry in parsedFeed.entries[: self._state]: - entryValue = {} + for entry in parsed_feed.entries[: self._attr_state]: + entry_value = {} for key, value in entry.items(): if ( @@ -101,34 +111,22 @@ def update(self): if key in ["published", "updated", "created", "expired"]: value = parser.parse(value).strftime(self._date_format) - entryValue[key] = value + entry_value[key] = value - if "image" in self._inclusions and "image" not in entryValue.keys(): + if "image" in self._inclusions and "image" not in entry_value.keys(): images = [] if "summary" in entry.keys(): images = re.findall( r"", entry["summary"] ) if images: - entryValue["image"] = images[0] + entry_value["image"] = images[0] else: - entryValue[ + entry_value[ "image" ] = "https://www.home-assistant.io/images/favicon-192x192-full.png" - self._entries.append(entryValue) - - @property - def name(self): - return self._name - - @property - def state(self): - return self._state - - @property - def icon(self): - return ICON + self._entries.append(entry_value) @property def device_state_attributes(self): From ab54079b792e69e80ad8a7f789111d824b1cfec6 Mon Sep 17 00:00:00 2001 From: Yuval Aboulafia Date: Mon, 30 Aug 2021 20:49:30 +0300 Subject: [PATCH 2/5] icon --- custom_components/feedparser/sensor.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/custom_components/feedparser/sensor.py b/custom_components/feedparser/sensor.py index 794ad0e..1237870 100644 --- a/custom_components/feedparser/sensor.py +++ b/custom_components/feedparser/sensor.py @@ -29,7 +29,6 @@ COMPONENT_REPO = "https://github.com/custom-components/sensor.feedparser/" SCAN_INTERVAL = timedelta(hours=1) -ICON = "mdi:rss" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { @@ -77,7 +76,7 @@ def __init__( ) -> None: self._feed = feed self._attr_name = name - self._attr_icon = ICON + self._attr_icon = "mdi:rss" self._date_format = date_format self._show_topn = show_topn self._inclusions = inclusions From 50b6889ad96f88ed8c13301a88b081180f205ae2 Mon Sep 17 00:00:00 2001 From: Yuval Aboulafia Date: Mon, 30 Aug 2021 20:51:26 +0300 Subject: [PATCH 3/5] remove typing --- custom_components/feedparser/sensor.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/custom_components/feedparser/sensor.py b/custom_components/feedparser/sensor.py index 1237870..25cb7c5 100644 --- a/custom_components/feedparser/sensor.py +++ b/custom_components/feedparser/sensor.py @@ -10,8 +10,6 @@ from dateutil import parser from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity from homeassistant.const import CONF_NAME -from homeassistant.core import HomeAssistant -from homeassistant.helpers.typing import ConfigType, DiscoverInfoType import feedparser @@ -43,12 +41,7 @@ @asyncio.coroutine -def async_setup_platform( - hass: HomeAssistant, - config: ConfigType, - async_add_devices, - discovery_info: DiscoverInfoType | None = None, -) -> None: +def async_setup_platform(hass, config, async_add_devices, discovery_info=None): async_add_devices( [ FeedParserSensor( From 1fdb621db2ec6ca14d1890be000bfea155b21e62 Mon Sep 17 00:00:00 2001 From: Yuval Aboulafia Date: Thu, 9 Sep 2021 23:50:57 +0300 Subject: [PATCH 4/5] Add update_interval option --- custom_components/feedparser/sensor.py | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/custom_components/feedparser/sensor.py b/custom_components/feedparser/sensor.py index 25cb7c5..14d06dd 100644 --- a/custom_components/feedparser/sensor.py +++ b/custom_components/feedparser/sensor.py @@ -9,12 +9,17 @@ import voluptuous as vol from dateutil import parser from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity -from homeassistant.const import CONF_NAME +from homeassistant.const import CONF_NAME, CONF_SCAN_INTERVAL +from homeassistant.core import HomeAssistant +from homeassistant.helpers.entity_platform import AddEntitiesCallback +from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType import feedparser __version__ = "0.1.6" +COMPONENT_REPO = "https://github.com/custom-components/sensor.feedparser/" + REQUIREMENTS = ["feedparser"] CONF_FEED_URL = "feed_url" @@ -25,9 +30,6 @@ DEFAULT_SCAN_INTERVAL = timedelta(hours=1) -COMPONENT_REPO = "https://github.com/custom-components/sensor.feedparser/" -SCAN_INTERVAL = timedelta(hours=1) - PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( { vol.Required(CONF_NAME): cv.string, @@ -36,12 +38,18 @@ vol.Optional(CONF_SHOW_TOPN, default=9999): cv.positive_int, vol.Optional(CONF_INCLUSIONS, default=[]): vol.All(cv.ensure_list, [cv.string]), vol.Optional(CONF_EXCLUSIONS, default=[]): vol.All(cv.ensure_list, [cv.string]), + vol.Optional(CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL): cv.time_period, } ) @asyncio.coroutine -def async_setup_platform(hass, config, async_add_devices, discovery_info=None): +def async_setup_platform( + hass: HomeAssistant, + config: ConfigType, + async_add_devices: AddEntitiesCallback, + discovery_info: DiscoveryInfoType | None = None, +) -> None: async_add_devices( [ FeedParserSensor( @@ -51,6 +59,7 @@ def async_setup_platform(hass, config, async_add_devices, discovery_info=None): show_topn=config[CONF_SHOW_TOPN], inclusions=config[CONF_INCLUSIONS], exclusions=config[CONF_EXCLUSIONS], + scan_interval=config[CONF_SCAN_INTERVAL], ) ], True, @@ -66,6 +75,7 @@ def __init__( show_topn: str, exclusions: str, inclusions: str, + scan_interval: int, ) -> None: self._feed = feed self._attr_name = name @@ -74,8 +84,10 @@ def __init__( self._show_topn = show_topn self._inclusions = inclusions self._exclusions = exclusions + self._scan_interval = scan_interval self._attr_state = None self._entries = [] + self._attr_extra_state_attributes = {"entries": self._entries} def update(self): parsed_feed = feedparser.parse(self._feed) @@ -119,7 +131,3 @@ def update(self): ] = "https://www.home-assistant.io/images/favicon-192x192-full.png" self._entries.append(entry_value) - - @property - def device_state_attributes(self): - return {"entries": self._entries} From edc41e1bb121f63ee998c4d5256997060b12d230 Mon Sep 17 00:00:00 2001 From: Yuval Aboulafia Date: Fri, 10 Sep 2021 00:14:58 +0300 Subject: [PATCH 5/5] Merge branch 'update_interval' of https://github.com/yuvalabou/feedparser into update_interval --- .vscode/settings.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..de288e1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.formatting.provider": "black" +} \ No newline at end of file