From 860181e278e955cbbf4b09761727552f213fb4fd Mon Sep 17 00:00:00 2001 From: Olivier Mangin Date: Sun, 7 Jan 2018 13:40:06 -0500 Subject: [PATCH] Adds argument to ignore fields in export. [Closes #67] `pubs export --ignore-fields abstract,note CiteKey` --- pubs/commands/export_cmd.py | 13 ++++++++++++- tests/test_usecase.py | 10 ++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/pubs/commands/export_cmd.py b/pubs/commands/export_cmd.py index 1224a03..6cc2434 100644 --- a/pubs/commands/export_cmd.py +++ b/pubs/commands/export_cmd.py @@ -1,5 +1,7 @@ from __future__ import print_function +import argparse + from .. import repo from ..uis import get_ui from .. import endecoder @@ -7,8 +9,17 @@ from ..utils import resolve_citekey_list from ..completion import CiteKeyCompletion +class CommaSeparatedList(argparse.Action): + + def __call__(self, parser, namespace, values, option_string=None): + setattr(namespace, self.dest, [s for s in values.split(',') if s]) + + def parser(subparsers, conf): parser = subparsers.add_parser('export', help='export bibliography') + parser.add_argument( + '--ignore-fields', default=[], action=CommaSeparatedList, + help='exclude field(s) from output (comma separated if multiple)') # parser.add_argument('-f', '--bib-format', default='bibtex', # help='export format') parser.add_argument('citekeys', nargs='*', help='one or several citekeys' @@ -36,7 +47,7 @@ def command(conf, args): bib[p.citekey] = p.bibdata exporter = endecoder.EnDecoder() - bibdata_raw = exporter.encode_bibdata(bib) + bibdata_raw = exporter.encode_bibdata(bib, args.ignore_fields) ui.message(bibdata_raw) rp.close() diff --git a/tests/test_usecase.py b/tests/test_usecase.py index 78c3579..0b27780 100644 --- a/tests/test_usecase.py +++ b/tests/test_usecase.py @@ -669,6 +669,16 @@ class TestUsecase(DataCommandTestCase): self.assertEqual(endecoder.EnDecoder().decode_bibdata(outs[2]), fixtures.page_bibentry) + def test_export_ignore_field(self): + cmds = ['pubs init', + ('pubs add', [str_fixtures.bibtex_external0]), + 'pubs export --ignore-fields author,title Page99', + ] + outs = self.execute_cmds(cmds) + expected = endecoder.EnDecoder().encode_bibdata( + fixtures.page_bibentry, ignore_fields=['author', 'title']) + self.assertEqual(outs[2], expected + os.linesep) + def test_import(self): cmds = ['pubs init', 'pubs import data/',