Mercurial > hg > Feedworm
diff backend/arangodb/ArangoBackend.py @ 256:f79be01821c4
Arangodb backend, first version which barely works for reading
author | Dirk Olmes <dirk@xanthippe.ping.de> |
---|---|
date | Wed, 30 Jan 2019 07:11:10 +0100 |
parents | |
children | 304917762618 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/backend/arangodb/ArangoBackend.py Wed Jan 30 07:11:10 2019 +0100 @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- +from argparse import ArgumentParser +from ArangoDb import ArangoDb +from backend.AbstractBackend import AbstractBackend +from Feed import Feed +from FeedEntry import FeedEntry +from Preferences import Preferences +from pyArango.connection import Connection + +""" +Backend that uses ArangoDB for persistence +""" +class ArangoBackend(AbstractBackend): + def __init__(self): + super(ArangoBackend, self).__init__() + args = self._parse_arguments() + connection = Connection(arangoURL=args.dburl, username=args.user, password=args.password) + self.database = ArangoDb(connection[args.dbname]) + self.prefs = None + + def _parse_arguments(self): + parser = ArgumentParser() + parser.add_argument('--dburl', nargs='?', help='URL of the database', default='http://127.0.0.1:8529') + parser.add_argument('--dbname', nargs='?', help='name of the database', default='feedworm') + parser.add_argument('--user', nargs='?', help='username for authenticating the database connection', required=True) + parser.add_argument('--password', nargs='?', help='password for authenticating the database connection', required=True) + return parser.parse_known_args()[0] + + def preferences(self): + if self.prefs is None: + self.prefs = Preferences(self.database) + return self.prefs + + def getUnreadFeeds(self): + return Feed.get_unread(self.database) + + def _retrieveEntriesForSelectedFeed(self, hideReadEntries): + base_query = """ + FOR feed_entry_doc in feed_entry + FILTER feed_entry_doc.feed == @feed_key""" + if hideReadEntries: + query = base_query + " AND feed_entry_doc.read == false " + query = query + " RETURN feed_entry_doc" + bind_vars = { 'feed_key': self.selectedFeed._key } + results = self.database.AQLQuery(query, bind_vars=bind_vars) + return [FeedEntry(doc) for doc in results] + + def _markSelectedFeedEntryRead(self): + self.selectedFeedEntry.markRead() + + def updateAllFeeds(self): + for feed in Feed.all_pending_update(self.database): + print('updating ' + feed.title)