view backend/sqlalchemy/Feed.py @ 155:a05719a6175e

move common functionality into an abstract backend class, have both backends inherit from it. Implement enough of the couchdb backend that reading feeds (and marking feed entries as read) is possible
author Dirk Olmes <dirk@xanthippe.ping.de>
date Sat, 27 Aug 2011 08:52:03 +0200
parents a4b2077c9603
children a3c945ce434c
line wrap: on
line source


from datetime import datetime, timedelta
import FeedEntry

class Feed(object):
    @staticmethod
    def all(session):
        return session.query(Feed).order_by(Feed.title).all()

    def __init__(self, title, rss_url):
        self.title = title
        self.rss_url = rss_url
        # default: update every 60 minutes
        self.update_interval = 60
        self.incrementNextUpdateDate()
        self.auto_load_entry_link = False
        self.always_open_in_browser = False

    def __repr__(self):
        return "<Feed (%d) %s>" % (self.pk, self.title)

    def userPresentableString(self):
        return self.title

    def entriesSortedByUpdateDate(self, hideReadEntries=False):
        if hideReadEntries:
            sortedEntries = self._unreadEntries()
        else:
            sortedEntries = list(self.entries)
        sortedEntries.sort(FeedEntry.compareByUpdateDate)
        return sortedEntries

    def _unreadEntries(self):
        retValue = []
        for entry in self.entries:
            if not entry.read:
                retValue.append(entry)
        return retValue

    def incrementNextUpdateDate(self):
        delta = timedelta(minutes=self.update_interval)
        self.next_update = datetime.now() + delta

    def markAllEntriesRead(self):
        for entry in self.entries:
            entry.markRead()
            
    def takeChangesFrom(self, dict):
        for key in dict.keys():
            setattr(self, key, dict[key])