Source code for bib_cleaner.cli

"""Console script for bib_cleaner."""
import argparse
import sys
from .bib_cleaner import tex_to_tags, get_minimal_bib
import os


[docs]def main(): """Console script for bib_cleaner.""" parser = argparse.ArgumentParser( description="Produce a minimal bib file with only the entries found in your .tex file(s)" ) parser.add_argument( "masterfile", type=str, nargs=1, help="master bib file with used and unused citations (.bib)", ) parser.add_argument( "-t", "--texfiles", type=str, nargs="+", help="content files to select entries from (.tex)", ) parser.add_argument( "-o", "--outputbib", type=str, nargs=1, help="output file name with extension", default=["new.bib"], ) # parser.add_argument('--version', action='version', version='%(prog)s') args = parser.parse_args() bib_file = args.masterfile[0] if args.texfiles is None: all_files = os.listdir() tex_files = [] for a_file in all_files: if a_file.endswith(".tex"): if not a_file.startswith("__"): tex_files.append(a_file) if tex_files == []: print("No TeX files found, aborting!") return -1 print(f"Using TeX files {tex_files}") else: tex_files = args.texfiles all_tags = tex_to_tags(tex_files=tex_files) new_contents, used_bibs, total_bibs, len_contents = get_minimal_bib( master_bib=bib_file, all_tags=all_tags ) with open(args.outputbib[0], "w", encoding="utf-8") as f: f.write(new_contents) with open(args.outputbib[0]) as f: new_contents_verify = f.read() new_lines_verify = new_contents_verify.split("\n") delta = len_contents - len(new_lines_verify) pct_change = delta / len_contents * 100 delta_citations = total_bibs - used_bibs pct_change_citations = delta_citations / total_bibs * 100 print( f"Removed {delta} lines ({delta_citations} citations) from {bib_file} with {pct_change:.2f}% ({pct_change_citations:.2f}%) reduction!" ) print(f"New citations were saved in : {args.outputbib[0]}") return 0
if __name__ == "__main__": sys.exit(main()) # pragma: no cover