5151 },
5252)
5353
54- _LOGGER = logging .getLogger (__name__ )
54+ _LOGGER : logging . Logger = logging .getLogger (__name__ )
5555
5656
5757async 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