feat: Add option to force-add annotations

Will turn off looking for duplicate annotations and simply add all.
This commit is contained in:
Marty Oehme 2023-10-17 22:01:41 +02:00
parent 14f1b9e75c
commit aeb18ae358
Signed by: Marty
GPG key ID: EDBF2ED917B2EF6A
2 changed files with 36 additions and 10 deletions

View file

@ -52,6 +52,11 @@ papis.config.register_default_settings(DEFAULT_OPTIONS)
), ),
help="Choose an output template to format annotations with.", help="Choose an output template to format annotations with.",
) )
@click.option(
"--force/--no-force",
"-f",
help="Do not drop any annotations because they already exist.",
)
def main( def main(
query: str, query: str,
# _papis_id: bool, # _papis_id: bool,
@ -63,6 +68,7 @@ def main(
write: bool, write: bool,
template: str, template: str,
git: bool, git: bool,
force: bool,
) -> None: ) -> None:
"""Extract annotations from any pdf document. """Extract annotations from any pdf document.
@ -84,7 +90,7 @@ def main(
formatter = formatters[template] formatter = formatters[template]
run(documents, edit=manual, write=write, git=git, formatter=formatter) run(documents, edit=manual, write=write, git=git, formatter=formatter, force=force)
def run( def run(
@ -93,11 +99,12 @@ def run(
edit: bool = False, edit: bool = False,
write: bool = False, write: bool = False,
git: bool = False, git: bool = False,
force: bool = False,
) -> None: ) -> None:
annotated_docs = extractor.start(documents) annotated_docs = extractor.start(documents)
if write: if write:
exporter.to_notes( exporter.to_notes(
formatter=formatter, annotated_docs=annotated_docs, edit=edit, git=git formatter=formatter, annotated_docs=annotated_docs, edit=edit, git=git, force=force
) )
else: else:
exporter.to_stdout(formatter=formatter, annotated_docs=annotated_docs) exporter.to_stdout(formatter=formatter, annotated_docs=annotated_docs)

View file

@ -25,7 +25,11 @@ def to_stdout(formatter: Formatter, annotated_docs: list[AnnotatedDocument]) ->
def to_notes( def to_notes(
formatter: Formatter, annotated_docs: list[AnnotatedDocument], edit: bool, git: bool formatter: Formatter,
annotated_docs: list[AnnotatedDocument],
edit: bool,
git: bool,
force: bool,
) -> None: ) -> None:
"""Write annotations into document notes. """Write annotations into document notes.
@ -36,7 +40,7 @@ def to_notes(
for entry in annotated_docs: for entry in annotated_docs:
formatted_annotations = formatter([entry]).split("\n") formatted_annotations = formatter([entry]).split("\n")
if formatted_annotations: if formatted_annotations:
_add_annots_to_note(entry.document, formatted_annotations) _add_annots_to_note(entry.document, formatted_annotations, force=force)
if edit: if edit:
papis.commands.edit.edit_notes(entry.document, git=git) papis.commands.edit.edit_notes(entry.document, git=git)
@ -46,11 +50,26 @@ def _add_annots_to_note(
document: papis.document.Document, document: papis.document.Document,
formatted_annotations: list[str], formatted_annotations: list[str],
git: bool = False, git: bool = False,
force: bool = False,
) -> None: ) -> None:
"""Append new annotations to the end of a note. """
Append new annotations to the end of a note.
Looks through note to determine any new annotations which should be This function appends new annotations to the end of a note file. It takes in a
added and adds them to the end of the note file. document object containing the note, a list of formatted annotations to be
added, and optional flags git and force. If git is True, the changes will be
committed to git. If force is True, the annotations will be added even if they
already exist in the note.
:param document: The document object representing the note
:type document: class:`papis.document.Document`
:param formatted_annotations: A list of already formatted annotations to be added
:type formatted_annotations: list[str]
:param git: Flag indicating whether to commit changes to git, defaults to False.
:type git: bool, optional
:param force: Flag indicating whether to force adding annotations even if they
already exist, defaults to False.
:type force: bool, optional
""" """
logger.debug("Adding annotations to note.") logger.debug("Adding annotations to note.")
notes_path = papis.notes.notes_path_ensured(document) notes_path = papis.notes.notes_path_ensured(document)
@ -59,9 +78,9 @@ def _add_annots_to_note(
with open(notes_path, "r") as file_read: with open(notes_path, "r") as file_read:
existing = file_read.readlines() existing = file_read.readlines()
new_annotations: list[str] = _drop_existing_annotations( new_annotations: list[str] = []
formatted_annotations, existing if not force:
) new_annotations = _drop_existing_annotations(formatted_annotations, existing)
if not new_annotations: if not new_annotations:
return return