diff --git a/pubs/commands/add_cmd.py b/pubs/commands/add_cmd.py index e143fb2..88091f6 100644 --- a/pubs/commands/add_cmd.py +++ b/pubs/commands/add_cmd.py @@ -117,10 +117,7 @@ def command(conf, args): ui.error('invalid bibfile {}.'.format(bibfile)) # exclude bibtex fields if specified - for item in bibentry.values(): - for field in conf['main']['bibtex_field_excludes']: - if field in item: - del item[field] + utils.remove_bibtex_fields(bibentry, conf['main']['bibtex_field_excludes']) # citekey diff --git a/pubs/commands/edit_cmd.py b/pubs/commands/edit_cmd.py index a3126f9..591c2d1 100644 --- a/pubs/commands/edit_cmd.py +++ b/pubs/commands/edit_cmd.py @@ -6,7 +6,7 @@ from .. import color from ..uis import get_ui from ..endecoder import EnDecoder -from ..utils import resolve_citekey +from ..utils import resolve_citekey, remove_bibtex_fields from ..completion import CiteKeyCompletion from ..events import ModifyEvent @@ -60,10 +60,7 @@ def command(conf, args): "edited.".format(color.dye_out(citekey, 'citekey')))) else: # exclude bibtex fields if specified - for item in content.values(): - for field in conf['main']['bibtex_field_excludes']: - if field in item: - del item[field] + remove_bibtex_fields(content, conf['main']['bibtex_field_excludes']) new_paper = Paper.from_bibentry(content, metadata=paper.metadata) diff --git a/pubs/commands/export_cmd.py b/pubs/commands/export_cmd.py index 042d053..c3c3a89 100644 --- a/pubs/commands/export_cmd.py +++ b/pubs/commands/export_cmd.py @@ -5,7 +5,7 @@ import argparse from .. import repo from ..uis import get_ui from .. import endecoder -from ..utils import resolve_citekey_list +from ..utils import resolve_citekey_list, remove_bibtex_fields from ..endecoder import BIBFIELD_ORDER from ..completion import CiteKeyCompletion, CommaSeparatedListCompletion @@ -53,10 +53,8 @@ def command(conf, args): for p in papers: bib[p.citekey] = p.bibdata - # exclude bibtex fields if specified - for field in conf['main']['bibtex_field_excludes']: - if field in bib[p.citekey]: - del bib[p.citekey][field] + # exclude bibtex fields if specified + remove_bibtex_fields(bib, conf['main']['bibtex_field_excludes']) exporter = endecoder.EnDecoder() bibdata_raw = exporter.encode_bibdata(bib, args.ignore_fields) diff --git a/pubs/commands/import_cmd.py b/pubs/commands/import_cmd.py index c7bf5c6..918709d 100644 --- a/pubs/commands/import_cmd.py +++ b/pubs/commands/import_cmd.py @@ -11,6 +11,7 @@ from .. import content from ..paper import Paper from ..uis import get_ui from ..content import system_path, read_text_file +from ..utils import remove_bibtex_fields from ..command_utils import add_doc_copy_arguments @@ -40,7 +41,7 @@ def parser(subparsers, conf): return parser -def many_from_path(ui, bibpath, bibfield_excludes=[], ignore=False): +def many_from_path(ui, bibpath, excluded_bibtex_fields=[], ignore=False): """Extract list of papers found in bibliographic files in path. The behavior is to: @@ -64,10 +65,7 @@ def many_from_path(ui, bibpath, bibfield_excludes=[], ignore=False): try: bibentry = coder.decode_bibdata(read_text_file(filepath)) # exclude bibtex fields if specified - for item in bibentry.values(): - for field in bibfield_excludes: - if field in item: - del item[field] + remove_bibtex_fields(bibentry, excluded_bibtex_fields) biblist.append(bibentry) except coder.BibDecodingError: error = "Could not parse bibtex at {}.".format(filepath) @@ -107,7 +105,7 @@ def command(conf, args): rp = repo.Repository(conf) # Extract papers from bib papers = many_from_path(ui, bibpath, - bibfield_excludes=conf['main']['bibtex_field_excludes'], + excluded_bibtex_fields=conf['main']['bibtex_field_excludes'], ignore=args.ignore_malformed) keys = args.keys or papers.keys() for k in keys: diff --git a/pubs/utils.py b/pubs/utils.py index 120edfd..8c3ebbf 100644 --- a/pubs/utils.py +++ b/pubs/utils.py @@ -87,3 +87,9 @@ def standardize_doi(doi): new_doi = match.group(0) return new_doi + +def remove_bibtex_fields(bibentry, excluded_bibtex_fields=[]): + for item in bibentry.values(): + for field in excluded_bibtex_fields: + if field in item: + del item[field]