Skip to content

Commit 715c6d7

Browse files
authored
Merge pull request #91 from ogajduse/feat/add-logging
2 parents bcb7c37 + a9ed029 commit 715c6d7

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

custom_components/feedparser/sensor.py

+34-2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
},
5252
)
5353

54-
_LOGGER = logging.getLogger(__name__)
54+
_LOGGER: logging.Logger = logging.getLogger(__name__)
5555

5656

5757
async def async_setup_platform(
@@ -105,23 +105,46 @@ def __init__(
105105
self._entries: list[dict[str, str]] = []
106106
self._attr_extra_state_attributes = {"entries": self._entries}
107107
_attr_attribution = "Data retrieved using RSS feedparser"
108+
_LOGGER.debug("Feed %s: FeedParserSensor initialized - %s", self.name, self)
109+
110+
def __repr__(self: FeedParserSensor) -> str:
111+
"""Return the representation."""
112+
return (
113+
f'FeedParserSensor(name="{self.name}", feed="{self._feed}", '
114+
f"show_topn={self._show_topn}, inclusions={self._inclusions}, "
115+
f"exclusions={self._exclusions}, scan_interval={self._scan_interval}, "
116+
f'local_time={self._local_time}, date_format="{self._date_format}")'
117+
)
108118

109119
def update(self: FeedParserSensor) -> None:
110120
"""Parse the feed and update the state of the sensor."""
121+
_LOGGER.debug("Feed %s: Polling feed data from %s", self.name, self._feed)
111122
parsed_feed: FeedParserDict = feedparser.parse(self._feed)
112123

113124
if not parsed_feed:
114125
self._attr_native_value = None
126+
_LOGGER.warning("Feed %s: No data received.", self.name)
115127
return
116128

129+
_LOGGER.debug("Feed %s: Feed data fetched successfully", self.name)
117130
# set the sensor value to the amount of entries
118131
self._attr_native_value = (
119132
self._show_topn
120133
if len(parsed_feed.entries) > self._show_topn
121134
else len(parsed_feed.entries)
122135
)
136+
_LOGGER.debug(
137+
"Feed %s: %s entries is going to be added to the sensor",
138+
self.name,
139+
self.native_value,
140+
)
123141
self._entries.clear() # clear the entries to avoid duplicates
124142
self._entries.extend(self._generate_entries(parsed_feed))
143+
_LOGGER.debug(
144+
"Feed %s: Sensor state updated - %s entries",
145+
self.name,
146+
len(self.feed_entries),
147+
)
125148

126149
def _generate_entries(
127150
self: FeedParserSensor,
@@ -138,6 +161,7 @@ def _generate_sensor_entry(
138161
self: FeedParserSensor,
139162
feed_entry: FeedParserDict,
140163
) -> dict[str, str]:
164+
_LOGGER.debug("Feed %s: Generating sensor entry for %s", self.name, feed_entry)
141165
sensor_entry = {}
142166
for key, value in feed_entry.items():
143167
if (
@@ -154,6 +178,7 @@ def _generate_sensor_entry(
154178

155179
self._process_image(feed_entry, sensor_entry)
156180

181+
_LOGGER.debug("Feed %s: Generated sensor entry: %s", self.name, sensor_entry)
157182
return sensor_entry
158183

159184
def _parse_date(self: FeedParserSensor, date: str) -> datetime:
@@ -162,10 +187,11 @@ def _parse_date(self: FeedParserSensor, date: str) -> datetime:
162187
except ValueError:
163188
_LOGGER.warning(
164189
(
165-
"Unable to parse RFC-822 date from %s. "
190+
"Feed %s: Unable to parse RFC-822 date from %s. "
166191
"This could be caused by incorrect pubDate format "
167192
"in the RSS feed or due to a leapp second"
168193
),
194+
self.name,
169195
date,
170196
)
171197
parsed_time = parser.parse(date)
@@ -176,6 +202,7 @@ def _parse_date(self: FeedParserSensor, date: str) -> datetime:
176202
)
177203
if self._local_time:
178204
parsed_time = dt.as_local(parsed_time)
205+
_LOGGER.debug("Feed %s: Parsed date: %s", self.name, parsed_time)
179206
return parsed_time
180207

181208
def _process_image(
@@ -195,6 +222,11 @@ def _process_image(
195222
if images:
196223
sensor_entry["image"] = images[0]["href"] # pick the first image found
197224
else:
225+
_LOGGER.debug(
226+
"Feed %s: Image is in inclusions, but no image was found for %s",
227+
self.name,
228+
feed_entry,
229+
)
198230
sensor_entry[
199231
"image"
200232
] = DEFAULT_THUMBNAIL # use default image if no image found

0 commit comments

Comments
 (0)