From bef4a545d7114cca413a028da8f384232e4b40cd Mon Sep 17 00:00:00 2001 From: Artem Baguinski Date: Fri, 2 May 2008 21:40:26 +0200 Subject: [PATCH] factored testing feed updateness out --- riffle/catcher/models.py | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/riffle/catcher/models.py b/riffle/catcher/models.py index b52370e..c93659b 100644 --- a/riffle/catcher/models.py +++ b/riffle/catcher/models.py @@ -32,35 +32,45 @@ class Feed(models.Model): if not self.may_ping(): return logging.debug("Refreshing %s", self) - remote_timestamp = None try: with url_open(self.url) as conn: self.ping_timestamp = datetime.now() - # FIXME this mess can be split off in its own method (messod?) - if 'Last-Modified' in conn.info(): - remote_timestamp = datetime.fromtimestamp( - time.mktime( - parsedate( conn.info()['Last-Modified'] ))) - if self.timestamp is not None \ - and remote_timestamp is not None \ - and remote_timestamp > conf.reasonable_timestamp \ - and remote_timestamp < self.timestamp: - logging.debug("Feed '%s' haven't changed, skipping", - self) - return - # FIXME ^^^ till here + remote_timestamp = self.assert_updated(conn) logging.debug("Feed '%s' might have changed, parsing", self) tree = feedparser.parse(conn) logging.debug("Feed '%s' was successfully (?) parsed", self) # FIXME uncomment the following after parsed feed processing # is implemented # self.timestamp = remote_timestamp + except Feed.NotChanged: + logging.debug("Feed '%s' haven't changed, skipping", self) except: logging.error('%s while trying to refresh %s', sys.exc_value, self) finally: # always persist: at least to save ping_timestamp self.save() + class NotChanged: + "This will be raised if feed havent updated" + pass + + def assert_updated(self, conn): + remote_timestamp = None + if 'Last-Modified' in conn.info(): + remote_timestamp = datetime.fromtimestamp( + time.mktime( + parsedate( conn.info()['Last-Modified'] ))) + logging.debug('comparing local(%s) against remote(%s) timestamps', + self.timestamp, + remote_timestamp) + if self.timestamp is not None \ + and remote_timestamp is not None \ + and remote_timestamp > conf.reasonable_timestamp \ + and remote_timestamp <= self.timestamp: + raise Feed.NotChanged() + return remote_timestamp + + def may_ping(self): if '--force-dl' in sys.argv: logging.debug('--force-dl detected: ignoring ping period') -- 2.11.4.GIT