items = {item for item in self if predicate(item)}
return self.__class__(items)
- #def to_stdout(self, fields=[]):
- # for item in self.items:
- # print(item.to_str(fields=fields, delimiter="\t"))
-
@classmethod
def from_csv(cls, file: Path, delimiter="|"):
items = []
# Label Parser
label_parser = ArgumentParser(add_help=False)
label_parser.add_argument('label', nargs='*', type=int)
+
+ # Filter Parser
+ filter_parser = ArgumentParser(add_help=False)
+ filter_parser.add_argument("--select", type =str, help="specifies a field=value criteria to select by")
# Main Parser
parser = ArgumentParser(description="Nom Script")
# Entry subcommand
entry_parser = subparsers.add_parser('entry', help='Dispatches commands that operate on a table of entries.')
entry_subparsers = entry_parser.add_subparsers(dest='entry_command', help='Dispatches entry commands.')
- entry_show_parser = entry_subparsers.add_parser('show', parents=[label_parser], help='Show entries.')
+ entry_show_parser = entry_subparsers.add_parser('show', parents=[label_parser,filter_parser], help='Show entries.')
entry_show_parser.set_defaults(func=handle_entry_show)
entry_show_parser.add_argument('--full', action='store_true', help="when specified, show the full entry data, not just the URLs.")
entry_update_parser = entry_subparsers.add_parser('update', parents=[label_parser], help='update entry data.')
elist = EntryList.from_csv(ENTRY_LIST)
if args.label:
elist = elist.select(lambda e: e.label in args.label)
+ if args.select:
+ [k, v] = args.select.split('=')
+ elist = elist.select(lambda e: str(e.__dict__[k]) == v)
if args.full:
elist.to_stdout(show_header=True)
else:
def test_nom_entry_show_one():
argtest('entry show 1')
+def test_nom_entry_show_unviewed():
+ argtest('entry show --select viewed=False')
+
def test_nom_entry_update_no_elist(tmp_path):
ENTRY_LIST = tmp_path / "entry_list" / "default"
argtest('entry update')