From 824a2f71e0f7f2cfc5950648390ed25e5e85a68b Mon Sep 17 00:00:00 2001 From: Adrian Damian Date: Mon, 29 Jan 2018 22:42:30 +0200 Subject: [PATCH] Add remove_feed reader method. Closes #7. --- reader/cli.py | 13 +++++++++++++ reader/reader.py | 15 +++++++++++++++ tests/test_reader.py | 15 +++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/reader/cli.py b/reader/cli.py index dc9fe457..7957cc73 100644 --- a/reader/cli.py +++ b/reader/cli.py @@ -63,6 +63,19 @@ def add(db_path, url, update, verbose): reader.update_feed(url) +@cli.command() +@click.argument('url') +@click.option('-v', '--verbose', count=True) +@click.pass_obj +def remove(db_path, url, verbose): + setup_logging(verbose) + try: + reader = Reader(db_path) + except Exception as e: + abort("{}: {}", db_path, e) + reader.remove_feed(url) + + @cli.command() @click.option('-v', '--verbose', count=True) @click.pass_obj diff --git a/reader/reader.py b/reader/reader.py index f3897aec..2f4bdd6a 100644 --- a/reader/reader.py +++ b/reader/reader.py @@ -54,6 +54,21 @@ def add_feed(self, url): VALUES (:url); """, locals()) + def remove_feed(self, url): + with self.db: + self.db.execute(""" + DELETE FROM entry_tags + WHERE feed = :url; + """, locals()) + self.db.execute(""" + DELETE FROM entries + WHERE feed = :url; + """, locals()) + self.db.execute(""" + DELETE FROM feeds + WHERE url = :url; + """, locals()) + def update_feeds(self): cursor = self.db.execute(""" SELECT url, updated, http_etag, http_last_modified, stale FROM feeds diff --git a/tests/test_reader.py b/tests/test_reader.py index 22e193d3..2bbb0a96 100644 --- a/tests/test_reader.py +++ b/tests/test_reader.py @@ -181,3 +181,18 @@ def test_mark_as_read_unread(reader, feed_type): (feed, entry), = list(reader.get_entries()) assert not entry.read + +@pytest.mark.parametrize('feed_type', ['rss', 'atom']) +def test_add_remove_feed(reader, feed_type): + + feed = make_feed(1, datetime(2010, 1, 1)) + entry = make_entry(1, datetime(2010, 1, 1)) + reader.add_feed(feed.url) + write_feed(feed_type, feed, [entry]) + reader.update_feeds() + + assert set(reader.get_entries()) == {(feed, entry)} + + reader.remove_feed(feed.url) + assert set(reader.get_entries()) == set() +