Skip to content

Commit

Permalink
Add API for getting entries for a single feed.
Browse files Browse the repository at this point in the history
Closes #18.
  • Loading branch information
lemon24 committed Feb 11, 2018
1 parent ba32ea0 commit f7526c3
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 5 deletions.
8 changes: 5 additions & 3 deletions reader/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,18 @@ def root():
assert show in ('all', 'read', 'unread')

reader = get_reader()
entries = reader.get_entries(which=show)

feed_url = request.args.get('feed')
feed = None
entries_data = None
if feed_url:
feed = reader.get_feed(feed_url)
if not feed:
abort(404)
entries = [(f, e) for f, e in entries if f.url == feed_url]

entries = list(reader.get_entries(which=show, feed_url=feed_url))

entries_data = None
if feed_url:
entries_data = [{'feed': f.url, 'entry': e.id} for f, e in entries]

return render_template('root.html', entries=entries, feed=feed, entries_data=entries_data)
Expand Down
12 changes: 10 additions & 2 deletions reader/reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ def _get_entry_updated(self, feed_url, id):
""", locals()).fetchone()
return rv[0] if rv else None

def _get_entries(self, which, chunk_size=None, last=None):
def _get_entries(self, which, feed_url, chunk_size=None, last=None):
log.debug("_get_entries chunk_size=%s last=%s", chunk_size, last)

if which == 'all':
Expand Down Expand Up @@ -202,6 +202,12 @@ def _get_entries(self, which, chunk_size=None, last=None):
(:last_entry_updated, :last_feed_url, :last_entry_id)
"""

where_feed_snippet = ''
if feed_url:
where_feed_snippet = """
AND feeds.url = :feed_url
"""

cursor = self.db.execute("""
SELECT
feeds.url,
Expand All @@ -221,6 +227,7 @@ def _get_entries(self, which, chunk_size=None, last=None):
WHERE
feeds.url = entries.feed
{where_read_snippet}
{where_feed_snippet}
{where_next_snippet}
ORDER BY
entries.updated DESC,
Expand All @@ -241,7 +248,7 @@ def _get_entries(self, which, chunk_size=None, last=None):
entry = Entry._make(entry)
yield feed, entry

def get_entries(self, which='all'):
def get_entries(self, which='all', feed_url=None):
if which not in ('all', 'unread', 'read'):
raise ValueError("which should be one of ('all', 'read', 'unread')")
chunk_size = self._get_entries_chunk_size
Expand All @@ -251,6 +258,7 @@ def get_entries(self, which='all'):

entries = self._get_entries(
which=which,
feed_url=feed_url,
chunk_size=chunk_size,
last=last,
)
Expand Down
22 changes: 22 additions & 0 deletions tests/test_reader.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,28 @@ def test_get_entries_which(reader):
set(reader.get_entries(which='bad which'))


def test_get_entries_feed_url(reader):
parser = Parser()
reader._parse = parser

one = parser.feed(1, datetime(2010, 1, 1))
entry_one = parser.entry(1, 1, datetime(2010, 1, 1))
two = parser.feed(2, datetime(2010, 2, 1))
entry_two = parser.entry(2, 2, datetime(2010, 2, 1))
reader.add_feed(one.url)
reader.add_feed(two.url)
reader.update_feeds()

assert set(reader.get_entries()) == {(one, entry_one), (two, entry_two)}
assert set(reader.get_entries(feed_url=one.url)) == {(one, entry_one)}
assert set(reader.get_entries(feed_url=two.url)) == {(two, entry_two)}

# TODO: Should this raise an exception?
assert set(reader.get_entries(feed_url='bad feed')) == set()

# TODO: How do we test the combination between which and feed_url?


def test_get_feeds(reader):
parser = Parser()
reader._parse = parser
Expand Down

0 comments on commit f7526c3

Please sign in to comment.