From 99c617965ff7f92be13d1d8dd8cf5f02d9e0e9b8 Mon Sep 17 00:00:00 2001 From: Kyle Bowman Date: Sun, 26 Jan 2025 21:19:14 -0500 Subject: [PATCH] add convenience commands: open/ignore --- src/nom/base.py | 2 +- src/nom/main.py | 23 ++++++++++++++++++++++- tests/test_cli.py | 7 +++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/nom/base.py b/src/nom/base.py index 8f8ec72..8fa36ac 100644 --- a/src/nom/base.py +++ b/src/nom/base.py @@ -98,7 +98,7 @@ class NomList(set): def to_stdout(self, fields=None, show_header=False, delimiter="\t"): if not self: - raise NomError("There are no entries to write.") + print("No entries match the selection.") if show_header: valid_fields = next(iter(self)).get_fieldnames() if fields: diff --git a/src/nom/main.py b/src/nom/main.py index 2e37448..85569d8 100644 --- a/src/nom/main.py +++ b/src/nom/main.py @@ -38,6 +38,13 @@ def cli(): entry_update_parser.add_argument('--update', dest="updates", nargs="*", help="Update values as key=value pairs") entry_update_parser.add_argument('--dry-run', action="store_true", help="when specified, show changes but don't act") + # Convenience Commands + entry_open_parser = entry_subparsers.add_parser("open", parents=[label_parser,filter_parser], help="lists selected urls for piping and marks viewed") + entry_open_parser.set_defaults(func=handle_entry_open) + entry_ignore_parser = entry_subparsers.add_parser("ignore", parents=[label_parser,filter_parser], help="marks selection viewed") + entry_ignore_parser.add_argument('--dry-run', action="store_true", help="when specified, show changes but don't act") + entry_ignore_parser.set_defaults(func=handle_entry_ignore) + # Feed subcommand feed_parser = subparsers.add_parser('feed', help='Dispatches commands that operate on a table of feeds.') feed_subparsers = feed_parser.add_subparsers(dest='feed_command', help='Dispatches feed commands.') @@ -79,7 +86,8 @@ def handle_entry_update(args): if e in sublist: if not args.dry_run: e.update(key,val) - print(f"For {e.label}, updating {key} from {e.__dict__[key]} to {val}") + else: + print(f"For {e.label}, updating {key} from {e.__dict__[key]} to {val}") else: feedlist=FeedList.from_csv(FEED_LIST) for flitem in feedlist: @@ -88,6 +96,19 @@ def handle_entry_update(args): print(f"Updating from [{str(flitem)}]") elist.to_csv(ENTRY_LIST) +def handle_entry_open(args): + args.show_header=False + args.delim="|" + args.fields=["url"] + handle_entry_show(args) + args.updates=["viewed=True"] + args.dry_run=False + handle_entry_update(args) + +def handle_entry_ignore(args): + args.updates=["viewed=True"] + handle_entry_update(args) + def handle_feed_show(args): feedlist=FeedList.from_csv(FEED_LIST) feedlist.to_stdout(show_header=True) diff --git a/tests/test_cli.py b/tests/test_cli.py index 6c0e15d..69b7e37 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -46,3 +46,10 @@ def test_nom_entry_update_val(): argv='entry update 1 --update url=https://path/to/new/url'.split(' ') args = cli().parse_args(argv) assert True + +# Passes on it's own. Fails as a suite... +def test_nom_entry_open(): + argtest("entry open 2") + +def test_nom_entry_ignore(): + argtest("entry ignore 1 --dry-run") \ No newline at end of file -- 2.39.5