Exemplo n.º 1
0
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'))
Exemplo n.º 2
0
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'))
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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))