Compare commits

...

2 Commits

Author SHA1 Message Date
Marty Oehme 5a99665d7e
chore: Fix black fmt
ci/woodpecker/push/test unknown status Details
ci/woodpecker/push/lint Pipeline failed Details
ci/woodpecker/push/static_analysis Pipeline was successful Details
2023-10-17 22:05:12 +02:00
Marty Oehme aeb18ae358
feat: Add option to force-add annotations
Will turn off looking for duplicate annotations and simply add all.
2023-10-17 22:05:11 +02:00
3 changed files with 41 additions and 16 deletions

View File

@ -8,10 +8,7 @@ import papis.strings
from papis.document import Document
from papis_extract import extractor, exporter
from papis_extract.formatter import (
Formatter,
formatters
)
from papis_extract.formatter import Formatter, formatters
logger = papis.logging.get_logger(__name__)
@ -52,6 +49,11 @@ papis.config.register_default_settings(DEFAULT_OPTIONS)
),
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(
query: str,
# _papis_id: bool,
@ -63,6 +65,7 @@ def main(
write: bool,
template: str,
git: bool,
force: bool,
) -> None:
"""Extract annotations from any pdf document.
@ -84,7 +87,7 @@ def main(
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(
@ -93,11 +96,12 @@ def run(
edit: bool = False,
write: bool = False,
git: bool = False,
force: bool = False,
) -> None:
annotated_docs = extractor.start(documents)
if write:
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:
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(
formatter: Formatter, annotated_docs: list[AnnotatedDocument], edit: bool, git: bool
formatter: Formatter,
annotated_docs: list[AnnotatedDocument],
edit: bool,
git: bool,
force: bool,
) -> None:
"""Write annotations into document notes.
@ -36,7 +40,7 @@ def to_notes(
for entry in annotated_docs:
formatted_annotations = formatter([entry]).split("\n")
if formatted_annotations:
_add_annots_to_note(entry.document, formatted_annotations)
_add_annots_to_note(entry.document, formatted_annotations, force=force)
if edit:
papis.commands.edit.edit_notes(entry.document, git=git)
@ -46,11 +50,26 @@ def _add_annots_to_note(
document: papis.document.Document,
formatted_annotations: list[str],
git: bool = False,
force: bool = False,
) -> 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
added and adds them to the end of the note file.
This function appends new annotations to the end of a note file. It takes in a
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.")
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:
existing = file_read.readlines()
new_annotations: list[str] = _drop_existing_annotations(
formatted_annotations, existing
)
new_annotations: list[str] = []
if not force:
new_annotations = _drop_existing_annotations(formatted_annotations, existing)
if not new_annotations:
return

View File

@ -26,13 +26,14 @@ def test_formatting_replacements(fmt_string, expected):
assert sut.format(fmt_string) == expected
@pytest.mark.parametrize(
"fmt_string,expected",
[
("{{doc.title}}", "document-title"),
("{{doc.title}}-{{doc.author}}", "document-title-document-author"),
("{{quote}} ({{doc.author}})", "I am the text value (document-author)"),
]
],
)
def test_formatting_document_access(fmt_string, expected):
sut = Annotation(
@ -40,10 +41,11 @@ def test_formatting_document_access(fmt_string, expected):
text="I am the text value",
content="Whereas I represent the note",
)
doc = Document(data= {"title": "document-title", "author": "document-author"})
doc = Document(data={"title": "document-title", "author": "document-author"})
assert sut.format(fmt_string, doc=doc) == expected
def test_colorname_matches_exact():
sut = Annotation("testfile", colors=(1.0, 0.0, 0.0), minimum_similarity_color=1.0)
c_name = sut.colorname