def get_feed(self, attempt_count: int=0) -> "UpdateResult":
"""Get RSS structure for this subscription. Return status code indicating result."""
res = None
if attempt_count > MAX_RECURSIVE_ATTEMPTS:
LOG.debug(f"Too many recursive attempts ({attempt_count}) to get feed for sub"
f"{self.metadata['name']}, canceling.")
res = UpdateResult.FAILURE
elif self.url is None or self.url == "":
LOG.debug(f"URL {self.url} is empty , cannot get feed for sub " +
f"{self.metadata['name']}.")
res = UpdateResult.FAILURE
if res is not None:
return res
else:
LOG.info(f"Getting entries (attempt {attempt_count}) for {self.metadata['name']} " +
f"from {self.url}.")
(parsed, code) = self._feedparser_parse_with_options()
if code == UpdateResult.UNNEEDED:
LOG.info("We have the latest feed, nothing to do.")
return code
elif code != UpdateResult.SUCCESS:
LOG.info(f"Feedparser parse failed ({code}), aborting.")
return code
LOG.debug("Feedparser parse succeeded.")
# Detect some kinds of HTTP status codes signaling failure.
code = self._handle_http_codes(parsed)
if code == UpdateResult.ATTEMPT_AGAIN:
LOG.debug("Transient HTTP error, attempting again.")
temp = self.temp_url
code = self.get_feed(attempt_count=attempt_count + 1)
if temp is not None:
self.url = temp
elif code != UpdateResult.SUCCESS:
LOG.debug(f"Ran into HTTP error ({code}), aborting.")
else:
self.feed_state.load_rss_info(parsed)
return code
评论列表
文章目录