def to_str(self, fields: Optional[list[str]]=None, delimiter: str ='|'):
if not fields:
fields = [str(k) for k in self.__dict__.keys()]
- lst = [str(v) for k,v in self.__dict__.items() if k in fields]
+ lst = [str(self.__dict__[f]) for f in fields]
return delimiter.join(lst)
def to_dict(self):
writer.writeheader()
for item in self:
writer.writerow(item.to_dict())
-
+
def to_stdout(self, fields=None, show_header=False, delimiter="|"):
if not self:
raise NomError("There are no entries to write.")
if show_header:
- headers = next(iter(self)).get_fieldnames()
- print(delimiter.join(headers))
+ valid_fields = next(iter(self)).get_fieldnames()
+ header = [f for f in fields if f in valid_fields]
+ print(delimiter.join(header))
for item in self:
- print(item.to_str(fields=fields, delimiter=delimiter))
-
\ No newline at end of file
+ print(item.to_str(fields=fields, delimiter=delimiter))
\ No newline at end of file
entry_subparsers = entry_parser.add_subparsers(dest='entry_command', help='Dispatches entry commands.')
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_show_parser.add_argument('--show-header', action='store_true', help="when specified, show the column names, not just the columns.")
+ entry_show_parser.add_argument('--field', dest="fields", nargs="*", help="specifies which columns to show")
entry_update_parser = entry_subparsers.add_parser('update', parents=[label_parser,filter_parser], help='update entry data.')
entry_update_parser.set_defaults(func=handle_entry_update)
entry_update_parser.add_argument('--update', dest="updates", nargs="*", help="Update values as key=value pairs")
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:
- elist.to_stdout(fields=['url'])
+ elist.to_stdout(show_header=args.show_header, fields=args.fields)
def handle_entry_update(args):
if not ENTRY_LIST.exists():
def test_nom_entry_show():
argtest('entry show')
-def test_nom_entry_show_full():
- argtest('entry show --full')
+def test_nom_entry_show_header():
+ argtest('entry show --show-header')
def test_nom_entry_show_one():
argtest('entry show 1')