view backend/couchdb/CouchDbBackend.py @ 146:8ec20377bcb0

move getting the entries for a feed to the backend so that the couchdb backend can use a custom view for feed entries
author Dirk Olmes <dirk@xanthippe.ping.de>
date Thu, 25 Aug 2011 07:01:45 +0200
parents 74217db92993
children c5a427d46703
line wrap: on
line source


from FeedUpdater import FeedUpdater
from Preferences import Preferences
from backend.couchdb.Feed import Feed
from backend.couchdb.FeedEntry import FeedEntry
import couchdb


DATABASE = "feedtest"

class CouchDbBackend(object):
    '''
    Backend that uses CouchDB for persistence
    '''

    def __init__(self):
        server = couchdb.Server()
        self.database = server[DATABASE]

    def preferences(self):
        return Preferences(self.database)

    def getFeeds(self):
        if self.preferences().showOnlyUnreadFeeds():
            return self._getUnreadFeeds()
        else:
            return Feed.all(self.database)

    def _getUnreadFeeds(self):
        raise Exception("not yet implemented")

    def toggleRead(self, feedEntry):
        raise Exception("not yet implemented")

    def markAllEntriesRead(self, feed):
        raise Exception("not yet implemented")

    def createFeed(self, url):
        raise Exception("not yet implemented")

    def updateFeed(self, feed, changes):
        raise Exception("not yet implemented")

    def deleteFeed(self, feed):
        raise Exception("not yet implemented")

    def entriesForFeed(self, feed, hideReadEntries):
        viewName = "feedtest/feedEntries_by_feed"
        if hideReadEntries:
            viewName = "feedtest/unread_feedEntries_by_feed"
        viewResults = self.database.view(viewName)
        return [FeedEntry(row) for row in viewResults]

    def markFeedEntriesAsRead(self, entries):
        raise Exception("not yet implemented")

    def updateAllFeeds(self):
        # TODO use a view instead of iterating all feeds
        allFeeds = Feed.all(self.database)
        for feed in allFeeds:
            if feed.needsUpdate():
                FeedUpdater(feed, self.database).update()

    def expireFeedEntries(self):
        print("Expiring feeds is not yet implemented")
#        raise Exception("not yet implemented")

    def dispose(self):
        # nothing to do here
        pass