51
51
},
52
52
)
53
53
54
- _LOGGER = logging .getLogger (__name__ )
54
+ _LOGGER : logging . Logger = logging .getLogger (__name__ )
55
55
56
56
57
57
async def async_setup_platform (
@@ -105,23 +105,46 @@ def __init__(
105
105
self ._entries : list [dict [str , str ]] = []
106
106
self ._attr_extra_state_attributes = {"entries" : self ._entries }
107
107
_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
+ )
108
118
109
119
def update (self : FeedParserSensor ) -> None :
110
120
"""Parse the feed and update the state of the sensor."""
121
+ _LOGGER .debug ("Feed %s: Polling feed data from %s" , self .name , self ._feed )
111
122
parsed_feed : FeedParserDict = feedparser .parse (self ._feed )
112
123
113
124
if not parsed_feed :
114
125
self ._attr_native_value = None
126
+ _LOGGER .warning ("Feed %s: No data received." , self .name )
115
127
return
116
128
129
+ _LOGGER .debug ("Feed %s: Feed data fetched successfully" , self .name )
117
130
# set the sensor value to the amount of entries
118
131
self ._attr_native_value = (
119
132
self ._show_topn
120
133
if len (parsed_feed .entries ) > self ._show_topn
121
134
else len (parsed_feed .entries )
122
135
)
136
+ _LOGGER .debug (
137
+ "Feed %s: %s entries is going to be added to the sensor" ,
138
+ self .name ,
139
+ self .native_value ,
140
+ )
123
141
self ._entries .clear () # clear the entries to avoid duplicates
124
142
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
+ )
125
148
126
149
def _generate_entries (
127
150
self : FeedParserSensor ,
@@ -138,6 +161,7 @@ def _generate_sensor_entry(
138
161
self : FeedParserSensor ,
139
162
feed_entry : FeedParserDict ,
140
163
) -> dict [str , str ]:
164
+ _LOGGER .debug ("Feed %s: Generating sensor entry for %s" , self .name , feed_entry )
141
165
sensor_entry = {}
142
166
for key , value in feed_entry .items ():
143
167
if (
@@ -154,6 +178,7 @@ def _generate_sensor_entry(
154
178
155
179
self ._process_image (feed_entry , sensor_entry )
156
180
181
+ _LOGGER .debug ("Feed %s: Generated sensor entry: %s" , self .name , sensor_entry )
157
182
return sensor_entry
158
183
159
184
def _parse_date (self : FeedParserSensor , date : str ) -> datetime :
@@ -162,10 +187,11 @@ def _parse_date(self: FeedParserSensor, date: str) -> datetime:
162
187
except ValueError :
163
188
_LOGGER .warning (
164
189
(
165
- "Unable to parse RFC-822 date from %s. "
190
+ "Feed %s: Unable to parse RFC-822 date from %s. "
166
191
"This could be caused by incorrect pubDate format "
167
192
"in the RSS feed or due to a leapp second"
168
193
),
194
+ self .name ,
169
195
date ,
170
196
)
171
197
parsed_time = parser .parse (date )
@@ -176,6 +202,7 @@ def _parse_date(self: FeedParserSensor, date: str) -> datetime:
176
202
)
177
203
if self ._local_time :
178
204
parsed_time = dt .as_local (parsed_time )
205
+ _LOGGER .debug ("Feed %s: Parsed date: %s" , self .name , parsed_time )
179
206
return parsed_time
180
207
181
208
def _process_image (
@@ -195,6 +222,11 @@ def _process_image(
195
222
if images :
196
223
sensor_entry ["image" ] = images [0 ]["href" ] # pick the first image found
197
224
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
+ )
198
230
sensor_entry [
199
231
"image"
200
232
] = DEFAULT_THUMBNAIL # use default image if no image found
0 commit comments