Add confirmation to many-paper extraction

This commit is contained in:
Marty Oehme 2022-12-24 14:34:18 +01:00
parent 488dd0eb41
commit ca56bf3cdb
Signed by: Marty
GPG key ID: 73BA40D5AFAF49C9

View file

@ -8,11 +8,12 @@ import Levenshtein
from pubs.plugins import PapersPlugin from pubs.plugins import PapersPlugin
from pubs.events import DocAddEvent, NoteEvent from pubs.events import DocAddEvent, NoteEvent
from pubs import repo from pubs import repo, pretty
from pubs.utils import resolve_citekey_list from pubs.utils import resolve_citekey_list
from pubs.content import check_file, read_text_file, write_file from pubs.content import check_file, read_text_file, write_file
from pubs.query import get_paper_filter from pubs.query import get_paper_filter
CONFIRMATION_PAPER_THRESHOLD=5
class ExtractPlugin(PapersPlugin): class ExtractPlugin(PapersPlugin):
"""Extract annotations from any pdf document. """Extract annotations from any pdf document.
@ -137,20 +138,25 @@ class ExtractPlugin(PapersPlugin):
""" """
papers = [] papers = []
if not args.is_query: if not args.is_query:
citekeys = resolve_citekey_list( keys = resolve_citekey_list(
self.repository, conf, args.query, ui=self.ui, exit_on_fail=True self.repository, conf, args.query, ui=self.ui, exit_on_fail=True
) )
for key in citekeys: for key in keys:
papers.append(self.repository.pull_paper(key)) papers.append(self.repository.pull_paper(key))
else: else:
papers = filter( papers = list(filter(
get_paper_filter( get_paper_filter(
args.query, args.query,
case_sensitive=args.case_sensitive, case_sensitive=args.case_sensitive,
strict=args.strict, strict=args.strict,
), ),
self.repository.all_papers(), self.repository.all_papers(),
) ))
if len(papers) > CONFIRMATION_PAPER_THRESHOLD:
self.ui.message('\n'.join(
pretty.paper_oneliner(p, citekey_only=False, max_authors=conf['main']['max_authors'])
for p in papers))
self.ui.input_yn(question=f"Extract annotations for these papers?", default='y')
return papers return papers
def _get_file(self, paper): def _get_file(self, paper):