def _unique(ctx: click.Context, key: str, o: Optional[str]) -> None: """Remove repetitions""" docs = ctx.obj['documents'] unique_docs = [] duplis_docs = [] while True: if not len(docs): break doc = docs.pop(0) unique_docs.append(doc) indices = [] for i, bottle in enumerate(docs): if doc.get(key) == bottle.get(key): indices.append(i) duplis_docs.append(bottle) logger.info('{}. repeated {} ⇒ {}'.format( len(duplis_docs), key, doc.get(key))) docs = [d for (i, d) in enumerate(docs) if i not in indices] logger.info("Unique : {}".format(len(unique_docs))) logger.info("Discarded: {}".format(len(duplis_docs))) ctx.obj['documents'] = unique_docs if o: with open(o, 'w+') as f: logger.info('Saving {1} documents in {0}..'.format( o, len(duplis_docs))) f.write(papis.commands.export.run(duplis_docs, to_format='bibtex'))
def _save(ctx: click.Context, bibfile: str, force: bool) -> None: """Save the documents imported in bibtex format""" docs = ctx.obj['documents'] if not force: c = papis.tui.utils.confirm('Are you sure you want to save?') if not c: print('Not saving..') return with open(bibfile, 'w+') as fd: logger.info('Saving {1} documents in {0}..'.format(bibfile, len(docs))) fd.write(papis.commands.export.run(docs, to_format='bibtex'))
def _ref(ctx: click.Context, out: Optional[str]) -> None: """Print the reference for a document""" docs = ctx.obj['documents'] docs = papis.api.pick_doc(docs) if not docs: return ref = docs[0]["ref"] if out: with open(out, 'w+') as fd: fd.write(ref) else: print(ref)
def _filter_cited(ctx: click.Context, _files: List[str]) -> None: """ Filter cited documents from the read bib file e.g. papis bibtex read main.bib filter-cited -f main.tex save cited.bib """ found = [] for f in _files: with open(f) as fd: text = fd.read() for doc in ctx.obj['documents']: if re.search(doc["ref"], text): found.append(doc) logger.info('%s documents cited', len(found)) ctx.obj["documents"] = found
def _iscited(ctx: click.Context, _files: List[str]) -> None: """ Check which documents are not cited e.g. papis bibtex iscited -f main.tex -f chapter-2.tex """ unfound = [] for f in _files: with open(f) as fd: text = fd.read() for doc in ctx.obj['documents']: if not re.search(doc["ref"], text): unfound.append(doc) logger.info('%s documents not cited', len(unfound)) for j, doc in enumerate(unfound): logger.info('%s {c.Back.BLACK}{c.Fore.RED}%-80.80s{c.Style.RESET_ALL}', j, papis.document.describe(doc))