refactor: add utility function to exclude bibtex fields

main
Mitsuhiro Nakamura 3 years ago
parent df52580a0f
commit 040e756f21

@ -117,10 +117,7 @@ def command(conf, args):
ui.error('invalid bibfile {}.'.format(bibfile)) ui.error('invalid bibfile {}.'.format(bibfile))
# exclude bibtex fields if specified # exclude bibtex fields if specified
for item in bibentry.values(): utils.remove_bibtex_fields(bibentry, conf['main']['bibtex_field_excludes'])
for field in conf['main']['bibtex_field_excludes']:
if field in item:
del item[field]
# citekey # citekey

@ -6,7 +6,7 @@ from .. import color
from ..uis import get_ui from ..uis import get_ui
from ..endecoder import EnDecoder from ..endecoder import EnDecoder
from ..utils import resolve_citekey from ..utils import resolve_citekey, remove_bibtex_fields
from ..completion import CiteKeyCompletion from ..completion import CiteKeyCompletion
from ..events import ModifyEvent from ..events import ModifyEvent
@ -60,10 +60,7 @@ def command(conf, args):
"edited.".format(color.dye_out(citekey, 'citekey')))) "edited.".format(color.dye_out(citekey, 'citekey'))))
else: else:
# exclude bibtex fields if specified # exclude bibtex fields if specified
for item in content.values(): remove_bibtex_fields(content, conf['main']['bibtex_field_excludes'])
for field in conf['main']['bibtex_field_excludes']:
if field in item:
del item[field]
new_paper = Paper.from_bibentry(content, new_paper = Paper.from_bibentry(content,
metadata=paper.metadata) metadata=paper.metadata)

@ -5,7 +5,7 @@ import argparse
from .. import repo from .. import repo
from ..uis import get_ui from ..uis import get_ui
from .. import endecoder from .. import endecoder
from ..utils import resolve_citekey_list from ..utils import resolve_citekey_list, remove_bibtex_fields
from ..endecoder import BIBFIELD_ORDER from ..endecoder import BIBFIELD_ORDER
from ..completion import CiteKeyCompletion, CommaSeparatedListCompletion from ..completion import CiteKeyCompletion, CommaSeparatedListCompletion
@ -53,10 +53,8 @@ def command(conf, args):
for p in papers: for p in papers:
bib[p.citekey] = p.bibdata bib[p.citekey] = p.bibdata
# exclude bibtex fields if specified # exclude bibtex fields if specified
for field in conf['main']['bibtex_field_excludes']: remove_bibtex_fields(bib, conf['main']['bibtex_field_excludes'])
if field in bib[p.citekey]:
del bib[p.citekey][field]
exporter = endecoder.EnDecoder() exporter = endecoder.EnDecoder()
bibdata_raw = exporter.encode_bibdata(bib, args.ignore_fields) bibdata_raw = exporter.encode_bibdata(bib, args.ignore_fields)

@ -11,6 +11,7 @@ from .. import content
from ..paper import Paper from ..paper import Paper
from ..uis import get_ui from ..uis import get_ui
from ..content import system_path, read_text_file from ..content import system_path, read_text_file
from ..utils import remove_bibtex_fields
from ..command_utils import add_doc_copy_arguments from ..command_utils import add_doc_copy_arguments
@ -40,7 +41,7 @@ def parser(subparsers, conf):
return parser 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. """Extract list of papers found in bibliographic files in path.
The behavior is to: The behavior is to:
@ -64,10 +65,7 @@ def many_from_path(ui, bibpath, bibfield_excludes=[], ignore=False):
try: try:
bibentry = coder.decode_bibdata(read_text_file(filepath)) bibentry = coder.decode_bibdata(read_text_file(filepath))
# exclude bibtex fields if specified # exclude bibtex fields if specified
for item in bibentry.values(): remove_bibtex_fields(bibentry, excluded_bibtex_fields)
for field in bibfield_excludes:
if field in item:
del item[field]
biblist.append(bibentry) biblist.append(bibentry)
except coder.BibDecodingError: except coder.BibDecodingError:
error = "Could not parse bibtex at {}.".format(filepath) error = "Could not parse bibtex at {}.".format(filepath)
@ -107,7 +105,7 @@ def command(conf, args):
rp = repo.Repository(conf) rp = repo.Repository(conf)
# Extract papers from bib # Extract papers from bib
papers = many_from_path(ui, bibpath, 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) ignore=args.ignore_malformed)
keys = args.keys or papers.keys() keys = args.keys or papers.keys()
for k in keys: for k in keys:

@ -87,3 +87,9 @@ def standardize_doi(doi):
new_doi = match.group(0) new_doi = match.group(0)
return new_doi 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]

Loading…
Cancel
Save